import { Children, ReactElement } from 'react'; import Box from '../Box'; import { useDefaultLabelContext } from '../contexts/DefaultLabelProvider'; import Flex from '../Flex'; import Heading from '../Heading'; import Icon from '../Icon'; import MESSAGING_TYPE_ATTRIBUTES from '../MESSAGING_TYPE_ATTRIBUTES'; import Text from '../Text'; type Props = { gap: 3 | 6; iconSize: 32 | 24; message: string | ReactElement; type: 'default' | 'error' | 'info' | 'recommendation' | 'success' | 'warning'; title?: string; iconAccessibilityLabel?: string; fullWidth?: boolean; }; export default function HeaderSection({ iconSize, gap, title, message, type, iconAccessibilityLabel, fullWidth, }: Props) { const { iconAccessibilityLabelError, iconAccessibilityLabelInfo, iconAccessibilityLabelRecommendation, iconAccessibilityLabelSuccess, iconAccessibilityLabelWarning, } = useDefaultLabelContext('BannerCallout'); const getDefaultIconAccessibilityLabel = () => { switch (type) { case 'success': return iconAccessibilityLabelSuccess; case 'info': return iconAccessibilityLabelInfo; case 'recommendation': return iconAccessibilityLabelRecommendation; case 'warning': return iconAccessibilityLabelWarning; case 'error': return iconAccessibilityLabelError; default: return ''; } }; return ( {(title || message) && ( {title && {title}} {message && typeof message === 'string' && {message}} {message && typeof message !== 'string' && // @ts-expect-error - TS2339 Children.only(message).type.displayName === 'Text' ? message : null} )} ); }