import type { ButtonProps as MuiButtonProps } from '@mui/material/Button';
import { type ComponentPropsWithRef, type ElementType } from 'react';
import type { WithoutEmotionSpecific } from '../types/WithoutEmotionSpecific';
import { type ButtonColors, type ButtonSizes, type ButtonStates, type ButtonVariants } from './enums';
declare module '@mui/material/Button' {
    interface ButtonPropsVariantOverrides {
        contained: true;
        light: true;
        text: true;
        link: true;
        outlined: true;
    }
    interface ButtonPropsColorOverrides {
        primary: true;
        success: true;
        warning: true;
        error: true;
        grey: true;
    }
}
export type ButtonColor = `${ButtonColors}`;
export type ButtonVariant = `${ButtonVariants}`;
export type ButtonSize = `${ButtonSizes}`;
export type ButtonState = `${ButtonStates}`;
export type ButtonProps<TComponent extends ElementType = ElementType> = Omit<WithoutEmotionSpecific<MuiButtonProps>, 'variant' | 'color' | 'centerRipple' | 'disableRipple' | 'TouchRippleProps' | 'disableTouchRipple' | 'disableFocusRipple' | 'focusRipple' | 'touchRippleRef' | 'component'> & {
    /**
     * Тип кнопки
     */
    variant?: `${ButtonVariants}`;
    /**
     * Если `true`, появляется loader внутри кнопки
     */
    loading?: boolean;
    /**
     * Цвет текста кнопки
     */
    color?: `${ButtonColors}`;
    /**
     * Тип html-элемента
     */
    component?: TComponent;
    /**
     * Состояние кнопки - selected
     */
    selected?: boolean;
} & Omit<ComponentPropsWithRef<ElementType extends TComponent ? 'button' : TComponent>, ''>;
