@lobehub/lobehub 2.0.0-next.307 → 2.0.0-next.308

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/changelog/v1.json +12 -0
  3. package/locales/ar/agentGroup.json +5 -0
  4. package/locales/ar/chat.json +26 -0
  5. package/locales/ar/models.json +43 -5
  6. package/locales/ar/plugin.json +4 -5
  7. package/locales/ar/setting.json +11 -0
  8. package/locales/ar/subscription.json +2 -0
  9. package/locales/ar/tool.json +2 -0
  10. package/locales/bg-BG/agentGroup.json +5 -0
  11. package/locales/bg-BG/chat.json +26 -0
  12. package/locales/bg-BG/models.json +49 -3
  13. package/locales/bg-BG/plugin.json +4 -5
  14. package/locales/bg-BG/setting.json +11 -0
  15. package/locales/bg-BG/subscription.json +2 -0
  16. package/locales/bg-BG/tool.json +2 -0
  17. package/locales/de-DE/agentGroup.json +5 -0
  18. package/locales/de-DE/chat.json +26 -0
  19. package/locales/de-DE/models.json +48 -5
  20. package/locales/de-DE/plugin.json +4 -5
  21. package/locales/de-DE/setting.json +11 -0
  22. package/locales/de-DE/subscription.json +2 -0
  23. package/locales/de-DE/tool.json +2 -0
  24. package/locales/en-US/models.json +8 -6
  25. package/locales/en-US/plugin.json +2 -4
  26. package/locales/en-US/setting.json +10 -11
  27. package/locales/en-US/tool.json +2 -0
  28. package/locales/es-ES/agentGroup.json +5 -0
  29. package/locales/es-ES/chat.json +26 -0
  30. package/locales/es-ES/models.json +43 -5
  31. package/locales/es-ES/plugin.json +4 -5
  32. package/locales/es-ES/setting.json +11 -0
  33. package/locales/es-ES/subscription.json +2 -0
  34. package/locales/es-ES/tool.json +2 -0
  35. package/locales/fa-IR/agentGroup.json +5 -0
  36. package/locales/fa-IR/chat.json +26 -0
  37. package/locales/fa-IR/models.json +42 -5
  38. package/locales/fa-IR/plugin.json +4 -5
  39. package/locales/fa-IR/setting.json +11 -0
  40. package/locales/fa-IR/subscription.json +2 -0
  41. package/locales/fa-IR/tool.json +2 -0
  42. package/locales/fr-FR/agentGroup.json +5 -0
  43. package/locales/fr-FR/chat.json +26 -0
  44. package/locales/fr-FR/models.json +5 -5
  45. package/locales/fr-FR/plugin.json +4 -5
  46. package/locales/fr-FR/setting.json +11 -0
  47. package/locales/fr-FR/subscription.json +2 -0
  48. package/locales/fr-FR/tool.json +2 -0
  49. package/locales/it-IT/agentGroup.json +5 -0
  50. package/locales/it-IT/chat.json +26 -0
  51. package/locales/it-IT/models.json +1 -3
  52. package/locales/it-IT/plugin.json +4 -5
  53. package/locales/it-IT/setting.json +11 -0
  54. package/locales/it-IT/subscription.json +2 -0
  55. package/locales/it-IT/tool.json +2 -0
  56. package/locales/ja-JP/agentGroup.json +5 -0
  57. package/locales/ja-JP/chat.json +26 -0
  58. package/locales/ja-JP/models.json +1 -5
  59. package/locales/ja-JP/plugin.json +4 -5
  60. package/locales/ja-JP/setting.json +11 -0
  61. package/locales/ja-JP/subscription.json +2 -0
  62. package/locales/ja-JP/tool.json +2 -0
  63. package/locales/ko-KR/agentGroup.json +5 -0
  64. package/locales/ko-KR/chat.json +26 -0
  65. package/locales/ko-KR/models.json +1 -3
  66. package/locales/ko-KR/plugin.json +4 -5
  67. package/locales/ko-KR/setting.json +11 -0
  68. package/locales/ko-KR/subscription.json +2 -0
  69. package/locales/ko-KR/tool.json +2 -0
  70. package/locales/nl-NL/agentGroup.json +5 -0
  71. package/locales/nl-NL/chat.json +26 -0
  72. package/locales/nl-NL/models.json +35 -3
  73. package/locales/nl-NL/plugin.json +4 -5
  74. package/locales/nl-NL/setting.json +11 -0
  75. package/locales/nl-NL/subscription.json +2 -0
  76. package/locales/nl-NL/tool.json +2 -0
  77. package/locales/pl-PL/agentGroup.json +5 -0
  78. package/locales/pl-PL/chat.json +26 -0
  79. package/locales/pl-PL/models.json +1 -3
  80. package/locales/pl-PL/plugin.json +4 -5
  81. package/locales/pl-PL/setting.json +11 -0
  82. package/locales/pl-PL/subscription.json +2 -0
  83. package/locales/pl-PL/tool.json +2 -0
  84. package/locales/pt-BR/agentGroup.json +5 -0
  85. package/locales/pt-BR/chat.json +26 -0
  86. package/locales/pt-BR/models.json +50 -5
  87. package/locales/pt-BR/plugin.json +4 -5
  88. package/locales/pt-BR/setting.json +11 -0
  89. package/locales/pt-BR/subscription.json +2 -0
  90. package/locales/pt-BR/tool.json +2 -0
  91. package/locales/ru-RU/agentGroup.json +5 -0
  92. package/locales/ru-RU/chat.json +26 -0
  93. package/locales/ru-RU/models.json +22 -3
  94. package/locales/ru-RU/plugin.json +4 -5
  95. package/locales/ru-RU/setting.json +11 -0
  96. package/locales/ru-RU/subscription.json +2 -0
  97. package/locales/ru-RU/tool.json +2 -0
  98. package/locales/tr-TR/agentGroup.json +5 -0
  99. package/locales/tr-TR/chat.json +26 -0
  100. package/locales/tr-TR/models.json +36 -3
  101. package/locales/tr-TR/plugin.json +4 -5
  102. package/locales/tr-TR/setting.json +11 -0
  103. package/locales/tr-TR/subscription.json +2 -0
  104. package/locales/tr-TR/tool.json +2 -0
  105. package/locales/vi-VN/agentGroup.json +5 -0
  106. package/locales/vi-VN/chat.json +26 -0
  107. package/locales/vi-VN/models.json +1 -1
  108. package/locales/vi-VN/plugin.json +4 -5
  109. package/locales/vi-VN/setting.json +11 -0
  110. package/locales/vi-VN/subscription.json +2 -0
  111. package/locales/vi-VN/tool.json +2 -0
  112. package/locales/zh-CN/models.json +52 -5
  113. package/locales/zh-CN/plugin.json +5 -7
  114. package/locales/zh-CN/setting.json +10 -11
  115. package/locales/zh-CN/tool.json +2 -2
  116. package/locales/zh-TW/agentGroup.json +5 -0
  117. package/locales/zh-TW/chat.json +26 -0
  118. package/locales/zh-TW/models.json +54 -5
  119. package/locales/zh-TW/plugin.json +4 -5
  120. package/locales/zh-TW/setting.json +11 -0
  121. package/locales/zh-TW/subscription.json +2 -0
  122. package/locales/zh-TW/tool.json +2 -0
  123. package/package.json +1 -1
  124. package/packages/builtin-tool-group-management/src/client/Inspector/ExecuteAgentTask/index.tsx +52 -8
  125. package/packages/builtin-tool-group-management/src/client/Render/ExecuteTask/index.tsx +2 -21
  126. package/packages/builtin-tool-group-management/src/executor.test.ts +6 -4
  127. package/packages/builtin-tool-group-management/src/manifest.ts +5 -1
  128. package/packages/builtin-tool-group-management/src/types.ts +2 -0
  129. package/packages/builtin-tool-local-system/src/client/Render/WriteFile/index.tsx +48 -5
  130. package/packages/builtin-tool-local-system/src/client/Streaming/WriteFile/index.tsx +39 -0
  131. package/packages/builtin-tool-local-system/src/client/Streaming/index.ts +2 -0
  132. package/packages/model-bank/src/aiModels/qiniu.ts +24 -0
  133. package/src/app/[variants]/(auth)/_layout/index.tsx +0 -2
  134. package/src/app/[variants]/(auth)/layout.tsx +0 -2
  135. package/src/app/[variants]/(auth)/login/[[...login]]/page.tsx +1 -3
  136. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -3
  137. package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/index.tsx +0 -2
  138. package/src/app/[variants]/(main)/_layout/index.tsx +0 -2
  139. package/src/app/[variants]/(main)/agent/_layout/index.tsx +0 -2
  140. package/src/app/[variants]/(main)/agent/features/Portal/index.tsx +0 -2
  141. package/src/app/[variants]/(main)/community/(list)/_layout/index.tsx +0 -2
  142. package/src/app/[variants]/(main)/community/(list)/assistant/_layout/index.tsx +0 -2
  143. package/src/app/[variants]/(main)/community/(list)/mcp/_layout/index.tsx +0 -2
  144. package/src/app/[variants]/(main)/community/(list)/model/_layout/index.tsx +0 -2
  145. package/src/app/[variants]/(main)/community/_layout/index.tsx +0 -2
  146. package/src/app/[variants]/(main)/group/_layout/index.tsx +0 -2
  147. package/src/app/[variants]/(main)/group/features/Conversation/Header/index.tsx +4 -2
  148. package/src/app/[variants]/(main)/group/features/Portal/index.tsx +0 -2
  149. package/src/app/[variants]/(main)/home/_layout/index.tsx +0 -2
  150. package/src/app/[variants]/(main)/home/index.tsx +0 -2
  151. package/src/app/[variants]/(main)/image/_layout/Topics/TopicUrlSync.tsx +0 -2
  152. package/src/app/[variants]/(main)/image/_layout/index.tsx +0 -2
  153. package/src/app/[variants]/(main)/memory/_layout/index.tsx +0 -2
  154. package/src/app/[variants]/(main)/page/_layout/index.tsx +0 -2
  155. package/src/app/[variants]/(main)/resource/(home)/_layout/index.tsx +0 -2
  156. package/src/app/[variants]/(main)/resource/_layout/index.tsx +0 -2
  157. package/src/app/[variants]/(main)/resource/library/_layout/index.tsx +0 -2
  158. package/src/app/[variants]/(main)/resource/library/features/Container.tsx +0 -2
  159. package/src/app/[variants]/(main)/settings/_layout/index.tsx +0 -2
  160. package/src/app/[variants]/(main)/settings/about/index.tsx +0 -2
  161. package/src/app/[variants]/(main)/settings/agent/index.tsx +0 -2
  162. package/src/app/[variants]/(main)/settings/apikey/index.tsx +0 -2
  163. package/src/app/[variants]/(main)/settings/chat-appearance/index.tsx +0 -2
  164. package/src/app/[variants]/(main)/settings/common/index.tsx +0 -2
  165. package/src/app/[variants]/(main)/settings/hotkey/index.tsx +0 -2
  166. package/src/app/[variants]/(main)/settings/image/index.tsx +0 -2
  167. package/src/app/[variants]/(main)/settings/memory/index.tsx +0 -2
  168. package/src/app/[variants]/(main)/settings/provider/(list)/index.tsx +0 -2
  169. package/src/app/[variants]/(main)/settings/proxy/index.tsx +0 -2
  170. package/src/app/[variants]/(main)/settings/security/index.tsx +1 -3
  171. package/src/app/[variants]/(main)/settings/storage/index.tsx +0 -2
  172. package/src/app/[variants]/(main)/settings/tts/index.tsx +0 -2
  173. package/src/app/[variants]/(mobile)/(home)/_layout/index.tsx +0 -2
  174. package/src/app/[variants]/(mobile)/_layout/index.tsx +1 -3
  175. package/src/app/[variants]/(mobile)/chat/_layout/index.tsx +0 -2
  176. package/src/app/[variants]/(mobile)/chat/settings/_layout/index.tsx +0 -2
  177. package/src/app/[variants]/(mobile)/community/(detail)/_layout/index.tsx +0 -2
  178. package/src/app/[variants]/(mobile)/community/(list)/_layout/index.tsx +0 -2
  179. package/src/app/[variants]/(mobile)/community/_layout/index.tsx +0 -2
  180. package/src/app/[variants]/(mobile)/router/MobileClientRouter.tsx +0 -2
  181. package/src/app/[variants]/(mobile)/settings/index.tsx +0 -2
  182. package/src/app/[variants]/onboarding/_layout/index.tsx +0 -2
  183. package/src/app/[variants]/router/DesktopClientRouter.tsx +0 -2
  184. package/src/components/ModelSelect/index.tsx +6 -56
  185. package/src/components/server/MobileNavLayout.tsx +0 -2
  186. package/src/components/server/ServerLayout.tsx +0 -2
  187. package/src/features/ModelSwitchPanel/components/Footer.tsx +0 -2
  188. package/src/features/ModelSwitchPanel/components/List/MultipleProvidersModelItem.tsx +0 -1
  189. package/src/features/ModelSwitchPanel/components/List/SingleProviderModelItem.tsx +0 -1
  190. package/src/features/ModelSwitchPanel/components/List/VirtualItemRenderer.tsx +0 -1
  191. package/src/features/ModelSwitchPanel/components/List/index.tsx +15 -13
  192. package/src/features/ModelSwitchPanel/components/PanelContent.tsx +0 -2
  193. package/src/features/ModelSwitchPanel/index.tsx +21 -23
  194. package/src/features/ResourceManager/components/Explorer/MasonryView/index.tsx +0 -2
  195. package/src/features/User/UserAvatar.tsx +0 -2
  196. package/src/locales/default/plugin.ts +2 -1
  197. package/src/store/chat/agents/GroupOrchestration/__tests__/call-supervisor.test.ts +305 -0
  198. package/src/store/chat/agents/GroupOrchestration/createGroupOrchestrationExecutors.ts +2 -1
  199. package/src/store/chat/slices/plugin/actions/exector.ts +92 -0
  200. package/src/store/chat/slices/plugin/actions/pluginTypes.ts +82 -177
