Skip to content

TextArea

Multi-line text input field with optional character counter.

<TextArea label="Notes" value="" placeholder="Add notes" rows={4} />
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" />

Multi-line text input field with optional character counter.

When isOptional: false, isRequired: false

PropTypeDefaultDescription
classNamestringAdditional CSS class names applied to the textarea wrapper.
data-testidstringTest ID applied to the textarea element.
descriptionReactNodeSupporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestringHTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
label*stringField label.
labelIconIconComponentIcon shown before the label.
labelTooltipReactNodeTooltip content shown next to the label.
maxLengthnumberMaximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => voidCalled when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => voidCalled with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => voidCalled when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => voidCalled when content is pasted into the textarea.
placeholderstringPlaceholder text.
refRef<HTMLTextAreaElement>Ref forwarded to the textarea element.
rowsnumber3Number of visible text rows.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponentIcon shown before the textarea.
statusInputStatusValidation status displayed below the textarea.
styleCSSPropertiesInline styles applied to the textarea wrapper.
value*stringControlled textarea value.
isOptionalfalse
isRequiredfalse

When isOptional: true, isRequired: false

PropTypeDefaultDescription
classNamestringAdditional CSS class names applied to the textarea wrapper.
data-testidstringTest ID applied to the textarea element.
descriptionReactNodeSupporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestringHTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
label*stringField label.
labelIconIconComponentIcon shown before the label.
labelTooltipReactNodeTooltip content shown next to the label.
maxLengthnumberMaximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => voidCalled when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => voidCalled with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => voidCalled when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => voidCalled when content is pasted into the textarea.
placeholderstringPlaceholder text.
refRef<HTMLTextAreaElement>Ref forwarded to the textarea element.
rowsnumber3Number of visible text rows.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponentIcon shown before the textarea.
statusInputStatusValidation status displayed below the textarea.
styleCSSPropertiesInline styles applied to the textarea wrapper.
value*stringControlled textarea value.
isOptional*true
isRequiredfalse

When isOptional: false, isRequired: true

PropTypeDefaultDescription
classNamestringAdditional CSS class names applied to the textarea wrapper.
data-testidstringTest ID applied to the textarea element.
descriptionReactNodeSupporting text displayed below the label.
hasAutoFocusbooleanfalseWhether to focus the textarea on mount.
hasSpellCheckbooleantrueWhether the browser spellcheck is enabled.
htmlNamestringHTML name attribute.
isDisabledbooleanfalseWhether the textarea is disabled.
isLabelHiddenbooleanfalseWhether to visually hide the label.
isLoadingbooleanfalseWhether the textarea is loading.
label*stringField label.
labelIconIconComponentIcon shown before the label.
labelTooltipReactNodeTooltip content shown next to the label.
maxLengthnumberMaximum character count. Displays a counter when set.
onBlur(event: FocusEvent<HTMLTextAreaElement>) => voidCalled when the textarea loses focus.
onChange*(value: string, event: ChangeEvent<HTMLTextAreaElement>) => voidCalled with the next string value.
onFocus(event: FocusEvent<HTMLTextAreaElement>) => voidCalled when the textarea receives focus.
onPaste(event: ClipboardEvent<HTMLTextAreaElement>) => voidCalled when content is pasted into the textarea.
placeholderstringPlaceholder text.
refRef<HTMLTextAreaElement>Ref forwarded to the textarea element.
rowsnumber3Number of visible text rows.
size"sm" | "md" | "lg"'md'Visual size.
startIconIconComponentIcon shown before the textarea.
statusInputStatusValidation status displayed below the textarea.
styleCSSPropertiesInline styles applied to the textarea wrapper.
value*stringControlled textarea value.
isOptionalfalse
isRequired*true