| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | 
                        - 'use client'
 - import type { FC } from 'react'
 - import React, { useEffect } from 'react'
 - import cn from 'classnames'
 - import { useBoolean } from 'ahooks'
 - import { ChevronRightIcon } from '@heroicons/react/24/outline'
 - 
 - export type IPanelProps = {
 -   className?: string
 -   headerIcon: React.ReactNode
 -   title: React.ReactNode
 -   headerRight?: React.ReactNode
 -   bodyClassName?: string
 -   children: React.ReactNode
 -   keepUnFold?: boolean
 -   foldDisabled?: boolean
 -   onFoldChange?: (fold: boolean) => void
 -   controlUnFold?: number
 -   controlFold?: number
 - }
 - 
 - const Panel: FC<IPanelProps> = ({
 -   className,
 -   headerIcon,
 -   title,
 -   headerRight,
 -   bodyClassName,
 -   children,
 -   keepUnFold,
 -   foldDisabled = false,
 -   onFoldChange,
 -   controlUnFold,
 -   controlFold,
 - }) => {
 -   const [fold, { setTrue: setFold, setFalse: setUnFold, toggle: toggleFold }] = useBoolean(!keepUnFold)
 -   useEffect(() => {
 -     onFoldChange?.(fold)
 -   }, [fold])
 - 
 -   useEffect(() => {
 -     if (controlUnFold)
 -       setUnFold()
 -   }, [controlUnFold])
 - 
 -   useEffect(() => {
 -     if (controlFold)
 -       setFold()
 -   }, [controlFold])
 - 
 -   // overflow-hidden
 -   return (
 -     <div className={cn(className, 'w-full rounded-xl border border-gray-100 overflow-hidden select-none')}>
 -       {/* Header */}
 -       <div
 -         onClick={() => (!foldDisabled && !keepUnFold) && toggleFold()}
 -         className={cn(!fold && 'border-b border-gray-100', 'flex justify-between items-center h-12 bg-gray-50 pl-4 pr-2')}>
 -         <div className='flex items-center gap-2'>
 -           {headerIcon}
 -           <div className='text-gray-900 text-sm'>{title}</div>
 -         </div>
 -         {(fold && headerRight) ? headerRight : ''}
 -         {!headerRight && !keepUnFold && (
 -           <ChevronRightIcon className={cn(!fold && 'rotate-90', 'mr-2 cursor-pointer')} width="16" height="16">
 -           </ChevronRightIcon>
 -         )}
 -       </div>
 - 
 -       {/* Main Content */}
 - 
 -       {!fold && !foldDisabled && (
 -         <div className={cn(bodyClassName)}>
 -           {children}
 -         </div>
 -       )}
 -     </div>
 -   )
 - }
 - export default React.memo(Panel)
 
 
  |