@@ -18,6 +18,4 @@ const DesktopMemoryLayout: FC = () => {
18
18
  );
19
19
  };
20
20
 
21
- DesktopMemoryLayout.displayName = 'DesktopMemoryLayout';
22
-
23
21
  export default DesktopMemoryLayout;
@@ -20,6 +20,4 @@ const DesktopPagesLayout: FC = () => {
20
20
  );
21
21
  };
22
22
 
23
- DesktopPagesLayout.displayName = 'DesktopPagesLayout';
24
-
25
23
  export default DesktopPagesLayout;
@@ -18,6 +18,4 @@ const HomeLayout: FC = () => {
18
18
  );
19
19
  };
20
20
 
21
- HomeLayout.displayName = 'ResourceHomeLayout';
22
-
23
21
  export default HomeLayout;
@@ -14,6 +14,4 @@ const ResourceLayout: FC = () => {
14
14
  );
15
15
  };
16
16
 
17
- ResourceLayout.displayName = 'ResourceLayout';
18
-
19
17
  export default ResourceLayout;
@@ -21,6 +21,4 @@ const LibraryLayout: FC = () => {
21
21
  );
22
22
  };
23
23
 
24
- LibraryLayout.displayName = 'ResourceLibraryLayout';
25
-
26
24
  export default LibraryLayout;
