import { ComponentProps } from "react"; import { ClassNameValue, twJoin } from "tailwind-merge"; import { Link } from "wasp/client/router"; type ButtonSize = "md" | "sm" | "xs"; type ButtonVariant = "primary" | "danger" | "ghost"; interface ButtonProps extends ComponentProps<"button"> { size?: ButtonSize; variant?: ButtonVariant; } export function Button({ children, className, type = "button", size = "md", variant = "primary", ...props }: ButtonProps) { return ( ); } type ButtonLinkProps = ComponentProps & { size?: ButtonSize; variant?: ButtonVariant; }; export function ButtonLink({ children, className, size = "md", variant = "primary", ...props }: ButtonLinkProps) { return ( {children} ); } function getButtonClasses({ size, variant, className, }: { size: ButtonSize; variant: ButtonVariant; className: ClassNameValue; }): string { return twJoin( "rounded-md font-semibold", variantStyles[variant], sizeStyles[size], className, ); } const sizeStyles: Record = { md: "px-4 py-2", sm: "px-3 py-1.5 text-sm", xs: "px-2 py-1 text-xs", }; const variantStyles: Record = { primary: "bg-primary-500 hover:bg-primary-400 active:bg-primary-300 text-neutral-800", danger: "bg-red-600 text-white hover:bg-red-700 active:bg-red-800", ghost: "bg-transparent text-neutral-800 hover:bg-neutral-100 active:bg-neutral-200", };