diff --git a/web/modals/modal.css b/web/modals/modal.css index 99d335dd4..7ee81ecb7 100644 --- a/web/modals/modal.css +++ b/web/modals/modal.css @@ -1,45 +1,57 @@ div.modalContainer { display: flex; background-color: var(--modal-bg); border-radius: 8px; flex-direction: column; margin: 20px; overflow: hidden; } div.modalContainerSmall { width: 330px; } div.modalContainerLarge { width: 500px; } .modalClose { color: var(--modal-close-color); } .modalClose:hover { color: var(--modal-close-color-hover); } div.modalHeader { + display: flex; + flex-direction: column; + padding: 32px 32px 0 32px; +} + +div.modalHeaderTitle { display: flex; justify-content: space-between; align-items: center; - padding: 32px 32px 0 32px; } div.modalHeaderCentered { justify-content: center; } h2.title { font-size: 20px; font-weight: 500; line-height: 32px; color: var(--fg); display: flex; align-items: center; column-gap: 8px; } + +h2.subtitle { + font-size: var(--xs-font-12); + font-weight: 400; + line-height: 18px; + color: var(--modal-fg); +} diff --git a/web/modals/modal.react.js b/web/modals/modal.react.js index c893436a1..51ba0ef7e 100644 --- a/web/modals/modal.react.js +++ b/web/modals/modal.react.js @@ -1,85 +1,94 @@ // @flow import classNames from 'classnames'; import * as React from 'react'; import ModalOverlay from 'lib/components/modal-overlay.react.js'; import SWMansionIcon, { type Icon, } from 'lib/components/SWMansionIcon.react.js'; import css from './modal.css'; import Button from '../components/button.react.js'; export type ModalSize = 'small' | 'large' | 'fit-content'; export type ModalOverridableProps = { +name: string, + +subtitle?: string, +icon?: Icon, +onClose: () => void, +withCloseButton?: boolean, +size?: ModalSize, +modalHeaderCentered?: boolean, }; type ModalProps = { ...ModalOverridableProps, +children?: React.Node, }; function Modal(props: ModalProps): React.Node { const { size = 'small', children, onClose, name, + subtitle, icon, withCloseButton = true, modalHeaderCentered = false, } = props; const modalContainerClasses = classNames(css.modalContainer, { [css.modalContainerLarge]: size === 'large', [css.modalContainerSmall]: size === 'small', }); const modalHeader = classNames({ [css.modalHeader]: true, [css.modalHeaderCentered]: modalHeaderCentered, }); const cornerCloseButton = React.useMemo(() => { if (!withCloseButton) { return null; } return ( ); }, [onClose, withCloseButton]); const headerIcon = React.useMemo(() => { if (!icon) { return null; } return ; }, [icon]); + let subtitleNode; + if (subtitle) { + subtitleNode =

{subtitle}

; + } return (
-

- {headerIcon} - {name} -

- {cornerCloseButton} +
+

+ {headerIcon} + {name} +

+ {cornerCloseButton} +
+ {subtitleNode}
{children}
); } export default Modal;