@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
@@ -3,7 +3,7 @@
3
3
  import { type StepContextTodos } from '@lobechat/types';
4
4
  import { Checkbox, Flexbox, Icon, Tag } from '@lobehub/ui';
5
5
  import { createStaticStyles, cssVar, cx } from 'antd-style';
6
- import { ChevronDown, ChevronUp, ListTodo } from 'lucide-react';
6
+ import { ChevronDown, ChevronUp, CircleArrowRight, ListTodo } from 'lucide-react';
7
7
  import { memo, useMemo, useState } from 'react';
8
8
  import { useTranslation } from 'react-i18next';
9
9
 
@@ -73,6 +73,11 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
73
73
  opacity 0.2s ${cssVar.motionEaseInOut},
74
74
  padding 0.2s ${cssVar.motionEaseInOut};
75
75
  `,
76
+ processingRow: css`
77
+ display: flex;
78
+ gap: 6px;
79
+ align-items: center;
80
+ `,
76
81
  progress: css`
77
82
  flex: 1;
78
83
  height: 4px;
@@ -85,10 +90,16 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
85
90
  background: ${cssVar.colorSuccess};
86
91
  transition: width 0.3s ${cssVar.motionEaseInOut};
87
92
  `,
88
- textChecked: css`
93
+ textCompleted: css`
89
94
  color: ${cssVar.colorTextQuaternary};
90
95
  text-decoration: line-through;
91
96
  `,
97
+ textProcessing: css`
98
+ color: ${cssVar.colorText};
99
+ `,
100
+ textTodo: css`
101
+ color: ${cssVar.colorTextSecondary};
102
+ `,
92
103
  }));
93
104
 
