mango-v4-ui/components/shared/Modal.tsx

49 lines
1.3 KiB
TypeScript
Raw Normal View History

2022-05-03 21:20:14 -07:00
import { Dialog } from '@headlessui/react'
2022-09-06 21:36:35 -07:00
import { XMarkIcon } from '@heroicons/react/20/solid'
2022-05-03 21:20:14 -07:00
type ModalProps = {
children: React.ReactNode
2022-08-16 21:49:20 -07:00
disableOutsideClose?: boolean
2022-05-03 21:20:14 -07:00
isOpen: boolean
2022-07-20 21:50:56 -07:00
onClose: () => void
hideClose?: boolean
2022-05-03 21:20:14 -07:00
}
2022-07-20 21:50:56 -07:00
function Modal({
children,
2022-08-16 21:49:20 -07:00
disableOutsideClose = false,
2022-07-20 21:50:56 -07:00
isOpen,
onClose,
hideClose,
}: ModalProps) {
2022-05-03 21:20:14 -07:00
return (
<Dialog
open={isOpen}
onClose={onClose}
2022-11-20 15:35:59 -08:00
className="relative z-50 overflow-y-auto"
2022-05-03 21:20:14 -07:00
>
2022-11-16 07:23:44 -08:00
<div
className={`fixed inset-0 backdrop-blur-sm backdrop-brightness-75 ${
disableOutsideClose ? 'pointer-events-none' : ''
}`}
aria-hidden="true"
/>
<div className="fixed inset-0 flex items-center justify-center px-4 text-center">
2022-11-16 18:18:50 -08:00
<Dialog.Panel className="relative w-full max-w-md rounded-lg border border-th-bkg-3 bg-th-bkg-1 p-6">
2022-07-20 21:50:56 -07:00
{!hideClose ? (
<button
onClick={onClose}
2022-07-22 23:15:51 -07:00
className={`absolute right-4 top-4 z-50 text-th-fgd-4 focus:outline-none md:right-2 md:top-2 md:hover:text-th-primary`}
2022-07-20 21:50:56 -07:00
>
2022-09-29 21:21:23 -07:00
<XMarkIcon className={`h-6 w-6`} />
2022-07-20 21:50:56 -07:00
</button>
) : null}
2022-11-16 18:18:50 -08:00
<div>{children}</div>
2022-11-16 07:23:44 -08:00
</Dialog.Panel>
2022-05-03 21:20:14 -07:00
</div>
</Dialog>
)
}
export default Modal