Textarea
Multi-line input, with character count, with toolbar.
Pass label (and required) to name the field: iOS and web render the label above the control, while Android floats the Material 3 in-container label at the top of the multiline box, making room for itself at the user's text size and truncating on one line when it is longer than the box while the field's accessible name stays the whole label. The required star is decorative: a screen reader hears the field as required, from aria-required on the web and from its name ("Bio, required") on iOS and Android. The box fills the parent it is given; a step of its own (xs, lg, …, with start to pin it to the leading edge) or a Container step sets its measure.
Android uses the same opaque muted surface as the other filled fields. Its label uses primary-text when focused and destructive-text on error. The over-limit character count also uses destructive-text on every platform.
Inside an overlay, Escape follows the overlay's cancellation policy. A supplied onKeyPress runs first and can call preventDefault() to handle Escape locally. Cancelling an IME candidate keeps the overlay open.
iOS
Android
Web
tsx
Default
With label
Pre-filled
Required
Character counter
Formatting toolbar
Disabled
Measure
Props
Do & Don’t
With label
Don’t
A locked, single-line textarea hides long content with no way to expand.
Do
Description
Set rows for a sensible starting height so users can see their text; the field grows with the content from there.
Character counter
Don’t
A vague "over limit" message gives no number, so users cannot tell how much to trim.
Do
Bio
129 / 120
Show the live count against the cap and turn it destructive past the limit so the overage is precise. showCount treats maxLength as a soft cap and flips the count (and the field) destructive automatically once you run over.
Formatting toolbar
Don’t
Static, unclickable glyphs look like a toolbar but cannot be pressed or focused.
Do
Make each control a real focusable button that toggles an active state when pressed.
Disabled
Don’t
Dimming a textarea while leaving it editable looks disabled but still accepts input.
Do
Description
Pass disabled so the field blocks editing and focus, matching its dimmed look: the browser takes it out of the tab order, and VoiceOver and TalkBack announce it as dimmed.