@lobehub/chat 1.96.2 → 1.96.4

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 (85) hide show
  1. package/.cursor/rules/debug-usage.mdc +84 -0
  2. package/.cursor/rules/desktop-controller-tests.mdc +188 -0
  3. package/.cursor/rules/desktop-feature-implementation.mdc +1 -1
  4. package/CHANGELOG.md +34 -0
  5. package/README.md +1 -1
  6. package/changelog/v1.json +10 -0
  7. package/package.json +6 -13
  8. package/src/app/[variants]/(auth)/next-auth/signin/AuthSignInBox.tsx +7 -7
  9. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/Mobile/Files/FileItem/File.tsx +2 -3
  10. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatList/ChatItem/Thread.tsx +3 -3
  11. package/src/app/[variants]/(main)/chat/(workspace)/@topic/features/TopicListContent/SearchResult/index.tsx +2 -2
  12. package/src/app/[variants]/(main)/chat/(workspace)/@topic/features/TopicListContent/ThreadItem/Content.tsx +5 -5
  13. package/src/app/[variants]/(main)/chat/(workspace)/@topic/features/TopicListContent/TopicItem/DefaultContent.tsx +3 -6
  14. package/src/app/[variants]/(main)/chat/(workspace)/@topic/features/TopicListContent/TopicItem/TopicContent.tsx +4 -5
  15. package/src/app/[variants]/(main)/chat/@session/features/SessionSearchBar.tsx +11 -5
  16. package/src/app/[variants]/(main)/files/(content)/@menu/features/KnowledgeBase/Item/Content.tsx +4 -6
  17. package/src/app/[variants]/(main)/files/(content)/NotSupportClient.tsx +6 -5
  18. package/src/app/[variants]/(main)/files/[id]/Header.tsx +5 -5
  19. package/src/app/[variants]/(main)/repos/[id]/evals/dataset/DatasetDetail/index.tsx +3 -3
  20. package/src/app/[variants]/(main)/repos/[id]/evals/evaluation/EvaluationList/index.tsx +4 -3
  21. package/src/app/[variants]/(main)/repos/[id]/features/Menu/Head/index.tsx +4 -2
  22. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/CustomModelOption.tsx +5 -5
  23. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelFetcher.tsx +3 -4
  24. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/Option.tsx +3 -4
  25. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +5 -12
  26. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/index.tsx +7 -8
  27. package/src/app/[variants]/(main)/settings/provider/ProviderMenu/List.tsx +5 -6
  28. package/src/app/[variants]/(main)/settings/provider/features/ModelList/DisabledModels.tsx +3 -4
  29. package/src/app/[variants]/(main)/settings/provider/features/ModelList/EnabledModelList/index.tsx +5 -6
  30. package/src/app/[variants]/(main)/settings/provider/features/ModelList/ModelItem.tsx +4 -6
  31. package/src/app/[variants]/(main)/settings/provider/features/ModelList/ModelTitle/index.tsx +6 -6
  32. package/src/app/[variants]/(main)/settings/provider/features/ModelList/SearchResult.tsx +3 -4
  33. package/src/app/[variants]/(main)/settings/sync/features/DeviceInfo/DeviceName.tsx +2 -3
  34. package/src/app/[variants]/(main)/settings/sync/features/DeviceInfo/index.tsx +3 -3
  35. package/src/app/[variants]/(main)/settings/sync/features/WebRTC/index.tsx +4 -4
  36. package/src/app/[variants]/oauth/consent/[uid]/ClientError.tsx +4 -6
  37. package/src/app/[variants]/oauth/consent/[uid]/Consent.tsx +7 -8
  38. package/src/app/[variants]/oauth/consent/[uid]/Login.tsx +4 -6
  39. package/src/app/[variants]/oauth/handoff/Client.tsx +6 -6
  40. package/src/components/InitProgress/index.tsx +3 -3
  41. package/src/components/Loading/CircleLoading/index.tsx +3 -4
  42. package/src/components/ModelSelect/index.tsx +3 -6
  43. package/src/components/StatisticCard/TitleWithPercentage.tsx +4 -7
  44. package/src/components/StatisticCard/index.tsx +6 -7
  45. package/src/config/modelProviders/index.ts +0 -1
  46. package/src/features/AgentSetting/AgentPlugin/index.tsx +4 -3
  47. package/src/features/ChatInput/Desktop/FilePreview/FileItem/index.tsx +3 -4
  48. package/src/features/ChatInput/components/UploadDetail/UploadStatus.tsx +10 -10
  49. package/src/features/ChatInput/components/UploadDetail/index.tsx +3 -3
  50. package/src/features/Conversation/Messages/Assistant/FileChunks/Item/index.tsx +2 -3
  51. package/src/features/Conversation/Messages/User/BelowMessage.tsx +3 -4
  52. package/src/features/Conversation/Messages/User/FileListViewer/Item.tsx +3 -3
  53. package/src/features/Conversation/components/History/index.tsx +2 -3
  54. package/src/features/DataImporter/ImportDetail.tsx +2 -4
  55. package/src/features/ElectronTitlebar/Connection/Waiting.tsx +3 -6
  56. package/src/features/FileManager/FileList/EmptyStatus.tsx +4 -4
  57. package/src/features/FileManager/FileList/index.tsx +3 -3
  58. package/src/features/FileManager/UploadDock/Item.tsx +11 -11
  59. package/src/features/FileManager/UploadDock/index.tsx +3 -4
  60. package/src/features/FileManager/index.tsx +3 -5
  61. package/src/features/InitClientDB/features/DatabaseRepair/Backup.tsx +3 -5
  62. package/src/features/InitClientDB/features/DatabaseRepair/Repair.tsx +2 -4
  63. package/src/features/KnowledgeBaseModal/AssignKnowledgeBase/Item/index.tsx +5 -7
  64. package/src/features/Portal/Artifacts/Header.tsx +4 -4
  65. package/src/features/Portal/FilePreview/Header.tsx +4 -4
  66. package/src/features/Portal/Home/Body/Files/FileList/Item.tsx +3 -3
  67. package/src/features/Portal/Home/Body/Files/FileList/index.tsx +2 -3
  68. package/src/features/Portal/Home/Body/Files/index.tsx +3 -3
  69. package/src/features/Portal/Home/Body/Plugins/ArtifactList/Item/index.tsx +3 -4
  70. package/src/features/Portal/Home/Body/Plugins/ArtifactList/index.tsx +3 -3
  71. package/src/features/Portal/Home/Body/Plugins/index.tsx +3 -3
  72. package/src/features/Portal/Home/Title.tsx +3 -3
  73. package/src/features/Portal/MessageDetail/Header.tsx +3 -3
  74. package/src/features/Portal/Plugins/Header.tsx +5 -6
  75. package/src/features/Portal/Thread/Header/Active.tsx +3 -4
  76. package/src/features/Portal/Thread/Header/New.tsx +4 -4
  77. package/src/features/SyncStatusInspector/EnableSync.tsx +5 -9
  78. package/src/tools/local-system/Render/ReadLocalFile/ReadFileView.tsx +5 -6
  79. package/src/tools/web-browsing/Portal/PageContent/index.tsx +4 -7
  80. package/src/tools/web-browsing/Portal/Search/ResultList/SearchItem/TitleExtra.tsx +3 -4
  81. package/src/tools/web-browsing/Portal/Search/ResultList/SearchItem/Video.tsx +4 -3
  82. package/src/tools/web-browsing/Portal/Search/ResultList/SearchItem/index.tsx +3 -3
  83. package/src/tools/web-browsing/Render/PageContent/Result.tsx +4 -6
  84. package/src/tools/web-browsing/Render/Search/SearchResult/SearchResultItem.tsx +3 -3
  85. package/src/tools/web-browsing/components/SearchBar.tsx +7 -7
