---
title: "textarea"
image: "https://adonia.pages.dev/og.png"
version: "next"
---

> Documentation Index
> Fetch the complete documentation index at: https://adonia.pages.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# textarea

<!-- Generated by `pnpm docs:fields` from packages/core/src/schema/fields/textarea.ts. Edit the TSDoc, not this file. -->

Multi-line text input bound to a string attribute.

| | |
| --- | --- |
| Builder | `F.textarea(attribute: string): Textarea` |
| Wire type key | `textarea` |
| Class chain | `Textarea` → `TextualField` → `Field` |
| Detail projection | `text-entry` |
| Column counterpart | `text` cell, i.e. `C.text(attribute)` |

## Example

```ts
import { F } from '@adonia/core'

F.textarea('excerpt').label('Excerpt').rows(6).autosize().maxLength(500)
```

## Props

Beyond the shared [field DSL](/reference/fields#the-shared-field-dsl):

| Prop | Declared on | Behaviour |
| --- | --- | --- |
| `rows(count: number): this` | `Textarea` | Initial visible row count (§7.3 `rows`); the client's default applies when unset. |
| `autosize(): this` | `Textarea` | Grows the control with its content (§7.3 `autosize`). With `rows()` the row count becomes the MINIMUM height rather than a fixed one. |
| `mask(pattern: string): this` | `TextualField` | Input mask as a REGEX SOURCE string (`'^[A-Z]{2}-\\d{4}$'`), not a `RegExp`: props ride the wire verbatim and must survive `JSON.stringify` (protocol §2 rule 1). The client uses it to constrain typing; §11.1 compiles the same source into `regex(mask)` so a client bypass cannot smuggle an unmasked value past the validator. |

## Validation

Vine base: `vine.string()`.

§11.1 mapping: `vine.string().trim()` plus the declared length and mask
modifiers, read off `this.props` so a `withProps` override behaves
identically to the typed DSL.

Contributed by `TextualField.vineSchema()` in `packages/core/src/schema/fields/textual.ts`. The shared modifiers (`required`, `nullable`, `requiredWhen`, `unique`, optionality) are applied on top by `Field.buildValidation`, and a `rules()` override replaces the base entirely — the validator compiler never branches on the field class.

## Declared in

- `packages/core/src/schema/fields/textarea.ts` — `Textarea`
- `packages/core/src/schema/fields/textual.ts` — `TextualField`

Source: https://adonia.pages.dev/reference/fields/textarea/index.mdx
