gglc-ui

Textarea

Kolom teks banyak baris dengan tinggi minimum 64 dan radius 10. Tumbuh mengikuti isinya.

Instalasi

npx shadcn@latest add @glc/textarea

Penggunaan

import { Textarea } from "@/components/ui/textarea"

<Textarea placeholder="Catatan jurnal…" />

Status

Sama seperti Input: galat digerakkan aria-invalid, bukan prop error.

Tumbuh tanpa JavaScript

Kelas dasarnya memuat field-sizing-content, sehingga kotaknya melar mengikuti teks tanpa resize observer maupun div bayangan. Dukungan browsernya masih berkembang — di browser yang belum mendukung, tinggi minimumnya tetap dipakai dan pengguna menggulir seperti biasa.

Props

Tidak ada props tambahan. Seluruh atribut <textarea> diteruskan apa adanya.
PropTipeDefaultKeterangan
aria-invalidbooleanMenyalakan border dan cincin fokus merah.
disabledbooleanfalseLatar dan teks berubah ke token disabled.
rowsnumberTetap dihormati, tapi min-height 64 adalah batas bawahnya.
classNamestringDigabung terakhir lewat cn(), jadi bisa menimpa kelas bawaan.

Kode sumber

import * as React from "react"

import { cn } from "@/registry/glc/lib/utils"

/**
 * Multi-line text field — the `Textarea` set from Company BookV1.0.fig.
 * Min-height 64, radius 10, padding 8/10, Inter 14/20.
 */
function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
  return (
    <textarea
      data-slot="textarea"
      className={cn(
        "flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-card px-2.5 py-2",
        "text-sm leading-5 text-foreground transition-[color,box-shadow] outline-none",
        "placeholder:text-[var(--text-placeholder)]",
        "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/20",
        "aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20",
        "disabled:cursor-not-allowed disabled:bg-[var(--surface-disabled)] disabled:text-[var(--text-disabled)]",
        className
      )}
      {...props}
    />
  )
}

export { Textarea }