Textarea
Mehrzeiliger Text, der mit dem Geschriebenen zwischen einer minimalen und maximalen Zeilenzahl sanft wächst, mit Zählern, Validierung und Absende-Tastenkürzel.
Grows with your text, then scrolls.
pnpm dlx shadcn@latest add https://hextaui.com/r/textarea.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @base-ui/react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/textarea.tsx components/ui/input.tsx components/ui/number-flow.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Die Box wächst mit deinem Text und gleitet zu jeder neuen Zeile, statt zu springen, von minRows bis maxRows, und scrollt dann. Das Tippen wird nie durch die Animation verzögert.
Mit einem Tastenkürzel senden
submitOnShortcut sendet das Formular mit ⌘ + Enter oder Strg + Enter ab. Enter allein beginnt weiterhin eine neue Zeile.
Zeichenzähler
Mit maxLength in einem Field zählt FieldCounter beim Tippen mit und gibt einen Stups, wenn du das Limit erreichst.
Zeilen
minRows und maxRows legen fest, wo das Wachsen beginnt und endet.
Feste Größe
autoResize={false} behält eine feste Höhe mit einem vertikalen Resize-Griff.
Zustände
Deaktiviert, schreibgeschützt und ungültig. Ungültige Textareas wackeln, wenn ein Formular-Submit fehlschlägt.
Rechts nach links
Text, Platzhalter und Caret folgen der Leserichtung.
| Taste | Aktion |
|---|---|
| Enter | Beginnt eine neue Zeile. |
| ⌘Enter | Sendet das Formular ab, mit submitOnShortcut. Strg + Enter unter Windows und Linux. |
- Beschrifte es mit
FieldLabeloderaria-label. - Auf Touchscreens ist der Text mindestens 16px, damit iOS beim Fokussieren nicht hineinzoomt.
- Das Tastenkürzel wartet, während eine Eingabemethode komponiert, sodass das Bestätigen eines japanischen oder chinesischen Worts nie die Nachricht sendet.
- Bei reduzierter Bewegung ändert die Box ihre Größe sofort.
| Prop | Typ | Standard |
|---|---|---|
autoResizeWächst mit dem Text, statt eine feste Höhe zu haben. | boolean | true |
minRows | number | 3 |
maxRows | number | 10 |
submitOnShortcutSende das übergeordnete Formular mit ⌘/Strg + Enter ab. | boolean | false |
shakeWackelt, wenn ein Formular-Submit es als ungültig findet. | boolean | true |
| Attribut | Beschreibung |
|---|---|
data-slot="textarea" | Die Textarea. |
data-autoresize | Vorhanden, wenn es mit seinem Text wächst. |
--textarea-min-rows / --textarea-max-rows | Aus minRows und maxRows gesetzt. |
- InputEin Texteingabefeld mit drei Größen, ungültigen und schreibgeschützten Zuständen, nativem Validierungsstyling und einer 16-px-Schrift für Touch, damit Smartphones nie hineinzoomen.
- useAutosizeLässt eine Textarea mit dem Geschriebenen zwischen minimaler und maximaler Höhe wachsen und animiert jede Änderung, ohne je den Text anzufassen.
- useComposedRefBehält eine Ref auf dein eigenes Element und leitet sie trotzdem an die Ref weiter, die der Parent übergeben hat.
- useInvalidShakeLässt ein Formularelement wackeln, wenn ein Absendeversuch es als ungültig findet, und nie, während noch getippt wird.
- CalendarEin Datumsraster für Einzel-, Bereichs- und Mehrfachauswahl, mit gleitenden Monaten, Bereichsvorschau und Tagen in Touch-Größe.
- CheckboxEine Checkbox, deren Häkchen sich einzeichnet, mit unbestimmten übergeordneten Elementen, Gruppen und Labels, die ihren Hover teilen.
In Blocks verwendet
Blocks, die auf Textarea aufbauen.
- TeamTeammitglieder und Einladungen für die Workspace-Einstellungen eines KI-Produkts. Eine Seat-Anzeige, die die Einladungen in der Vorschau zeigt, die du gerade tippst, ein Einladungsfeld, das eine eingefügte Liste in geprüfte Chips verwandelt, Mitglieder mit Rollen, Suche, Filtern und Sortierung, ausstehende Einladungen mit Cooldown fürs erneute Senden und kopierbaren Links, Eigentümerwechsel mit getippter Bestätigung und Entfernen mit Rückgängig.
- Tool CallsZeige, was ein Agent tut, eine Zeile pro Schritt. Lesen und Suchen werden zu einer kurzen Zusammenfassung gefaltet, während Änderungen, Befehle, Freigaben und Fehler sichtbar bleiben. Jeder Schritt öffnet sich zu einer echten Ansicht: der Datei, dem Diff, dem Terminal oder den Ergebnissen. Jeder Tool-Zustand des AI SDK ist abgedeckt, einschließlich Freigaben mit der Möglichkeit, stattdessen eine Begründung anzugeben.