Skip to content

TextArea

Multi-line text input field with optional character counter.

<TextArea label="Notes" value="" placeholder="Add notes" rows={4} />
Allows the browser to suggest a saved street address.
<TextArea
label="Street address"
value=""
placeholder="Street and apartment number"
rows={4}
autoComplete="street-address"
htmlName="street-address"
description="Allows the browser to suggest a saved street address."
/>
10/120
<TextArea
label="Notes"
value="Draft note"
placeholder="Add notes"
rows={4}
maxLength={120}
/>
51/20
<TextArea
label="Notes"
value="This text intentionally exceeds the character limit"
placeholder="Add notes"
rows={4}
maxLength={20}
/>
Markdown is supported.
<TextArea
label="Notes"
value=""
placeholder="Add notes"
rows={4}
description="Markdown is supported."
/>
<TextArea
label="Notes"
value=""
placeholder="Add notes"
rows={4}
startIcon={MessageSquare}
/>
<TextArea
label="Notes"
value=""
placeholder="Add a comment..."
rows={4}
isLabelHidden
/>
<TextArea
label="Notes"
value="Read-only content"
placeholder="Add notes"
rows={4}
isDisabled
/>
<TextArea label="Notes" value="" placeholder="Add notes" rows={4} isLoading />
<TextArea
label="Notes"
value=""
placeholder="Add notes"
rows={4}
isRequired
/>
<TextArea
label="Notes"
value=""
placeholder="Add notes"
rows={4}
status={{message: 'Notes cannot be empty.', type: 'error'}}
/>
Content may be too brief.
<TextArea
label="Notes"
value=""
placeholder="Add notes"
rows={4}
status={{message: 'Content may be too brief.', type: 'warning'}}
/>
<TextArea label="Notes" value="" placeholder="Add notes" rows={3} size="sm" />
<TextArea label="Notes" value="" placeholder="Add notes" rows={5} size="lg" />
<TextArea
label="Notes"
value="This content can be reviewed but not edited."
placeholder="Add notes"
rows={4}
isReadOnly
/>
Grows with its content instead of scrolling.
<TextArea
label="Notes"
value={LONG_NOTE}
placeholder="Add notes"
rows={undefined}
minRows={3}
description="Grows with its content instead of scrolling."
/>
Grows up to five rows, then scrolls.
<TextArea
label="Notes"
value={LONG_NOTE}
placeholder="Add notes"
rows={undefined}
minRows={2}
maxRows={5}
description="Grows up to five rows, then scrolls."
/>

Multi-line text input field with optional character counter.

When isOptional: false, isRequired: false

PropTypeDefaultDescription
autoCompleteTextareaHTMLAttributes<HTMLTextAreaElement>['autoComplete']—Native browser autofill hint. Omitted by default.
classNamestring—Additional CSS class names applied to the textarea wrapper.
data-testidstring—Test ID applied to the textarea element.
descriptionReactNode—Supporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestring—HTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
isReadOnlybooleanfalseWhether the value is displayed without allowing focus or interaction.
label*string—Field label.
labelEndReactNode—Content shown at the end of the label row, such as a link. It renders outside the label, so it does not focus the control or change its accessible name. It stays visible when isLabelHidden is true.
labelIconIconComponent—Icon shown before the label.
labelTooltipReactNode—Tooltip content shown next to the label.
maxLengthnumber—Maximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => void—Called with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => void—Called when content is pasted into the textarea.
placeholderstring—Placeholder text.
refRef<HTMLTextAreaElement>—Ref forwarded to the textarea element.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponent—Icon shown before the textarea.
statusInputStatus—Validation status displayed below the textarea.
styleCSSProperties—Inline styles applied to the textarea wrapper.
value*string—Controlled textarea value.
isOptionalfalse—
isRequiredfalse—
rowsnumber3Number of visible text rows. The user can resize the textarea vertically.
minRowsnever—
maxRowsnever—

When isOptional: false, isRequired: false

PropTypeDefaultDescription
autoCompleteTextareaHTMLAttributes<HTMLTextAreaElement>['autoComplete']—Native browser autofill hint. Omitted by default.
classNamestring—Additional CSS class names applied to the textarea wrapper.
data-testidstring—Test ID applied to the textarea element.
descriptionReactNode—Supporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestring—HTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
isReadOnlybooleanfalseWhether the value is displayed without allowing focus or interaction.
label*string—Field label.
labelEndReactNode—Content shown at the end of the label row, such as a link. It renders outside the label, so it does not focus the control or change its accessible name. It stays visible when isLabelHidden is true.
labelIconIconComponent—Icon shown before the label.
labelTooltipReactNode—Tooltip content shown next to the label.
maxLengthnumber—Maximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => void—Called with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => void—Called when content is pasted into the textarea.
placeholderstring—Placeholder text.
refRef<HTMLTextAreaElement>—Ref forwarded to the textarea element.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponent—Icon shown before the textarea.
statusInputStatus—Validation status displayed below the textarea.
styleCSSProperties—Inline styles applied to the textarea wrapper.
value*string—Controlled textarea value.
isOptionalfalse—
isRequiredfalse—
rowsnever—
minRowsnumber3Grows the textarea with its content, starting at this many rows. Setting minRows or maxRows turns on auto-grow.
maxRowsnumber—Rows the textarea grows to before it scrolls. Unbounded by default.

When isOptional: true, isRequired: false

