From 36678a5969c9abf063d32c0686f6366b4689164b Mon Sep 17 00:00:00 2001 From: George Avsetsin Date: Wed, 26 May 2021 09:08:57 +0300 Subject: [PATCH] feat: extra modal content --- packages/modal/package.json | 2 +- packages/modal/src/Modal.stories.tsx | 26 +++++++++++++++++++++++++ packages/modal/src/Modal.tsx | 16 +++++++++------ packages/modal/src/ModalExtra.tsx | 13 +++++++++++++ packages/modal/src/ModalExtraStyles.tsx | 18 +++++++++++++++++ packages/modal/src/ModalStyles.tsx | 12 +++++++++--- packages/modal/src/index.ts | 1 + packages/modal/src/types.tsx | 3 +++ 8 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 packages/modal/src/ModalExtra.tsx create mode 100644 packages/modal/src/ModalExtraStyles.tsx diff --git a/packages/modal/package.json b/packages/modal/package.json index b07a07d9..57399a01 100644 --- a/packages/modal/package.json +++ b/packages/modal/package.json @@ -1,6 +1,6 @@ { "name": "@lidofinance/modal", - "version": "1.0.3", + "version": "1.0.4", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", "types": "dist/esm/index.d.ts", diff --git a/packages/modal/src/Modal.stories.tsx b/packages/modal/src/Modal.stories.tsx index e1059168..5ee932fe 100644 --- a/packages/modal/src/Modal.stories.tsx +++ b/packages/modal/src/Modal.stories.tsx @@ -2,6 +2,7 @@ import { Story, Meta } from '@storybook/react' import { ModalProps } from './types' import { Button } from '@lidofinance/button' import Modal from './Modal' +import ModalExtra from './ModalExtra' import { useCallback, useState } from 'react' export default { @@ -36,3 +37,28 @@ export const Basic: Story = (props) => { ) } + +export const ExtraContent: Story = (props) => { + const { onClose, children, ...rest } = props + const [state, setState] = useState(false) + const handleOpen = useCallback(() => setState(true), []) + const handleClose = useCallback(() => { + setState(false) + onClose?.() + }, [onClose]) + + return ( + <> + + {state && ( + Extra content} + > + {children} + + )} + + ) +} diff --git a/packages/modal/src/Modal.tsx b/packages/modal/src/Modal.tsx index d93cb856..3ccdbb3d 100644 --- a/packages/modal/src/Modal.tsx +++ b/packages/modal/src/Modal.tsx @@ -2,6 +2,7 @@ import { ForwardedRef, forwardRef } from 'react' import { ModalStyle, + ModalBaseStyle, ModalHeaderStyle, ModalTitleStyle, ModalCloseStyle, @@ -11,7 +12,7 @@ import { ModalProps } from './types' import ModalOverlay from './ModalOverlay' function Modal(props: ModalProps, ref?: ForwardedRef) { - const { children, title, center = false, ...rest } = props + const { children, title, center = false, extra, ...rest } = props const { onClose } = props const closable = !!onClose @@ -20,11 +21,14 @@ function Modal(props: ModalProps, ref?: ForwardedRef) { return ( - - {title} - {closable && } - - {children} + + + {title} + {closable && } + + {children} + + {extra} ) diff --git a/packages/modal/src/ModalExtra.tsx b/packages/modal/src/ModalExtra.tsx new file mode 100644 index 00000000..5d862e4c --- /dev/null +++ b/packages/modal/src/ModalExtra.tsx @@ -0,0 +1,13 @@ +import { ForwardedRef, forwardRef } from 'react' + +import { ModalExtraStyle } from './ModalExtraStyles' +import { ModalExtraProps } from './types' + +function ModalExtra( + props: ModalExtraProps, + ref?: ForwardedRef +) { + return +} + +export default forwardRef(ModalExtra) diff --git a/packages/modal/src/ModalExtraStyles.tsx b/packages/modal/src/ModalExtraStyles.tsx new file mode 100644 index 00000000..3748a506 --- /dev/null +++ b/packages/modal/src/ModalExtraStyles.tsx @@ -0,0 +1,18 @@ +import styled from 'styled-components' + +export const ModalExtraStyle = styled.div` + margin-top: ${({ theme }) => -theme.borderRadiusesMap.xl}px; + color: ${({ theme }) => theme.colors.accentContrast}; + background: ${({ theme }) => theme.colors.accent}; + padding: ${({ theme }) => theme.spaceMap.xxl}px; + padding-top: ${({ theme }) => + theme.borderRadiusesMap.xl + theme.spaceMap.xxl}px; + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; + + ${({ theme }) => theme.mediaQueries.md} { + padding: ${({ theme }) => theme.spaceMap.lg}px; + padding-top: ${({ theme }) => + theme.borderRadiusesMap.xl + theme.spaceMap.lg}px; + } +` diff --git a/packages/modal/src/ModalStyles.tsx b/packages/modal/src/ModalStyles.tsx index 7e0796dd..b7a13156 100644 --- a/packages/modal/src/ModalStyles.tsx +++ b/packages/modal/src/ModalStyles.tsx @@ -3,16 +3,22 @@ import { Close } from '@lidofinance/icons' import { ButtonIcon } from '@lidofinance/button' export const ModalStyle = styled.div<{ $center: boolean }>` - text-align: ${({ $center }) => ($center ? 'center' : 'left')}; width: 432px; max-width: 100%; - color: ${({ theme }) => theme.colors.text}; - background: ${({ theme }) => theme.colors.foreground}; + text-align: ${({ $center }) => ($center ? 'center' : 'left')}; border-radius: ${({ theme }) => theme.borderRadiusesMap.xl}px; box-shadow: ${({ theme }) => `${theme.boxShadows.xxl} ${theme.colors.shadowDark}`}; ` +export const ModalBaseStyle = styled.div` + color: ${({ theme }) => theme.colors.text}; + background: ${({ theme }) => theme.colors.foreground}; + border-radius: inherit; + position: relative; + z-index: 1; +` + export const ModalHeaderStyle = styled.div<{ $short: boolean }>` display: flex; align-items: center; diff --git a/packages/modal/src/index.ts b/packages/modal/src/index.ts index 98392a12..34736a01 100644 --- a/packages/modal/src/index.ts +++ b/packages/modal/src/index.ts @@ -1,3 +1,4 @@ export { default as Modal } from './Modal' +export { default as ModalExtra } from './ModalExtra' export { default as ModalOverlay } from './ModalOverlay' export * from './types' diff --git a/packages/modal/src/types.tsx b/packages/modal/src/types.tsx index 877c136b..84b2ab92 100644 --- a/packages/modal/src/types.tsx +++ b/packages/modal/src/types.tsx @@ -10,5 +10,8 @@ export type ModalOverlayProps = LidoComponentProps< export type ModalProps = { title?: React.ReactNode + extra?: React.ReactNode center?: boolean } & Omit + +export type ModalExtraProps = LidoComponentProps<'div'>