import * as React from 'react'; import classNames from 'classnames'; import type { IconDefinition } from '@pf-ui/pf-icon-svg/lib/types'; import Context from './Context'; import type { 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> { 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 { prefixCls = 'anticon' } = React.useContext(Context); const classString = classNames( prefixCls, { [`${prefixCls}-${icon.name}`]: !!icon.name, [`${prefixCls}-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;