@@ -21,6 +21,4 @@ const Container: FC<PropsWithChildren> = ({ children }) => {
21
21
  );
22
22
  };
23
23
 
24
- Container.displayName = 'Container';
25
-
26
24
  export default Container;
@@ -25,6 +25,4 @@ const Layout: FC = () => {
25
25
  );
26
26
  };
27
27
 
28
- Layout.displayName = 'DesktopSettingsWrapper';
29
-
30
28
  export default Layout;
@@ -16,6 +16,4 @@ const Page = ({ mobile }: { mobile?: boolean }) => {
16
16
  );
17
17
  };
18
18
 
19
- Page.displayName = 'AboutSetting';
20
-
21
19
  export default Page;
@@ -33,6 +33,4 @@ const Page = () => {
33
33
  );
34
34
  };
35
35
 
36
- Page.displayName = 'SystemAgent';
37
-
38
36
  export default Page;
@@ -14,6 +14,4 @@ const Page = () => {
14
14
  );
15
15
  };
16
16
 
17
- Page.displayName = 'ApiKeySetting';
18
-
19
17
  export default Page;
@@ -15,6 +15,4 @@ const Page = () => {
15
15
  );
16
16
  };
17
17
 
18
- Page.displayName = 'ChatAppearanceSetting';
19
-
20
18
  export default Page;
