Explicação detalhada 💡
Este código cria um componente separador (separator) em React, usando a biblioteca @radix-ui/react-separator. O separador pode ser configurado para ser horizontal ou vertical, e sua aparência é facilmente personalizável.
Código: Importação de dependências 🧩
import * as React from "react"
import * as SeparatorPrimitive from "@radix-ui/react-separator"
import { cn } from "@/lib/utils"React: A importação do React é necessária para criar os componentes.SeparatorPrimitive: A biblioteca@radix-ui/react-separatoroferece componentes para criar separadores, que são usados para dividir visualmente seções de conteúdo.cn: Função utilitária para combinar classes CSS dinamicamente, facilitando a personalização das classes com base nas condições.
Componente Separator 📜
const Separator = React.forwardRef((
{ className, orientation = "horizontal", decorative = true, ...props },
ref
) => (
<SeparatorPrimitive.Root
ref={ref}
decorative={decorative}
orientation={orientation}
className={cn(
"shrink-0 bg-border",
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
className
)}
{...props} />
))
Separator.displayName = SeparatorPrimitive.Root.displayNameSeparator: Este componente cria o separador e pode ser personalizado com diferentes orientações e estilos. Ele utiliza o componenteRootda biblioteca Radix para implementar a funcionalidade.orientation: Controla a orientação do separador, podendo ser horizontal (default) ou vertical.decorative: Define se o separador é puramente decorativo (não acessível) ou se é semântico. Isso afeta a acessibilidade, ondetruefaz o separador ser decorativo.className: Permite customizar o estilo do separador.bg-border: Aplica uma cor de fundo para o separador, utilizando a classebg-borderque provavelmente está definida em algum arquivo de estilo global.
Estilos Condicionais 🎨
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]"- Dependendo da orientação (
horizontalouvertical), o separador recebe estilos diferentes:- Para horizontal: a altura é 1px e a largura é 100% (
w-full). - Para vertical: a altura é 100% (
h-full) e a largura é 1px.
- Para horizontal: a altura é 1px e a largura é 100% (
Exemplo de uso 💻
<Separator orientation="horizontal" />
<Separator orientation="vertical" />Código Completo 📄
"use client"
import * as React from "react"
import * as SeparatorPrimitive from "@radix-ui/react-separator"
import { cn } from "@/lib/utils"
const Separator = React.forwardRef((
{ className, orientation = "horizontal", decorative = true, ...props },
ref
) => (
<SeparatorPrimitive.Root
ref={ref}
decorative={decorative}
orientation={orientation}
className={cn(
"shrink-0 bg-border",
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
className
)}
{...props} />
))
Separator.displayName = SeparatorPrimitive.Root.displayName
export { Separator }