From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001
From: wwf <yearningwang@iqtogether.com>
Date: 星期三, 04 六月 2025 15:17:49 +0800
Subject: [PATCH] 初始化

---
 app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx |  122 ++++++++--------------------------------
 1 files changed, 26 insertions(+), 96 deletions(-)

diff --git a/app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx b/app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx
index e536817..d62131a 100644
--- a/app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx
+++ b/app/components/header/account-setting/model-provider-page/model-selector/popup-item.tsx
@@ -1,25 +1,10 @@
 import type { FC } from 'react'
 import { useTranslation } from 'react-i18next'
-import {
-  RiFileTextLine,
-  RiFilmAiLine,
-  RiImageCircleAiLine,
-  RiVoiceAiFill,
-} from '@remixicon/react'
 import type {
   DefaultModel,
   Model,
   ModelItem,
 } from '../declarations'
-import {
-  ModelFeatureEnum,
-  ModelFeatureTextEnum,
-  ModelTypeEnum,
-} from '../declarations'
-import {
-  modelTypeFormat,
-  sizeFormat,
-} from '../utils'
 import {
   useLanguage,
   useUpdateModelList,
@@ -27,16 +12,15 @@
 } from '../hooks'
 import ModelIcon from '../model-icon'
 import ModelName from '../model-name'
-import ModelBadge from '../model-badge'
 import {
   ConfigurationMethodEnum,
+  MODEL_STATUS_TEXT,
   ModelStatusEnum,
 } from '../declarations'
 import { Check } from '@/app/components/base/icons/src/vender/line/general'
 import { useModalContext } from '@/context/modal-context'
 import { useProviderContext } from '@/context/provider-context'
 import Tooltip from '@/app/components/base/tooltip'
