@lobehub/lobehub 2.0.0-next.294 → 2.0.0-next.296

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 (249) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/apps/desktop/src/main/__mocks__/node-mac-permissions.ts +0 -1
  3. package/apps/desktop/src/main/__mocks__/setup.ts +0 -1
  4. package/apps/desktop/src/main/controllers/__tests__/SystemCtr.test.ts +1 -4
  5. package/apps/desktop/tsconfig.json +4 -10
  6. package/changelog/v1.json +18 -0
  7. package/e2e/scripts/setup.ts +45 -32
  8. package/locales/en-US/plugin.json +4 -0
  9. package/locales/zh-CN/plugin.json +4 -0
  10. package/package.json +1 -1
  11. package/packages/agent-runtime/src/core/__tests__/runtime.test.ts +5 -5
  12. package/packages/agent-runtime/src/utils/stepContextComputer.test.ts +5 -5
  13. package/packages/builtin-tool-gtd/src/client/Inspector/index.ts +0 -4
  14. package/packages/builtin-tool-gtd/src/client/Intervention/AddTodo.tsx +1 -1
  15. package/packages/builtin-tool-gtd/src/client/Render/TodoList/index.tsx +39 -10
  16. package/packages/builtin-tool-gtd/src/client/Render/index.ts +0 -2
  17. package/packages/builtin-tool-gtd/src/client/components/SortableTodoList/TodoItemRow.tsx +26 -12
  18. package/packages/builtin-tool-gtd/src/client/components/SortableTodoList/store/actions.ts +5 -5
  19. package/packages/builtin-tool-gtd/src/client/components/SortableTodoList/store/store.test.ts +14 -8
  20. package/packages/builtin-tool-gtd/src/executor/index.test.ts +48 -227
  21. package/packages/builtin-tool-gtd/src/executor/index.ts +15 -158
  22. package/packages/builtin-tool-gtd/src/manifest.ts +12 -42
  23. package/packages/builtin-tool-gtd/src/systemRole.ts +14 -8
  24. package/packages/builtin-tool-gtd/src/types.ts +47 -41
  25. package/packages/builtin-tool-memory/package.json +8 -0
  26. package/packages/builtin-tool-memory/src/client/Inspector/AddContextMemory/index.tsx +60 -0
  27. package/packages/builtin-tool-memory/src/client/Inspector/AddExperienceMemory/index.tsx +60 -0
  28. package/packages/builtin-tool-memory/src/client/Inspector/AddIdentityMemory/index.tsx +60 -0
  29. package/packages/builtin-tool-memory/src/client/Inspector/AddPreferenceMemory/index.tsx +60 -0
  30. package/packages/builtin-tool-memory/src/client/Inspector/RemoveIdentityMemory/index.tsx +60 -0
  31. package/packages/builtin-tool-memory/src/client/Inspector/SearchUserMemory/index.tsx +67 -0
  32. package/packages/builtin-tool-memory/src/client/Inspector/UpdateIdentityMemory/index.tsx +60 -0
  33. package/packages/builtin-tool-memory/src/client/Inspector/index.ts +35 -0
  34. package/packages/builtin-tool-memory/src/client/Intervention/AddExperienceMemory/index.tsx +17 -0
  35. package/packages/builtin-tool-memory/src/client/Intervention/index.ts +13 -0
  36. package/packages/builtin-tool-memory/src/client/Render/AddExperienceMemory/index.tsx +17 -0
  37. package/packages/builtin-tool-memory/src/client/Render/SearchUserMemory/index.tsx +217 -0
  38. package/packages/builtin-tool-memory/src/client/Render/index.ts +15 -0
  39. package/packages/builtin-tool-memory/src/client/Streaming/AddExperienceMemory/index.tsx +17 -0
  40. package/packages/builtin-tool-memory/src/client/Streaming/index.ts +18 -0
  41. package/packages/builtin-tool-memory/src/client/components/ExperienceMemoryCard.tsx +231 -0
  42. package/packages/builtin-tool-memory/src/client/components/index.ts +1 -0
  43. package/packages/builtin-tool-memory/src/client/index.ts +27 -0
  44. package/packages/builtin-tool-memory/src/executor/index.ts +9 -1
  45. package/packages/builtin-tool-memory/src/types.ts +61 -0
  46. package/packages/context-engine/src/providers/GTDTodoInjector.ts +15 -7
  47. package/packages/conversation-flow/src/__tests__/fixtures/outputs/assistantGroup/tools-with-branches.json +4 -0
  48. package/packages/conversation-flow/src/transformation/FlatListBuilder.ts +1 -0
  49. package/packages/database/src/models/__tests__/knowledgeBase.test.ts +1 -1
  50. package/packages/database/src/repositories/knowledge/index.ts +1 -4
  51. package/packages/prompts/src/prompts/gtd/index.test.ts +32 -16
  52. package/packages/prompts/src/prompts/gtd/index.ts +9 -5
  53. package/packages/types/src/discover/assistants.ts +2 -2
  54. package/packages/types/src/stepContext.ts +4 -1
  55. package/scripts/migrate-spa-navigation.ts +129 -0
  56. package/src/app/(backend)/api/workflows/memory-user-memory/pipelines/chat-topic/process-topics/route.ts +112 -109
  57. package/src/app/(backend)/api/workflows/memory-user-memory/pipelines/chat-topic/process-user-topics/route.ts +125 -113
  58. package/src/app/(backend)/api/workflows/memory-user-memory/pipelines/chat-topic/process-users/route.ts +74 -65
  59. package/src/app/[variants]/(auth)/auth-error/page.tsx +1 -1
  60. package/src/app/[variants]/(auth)/login/[[...login]]/page.tsx +1 -1
  61. package/src/app/[variants]/(auth)/next-auth/error/AuthErrorPage.tsx +1 -1
  62. package/src/app/[variants]/(auth)/next-auth/signin/AuthSignInBox.tsx +1 -1
  63. package/src/app/[variants]/(auth)/oauth/callback/error/page.tsx +1 -1
  64. package/src/app/[variants]/(auth)/oauth/callback/success/page.tsx +1 -1
  65. package/src/app/[variants]/(auth)/oauth/consent/[uid]/page.tsx +1 -1
  66. package/src/app/[variants]/(auth)/reset-password/layout.tsx +1 -1
  67. package/src/app/[variants]/(auth)/reset-password/page.tsx +2 -2
  68. package/src/app/[variants]/(auth)/signin/layout.tsx +1 -1
  69. package/src/app/[variants]/(auth)/signin/useSignIn.ts +1 -1
  70. package/src/app/[variants]/(auth)/signup/[[...signup]]/BetterAuthSignUpForm.tsx +2 -2
  71. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -1
  72. package/src/app/[variants]/(auth)/signup/[[...signup]]/useSignUp.tsx +1 -1
  73. package/src/app/[variants]/(auth)/verify-email/layout.tsx +1 -1
  74. package/src/app/[variants]/(auth)/verify-email/page.tsx +2 -2
  75. package/src/app/[variants]/(main)/_layout/index.tsx +1 -1
  76. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Cron/CronTopicGroup.tsx +1 -1
  77. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Header/AddTopicButon.tsx +1 -1
  78. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Header/Nav.tsx +1 -1
  79. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/AllTopicsDrawer/index.tsx +1 -1
  80. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/hooks/useThreadNavigation.ts +1 -1
  81. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/hooks/useTopicNavigation.ts +1 -1
  82. package/src/app/[variants]/(main)/agent/features/TelemetryNotification.tsx +2 -3
  83. package/src/app/[variants]/(main)/community/(detail)/assistant/features/Details/Nav.tsx +9 -9
  84. package/src/app/[variants]/(main)/community/(detail)/assistant/features/Details/Versions/index.tsx +2 -3
  85. package/src/app/[variants]/(main)/community/(detail)/features/MakedownRender.tsx +1 -2
  86. package/src/app/[variants]/(main)/community/(detail)/features/ShareButton.tsx +2 -3
  87. package/src/app/[variants]/(main)/community/(detail)/features/Toc/Heading.tsx +2 -3
  88. package/src/app/[variants]/(main)/community/(detail)/mcp/features/Details/Versions/index.tsx +2 -2
  89. package/src/app/[variants]/(main)/community/(detail)/model/features/Details/Nav.tsx +12 -11
  90. package/src/app/[variants]/(main)/community/(detail)/model/features/Details/Parameter/ParameterItem.tsx +2 -3
  91. package/src/app/[variants]/(main)/community/(detail)/provider/features/Details/Nav.tsx +11 -10
  92. package/src/app/[variants]/(main)/community/(detail)/provider/features/Header.tsx +10 -9
  93. package/src/app/[variants]/(main)/community/(list)/(home)/index.tsx +1 -1
  94. package/src/app/[variants]/(main)/community/(list)/assistant/features/Category/useCategory.tsx +1 -1
  95. package/src/app/[variants]/(main)/community/(list)/features/SortButton/index.tsx +2 -3
  96. package/src/app/[variants]/(main)/community/_layout/Sidebar/Header/Nav.tsx +1 -1
  97. package/src/app/[variants]/(main)/community/features/CreateButton/Inner.tsx +1 -1
  98. package/src/app/[variants]/(main)/community/features/CreateButton/index.tsx +1 -1
  99. package/src/app/[variants]/(main)/community/features/Search.tsx +1 -2
  100. package/src/app/[variants]/(main)/community/features/Title.tsx +5 -5
  101. package/src/app/[variants]/(main)/group/_layout/Sidebar/Header/Nav.tsx +1 -1
  102. package/src/app/[variants]/(main)/group/_layout/Sidebar/Topic/AllTopicsDrawer/index.tsx +1 -1
  103. package/src/app/[variants]/(main)/group/_layout/Sidebar/Topic/hooks/useThreadNavigation.ts +1 -1
  104. package/src/app/[variants]/(main)/group/features/Conversation/Header/ShareButton/index.tsx +1 -1
  105. package/src/app/[variants]/(main)/group/features/TelemetryNotification.tsx +2 -3
  106. package/src/app/[variants]/(main)/home/_layout/Body/Agent/AllAgentsDrawer/index.tsx +1 -1
  107. package/src/app/[variants]/(main)/hooks/useActiveTabKey.ts +6 -11
  108. package/src/app/[variants]/(main)/image/NotSupportClient.tsx +4 -3
  109. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/ImageUpload.tsx +1 -1
  110. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/MultiImagesUpload/ImageManageModal.tsx +1 -1
  111. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/MultiImagesUpload/index.tsx +1 -1
  112. package/src/app/[variants]/(main)/memory/(home)/features/RoleTagCloud/index.tsx +1 -1
  113. package/src/app/[variants]/(main)/memory/_layout/Sidebar/Header/Nav.tsx +1 -1
  114. package/src/app/[variants]/(main)/memory/features/SourceLink.tsx +1 -1
  115. package/src/app/[variants]/(main)/page/_layout/Body/AllPagesDrawer/index.tsx +1 -1
  116. package/src/app/[variants]/(main)/resource/features/DndContextWrapper.tsx +4 -2
  117. package/src/app/[variants]/(main)/resource/library/_layout/Header/LibraryHead.tsx +30 -35
  118. package/src/app/[variants]/(main)/resource/library/_layout/Header/index.tsx +9 -11
  119. package/src/app/[variants]/(main)/settings/about/features/ItemCard.tsx +2 -3
  120. package/src/app/[variants]/(main)/settings/about/features/ItemLink.tsx +2 -3
  121. package/src/app/[variants]/(main)/settings/about/features/Version.tsx +6 -7
  122. package/src/app/[variants]/(main)/settings/features/SettingsContent.tsx +1 -1
  123. package/src/app/[variants]/(main)/settings/features/UpgradeAlert.tsx +4 -4
  124. package/src/app/[variants]/(main)/settings/provider/(list)/Footer.tsx +2 -2
  125. package/src/app/[variants]/(main)/settings/provider/detail/index.tsx +1 -1
  126. package/src/app/[variants]/(main)/settings/provider/detail/ollama/CheckError.tsx +1 -1
  127. package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +12 -6
  128. package/src/app/[variants]/(main)/settings/security/index.tsx +1 -1
  129. package/src/app/[variants]/(main)/settings/stats/features/overview/ShareButton/ShareModal.tsx +1 -1
  130. package/src/app/[variants]/(main)/settings/stats/features/rankings/AssistantsRank.tsx +1 -1
  131. package/src/app/[variants]/(main)/settings/stats/features/rankings/TopicsRank.tsx +1 -1
  132. package/src/app/[variants]/(mobile)/_layout/index.tsx +1 -1
  133. package/src/app/[variants]/(mobile)/chat/settings/features/AgentInfoDescription/index.tsx +1 -1
  134. package/src/app/[variants]/(mobile)/chat/settings/features/SettingButton.tsx +1 -1
  135. package/src/app/[variants]/(mobile)/router/index.tsx +1 -1
  136. package/src/app/[variants]/page.tsx +1 -1
  137. package/src/app/[variants]/router/index.tsx +1 -1
  138. package/src/components/404/index.tsx +4 -4
  139. package/src/components/Analytics/index.tsx +1 -1
  140. package/src/components/BrandWatermark/index.tsx +4 -4
  141. package/src/components/Branding/ProductLogo/Custom.tsx +1 -1
  142. package/src/components/Error/index.tsx +3 -4
  143. package/src/components/GoBack/index.tsx +2 -2
  144. package/src/components/LabsModal/LabCard.tsx +1 -1
  145. package/src/components/Link.tsx +25 -5
  146. package/src/components/OllamaSetupGuide/index.tsx +5 -4
  147. package/src/components/WebFavicon/index.tsx +1 -1
  148. package/src/components/client/ClientResponsiveContent/index.tsx +1 -1
  149. package/src/components/client/ClientResponsiveLayout.tsx +1 -1
  150. package/src/components/mdx/Image.tsx +1 -1
  151. package/src/components/mdx/Link.tsx +26 -9
  152. package/src/features/AlertBanner/CloudBanner.tsx +2 -3
  153. package/src/features/ChatInput/ActionBar/Model/ControlsForm.tsx +8 -7
  154. package/src/features/ChatInput/ActionBar/Params/Controls.tsx +1 -3
  155. package/src/features/ChatInput/ActionBar/Token/index.tsx +1 -1
  156. package/src/features/ChatInput/Mobile/index.tsx +1 -1
  157. package/src/features/Conversation/ChatItem/components/MessageContent/index.tsx +1 -1
  158. package/src/features/Conversation/Error/OllamaBizError/index.tsx +1 -1
  159. package/src/features/Conversation/Error/OllamaSetupGuide/Desktop.tsx +1 -2
  160. package/src/features/Conversation/Error/index.tsx +1 -1
  161. package/src/features/Conversation/Messages/AssistantGroup/Tool/Actions/Settings.tsx +1 -1
  162. package/src/features/Conversation/Messages/AssistantGroup/Tool/Actions/index.tsx +11 -17
  163. package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/LoadingPlaceholder/index.tsx +13 -3
  164. package/src/features/Conversation/Messages/AssistantGroup/Tool/Detail/Render/CustomRender.tsx +43 -0
  165. package/src/features/Conversation/Messages/AssistantGroup/Tool/Detail/Render/FallbacktArgumentRender.tsx +59 -0
  166. package/src/features/Conversation/Messages/AssistantGroup/Tool/Detail/Render/index.tsx +46 -0
  167. package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/index.tsx +13 -19
  168. package/src/features/Conversation/Messages/AssistantGroup/Tool/index.tsx +18 -18
  169. package/src/features/Conversation/Messages/AssistantGroup/index.tsx +1 -1
  170. package/src/features/Conversation/Messages/Tool/Tool/index.tsx +11 -10
  171. package/src/features/Conversation/Messages/components/SearchGrounding.tsx +1 -1
  172. package/src/features/Conversation/TodoProgress/index.tsx +56 -23
  173. package/src/features/DataImporter/Error.tsx +3 -3
  174. package/src/features/DevPanel/CacheViewer/cacheProvider.tsx +2 -1
  175. package/src/features/DevPanel/MetadataViewer/Og.tsx +1 -1
  176. package/src/features/DevPanel/features/FloatPanel.tsx +1 -1
  177. package/src/features/DevPanel/features/Table/TooltipContent.tsx +3 -4
  178. package/src/features/DevPanel/index.tsx +1 -1
  179. package/src/features/EditorCanvas/InlineToolbar.tsx +1 -6
  180. package/src/features/FileViewer/NotSupport/index.tsx +2 -3
  181. package/src/features/Follow/index.tsx +8 -9
  182. package/src/features/LibraryModal/AddFilesToKnowledgeBase/SelectForm.tsx +2 -2
  183. package/src/features/MCP/Scores.tsx +1 -1
  184. package/src/features/MCPPluginDetail/Nav.tsx +8 -8
  185. package/src/features/MCPPluginDetail/Overview/TagList.tsx +1 -1
  186. package/src/features/MobileTabBar/index.tsx +2 -1
  187. package/src/features/OllamaSetupGuide/Desktop.tsx +1 -2
  188. package/src/features/PWAInstall/Install.tsx +1 -1
  189. package/src/features/PWAInstall/index.tsx +1 -1
  190. package/src/features/PluginStore/McpList/index.tsx +1 -1
  191. package/src/features/PluginStore/PluginList/Detail/Header.tsx +6 -6
  192. package/src/features/PluginsUI/Render/DefaultType/index.tsx +1 -1
  193. package/src/features/PluginsUI/Render/MCPType/index.tsx +1 -1
  194. package/src/features/Portal/Artifacts/Body/Renderer/index.tsx +1 -1
  195. package/src/features/ResourceManager/components/ChunkDrawer/index.tsx +1 -1
  196. package/src/features/ResourceManager/components/Explorer/Header/index.tsx +57 -4
  197. package/src/features/ResourceManager/components/Explorer/ListView/ListItem/index.tsx +6 -4
  198. package/src/features/ResourceManager/components/Explorer/ListView/Skeleton.tsx +26 -26
  199. package/src/features/ResourceManager/components/Explorer/ListView/index.tsx +16 -5
  200. package/src/features/ResourceManager/components/Explorer/ToolBar/BatchActionsDropdown.tsx +147 -149
  201. package/src/features/ResourceManager/components/LibraryHierarchy/styles.ts +5 -4
  202. package/src/features/ResourceManager/index.tsx +1 -1
  203. package/src/features/Setting/Footer.tsx +4 -5
  204. package/src/features/User/UserPanel/PanelContent.tsx +1 -1
  205. package/src/hooks/useActiveTabKey.ts +6 -4
  206. package/src/hooks/useIsSingleMode.test.ts +10 -24
  207. package/src/hooks/useIsSingleMode.ts +4 -2
  208. package/src/hooks/useIsSubSlug.ts +2 -1
  209. package/src/hooks/useQuery.ts +5 -5
  210. package/src/layout/GlobalProvider/AppTheme.tsx +2 -2
  211. package/src/layout/GlobalProvider/StyleRegistry.tsx +1 -1
  212. package/src/layout/GlobalProvider/useUserStateRedirect.ts +13 -25
  213. package/src/libs/next/Image.tsx +13 -0
  214. package/src/libs/next/Link.tsx +13 -0
  215. package/src/libs/next/dynamic.tsx +13 -0
  216. package/src/libs/next/index.ts +22 -0
  217. package/src/libs/next/navigation.ts +22 -0
  218. package/src/libs/router/Link.tsx +30 -0
  219. package/src/libs/router/index.ts +18 -0
  220. package/src/libs/router/navigation.ts +72 -0
  221. package/src/locales/default/plugin.ts +1 -0
  222. package/src/server/modules/AgentRuntime/AgentStateManager.ts +5 -1
  223. package/src/store/chat/slices/message/selectors/dbMessage.test.ts +11 -11
  224. package/src/store/chat/slices/portal/selectors.test.ts +5 -15
  225. package/src/store/file/slices/resource/action.ts +4 -2
  226. package/src/store/page/index.ts +1 -1
  227. package/src/store/page/slices/crud/index.ts +1 -1
  228. package/src/tools/inspectors.ts +2 -0
  229. package/src/tools/interventions.ts +2 -0
  230. package/src/tools/renders.ts +3 -1
  231. package/src/tools/streamings.ts +2 -0
  232. package/packages/builtin-tool-gtd/src/client/Inspector/CompleteTodos/index.tsx +0 -52
  233. package/packages/builtin-tool-gtd/src/client/Inspector/RemoveTodos/index.tsx +0 -52
  234. package/src/app/[variants]/(main)/hooks/usePathname.ts +0 -10
  235. package/src/app/[variants]/(main)/hooks/useQuery.ts +0 -12
  236. package/src/app/[variants]/(main)/hooks/useRouter.ts +0 -22
  237. package/src/app/[variants]/(main)/hooks/useSearchParams.ts +0 -11
  238. package/src/features/Conversation/Messages/AssistantGroup/Tool/Render/CustomRender.tsx +0 -113
  239. package/src/features/Conversation/Messages/Tool/Tool/Render.tsx +0 -47
  240. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/AbortResponse.tsx +0 -0
  241. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/Arguments/index.tsx +0 -0
  242. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/ErrorResponse.tsx +0 -0
  243. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/Intervention/ApprovalActions.tsx +0 -0
  244. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/Intervention/Fallback.tsx +0 -0
  245. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/Intervention/KeyValueEditor.tsx +0 -0
  246. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/Intervention/ModeSelector.tsx +0 -0
  247. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/Intervention/index.tsx +0 -0
  248. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/PluginSettings.tsx +0 -0
  249. /package/src/features/Conversation/Messages/AssistantGroup/Tool/{Render → Detail}/RejectedResponse.tsx +0 -0