@@ -1,4 +1,4 @@
1
- import { Typography } from 'antd';
1
+ import { Text } from '@lobehub/ui';
2
2
  import { createStyles } from 'antd-style';
3
3
  import { memo } from 'react';
4
4
  import { Flexbox } from 'react-layout-kit';
@@ -8,8 +8,6 @@ import { KnowledgeItem } from '@/types/knowledgeBase';
8
8
 
9
9
  import Actions from './Action';
10
10
 
11
- const { Paragraph } = Typography;
12
-
13
11
  const useStyles = createStyles(({ css, token }) => ({
14
12
  desc: css`
15
13
  margin: 0 !important;
@@ -51,14 +49,14 @@ const PluginItem = memo<KnowledgeItem>(({ id, fileType, name, type, description,
51
49
  <KnowledgeIcon fileType={fileType} name={name} size={{ file: 40, repo: 40 }} type={type} />
52
50
  <Flexbox flex={1} gap={4} style={{ overflow: 'hidden', position: 'relative' }}>
53
51
  <Flexbox align={'center'} gap={8} horizontal>
54
- <Paragraph className={styles.title} ellipsis={{ rows: 1 }}>
52
+ <Text className={styles.title} ellipsis>
55
53
  {name}
56
- </Paragraph>
54
+ </Text>
57
55
  </Flexbox>
58
56
  {description && (
59
- <Paragraph className={styles.desc} ellipsis={{ rows: 1 }}>
57
+ <Text className={styles.desc} ellipsis>
60
58
  {description}
61
- </Paragraph>
59
+ </Text>
62
60
  )}
63
61
  </Flexbox>
64
62
  </Flexbox>
@@ -1,5 +1,5 @@
1
- import { ActionIcon, Icon, Segmented } from '@lobehub/ui';
2
- import { ConfigProvider, Typography } from 'antd';
1
+ import { ActionIcon, Icon, Segmented, Text } from '@lobehub/ui';
2
+ import { ConfigProvider } from 'antd';
3
3
  import { cx } from 'antd-style';
4
4
  import { ArrowLeft, CodeIcon, EyeIcon } from 'lucide-react';
5
5
  import { useTranslation } from 'react-i18next';
@@ -34,9 +34,9 @@ const Header = () => {
34
34
  <Flexbox align={'center'} flex={1} gap={12} horizontal justify={'space-between'} width={'100%'}>
35
35
  <Flexbox align={'center'} gap={4} horizontal>
36
36
  <ActionIcon icon={ArrowLeft} onClick={() => closeArtifact()} size={'small'} />
37
- <Typography.Text className={cx(oneLineEllipsis)} type={'secondary'}>
37
+ <Text className={cx(oneLineEllipsis)} type={'secondary'}>
38
38
  {artifactTitle}
39
- </Typography.Text>
39
+ </Text>
40
40
  </Flexbox>
41
41
  <ConfigProvider
42
42
  theme={{
@@ -1,5 +1,5 @@
1
- import { ActionIcon } from '@lobehub/ui';
2
- import { Skeleton, Typography } from 'antd';
1
+ import { ActionIcon, Text } from '@lobehub/ui';
2
+ import { Skeleton } from 'antd';
3
3
  import { ArrowLeft } from 'lucide-react';
4
4
  import { Flexbox } from 'react-layout-kit';
5
5
 
@@ -25,9 +25,9 @@ const Header = () => {
25
25
  {isLoading ? (
26
26
  <Skeleton.Button active style={{ height: 28 }} />
27
27
  ) : (
28
- <Typography.Text className={oneLineEllipsis} style={{ fontSize: 16 }} type={'secondary'}>
28
+ <Text className={oneLineEllipsis} style={{ fontSize: 16 }} type={'secondary'}>
29
29
  {data?.name}
30
- </Typography.Text>
30
+ </Text>
31
31
  )}
32
32
  </Flexbox>
33
33
  );
@@ -1,4 +1,4 @@
1
- import { Typography } from 'antd';
1
+ import { Text } from '@lobehub/ui';
2
2
  import { createStyles } from 'antd-style';
3
3
  import { memo } from 'react';
4
4
  import { Flexbox } from 'react-layout-kit';
@@ -43,8 +43,8 @@ const FileItem = memo<ChatFileItem>(({ name, fileType, size, id }) => {
43
43
  >
44
44
  <FileIcon fileName={name} fileType={fileType} />
45
45
  <Flexbox>
46
- <Typography.Text ellipsis={{ tooltip: true }}>{name}</Typography.Text>
47
- <Typography.Text type={'secondary'}>{formatSize(size)}</Typography.Text>
46
+ <Text ellipsis={{ tooltip: true }}>{name}</Text>
47
+ <Text type={'secondary'}>{formatSize(size)}</Text>
48
48
  </Flexbox>
49
49
  </Flexbox>
50
50
  );
@@ -1,5 +1,4 @@
1
- import { Avatar, Icon } from '@lobehub/ui';
2
- import { Typography } from 'antd';
1
+ import { Avatar, Icon, Text } from '@lobehub/ui';
3
2
  import { useTheme } from 'antd-style';
4
3
  import isEqual from 'fast-deep-equal';
5
4
  import { InboxIcon } from 'lucide-react';
@@ -35,7 +34,7 @@ const FileList = () => {
35
34
  size={48}
36
35
  />
37
36
  <Balancer>
38
- <Typography.Text type={'secondary'}>{t('emptyKnowledgeList')}</Typography.Text>
37
+ <Text type={'secondary'}>{t('emptyKnowledgeList')}</Text>
39
38
  </Balancer>
40
39
  </Center>
41
40
  ) : (
@@ -1,4 +1,4 @@
1
- import { Typography } from 'antd';
1
+ import { Text } from '@lobehub/ui';
2
2
  import { memo } from 'react';
3
3
  import { useTranslation } from 'react-i18next';
4
4
  import { Flexbox } from 'react-layout-kit';
@@ -10,9 +10,9 @@ export const Files = memo(() => {
10
10
 
11
11
  return (
12
12
  <Flexbox gap={8}>
13
- <Typography.Title level={5} style={{ marginInline: 12 }}>
13
+ <Text as={'h5'} style={{ marginInline: 12 }}>
14
14
  {t('files')}
15
- </Typography.Title>
15
+ </Text>
16
16
  <FileList />
17
17
  </Flexbox>
18
18
  );
@@ -1,5 +1,4 @@
1
- import { Icon, Tag } from '@lobehub/ui';
2
- import { Typography } from 'antd';
1
+ import { Icon, Tag, Text } from '@lobehub/ui';
3
2
  import isEqual from 'fast-deep-equal';
4
3
  import { CircuitBoard } from 'lucide-react';
5
4
  import { memo } from 'react';
@@ -53,9 +52,9 @@ const ArtifactItem = memo<ArtifactItemProps>(({ payload, messageId, identifier =
53
52
  <Tag>{payload?.apiName}</Tag>
54
53
  </Flexbox>
55
54
  <div>
56
- <Typography.Text ellipsis style={{ fontSize: 12 }} type={'secondary'}>
55
+ <Text ellipsis style={{ fontSize: 12 }} type={'secondary'}>
57
56
  {args}
58
- </Typography.Text>
57
+ </Text>
59
58
  </div>
60
59
  </Flexbox>
61
60
  </Flexbox>
@@ -1,5 +1,5 @@
1
- import { Avatar, Icon } from '@lobehub/ui';
2
- import { Skeleton, Typography } from 'antd';
1
+ import { Avatar, Icon, Text } from '@lobehub/ui';
2
+ import { Skeleton } from 'antd';
3
3
  import { useTheme } from 'antd-style';
4
4
  import isEqual from 'fast-deep-equal';
5
5
  import { Origami } from 'lucide-react';
@@ -41,7 +41,7 @@ const ArtifactList = () => {
41
41
  size={48}
42
42
  />
43
43
  <Balancer>
44
- <Typography.Text type={'secondary'}>{t('emptyArtifactList')}</Typography.Text>
44
+ <Text type={'secondary'}>{t('emptyArtifactList')}</Text>
45
45
  </Balancer>
46
46
  </Center>
47
47
  ) : (
@@ -1,4 +1,4 @@
1
- import { Typography } from 'antd';
1
+ import { Text } from '@lobehub/ui';
2
2
  import { memo } from 'react';
3
3
  import { useTranslation } from 'react-i18next';
4
4
  import { Flexbox } from 'react-layout-kit';
@@ -10,9 +10,9 @@ export const Artifacts = memo(() => {
10
10
 
11
11
  return (
12
12
  <Flexbox gap={8}>
13
- <Typography.Title level={5} style={{ marginInline: 12 }}>
13
+ <Text as={'h5'} style={{ marginInline: 12 }}>
14
14
  {t('Plugins')}
15
- </Typography.Title>
15
+ </Text>
16
16
  <ArtifactList />
17
17
  </Flexbox>
18
18
  );
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { Typography } from 'antd';
3
+ import { Text } from '@lobehub/ui';
4
4
  import { memo } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
6
6
 
@@ -8,9 +8,9 @@ const Title = memo(() => {
8
8
  const { t } = useTranslation('portal');
9
9
 
10
10
  return (
11
- <Typography.Text style={{ fontSize: 16 }} type={'secondary'}>
11
+ <Text style={{ fontSize: 16 }} type={'secondary'}>
12
12
  {t('title')}
13
- </Typography.Text>
13
+ </Text>
14
14
  );
15
15
  });
16
16
 
@@ -1,4 +1,4 @@
1
- import { Typography } from 'antd';
1
+ import { Text } from '@lobehub/ui';
2
2
  import { useTranslation } from 'react-i18next';
3
3
  import { Flexbox } from 'react-layout-kit';
4
4
 
@@ -9,9 +9,9 @@ const Header = () => {
9
9
 
10
10
  return (
11
11
  <Flexbox align={'center'} gap={4} horizontal>
12
- <Typography.Text className={oneLineEllipsis} style={{ fontSize: 16 }} type={'secondary'}>
12
+ <Text className={oneLineEllipsis} style={{ fontSize: 16 }} type={'secondary'}>
13
13
  {t('messageDetail')}
14
- </Typography.Text>
14
+ </Text>
15
15
  </Flexbox>
16
16
  );
17
17
  };
@@ -1,5 +1,4 @@
1
- import { ActionIcon, Icon } from '@lobehub/ui';
2
- import { Typography } from 'antd';
1
+ import { ActionIcon, Icon, Text } from '@lobehub/ui';
3
2
  import isEqual from 'fast-deep-equal';
4
3
  import { ArrowLeft, Globe } from 'lucide-react';
5
4
  import { useTranslation } from 'react-i18next';
@@ -27,9 +26,9 @@ const Header = () => {
27
26
  <Flexbox align={'center'} gap={8} horizontal>
28
27
  <ActionIcon icon={ArrowLeft} onClick={() => closeToolUI()} size={'small'} />
29
28
  <Icon icon={Globe} size={16} />
30
- <Typography.Text style={{ fontSize: 16 }} type={'secondary'}>
29
+ <Text style={{ fontSize: 16 }} type={'secondary'}>
31
30
  {t('search.title')}
32
- </Typography.Text>
31
+ </Text>
33
32
  </Flexbox>
34
33
  );
35
34
  }
@@ -37,9 +36,9 @@ const Header = () => {
37
36
  <Flexbox align={'center'} gap={4} horizontal>
38
37
  <ActionIcon icon={ArrowLeft} onClick={() => closeToolUI()} size={'small'} />
39
38
  <PluginAvatar identifier={toolUIIdentifier} size={28} />
40
- <Typography.Text style={{ fontSize: 16 }} type={'secondary'}>
39
+ <Text style={{ fontSize: 16 }} type={'secondary'}>
41
40
  {pluginTitle}
42
- </Typography.Text>
41
+ </Text>
43
42
  </Flexbox>
44
43
  );
45
44
  };
@@ -1,5 +1,4 @@
1
- import { Icon } from '@lobehub/ui';
2
- import { Typography } from 'antd';
1
+ import { Icon, Text } from '@lobehub/ui';
3
2
  import { useTheme } from 'antd-style';
4
3
  import isEqual from 'fast-deep-equal';
5
4
  import { ListTree } from 'lucide-react';
@@ -20,7 +19,7 @@ const Active = memo(() => {
20
19
  currentThread && (
21
20
  <Flexbox align={'center'} gap={8} horizontal style={{ marginInlineStart: 4 }}>
22
21
  <Icon color={theme.colorTextSecondary} icon={ListTree} size={18} />
23
- <Typography.Text
22
+ <Text
24
23
  className={oneLineEllipsis}
25
24
  ellipsis={true}
26
25
  style={{ color: theme.colorTextSecondary, fontSize: 14 }}
@@ -32,7 +31,7 @@ const Active = memo(() => {
32
31
  ) : (
33
32
  currentThread?.title
34
33
  )}
35
- </Typography.Text>
34
+ </Text>
36
35
  </Flexbox>
37
36
  )
38
37
  );
@@ -1,5 +1,5 @@
1
- import { Icon } from '@lobehub/ui';
2
- import { Switch, Typography } from 'antd';
1
+ import { Icon, Text } from '@lobehub/ui';
2
+ import { Switch } from 'antd';
3
3
  import { GitBranch } from 'lucide-react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import { Flexbox } from 'react-layout-kit';
@@ -17,9 +17,9 @@ const NewThreadHeader = () => {
17
17
  return (
18
18
  <Flexbox align={'center'} gap={8} horizontal style={{ marginInlineStart: 4 }}>
19
19
  <Icon icon={GitBranch} size={18} />
20
- <Typography.Text className={oneLineEllipsis} ellipsis={true} style={{ fontSize: 14 }}>
20
+ <Text className={oneLineEllipsis} ellipsis style={{ fontSize: 14 }}>
21
21
  {t('newPortalThread.title')}
22
- </Typography.Text>
22
+ </Text>
23
23
  <Flexbox align={'center'} gap={8} horizontal>
24
24
  <Switch
25
25
  checked={newThreadMode === ThreadType.Continuation}
@@ -1,5 +1,5 @@
1
- import { ActionIcon, Avatar, Icon, Tag } from '@lobehub/ui';
2
- import { Divider, Popover, Switch, Typography } from 'antd';
1
+ import { ActionIcon, Avatar, Icon, Tag, Text } from '@lobehub/ui';
2
+ import { Divider, Popover, Switch } from 'antd';
3
3
  import { createStyles } from 'antd-style';
4
4
  import { TooltipPlacement } from 'antd/es/tooltip';
5
5
  import isEqual from 'fast-deep-equal';
@@ -15,8 +15,6 @@ import { pathString } from '@/utils/url';
15
15
 
16
16
  import EnableTag from './EnableTag';
17
17
 
18
- const { Text } = Typography;
19
-
20
18
  const useStyles = createStyles(({ css, token, prefixCls }) => ({
21
19
  text: css`
22
20
  max-width: 100%;
@@ -67,9 +65,7 @@ const EnableSync = memo<EnableSyncProps>(({ hiddenActions, placement = 'bottomLe
67
65
  style={{ paddingInlineEnd: 12 }}
68
66
  >
69
67
  {t('sync.channel')}
70
- <Text className={styles.text} copyable>
71
- {channelName}
72
- </Text>
68
+ <Text className={styles.text}>{channelName}</Text>
73
69
  </Flexbox>
74
70
  </Flexbox>
75
71
  <Divider dashed style={{ margin: 0 }} />
@@ -99,9 +95,9 @@ const EnableSync = memo<EnableSyncProps>(({ hiddenActions, placement = 'bottomLe
99
95
  </Flexbox>
100
96
  )}
101
97
  </Flexbox>
102
- <Typography.Text type={'secondary'}>
98
+ <Text type={'secondary'}>
103
99
  {user.os} · {user.browser}
104
- </Typography.Text>
100
+ </Text>
105
101
  </Flexbox>
106
102
  </Flexbox>
107
103
  ))}
@@ -1,6 +1,5 @@
1
1
  import { LocalReadFileResult } from '@lobechat/electron-client-ipc';
2
- import { ActionIcon, Icon, Markdown } from '@lobehub/ui';
3
- import { Typography } from 'antd';
2
+ import { ActionIcon, Icon, Markdown, Text } from '@lobehub/ui';
4
3
  import { createStyles } from 'antd-style';
5
4
  import { AlignLeft, Asterisk, ChevronDownIcon, ExternalLink, FolderOpen } from 'lucide-react';
6
5
  import React, { memo, useState } from 'react';
@@ -118,9 +117,9 @@ const ReadFileView = memo<ReadFileViewProps>(
118
117
  <Flexbox align={'center'} flex={1} gap={0} horizontal style={{ overflow: 'hidden' }}>
119
118
  <FileIcon fileName={filename} fileType={fileType} size={24} variant={'raw'} />
120
119
  <Flexbox horizontal>
121
- <Typography.Text className={styles.fileName} ellipsis>
120
+ <Text className={styles.fileName} ellipsis>
122
121
  {filename}
123
- </Typography.Text>
122
+ </Text>
124
123
  {/* Actions on Hover */}
125
124
  <Flexbox className={styles.actions} gap={2} horizontal style={{ marginLeft: 8 }}>
126
125
  <ActionIcon
@@ -174,9 +173,9 @@ const ReadFileView = memo<ReadFileViewProps>(
174
173
  </Flexbox>
175
174
 
176
175
  {/* Path */}
177
- <Typography.Text className={styles.path} ellipsis type={'secondary'}>
176
+ <Text className={styles.path} ellipsis type={'secondary'}>
178
177
  {path}
179
- </Typography.Text>
178
+ </Text>
180
179
 
181
180
  {isExpanded && (
182
181
  <Flexbox className={styles.previewBox} style={{ maxHeight: 240, overflow: 'auto' }}>
@@ -1,5 +1,5 @@
1
- import { Alert, CopyButton, Highlighter, Icon, Markdown, Segmented } from '@lobehub/ui';
2
- import { Descriptions, Typography } from 'antd';
1
+ import { Alert, CopyButton, Highlighter, Icon, Markdown, Segmented, Text } from '@lobehub/ui';
2
+ import { Descriptions } from 'antd';
3
3
  import { createStyles } from 'antd-style';
4
4
  import { ExternalLink } from 'lucide-react';
5
5
  import Link from 'next/link';
@@ -148,12 +148,9 @@ const PageContent = memo<PageContentProps>(({ result }) => {
148
148
  </Flexbox>
149
149
  </Flexbox>
150
150
  {description && (
151
- <Typography.Paragraph
152
- className={styles.description}
153
- ellipsis={{ expandable: false, rows: 4 }}
154
- >
151
+ <Text className={styles.description} ellipsis={{ rows: 4 }}>
155
152
  {description}
156
- </Typography.Paragraph>
153
+ </Text>
157
154
  )}
158
155
  <Flexbox align={'center'} className={styles.url} gap={4} horizontal>
159
156
  {result.data.siteName && <div>{result.data.siteName} · </div>}
@@ -1,5 +1,4 @@
1
- import { Tag, Tooltip } from '@lobehub/ui';
2
- import { Typography } from 'antd';
1
+ import { Tag, Text, Tooltip } from '@lobehub/ui';
3
2
  import { memo } from 'react';
4
3
  import { useTranslation } from 'react-i18next';
5
4
  import { Flexbox } from 'react-layout-kit';
@@ -27,12 +26,12 @@ const TitleExtra = memo<TitleExtraProps>(({ category, score, highlight, engines
27
26
  {score.toFixed(1)}
28
27
  </Tag>
29
28
  ) : (
30
- <Typography.Text
29
+ <Text
31
30
  style={{ textAlign: 'center', width: 32, wordBreak: 'keep-all' }}
32
31
  type={'secondary'}
33
32
  >
34
33
  {score.toFixed(1)}
35
- </Typography.Text>
34
+ </Text>
36
35
  )}
37
36
  </Tooltip>
38
37
  <CategoryAvatar category={category || 'general'} />
@@ -1,4 +1,5 @@
1
- import { Avatar as AntAvatar, Typography } from 'antd';
1
+ import { Text } from '@lobehub/ui';
2
+ import { Avatar as AntAvatar } from 'antd';
2
3
  import { createStyles } from 'antd-style';
3
4
  import { memo, useState } from 'react';
4
5
  import { Flexbox } from 'react-layout-kit';
@@ -122,9 +123,9 @@ const VideoItem = memo<SearchResultProps>(
122
123
  score={score}
123
124
  />
124
125
  </Flexbox>
125
- <Typography.Text className={styles.url} type={'secondary'}>
126
+ <Text className={styles.url} type={'secondary'}>
126
127
  {url}
127
- </Typography.Text>
128
+ </Text>
128
129
  <Flexbox className={styles.desc}>{content}</Flexbox>
129
130
  </Flexbox>
130
131
  </Flexbox>
@@ -1,4 +1,4 @@
1
- import { Typography } from 'antd';
1
+ import { Text } from '@lobehub/ui';
2
2
  import { createStyles } from 'antd-style';
3
3
  import { memo } from 'react';
4
4
  import { Flexbox } from 'react-layout-kit';
@@ -78,9 +78,9 @@ const SearchItem = memo<SearchResultProps>((props) => {
78
78
  score={score}
79
79
  />
80
80
  </Flexbox>
81
- <Typography.Text className={styles.url} type={'secondary'}>
81
+ <Text className={styles.url} type={'secondary'}>
82
82
  {url}
83
- </Typography.Text>
83
+ </Text>
84
84
  <Flexbox className={styles.desc}>{content}</Flexbox>
85
85
  </Flexbox>
86
86
  </Flexbox>
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { CrawlErrorResult, CrawlSuccessResult } from '@lobechat/web-crawler';
4
- import { Alert, Highlighter, Icon } from '@lobehub/ui';
5
- import { Descriptions, Typography } from 'antd';
4
+ import { Alert, Highlighter, Icon, Text } from '@lobehub/ui';
5
+ import { Descriptions } from 'antd';
6
6
  import { createStyles } from 'antd-style';
7
7
  import { ExternalLink } from 'lucide-react';
8
8
  import Link from 'next/link';
@@ -13,8 +13,6 @@ import { Center, Flexbox } from 'react-layout-kit';
13
13
  import { useChatStore } from '@/store/chat';
14
14
  import { WebBrowsingManifest } from '@/tools/web-browsing';
15
15
 
16
- const { Paragraph } = Typography;
17
-
18
16
  const useStyles = createStyles(({ token, css }) => {
19
17
  return {
20
18
  cardBody: css`
@@ -146,9 +144,9 @@ const CrawlerResultCard = memo<CrawlerData>(({ result, messageId, crawler, origi
146
144
  </Center>
147
145
  </Link>
148
146
  </Flexbox>
149
- <Paragraph className={styles.description} ellipsis={{ expandable: false, rows: 2 }}>
147
+ <Text className={styles.description} ellipsis={{ rows: 2 }}>
150
148
  {description || result.content?.slice(0, 40)}
151
- </Paragraph>
149
+ </Text>
152
150
  </Flexbox>
153
151
  <div className={styles.footer}>
154
152
  <Descriptions
@@ -1,4 +1,4 @@
1
- import { Typography } from 'antd';
1
+ import { Text } from '@lobehub/ui';
2
2
  import { createStyles } from 'antd-style';
3
3
  import Link from 'next/link';
4
4
  import { memo } from 'react';
@@ -54,9 +54,9 @@ const SearchResultItem = memo<UniformSearchResult>(({ url, title }) => {
54
54
  <div className={styles.title}>{title}</div>
55
55
  <Flexbox align={'center'} gap={4} horizontal>
56
56
  <WebFavicon size={14} title={title} url={url} />
57
- <Typography.Text className={styles.url} type={'secondary'}>
57
+ <Text className={styles.url} type={'secondary'}>
58
58
  {host.replace('www.', '')}
59
- </Typography.Text>
59
+ </Text>
60
60
  </Flexbox>
61
61
  </Flexbox>
62
62
  </Link>
@@ -1,5 +1,5 @@
1
- import { Button, Input, Select, Tooltip } from '@lobehub/ui';
2
- import { Checkbox, Radio, Space, Typography } from 'antd';
1
+ import { Button, Input, Select, Text, Tooltip } from '@lobehub/ui';
2
+ import { Checkbox, Radio, Space } from 'antd';
3
3
  import { SearchIcon } from 'lucide-react';
4
4
  import { ReactNode, memo, useState } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
@@ -115,9 +115,9 @@ const SearchBar = memo<SearchBarProps>(
115
115
  />
116
116
  ) : (
117
117
  <Flexbox align={'flex-start'} gap={8} horizontal>
118
- <Typography.Text style={{ marginTop: 2, wordBreak: 'keep-all' }} type={'secondary'}>
118
+ <Text style={{ marginTop: 2, wordBreak: 'keep-all' }} type={'secondary'}>
119
119
  {t('search.searchEngine.title')}
120
- </Typography.Text>
120
+ </Text>
121
121
  <Checkbox.Group
122
122
  onChange={(checkedValue) => {
123
123
  setEngines(checkedValue);
@@ -164,9 +164,9 @@ const SearchBar = memo<SearchBarProps>(
164
164
  />
165
165
  ) : (
166
166
  <Flexbox align="flex-start" gap={8} horizontal>
167
- <Typography.Text style={{ marginTop: 2, wordBreak: 'keep-all' }} type={'secondary'}>
167
+ <Text style={{ marginTop: 2, wordBreak: 'keep-all' }} type={'secondary'}>
168
168
  {t('search.searchCategory.title')}
169
- </Typography.Text>
169
+ </Text>
170
170
  <Checkbox.Group
171
171
  onChange={(checkedValue) => setCategories(checkedValue)}
172
172
  options={Object.keys(CATEGORY_ICON_MAP).map((item) => ({
@@ -184,7 +184,7 @@ const SearchBar = memo<SearchBarProps>(
184
184
  )}
185
185
 
186
186
  <Flexbox align={'center'} gap={16} horizontal wrap={'wrap'}>
187
- <Typography.Text type={'secondary'}>{t('search.searchTimeRange.title')}</Typography.Text>
187
+ <Text type={'secondary'}>{t('search.searchTimeRange.title')}</Text>
188
188
  <Radio.Group
189
189
  onChange={(e) => setTimeRange(e.target.value)}
190
190
  optionType="button"