94
105
  interface TodoProgressProps {
@@ -112,11 +123,13 @@ const TodoProgress = memo<TodoProgressProps>(({ className }) => {
112
123
  // Calculate progress
113
124
  const items = todos?.items || [];
114
125
  const total = items.length;
115
- const completed = items.filter((item) => item.completed).length;
126
+ const completed = items.filter((item) => item.status === 'completed').length;
116
127
  const progressPercent = total > 0 ? (completed / total) * 100 : 0;
117
128
 
118
- // Find current pending task (first incomplete item)
119
- const currentPendingTask = items.find((item) => !item.completed);
129
+ // Find current pending task (first non-completed item, prioritize processing)
130
+ const currentPendingTask =
131
+ items.find((item) => item.status === 'processing') ||
132
+ items.find((item) => item.status === 'todo');
120
133
 
121
134
  // Don't render if no todos
122
135
  if (total === 0) return null;
@@ -156,24 +169,44 @@ const TodoProgress = memo<TodoProgressProps>(({ className }) => {
156
169
 
157
170
  {/* Expandable Todo List */}
158
171
  <div className={cx(styles.listContainer, expanded ? styles.expanded : styles.collapsed)}>
159
- {items.map((item, index) => (
160
- <Checkbox
161
- backgroundColor={cssVar.colorSuccess}
162
- checked={item.completed}
163
- classNames={{
164
- text: item.completed ? styles.textChecked : undefined,
165
- wrapper: styles.itemRow,
166
- }}
167
- key={index}
168
- shape="circle"
169
- style={{ borderWidth: 1.5, cursor: 'default', pointerEvents: 'none' }}
170
- textProps={{
171
- type: item.completed ? 'secondary' : undefined,
172
- }}
173
- >
174
- {item.text}
175
- </Checkbox>
176
- ))}
172
+ {items.map((item, index) => {
173
+ const isCompleted = item.status === 'completed';
174
+ const isProcessing = item.status === 'processing';
175
+
176
+ // Processing state uses CircleArrowRight icon
177
+ if (isProcessing) {
178
+ return (
179
+ <div className={cx(styles.itemRow, styles.processingRow)} key={index}>
180
+ <Icon
181
+ icon={CircleArrowRight}
182
+ size={17}
183
+ style={{ color: cssVar.colorTextSecondary }}
184
+ />
185
+ <span className={styles.textProcessing}>{item.text}</span>
186
+ </div>
187
+ );
188
+ }
189
+
190
+ // Todo and completed states use Checkbox
191
+ return (
192
+ <Checkbox
193
+ backgroundColor={cssVar.colorSuccess}
194
+ checked={isCompleted}
195
+ classNames={{
196
+ text: cx(styles.textTodo, isCompleted && styles.textCompleted),
197
+ wrapper: styles.itemRow,
198
+ }}
199
+ key={index}
200
+ shape="circle"
201
+ style={{ borderWidth: 1.5, cursor: 'default', pointerEvents: 'none' }}
202
+ textProps={{
203
+ type: isCompleted ? 'secondary' : undefined,
204
+ }}
205
+ >
206
+ {item.text}
207
+ </Checkbox>
208
+ );
209
+ })}
177
210
  </div>
178
211
  </div>
179
212
  </WideScreenContainer>
@@ -1,7 +1,6 @@
1
1
  import { Alert, Button, Flexbox, Highlighter, Icon } from '@lobehub/ui';
2
2
  import { Result } from 'antd';
3
3
  import { ShieldAlert } from 'lucide-react';
4
- import Link from 'next/link';
5
4
  import React, { memo } from 'react';
6
5
  import { Trans, useTranslation } from 'react-i18next';
7
6
  import Balancer from 'react-wrap-balancer';
@@ -41,17 +40,18 @@ const Error = memo<ErrorProps>(({ error, onClick }) => {
41
40
  <Balancer>
42
41
  <Trans i18nKey="importModal.error.desc" ns={'common'}>
43
42
  非常抱歉,数据库升级过程发生异常。请重试升级,或
44
- <Link
43
+ <a
45
44
  aria-label={'issue'}
46
45
  href={GITHUB_ISSUES}
47
46
  onClick={(e) => {
48
47
  e.preventDefault();
49
48
  githubService.submitImportError(error!);
50
49
  }}
50
+ rel="noreferrer"
51
51
  target="_blank"
52
52
  >
53
53
  提交问题
54
- </Link>
54
+ </a>
55
55
  我们将会第一时间帮你排查问题。
56
56
  </Trans>
57
57
  </Balancer>
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
- import { usePathname } from 'next/navigation';
4
3
  import {
5
4
  type PropsWithChildren,
6
5
  createContext,
@@ -10,6 +9,8 @@ import {
10
9
  useTransition,
11
10
  } from 'react';
12
11
 
12
+ import { usePathname } from '@/libs/router/navigation';
13
+
13
14
  import { getCacheFiles } from './getCacheEntries';
14
15
  import type { NextCacheFileData } from './schema';
15
16
 
@@ -1,5 +1,5 @@
1
1
  import { Flexbox, Form, Input, TextArea } from '@lobehub/ui';
2
- import Image from 'next/image';
2
+ import Image from '@/libs/next/Image';
3
3
  import { memo } from 'react';
4
4
 
5
5
  import { useHead } from './useHead';
@@ -5,11 +5,11 @@ import { ActionIcon, Flexbox, FluentEmoji, Icon, SideNav } from '@lobehub/ui';
5
5
  import { FloatButton } from 'antd';
6
6
  import { createStaticStyles, cssVar, cx } from 'antd-style';
7
7
  import { BugIcon, BugOff, XIcon } from 'lucide-react';
8
- import { usePathname } from 'next/navigation';
9
8
  import { type ReactNode, memo, useEffect, useState } from 'react';
10
9
  import { Rnd } from 'react-rnd';
11
10
 
12
11
  import { isDesktop } from '@/const/version';
12
+ import { usePathname } from '@/libs/next/navigation';
13
13
 
14
14
  // 定义样式
15
15
  const styles = createStaticStyles(({ css }) => {
@@ -1,6 +1,5 @@
1
1
  import { Flexbox, Highlighter } from '@lobehub/ui';
2
- import Image from 'next/image';
3
- import Link from 'next/link';
2
+ import Image from '@/libs/next/Image';
4
3
  import { type ReactNode, memo } from 'react';
5
4
 
6
5
  const TooltipContent = memo<{ children: ReactNode }>(({ children }) => {
@@ -19,9 +18,9 @@ const TooltipContent = memo<{ children: ReactNode }>(({ children }) => {
19
18
 
20
19
  if (children.startsWith('http'))
21
20
  return (
22
- <Link href={children} target={'_blank'}>
21
+ <a href={children} rel="noreferrer" target="_blank">
23
22
  {children}
24
- </Link>
23
+ </a>
25
24
  );
26
25
 
27
26
  const code = children.trim().trimEnd();
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { BookText, Cog, FlagIcon, GlobeLockIcon } from 'lucide-react';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
 
6
6
  import CacheViewer from './CacheViewer';
7
7
  import FeatureFlagViewer from './FeatureFlagViewer';
@@ -1,11 +1,6 @@
1
1
  'use client';
2
2
 
3
- import {
4
- HotkeyEnum,
5
- INSERT_HEADING_COMMAND,
6
- getHotkeyById,
7
- type IEditor,
8
- } from '@lobehub/editor';
3
+ import { HotkeyEnum, type IEditor, INSERT_HEADING_COMMAND, getHotkeyById } from '@lobehub/editor';
9
4
  import {
10
5
  ChatInputActions,
11
6
  type ChatInputActionsProps,
@@ -1,6 +1,5 @@
1
1
  import { Button, Center, Flexbox, FluentEmoji } from '@lobehub/ui';
2
2
  import { createStaticStyles } from 'antd-style';
3
- import Link from 'next/link';
4
3
  import { type CSSProperties, type ComponentType, useState } from 'react';
5
4
  import { Trans, useTranslation } from 'react-i18next';
6
5
 
@@ -37,9 +36,9 @@ const NotSupport: ComponentType<NotSupportProps> = ({ fileName, url, style }) =>
37
36
  <Flexbox style={{ textAlign: 'center' }}>
38
37
  <Trans i18nKey="preview.unsupportedFileAndContact" ns={'file'}>
39
38
  此文件格式暂不支持在线预览,如有预览诉求,欢迎
40
- <Link aria-label={'todo'} href={MORE_FILE_PREVIEW_REQUEST_URL} target="_blank">
39
+ <a aria-label={'todo'} href={MORE_FILE_PREVIEW_REQUEST_URL} rel="noreferrer" target="_blank">
41
40
  反馈给我们
42
- </Link>
41
+ </a>
43
42
  </Trans>
44
43
  </Flexbox>
45
44
  {url && (
@@ -4,7 +4,6 @@ import { SiDiscord, SiGithub, SiMedium, SiX } from '@icons-pack/react-simple-ico
4
4
  import { SOCIAL_URL } from '@lobechat/business-const';
5
5
  import { ActionIcon, Flexbox } from '@lobehub/ui';
6
6
  import { createStaticStyles, cssVar } from 'antd-style';
7
- import Link from 'next/link';
8
7
  import { memo } from 'react';
9
8
  import { useTranslation } from 'react-i18next';
10
9
 
@@ -30,30 +29,30 @@ const Follow = memo(() => {
30
29
  const { t } = useTranslation('common');
31
30
  return (
32
31
  <Flexbox gap={8} horizontal>
33
- <Link href={GITHUB} rel="noreferrer" target={'_blank'}>
32
+ <a href={GITHUB} rel="noreferrer" target="_blank">
34
33
  <ActionIcon
35
34
  className={styles.icon}
36
35
  icon={SiGithub as any}
37
36
  title={t('follow', { name: 'GitHub' })}
38
37
  />
39
- </Link>
40
- <Link href={SOCIAL_URL.x} rel="noreferrer" target={'_blank'}>
38
+ </a>
39
+ <a href={SOCIAL_URL.x} rel="noreferrer" target="_blank">
41
40
  <ActionIcon className={styles.icon} icon={SiX as any} title={t('follow', { name: 'X' })} />
42
- </Link>
43
- <Link href={SOCIAL_URL.discord} rel="noreferrer" target={'_blank'}>
41
+ </a>
42
+ <a href={SOCIAL_URL.discord} rel="noreferrer" target="_blank">
44
43
  <ActionIcon
45
44
  className={styles.icon}
46
45
  icon={SiDiscord as any}
47
46
  title={t('follow', { name: 'Discord' })}
48
47
  />
49
- </Link>
50
- <Link href={SOCIAL_URL.medium} rel="noreferrer" target={'_blank'}>
48
+ </a>
49
+ <a href={SOCIAL_URL.medium} rel="noreferrer" target="_blank">
51
50
  <ActionIcon
52
51
  className={styles.icon}
53
52
  icon={SiMedium as any}
54
53
  title={t('follow', { name: 'Medium' })}
55
54
  />
56
- </Link>
55
+ </a>
57
56
  </Flexbox>
58
57
  );
59
58
  });
@@ -1,8 +1,8 @@
1
1
  import { Block, Button, Flexbox, Form, MaterialFileTypeIcon, Select } from '@lobehub/ui';
2
2
  import { App } from 'antd';
3
- import Link from 'next/link';
4
3
  import { memo, useState } from 'react';
5
4
  import { Trans, useTranslation } from 'react-i18next';
5
+ import { Link } from 'react-router-dom';
6
6
 
7
7
  import RepoIcon from '@/components/LibIcon';
8
8
  import { useKnowledgeBaseStore } from '@/store/library';
@@ -34,7 +34,7 @@ const SelectForm = memo<CreateFormProps>(({ onClose, knowledgeBaseId, fileIds })
34
34
  <Trans
35
35
  components={[
36
36
  <span key="0" />,
37
- <Link href={`/knowledge/library/${values.id}`} key="1" />,
37
+ <Link key="1" to={`/knowledge/library/${values.id}`} />,
38
38
  ]}
39
39
  i18nKey={'addToKnowledgeBase.addSuccess'}
40
40
  ns={'knowledgeBase'}
@@ -3,7 +3,7 @@
3
3
  import { Center, Flexbox, Icon, Tooltip } from '@lobehub/ui';
4
4
  import { createStaticStyles, cssVar, cx } from 'antd-style';
5
5
  import { CircleDashedIcon, HammerIcon, LayersIcon, MessageSquareQuoteIcon } from 'lucide-react';
6
- import Link from 'next/link';
6
+ import { Link } from '@/libs/router';
7
7
  import qs from 'query-string';
8
8
  import { memo } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
@@ -12,7 +12,6 @@ import {
12
12
  PackageCheckIcon,
13
13
  SettingsIcon,
14
14
  } from 'lucide-react';
15
- import Link from 'next/link';
16
15
  import { memo } from 'react';
17
16
  import { useTranslation } from 'react-i18next';
18
17
  import urlJoin from 'url-join';
@@ -178,21 +177,22 @@ const Nav = memo<NavProps>(
178
177
  {nav}
179
178
  {!inModal && (
180
179
  <Flexbox gap={12} horizontal>
181
- <Link className={styles.link} href={SOCIAL_URL.discord} target={'_blank'}>
180
+ <a className={styles.link} href={SOCIAL_URL.discord} rel="noreferrer" target="_blank">
182
181
  {t('mcp.details.nav.needHelp')}
183
- </Link>
182
+ </a>
184
183
  {github?.url && (
185
184
  <>
186
- <Link className={styles.link} href={github.url} target={'_blank'}>
185
+ <a className={styles.link} href={github.url} rel="noreferrer" target="_blank">
187
186
  {t('mcp.details.nav.viewSourceCode')}
188
- </Link>
189
- <Link
187
+ </a>
188
+ <a
190
189
  className={styles.link}
191
190
  href={urlJoin(github.url, 'issues')}
192
- target={'_blank'}
191
+ rel="noreferrer"
192
+ target="_blank"
193
193
  >
194
194
  {t('mcp.details.nav.reportIssue')}
195
- </Link>
195
+ </a>
196
196
  </>
197
197
  )}
198
198
  </Flexbox>
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Flexbox, Tag } from '@lobehub/ui';
4
4
  import { createStaticStyles } from 'antd-style';
5
- import Link from 'next/link';
5
+ import { Link } from '@/libs/router';
6
6
  import qs from 'query-string';
7
7
  import { memo } from 'react';
8
8
 
@@ -2,10 +2,11 @@ import { Icon } from '@lobehub/ui';
2
2
  import { TabBar, type TabBarProps } from '@lobehub/ui/mobile';
3
3
  import { createStaticStyles, cssVar } from 'antd-style';
4
4
  import { Bot, MessageSquare, User } from 'lucide-react';
5
- import { useRouter } from 'next/navigation';
6
5
  import { memo, useMemo } from 'react';
7
6
  import { useTranslation } from 'react-i18next';
8
7
 
8
+ import { useRouter } from '@/libs/router/navigation';
9
+
9
10
  import { SidebarTabKey } from '@/store/global/initialState';
10
11
  import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
11
12
 
@@ -1,7 +1,6 @@
1
1
  import { Ollama } from '@lobehub/icons';
2
2
  import { Center } from '@lobehub/ui';
3
3
  import { cssVar } from 'antd-style';
4
- import Link from 'next/link';
5
4
  import { memo } from 'react';
6
5
  import { Trans, useTranslation } from 'react-i18next';
7
6
 
@@ -17,7 +16,7 @@ const OllamaDesktopSetupGuide = memo(() => {
17
16
  description={
18
17
  <span>
19
18
  <Trans
20
- components={[<span key="0" />, <Link href={'https://ollama.com/download'} key="1" />]}
19
+ components={[<span key="0" />, <a href={'https://ollama.com/download'} key="1" rel="noreferrer" target="_blank" />]}
21
20
  i18nKey={'OllamaSetupGuide.install.description'}
22
21
  ns={'components'}
23
22
  />
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { BRANDING_NAME } from '@lobechat/business-const';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo, useEffect, useLayoutEffect } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import dynamic from 'next/dynamic';
3
+ import dynamic from '@/libs/next/dynamic';
4
4
  import { pwaInstallHandler } from 'pwa-install-handler';
5
5
  import { memo, useEffect, useState } from 'react';
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { DraggablePanel, Flexbox } from '@lobehub/ui';
2
2
  import { cssVar, useTheme } from 'antd-style';
3
- import dynamic from 'next/dynamic';
3
+ import dynamic from '@/libs/next/dynamic';
4
4
  import { memo, useRef } from 'react';
5
5
 
6
6
  import { useServerConfigStore } from '@/store/serverConfig';
@@ -4,7 +4,6 @@ import { Github } from '@lobehub/icons';
4
4
  import { ActionIcon, Avatar, Collapse, Flexbox, Icon, Text } from '@lobehub/ui';
5
5
  import { createStaticStyles, cssVar, useResponsive } from 'antd-style';
6
6
  import { DotIcon } 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';
@@ -77,16 +76,17 @@ const Header = memo<{ inModal?: boolean; mobile?: boolean }>(({ mobile: isMobile
77
76
  </Flexbox>
78
77
  {identifier && (
79
78
  <Flexbox align={'center'} gap={6} horizontal>
80
- <Link
79
+ <a
81
80
  href={urlJoin(
82
81
  'https://github.com/lobehub/lobe-chat-agents/tree/main/locales',
83
82
  identifier,
84
83
  )}
85
84
  onClick={(e) => e.stopPropagation()}
86
- target={'_blank'}
85
+ rel="noreferrer"
86
+ target="_blank"
87
87
  >
88
88
  <ActionIcon fill={cssVar.colorTextDescription} icon={Github} />
89
- </Link>
89
+ </a>
90
90
  </Flexbox>
91
91
  )}
92
92
  </Flexbox>
@@ -94,9 +94,9 @@ const Header = memo<{ inModal?: boolean; mobile?: boolean }>(({ mobile: isMobile
94
94
  <Flexbox>
95
95
  <Flexbox align={'center'} gap={4} horizontal>
96
96
  {author && (
97
- <Link href={urlJoin('https://github.com', author)} target={'_blank'}>
97
+ <a href={urlJoin('https://github.com', author)} rel="noreferrer" target="_blank">
98
98
  {author}
99
- </Link>
99
+ </a>
100
100
  )}
101
101
  <Icon icon={DotIcon} />
102
102
  <PublishedTime
@@ -1,5 +1,5 @@
1
1
  import { Skeleton } from '@lobehub/ui';
2
- import dynamic from 'next/dynamic';
2
+ import dynamic from '@/libs/next/dynamic';
3
3
  import { Suspense, memo } from 'react';
4
4
 
5
5
  import { useToolStore } from '@/store/tool';
@@ -1,7 +1,7 @@
1
1
  import { Flexbox, Image, Markdown } from '@lobehub/ui';
2
2
  import { memo } from 'react';
3
3
 
4
- import Arguments from '@/features/Conversation/Messages/AssistantGroup/Tool/Render/Arguments';
4
+ import Arguments from '@/features/Conversation/Messages/AssistantGroup/Tool/Detail/Arguments';
5
5
  import { type ToolCallResult } from '@/libs/mcp';
6
6
 
7
7
  export interface MCPTypeProps {
@@ -1,5 +1,5 @@
1
1
  import { Markdown, Mermaid } from '@lobehub/ui';
2
- import dynamic from 'next/dynamic';
2
+ import dynamic from '@/libs/next/dynamic';
3
3
  import { memo } from 'react';
4
4
 
5
5
  import HTMLRenderer from './HTML';
@@ -1,7 +1,7 @@
1
1
  import { Flexbox } from '@lobehub/ui';
2
2
  import { Drawer } from 'antd';
3
3
  import { cssVar } from 'antd-style';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo } from 'react';
6
6
 
7
7
  import { fileManagerSelectors, useFileStore } from '@/store/file';
@@ -1,8 +1,9 @@
1
1
  'use client';
2
2
 
3
3
  import { ActionIcon, Flexbox } from '@lobehub/ui';
4
+ import { App } from 'antd';
4
5
  import { cssVar } from 'antd-style';
5
- import { SearchIcon } from 'lucide-react';
6
+ import { BookMinusIcon, FileBoxIcon, SearchIcon, Trash2Icon } from 'lucide-react';
6
7
  import { memo } from 'react';
7
8
  import { useTranslation } from 'react-i18next';
8
9
 
@@ -18,7 +19,8 @@ import ViewSwitcher from '../ToolBar/ViewSwitcher';
18
19
  import Breadcrumb from './Breadcrumb';
19
20
 
20
21
  const Header = memo(() => {
21
- const { t } = useTranslation('file');
22
+ const { t } = useTranslation(['components', 'common', 'file', 'knowledgeBase']);
23
+ const { modal, message } = App.useApp();
22
24
 
23
25
  // Get state and actions from store
24
26
  const [libraryId, category, onActionClick, selectFileIds] = useResourceManagerStore((s) => [
@@ -29,8 +31,59 @@ const Header = memo(() => {
29
31
  ]);
30
32
  const toggleCommandMenu = useGlobalStore((s) => s.toggleCommandMenu);
31
33
 
34
+ const selectCount = selectFileIds.length;
35
+ const isMultiSelected = selectCount > 1;
36
+
32
37
  // If no libraryId, show category name or "Resource" for All
33
- const leftContent = !libraryId ? (
38
+ const leftContent = isMultiSelected ? (
39
+ <Flexbox align={'center'} gap={8} horizontal style={{ marginLeft: 0 }}>
40
+ {libraryId ? (
41
+ <ActionIcon
42
+ icon={BookMinusIcon}
43
+ onClick={() => {
44
+ modal.confirm({
45
+ okButtonProps: {
46
+ danger: true,
47
+ },
48
+ onOk: async () => {
49
+ await onActionClick('removeFromKnowledgeBase');
50
+ message.success(t('FileManager.actions.removeFromKnowledgeBaseSuccess'));
51
+ },
52
+ title: t('FileManager.actions.confirmRemoveFromKnowledgeBase', {
53
+ count: selectCount,
54
+ }),
55
+ });
56
+ }}
57
+ title={t('FileManager.actions.removeFromKnowledgeBase')}
58
+ />
59
+ ) : null}
60
+
61
+ <ActionIcon
62
+ icon={FileBoxIcon}
63
+ onClick={async () => {
64
+ await onActionClick('batchChunking');
65
+ }}
66
+ title={t('FileManager.actions.batchChunking')}
67
+ />
68
+
69
+ <ActionIcon
70
+ icon={Trash2Icon}
71
+ onClick={() => {
72
+ modal.confirm({
73
+ okButtonProps: {
74
+ danger: true,
75
+ },
76
+ onOk: async () => {
77
+ await onActionClick('delete');
78
+ message.success(t('FileManager.actions.deleteSuccess'));
79
+ },
80
+ title: t('FileManager.actions.confirmDeleteMultiFiles', { count: selectCount }),
81
+ });
82
+ }}
83
+ title={t('delete', { ns: 'common' })}
84
+ />
85
+ </Flexbox>
86
+ ) : !libraryId ? (
34
87
  <Flexbox style={{ marginLeft: 8 }}>
35
88
  {category === FilesTabs.All
36
89
  ? t('resource', { defaultValue: 'Resource' })
@@ -49,7 +102,7 @@ const Header = memo(() => {
49
102
  <>
50
103
  <ActionIcon icon={SearchIcon} onClick={() => toggleCommandMenu(true)} />
51
104
  <SortDropdown />
52
- <BatchActionsDropdown onActionClick={onActionClick} selectCount={selectFileIds.length} />
105
+ <BatchActionsDropdown onActionClick={onActionClick} selectCount={selectCount} />
53
106
  <ViewSwitcher />
54
107
  <Flexbox style={{ marginLeft: 8 }}>
55
108
  <AddButton />
@@ -48,11 +48,12 @@ const styles = createStaticStyles(({ css }) => {
48
48
  `,
49
49
 
50
50
  dragOver: css`
51
- color: ${cssVar.colorBgElevated} !important;
52
- background-color: ${cssVar.colorText} !important;
51
+ outline: 1px dashed ${cssVar.colorPrimaryBorder};
52
+ outline-offset: -2px;
53
53
 
54
- * {
55
- color: ${cssVar.colorBgElevated} !important;
54
+ &,
55
+ &:hover {
56
+ background: ${cssVar.colorPrimaryBg};
56
57
  }
57
58
  `,
58
59
 
@@ -510,6 +511,7 @@ const FileListItem = memo<FileListItemProps>(
510
511
  e.stopPropagation();
511
512
  }}
512
513
  onPointerDown={(e) => e.stopPropagation()}
514
+ paddingInline={8}
513
515
  >
514
516
  {!isFolder &&
515
517
  !isPage &&