1- import { Dialog as HeadlessDialog } from '@headlessui/react'
2- import { cx } from '~/utils'
3- import { FC , PropsWithChildren } from 'react'
1+ import { Dialog as HeadlessDialog , Transition } from '@headlessui/react'
2+ import { FC , Fragment , PropsWithChildren } from 'react'
43import closeIcon from '~/assets/icons/close.svg'
4+ import { cx } from '~/utils'
55
66interface Props {
77 title : string
@@ -13,29 +13,51 @@ interface Props {
1313
1414const Dialog : FC < PropsWithChildren < Props > > = ( props ) => {
1515 return (
16- < HeadlessDialog open = { props . open } onClose = { props . onClose } className = "relative z-50" >
17- < div className = "fixed inset-0 bg-black/30" aria-hidden = "true" />
18- < div className = "fixed inset-0 flex items-center justify-center max-h-screen m-5" >
19- < HeadlessDialog . Panel
20- className = { cx (
21- 'mx-auto rounded-3xl bg-primary-background shadow-2xl max-h-full overflow-hidden flex flex-col' ,
22- props . className ,
23- ) }
16+ < Transition . Root show = { props . open } as = { Fragment } >
17+ < HeadlessDialog as = "div" onClose = { props . onClose } className = "relative z-50" >
18+ < Transition . Child
19+ as = { Fragment }
20+ enter = "ease-out duration-200"
21+ enterFrom = "opacity-0"
22+ enterTo = "opacity-100"
23+ leave = "ease-in duration-200"
24+ leaveFrom = "opacity-100"
25+ leaveTo = "opacity-0"
2426 >
25- < HeadlessDialog . Title
26- className = { cx (
27- ! props . borderless && 'border-b' ,
28- 'border-solid border-primary-border flex flex-row justify-center items-center py-4 px-5' ,
29- ) }
27+ < div className = "fixed inset-0 bg-black/30 bg-opacity-75 transition-opacity" />
28+ </ Transition . Child >
29+ < div className = "fixed inset-0 flex items-center justify-center max-h-screen m-5" >
30+ < Transition . Child
31+ as = { Fragment }
32+ enter = "ease-out duration-300"
33+ enterFrom = "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
34+ enterTo = "opacity-100 translate-y-0 sm:scale-100"
35+ leave = "ease-in duration-200"
36+ leaveFrom = "opacity-100 translate-y-0 sm:scale-100"
37+ leaveTo = "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
3038 >
31- < span className = "ml-auto" />
32- < span className = "font-bold text-primary-text text-base" > { props . title } </ span >
33- < img src = { closeIcon } className = "w-4 h-4 ml-auto mr-[10px] cursor-pointer" onClick = { props . onClose } />
34- </ HeadlessDialog . Title >
35- { props . children }
36- </ HeadlessDialog . Panel >
37- </ div >
38- </ HeadlessDialog >
39+ < HeadlessDialog . Panel
40+ className = { cx (
41+ 'mx-auto rounded-3xl bg-primary-background shadow-2xl max-h-full overflow-hidden flex flex-col' ,
42+ props . className ,
43+ ) }
44+ >
45+ < HeadlessDialog . Title
46+ className = { cx (
47+ ! props . borderless && 'border-b' ,
48+ 'border-solid border-primary-border flex flex-row justify-center items-center py-4 px-5' ,
49+ ) }
50+ >
51+ < span className = "ml-auto" />
52+ < span className = "font-bold text-primary-text text-base" > { props . title } </ span >
53+ < img src = { closeIcon } className = "w-4 h-4 ml-auto mr-[10px] cursor-pointer" onClick = { props . onClose } />
54+ </ HeadlessDialog . Title >
55+ { props . children }
56+ </ HeadlessDialog . Panel >
57+ </ Transition . Child >
58+ </ div >
59+ </ HeadlessDialog >
60+ </ Transition . Root >
3961 )
4062}
4163
0 commit comments