import React, { HTMLAttributes, CSSProperties, FC, ReactNode } from 'react'; import classnames from 'classnames'; import { Button } from './Button'; import { Text } from './Text'; import { useEventCallback } from './hooks'; /** * */ export type ModalHeaderProps = { className?: string; title?: string; tagline?: string; }; /** * */ export const ModalHeader: FC = (props) => { const { className, title, tagline, ...rprops } = props; const hdClassNames = classnames(className, 'slds-modal__header'); return ( {title} {tagline ? {tagline} : null} ); }; /** * */ export type ModalContentProps = { className?: string; children?: ReactNode; }; /** * */ export const ModalContent: FC = ({ className, children, ...props }) => { const ctClassNames = classnames(className, 'slds-modal__content'); return ( {children} ); }; /** * */ export type ModalFooterProps = { className?: string; directional?: boolean; children?: ReactNode; }; /** * */ export const ModalFooter: FC = ({ className, directional, children, ...props }) => { const ftClassNames = classnames(className, 'slds-modal__footer', { 'slds-modal__footer_directional': directional, }); return ( {children} ); }; /** * */ export type ModalSize = 'large'; export type ModalProps = { size?: ModalSize; opened?: boolean; containerStyle?: CSSProperties; onHide?: () => void; closeButton?: boolean; onClose?: () => void; } & HTMLAttributes; /** * */ const Modal_: FC = (props) => { const { className, opened, children, size, containerStyle, onHide, closeButton, onClose: onClose_, ...rprops } = props; const modalClassNames = classnames(className, 'slds-modal', { 'slds-fade-in-open': opened, 'slds-modal_large': size === 'large', }); const backdropClassNames = classnames(className, 'slds-backdrop', { 'slds-backdrop_open': opened, }); const onClose = useEventCallback(() => { onClose_?.(); onHide?.(); }); return ( <> {closeButton ? ( ) : null} {children} > ); }; type ModalType = FC & { Header: typeof ModalHeader; Content: typeof ModalContent; Footer: typeof ModalFooter; }; (Modal_ as unknown as ModalType).Header = ModalHeader; (Modal_ as unknown as ModalType).Content = ModalContent; (Modal_ as unknown as ModalType).Footer = ModalFooter; export const Modal: ModalType = Modal_ as ModalType;
{tagline}