import * as React from 'react'; import classNames from 'classnames'; import { IconDefinition } from '../types'; import { IconBaseProps } from './Icon'; import ReactIcon from './IconBase'; import { getTwoToneColor, TwoToneColor, setTwoToneColor, } from './twoTonePrimaryColor'; import { normalizeTwoToneColors } from './utils'; export interface AntdIconProps extends IconBaseProps { twoToneColor?: TwoToneColor; } export interface IconComponentProps extends AntdIconProps { icon: IconDefinition; } // Initial setting // should move it to antd main repo? setTwoToneColor('#1890ff'); // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34757#issuecomment-488848720 interface IconBaseComponent extends React.ForwardRefExoticComponent< Props & React.RefAttributes > { getTwoToneColor: typeof getTwoToneColor; setTwoToneColor: typeof setTwoToneColor; } const Icon = React.forwardRef( (props, ref) => { const { // affect outter ... className, // affect inner ... icon, spin, rotate, tabIndex, onClick, // other twoToneColor, ...restProps } = props; const classString = classNames( 'anticon', { [`anticon-${icon.name}`]: Boolean(icon.name) }, { 'anticon-spin': !!spin || icon.name === 'loading' }, className, ); let iconTabIndex = tabIndex; if (iconTabIndex === undefined && onClick) { iconTabIndex = -1; } const svgStyle = rotate ? { msTransform: `rotate(${rotate}deg)`, transform: `rotate(${rotate}deg)`, } : undefined; const [primaryColor, secondaryColor] = normalizeTwoToneColors( twoToneColor, ); return ( ); }, ) as IconBaseComponent; Icon.displayName = 'AntdIcon'; Icon.getTwoToneColor = getTwoToneColor; Icon.setTwoToneColor = setTwoToneColor; export default Icon;