Brik Design System
Components

Text area

Multi-line text input with configurable rows, resize behavior, and size variants.

TextArea is the multi-line sibling of TextInput. Use for longer-form text entry — comments, descriptions, messages, notes, anything that needs more than one line.

Use it for

  • Comments and reviews
  • Description fields on records (project descriptions, bio, notes)
  • Message composition
  • Free-form text where users may type more than ~60 characters

Import

import { TextArea } from '@brikdesigns/bds';

Variants

Sizes

<TextArea size="sm" aria-label="Notes" placeholder="Small" rows={3} />
<TextArea size="md" aria-label="Notes" placeholder="Medium (default)" rows={4} />
<TextArea size="lg" aria-label="Notes" placeholder="Large" rows={5} />
  • sm — 14px text. Inline editing, dense forms.
  • md — 16px text. Default.
  • lg — 18px text. Prominent input contexts.

With label and helper

<TextArea
  label="Notes"
  placeholder="Anything we should know?"
  helperText="Maximum 500 characters"
  rows={4}
  fullWidth
/>

Error state

<TextArea
  label="Description"
  error="This field is required"
  rows={3}
  fullWidth
/>

Resize modes

Default is vertical — users can drag the bottom-right handle to make it taller. Use none for fixed-size cells.

<TextArea aria-label="Notes" placeholder="Fixed size" rows={4} resize="none" />
<TextArea aria-label="Notes" placeholder="Resize horizontally" resize="horizontal" />
<TextArea aria-label="Notes" placeholder="Resize both" resize="both" />
ModeEffect
vertical (default)Height only
noneFixed dimensions
bothWidth and height
horizontalWidth only

When not to use

Don't use TextArea for short text. If the field will rarely exceed one line, use TextInput — the visual weight of a multi-line area implies the user should type more, which is a UX nudge.

  • Don't use TextArea for known-set choices. Multi-select belongs in MultiSelect.
  • Don't disable resize without good reason. Users with verbose content benefit from being able to expand the area; the default vertical is almost always right.

Accessibility

  • An accessible name is required (type-enforced). Pass label (visible), aria-label, or aria-labelledby; omitting all three is a type error. The name is applied to the <textarea>.
  • Renders a real <textarea> — keyboard, scroll, native resize handle all platform.
  • label auto-wires htmlFor/id. If you don't pass label, supply aria-label.
  • error sets aria-invalid and links the message.

API

PropTypeDefault
size'sm' | 'md' | 'lg''md'
rowsnumber4
resize'none' | 'both' | 'horizontal' | 'vertical''vertical'
labelstring—
helperTextstring—
errorstring—
fullWidthbooleanfalse
value / defaultValue / onChangecontrolled / uncontrolled standard—
placeholderstring—
disabledbooleanfalse

Plus all standard <textarea> HTML attributes.

On this page

💬