Components Forms
Textarea
StableMulti-line text entry with optional auto-resize and a character counter.
Use Textarea for free text that may span several lines: messages to signers, disclaimers, notes. Turn on autoResize so the field grows with its content up to maxRows, and showCount when there is a length limit.
Overview
Included in the signing request email.
import { FormField, Textarea } from '@bindshq/stance-react';
export function Basic() {
return (
<div style={{ width: '100%', maxWidth: 420 }}>
<FormField label="Message to signers" description="Included in the signing request email.">
<Textarea placeholder="Please review and sign the attached agreement by Friday." />
</FormField>
</div>
);
}Light, dark and high contrast
Every Stance component is designed and tested in all three appearance modes.
Included in the signing request email.
Included in the signing request email.
Included in the signing request email.
Import
import { Textarea, FormField } from '@bindshq/stance-react';Platforms
Textarea has native counterparts. They share Stance tokens and intent, and use each platform’s own controls and conventions. The live previews on this page are the web implementation.
import { Textarea, FormField } from '@bindshq/stance-react';Examples
import { FormField, Textarea } from '@bindshq/stance-react';
export function AutoResize() {
return (
<div style={{ width: '100%', maxWidth: 420 }}>
<FormField label="Internal notes">
<Textarea
autoResize
rows={2}
maxRows={6}
defaultValue={'Renewal terms agreed on the call.\nLegal to confirm the liability cap.'}
/>
</FormField>
</div>
);
}Character count
The count is linked by aria-describedby and turns red past the limit.
import { FormField, Textarea } from '@bindshq/stance-react';
export function CharacterCount() {
return (
<div style={{ width: '100%', maxWidth: 420 }}>
<FormField label="Email disclaimer">
<Textarea
showCount
maxLength={280}
defaultValue="This email and any attachments are confidential and intended solely for the addressee."
/>
</FormField>
</div>
);
}Tell the sender why you are rejecting the document
import { FormField, Textarea } from '@bindshq/stance-react';
export function Invalid() {
return (
<div style={{ width: '100%', maxWidth: 420 }}>
<FormField
label="Reason for rejection"
error="Tell the sender why you are rejecting the document"
required
>
<Textarea />
</FormField>
</div>
);
}API reference
| Prop | Type | Default | Description |
|---|---|---|---|
autoResize | boolean | false | Grow with content between rows and maxRows. |
rows | number | 3 | Initial visible rows. |
maxRows | number | 12 | Maximum rows when auto-resizing; then it scrolls. |
showCount | boolean | false | Show a counter; uses maxLength as the limit. |
resize | 'none' | 'vertical' | 'both' | 'vertical' | Manual resize handle (ignored with autoResize). |
invalid | boolean | None | Marks the field invalid. |
wrapperClassName | string | None | Class for the outer field box. |
...props | TextareaHTMLAttributes | None | Native textarea attributes. |
Accessibility
- Integrates with FormField for label, description, error and required state.
- The character count is included in the accessible description and read on focus, rather than announced on every keystroke.
- maxLength stops input at the limit natively; omit it and validate on submit if you prefer to let users paste then trim.
Keyboard
| Keys | Action |
|---|---|
| Enter | Inserts a new line (does not submit the form). |