import type { ButtonProps } from "@mui/material"; import { Button as MuiButton, CircularProgress } from "@mui/material"; import { cn } from "@/lib/utils"; type ButtonVariant = "default" | "destructive" | "outline" | "ghost" | "link"; type ButtonSize = "default" | "lg"; export type UiButtonProps = Omit & { variant?: ButtonVariant; size?: ButtonSize; loading?: boolean; loadingText?: string; }; const variantMap: Record< ButtonVariant, Pick & { className?: string } > = { default: { variant: "contained", color: "primary" }, destructive: { variant: "contained", color: "error" }, outline: { variant: "outlined", color: "primary", className: "border-border" }, ghost: { variant: "text", color: "inherit", className: "text-foreground" }, link: { variant: "text", color: "primary", className: "underline-offset-4 hover:underline" }, }; const sizeSx: Record = { default: undefined, lg: { height: 42, fontFamily: "var(--font-display)", fontSize: "var(--text-base)", fontWeight: 600, }, }; export function Button({ variant = "default", size = "default", loading = false, loadingText = "Loading…", className, disabled, children, sx, ...props }: UiButtonProps) { const mapped = variantMap[variant]; return ( {loading ? ( <> {loadingText} ) : ( children )} ); }