@@ -16,6 +16,4 @@ const Page = () => {
16
16
  );
17
17
  };
18
18
 
19
- Page.displayName = 'CommonSetting';
20
-
21
19
  export default Page;
@@ -19,6 +19,4 @@ const Page = () => {
19
19
  );
20
20
  };
21
21
 
22
- Page.displayName = 'HotkeySetting';
23
-
24
22
  export default Page;
@@ -14,6 +14,4 @@ const Page = () => {
14
14
  );
15
15
  };
16
16
 
17
- Page.displayName = 'ImageSetting';
18
-
19
17
  export default Page;
@@ -14,6 +14,4 @@ const Page = () => {
14
14
  );
15
15
  };
16
16
 
17
- Page.displayName = 'MemorySetting';
18
-
19
17
  export default Page;
@@ -33,6 +33,4 @@ const Page = (props: { mobile?: boolean }) => {
33
33
  );
34
34
  };
35
35
 
36
- Page.displayName = 'ProviderGrid';
37
-
38
36
  export default Page;
@@ -14,6 +14,4 @@ const Page = () => {
14
14
  );
15
15
  };
16
16
 
17
- Page.displayName = 'ProxySetting';
18
-
19
17
  export default Page;
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
 
3
3
  import { Skeleton } from '@lobehub/ui';
4
- import dynamic from '@/libs/next/dynamic';
5
4
  import { useTranslation } from 'react-i18next';
6
5
  import { Navigate } from 'react-router-dom';
7
6
 
8
7
  import SettingHeader from '@/app/[variants]/(main)/settings/features/SettingHeader';
9
8
  import { enableClerk } from '@/envs/auth';
9
+ import dynamic from '@/libs/next/dynamic';
10
10
 
11
11
  const ClerkProfile = dynamic(() => import('./features/ClerkProfile'), {
12
12
  loading: () => (
@@ -27,6 +27,4 @@ const Page = () => {
27
27
  );
28
28
  };
29
29
 
30
- Page.displayName = 'SecuritySetting';
31
-
32
30
  export default Page;
@@ -14,6 +14,4 @@ const Page = () => {
14
14
  );
15
15
  };
16
16
 
17
- Page.displayName = 'StorageSetting';
18
-
19
17
  export default Page;
@@ -16,6 +16,4 @@ const Page = () => {
16
16
  );
17
17
  };
