import * as React from 'react';
import { VariantProps } from 'class-variance-authority';
import * as class_variance_authority_types from 'class-variance-authority/types';

declare const buttonVariants: (props?: {
    variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "error";
    size?: "default" | "sm" | "xs" | "lg" | "icon-xs" | "icon-sm" | "icon" | "icon-lg";
    fullWidth?: boolean;
} & class_variance_authority_types.ClassProp) => string;

type ButtonCvaProps = VariantProps<typeof buttonVariants>;
type ButtonSizeType = NonNullable<ButtonCvaProps["size"]>;
type ButtonVariantType = NonNullable<ButtonCvaProps["variant"]>;

type ButtonProps = React.ComponentProps<"button"> & {
    /**
     * Defines button full width
     */
    fullWidth?: boolean;
    /**
     * Defines button variant
     */
    variant?: ButtonVariantType;
    /**
     * Defines button size
     */
    size?: ButtonSizeType;
    /**
     * Defines button content
     */
    children?: React.ReactNode;
    /**
     * Defines left icon
     */
    startIcon?: React.ReactElement;
    /**
     * Defines right icon
     */
    endIcon?: React.ReactElement;
    /**
     * Defines is button is in loading state
     */
    loading?: boolean;
    /**
     * Defines is position of loading icon
     */
    loadingPosition?: "start" | "end" | "center";
    asChild?: boolean;
};
declare function Button({ asChild, variant, disabled, fullWidth, loadingPosition: loadingPositionProp, children, type, loading, size, endIcon, startIcon, className, ...props }: ButtonProps): React.JSX.Element;

export { Button, type ButtonProps, type ButtonSizeType, type ButtonVariantType };
