import * as React from 'react'; import CheckCircleFilled from '@ant-design/icons/CheckCircleFilled'; import CloseCircleFilled from '@ant-design/icons/CloseCircleFilled'; import ExclamationCircleFilled from '@ant-design/icons/ExclamationCircleFilled'; import InfoCircleFilled from '@ant-design/icons/InfoCircleFilled'; import LoadingOutlined from '@ant-design/icons/LoadingOutlined'; import { Notice } from '@rc-component/notification'; import type { NoticeProps } from '@rc-component/notification/lib/Notice'; import { clsx } from 'clsx'; import { useMergeSemantic } from '../_util/hooks'; import { cloneElement } from '../_util/reactNode'; import { useComponentConfig } from '../config-provider/context'; import useCSSVarCls from '../config-provider/hooks/useCSSVarCls'; import type { ArgsClassNamesType, ArgsStylesType, MessageSemanticClassNames, MessageSemanticStyles, NoticeType, } from './interface'; import useStyle from './style'; export const TypeIcon = { info: , success: , error: , warning: , loading: , }; export interface PureContentProps { prefixCls: string; type?: NoticeType; icon?: React.ReactNode; classNames?: MessageSemanticClassNames; styles?: MessageSemanticStyles; } export const PureContent: React.FC> = (props) => { const { prefixCls, type, icon, children, classNames: pureContentClassNames, styles } = props; const iconElement = icon || (type && TypeIcon[type]); const iconNode = cloneElement>(iconElement, (currentProps) => { const mergedStyle: React.CSSProperties = { ...currentProps?.style, ...styles?.icon }; return { className: clsx(currentProps.className, pureContentClassNames?.icon), style: mergedStyle, }; }); return (
{iconNode} {children}
); }; export interface PurePanelProps extends Omit, Omit { prefixCls?: string; classNames?: ArgsClassNamesType; styles?: ArgsStylesType; } /** @private Internal Component. Do not use in your production. */ const PurePanel: React.FC = (props) => { const { prefixCls: staticPrefixCls, className, style, type, icon, content, classNames: messageClassNames, styles, ...restProps } = props; const { getPrefixCls, className: contextClassName, style: contextStyle, classNames: contextClassNames, styles: contextStyles, } = useComponentConfig('message'); const prefixCls = staticPrefixCls || getPrefixCls('message'); const rootCls = useCSSVarCls(prefixCls); const [hashId, cssVarCls] = useStyle(prefixCls, rootCls); const [mergedClassNames, mergedStyles] = useMergeSemantic< ArgsClassNamesType, ArgsStylesType, PurePanelProps >([contextClassNames, messageClassNames], [contextStyles, styles], { props, }); return ( {content} } /> ); }; export default PurePanel;