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-separator
oferece 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.displayName
Separator
: Este componente cria o separador e pode ser personalizado com diferentes orientações e estilos. Ele utiliza o componenteRoot
da 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, ondetrue
faz o separador ser decorativo.className
: Permite customizar o estilo do separador.bg-border
: Aplica uma cor de fundo para o separador, utilizando a classebg-border
que 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 (
horizontal
ouvertical
), 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 }