Textarea — accessibility

Keyboard

  • Tab moves focus in and out; Enter inserts a new line (it does not submit).
  • The resize handle is pointer-only; there is no keyboard way to change height beyond rows.

ARIA

  • Native <textarea> — no role. Name it with aria-label or link it to the <Field> label (id + aria-labelledby); <Field> itself does not set htmlFor.
  • aria-invalid and aria-describedby for the error message must be added by the screen; the DS has no .is-error rule on the textarea.
  • maxLength alone gives no feedback — announce the limit in the hint.

Focus

  • .acrm-textarea:focus = outline: none, border-color: var(--accent), box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent); identical to Input.
  • The foundation focus ring does not apply (inputs are not in its selector list).

Contrast

Same tokens as Input (packages/ui/src/tokens/tokens.css):

  • Text --fg on --surface-100 = 17.59:1 (light); on --surface-50 = 13.09:1 (dark).
  • Placeholder --fg-muted = 2.85:1 (light), 3.27:1 (dark) — below AA.
  • Border --border-strong = 1.38:1 (light), 1.55:1 (dark); focus border --accent = 4.44:1 / 3.83:1.

Known limits

  • No disabled style — a disabled textarea looks like the browser default and does not get the --surface-75 fill Input has.
  • No error frame — only the message under the field signals an error.
  • Height cannot be changed from the keyboard.
  • Placeholder contrast is below AA.

Source: docs/text-field/textarea.a11y.md · GitLab