| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | import {  memo,  useCallback,} from 'react'import { useTranslation } from 'react-i18next'import { useStore } from './store'import {  useIsChatMode,  useNodesReadOnly,  useNodesSyncDraft,} from './hooks'import { XClose } from '@/app/components/base/icons/src/vender/line/general'import {  FeaturesChoose,  FeaturesPanel,} from '@/app/components/base/features'const Features = () => {  const { t } = useTranslation()  const isChatMode = useIsChatMode()  const setShowFeaturesPanel = useStore(s => s.setShowFeaturesPanel)  const { nodesReadOnly } = useNodesReadOnly()  const { handleSyncWorkflowDraft } = useNodesSyncDraft()  const handleFeaturesChange = useCallback(() => {    handleSyncWorkflowDraft()  }, [handleSyncWorkflowDraft])  return (    <div className='fixed top-16 left-2 bottom-2 w-[600px] rounded-2xl border-[0.5px] border-gray-200 bg-white shadow-xl z-10'>      <div className='flex items-center justify-between px-4 pt-3'>        {t('workflow.common.features')}        <div className='flex items-center'>          {            isChatMode && (              <>                <FeaturesChoose                  disabled={nodesReadOnly}                  onChange={handleFeaturesChange}                />                <div className='mx-3 w-[1px] h-[14px] bg-gray-200'></div>              </>            )          }          <div            className='flex items-center justify-center w-6 h-6 cursor-pointer'            onClick={() => setShowFeaturesPanel(false)}          >            <XClose className='w-4 h-4 text-gray-500' />          </div>        </div>      </div>      <div className='p-4'>        <FeaturesPanel          disabled={nodesReadOnly}          onChange={handleFeaturesChange}          openingStatementProps={{            onAutoAddPromptVariable: () => {},          }}        />      </div>    </div>  )}export default memo(Features)
 |