import { type CSSProperties, type PropType, type SlotsType, type VNodeChild } from 'vue';
import { type BoxProps, MantineSize, MantineRadius, type MantineVariant } from '../../core';
export type ButtonSize = MantineSize | `compact-${MantineSize}` | (string & {});
export type ButtonVariant = 'filled' | 'light' | 'outline' | 'transparent' | 'white' | 'subtle' | 'default' | 'gradient';
export interface ButtonSlots {
    default?: () => VNodeChild;
    leftSection?: () => VNodeChild;
    rightSection?: () => VNodeChild;
}
export interface ButtonProps extends BoxProps {
    /** Controls button `height`, `font-size` and horizontal `padding` @default 'sm' */
    size?: ButtonSize;
    /** Key of `theme.colors` or any valid CSS color @default theme.primaryColor */
    color?: string;
    /** Sets `justify-content` of `inner` element @default 'center' */
    justify?: CSSProperties['justifyContent'];
    /** Content on the left side of the button label */
    leftSection?: VNodeChild | (() => VNodeChild);
    /** Content on the right side of the button label */
    rightSection?: VNodeChild | (() => VNodeChild);
    /** Sets `width: 100%` @default false */
    fullWidth?: boolean;
    /** Key of `theme.radius` or any valid CSS value to set `border-radius` */
    radius?: MantineRadius;
    /** Gradient configuration used for `variant="gradient"` */
    gradient?: {
        from: string;
        to: string;
        deg?: number;
    };
    /** Sets `disabled` attribute, applies disabled styles */
    disabled?: boolean;
    /** If set, the `Loader` component is displayed over the button */
    loading?: boolean;
    /** Props added to the `Loader` component (only visible when `loading` is set) */
    loaderProps?: Record<string, any>;
    /** If set, adjusts text color based on background color for `filled` variant */
    autoContrast?: boolean;
    /** Component or element used as the root */
    component?: string;
    /** Visual variant */
    variant?: MantineVariant<ButtonVariant>;
    'data-disabled'?: boolean;
    classNames?: Record<string, string> | ((...args: any[]) => Record<string, string>);
    styles?: Record<string, any> | ((...args: any[]) => Record<string, any>);
    vars?: Record<string, any> | ((...args: any[]) => Record<string, any>);
    unstyled?: boolean;
}
export declare const Button: import("../..").WithBoxProps<{
    new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
        component: {
            type: StringConstructor;
            default: string;
        };
        size: PropType<ButtonSize>;
        color: {
            type: StringConstructor;
            default: undefined;
        };
        justify: {
            type: StringConstructor;
            default: undefined;
        };
        leftSection: {
            type: (ObjectConstructor | NumberConstructor | StringConstructor | FunctionConstructor)[];
            default: undefined;
        };
        rightSection: {
            type: (ObjectConstructor | NumberConstructor | StringConstructor | FunctionConstructor)[];
            default: undefined;
        };
        fullWidth: {
            type: BooleanConstructor;
            default: boolean;
        };
        radius: PropType<MantineRadius>;
        gradient: {
            type: PropType<{
                from: string;
                to: string;
                deg?: number;
            }>;
            default: undefined;
        };
        disabled: {
            type: BooleanConstructor;
            default: boolean;
        };
        loading: {
            type: BooleanConstructor;
            default: boolean;
        };
        loaderProps: {
            type: PropType<Record<string, any>>;
            default: undefined;
        };
        autoContrast: {
            type: BooleanConstructor;
            default: undefined;
        };
        variant: {
            type: PropType<MantineVariant<ButtonVariant>>;
            default: undefined;
        };
        mod: {
            type: PropType<any>;
            default: undefined;
        };
        'data-disabled': {
            type: BooleanConstructor;
            default: boolean;
        };
        dataDisabled: {
            type: BooleanConstructor;
            default: boolean;
        };
        classNames: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        styles: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        vars: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        unstyled: {
            type: BooleanConstructor;
            default: boolean;
        };
    }>> & Readonly<{}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
        [key: string]: any;
    }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, import("vue").PublicProps, {
        color: string;
        autoContrast: boolean;
        variant: MantineVariant<ButtonVariant>;
        gradient: {
            from: string;
            to: string;
            deg?: number;
        };
        classNames: Function | Record<string, any>;
        styles: Function | Record<string, any>;
        disabled: boolean;
        mod: any;
        justify: string;
        component: string;
        vars: Function | Record<string, any>;
        unstyled: boolean;
        leftSection: string | number | Function | Record<string, any>;
        rightSection: string | number | Function | Record<string, any>;
        fullWidth: boolean;
        loading: boolean;
        loaderProps: Record<string, any>;
        'data-disabled': boolean;
        dataDisabled: boolean;
    }, true, {}, SlotsType<ButtonSlots>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
        P: {};
        B: {};
        D: {};
        C: {};
        M: {};
        Defaults: {};
    }, Readonly<import("vue").ExtractPropTypes<{
        component: {
            type: StringConstructor;
            default: string;
        };
        size: PropType<ButtonSize>;
        color: {
            type: StringConstructor;
            default: undefined;
        };
        justify: {
            type: StringConstructor;
            default: undefined;
        };
        leftSection: {
            type: (ObjectConstructor | NumberConstructor | StringConstructor | FunctionConstructor)[];
            default: undefined;
        };
        rightSection: {
            type: (ObjectConstructor | NumberConstructor | StringConstructor | FunctionConstructor)[];
            default: undefined;
        };
        fullWidth: {
            type: BooleanConstructor;
            default: boolean;
        };
        radius: PropType<MantineRadius>;
        gradient: {
            type: PropType<{
                from: string;
                to: string;
                deg?: number;
            }>;
            default: undefined;
        };
        disabled: {
            type: BooleanConstructor;
            default: boolean;
        };
        loading: {
            type: BooleanConstructor;
            default: boolean;
        };
        loaderProps: {
            type: PropType<Record<string, any>>;
            default: undefined;
        };
        autoContrast: {
            type: BooleanConstructor;
            default: undefined;
        };
        variant: {
            type: PropType<MantineVariant<ButtonVariant>>;
            default: undefined;
        };
        mod: {
            type: PropType<any>;
            default: undefined;
        };
        'data-disabled': {
            type: BooleanConstructor;
            default: boolean;
        };
        dataDisabled: {
            type: BooleanConstructor;
            default: boolean;
        };
        classNames: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        styles: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        vars: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        unstyled: {
            type: BooleanConstructor;
            default: boolean;
        };
    }>> & Readonly<{}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
        [key: string]: any;
    }>, {}, {}, {}, {
        color: string;
        autoContrast: boolean;
        variant: MantineVariant<ButtonVariant>;
        gradient: {
            from: string;
            to: string;
            deg?: number;
        };
        classNames: Function | Record<string, any>;
        styles: Function | Record<string, any>;
        disabled: boolean;
        mod: any;
        justify: string;
        component: string;
        vars: Function | Record<string, any>;
        unstyled: boolean;
        leftSection: string | number | Function | Record<string, any>;
        rightSection: string | number | Function | Record<string, any>;
        fullWidth: boolean;
        loading: boolean;
        loaderProps: Record<string, any>;
        'data-disabled': boolean;
        dataDisabled: boolean;
    }>;
    __isFragment?: never;
    __isTeleport?: never;
    __isSuspense?: never;
} & import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
    component: {
        type: StringConstructor;
        default: string;
    };
    size: PropType<ButtonSize>;
    color: {
        type: StringConstructor;
        default: undefined;
    };
    justify: {
        type: StringConstructor;
        default: undefined;
    };
    leftSection: {
        type: (ObjectConstructor | NumberConstructor | StringConstructor | FunctionConstructor)[];
        default: undefined;
    };
    rightSection: {
        type: (ObjectConstructor | NumberConstructor | StringConstructor | FunctionConstructor)[];
        default: undefined;
    };
    fullWidth: {
        type: BooleanConstructor;
        default: boolean;
    };
    radius: PropType<MantineRadius>;
    gradient: {
        type: PropType<{
            from: string;
            to: string;
            deg?: number;
        }>;
        default: undefined;
    };
    disabled: {
        type: BooleanConstructor;
        default: boolean;
    };
    loading: {
        type: BooleanConstructor;
        default: boolean;
    };
    loaderProps: {
        type: PropType<Record<string, any>>;
        default: undefined;
    };
    autoContrast: {
        type: BooleanConstructor;
        default: undefined;
    };
    variant: {
        type: PropType<MantineVariant<ButtonVariant>>;
        default: undefined;
    };
    mod: {
        type: PropType<any>;
        default: undefined;
    };
    'data-disabled': {
        type: BooleanConstructor;
        default: boolean;
    };
    dataDisabled: {
        type: BooleanConstructor;
        default: boolean;
    };
    classNames: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    styles: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    vars: {
        type: (ObjectConstructor | FunctionConstructor)[];
        default: undefined;
    };
    unstyled: {
        type: BooleanConstructor;
        default: boolean;
    };
}>> & Readonly<{}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
    [key: string]: any;
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {
    color: string;
    autoContrast: boolean;
    variant: MantineVariant<ButtonVariant>;
    gradient: {
        from: string;
        to: string;
        deg?: number;
    };
    classNames: Function | Record<string, any>;
    styles: Function | Record<string, any>;
    disabled: boolean;
    mod: any;
    justify: string;
    component: string;
    vars: Function | Record<string, any>;
    unstyled: boolean;
    leftSection: string | number | Function | Record<string, any>;
    rightSection: string | number | Function | Record<string, any>;
    fullWidth: boolean;
    loading: boolean;
    loaderProps: Record<string, any>;
    'data-disabled': boolean;
    dataDisabled: boolean;
}, {}, string, SlotsType<ButtonSlots>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & {
    Group: import("../..").WithBoxProps<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
        orientation: {
            type: PropType<"horizontal" | "vertical">;
            default: undefined;
        };
        borderWidth: PropType<string | number>;
        classNames: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        styles: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        vars: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        unstyled: {
            type: BooleanConstructor;
            default: boolean;
        };
    }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
        [key: string]: any;
    }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
        orientation: {
            type: PropType<"horizontal" | "vertical">;
            default: undefined;
        };
        borderWidth: PropType<string | number>;
        classNames: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        styles: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        vars: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        unstyled: {
            type: BooleanConstructor;
            default: boolean;
        };
    }>> & Readonly<{}>, {
        classNames: Function | Record<string, any>;
        styles: Function | Record<string, any>;
        orientation: "horizontal" | "vertical";
        vars: Function | Record<string, any>;
        unstyled: boolean;
    }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
    GroupSection: import("../..").WithBoxProps<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
        size: PropType<string | number>;
        color: {
            type: StringConstructor;
            default: undefined;
        };
        radius: PropType<string | number>;
        gradient: {
            type: PropType<{
                from: string;
                to: string;
                deg?: number;
            }>;
            default: undefined;
        };
        autoContrast: {
            type: BooleanConstructor;
            default: undefined;
        };
        variant: {
            type: PropType<ButtonVariant>;
            default: undefined;
        };
        classNames: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        styles: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        vars: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        unstyled: {
            type: BooleanConstructor;
            default: boolean;
        };
    }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
        [key: string]: any;
    }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
        size: PropType<string | number>;
        color: {
            type: StringConstructor;
            default: undefined;
        };
        radius: PropType<string | number>;
        gradient: {
            type: PropType<{
                from: string;
                to: string;
                deg?: number;
            }>;
            default: undefined;
        };
        autoContrast: {
            type: BooleanConstructor;
            default: undefined;
        };
        variant: {
            type: PropType<ButtonVariant>;
            default: undefined;
        };
        classNames: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        styles: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        vars: {
            type: (ObjectConstructor | FunctionConstructor)[];
            default: undefined;
        };
        unstyled: {
            type: BooleanConstructor;
            default: boolean;
        };
    }>> & Readonly<{}>, {
        color: string;
        autoContrast: boolean;
        variant: ButtonVariant;
        gradient: {
            from: string;
            to: string;
            deg?: number;
        };
        classNames: Function | Record<string, any>;
        styles: Function | Record<string, any>;
        vars: Function | Record<string, any>;
        unstyled: boolean;
    }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
}>;
