Components · Form

Text area

A text area lets the user enter text over multiple lines: comments, feedback or longer passages that need more room than a single-line input.

Tokens, sizes, measurements, states and requirements. Values come from the live token package and from Figma: Text Area.

Design Tokens

Resolved from the live token package.

StatePartTokenValue

Sizes

BreakpointMin heightPaddingLabelTextWord count, message
Desktop (769px+)66px12pxlabel-md 16/16, 0.48pxbody-md 17/24, 0.32pxbody-sm 14/20, 0.36px
Mobile (below 769px)66px12pxlabel-sm 12/12, 0.48pxbody-md 16/22, 0.32pxbody-sm 14/20, 0.36px

There is one size. Figma has no Size axis and only a Desktop version, so the mobile type values are taken from eco-input (same label and body styles) until a Mobile frame exists.


Measurements

Dimensions

Padding of the text area. The shaded area is the padding; the lines show its value. It is the same at every breakpoint.

The text area at true size (1:1). The numbers are read from the component.
AttributeValue
Padding12px on every side
Minimum height66px (a literal: there is no token)
Border1px
CornersSquare
WidthFills the container
ResizeVertical only, never below 66px

Spacing

The same padding and distances as spacing tokens.

PartValue
Paddingspace-12
Label row to boxspace-4
Box to messagespace-4
Label to word countspace-8 minimum
Focus ring2px line, 3px outside the box

States

All seven states from Figma, with and without the word count. Hover and focus are forced on this page; in your code they come from :hover and keyboard focus. Active means the field has a value.

Breakpoint
StateWith word countWithout word count

Typography

PartTypeSize / line heightLetter spacingWeight
Label, Desktoplabel-md16/160.48pxBold, uppercase
Label, Mobilelabel-sm12/120.48pxBold, uppercase
Text, Desktopbody-md17/240.32pxRegular
Text, Mobilebody-md16/220.32pxRegular
Word count, messagebody-sm14/200.36pxRegular

Breuer Condensed with ss02 and ss03 (the text and the message also ss06).


Structure

Elements

ElementClassNotes
Fieldform-fieldLabel row, wrapper and message in a column, 4px apart.
Label rowform-field__headLabel on the left, word count on the right.
Labelform-labelUppercase.
Word countform-countOptional. 0/100 format.
Wrapperinput-wrapCarries the focus ring (2px, 3px outside the box).
Text areaform-textarea, --error, --successThe native textarea. Border, fill and height.
Messageform-helper, --error, --success, --disabledOptional icon (input-icon).

Types

There is one type. The word count is optional.

Width

The field fills its container.


Motion

PropertyDurationEasing
opacity of the focus ringduration-fast-3ease-standard

Behavior

InputResult
Type a valueThe field becomes Active (black border). The word count updates; maxlength stops typing at the limit.
Drag the cornerThe field grows or shrinks in height only. It never goes below the 66px minimum.
TabThe blue ring shows on keyboard focus only (body.keyboard-nav, set by a small script).
DisabledNot focusable. Grey fill, light border, text-disabled for text and message, no resize.

Accessibility Requirements

TopicRequirement
LabelAlways a label with for and id. A placeholder is never the label.
ErrorSet aria-invalid="true" and point aria-describedby at the message.
FocusA 2px ring on keyboard focus (border-focus), not on mouse click (WCAG 2.4.7, 1.4.11).
ColorError and success are not shown by color alone: the message says it, and the error message has an icon.
DisabledNot focusable. Disabled tokens are exempt from contrast requirements.

Open points: Figma has only a Desktop version, so the mobile type values are taken from the input. Disabled uses border-primary and focus uses a text-secondary placeholder, both as in Figma and both different from the input. The resizer is the browser’s own handle, not the 8px Figma icon. Details are in the skill’s Flags.