18
18
 
19
- Page.displayName = 'TtsSetting';
20
-
21
19
  export default Page;
@@ -15,6 +15,4 @@ const Layout: FC = () => {
15
15
  );
16
16
  };
17
17
 
18
- Layout.displayName = 'MobileHomeLayout';
19
-
20
18
  export default Layout;
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
 
3
- import dynamic from '@/libs/next/dynamic';
4
3
  import { type FC, Suspense } from 'react';
5
4
  import { Outlet, useLocation } from 'react-router-dom';
6
5
 
7
6
  import Loading from '@/components/Loading/BrandTextLoading';
8
7
  import { MarketAuthProvider } from '@/layout/AuthProvider/MarketAuth';
8
+ import dynamic from '@/libs/next/dynamic';
9
9
  import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
10
10
  import { NavigatorRegistrar } from '@/utils/router';
11
11
 
@@ -42,6 +42,4 @@ const MobileMainLayout: FC = () => {
42
42
  );
43
43
  };
44
44
 
45
- MobileMainLayout.displayName = 'MobileMainLayout';
46
-
47
45
  export default MobileMainLayout;
@@ -23,6 +23,4 @@ const Layout: FC = () => {
23
23
  );
24
24
  };
25
25
 
26
- Layout.displayName = 'MobileChatLayout';
27
-
28
26
  export default Layout;
@@ -14,6 +14,4 @@ const Layout = ({ children }: PropsWithChildren) => (
14
14
  </MobileContentLayout>
15
15
  );
16
16
 
17
- Layout.displayName = 'MobileSessionSettingsLayout';
18
-
19
17
  export default Layout;
@@ -16,6 +16,4 @@ const Layout = () => {
16
16
  );
17
17
  };
18
18
 
19
- Layout.displayName = 'MobileDiscoverDetailLayout';
20
-
21
19
  export default Layout;
@@ -23,6 +23,4 @@ const Layout = () => {
23
23
  );
24
24
  };
25
25
 
26
- Layout.displayName = 'MobileDiscoverLayout';
27
-
28
26
  export default Layout;
@@ -4,6 +4,4 @@ const Layout = () => {
4
4
  return <Outlet />;
5
5
  };
6
6
 
7
- Layout.displayName = 'MobileDiscoverStoreLayout';
8
-
9
7
  export default Layout;
@@ -14,6 +14,4 @@ const ClientRouter = () => {
14
14
  );
15
15
  };
16
16
 
17
- ClientRouter.displayName = 'ClientRouter';
18
-
19
17
  export default ClientRouter;
@@ -19,6 +19,4 @@ const Layout = () => {
19
19
  );
20
20
  };
21
21
 
22
- Layout.displayName = 'MobileSettingsLayout';
23
-
24
22
  export default Layout;
@@ -48,6 +48,4 @@ const OnBoardingContainer: FC<PropsWithChildren> = ({ children }) => {
48
48
  );
49
49
  };
50
50
 
51
- OnBoardingContainer.displayName = 'OnBoardingContainer';
52
-
53
51
  export default OnBoardingContainer;
@@ -36,6 +36,4 @@ const ClientRouter = () => {
36
36
  );
37
37
  };
38
38
 
39
- ClientRouter.displayName = 'ClientRouter';
40
-
41
39
  export default ClientRouter;
@@ -14,7 +14,7 @@ import {
14
14
  } from 'lucide-react';
15
15
  import { type ModelAbilities } from 'model-bank';
16
16
  import numeral from 'numeral';
17
- import { CSSProperties, type ComponentProps, type FC, memo, useState } from 'react';
17
+ import { CSSProperties, type ComponentProps, type FC, memo } from 'react';
18
18
  import { useTranslation } from 'react-i18next';
19
19
 
20
20
  import { type AiProviderSourceType } from '@/types/aiProvider';
@@ -65,13 +65,6 @@ interface ModelInfoTagsProps extends ModelAbilities {
65
65
  isCustom?: boolean;
66
66
  placement?: 'top' | 'right';
67
67
  style?: CSSProperties;
68
- /**
69
- * Whether to render tooltip overlays for each tag.
70
- * Disable this when rendering a large list (e.g. dropdown menus) to avoid mounting hundreds of Tooltip instances.
71
- *
72
- * When `false`, tags are rendered without any tooltip/title fallback by design.
73
- */
74
- withTooltip?: boolean;
75
68
  }
76
69
 
77
70
  interface FeatureTagsProps extends Pick<
@@ -80,7 +73,6 @@ interface FeatureTagsProps extends Pick<
80
73
  > {
81
74
  placement: 'top' | 'right';
82
75
  tagClassName: string;
83
- withTooltip: boolean;
84
76
  }
