@lobehub/lobehub 2.0.0-next.227 → 2.0.0-next.229

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 (43) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +50 -0
  3. package/CLAUDE.md +4 -0
  4. package/changelog/v1.json +18 -0
  5. package/package.json +2 -2
  6. package/packages/utils/src/platform.test.ts +26 -1
  7. package/packages/utils/src/platform.ts +22 -0
  8. package/src/app/[variants]/(main)/_layout/DesktopLayoutContainer/style.ts +4 -0
  9. package/src/app/[variants]/(main)/_layout/DesktopLayoutContainer.tsx +8 -4
  10. package/src/app/[variants]/(main)/chat/_layout/Sidebar/Header/Agent/SwitchPanel.tsx +37 -23
  11. package/src/app/[variants]/(main)/chat/_layout/Sidebar/Topic/List/Item/Editing.tsx +4 -7
  12. package/src/app/[variants]/(main)/chat/_layout/Sidebar/Topic/TopicListContent/ThreadList/ThreadItem/Editing.tsx +4 -7
  13. package/src/app/[variants]/(main)/chat/features/Conversation/Header/HeaderActions/index.tsx +3 -13
  14. package/src/app/[variants]/(main)/chat/features/Conversation/Header/WorkingDirectory/index.tsx +2 -4
  15. package/src/app/[variants]/(main)/community/(list)/model/features/List/Item.tsx +1 -3
  16. package/src/app/[variants]/(main)/group/_layout/Sidebar/GroupConfig/AgentProfilePopup.tsx +3 -5
  17. package/src/app/[variants]/(main)/group/_layout/Sidebar/Header/Agent/SwitchPanel.tsx +4 -6
  18. package/src/app/[variants]/(main)/group/_layout/Sidebar/Topic/List/Item/Editing.tsx +4 -7
  19. package/src/app/[variants]/(main)/group/_layout/Sidebar/Topic/TopicListContent/ThreadList/ThreadItem/Editing.tsx +4 -7
  20. package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/AgentGroupItem/Editing.tsx +4 -7
  21. package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/AgentItem/Editing.tsx +4 -7
  22. package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/Group/Editing.tsx +4 -7
  23. package/src/app/[variants]/(main)/home/_layout/Body/Project/List/Editing.tsx +4 -7
  24. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/ModelSelect/ImageModelItem.tsx +1 -6
  25. package/src/app/[variants]/(main)/image/_layout/Topics/TopicItem.tsx +3 -4
  26. package/src/app/[variants]/(main)/page/_layout/Body/List/Item/Editing.tsx +5 -7
  27. package/src/app/[variants]/(main)/resource/(home)/_layout/Body/LibraryList/List/Item/Editing.tsx +4 -7
  28. package/src/components/ManifestPreviewer/index.tsx +2 -5
  29. package/src/components/TipGuide/index.tsx +3 -4
  30. package/src/features/ChatInput/ActionBar/Search/index.tsx +1 -1
  31. package/src/features/ChatInput/ActionBar/components/Action.tsx +5 -1
  32. package/src/features/ChatInput/ActionBar/components/ActionPopover.tsx +27 -23
  33. package/src/features/ChatMiniMap/MinimapIndicator.tsx +2 -4
  34. package/src/features/ChatMiniMap/index.tsx +16 -14
  35. package/src/features/Conversation/Markdown/plugins/Mention/Render.tsx +2 -4
  36. package/src/features/Conversation/Messages/AssistantGroup/Tool/Render/Intervention/ApprovalActions.tsx +2 -3
  37. package/src/features/Conversation/Messages/components/Extras/Usage/UsageDetail/index.tsx +3 -4
  38. package/src/features/LocalFile/LocalFile.tsx +4 -5
  39. package/src/features/MCPPluginDetail/Deployment/index.tsx +13 -4
  40. package/src/features/MCPPluginDetail/Score/TotalScore.tsx +10 -5
  41. package/src/features/ModelSwitchPanel/index.tsx +2 -4
  42. package/src/features/PageEditor/Copilot/Toolbar.tsx +5 -8
  43. package/src/server/routers/mobile/index.ts +1 -1
