"use client"; import { type VariantProps } from "class-variance-authority"; import { forwardRef, useState } from "react"; import { cn } from "@/libs/utils"; import type { LIconProps } from "../lucid-icon/lucid-icon"; import LIcon from "../lucid-icon/lucid-icon"; import styles from "./badge.module.css"; import badgeVariants from "./badge.variants"; export interface BadgeProps extends React.HTMLAttributes, VariantProps { leftIcon?: LIconProps; rightIcon?: LIconProps; childrenClassName?: string; closable?: boolean; closeIconPosition?: "left" | "right"; onClose?: () => void; } function InternalBadge( { className, childrenClassName, variant, size, children, leftIcon, rightIcon, closable, onClose, closeIconPosition, ...props }: BadgeProps = { closeIconPosition: "right", }, ) { const [visible, setVisible] = useState(true); if (!visible) return null; const handleOnClose = () => { setVisible(false); if (onClose) onClose(); }; return (
{closable && closeIconPosition === "left" && ( )} {leftIcon && } {children} {rightIcon && } {closable && closeIconPosition === "right" && ( )}
); } const Badge = forwardRef(InternalBadge); export { Badge, badgeVariants };