Explicação do Código
1. Importação das Dependências 📦
import * as React from "react"
import { cn } from "@/lib/utils"Aqui estamos importando:
React: A biblioteca principal para trabalhar com componentes React.cn: Uma função auxiliar de um arquivoutilsque será utilizada para manipulação das classes de CSS de forma dinâmica.
2. Criação do Componente Textarea 📝
const Textarea = React.forwardRef(({ className, ...props }, ref) => {O componente Textarea é criado utilizando React.forwardRef. Isso permite que o componente possa receber uma referência (ref), o que é útil para manipulação direta do DOM em React. As propriedades (props) são passadas ao componente, e a classe (className) é combinada com a base definida para o textarea.
3. Estrutura do textarea 🔲
return (
(<textarea
className={cn(
"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
className
)}
ref={ref}
{...props} />)
);Dentro do componente, renderizamos um elemento <textarea>, que é um campo de entrada de múltiplas linhas. A classe base de estilização é definida aqui, e cn é usado para combinar essa classe com a classe adicional recebida através de className.
As principais classes incluem:
flexemin-h-[80px]: Definem o layout e a altura mínima do campo.w-full: Faz com que o campo ocupe toda a largura disponível.rounded-md: Aplica bordas arredondadas.border border-input: Define a borda com o estilo de entrada do formulário.focus-visible:ring-2: Adiciona um efeito visual de anel (outline) quando o campo é focado.disabled:cursor-not-allowededisabled:opacity-50: Define o comportamento e a aparência do campo quando desabilitado.
4. Atribuindo o displayName 📛
Textarea.displayName = "Textarea"Aqui estamos definindo o nome do componente para fins de depuração. Isso ajuda a identificar facilmente o componente no React Developer Tools.
5. Exportação do Componente 📤
export { Textarea }Por fim, o componente Textarea é exportado, permitindo seu uso em outras partes da aplicação.
Código Completo 📜
import * as React from "react"
import { cn } from "@/lib/utils"
const Textarea = React.forwardRef(({ className, ...props }, ref) => {
return (
(<textarea
className={cn(
"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
className
)}
ref={ref}
{...props} />)
);
})
Textarea.displayName = "Textarea"
export { Textarea }