Desenvolvedores
src_
components_
ui_
Textarea.jsx

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 arquivo utils 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 e min-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 e disabled: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 }