PropTypeDefaultDescription
autoCompleteTextareaHTMLAttributes<HTMLTextAreaElement>['autoComplete']—Native browser autofill hint. Omitted by default.
classNamestring—Additional CSS class names applied to the textarea wrapper.
data-testidstring—Test ID applied to the textarea element.
descriptionReactNode—Supporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestring—HTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
isReadOnlybooleanfalseWhether the value is displayed without allowing focus or interaction.
label*string—Field label.
labelEndReactNode—Content shown at the end of the label row, such as a link. It renders outside the label, so it does not focus the control or change its accessible name. It stays visible when isLabelHidden is true.
labelIconIconComponent—Icon shown before the label.
labelTooltipReactNode—Tooltip content shown next to the label.
maxLengthnumber—Maximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => void—Called with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => void—Called when content is pasted into the textarea.
placeholderstring—Placeholder text.
refRef<HTMLTextAreaElement>—Ref forwarded to the textarea element.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponent—Icon shown before the textarea.
statusInputStatus—Validation status displayed below the textarea.
styleCSSProperties—Inline styles applied to the textarea wrapper.
value*string—Controlled textarea value.
isOptional*true—
isRequiredfalse—
rowsnumber3Number of visible text rows. The user can resize the textarea vertically.
minRowsnever—
maxRowsnever—

When isOptional: true, isRequired: false

PropTypeDefaultDescription
autoCompleteTextareaHTMLAttributes<HTMLTextAreaElement>['autoComplete']—Native browser autofill hint. Omitted by default.
classNamestring—Additional CSS class names applied to the textarea wrapper.
data-testidstring—Test ID applied to the textarea element.
descriptionReactNode—Supporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestring—HTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
isReadOnlybooleanfalseWhether the value is displayed without allowing focus or interaction.
label*string—Field label.
labelEndReactNode—Content shown at the end of the label row, such as a link. It renders outside the label, so it does not focus the control or change its accessible name. It stays visible when isLabelHidden is true.
labelIconIconComponent—Icon shown before the label.
labelTooltipReactNode—Tooltip content shown next to the label.
maxLengthnumber—Maximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => void—Called with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => void—Called when content is pasted into the textarea.
placeholderstring—Placeholder text.
refRef<HTMLTextAreaElement>—Ref forwarded to the textarea element.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponent—Icon shown before the textarea.
statusInputStatus—Validation status displayed below the textarea.
styleCSSProperties—Inline styles applied to the textarea wrapper.
value*string—Controlled textarea value.
isOptional*true—
isRequiredfalse—
rowsnever—
minRowsnumber3Grows the textarea with its content, starting at this many rows. Setting minRows or maxRows turns on auto-grow.
maxRowsnumber—Rows the textarea grows to before it scrolls. Unbounded by default.

When isOptional: false, isRequired: true

PropTypeDefaultDescription
autoCompleteTextareaHTMLAttributes<HTMLTextAreaElement>['autoComplete']—Native browser autofill hint. Omitted by default.
classNamestring—Additional CSS class names applied to the textarea wrapper.
data-testidstring—Test ID applied to the textarea element.
descriptionReactNode—Supporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestring—HTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
isReadOnlybooleanfalseWhether the value is displayed without allowing focus or interaction.
label*string—Field label.
labelEndReactNode—Content shown at the end of the label row, such as a link. It renders outside the label, so it does not focus the control or change its accessible name. It stays visible when isLabelHidden is true.
labelIconIconComponent—Icon shown before the label.
labelTooltipReactNode—Tooltip content shown next to the label.
maxLengthnumber—Maximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => void—Called with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => void—Called when content is pasted into the textarea.
placeholderstring—Placeholder text.
refRef<HTMLTextAreaElement>—Ref forwarded to the textarea element.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponent—Icon shown before the textarea.
statusInputStatus—Validation status displayed below the textarea.
styleCSSProperties—Inline styles applied to the textarea wrapper.
value*string—Controlled textarea value.
isOptionalfalse—
isRequired*true—
rowsnumber3Number of visible text rows. The user can resize the textarea vertically.
minRowsnever—
maxRowsnever—

When isOptional: false, isRequired: true

PropTypeDefaultDescription
autoCompleteTextareaHTMLAttributes<HTMLTextAreaElement>['autoComplete']—Native browser autofill hint. Omitted by default.
classNamestring—Additional CSS class names applied to the textarea wrapper.
data-testidstring—Test ID applied to the textarea element.
descriptionReactNode—Supporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestring—HTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
isReadOnlybooleanfalseWhether the value is displayed without allowing focus or interaction.
label*string—Field label.
labelEndReactNode—Content shown at the end of the label row, such as a link. It renders outside the label, so it does not focus the control or change its accessible name. It stays visible when isLabelHidden is true.
labelIconIconComponent—Icon shown before the label.
labelTooltipReactNode—Tooltip content shown next to the label.
maxLengthnumber—Maximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => void—Called with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => void—Called when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => void—Called when content is pasted into the textarea.
placeholderstring—Placeholder text.
refRef<HTMLTextAreaElement>—Ref forwarded to the textarea element.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponent—Icon shown before the textarea.
statusInputStatus—Validation status displayed below the textarea.
styleCSSProperties—Inline styles applied to the textarea wrapper.
value*string—Controlled textarea value.
isOptionalfalse—
isRequired*true—
rowsnever—
minRowsnumber3Grows the textarea with its content, starting at this many rows. Setting minRows or maxRows turns on auto-grow.
maxRowsnumber—Rows the textarea grows to before it scrolls. Unbounded by default.