Explicação detalhada 💡
Este arquivo define um componente Label que utiliza o Radix UI e a biblioteca class-variance-authority (cva) para criar um rótulo estilizado e flexível. Vamos quebrar o código em partes para melhor compreensão.
Código: Importação das dependências 🧩
import * as React from "react"
import * as LabelPrimitive from "@radix-ui/react-label"
import { cva } from "class-variance-authority";
import { cn } from "@/lib/utils"Aqui, estamos importando as seguintes dependências:
React: para poder criar componentes React.LabelPrimitive: é o módulo do Radix UI que contém a implementação do Label.cva: a função da bibliotecaclass-variance-authority, usada para criar variantes de classes dinâmicas, facilitando o controle do estilo com base em diferentes estados ou propriedades.cn: é uma função utilitária para combinar classes CSS de maneira condicional.
Definição das variantes do Label ⚙️
const labelVariants = cva(
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
)- A constante
labelVariantsusa a funçãocvapara criar variantes de classes CSS. Estas classes são combinadas com base nos estados do componente (como quando está desabilitado). text-sm: define o tamanho do texto como pequeno.font-medium: aplica uma espessura de fonte média.leading-none: ajusta o espaçamento entre as linhas para o mínimo.peer-disabled:cursor-not-allowed: define o cursor como não permitido quando o elemento está desabilitado.peer-disabled:opacity-70: define a opacidade como 70% quando o elemento está desabilitado.
Componente Label 💬
const Label = React.forwardRef(({ className, ...props }, ref) => (
<LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />
))Este trecho define o componente Label que:
- Usa
React.forwardRefpara encaminhar a referênciarefpara o componente subjacente do Radix UI. - Combina as classes
labelVariants()com a classe adicionalclassName, permitindo a personalização do estilo. ...propspassa todas as propriedades recebidas pelo componenteLabelpara o componenteLabelPrimitive.Root(comohtmlFor,children, etc.).
Exemplo de uso 💻
Aqui está um exemplo de como você pode usar o componente Label em um formulário React:
<Label htmlFor="username">Nome de usuário:</Label>
<input id="username" type="text" />Código Completo 📄
"use client"
import * as React from "react"
import * as LabelPrimitive from "@radix-ui/react-label"
import { cva } from "class-variance-authority";
import { cn } from "@/lib/utils"
const labelVariants = cva(
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
)
const Label = React.forwardRef(({ className, ...props }, ref) => (
<LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />
))
Label.displayName = LabelPrimitive.Root.displayName
export { Label }