import React, { forwardRef } from "react"; import classNames from "classnames"; import { StatusContext } from "../../contexts/status"; import { Box, BoxProps } from "../Box"; import { Heading, HeadingProps } from "../Heading"; import { bemHOF } from "../../utilities/bem"; import { STATUS_VARIANT } from "../../types"; import { CUSTOM_ICON_TYPE, Icon, ICON_STYLE_PREFIX, ICON_TYPE, StatusIcon, StatusIconProps, } from "../Icon"; import { Flex } from "../Flex"; import { CloseButton, CloseButtonProps } from "../CloseButton"; const cn = bemHOF("Banner"); interface SharedBannerRootProps extends BoxProps { variant?: STATUS_VARIANT; } // @deprecated export interface BannerProps extends SharedBannerRootProps { title?: string; withIcon?: boolean; icon?: ICON_TYPE | CUSTOM_ICON_TYPE; iconPrefix?: ICON_STYLE_PREFIX; } export interface BannerRootProps extends SharedBannerRootProps { children: React.ReactNode; } const BannerRoot = forwardRef( function BannerRoot(props, ref) { const { children, variant = STATUS_VARIANT.DEFAULT, className, ...rest } = props; return ( {children} ); }, ); export interface BannerIconProps extends StatusIconProps { icon?: ICON_TYPE | CUSTOM_ICON_TYPE; iconPrefix?: ICON_STYLE_PREFIX; } const BannerIcon = forwardRef( function BannerIcon(props, ref) { const { icon, iconPrefix, className, ...rest } = props; if (icon) { return ( ); } return ( ); }, ); export type BannerContentStackProps = BoxProps; const BannerContentStack = forwardRef( function BannerContentStack({ children, className, ...props }, ref) { return ( {children} ); }, ); export type BannerTitleProps = HeadingProps; const BannerTitle = forwardRef( function BannerTitle({ children, ...props }, ref) { return ( {children} ); }, ); export type BannerBodyProps = BoxProps; const BannerBody = forwardRef( function BannerBody({ children, className, ...props }, ref) { return ( {children} ); }, ); export type BannerDismissProps = CloseButtonProps; const BannerDismiss = forwardRef( function BannerDismiss({ className, ...props }, ref) { return ( ); }, ); /** * @deprecated * Usage of Banner is deprecated. Please review the docs on how to * create a banner using composition. In your consuming app, you may * want to recreate a similar composed banner component. */ const Banner = forwardRef(function Banner( props, ref, ) { const { variant = STATUS_VARIANT.DEFAULT, title, className, children, withIcon = false, icon, iconPrefix, ...rest } = props; return ( {(withIcon || icon) && } {title ? ( {title} {children} ) : ( {children} )} ); }); const CompoundBanner = Object.assign(Banner, { Root: BannerRoot, Icon: BannerIcon, ContentStack: BannerContentStack, Title: BannerTitle, Body: BannerBody, Dismiss: BannerDismiss, }); export { CompoundBanner as Banner };