import { TooltipProps } from '../Tooltip/Tooltip';
import { ConfirmationItem, ButtonConfirmationTippyProps } from './ButtonComponents/ConfirmationButton';
import { IconStringList } from '../Icons/Icon';
type ChildrenOrIconProps = {
    /** Content inside of the Button */
    children: React.ReactNode;
    icon?: never;
    destructive?: never;
} | (IconProps & {
    children?: never;
});
type BaseProps = ChildrenOrIconProps & {
    /** Optional class for the Button */
    className?: string;
    /** Style of the Button */
    styleType?: 'primary-red' | 'primary-green' | 'primary-blue' | 'secondary' | 'tertiary' | 'text-red' | 'text-blue' | 'small';
    /** Optional prop for disabling button */
    disabled?: boolean;
    tooltip?: Omit<TooltipProps, 'children'>;
};
export type ButtonAsButton = BaseProps & Omit<JSX.IntrinsicElements['button'], keyof BaseProps> & {
    /** Type of Button */
    as?: 'button';
    confirmation?: never;
    tippyProps?: never;
    routerComponent?: never;
};
export type ButtonAsUnstyled = Omit<ButtonAsButton, 'as' | 'styleType'> & {
    /** Type of Button */
    as: 'unstyled';
    styleType?: BaseProps['styleType'];
    confirmation?: never;
    tippyProps?: never;
    routerComponent?: never;
};
type RouterProps = Omit<JSX.IntrinsicElements['a'], keyof BaseProps> & {
    /** Router component (e.g. Using Link from react-router-dom) */
    routerComponent: React.ElementType;
    /** Allow any props to be passed in */
    [key: string]: unknown;
};
export type ButtonAsLink = BaseProps & RouterProps & {
    /** Type of Button */
    as: 'link';
    confirmation?: never;
    tippyProps?: never;
};
export type ButtonAsExternal = BaseProps & Omit<JSX.IntrinsicElements['a'], keyof BaseProps> & {
    /** Type of Button */
    as: 'externalLink';
    confirmation?: never;
    tippyProps?: never;
    routerComponent?: never;
};
export type ButtonAsConfirmation = BaseProps & {
    /** Type of Button */
    as: 'confirmation';
    confirmation: ConfirmationItem;
    tippyProps?: ButtonConfirmationTippyProps;
    routerComponent?: never;
};
type OmitFromTypes = 'className' | 'styleType' | 'as';
export declare function isLinkProps(maybeLinkProps: unknown): maybeLinkProps is Omit<ButtonAsLink, OmitFromTypes>;
export declare function isButtonProps(maybeButtonProps: unknown): maybeButtonProps is Omit<ButtonAsButton, OmitFromTypes>;
export declare function isAnchorProps(maybeAnchorProps: unknown): maybeAnchorProps is Omit<ButtonAsExternal, OmitFromTypes>;
export type IconProps = {
    /** The icon to be shown in the button */
    icon: IconStringList;
    /** This boolean is used to style the icon red if the button is a destructive action. */
    destructive?: boolean;
};
export type ButtonProps = ButtonAsButton | ButtonAsExternal | ButtonAsLink | ButtonAsUnstyled | ButtonAsConfirmation;
export {};
