import { CSSObject } from 'styled-components';
import { ICSSProperties } from '@xcritical/theme';
import { ITheme } from '@xcritical/theme';
import { IThemeBase } from '@xcritical/theme';
import { IThemeNamespace } from '@xcritical/theme';
import { default as React_2 } from 'react';

declare const Button: React_2.MemoExoticComponent<React_2.ForwardRefExoticComponent<Pick<IButtonProps, keyof IButtonProps> & React_2.RefAttributes<HTMLButtonElement>>>;
export default Button;

export declare const ButtonGroup: React_2.FC<IButtonGroup>;

export declare type ButtonGroupTheme = ITheme<CSSObject>;

export declare const buttonGroupThemeNamespace = "@xcritical\\button-group";

export declare type ButtonTags = 'button' | 'span' | 'a';

export declare type ButtonTheme = ITheme<IBaseButtonTheme>;

export declare const buttonThemeNamespace = "@xcritical\\button";

export declare interface IBaseButtonTheme extends ICSSProperties {
    prefixSpacing?: number;
    postfixSpacing?: number;
    boxShadowColor?: string;
    buttonContentWrapper?: IThemeBase<ICSSProperties>;
    buttonContent?: IThemeBase<ICSSProperties>;
    _outline?: ICSSProperties;
}

export declare interface IButtonAppearanceProps {
    theme?: IThemeNamespace<ButtonTheme>;
    appearance?: string;
    baseAppearance?: string;
}

export declare interface IButtonGroup {
    theme?: IThemeNamespace<ButtonGroupTheme>;
    className?: string;
}

export declare interface IButtonProps extends IButtonAppearanceProps, IIsRTL, ISpacing, IShouldFitContent, IOnlyButtonProps {
    [key: string]: any;
}

export declare interface IContentProps extends IIsRTL, IInnerComponentAppearanceProps {
    textPosition?: string;
}

export declare type ICSSWideKeyword = 'initial' | 'inherit' | 'unset';

export declare interface IInnerComponentAppearanceProps {
    theme: IThemeNamespace<ButtonTheme>;
    appearance: string;
    baseAppearance: string;
}

export declare interface IIsRTL {
    isRTL?: boolean;
}

export declare interface IOnlyButtonProps {
    prefix?: React_2.ReactNode;
    postfix?: React_2.ReactNode;
    shouldAllowMultiline?: boolean;
    ghost?: boolean;
    href?: string;
    selected?: boolean;
    textPosition?: string;
    height?: string;
    component?: React_2.ElementType;
}

export declare interface IPrefixProps extends IInnerComponentAppearanceProps, IIsRTL {
}

export declare interface IShouldFitContent {
    shouldFitContent?: boolean;
}

export declare interface ISpacing {
    spacing?: 'compact' | 'default' | 'none';
}

export declare interface IStyledButtonProps extends IButtonProps {
    baseAppearance: string;
    appearance: string;
    spacing: 'compact' | 'default' | 'none';
    ghost: boolean;
    shouldFitContent: boolean;
}

export { }
