All files / react-app/src/components/Chip index.tsx

100% Statements 6/6
100% Branches 5/5
100% Functions 2/2
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63            71x                                             71x             215x                     7x 7x                     71x      
import * as React from "react";
import { XIcon } from "lucide-react";
import { cva, type VariantProps } from "class-variance-authority";
 
import { cn } from "@/utils";
 
const chipVariants = cva(
  "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 whitespace-nowrap",
  {
    variants: {
      variant: {
        default: "bg-primary/80 text-slate-50 hover:bg-primary/70 ",
        function: "bg-slate-300 hover:bg-primary/90 hover:text-slate-50",
        noIcon: "bg-primary text-slate-50 hover:bg-primary/90",
        destructive: "bg-slate-300 hover:bg-destructive hover:text-slate-50",
      },
    },
    defaultVariants: {
      variant: "default",
    },
  },
);
 
export interface ChipProps extends VariantProps<typeof chipVariants> {
  className?: string;
  onChipClick?: () => void;
  onIconClick?: () => void;
}
 
const Chip = ({
  className,
  onChipClick,
  onIconClick,
  variant,
  ...props
}: React.PropsWithChildren<ChipProps>) => {
  const noIcon = variant === "noIcon" || variant === "destructive";
  return (
    <div
      className={cn(chipVariants({ variant, className }), "h-8 py-2 cursor-pointer")}
      {...props}
      onClick={onChipClick}
    >
      <div className={noIcon ? "px-2" : "pl-2 pr-1"}>{props.children}</div>
      {!noIcon && (
        <button
          onClick={(e) => {
            onIconClick?.();
            e.stopPropagation();
          }}
          className="p-1 m-1 hover:bg-slate-300 hover:text-slate-700 rounded-md justify-center items-center "
        >
          <XIcon className="w-4 h-4" />
        </button>
      )}
    </div>
  );
};
 
Chip.displayName = "Chip";
 
export { Chip, chipVariants };