index.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import React from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { RiCloseLine, RiInformation2Fill } from '@remixicon/react'
  4. import DialogWrapper from '@/app/components/base/features/new-feature-panel/dialog-wrapper'
  5. import { useDefaultModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
  6. import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
  7. import type { OnFeaturesChange } from '@/app/components/base/features/types'
  8. import MoreLikeThis from '@/app/components/base/features/new-feature-panel/more-like-this'
  9. import ConversationOpener from '@/app/components/base/features/new-feature-panel/conversation-opener'
  10. import FollowUp from '@/app/components/base/features/new-feature-panel/follow-up'
  11. import SpeechToText from '@/app/components/base/features/new-feature-panel/speech-to-text'
  12. import TextToSpeech from '@/app/components/base/features/new-feature-panel/text-to-speech'
  13. import FileUpload from '@/app/components/base/features/new-feature-panel/file-upload'
  14. import Citation from '@/app/components/base/features/new-feature-panel/citation'
  15. import ImageUpload from '@/app/components/base/features/new-feature-panel/image-upload'
  16. import Moderation from '@/app/components/base/features/new-feature-panel/moderation'
  17. import AnnotationReply from '@/app/components/base/features/new-feature-panel/annotation-reply'
  18. import type { PromptVariable } from '@/models/debug'
  19. import type { InputVar } from '@/app/components/workflow/types'
  20. // zlwu12 2025-09-18 注释
  21. // import { useDocLink } from '@/context/i18n'
  22. type Props = {
  23. show: boolean
  24. isChatMode: boolean
  25. disabled: boolean
  26. onChange?: OnFeaturesChange
  27. onClose: () => void
  28. inWorkflow?: boolean
  29. showFileUpload?: boolean
  30. promptVariables?: PromptVariable[]
  31. workflowVariables?: InputVar[]
  32. onAutoAddPromptVariable?: (variable: PromptVariable[]) => void
  33. }
  34. const NewFeaturePanel = ({
  35. show,
  36. isChatMode,
  37. disabled,
  38. onChange,
  39. onClose,
  40. inWorkflow = true,
  41. showFileUpload = true,
  42. promptVariables,
  43. workflowVariables,
  44. onAutoAddPromptVariable,
  45. }: Props) => {
  46. const { t } = useTranslation()
  47. // zlwu12 2025-09-18 注释
  48. // const docLink = useDocLink()
  49. const { data: speech2textDefaultModel } = useDefaultModel(ModelTypeEnum.speech2text)
  50. const { data: text2speechDefaultModel } = useDefaultModel(ModelTypeEnum.tts)
  51. return (
  52. <DialogWrapper
  53. show={show}
  54. onClose={onClose}
  55. inWorkflow={inWorkflow}
  56. >
  57. <div className='flex h-full grow flex-col'>
  58. {/* header */}
  59. <div className='flex shrink-0 justify-between p-4 pb-3'>
  60. <div>
  61. <div className='system-xl-semibold text-text-primary'>{t('workflow.common.features')}</div>
  62. <div className='body-xs-regular text-text-tertiary'>{t('workflow.common.featuresDescription')}</div>
  63. </div>
  64. <div className='h-8 w-8 cursor-pointer p-2' onClick={onClose}><RiCloseLine className='h-4 w-4 text-text-tertiary'/></div>
  65. </div>
  66. {/* list */}
  67. <div className='grow basis-0 overflow-y-auto px-4 pb-4'>
  68. {showFileUpload && (
  69. <div className='relative mb-1 rounded-xl border border-components-panel-border p-2 shadow-xs'>
  70. <div className='absolute left-0 top-0 h-full w-full rounded-xl opacity-40' style={{ background: 'linear-gradient(92deg, rgba(11, 165, 236, 0.25) 18.12%, rgba(255, 255, 255, 0.00) 167.31%)' }}></div>
  71. <div className='relative flex h-full w-full items-start'>
  72. <div className='mr-0.5 shrink-0 p-0.5'>
  73. <RiInformation2Fill className='h-5 w-5 text-text-accent' />
  74. </div>
  75. <div className='system-xs-medium p-1 text-text-primary'>
  76. <span>{isChatMode ? t('workflow.common.fileUploadTip') : t('workflow.common.ImageUploadLegacyTip')}</span>
  77. {/* zlwu12 2025-09-18 注释 */}
  78. {/* <a
  79. className='text-text-accent'
  80. href={docLink('/guides/workflow/bulletin')}
  81. target='_blank' rel='noopener noreferrer'
  82. >{t('workflow.common.featuresDocLink')}</a> */}
  83. </div>
  84. </div>
  85. </div>
  86. )}
  87. {!isChatMode && !inWorkflow && (
  88. <MoreLikeThis disabled={disabled} onChange={onChange} />
  89. )}
  90. {isChatMode && (
  91. <ConversationOpener
  92. disabled={disabled}
  93. onChange={onChange}
  94. promptVariables={promptVariables}
  95. workflowVariables={workflowVariables}
  96. onAutoAddPromptVariable={onAutoAddPromptVariable}
  97. />
  98. )}
  99. {isChatMode && (
  100. <FollowUp disabled={disabled} onChange={onChange} />
  101. )}
  102. {text2speechDefaultModel && (isChatMode || !inWorkflow) && (
  103. <TextToSpeech disabled={disabled} onChange={onChange} />
  104. )}
  105. {isChatMode && speech2textDefaultModel && (
  106. <SpeechToText disabled={disabled} onChange={onChange} />
  107. )}
  108. {showFileUpload && isChatMode && <FileUpload disabled={disabled} onChange={onChange} />}
  109. {showFileUpload && !isChatMode && <ImageUpload disabled={disabled} onChange={onChange} />}
  110. {isChatMode && (
  111. <Citation disabled={disabled} onChange={onChange} />
  112. )}
  113. {(isChatMode || !inWorkflow) && <Moderation disabled={disabled} onChange={onChange} />}
  114. {!inWorkflow && isChatMode && (
  115. <AnnotationReply disabled={disabled} onChange={onChange} />
  116. )}
  117. </div>
  118. </div>
  119. </DialogWrapper>
  120. )
  121. }
  122. export default NewFeaturePanel