feat(system): add more dialog sizes

This commit is contained in:
Pavel Prichodko 2022-04-06 10:38:34 +02:00
parent 2dbc20f7a8
commit e4ba6250e0
No known key found for this signature in database
GPG Key ID: 8E4C82D464215E83
2 changed files with 25 additions and 3 deletions

View File

@ -11,6 +11,7 @@ import { Separator } from '../separator'
import { Actions, Body, Content, Header, Overlay } from './styles' import { Actions, Body, Content, Header, Overlay } from './styles'
import type { ButtonProps } from '../button' import type { ButtonProps } from '../button'
import type { Variants } from './styles'
interface DialogTriggerProps { interface DialogTriggerProps {
children: [React.ReactElement, React.ReactElement] children: [React.ReactElement, React.ReactElement]
@ -34,15 +35,16 @@ const DialogTrigger = (props: DialogTriggerProps) => {
interface DialogProps { interface DialogProps {
title: React.ReactNode title: React.ReactNode
children: React.ReactNode children: React.ReactNode
size?: Variants['size']
} }
const Dialog = (props: DialogProps) => { const Dialog = (props: DialogProps) => {
const { title, children } = props const { title, children, size, ...contentProps } = props
return ( return (
<Primitive.Portal> <Primitive.Portal>
<Overlay as={Primitive.Overlay} /> <Overlay as={Primitive.Overlay} />
<Content as={Primitive.Content}> <Content as={Primitive.Content} size={size} {...contentProps}>
<Header> <Header>
<Heading as={Primitive.Title} weight="600" size="17"> <Heading as={Primitive.Title} weight="600" size="17">
{title} {title}

View File

@ -1,5 +1,9 @@
import { keyframes, styled } from '~/src/styles/config' import { keyframes, styled } from '~/src/styles/config'
import type { VariantProps } from '~/src/styles/config'
export type Variants = VariantProps<typeof Content>
const overlayAnimation = keyframes({ const overlayAnimation = keyframes({
'0%': { '0%': {
opacity: 0, opacity: 0,
@ -40,12 +44,28 @@ export const Content = styled('div', {
left: '50%', left: '50%',
transform: 'translate(-50%, -50%)', transform: 'translate(-50%, -50%)',
width: '90vw', width: '90vw',
maxWidth: '638px',
maxHeight: '85vh', maxHeight: '85vh',
'@motion': { '@motion': {
animation: `${contentAnimation} 150ms cubic-bezier(0.16, 1, 0.3, 1) forwards`, animation: `${contentAnimation} 150ms cubic-bezier(0.16, 1, 0.3, 1) forwards`,
}, },
variants: {
size: {
480: {
maxWidth: '480px',
},
640: {
maxWidth: '640px',
},
1060: {
maxWidth: '1060px',
},
},
},
defaultVariants: {
size: '480',
},
}) })
export const Header = styled('div', { export const Header = styled('div', {