package/AGENTS.md CHANGED
@@ -74,6 +74,10 @@ The project follows a well-organized monorepo structure:
74
74
  - **Dev**: Translate `locales/zh-CN/namespace.json` locale file only for preview
75
75
  - DON'T run `pnpm i18n`, let CI auto handle it
76
76
 
77
+ ## Linear Issue Management
78
+
79
+ Follow [Linear rules in CLAUDE.md](CLAUDE.md#linear-issue-management-ignore-if-not-installed-linear-mcp) when working with Linear issues.
80
+
77
81
  ## Project Rules Index
78
82
 
79
83
  All following rules are saved under `.cursor/rules/` directory:
package/CHANGELOG.md CHANGED
@@ -2,6 +2,56 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## [Version 2.0.0-next.229](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.228...v2.0.0-next.229)
6
+
7
+ <sup>Released on **2026-01-07**</sup>
8
+
9
+ #### 🐛 Bug Fixes
10
+
11
+ - **misc**: Update mobile topicRouter import path to lambda directory.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### What's fixed
19
+
20
+ - **misc**: Update mobile topicRouter import path to lambda directory, closes [#11261](https://github.com/lobehub/lobe-chat/issues/11261) ([f591b77](https://github.com/lobehub/lobe-chat/commit/f591b77))
21
+
22
+ </details>
23
+
24
+ <div align="right">
25
+
26
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
27
+
28
+ </div>
29
+
30
+ ## [Version 2.0.0-next.228](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.227...v2.0.0-next.228)
31
+
32
+ <sup>Released on **2026-01-06**</sup>
33
+
34
+ #### 🐛 Bug Fixes
35
+
36
+ - **misc**: Add separate border-radius for bottom-right corner on macOS 26 Chrome.
37
+
38
+ <br/>
39
+
40
+ <details>
41
+ <summary><kbd>Improvements and Fixes</kbd></summary>
42
+
43
+ #### What's fixed
44
+
45
+ - **misc**: Add separate border-radius for bottom-right corner on macOS 26 Chrome, closes [#11287](https://github.com/lobehub/lobe-chat/issues/11287) ([544931a](https://github.com/lobehub/lobe-chat/commit/544931a))
46
+
47
+ </details>
48
+
49
+ <div align="right">
50
+
51
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
52
+
53
+ </div>
54
+
5
55
  ## [Version 2.0.0-next.227](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.226...v2.0.0-next.227)
6
56
 
7
57
  <sup>Released on **2026-01-06**</sup>
package/CLAUDE.md CHANGED
@@ -78,6 +78,10 @@ When creating new Linear issues using `mcp__linear-server__create_issue`, **MUST
78
78
  - Code review context
79
79
  - Future reference and debugging
80
80
 
81
+ ### PR Linear Issue Association (REQUIRED)
82
+
83
+ **When creating PRs for Linear issues, MUST include magic keywords in PR body:** `Fixes LOBE-123`, `Closes LOBE-123`, or `Resolves LOBE-123`
84
+
81
85
  ### IMPORTANT: Per-Issue Completion Rule
82
86
 
83
87
  **When working on multiple issues (e.g., parent issue with sub-issues), you MUST update status and add comment for EACH issue IMMEDIATELY after completing it.** Do NOT wait until all issues are done to update them in batch.
package/changelog/v1.json CHANGED
@@ -1,4 +1,22 @@
1
1
  [
2
+ {
3
+ "children": {
4
+ "fixes": [
5
+ "Update mobile topicRouter import path to lambda directory."
6
+ ]
7
+ },
8
+ "date": "2026-01-07",
9
+ "version": "2.0.0-next.229"
10
+ },
11
+ {
12
+ "children": {
13
+ "fixes": [
14
+ "Add separate border-radius for bottom-right corner on macOS 26 Chrome."
15
+ ]
16
+ },
17
+ "date": "2026-01-06",
18
+ "version": "2.0.0-next.228"
19
+ },
2
20
  {
3
21
  "children": {
4
22
  "fixes": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/lobehub",
3
- "version": "2.0.0-next.227",
3
+ "version": "2.0.0-next.229",
4
4
  "description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -206,7 +206,7 @@
206
206
  "@lobehub/icons": "^4.0.2",
207
207
  "@lobehub/market-sdk": "^0.27.1",
208
208
  "@lobehub/tts": "^4.0.2",
209
- "@lobehub/ui": "^4.9.3",
209
+ "@lobehub/ui": "^4.11.5",
210
210
  "@modelcontextprotocol/sdk": "^1.25.1",
211
211
  "@neondatabase/serverless": "^1.0.2",
212
212
  "@next/third-parties": "^16.1.1",
@@ -1,6 +1,6 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
2
 
3
- import { isArc, isSonomaOrLaterSafari } from './platform';
3
+ import { isArc, isMacOSWithLargeWindowBorders, isSonomaOrLaterSafari } from './platform';
4
4
 
5
5
  describe('isSonomaOrLaterSafari', () => {
6
6
  beforeEach(() => {
@@ -12,6 +12,31 @@ describe('isSonomaOrLaterSafari', () => {
12
12
  });
13
13
  });
14
14
 
15
+ describe('isMacOSWithLargeWindowBorders', () => {
16
+ it('should return true for macOS 10.15+', () => {
17
+ vi.stubGlobal('navigator', {
18
+ userAgent:
19
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36',
20
+ });
21
+
22
+ expect(isMacOSWithLargeWindowBorders()).toBe(true);
23
+ });
24
+
25
+ it('should return false for non-macOS userAgent', () => {
26
+ vi.stubGlobal('navigator', { userAgent: 'Windows NT 10.0; Win64; x64' });
27
+ expect(isMacOSWithLargeWindowBorders()).toBe(false);
28
+ });
29
+
30
+ it('should return false in Electron', () => {
31
+ vi.stubGlobal('navigator', {
32
+ userAgent:
33
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Electron/30.0.0 Safari/537.36',
34
+ });
35
+
36
+ expect(isMacOSWithLargeWindowBorders()).toBe(false);
37
+ });
38
+ });
39
+
15
40
  it('should return false when userAgent is not Macintosh', () => {
16
41
  vi.stubGlobal('navigator', { userAgent: 'Windows NT 10.0; Win64; x64' });
17
42
  expect(isSonomaOrLaterSafari()).toBe(false);
@@ -25,6 +25,28 @@ export const browserInfo = {
25
25
 
26
26
  export const isMacOS = () => getPlatform() === 'Mac OS';
27
27
 
28
+ /**
29
+ *
30
+ * We can't use it to detect the macOS real version, and we also don't know if it's macOS 26, only an estimated value.
31
+ * @returns true if the current browser is macOS and the version is 10.15 or later
32
+ */
33
+ export const isMacOSWithLargeWindowBorders = () => {
34
+ if (isOnServerSide || typeof navigator === 'undefined') return false;
35
+
36
+ // keep consistent with the original logic: only for macOS on web (exclude Electron)
37
+ const isElectron =
38
+ /Electron\//.test(navigator.userAgent) || Boolean((window as any)?.process?.type);
39
+ if (isElectron || !isMacOS()) return false;
40
+
41
+ const match = navigator.userAgent.match(/Mac OS X (\d+)[._](\d+)/);
42
+ if (!match) return false;
43
+
44
+ const majorVersion = parseInt(match[1], 10);
45
+ const minorVersion = parseInt(match[2], 10);
46
+
47
+ return majorVersion >= 10 && minorVersion >= 15;
48
+ };
49
+
28
50
  export const isArc = () => {
29
51
  if (isOnServerSide) return false;
30
52
  return (
@@ -11,6 +11,10 @@ export const styles = createStaticStyles(({ css, cssVar }) => ({
11
11
 
12
12
  border: 1px solid var(--container-border-color, ${cssVar.colorBorder});
13
13
  border-radius: var(--container-border-radius, ${cssVar.borderRadius});
14
+ border-end-end-radius: var(
15
+ --container-border-bottom-right-radius,
16
+ var(--container-border-radius, ${cssVar.borderRadius})
17
+ );
14
18
 
15
19
  background: ${cssVar.colorBgContainer};
16
20
  `,
@@ -6,6 +6,7 @@ import { isDesktop } from '@/const/version';
6
6
  import { useIsDark } from '@/hooks/useIsDark';
7
7
  import { useGlobalStore } from '@/store/global';
8
8
  import { systemStatusSelectors } from '@/store/global/selectors';
9
+ import { isMacOSWithLargeWindowBorders } from '@/utils/platform';
9
10
 
10
11
  import { styles } from './DesktopLayoutContainer/style';
11
12
 
@@ -23,12 +24,15 @@ const DesktopLayoutContainer: FC<PropsWithChildren> = ({ children }) => {
23
24
  );
24
25
 
25
26
  const innerCssVariables = useMemo<Record<string, string>>(() => {
26
- const borderRadius =
27
- typeof window !== 'undefined' && (window.lobeEnv?.darwinMajorVersion ?? 0) >= 25
28
- ? '12px'
29
- : cssVar.borderRadius;
27
+ const darwinMajorVersion =
28
+ typeof window !== 'undefined' ? (window.lobeEnv?.darwinMajorVersion ?? 0) : 0;
29
+
30
+ const borderRadius = darwinMajorVersion >= 25 ? '12px' : cssVar.borderRadius;
31
+ const borderBottomRightRadius =
32
+ darwinMajorVersion >= 26 || isMacOSWithLargeWindowBorders() ? '12px' : borderRadius;
30
33
 
31
34
  return {
35
+ '--container-border-bottom-right-radius': borderBottomRightRadius,
32
36
  '--container-border-color': isDarkMode ? cssVar.colorBorderSecondary : cssVar.colorBorder,
33
37
  '--container-border-radius': borderRadius,
34
38
  };
@@ -1,41 +1,55 @@
1
- import { Flexbox } from '@lobehub/ui';
2
- import { Popover } from 'antd';
3
- import React, { type PropsWithChildren, Suspense, memo } from 'react';
1
+ import { Flexbox, Popover } from '@lobehub/ui';
2
+ import { createStaticStyles } from 'antd-style';
3
+ import { type PropsWithChildren, Suspense, memo, useMemo } from 'react';
4
4
  import { useNavigate } from 'react-router-dom';
5
5
 
6
6
  import List from '@/app/[variants]/(main)/home/_layout/Body/Agent/List';
7
7
  import { AgentModalProvider } from '@/app/[variants]/(main)/home/_layout/Body/Agent/ModalProvider';
8
8
  import SkeletonList from '@/features/NavPanel/components/SkeletonList';
9
9
 
10
+ const styles = createStaticStyles(({ cssVar, css }) => ({
11
+ trigger: css`
12
+ &[data-popup-open] {
13
+ background: ${cssVar.colorFillTertiary};
14
+ }
15
+ `,
16
+ }));
17
+
10
18
  const SwitchPanel = memo<PropsWithChildren>(({ children }) => {
11
19
  const navigate = useNavigate();
20
+
21
+ const content = useMemo(
22
+ () => (
23
+ <Suspense fallback={<SkeletonList rows={6} />}>
24
+ <AgentModalProvider>
25
+ <Flexbox
26
+ gap={4}
27
+ padding={8}
28
+ style={{
29
+ maxHeight: '50vh',
30
+ overflowY: 'auto',
31
+ }}
32
+ >
33
+ <List onMoreClick={() => navigate('/')} />
34
+ </Flexbox>
35
+ </AgentModalProvider>
36
+ </Suspense>
37
+ ),
38
+ [navigate],
39
+ );
40
+
12
41
  return (
13
42
  <Popover
14
- arrow={false}
15
- content={
16
- <Suspense fallback={<SkeletonList rows={6} />}>
17
- <AgentModalProvider>
18
- <Flexbox
19
- gap={4}
20
- padding={8}
21
- style={{
22
- maxHeight: '50vh',
23
- overflowY: 'auto',
24
- }}
25
- >
26
- <List onMoreClick={() => navigate('/')} />
27
- </Flexbox>
28
- </AgentModalProvider>
29
- </Suspense>
30
- }
31
- placement={'bottomLeft'}
43
+ classNames={{ trigger: styles.trigger }}
44
+ content={content}
45
+ placement="bottomLeft"
32
46
  styles={{
33
- container: {
47
+ content: {
34
48
  padding: 0,
35
49
  width: 240,
36
50
  },
37
51
  }}
38
- trigger={['click']}
52
+ trigger="click"
39
53
  >
40
54
  {children}
41
55
  </Popover>
@@ -1,5 +1,4 @@
1
- import { Input } from '@lobehub/ui';
2
- import { Popover } from 'antd';
1
+ import { Input, Popover } from '@lobehub/ui';
3
2
  import { memo, useCallback, useState } from 'react';
4
3
 
5
4
  import { useChatStore } from '@/store/chat';
@@ -47,7 +46,6 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
47
46
 
48
47
  return (
49
48
  <Popover
50
- arrow={false}
51
49
  content={
52
50
  <Input
53
51
  autoFocus
@@ -64,20 +62,19 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
64
62
  }}
65
63
  />
66
64
  }
67
- destroyOnHidden
68
65
  onOpenChange={(open) => {
69
66
  if (!open) handleUpdate();
70
67
  toggleEditing(open);
71
68
  }}
72
69
  open={editing}
73
- placement={'bottomLeft'}
70
+ placement="bottomLeft"
74
71
  styles={{
75
- container: {
72
+ content: {
76
73
  padding: 4,
77
74
  width: 320,
78
75
  },
79
76
  }}
80
- trigger={['click']}
77
+ trigger="click"
81
78
  >
82
79
  <div />
83
80
  </Popover>
@@ -1,5 +1,4 @@
1
- import { Input } from '@lobehub/ui';
2
- import { Popover } from 'antd';
1
+ import { Input, Popover } from '@lobehub/ui';
3
2
  import { memo, useCallback, useState } from 'react';
4
3
 
5
4
  import { useChatStore } from '@/store/chat';
@@ -26,7 +25,6 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
26
25
 
27
26
  return (
28
27
  <Popover
29
- arrow={false}
30
28
  content={
31
29
  <Input
32
30
  autoFocus
@@ -43,20 +41,19 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
43
41
  }}
44
42
  />
45
43
  }
46
- destroyOnHidden
47
44
  onOpenChange={(open) => {
48
45
  if (!open) handleUpdate();
49
46
  toggleEditing(open);
50
47
  }}
51
48
  open={editing}
52
- placement={'bottomLeft'}
49
+ placement="bottomLeft"
53
50
  styles={{
54
- container: {
51
+ content: {
55
52
  padding: 4,
56
53
  width: 320,
57
54
  },
58
55
  }}
59
- trigger={['click']}
56
+ trigger="click"
60
57
  >
61
58
  <div />
62
59
  </Popover>
@@ -1,7 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { ActionIcon, Dropdown } from '@lobehub/ui';
4
- import type { MenuProps } from '@lobehub/ui';
3
+ import { ActionIcon, DropdownMenu } from '@lobehub/ui';
5
4
  import { MoreHorizontal } from 'lucide-react';
6
5
  import { memo } from 'react';
7
6
 
@@ -13,18 +12,9 @@ const HeaderActions = memo(() => {
13
12
  const { menuItems } = useMenu();
14
13
 
15
14
  return (
16
- <Dropdown
17
- arrow={false}
18
- menu={{
19
- items: menuItems as MenuProps['items'],
20
- onClick: ({ domEvent }) => {
21
- domEvent.stopPropagation();
22
- },
23
- }}
24
- trigger={['click']}
25
- >
15
+ <DropdownMenu items={menuItems}>
26
16
  <ActionIcon icon={MoreHorizontal} size={DESKTOP_HEADER_ICON_SIZE} />
27
- </Dropdown>
17
+ </DropdownMenu>
28
18
  );
29
19
  });
30
20
 
@@ -1,6 +1,5 @@
1
1
  import { LocalSystemManifest } from '@lobechat/builtin-tool-local-system';
2
- import { Flexbox, Icon, Tooltip } from '@lobehub/ui';
3
- import { Popover } from 'antd';
2
+ import { Flexbox, Icon, Popover, Tooltip } from '@lobehub/ui';
4
3
  import { createStaticStyles, cx } from 'antd-style';
5
4
  import { LaptopIcon, SquircleDashed } from 'lucide-react';
6
5
  import { memo, useMemo, useState } from 'react';
@@ -90,12 +89,11 @@ const WorkingDirectory = memo(() => {
90
89
  );
91
90
  return (
92
91
  <Popover
93
- arrow={false}
94
92
  content={<WorkingDirectoryContent agentId={agentId} onClose={() => setOpen(false)} />}
95
93
  onOpenChange={setOpen}
96
94
  open={open}
97
95
  placement="bottomRight"
98
- trigger={['click']}
96
+ trigger="click"
99
97
  >
100
98
  <div>
101
99
  {open ? (
@@ -1,8 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { ModelIcon, ProviderIcon } from '@lobehub/icons';
4
- import { Block, Flexbox, Icon, Tag, Text } from '@lobehub/ui';
5
- import { Popover } from 'antd';
4
+ import { Block, Flexbox, Icon, Popover, Tag, Text } from '@lobehub/ui';
6
5
  import { createStaticStyles } from 'antd-style';
7
6
  import dayjs from 'dayjs';
8
7
  import { ClockIcon } from 'lucide-react';
@@ -155,7 +154,6 @@ const ModelItem = memo<DiscoverModelItem>(
155
154
  />
156
155
  </Flexbox>
157
156
  <Popover
158
- arrow={false}
159
157
  content={
160
158
  <Flexbox
161
159
  gap={6}
@@ -1,8 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import type { AgentItem } from '@lobechat/types';
4
- import { Avatar, Center, Flexbox, Text, Tooltip } from '@lobehub/ui';
5
- import { Popover } from 'antd';
4
+ import { Avatar, Center, Flexbox, Popover, Text, Tooltip } from '@lobehub/ui';
6
5
  import { createStaticStyles, cssVar } from 'antd-style';
7
6
  import { type PropsWithChildren, memo, useState } from 'react';
8
7
  import { useTranslation } from 'react-i18next';
@@ -167,15 +166,14 @@ const AgentProfilePopup = memo<AgentProfilePopupProps>(({ agent, groupId, childr
167
166
 
168
167
  return (
169
168
  <Popover
170
- arrow={false}
171
169
  content={content}
172
170
  onOpenChange={setOpen}
173
171
  open={open}
174
172
  placement="right"
175
173
  styles={{
176
- container: { overflow: 'hidden', padding: 0 },
174
+ content: { overflow: 'hidden', padding: 0 },
177
175
  }}
178
- trigger={['click']}
176
+ trigger="click"
179
177
  >
180
178
  {children}
181
179
  </Popover>
@@ -1,5 +1,4 @@
1
- import { Flexbox } from '@lobehub/ui';
2
- import { Popover } from 'antd';
1
+ import { Flexbox, Popover } from '@lobehub/ui';
3
2
  import React, { type PropsWithChildren, Suspense, memo } from 'react';
4
3
  import { useNavigate } from 'react-router-dom';
5
4
 
@@ -11,7 +10,6 @@ const SwitchPanel = memo<PropsWithChildren>(({ children }) => {
11
10
  const navigate = useNavigate();
12
11
  return (
13
12
  <Popover
14
- arrow={false}
15
13
  content={
16
14
  <Suspense fallback={<SkeletonList rows={6} />}>
17
15
  <AgentModalProvider>
@@ -28,14 +26,14 @@ const SwitchPanel = memo<PropsWithChildren>(({ children }) => {
28
26
  </AgentModalProvider>
29
27
  </Suspense>
30
28
  }
31
- placement={'bottomLeft'}
29
+ placement="bottomLeft"
32
30
  styles={{
33
- container: {
31
+ content: {
34
32
  padding: 0,
35
33
  width: 240,
36
34
  },
37
35
  }}
38
- trigger={['click']}
36
+ trigger="click"
39
37
  >
40
38
  {children}
41
39
  </Popover>
@@ -1,5 +1,4 @@
1
- import { Input } from '@lobehub/ui';
2
- import { Popover } from 'antd';
1
+ import { Input, Popover } from '@lobehub/ui';
3
2
  import { memo, useCallback, useState } from 'react';
4
3
 
5
4
  import { useChatStore } from '@/store/chat';
@@ -47,7 +46,6 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
47
46
 
48
47
  return (
49
48
  <Popover
50
- arrow={false}
51
49
  content={
52
50
  <Input
53
51
  autoFocus
@@ -64,20 +62,19 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
64
62
  }}
65
63
  />
66
64
  }
67
- destroyOnHidden
68
65
  onOpenChange={(open) => {
69
66
  if (!open) handleUpdate();
70
67
  toggleEditing(open);
71
68
  }}
72
69
  open={editing}
73
- placement={'bottomLeft'}
70
+ placement="bottomLeft"
74
71
  styles={{
75
- container: {
72
+ content: {
76
73
  padding: 4,
77
74
  width: 320,
78
75
  },
79
76
  }}
80
- trigger={['click']}
77
+ trigger="click"
81
78
  >
82
79
  <div />
83
80
  </Popover>
@@ -1,5 +1,4 @@
1
- import { Input } from '@lobehub/ui';
2
- import { Popover } from 'antd';
1
+ import { Input, Popover } from '@lobehub/ui';
3
2
  import { memo, useCallback, useState } from 'react';
4
3
 
5
4
  import { useChatStore } from '@/store/chat';
@@ -26,7 +25,6 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
26
25
 
27
26
  return (
28
27
  <Popover
29
- arrow={false}
30
28
  content={
31
29
  <Input
32
30
  autoFocus
@@ -43,20 +41,19 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
43
41
  }}
44
42
  />
45
43
  }
46
- destroyOnHidden
47
44
  onOpenChange={(open) => {
48
45
  if (!open) handleUpdate();
49
46
  toggleEditing(open);
50
47
  }}
51
48
  open={editing}
52
- placement={'bottomLeft'}
49
+ placement="bottomLeft"
53
50
  styles={{
54
- container: {
51
+ content: {
55
52
  padding: 4,
56
53
  width: 320,
57
54
  },
58
55
  }}
59
- trigger={['click']}
56
+ trigger="click"
60
57
  >
61
58
  <div />
62
59
  </Popover>
@@ -1,5 +1,4 @@
1
- import { Flexbox, Input } from '@lobehub/ui';
2
- import { Popover } from 'antd';
1
+ import { Flexbox, Input, Popover } from '@lobehub/ui';
3
2
  import { memo, useCallback, useState } from 'react';
4
3
 
5
4
  import { useHomeStore } from '@/store/home';
@@ -38,7 +37,6 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
38
37
 
39
38
  return (
40
39
  <Popover
41
- arrow={false}
42
40
  content={
43
41
  <Flexbox gap={4} horizontal onClick={(e) => e.stopPropagation()} style={{ width: 280 }}>
44
42
  <Input
@@ -53,19 +51,18 @@ const Editing = memo<EditingProps>(({ id, title, toggleEditing }) => {
53
51
  />
54
52
  </Flexbox>
55
53
  }
56
- destroyOnHidden
57
54
  onOpenChange={(open) => {
58
55
  if (!open) handleUpdate();
59
56
  toggleEditing(open);
60
57
  }}
61
58
  open={editing}
62
- placement={'bottomLeft'}
59
+ placement="bottomLeft"
63
60
  styles={{
64
- container: {
61
+ content: {
65
62
  padding: 4,
66
63
  },
67
64
  }}
68
- trigger={['click']}
65
+ trigger="click"
69
66
  >
70
67
  <div />
71
68
  </Popover>