import { ReactElement, SVGProps, MouseEventHandler, Ref, ReactNode } from 'react';
import { TokenBaseStaticSpace, TokenColorStroke, TokenBaseStaticBorderRadius, TokenColorBackground, TokenColorIcon, TokenShadow } from '@hh.ru/magritte-design-tokens/types';
export type IconColor = TokenColorIcon;
export type IconDisabledColor = TokenColorIcon;
export type IconHoveredColor = TokenColorIcon;
export type IconPressedColor = TokenColorIcon;
interface StaticIconProps {
    onClick?: never;
    disabled?: never;
}
interface ActiveIconProps {
    onClick?: MouseEventHandler<HTMLButtonElement>;
    disabled?: boolean;
}
export type IconBaseProps = Omit<SVGProps<SVGSVGElement>, 'ref' | 'onClick'> & {
    'aria-hidden'?: boolean;
    padding?: TokenBaseStaticSpace;
    backgroundStyle?: TokenColorBackground;
    hoverBackgroundStyle?: TokenColorBackground;
    pressedBackgroundStyle?: TokenColorBackground;
    shadow?: TokenShadow;
    borderRadius?: TokenBaseStaticBorderRadius | 'halfHeight';
    borderStyle?: TokenColorStroke;
    increaseShadow?: boolean;
    /** Компонент Badge */
    badge?: ReactElement;
    'data-qa'?: string;
    ref?: Ref<HTMLOrSVGElement>;
    loading?: boolean;
} & (StaticIconProps | ActiveIconProps);
type StyledIconProps = IconBaseProps & {
    initialColor?: TokenColorIcon;
    hex?: never;
};
type HexedIconProps = IconBaseProps & {
    initialColor?: never;
    hex?: string;
};
export type IconProps = StyledIconProps | HexedIconProps;
export type StyledIconDynamicProps = StyledIconProps & {
    highlightedColor?: TokenColorIcon;
    pressedColor?: TokenColorIcon;
    disabledColor?: TokenColorIcon;
    hexHighlighted?: never;
    hexDisabled?: never;
    hexPressed?: never;
};
export type HexedIconDynamicProps = HexedIconProps & {
    highlightedColor?: never;
    pressedColor?: never;
    disabledColor?: never;
    hexHighlighted?: string;
    hexDisabled?: string;
    hexPressed?: string;
};
export type IconDynamicProps = StyledIconDynamicProps | HexedIconDynamicProps;
type MakeNever<T> = {
    [key in keyof T]?: never;
};
type IconPropsUnion = (IconProps & MakeNever<Omit<IconDynamicProps, keyof IconProps>>) | IconDynamicProps;
export declare const isIconElement: (component: ReactNode) => component is ReactElement<IconPropsUnion, IconWrapperComponent>;
export interface IconWrapperComponent<T = null> {
    (props: T extends null ? IconProps | IconDynamicProps : (IconProps | IconDynamicProps) & T): ReactElement;
    displayName?: string;
    isIcon?: boolean;
    _size?: number;
}
export interface IconWrapperComponentSize16<T = null> extends IconWrapperComponent<T> {
    _size: 16;
}
export interface IconWrapperComponentSize24<T = null> extends IconWrapperComponent<T> {
    _size: 24;
}
export interface IconWrapperComponentSize32<T = null> extends IconWrapperComponent<T> {
    _size: 32;
}
export {};
