TextArea
Pre-alphaThe registry and the CLI are not published yet.Roadmap

TextArea

Multiline input that can grow with its content.

Review

Post

Your review

Great little café. The flat white was excellent and the staff remembered my name on the second visit. It gets loud around noon

Be specific, it helps others.128 / 500
Owner reply

No reply yet.

Installation

npx axiom add text-area
pnpm dlx axiom add text-area
yarn dlx axiom add text-area
bun x axiom add text-area

Also copies input: TextArea uses its tokens, field layout and use-input.ts.

Usage

import { TextArea } from "@/components/ui/text-area";

<TextArea label="Message" autoGrow value={message} onChangeText={setMessage} />;

Props

TextArea accepts the same props as Input (label, helper, error, disabled, required, containerStyle, ref, and every TextInput prop) except prefix, suffix and size, plus:

PropTypeDefaultDescription
autoGrowbooleanfalseThe field gets taller as lines are added, between minRows and maxRows. Past maxRows it scrolls.
minRowsnumber3Height when empty, in lines of body text. Lines get taller with larger system text, up to 1.5×.
maxRowsnumber8Height limit with autoGrow. Keeps the field from pushing the rest of the screen off.
maxLengthnumberHard character limit, from TextInput.
showCountbooleanfalseShows length / maxLength under the field, right-aligned. Turns red at the limit.
variant'outline' | 'filled' | 'plain''outline'plain has no border or padding, for full-screen editors. It grows to fill its container.

Use cases

Chat composer

autoGrow with a low maxRows: one line at rest, a few lines while typing, then scroll.

Are we still on for Friday?

Yes! 7pm works.

Perfect. I’ll book the table near the window, and bring the photos from last time

<TextArea
	autoGrow
	minRows={1}
	maxRows={5}
	placeholder="Message"
	value={draft}
	onChangeText={setDraft}
/>

Feedback with a character limit

showCount tells the user how much room is left before they hit the limit.

Report a problem
BugIdeaOther
What happened?

The export button does nothing on the Q3 report when I’m offline, and then it crashes after reconnecting. Steps: open the report, turn on airplane…

Keep it under 200 characters.200 / 200
<TextArea
	label="What happened?"
	maxLength={200}
	showCount
	value={text}
	onChangeText={setText}
/>

Full-screen note

variant="plain" removes the field chrome: the screen itself is the editor.

Notes

Done

14 September 2026 at 09:41

Trip ideas

Porto in October: the bookshop, a port tasting, the Ribeira at sunset.

Lisbon after, by train
<TextArea
	variant="plain"
	autoFocus
	value={body}
	onChangeText={setBody}
	containerStyle={{ flex: 1 }}
/>