Skip to content

Textarea

Multiline text input with auto-resize, character count, and all Input features.

Forms & Inputs·Available inReactVueAngular·View as Markdown

Preview

tsx

Switch the framework picker (top-right of the panel) to render the same demo live in React, Vue, or Angular — same class names, ARIA, and visual output across all three.

Playground

Flip props to see how the component responds. The snippet below updates as you change options.

Installation

Sisyphos UI ships unified packages for React, Vue, and Angular. Pick the one that matches your stack — every framework exports the same component classes, ARIA semantics, and CSS tokens.

$ pnpm add @sisyphos-ui/react

Then import the bundled stylesheet once at app entry: import "@sisyphos-ui/react/styles.css";

Usage

Idiomatic usage in each supported framework
import { Textarea } from "@sisyphos-ui/react";

export const Bio = () => (
  <Textarea
    label="Bio"
    placeholder="Tell us a bit about yourself…"
    maxLength={140}
    showCharacterCount
  />
);

Auto-resize

`autoResize` grows the textarea with content, clamped between `minRows` and `maxRows`.

tsx

With error

Pair `error` with `errorMessage` to show inline validation.

tsx
Please describe the steps to reproduce (at least 40 characters).

Character counter

`showCharacterCount` surfaces a `current / maxLength` counter in the corner.

tsx
0 / 160

API

PropTypeDefaultDescription
variant"standard" | "outlined" | "underline""outlined"Visual treatment.
size"xs" | "sm" | "md" | "lg" | "xl""md"Field size + typography scale.
radius"xs" | "sm" | "md" | "lg" | "xl""sm"Border radius scale.
labelstringField label rendered above the textarea.
errorbooleanfalseMarks the field as invalid for styling and ARIA.
errorMessagestringMessage shown below the field when `error` is true.
showCharacterCountbooleanfalseShow a `current / maxLength` counter (requires `maxLength`; hidden while an error message is shown).
autoResizebooleanfalseGrow the height with content, clamped between `minRows` and `maxRows`.
minRowsnumber3Minimum visible rows when `autoResize` is enabled.
maxRowsnumberMaximum visible rows when `autoResize` is enabled; overflow scrolls past it.
resize"none" | "vertical" | "horizontal" | "both""vertical"Native CSS resize handle direction.
fullWidthbooleanfalseStretch the textarea to its container width.

The full API including refs, ARIA attributes, and HTML passthroughs lives in the package README on npm.

Accessibility

  • The label is wired through htmlFor / id (auto-generated when id is omitted).
  • aria-invalid mirrors error; the error message is announced with role="alert".
  • Error message and character counter are linked to the field through aria-describedby.
  • disabled, readOnly, and required are forwarded to the native <textarea> so form and AT semantics stay intact.
Need more?View on npm →
Was this page helpful?