-import cn from '@/utils/classnames'
 
 type PopupItemProps = {
   defaultModel?: DefaultModel
@@ -80,104 +64,50 @@
 
   return (
     <div className='mb-1'>
-      <div className='flex h-[22px] items-center px-3 text-xs font-medium text-text-tertiary'>
+      <div className='flex items-center px-3 h-[22px] text-xs font-medium text-gray-500'>
         {model.label[language] || model.label.en_US}
       </div>
       {
         model.models.map(modelItem => (
           <Tooltip
             key={modelItem.model}
+            popupContent={modelItem.status !== ModelStatusEnum.active ? MODEL_STATUS_TEXT[modelItem.status][language] : undefined}
             position='right'
-            popupClassName='p-3 !w-[206px] bg-components-panel-bg-blur backdrop-blur-sm border-[0.5px] border-components-panel-border rounded-xl'
-            popupContent={
-              <div className='flex flex-col gap-1'>
-                <div className='flex flex-col items-start gap-2'>
-                  <ModelIcon
-                    className={cn('h-5 w-5 shrink-0')}
-                    provider={model}
-                    modelName={modelItem.model}
-                  />
-                  <div className='system-md-medium text-wrap break-words text-text-primary'>{modelItem.label[language] || modelItem.label.en_US}</div>
-                </div>
-                {/* {currentProvider?.description && (
-                  <div className='text-text-tertiary system-xs-regular'>{currentProvider?.description?.[language] || currentProvider?.description?.en_US}</div>
-                )} */}
-                <div className='flex flex-wrap gap-1'>
-                  {modelItem.model_type && (
-                    <ModelBadge>
-                      {modelTypeFormat(modelItem.model_type)}
-                    </ModelBadge>
-                  )}
-                  {modelItem.model_properties.mode && (
-                    <ModelBadge>
-                      {(modelItem.model_properties.mode as string).toLocaleUpperCase()}
-                    </ModelBadge>
-                  )}
-                  {modelItem.model_properties.context_size && (
-                    <ModelBadge>
-                      {sizeFormat(modelItem.model_properties.context_size as number)}
-                    </ModelBadge>
-                  )}
-                </div>
-                {modelItem.model_type === ModelTypeEnum.textGeneration && modelItem.features?.some(feature => [ModelFeatureEnum.vision, ModelFeatureEnum.audio, ModelFeatureEnum.video, ModelFeatureEnum.document].includes(feature)) && (
-                  <div className='pt-2'>
-                    <div className='system-2xs-medium-uppercase mb-1 text-text-tertiary'>{t('common.model.capabilities')}</div>
-                    <div className='flex flex-wrap gap-1'>
-                      {modelItem.features?.includes(ModelFeatureEnum.vision) && (
-                        <ModelBadge>
-                          <RiImageCircleAiLine className='mr-0.5 h-3.5 w-3.5' />
-                          <span>{ModelFeatureTextEnum.vision}</span>
-                        </ModelBadge>
-                      )}
-                      {modelItem.features?.includes(ModelFeatureEnum.audio) && (
-                        <ModelBadge>
-                          <RiVoiceAiFill className='mr-0.5 h-3.5 w-3.5' />
-                          <span>{ModelFeatureTextEnum.audio}</span>
-                        </ModelBadge>
-                      )}
-                      {modelItem.features?.includes(ModelFeatureEnum.video) && (
-                        <ModelBadge>
-                          <RiFilmAiLine className='mr-0.5 h-3.5 w-3.5' />
-                          <span>{ModelFeatureTextEnum.video}</span>
-                        </ModelBadge>
-                      )}
-                      {modelItem.features?.includes(ModelFeatureEnum.document) && (
-                        <ModelBadge>
-                          <RiFileTextLine className='mr-0.5 h-3.5 w-3.5' />
-                          <span>{ModelFeatureTextEnum.document}</span>
-                        </ModelBadge>
-                      )}
-                    </div>
-                  </div>
-                )}
-              </div>
-            }
           >
             <div
               key={modelItem.model}
-              className={cn('group relative flex h-8 items-center gap-1 rounded-lg px-3 py-1.5', modelItem.status === ModelStatusEnum.active ? 'cursor-pointer hover:bg-state-base-hover' : 'cursor-not-allowed hover:bg-state-base-hover-alt')}
+              className={`
+                group relative flex items-center px-3 py-1.5 h-8 rounded-lg
+                ${modelItem.status === ModelStatusEnum.active ? 'cursor-pointer hover:bg-gray-50' : 'cursor-not-allowed hover:bg-gray-50/60'}
+              `}
               onClick={() => handleSelect(model.provider, modelItem)}
             >
-              <div className='flex items-center gap-2'>
-                <ModelIcon
-                  className={cn('h-5 w-5 shrink-0')}
-                  provider={model}
-                  modelName={modelItem.model}
-                />
-                <ModelName
-                  className={cn('system-sm-medium text-text-secondary', modelItem.status !== ModelStatusEnum.active && 'opacity-60')}
-                  modelItem={modelItem}
-                />
-              </div>
+              <ModelIcon
+                className={`
+                  shrink-0 mr-2 w-4 h-4
+                  ${modelItem.status !== ModelStatusEnum.active && 'opacity-60'}
+                `}
+                provider={model}
+                modelName={modelItem.model}
+              />
+              <ModelName
+                className={`
+                  grow text-sm font-normal text-gray-900
+                  ${modelItem.status !== ModelStatusEnum.active && 'opacity-60'}
+                `}
+                modelItem={modelItem}
+                showMode
+                showFeatures
+              />
               {
                 defaultModel?.model === modelItem.model && defaultModel.provider === currentProvider.provider && (
-                  <Check className='h-4 w-4 shrink-0 text-text-accent' />
+                  <Check className='shrink-0 w-4 h-4 text-primary-600' />
                 )
               }
               {
                 modelItem.status === ModelStatusEnum.noConfigure && (
                   <div
-                    className='hidden cursor-pointer text-xs font-medium text-text-accent group-hover:block'
+                    className='hidden group-hover:block text-xs font-medium text-primary-600 cursor-pointer'
                     onClick={handleOpenModelModal}
                   >
                     {t('common.operation.add').toLocaleUpperCase()}

--
Gitblit v1.8.0