import { Textarea } from "@/components/ui/textarea"
export function TextareaDemo() {
return <Textarea placeholder="Type your message here." />
}Installation
npx shadcn@latest add @fulldev/textarea
Usage
import { Textarea } from "@/components/ui/textarea"
<Textarea />
Field
Use Field, FieldLabel, and FieldDescription to create a textarea with a label and description.
import { Field, FieldDescription, FieldLabel } from "@/components/ui/field"
import { Textarea } from "@/components/ui/textarea"
export function TextareaField() {
return (
<Field>
<FieldLabel htmlFor="textarea-message">Message</FieldLabel>
<FieldDescription>Enter your message below.</FieldDescription>
<Textarea id="textarea-message" placeholder="Type your message here." />
</Field>
)
}Disabled
Use the disabled prop to disable the textarea.
import { Field, FieldLabel } from "@/components/ui/field"
import { Textarea } from "@/components/ui/textarea"
export function TextareaDisabled() {
return (
<Field data-disabled>
<FieldLabel htmlFor="textarea-disabled">Message</FieldLabel>
<Textarea
id="textarea-disabled"
placeholder="Type your message here."
disabled
/>
</Field>
)
}Invalid
Use the aria-invalid prop to mark the textarea as invalid.
import { Field, FieldDescription, FieldLabel } from "@/components/ui/field"
import { Textarea } from "@/components/ui/textarea"
export function TextareaInvalid() {
return (
<Field data-invalid>
<FieldLabel htmlFor="textarea-invalid">Message</FieldLabel>
<Textarea
id="textarea-invalid"
placeholder="Type your message here."
aria-invalid
/>
<FieldDescription>Please enter a valid message.</FieldDescription>
</Field>
)
}Button
Pair with Button to create a textarea with a submit button.
import { Button } from "@/components/ui/button"
import { Textarea } from "@/components/ui/textarea"
export function TextareaButton() {
return (
<div className="grid w-full gap-2">
<Textarea placeholder="Type your message here." />
<Button>Send message</Button>
</div>
)
}RTL
To enable RTL support in shadcn/ui, see the RTL configuration guide.
"use client"
import * as React from "react"
import { Field, FieldDescription, FieldLabel } from "@/components/ui/field"
import { Textarea } from "@/components/ui/textarea"
import {
useTranslation,
type Translations,
} from "@/components/language-selector"
const translations: Translations = {
en: {
dir: "ltr",
values: {
label: "Feedback",
placeholder: "Your feedback helps us improve...",
description: "Share your thoughts about our service.",
},
},
ar: {
dir: "rtl",
values: {
label: "التعليقات",
placeholder: "تعليقاتك تساعدنا على التحسين...",
description: "شاركنا أفكارك حول خدمتنا.",
},
},
he: {
dir: "rtl",
values: {
label: "משוב",
placeholder: "המשוב שלך עוזר לנו להשתפר...",
description: "שתף את מחשבותיך על השירות שלנו.",
},
},
}
export function TextareaRtl() {
const { dir, t } = useTranslation(translations, "ar")
return (
<Field className="w-full max-w-xs" dir={dir}>
<FieldLabel htmlFor="feedback" dir={dir}>
{t.label}
</FieldLabel>
<Textarea id="feedback" placeholder={t.placeholder} dir={dir} rows={4} />
<FieldDescription dir={dir}>{t.description}</FieldDescription>
</Field>
)
}