85
77
 
86
78
  interface FeatureTagItemProps {
@@ -91,11 +83,10 @@ interface FeatureTagItemProps {
91
83
  placement: 'top' | 'right';
92
84
  title: string;
93
85
  tooltipStyles?: ComponentProps<typeof Tooltip>['styles'];
94
- withTooltip: boolean;
95
86
  }
96
87
 
97
88
  const FeatureTagItem = memo<FeatureTagItemProps>(
98
- ({ className, color, enabled, icon, placement, title, tooltipStyles, withTooltip }) => {
89
+ ({ className, color, enabled, icon, placement, title, tooltipStyles }) => {
99
90
  if (!enabled) return null;
100
91
 
101
92
  const tag = (
@@ -104,8 +95,6 @@ const FeatureTagItem = memo<FeatureTagItemProps>(
104
95
  </Tag>
105
96
  );
106
97
 
107
- if (!withTooltip) return tag;
108
-
109
98
  return (
110
99
  <Tooltip placement={placement} styles={tooltipStyles ?? DEFAULT_TOOLTIP_STYLES} title={title}>
111
100
  {tag}
@@ -125,7 +114,6 @@ const FeatureTags = memo<FeatureTagsProps>(
125
114
  tagClassName,
126
115
  video,
127
116
  vision,
128
- withTooltip,
129
117
  }) => {
130
118
  const { t } = useTranslation('components');
131
119
 
@@ -138,7 +126,6 @@ const FeatureTags = memo<FeatureTagsProps>(
138
126
  icon={LucidePaperclip}
139
127
  placement={placement}
140
128
  title={t('ModelSelect.featureTag.file')}
141
- withTooltip={withTooltip}
142
129
  />
143
130
  <FeatureTagItem
144
131
  className={tagClassName}
@@ -147,7 +134,6 @@ const FeatureTags = memo<FeatureTagsProps>(
147
134
  icon={LucideImage}
148
135
  placement={placement}
149
136
  title={t('ModelSelect.featureTag.imageOutput')}
150
- withTooltip={withTooltip}
151
137
  />
152
138
  <FeatureTagItem
153
139
  className={tagClassName}
@@ -156,7 +142,6 @@ const FeatureTags = memo<FeatureTagsProps>(
156
142
  icon={LucideEye}
157
143
  placement={placement}
158
144
  title={t('ModelSelect.featureTag.vision')}
159
- withTooltip={withTooltip}
160
145
  />
161
146
  <FeatureTagItem
162
147
  className={tagClassName}
@@ -165,7 +150,6 @@ const FeatureTags = memo<FeatureTagsProps>(
165
150
  icon={Video}
166
151
  placement={placement}
167
152
  title={t('ModelSelect.featureTag.video')}
168
- withTooltip={withTooltip}
169
153
  />
170
154
  <FeatureTagItem
171
155
  className={tagClassName}
@@ -175,7 +159,6 @@ const FeatureTags = memo<FeatureTagsProps>(
175
159
  placement={placement}
176
160
  title={t('ModelSelect.featureTag.functionCall')}
177
161
  tooltipStyles={FUNCTION_CALL_TOOLTIP_STYLES}
178
- withTooltip={withTooltip}
179
162
  />
180
163
  <FeatureTagItem
181
164
  className={tagClassName}
@@ -184,7 +167,6 @@ const FeatureTags = memo<FeatureTagsProps>(
184
167
  icon={AtomIcon}
185
168
  placement={placement}
186
169
  title={t('ModelSelect.featureTag.reasoning')}
187
- withTooltip={withTooltip}
188
170
  />
189
171
  <FeatureTagItem
190
172
  className={tagClassName}
@@ -193,7 +175,6 @@ const FeatureTags = memo<FeatureTagsProps>(
193
175
  icon={LucideGlobe}
194
176
  placement={placement}
195
177
  title={t('ModelSelect.featureTag.search')}
196
- withTooltip={withTooltip}
197
178
  />
198
179
  </>
199
180
  );
@@ -203,14 +184,12 @@ const FeatureTags = memo<FeatureTagsProps>(
203
184
  const Context = memo(
204
185
  ({
205
186
  contextWindowTokens,
206
- withTooltip,
207
187
  placement,
208
188
  styles,
209
189
  }: {
210
190
  contextWindowTokens: number;
211
191
  placement: 'top' | 'right';
212
192
  styles: TooltipStyles;
213
- withTooltip: boolean;
214
193
  }) => {
215
194
  const { t } = useTranslation('components');
216
195
  const tokensText = contextWindowTokens === 0 ? '∞' : formatTokenNumber(contextWindowTokens);
@@ -221,8 +200,6 @@ const Context = memo(
221
200
  </Tag>
222
201
  );
223
202
 
224
- if (!withTooltip) return tag;
225
-
226
203
  return (
227
204
  <Tooltip
228
205
  placement={placement}
@@ -238,7 +215,7 @@ const Context = memo(
238
215
  );
239
216
 
240
217
  export const ModelInfoTags = memo<ModelInfoTagsProps>(
241
- ({ directionReverse, placement = 'top', withTooltip = true, style, ...model }) => {
218
+ ({ directionReverse, placement = 'top', style, ...model }) => {
242
219
  return (
243
220
  <Flexbox
244
221
  className={TAG_CLASSNAME}
@@ -257,14 +234,12 @@ export const ModelInfoTags = memo<ModelInfoTagsProps>(
257
234
  tagClassName={styles.tag}
258
235
  video={model.video}
259
236
  vision={model.vision}
260
- withTooltip={withTooltip}
261
237
  />
262
238
  {typeof model.contextWindowTokens === 'number' && (
263
239
  <Context
264
240
  contextWindowTokens={model.contextWindowTokens}
265
241
  placement={placement}
266
242
  styles={styles}
267
- withTooltip={withTooltip}
268
243
  />
269
244
  )}
270
245
  </Flexbox>
@@ -274,15 +249,6 @@ export const ModelInfoTags = memo<ModelInfoTagsProps>(
274
249
 
275
250
  interface ModelItemRenderProps extends ChatModelCard, Partial<Omit<FlexboxProps, 'id' | 'title'>> {
276
251
  abilities?: ModelAbilities;
277
- infoTagTooltip?: boolean;
278
- /**
279
- * Only mounts Tooltip components while hovering the item, to reduce initial render cost in large dropdown lists.
280
- *
281
- * Note: hover is not available on mobile, so this will be ignored on mobile.
282
- * Also note: since tooltips are mounted lazily, the very first hover may require a tiny pointer movement
283
- * before the tooltip system detects the hover target (depends on the underlying tooltip implementation).
284
- */
285
- infoTagTooltipOnHover?: boolean;
286
252
  newBadgeLabel?: string;
287
253
  showInfoTag?: boolean;
288
254
  }
@@ -291,8 +257,6 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
291
257
  ({
292
258
  showInfoTag = true,
293
259
  abilities,
294
- infoTagTooltip = true,
295
- infoTagTooltipOnHover = false,
296
260
  contextWindowTokens,
297
261
  files,
298
262
  functionCall,
@@ -308,14 +272,6 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
308
272
  ...rest
309
273
  }) => {
310
274
  const { mobile } = useResponsive();
311
- const [hovered, setHovered] = useState(false);
312
-
313
- const shouldLazyMountTooltip = infoTagTooltipOnHover && !mobile;
314
- /**
315
- * When `infoTagTooltipOnHover` is enabled, we don't mount Tooltip components until the row is hovered.
316
- * This avoids creating many overlays on dropdown open, while keeping the tooltip UX on demand.
317
- */
318
- const withTooltip = infoTagTooltip && (!shouldLazyMountTooltip || hovered);
319
275
  const displayNameOrId = displayName || id;
320
276
 
321
277
  return (
@@ -324,7 +280,6 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
324
280
  gap={32}
325
281
  horizontal
326
282
  justify={'space-between'}
327
- onMouseEnter={shouldLazyMountTooltip && !hovered ? () => setHovered(true) : undefined}
328
283
  {...rest}
329
284
  style={{
330
285
  overflow: 'hidden',
@@ -341,13 +296,9 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
341
296
  >
342
297
  <ModelIcon model={id} size={20} />
343
298
  <Text
344
- ellipsis={
345
- withTooltip
346
- ? {
347
- tooltip: displayNameOrId,
348
- }
349
- : true
350
- }
299
+ ellipsis={{
300
+ tooltip: displayNameOrId,
301
+ }}
351
302
  style={mobile ? { maxWidth: '60vw' } : { minWidth: 0, overflow: 'hidden' }}
352
303
  >
353
304
  {displayNameOrId}
@@ -369,7 +320,6 @@ export const ModelItemRender = memo<ModelItemRenderProps>(
369
320
  style={{ zoom: 0.9 }}
370
321
  video={video ?? abilities?.video}
371
322
  vision={vision ?? abilities?.vision}
372
- withTooltip={withTooltip}
373
323
  />
374
324
  )}
375
325
  </Flexbox>
@@ -58,6 +58,4 @@ const MobileContentLayout = ({
58
58
  );
59
59
  };
60
60
 
61
- MobileContentLayout.displayName = 'MobileContentLayout';
62
-
63
61
  export default MobileContentLayout;
@@ -28,6 +28,4 @@ const ServerLayout =
28
28
  return isMobile ? <Mobile {...(res as T)} /> : <Desktop {...(res as T)} />;
29
29
  };
30
30
 
31
- ServerLayout.displayName = 'ServerLayout';
32
-
33
31
  export default ServerLayout;
@@ -38,5 +38,3 @@ export const Footer: FC<FooterProps> = ({ onClose }) => {
38
38
  </Flexbox>
39
39
  );
40
40
  };
41
-
42
- Footer.displayName = 'Footer';
@@ -89,7 +89,6 @@ export const MultipleProvidersModelItem = memo<MultipleProvidersModelItemProps>(
89
89
  <ModelItemRender
90
90
  {...data.model}
91
91
  {...data.model.abilities}
92
- infoTagTooltip={false}
93
92
  newBadgeLabel={newLabel}
94
93
  showInfoTag={true}
95
94
  />
@@ -14,7 +14,6 @@ export const SingleProviderModelItem = memo<SingleProviderModelItemProps>(({ dat
14
14
  <ModelItemRender
15
15
  {...data.model}
16
16
  {...data.model.abilities}
17
- infoTagTooltip={false}
18
17
  newBadgeLabel={newLabel}
19
18
  showInfoTag={true}
20
19
  />
@@ -116,7 +116,6 @@ export const VirtualItemRenderer = memo<VirtualItemRendererProps>(
116
116
  <ModelItemRender
117
117
  {...item.model}
118
118
  {...item.model.abilities}
119
- infoTagTooltip={false}
120
119
  newBadgeLabel={newLabel}
121
120
  showInfoTag
122
121
  />
@@ -1,4 +1,4 @@
1
- import { Flexbox } from '@lobehub/ui';
1
+ import { Flexbox, TooltipGroup } from '@lobehub/ui';
2
2
  import type { FC } from 'react';
3
3
  import { useMemo } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
@@ -82,18 +82,20 @@ export const List: FC<ListProps> = ({
82
82
  paddingBlock: groupMode === 'byModel' ? 8 : 0,
83
83
  }}
84
84
  >
85
- {virtualItems.slice(0, renderAll ? virtualItems.length : INITIAL_RENDER_COUNT).map((item) => (
86
- <VirtualItemRenderer
87
- activeKey={activeKey}
88
- item={item}
89
- key={getVirtualItemKey(item)}
90
- newLabel={newLabel}
91
- onClose={handleClose}
92
- onModelChange={handleModelChange}
93
- />
94
- ))}
85
+ <TooltipGroup>
86
+ {virtualItems
87
+ .slice(0, renderAll ? virtualItems.length : INITIAL_RENDER_COUNT)
88
+ .map((item) => (
89
+ <VirtualItemRenderer
90
+ activeKey={activeKey}
91
+ item={item}
92
+ key={getVirtualItemKey(item)}
93
+ newLabel={newLabel}
94
+ onClose={handleClose}
95
+ onModelChange={handleModelChange}
96
+ />
97
+ ))}
98
+ </TooltipGroup>
95
99
  </Flexbox>
96
100
  );
97
101
  };
98
-
99
- List.displayName = 'List';
@@ -73,5 +73,3 @@ export const PanelContent: FC<PanelContentProps> = ({
73
73
  </Rnd>
74
74
  );
75
75
  };
76
-
77
- PanelContent.displayName = 'PanelContent';
@@ -1,4 +1,4 @@
1
- import { Popover, TooltipGroup } from '@lobehub/ui';
1
+ import { Popover } from '@lobehub/ui';
2
2
  import { memo, useCallback, useState } from 'react';
3
3
 
4
4
  import { PanelContent } from './components/PanelContent';
@@ -29,28 +29,26 @@ const ModelSwitchPanel = memo<ModelSwitchPanelProps>(
29
29
  );
30
30
 
31
31
  return (
32
- <TooltipGroup>
33
- <Popover
34
- classNames={{
35
- content: styles.container,
36
- }}
37
- content={
38
- <PanelContent
39
- isOpen={isOpen}
40
- model={modelProp}
41
- onModelChange={onModelChange}
42
- onOpenChange={handleOpenChange}
43
- provider={providerProp}
44
- />
45
- }
46
- nativeButton={false}
47
- onOpenChange={handleOpenChange}
48
- open={isOpen}
49
- placement={placement}
50
- >
51
- {children}
52
- </Popover>
53
- </TooltipGroup>
32
+ <Popover
33
+ classNames={{
34
+ content: styles.container,
35
+ }}
36
+ content={
37
+ <PanelContent
38
+ isOpen={isOpen}
39
+ model={modelProp}
40
+ onModelChange={onModelChange}
41
+ onOpenChange={handleOpenChange}
42
+ provider={providerProp}
43
+ />
44
+ }
45
+ nativeButton={false}
46
+ onOpenChange={handleOpenChange}
47
+ open={isOpen}
48
+ placement={placement}
49
+ >
50
+ {children}
51
+ </Popover>
54
52
  );
55
53
  },
56
54
  );