| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | 
							- 'use client'
 
- import { Dialog, DialogBackdrop, DialogTitle } from '@headlessui/react'
 
- import { useTranslation } from 'react-i18next'
 
- import { XMarkIcon } from '@heroicons/react/24/outline'
 
- import Button from '../button'
 
- import cn from '@/utils/classnames'
 
- export type IDrawerProps = {
 
-   title?: string
 
-   description?: string
 
-   panelClassname?: string
 
-   children: React.ReactNode
 
-   footer?: React.ReactNode
 
-   mask?: boolean
 
-   positionCenter?: boolean
 
-   isOpen: boolean
 
-   showClose?: boolean
 
-   clickOutsideNotOpen?: boolean
 
-   onClose: () => void
 
-   onCancel?: () => void
 
-   onOk?: () => void
 
-   unmount?: boolean
 
- }
 
- export default function Drawer({
 
-   title = '',
 
-   description = '',
 
-   panelClassname = '',
 
-   children,
 
-   footer,
 
-   mask = true,
 
-   positionCenter,
 
-   showClose = false,
 
-   isOpen,
 
-   clickOutsideNotOpen,
 
-   onClose,
 
-   onCancel,
 
-   onOk,
 
-   unmount = false,
 
- }: IDrawerProps) {
 
-   const { t } = useTranslation()
 
-   return (
 
-     <Dialog
 
-       unmount={unmount}
 
-       open={isOpen}
 
-       onClose={() => !clickOutsideNotOpen && onClose()}
 
-       className="fixed inset-0 z-30 overflow-y-auto"
 
-     >
 
-       <div className={cn('flex h-screen w-screen justify-end', positionCenter && '!justify-center')}>
 
-         {/* mask */}
 
-         <DialogBackdrop
 
-           className={cn('fixed inset-0 z-40', mask && 'bg-black bg-opacity-30')}
 
-           onClick={() => {
 
-             !clickOutsideNotOpen && onClose()
 
-           }}
 
-         />
 
-         <div className={cn('relative z-50 flex w-full max-w-sm flex-col justify-between overflow-hidden bg-components-panel-bg p-6 text-left align-middle shadow-xl', panelClassname)}>
 
-           <>
 
-             <div className='flex justify-between'>
 
-               {title && <DialogTitle
 
-                 as="h3"
 
-                 className="text-lg font-medium leading-6 text-text-primary"
 
-               >
 
-                 {title}
 
-               </DialogTitle>}
 
-               {showClose && <DialogTitle className="mb-4 flex cursor-pointer items-center" as="div">
 
-                 <XMarkIcon className='h-4 w-4 text-text-tertiary' onClick={onClose} />
 
-               </DialogTitle>}
 
-             </div>
 
-             {description && <div className='mt-2 text-xs font-normal text-text-tertiary'>{description}</div>}
 
-             {children}
 
-           </>
 
-           {footer || (footer === null
 
-             ? null
 
-             : <div className="mt-10 flex flex-row justify-end">
 
-               <Button
 
-                 className='mr-2'
 
-                 onClick={() => {
 
-                   onCancel && onCancel()
 
-                 }}>{t('common.operation.cancel')}</Button>
 
-               <Button
 
-                 onClick={() => {
 
-                   onOk && onOk()
 
-                 }}>{t('common.operation.save')}</Button>
 
-             </div>)}
 
-         </div>
 
-       </div>
 
-     </Dialog>
 
-   )
 
- }
 
 
  |