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; disabled?: boolean; } export type IconBaseProps = Omit, '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; 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 = { [key in keyof T]?: never; }; type IconPropsUnion = (IconProps & MakeNever>) | IconDynamicProps; export declare const isIconElement: (component: ReactNode) => component is ReactElement; export interface IconWrapperComponent { (props: T extends null ? IconProps | IconDynamicProps : (IconProps | IconDynamicProps) & T): ReactElement; displayName?: string; isIcon?: boolean; _size?: number; } export interface IconWrapperComponentSize16 extends IconWrapperComponent { _size: 16; } export interface IconWrapperComponentSize24 extends IconWrapperComponent { _size: 24; } export interface IconWrapperComponentSize32 extends IconWrapperComponent { _size: 32; } export {};