'use client'; import { Dialog, DialogPanel, Transition, TransitionChild } from '@headlessui/react'; import { XMarkIcon } from '@heroicons/react/24/outline'; import { Fragment } from 'react'; type SideDialogProps = { title: string; open: boolean; onClose: () => void; children: React.ReactNode; }; const SideDialog = ({ title, children, open, onClose }: SideDialogProps) => { return ( <Transition show={open} as={Fragment}> <Dialog onClose={onClose} className="relative z-50"> <TransitionChild as={Fragment} enter="transition-all ease-in-out duration-300" enterFrom="opacity-0 backdrop-blur-none" enterTo="opacity-100 backdrop-blur-[.5px]" leave="transition-all ease-in-out duration-200" leaveFrom="opacity-100 backdrop-blur-[.5px]" leaveTo="opacity-0 backdrop-blur-none" > <div className="fixed inset-0 bg-black/30" aria-hidden="true" /> </TransitionChild> <TransitionChild as={Fragment} enter="transition-all ease-in-out duration-300" enterFrom="translate-x-full" enterTo="translate-x-0" leave="transition-all ease-in-out duration-200" leaveFrom="translate-x-0" leaveTo="translate-x-full" > <DialogPanel className="fixed bottom-0 right-0 top-0 flex h-full w-full flex-col border-l border-neutral-200 bg-white/80 p-6 text-black backdrop-blur-xl md:w-[500px]"> <div className="flex items-center justify-between"> <p className="text-lg font-semibold">{title}</p> <button aria-label="Close cart" onClick={onClose} className="text-black"> <XMarkIcon className="h-6" /> </button> </div> {children} </DialogPanel> </TransitionChild> </Dialog> </Transition> ); }; export default SideDialog;