import * as CSS_2 from 'csstype';
import { FlattenSimpleInterpolation } from 'styled-components';
import { MicroMemoize } from 'micro-memoize';

export declare type AllType = any;

declare type ArrayOfStringsOrNumbers = (number | string)[];

export declare const BDAZZLED_BLUE = "#2F6690";

export declare const BLACK = "   #000";

export declare const BLACK_CHAROCOAL = "#31394C";

export declare const BLACK_RAISIN = "#212734";

export declare const BLUE = "#0078FF";

export declare const BRIGHT_RED = "#dc3545";

export declare const BRONZE = "#C67C3B";

export declare const CHAROCOAL = "#31394C";

export declare const colors: {
    WHITE: string;
    BLUE: string;
    TEAL_BLUE: string;
    ORANGE: string;
    ROSE_MADDER: string;
    GREEN: string;
    JUNGLE_GREEN: string;
    PORTLAND_ORANGE: string;
    VERDIGRIS: string;
    GOLDENROD: string;
    PURPLE: string;
    BDAZZLED_BLUE: string;
    PINK: string;
    RED: string;
    BRONZE: string;
    TIFFANY: string;
    YELLOW: string;
    ORCHID: string;
    BLACK: string;
    BLACK_RAISIN: string;
    DEFAULT: string;
    BLACK_CHAROCOAL: string;
    CHAROCOAL: string;
    PAYNES_GRAY: string;
    GRAY: string;
    GRAY_BLUE: string;
    DARK_LIME: string;
    BRIGHT_RED: string;
    VIVID_YELLOW: string;
    STRONG_CYAN: string;
    GRAY_LIGHT: string;
    PRIMARY: string;
    SECONDARY: string;
    SUCCESS: string;
    DANGER: string;
    WARNING: string;
    INFO: string;
    DARK: string;
    LIGHT: string;
};

export declare const compileAppearanceTheme: MicroMemoize.Memoized<(namespace: string, defaultTheme: ITheme, theme: IThemeNamespace, appearanceName: string, baseAppearanceName: string) => ITheme>;

export declare const DANGER = "#dc3545";

export declare const DARK = "#3D465E";

export declare const DARK_LIME = "#28a745";

export declare const DEFAULT = "#212734";

export declare const getAppearancePath: (appearanceName?: string, propertyPath?: OneOrManyString | undefined) => string[];

export declare function getAppearanceTheme<T>(namespace: string, defaultTheme: ITheme | ITheme<T>): IApperanceStateFunc<T>;

export declare const getFontObj: ({ size, weight, lineHeight, lineHeightRatio, }?: IFont) => React.CSSProperties;

export declare const getFontStyle: ({ size, weight, lineHeight, lineHeightRatio, }: IFont) => FlattenSimpleInterpolation;

export declare function getStatesTheme<T>(theme: T, stateName: string, baseState?: string): IFuncStateTheme<T>;

export declare const getThemedState: (namespace: string, defaultTheme: ITheme) => MicroMemoize.Memoized<(theme: IThemeNamespace<any> | undefined, propertyPath: OneOrManyString | undefined) => ITheme>;

export declare const GOLDENROD = "#D5A021";

export declare const GRAY = "#F0F0F0";

export declare const GRAY_BLUE = "#5a6268";

export declare const GRAY_LIGHT = "#f8f9fa";

export declare const GREEN = "#2DD070";

export declare interface IAppearance<T> {
    [namespace: string]: IThemeBase<T>;
}

export declare interface IApperanceStateFunc<T> {
    (theme: IThemeNamespace, appearanceName: string, propertyPath?: string | string[], baseAppearanceName?: string): ITheme | ITheme<T>;
}

export declare interface IBorder {
    width?: number;
    style?: string;
    color?: string;
}

export declare interface IBorderRadius {
    topLeft?: number;
    topRight?: number;
    bottomRight?: number;
    bottomLeft?: number;
}

export declare interface ICSSProperties extends CSS_2.Properties<string | number | any> {
    [key: string]: string | number | any | undefined;
}

export declare type ICSSWideKeyword = 'initial' | 'inherit' | 'unset';

export declare type IFilteredPath = string[];

export declare interface IFont {
    size?: number | string;
    weight?: ICSSWideKeyword | 'normal' | 'bold' | 'bolder' | 'lighter' | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
    lineHeight?: string;
    lineHeightRatio?: number;
}

declare interface IFuncStateTheme<T = ITheme> {
    (propertyPath?: string, defaultValue?: any): T;
}

export declare interface IHtmlActionStates<T> {
    hover?: T;
    active?: T;
    disabled?: T;
    selected?: T;
    focus?: T;
    invalid?: T;
}

export declare interface IIndentation {
    top?: number;
    right?: number;
    bottom?: number;
    left?: number;
}

export declare interface IIsRTL {
    isRTL?: boolean;
}

export declare const INFO = "#17a2b8";

export declare interface IReturnThemeFunction<T, TProp = [], TValue = any> {
    (theme: IThemeNamespace<ITheme<T>>, appearance: string, baseAppearance: string, ...props: TProp[]): TValue;
}

export declare type ITheme<T = ICSSProperties | any> = Pick<IThemeBase<T>, Exclude<keyof IThemeBase<T>, 'appearance'>> & {
    appearance?: IAppearance<T>;
};

export declare type IThemeBase<T> = T & IHtmlActionStates<T>;

export declare interface IThemeNamespace<T = ICSSProperties | any> {
    [namespace: string]: ITheme<T> | IThemeBase<T>;
}

export declare interface ITransition {
    property?: string;
    duration?: OneOrManyString;
    timingFunction?: string;
    delay?: OneOrManyString;
}

export declare const JUNGLE_GREEN = "#1B998B";

export declare const LIGHT = "#f8f9fa";

export declare const mergeBaseTheme: MicroMemoize.Memoized<(namespace: string, defaultTheme: ITheme, theme: IThemeNamespace) => ITheme>;

export declare type OneOrManyString = string | string[];

export declare const ORANGE = "#FF8F00";

export declare const ORCHID = "#B959FF";

export declare const PAYNES_GRAY = "#3D465E";

export declare const PINK = "#FF004F";

export declare const PORTLAND_ORANGE = "#F46036";

export declare const PRIMARY = "#0078FF";

export declare const PURPLE = "#5A51DE";

export declare const RED = "#E3111A";

export declare const ROSE_MADDER = "#E71D36";

export declare const rtlSide: (isRTL: boolean, property: string) => string;

export declare const rtlSwapper: (isRTL: boolean, left: number | string, right: number | string) => ArrayOfStringsOrNumbers;

export declare const SECONDARY = "#5a6268";

export declare const STRONG_CYAN = "#17a2b8";

export declare const SUCCESS = "#28a745";

export declare const TEAL_BLUE = "#00CAFF";

export declare const TIFFANY = "#1ACEB3";

export declare const VERDIGRIS = "#5ABCB9";

export declare const VIVID_YELLOW = "#ffc107";

export declare const WARNING = "#ffc107";

export declare const WHITE = "#FFFFFF";

export declare const YELLOW = "#FFC800";

export { }
