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 arquivoutils
que 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:
flex
emin-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-allowed
edisabled: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 }