@@ -1,7 +1,6 @@
1
1
  import { Flexbox } from '@lobehub/ui';
2
2
  import { Divider } from 'antd';
3
3
  import { cssVar } from 'antd-style';
4
- import Link from 'next/link';
5
4
  import { memo } from 'react';
6
5
  import { useTranslation } from 'react-i18next';
7
6
 
@@ -29,9 +28,9 @@ const ParameterItem = memo<ParameterItemProps>(
29
28
  <Flexbox align={'flex-start'} gap={16}>
30
29
  <p style={{ color: cssVar.colorTextSecondary, margin: 0 }}>
31
30
  {desc}{' '}
32
- <Link href={docUrl} target={'_blank'}>
31
+ <a href={docUrl} rel="noreferrer" target="_blank">
33
32
  {t('models.parameterList.docs')}
34
- </Link>
33
+ </a>
35
34
  </p>
36
35
  <Divider dashed style={{ margin: 0 }} />
37
36
  <Flexbox align={'center'} gap={16} horizontal style={{ paddingBottom: 8 }} wrap={'wrap'}>
@@ -4,7 +4,6 @@ import { BRANDING_PROVIDER, SOCIAL_URL } from '@lobechat/business-const';
4
4
  import { Flexbox, Icon, Tabs } from '@lobehub/ui';
5
5
  import { createStaticStyles } from 'antd-style';
6
6
  import { BookOpenIcon, BrainCircuitIcon, ListIcon } from 'lucide-react';
7
- import Link from 'next/link';
8
7
  import { memo } from 'react';
9
8
  import { useTranslation } from 'react-i18next';
10
9
  import urlJoin from 'url-join';
@@ -78,28 +77,30 @@ const Nav = memo<NavProps>(({ mobile, setActiveTab, activeTab = ProviderNavKey.O
78
77
  <Flexbox align={'center'} className={styles.nav} horizontal justify={'space-between'}>
79
78
  {nav}
80
79
  <Flexbox gap={12} horizontal>
81
- <Link className={styles.link} href={SOCIAL_URL.discord} target={'_blank'}>
80
+ <a className={styles.link} href={SOCIAL_URL.discord} rel="noreferrer" target="_blank">
82
81
  {t('mcp.details.nav.needHelp')}
83
- </Link>
82
+ </a>
84
83
  {identifier && (
85
- <Link
84
+ <a
86
85
  className={styles.link}
87
86
  href={urlJoin(
88
87
  'https://github.com/lobehub/lobe-chat/tree/main/src/config/modelProviders',
89
88
  `${identifier}.ts`,
90
89
  )}
91
- target={'_blank'}
90
+ rel="noreferrer"
91
+ target="_blank"
92
92
  >
93
93
  {t('mcp.details.nav.viewSourceCode')}
94
- </Link>
94
+ </a>
95
95
  )}
96
- <Link
96
+ <a
97
97
  className={styles.link}
98
- href={'https://github.com/lobehub/lobe-chat/issues/new/choose'}
99
- target={'_blank'}
98
+ href="https://github.com/lobehub/lobe-chat/issues/new/choose"
99
+ rel="noreferrer"
100
+ target="_blank"
100
101
  >
101
102
  {t('mcp.details.nav.reportIssue')}
102
- </Link>
103
+ </a>
103
104
  </Flexbox>
104
105
  </Flexbox>
105
106
  );
@@ -4,7 +4,6 @@ import { Github, ProviderCombine } from '@lobehub/icons';
4
4
  import { ActionIcon, Flexbox } from '@lobehub/ui';
5
5
  import { cssVar, useResponsive } from 'antd-style';
6
6
  import { GlobeIcon } from 'lucide-react';
7
- import Link from 'next/link';
8
7
  import { memo } from 'react';
9
8
  import { useTranslation } from 'react-i18next';
10
9
  import urlJoin from 'url-join';
@@ -32,9 +31,9 @@ const Header = memo<{ mobile?: boolean }>(({ mobile: isMobile }) => {
32
31
  <ProviderCombine provider={identifier} size={mobile ? 32 : 48} />
33
32
  <Flexbox align={'center'} gap={4} horizontal>
34
33
  {Boolean(url || modelsUrl) ? (
35
- <Link href={url || (modelsUrl as string)} target={'_blank'}>
34
+ <a href={url || (modelsUrl as string)} rel="noreferrer" target="_blank">
36
35
  @{name}
37
- </Link>
36
+ </a>
38
37
  ) : (
39
38
  <span>@{name}</span>
40
39
  )}
@@ -42,25 +41,27 @@ const Header = memo<{ mobile?: boolean }>(({ mobile: isMobile }) => {
42
41
  </Flexbox>
43
42
  <Flexbox align={'center'} horizontal>
44
43
  {Boolean(url || modelsUrl) && (
45
- <Link
44
+ <a
46
45
  href={(url || modelsUrl) as string}
47
46
  onClick={(e) => e.stopPropagation()}
48
- target={'_blank'}
47
+ rel="noreferrer"
48
+ target="_blank"
49
49
  >
50
50
  <ActionIcon color={cssVar.colorTextDescription} icon={GlobeIcon} />
51
- </Link>
51
+ </a>
52
52
  )}
53
53
 
54
- <Link
54
+ <a
55
55
  href={urlJoin(
56
56
  'https://github.com/lobehub/lobe-chat-agents/tree/main/locales',
57
57
  identifier as string,
58
58
  )}
59
59
  onClick={(e) => e.stopPropagation()}
60
- target={'_blank'}
60
+ rel="noreferrer"
61
+ target="_blank"
61
62
  >
62
63
  <ActionIcon fill={cssVar.colorTextDescription} icon={Github} />
63
- </Link>
64
+ </a>
64
65
  </Flexbox>
65
66
  </Flexbox>
66
67
 
@@ -4,7 +4,7 @@ import { memo } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
 
6
6
  import { useDiscoverStore } from '@/store/discover';
7
- import { McpSorts, AssistantSorts } from '@/types/discover';
7
+ import { AssistantSorts, McpSorts } from '@/types/discover';
8
8
 
9
9
  import Title from '../../components/Title';
10
10
  import AssistantList from '../assistant/features/List';
@@ -2,6 +2,7 @@ import {
2
2
  BadgeDollarSignIcon,
3
3
  BriefcaseIcon,
4
4
  Coffee,
5
+ CompassIcon,
5
6
  DramaIcon,
6
7
  GamepadIcon,
7
8
  GraduationCapIcon,
@@ -14,7 +15,6 @@ import {
14
15
  PencilIcon,
15
16
  PrinterIcon,
16
17
  TerminalSquareIcon,
17
- CompassIcon,
18
18
  } from 'lucide-react';
19
19
  import { useMemo } from 'react';
20
20
  import { useTranslation } from 'react-i18next';
@@ -1,12 +1,11 @@
1
- import { Dropdown, type DropdownMenuItemType, Icon , Button } from '@lobehub/ui';
1
+ import { Button, Dropdown, type DropdownMenuItemType, Icon } from '@lobehub/ui';
2
2
  import { ArrowDownWideNarrow, ChevronDown } from 'lucide-react';
3
3
  import { memo, useMemo } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
 
6
- import { usePathname } from '@/app/[variants]/(main)/hooks/usePathname';
7
- import { useQuery } from '@/app/[variants]/(main)/hooks/useQuery';
8
6
  import { useQueryRoute } from '@/hooks/useQueryRoute';
9
7
  import { useMarketAuth } from '@/layout/AuthProvider/MarketAuth';
8
+ import { usePathname , useQuery } from '@/libs/router/navigation';
10
9
  import {
11
10
  AssistantSorts,
12
11
  DiscoverTab,
@@ -3,7 +3,7 @@
3
3
  import { Flexbox } from '@lobehub/ui';
4
4
  import { McpIcon, ProviderIcon } from '@lobehub/ui/icons';
5
5
  import { Bot, Brain, ShapesIcon } from 'lucide-react';
6
- import { usePathname } from 'next/navigation';
6
+ import { usePathname } from '@/libs/router/navigation';
7
7
  import { memo, useMemo } from 'react';
8
8
  import { useTranslation } from 'react-i18next';
9
9
  import { Link, useNavigate } from 'react-router-dom';
@@ -1,7 +1,7 @@
1
1
  import { Button, Icon, Tag, Typography } from '@lobehub/ui';
2
2
  import { Divider } from 'antd';
3
3
  import { Github, Settings, Share2 } from 'lucide-react';
4
- import Image from 'next/image';
4
+ import Image from '@/libs/next/Image';
5
5
  import { memo } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { ActionIcon, Button, Modal , Skeleton } from '@lobehub/ui';
2
2
  import { useResponsive } from 'antd-style';
3
3
  import { Brush } from 'lucide-react';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo, useState } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
@@ -6,10 +6,9 @@ import { memo, useState } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
  import urlJoin from 'url-join';
8
8
 
9
- import { usePathname } from '@/app/[variants]/(main)/hooks/usePathname';
10
- import { useQuery } from '@/app/[variants]/(main)/hooks/useQuery';
11
9
  import { withSuspense } from '@/components/withSuspense';
12
10
  import { useQueryRoute } from '@/hooks/useQueryRoute';
11
+ import { usePathname, useQuery } from '@/libs/router/navigation';
13
12
 
14
13
  const prefixCls = 'ant';
15
14
 
@@ -3,7 +3,6 @@
3
3
  import { Flexbox, type FlexboxProps, Icon } from '@lobehub/ui';
4
4
  import { createStaticStyles, cx } from 'antd-style';
5
5
  import { ChevronRight } from 'lucide-react';
6
- import NextLink from 'next/link';
7
6
  import { type ReactNode, memo } from 'react';
8
7
  import { Link as RouterLink } from 'react-router-dom';
9
8
 
@@ -51,10 +50,10 @@ const Title = memo<TitleProps>(
51
50
  if (moreLink) {
52
51
  if (isExternalLink) {
53
52
  moreLinkElement = (
54
- <NextLink className={styles.more} href={moreLink} target="_blank">
53
+ <a className={styles.more} href={moreLink} rel="noreferrer" target="_blank">
55
54
  <span style={{ marginRight: 4 }}>{more}</span>
56
55
  <Icon icon={ChevronRight} />
57
- </NextLink>
56
+ </a>
58
57
  );
59
58
  } else if (isCommunityRoute) {
60
59
  moreLinkElement = (
@@ -64,11 +63,12 @@ const Title = memo<TitleProps>(
64
63
  </RouterLink>
65
64
  );
66
65
  } else {
66
+ // For non-external, non-community routes (like auth pages), use RouterLink
67
67
  moreLinkElement = (
68
- <NextLink className={styles.more} href={moreLink}>
68
+ <RouterLink className={styles.more} to={moreLink}>
69
69
  <span style={{ marginRight: 4 }}>{more}</span>
70
70
  <Icon icon={ChevronRight} />
71
- </NextLink>
71
+ </RouterLink>
72
72
  );
73
73
  }
74
74
  }
@@ -3,7 +3,6 @@
3
3
  import { Flexbox } from '@lobehub/ui';
4
4
  import { BotPromptIcon } from '@lobehub/ui/icons';
5
5
  import { MessageSquarePlusIcon, SearchIcon } from 'lucide-react';
6
- import { usePathname } from 'next/navigation';
7
6
  import { memo } from 'react';
8
7
  import { useTranslation } from 'react-i18next';
9
8
  import { useParams } from 'react-router-dom';
@@ -11,6 +10,7 @@ import urlJoin from 'url-join';
11
10
 
12
11
  import NavItem from '@/features/NavPanel/components/NavItem';
13
12
  import { useQueryRoute } from '@/hooks/useQueryRoute';
13
+ import { usePathname } from '@/libs/router/navigation';
14
14
  import { useAgentGroupStore } from '@/store/agentGroup';
15
15
  import { useChatStore } from '@/store/chat';
16
16
  import { useGlobalStore } from '@/store/global';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { Flexbox, SearchBar } from '@lobehub/ui';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo, useState } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
@@ -1,4 +1,4 @@
1
- import { usePathname } from 'next/navigation';
1
+ import { usePathname } from '@/libs/router/navigation';
2
2
  import { useCallback } from 'react';
3
3
  import { useParams } from 'react-router-dom';
4
4
  import urlJoin from 'url-join';
@@ -2,12 +2,12 @@
2
2
 
3
3
  import { ActionIcon } from '@lobehub/ui';
4
4
  import { Share2 } from 'lucide-react';
5
- import dynamic from 'next/dynamic';
6
5
  import { memo } from 'react';
7
6
  import { useTranslation } from 'react-i18next';
8
7
 
9
8
  import { DESKTOP_HEADER_ICON_SIZE, MOBILE_HEADER_ICON_SIZE } from '@/const/layoutTokens';
10
9
  import { useWorkspaceModal } from '@/hooks/useWorkspaceModal';
10
+ import dynamic from '@/libs/next/dynamic';
11
11
  import { useChatStore } from '@/store/chat';
12
12
  import { useServerConfigStore } from '@/store/serverConfig';
13
13
  import { serverConfigSelectors } from '@/store/serverConfig/selectors';
@@ -4,7 +4,6 @@ import { BRANDING_NAME } from '@lobechat/business-const';
4
4
  import { Avatar, Button, Flexbox, Icon } from '@lobehub/ui';
5
5
  import { createStaticStyles, cssVar } from 'antd-style';
6
6
  import { LucideArrowUpRightFromSquare, TelescopeIcon } from 'lucide-react';
7
- import Link from 'next/link';
8
7
  import { memo } from 'react';
9
8
  import { useTranslation } from 'react-i18next';
10
9
 
@@ -56,10 +55,10 @@ const TelemetryNotification = memo<{ mobile?: boolean }>(({ mobile }) => {
56
55
  <div className={styles.desc}>
57
56
  {t('telemetry.desc', { appName: BRANDING_NAME })}
58
57
  <span>
59
- <Link href={PRIVACY_URL} target={'_blank'}>
58
+ <a href={PRIVACY_URL} rel="noreferrer" target="_blank">
60
59
  {t('telemetry.learnMore')}
61
60
  <Icon icon={LucideArrowUpRightFromSquare} style={{ marginInlineStart: 4 }} />
62
- </Link>
61
+ </a>
63
62
  </span>
64
63
  </div>
65
64
  </Flexbox>
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { Flexbox, SearchBar } from '@lobehub/ui';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo, useState } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
@@ -1,21 +1,18 @@
1
- import { useLocation, useSearchParams } from 'react-router-dom';
2
-
3
1
  import { ProfileTabs, SettingsTabs, type SidebarTabKey } from '@/store/global/initialState';
2
+ import { usePathname, useSearchParams } from '@/libs/router/navigation';
4
3
 
5
4
  /**
6
5
  * Returns the active tab key (chat/discover/settings/...)
7
- * React Router version for (main) directory
6
+ * Uses React Router via @/libs/router
8
7
  */
9
8
  export const useActiveTabKey = () => {
10
- const location = useLocation();
11
- const pathname = location.pathname;
12
-
9
+ const pathname = usePathname();
13
10
  return pathname.split('/').find(Boolean) as SidebarTabKey;
14
11
  };
15
12
 
16
13
  /**
17
14
  * Returns the active setting page key (?active=common/sync/agent/...)
18
- * React Router version for (main) directory
15
+ * Uses React Router via @/libs/router
19
16
  */
20
17
  export const useActiveSettingsKey = () => {
21
18
  const [searchParams] = useSearchParams();
@@ -26,12 +23,10 @@ export const useActiveSettingsKey = () => {
26
23
 
27
24
  /**
28
25
  * Returns the active profile page key (profile/security/stats/...)
29
- * React Router version for (main) directory
26
+ * Uses React Router via @/libs/router
30
27
  */
31
28
  export const useActiveProfileKey = () => {
32
- const location = useLocation();
33
- const pathname = location.pathname;
34
-
29
+ const pathname = usePathname();
35
30
  const tabs = pathname.split('/').findLast(Boolean);
36
31
 
37
32
  if (tabs === 'profile') return ProfileTabs.Profile;
@@ -4,7 +4,6 @@ import { UTM_SOURCE } from '@lobechat/business-const';
4
4
  import { Center, Flexbox, Icon, Text } from '@lobehub/ui';
5
5
  import { createStaticStyles, cssVar } from 'antd-style';
6
6
  import { Database, FileImage, Network, Sparkles } from 'lucide-react';
7
- import Link from 'next/link';
8
7
  import { Trans, useTranslation } from 'react-i18next';
9
8
 
10
9
  import FeatureList from '@/components/FeatureList';
@@ -131,11 +130,13 @@ const NotSupportClient = () => {
131
130
  <Trans
132
131
  components={[
133
132
  <span key="0" />,
134
- <Link href={DATABASE_SELF_HOSTING_URL} key="1" />,
133
+ <a href={DATABASE_SELF_HOSTING_URL} key="1" rel="noreferrer" target="_blank" />,
135
134
  <span key="2" />,
136
- <Link
135
+ <a
137
136
  href={`${OFFICIAL_URL}?utm_source=${UTM_SOURCE}&utm_medium=client_not_support_image`}
138
137
  key="3"
138
+ rel="noreferrer"
139
+ target="_blank"
139
140
  />,
140
141
  ]}
141
142
  i18nKey={'notSupportGuide.desc'}
@@ -4,7 +4,7 @@ import { Center } from '@lobehub/ui';
4
4
  import { App } from 'antd';
5
5
  import { createStaticStyles, cssVar, cx } from 'antd-style';
6
6
  import { Image as ImageIcon, X } from 'lucide-react';
7
- import Image from 'next/image';
7
+ import Image from '@/libs/next/Image';
8
8
  import React, { type FC, memo, useEffect, useRef, useState } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
10
10
 
@@ -3,7 +3,7 @@
3
3
  import { Button, Modal } from '@lobehub/ui';
4
4
  import { createStaticStyles, cx } from 'antd-style';
5
5
  import { Upload, X } from 'lucide-react';
6
- import Image from 'next/image';
6
+ import Image from '@/libs/next/Image';
7
7
  import React, { type FC, memo, useEffect, useRef, useState } from 'react';
8
8
  import { useTranslation } from 'react-i18next';
9
9
 
@@ -4,7 +4,7 @@
4
4
  import { Center } from '@lobehub/ui';
5
5
  import { createStaticStyles, cssVar, cx } from 'antd-style';
6
6
  import { Image as ImageIcon, X } from 'lucide-react';
7
- import Image from 'next/image';
7
+ import Image from '@/libs/next/Image';
8
8
  import React, { type FC, memo, useEffect, useRef, useState } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
10
10
 
@@ -1,7 +1,7 @@
1
1
  import { ActionIcon, Block } from '@lobehub/ui';
2
2
  import { createStaticStyles, cx } from 'antd-style';
3
3
  import { MaximizeIcon, MinimizeIcon } from 'lucide-react';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo, useEffect, useState } from 'react';
6
6
 
7
7
  import Loading from '@/components/Loading/BrandTextLoading';
@@ -9,7 +9,7 @@ import {
9
9
  SearchIcon,
10
10
  SignatureIcon,
11
11
  } from 'lucide-react';
12
- import { usePathname } from 'next/navigation';
12
+ import { usePathname } from '@/libs/router/navigation';
13
13
  import { memo, useMemo } from 'react';
14
14
  import { useTranslation } from 'react-i18next';
15
15
  import { Link, useNavigate } from 'react-router-dom';
@@ -1,7 +1,7 @@
1
1
  import { Button, Icon, Text } from '@lobehub/ui';
2
2
  import { cssVar } from 'antd-style';
3
3
  import { Link2 } from 'lucide-react';
4
- import Link from 'next/link';
4
+ import Link from '@/libs/router/Link';
5
5
  import { memo } from 'react';
6
6
  import { useNavigate } from 'react-router-dom';
7
7
 
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { Flexbox, SearchBar } from '@lobehub/ui';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo, useState } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
@@ -193,14 +193,16 @@ export const DndContextWrapper = memo<PropsWithChildren>(({ children }) => {
193
193
 
194
194
  document.addEventListener('dragstart', handleDragStart);
195
195
  document.addEventListener('drag', handleDrag);
196
- document.addEventListener('drop', handleDrop);
196
+ // Use capture phase so drops still work even if some UI stops propagation
197
+ // (e.g., header dropdowns / menus).
198
+ document.addEventListener('drop', handleDrop, true);
197
199
  document.addEventListener('dragover', handleDragOver);
198
200
  document.addEventListener('dragend', handleDragEnd);
199
201
 
200
202
  return () => {
201
203
  document.removeEventListener('dragstart', handleDragStart);
202
204
  document.removeEventListener('drag', handleDrag);
203
- document.removeEventListener('drop', handleDrop);
205
+ document.removeEventListener('drop', handleDrop, true);
204
206
  document.removeEventListener('dragover', handleDragOver);
205
207
  document.removeEventListener('dragend', handleDragEnd);
206
208
  };
@@ -1,8 +1,16 @@
1
1
  'use client';
2
2
 
3
- import { Center, type DropdownItem, DropdownMenu, Flexbox, Skeleton, Text } from '@lobehub/ui';
3
+ import {
4
+ ActionIcon,
5
+ Block,
6
+ Center,
7
+ type DropdownItem,
8
+ DropdownMenu,
9
+ Skeleton,
10
+ Text,
11
+ } from '@lobehub/ui';
4
12
  import { createStaticStyles, cx } from 'antd-style';
5
- import { ChevronsUpDown } from 'lucide-react';
13
+ import { ChevronsUpDownIcon } from 'lucide-react';
6
14
  import { type DragEvent, memo, useCallback, useMemo, useState } from 'react';
7
15
  import { useNavigate } from 'react-router-dom';
8
16
 
@@ -12,15 +20,6 @@ import RepoIcon from '@/components/LibIcon';
12
20
  import { knowledgeBaseSelectors, useKnowledgeBaseStore } from '@/store/library';
13
21
 
14
22
  const styles = createStaticStyles(({ css, cssVar }) => ({
15
- clickableHeader: css`
16
- cursor: pointer;
17
- border-radius: ${cssVar.borderRadius}px;
18
- transition: all 0.2s;
19
-
20
- &:hover {
21
- background-color: ${cssVar.colorFillTertiary};
22
- }
23
- `,
24
23
  dropZoneActive: css`
25
24
  color: ${cssVar.colorBgElevated} !important;
26
25
  background-color: ${cssVar.colorText} !important;
@@ -29,14 +28,6 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
29
28
  color: ${cssVar.colorBgElevated} !important;
30
29
  }
31
30
  `,
32
- icon: css`
33
- color: ${cssVar.colorTextSecondary};
34
- transition: all 0.2s;
35
-
36
- &:hover {
37
- color: ${cssVar.colorText};
38
- }
39
- `,
40
31
  menuIcon: css`
41
32
  color: ${cssVar.colorTextTertiary};
42
33
  `,
@@ -101,43 +92,47 @@ const Head = memo<{ id: string }>(({ id }) => {
101
92
  }, [libraries, handleLibrarySwitch, id, styles.menuIcon]);
102
93
 
103
94
  return (
104
- <Flexbox
95
+ <Block
105
96
  align={'center'}
106
- className={cx(styles.clickableHeader, isDropZoneActive && styles.dropZoneActive)}
97
+ className={cx(isDropZoneActive && styles.dropZoneActive)}
98
+ clickable
107
99
  data-drop-target-id="root"
108
100
  data-is-folder="true"
109
101
  data-root-drop="true"
110
102
  gap={8}
111
103
  horizontal
104
+ onClick={handleClick}
112
105
  onDragLeave={handleDragLeave}
113
106
  onDragOver={handleDragOver}
114
107
  onDrop={handleDrop}
115
- paddingBlock={6}
116
- paddingInline={'12px 14px'}
108
+ padding={2}
109
+ style={{ minWidth: 32, overflow: 'hidden' }}
110
+ variant={'borderless'}
117
111
  >
118
- <Center style={{ minWidth: 24 }} width={24}>
119
- <RepoIcon />
112
+ <Center style={{ minWidth: 32 }} width={32}>
113
+ <RepoIcon size={18} />
120
114
  </Center>
121
115
  {!name ? (
122
116
  <Skeleton active paragraph={false} title={{ style: { marginBottom: 0 }, width: 80 }} />
123
117
  ) : (
124
- <Flexbox align={'center'} flex={1} gap={4} horizontal onClick={handleClick}>
125
- <Text ellipsis strong style={{ flex: 1, fontSize: 16 }}>
126
- {name}
127
- </Text>
128
- </Flexbox>
118
+ <Text ellipsis style={{ flex: 1 }} weight={500}>
119
+ {name}
120
+ </Text>
129
121
  )}
130
122
  {name && (
131
123
  <DropdownMenu items={menuItems} placement="bottomRight">
132
- <ChevronsUpDown
133
- className={styles.icon}
124
+ <ActionIcon
125
+ icon={ChevronsUpDownIcon}
134
126
  onClick={(e) => e.stopPropagation()}
135
- size={16}
136
- style={{ cursor: 'pointer', flex: 'none' }}
127
+ size={{
128
+ blockSize: 28,
129
+ size: 16,
130
+ }}
131
+ style={{ width: 24 }}
137
132
  />
138
133
  </DropdownMenu>
139
134
  )}
140
- </Flexbox>
135
+ </Block>
141
136
  );
142
137
  });
143
138
 
@@ -12,17 +12,15 @@ const Header = memo(() => {
12
12
  const { id } = useParams<{ id: string }>();
13
13
  const { t } = useTranslation('common');
14
14
  return (
15
- <>
16
- <SideBarHeaderLayout
17
- breadcrumb={[
18
- {
19
- href: '/resource',
20
- title: t('tab.resource'),
21
- },
22
- ]}
23
- />
24
- <LibraryHead id={id || ''} />
25
- </>
15
+ <SideBarHeaderLayout
16
+ breadcrumb={[
17
+ {
18
+ href: '/resource',
19
+ title: t('tab.resource'),
20
+ },
21
+ ]}
22
+ left={<LibraryHead id={id || ''} />}
23
+ />
26
24
  );
27
25
  });
28
26