import React, { forwardRef } from 'react'; import LoadingOutlined from '@ant-design/icons/LoadingOutlined'; import classNames from 'classnames'; import CSSMotion from 'rc-motion'; import type { ButtonProps } from './button'; import IconWrapper from './IconWrapper'; type InnerLoadingIconProps = { prefixCls: string; className?: string; style?: React.CSSProperties; iconClassName?: string; } & Pick; const InnerLoadingIcon = forwardRef((props, ref) => { const { prefixCls, className, style, iconClassName, iconPosition = 'start' } = props; const mergedIconCls = classNames(className, { [`${prefixCls}-loading-icon-end`]: iconPosition === 'end', [`${prefixCls}-loading-icon`]: iconPosition === 'start', }); return ( ); }); export type LoadingIconProps = { prefixCls: string; existIcon: boolean; loading?: boolean | object; className?: string; style?: React.CSSProperties; } & Pick; const getCollapsedWidth = (): React.CSSProperties => ({ width: 0, opacity: 0, transform: 'scale(0)', }); const getRealWidth = (node: HTMLElement): React.CSSProperties => ({ width: node.scrollWidth, opacity: 1, transform: 'scale(1)', }); const LoadingIcon: React.FC = (props) => { const { prefixCls, loading, existIcon, className, style, iconPosition } = props; const visible = !!loading; if (existIcon) { return ( ); } return ( {({ className: motionCls, style: motionStyle }, ref: React.Ref) => ( )} ); }; export default LoadingIcon;