import type { ReactNode } from 'react'; import type { ButtonBaseProps } from '@mui/material/ButtonBase'; import type { SxProps, Theme } from '@mui/material/styles'; export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger'; export type ButtonSize = 'sm' | 'md' | 'lg'; export interface ButtonProps extends Omit { /** Button label or content */ children?: ReactNode; /** Visual style — primary (blue), secondary (outlined), ghost (text), danger (red) */ variant?: ButtonVariant; /** Height and font size — sm: 24px, md: 32px, lg: 40px */ size?: ButtonSize; /** Shows a spinner and disables the button */ isLoading?: boolean; /** Icon placed before the label */ startIcon?: ReactNode; /** Icon placed after the label */ endIcon?: ReactNode; /** Stretches button to 100% of its container */ fullWidth?: boolean; /** MUI sx style overrides */ sx?: SxProps; }