@lobehub/chat 0.151.11 → 0.152.1

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 (57) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +8 -8
  3. package/README.zh-CN.md +2 -2
  4. package/package.json +1 -1
  5. package/src/app/(main)/market/{_layout/Desktop/AgentDetail.tsx → @detail/_layout/Desktop.tsx} +16 -11
  6. package/src/app/(main)/market/{(mobile)/features/AgentDetail.tsx → @detail/_layout/Mobile.tsx} +8 -6
  7. package/src/app/(main)/market/@detail/default.tsx +21 -0
  8. package/src/app/(main)/market/{features/AgentDetailContent/AgentInfo → @detail/features/AgentDetailContent}/Header.tsx +30 -21
  9. package/src/app/(main)/market/{features/AgentDetailContent/AgentInfo → @detail/features/AgentDetailContent}/index.tsx +10 -4
  10. package/src/app/(main)/market/{features/AgentDetailContent/AgentInfo → @detail/features/AgentDetailContent}/style.ts +7 -11
  11. package/src/app/(main)/market/_layout/Desktop/Header.tsx +3 -6
  12. package/src/app/(main)/market/_layout/Desktop/Hero.tsx +39 -0
  13. package/src/app/(main)/market/_layout/Desktop/index.tsx +23 -44
  14. package/src/app/(main)/market/_layout/Mobile/Header.tsx +2 -2
  15. package/src/app/(main)/market/_layout/Mobile/index.tsx +15 -9
  16. package/src/app/(main)/market/_layout/type.ts +6 -0
  17. package/src/app/(main)/market/features/AgentCard/AgentCardBanner.tsx +10 -9
  18. package/src/app/(main)/market/features/AgentCard/index.tsx +133 -58
  19. package/src/app/(main)/market/features/AgentList.tsx +94 -0
  20. package/src/app/(main)/market/features/AgentSearchBar.tsx +42 -0
  21. package/src/app/(main)/market/features/ShareAgentButton/Inner.tsx +9 -7
  22. package/src/app/(main)/market/features/ShareAgentButton/index.tsx +22 -15
  23. package/src/app/(main)/market/features/TagList.tsx +65 -0
  24. package/src/app/(main)/market/layout.tsx +11 -0
  25. package/src/app/(main)/market/loading.tsx +2 -2
  26. package/src/app/(main)/market/page.tsx +22 -12
  27. package/src/const/url.ts +1 -0
  28. package/src/features/ChatInput/STT/browser.tsx +1 -1
  29. package/src/features/ChatInput/STT/openai.tsx +1 -1
  30. package/src/features/Conversation/components/InboxWelcome/AgentsSuggest.tsx +2 -2
  31. package/src/hooks/useImportConfig.ts +20 -1
  32. package/src/layout/GlobalProvider/StoreInitialization.tsx +10 -1
  33. package/src/locales/resources.ts +1 -0
  34. package/src/server/translation.ts +20 -0
  35. package/src/services/__tests__/chat.test.ts +1 -1
  36. package/src/services/__tests__/share.test.ts +50 -5
  37. package/src/services/share.ts +29 -2
  38. package/src/store/chat/slices/share/action.test.ts +9 -11
  39. package/src/store/chat/slices/share/action.ts +2 -2
  40. package/src/store/market/action.ts +1 -1
  41. package/src/store/session/slices/session/action.ts +1 -1
  42. package/src/utils/difference.ts +2 -1
  43. package/src/app/(main)/market/(desktop)/index.tsx +0 -20
  44. package/src/app/(main)/market/(mobile)/features/AgentCard.tsx +0 -31
  45. package/src/app/(main)/market/(mobile)/index.tsx +0 -25
  46. package/src/app/(main)/market/components/Loading.tsx +0 -13
  47. package/src/app/(main)/market/features/AgentCard/AgentCardItem.tsx +0 -54
  48. package/src/app/(main)/market/features/AgentCard/style.ts +0 -33
  49. package/src/app/(main)/market/features/AgentDetailContent/index.tsx +0 -12
  50. package/src/app/(main)/market/features/AgentSearchBar/index.tsx +0 -40
  51. package/src/app/(main)/market/features/PageTitle/index.tsx +0 -13
  52. package/src/app/(main)/market/features/TagList/Inner.tsx +0 -28
  53. package/src/app/(main)/market/features/TagList/index.tsx +0 -23
  54. package/src/app/(main)/market/layout.ts +0 -8
  55. /package/src/app/(main)/market/{features/AgentDetailContent/AgentInfo → @detail/features/AgentDetailContent}/Comment.tsx +0 -0
  56. /package/src/app/(main)/market/{features/AgentDetailContent/AgentInfo → @detail/features/AgentDetailContent}/Loading.tsx +0 -0
  57. /package/src/app/(main)/market/{features/AgentDetailContent/AgentInfo → @detail/features/AgentDetailContent}/TokenTag.tsx +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,56 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ### [Version 0.152.1](https://github.com/lobehub/lobe-chat/compare/v0.152.0...v0.152.1)
6
+
7
+ <sup>Released on **2024-05-01**</sup>
8
+
9
+ #### ♻ Code Refactoring
10
+
11
+ - **misc**: Refactor Market Layout.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### Code refactoring
19
+
20
+ - **misc**: Refactor Market Layout, closes [#2320](https://github.com/lobehub/lobe-chat/issues/2320) ([c05c3c1](https://github.com/lobehub/lobe-chat/commit/c05c3c1))
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 0.152.0](https://github.com/lobehub/lobe-chat/compare/v0.151.11...v0.152.0)
31
+
32
+ <sup>Released on **2024-04-30**</sup>
33
+
34
+ #### ✨ Features
35
+
36
+ - **misc**: Import settings from url.
37
+
38
+ <br/>
39
+
40
+ <details>
41
+ <summary><kbd>Improvements and Fixes</kbd></summary>
42
+
43
+ #### What's improved
44
+
45
+ - **misc**: Import settings from url, closes [#2226](https://github.com/lobehub/lobe-chat/issues/2226) ([b1f6c20](https://github.com/lobehub/lobe-chat/commit/b1f6c20))
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 0.151.11](https://github.com/lobehub/lobe-chat/compare/v0.151.10...v0.151.11)
6
56
 
7
57
  <sup>Released on **2024-04-30**</sup>
package/README.md CHANGED
@@ -261,14 +261,14 @@ Our marketplace is not just a showcase platform but also a collaborative space.
261
261
 
262
262
  <!-- AGENT LIST -->
263
263
 
264
- | Recent Submits | Description |
265
- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
266
- | [Jailbreak Assistant DAN](https://chat-preview.lobehub.com/market?agent=gpt-4-dan-assistant)<br/><sup>By **[MapleEve](https://github.com/MapleEve)** on **2024-04-26**</sup> | Bypass OpenAI review mechanism, ChatGPT after jailbreak<br/>`creative` `artificial-intelligence` `conversation` `jailbreak` |
267
- | [TailwindHelper](https://chat-preview.lobehub.com/market?agent=tailwind-helper)<br/><sup>By **[aototo](https://github.com/aototo)** on **2024-04-26**</sup> | TailwindHelper is a professional frontend designer with a solid foundation in design theory and rich practical experience. Created by a leading software development company, it aims to help developers and designers accelerate the development process of web interfaces. TailwindHelper is proficient in the Tailwind CSS framework and can translate complex design requirements into efficient and responsive CSS class names.<br/>`tailwindcss` `css` `tailwind-helper` |
268
- | [yapi JSON-SCHEMA to Typescript](https://chat-preview.lobehub.com/market?agent=yapi-ts-helper)<br/><sup>By **[zcf0508](https://github.com/zcf0508)** on **2024-04-26**</sup> | Specializes in converting JSON schema to TypeScript types.<br/>`typescript` `development` |
269
- | [Chinese Academic Paper Editor](https://chat-preview.lobehub.com/market?agent=chinese-paper-polishing)<br/><sup>By **[y22emc2](https://github.com/y22emc2)** on **2024-04-15**</sup> | As an assistant for improving Chinese academic paper writing, your task is to enhance the provided text in terms of spelling, grammar, clarity, conciseness, and overall readability, to improve the text's academic standards and literary quality. This includes breaking down long sentences, reducing repetition, and providing improvement suggestions. Please provide the corrected version of the text first, then list the modifications in the markdown table below, along with the reasons for the changes.<br/>`academic-paper-writing` `proofreading` `text-editing` |
270
-
271
- > 📊 Total agents: [<kbd>**243**</kbd> ](https://github.com/lobehub/lobe-chat-agents)
264
+ | Recent Submits | Description |
265
+ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
266
+ | [Sales Description Specialist](https://chat-preview.lobehub.com/market?agent=verkauf-kleinanzeigen)<br/><sup>By **[highseen](https://github.com/highseen)** on **2024-04-30**</sup> | Assists in the sale of used items through research, pricing, description, and title creation.<br/>`product-sales` `research` `description` |
267
+ | [Jailbreak Assistant DAN](https://chat-preview.lobehub.com/market?agent=gpt-4-dan-assistant)<br/><sup>By **[MapleEve](https://github.com/MapleEve)** on **2024-04-26**</sup> | Bypass OpenAI review mechanism, ChatGPT after jailbreak<br/>`creative` `artificial-intelligence` `conversation` `jailbreak` |
268
+ | [TailwindHelper](https://chat-preview.lobehub.com/market?agent=tailwind-helper)<br/><sup>By **[aototo](https://github.com/aototo)** on **2024-04-26**</sup> | TailwindHelper is a professional frontend designer with a solid foundation in design theory and rich practical experience. Created by a leading software development company, it aims to help developers and designers accelerate the development process of web interfaces. TailwindHelper is proficient in the Tailwind CSS framework and can translate complex design requirements into efficient and responsive CSS class names.<br/>`tailwindcss` `css` `tailwind-helper` |
269
+ | [yapi JSON-SCHEMA to Typescript](https://chat-preview.lobehub.com/market?agent=yapi-ts-helper)<br/><sup>By **[zcf0508](https://github.com/zcf0508)** on **2024-04-26**</sup> | Specializes in converting JSON schema to TypeScript types.<br/>`typescript` `development` |
270
+
271
+ > 📊 Total agents: [<kbd>**244**</kbd> ](https://github.com/lobehub/lobe-chat-agents)
272
272
 
273
273
  <!-- AGENT LIST -->
274
274
 
package/README.zh-CN.md CHANGED
@@ -251,12 +251,12 @@ LobeChat 的插件生态系统是其核心功能的重要扩展,它极大地
251
251
 
252
252
  | 最近新增 | 助手说明 |
253
253
  | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
254
+ | [销售描述专家](https://chat-preview.lobehub.com/market?agent=verkauf-kleinanzeigen)<br/><sup>By **[highseen](https://github.com/highseen)** on **2024-04-30**</sup> | 通过研究、定价、描述和标题设计帮助销售二手物品。<br/>`产品销售` `研究` `描述` |
254
255
  | [越狱助手 DAN](https://chat-preview.lobehub.com/market?agent=gpt-4-dan-assistant)<br/><sup>By **[MapleEve](https://github.com/MapleEve)** on **2024-04-26**</sup> | 突破 OpenAI 审核机制,越狱之后的 ChatGPT<br/>`创意` `人工智能` `对话` `越狱` |
255
256
  | [TailwindHelper](https://chat-preview.lobehub.com/market?agent=tailwind-helper)<br/><sup>By **[aototo](https://github.com/aototo)** on **2024-04-26**</sup> | TailwindHelper 是一位专业的前端设计师,拥有深厚的设计理论基础和丰富的实践经验。它由一家领先的软件开发公司创建,旨在帮助开发者和设计师加速 Web 界面的开发过程。TailwindHelper 精通 Tailwind CSS 框架,并能够理解复杂的设计要求,转化为高效且响应式的 CSS 类名。<br/>`tailwindcss` `css` `tailwind-helper` |
256
257
  | [yapi JSON-SCHEMA to Typescript](https://chat-preview.lobehub.com/market?agent=yapi-ts-helper)<br/><sup>By **[zcf0508](https://github.com/zcf0508)** on **2024-04-26**</sup> | 擅长将 JSON schema 转换为 TypeScript 类型。<br/>`typescript` `开发` |
257
- | [中文论文编辑师](https://chat-preview.lobehub.com/market?agent=chinese-paper-polishing)<br/><sup>By **[y22emc2](https://github.com/y22emc2)** on **2024-04-15**</sup> | 作为一名中文学术论文写作改进助理,你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性,提高文本的学术规范性、文学性,同时分解长句,减少重复,并提供改进建议。请先提供文本的更正版本,然后在 markdown 表格中列出修改的内容,并给出修改的理由。<br/>`学术论文写作` `校对` `文本编辑` |
258
258
 
259
- > 📊 Total agents: [<kbd>**243**</kbd> ](https://github.com/lobehub/lobe-chat-agents)
259
+ > 📊 Total agents: [<kbd>**244**</kbd> ](https://github.com/lobehub/lobe-chat-agents)
260
260
 
261
261
  <!-- AGENT LIST -->
262
262
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "0.151.11",
3
+ "version": "0.152.1",
4
4
  "description": "Lobe Chat - an open-source, high-performance chatbot 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",
@@ -1,13 +1,14 @@
1
+ 'use client';
2
+
1
3
  import { DraggablePanel, DraggablePanelBody, DraggablePanelContainer } from '@lobehub/ui';
2
- import { createStyles } from 'antd-style';
3
- import { memo, useCallback, useState } from 'react';
4
+ import { createStyles, useResponsive } from 'antd-style';
5
+ import { PropsWithChildren, memo, useCallback, useState } from 'react';
6
+ import { Flexbox } from 'react-layout-kit';
4
7
 
5
8
  import SafeSpacing from '@/components/SafeSpacing';
6
9
  import { MARKET_SIDEBAR_WIDTH } from '@/const/layoutTokens';
7
10
  import { agentMarketSelectors, useMarketStore } from '@/store/market';
8
11
 
9
- import AgentDetailContent from '../../features/AgentDetailContent';
10
-
11
12
  const useStyles = createStyles(({ css, token, stylish }) => ({
12
13
  content: css`
13
14
  display: flex;
@@ -15,7 +16,7 @@ const useStyles = createStyles(({ css, token, stylish }) => ({
15
16
  height: 100% !important;
16
17
  `,
17
18
  drawer: css`
18
- background: ${token.colorBgLayout};
19
+ background: ${token.colorBgContainer};
19
20
  `,
20
21
  header: css`
21
22
  border-bottom: 1px solid ${token.colorBorder};
@@ -23,8 +24,9 @@ const useStyles = createStyles(({ css, token, stylish }) => ({
23
24
  noScrollbar: stylish.noScrollbar,
24
25
  }));
25
26
 
26
- const SideBar = memo(() => {
27
+ const SideBar = memo<PropsWithChildren>(({ children }) => {
27
28
  const { styles } = useStyles();
29
+ const { md = true } = useResponsive();
28
30
  const [tempId, setTempId] = useState<string>('');
29
31
  const [showAgentSidebar, deactivateAgent, activateAgent] = useMarketStore((s) => [
30
32
  agentMarketSelectors.showSideBar(s),
@@ -44,6 +46,8 @@ const SideBar = memo(() => {
44
46
  [deactivateAgent, activateAgent, tempId],
45
47
  );
46
48
 
49
+ const minWidth = md ? MARKET_SIDEBAR_WIDTH : 350;
50
+
47
51
  return (
48
52
  <DraggablePanel
49
53
  className={styles.drawer}
@@ -51,8 +55,9 @@ const SideBar = memo(() => {
51
55
  content: styles.content,
52
56
  }}
53
57
  expand={showAgentSidebar}
54
- minWidth={MARKET_SIDEBAR_WIDTH}
55
- mode={'fixed'}
58
+ maxWidth={'80vw' as any}
59
+ minWidth={minWidth}
60
+ mode={md ? 'fixed' : 'float'}
56
61
  onExpandChange={handleExpandChange}
57
62
  placement={'right'}
58
63
  showHandlerWideArea={false}
@@ -61,15 +66,15 @@ const SideBar = memo(() => {
61
66
  style={{
62
67
  flex: 'none',
63
68
  height: '100%',
64
- minWidth: MARKET_SIDEBAR_WIDTH,
69
+ minWidth: minWidth,
65
70
  }}
66
71
  >
67
- <SafeSpacing />
72
+ {md && <SafeSpacing />}
68
73
  <DraggablePanelBody
69
74
  className={styles.noScrollbar}
70
75
  style={{ padding: 0, position: 'relative' }}
71
76
  >
72
- <AgentDetailContent />
77
+ <Flexbox>{children}</Flexbox>
73
78
  </DraggablePanelBody>
74
79
  </DraggablePanelContainer>
75
80
  </DraggablePanel>
@@ -1,12 +1,12 @@
1
+ 'use client';
2
+
1
3
  import { Modal } from '@lobehub/ui';
2
- import { memo } from 'react';
4
+ import { PropsWithChildren, memo } from 'react';
3
5
  import { useTranslation } from 'react-i18next';
4
6
 
5
7
  import { agentMarketSelectors, useMarketStore } from '@/store/market';
6
8
 
7
- import AgentDetailContent from '../../features/AgentDetailContent';
8
-
9
- const AgentDetail = memo(() => {
9
+ const AgentDetail = memo<PropsWithChildren>(({ children }) => {
10
10
  const [showAgentSidebar, deactivateAgent] = useMarketStore((s) => [
11
11
  agentMarketSelectors.showSideBar(s),
12
12
  s.deactivateAgent,
@@ -17,12 +17,14 @@ const AgentDetail = memo(() => {
17
17
  return (
18
18
  <Modal
19
19
  allowFullscreen
20
- onCancel={deactivateAgent}
20
+ onCancel={() => {
21
+ deactivateAgent();
22
+ }}
21
23
  open={showAgentSidebar}
22
24
  styles={{ body: { padding: 0 } }}
23
25
  title={t('sidebar.title')}
24
26
  >
25
- <AgentDetailContent />
27
+ {children}
26
28
  </Modal>
27
29
  );
28
30
  });
@@ -0,0 +1,21 @@
1
+ import ServerLayout from '@/components/server/ServerLayout';
2
+ import { isMobileDevice } from '@/utils/responsive';
3
+
4
+ import Desktop from './_layout/Desktop';
5
+ import Mobile from './_layout/Mobile';
6
+ import AgentDetailContent from './features/AgentDetailContent';
7
+
8
+ const Layout = ServerLayout({ Desktop, Mobile });
9
+
10
+ const Detail = () => {
11
+ const mobile = isMobileDevice();
12
+ return (
13
+ <Layout>
14
+ <AgentDetailContent mobile={mobile} />
15
+ </Layout>
16
+ );
17
+ };
18
+
19
+ Detail.displayName = 'AgentDetail';
20
+
21
+ export default Detail;
@@ -1,10 +1,11 @@
1
1
  import { Avatar, Tag } from '@lobehub/ui';
2
2
  import { App, Button, Typography } from 'antd';
3
+ import isEqual from 'fast-deep-equal';
3
4
  import { startCase } from 'lodash-es';
4
5
  import { useRouter } from 'next/navigation';
5
6
  import { memo } from 'react';
6
7
  import { useTranslation } from 'react-i18next';
7
- import { Center } from 'react-layout-kit';
8
+ import { Center, Flexbox } from 'react-layout-kit';
8
9
 
9
10
  import { SESSION_CHAT_URL } from '@/const/url';
10
11
  import { useIsMobile } from '@/hooks/useIsMobile';
@@ -15,12 +16,14 @@ import { useStyles } from './style';
15
16
 
16
17
  const { Link } = Typography;
17
18
 
18
- const Header = memo(() => {
19
+ const Header = memo<{ mobile?: boolean }>(({ mobile }) => {
20
+ const setSearchKeywords = useMarketStore((s) => s.setSearchKeywords);
19
21
  const router = useRouter();
20
22
  const { t } = useTranslation('market');
21
23
  const { styles, theme } = useStyles();
22
24
  const createSession = useSessionStore((s) => s.createSession);
23
- const agentItem = useMarketStore(agentMarketSelectors.currentAgentItem);
25
+ const agentItem = useMarketStore(agentMarketSelectors.currentAgentItem, isEqual);
26
+
24
27
  const { message } = App.useApp();
25
28
 
26
29
  const { meta, createAt, author, homepage, config } = agentItem;
@@ -38,43 +41,49 @@ const Header = memo(() => {
38
41
 
39
42
  const handleAddAgent = () => {
40
43
  if (!agentItem) return;
41
-
42
44
  createSession({ config, meta }, false);
43
45
  message.success(t('addAgentSuccess'));
44
46
  };
45
47
 
46
48
  return (
47
49
  <Center className={styles.container} gap={16}>
48
- <Avatar
49
- animation
50
- avatar={avatar}
51
- background={backgroundColor || theme.colorFillTertiary}
52
- className={styles.avatar}
53
- size={100}
54
- />
55
- <div className={styles.title}>{title}</div>
50
+ <Center
51
+ flex={'none'}
52
+ height={120}
53
+ style={{
54
+ backgroundColor:
55
+ backgroundColor || mobile ? theme.colorBgElevated : theme.colorBgContainer,
56
+ borderRadius: '50%',
57
+ overflow: 'hidden',
58
+ zIndex: 2,
59
+ }}
60
+ width={120}
61
+ >
62
+ <Avatar animation avatar={avatar} size={100} />
63
+ </Center>
64
+ <h2 className={styles.title}>{title}</h2>
56
65
  <Center gap={6} horizontal style={{ flexWrap: 'wrap' }}>
57
66
  {(tags as string[]).map((tag: string, index) => (
58
- <Tag
59
- key={index}
60
- onClick={() => useMarketStore.setState({ searchKeywords: tag })}
61
- style={{ margin: 0 }}
62
- >
67
+ <Tag key={index} onClick={() => setSearchKeywords(tag)} style={{ margin: 0 }}>
63
68
  {startCase(tag).trim()}
64
69
  </Tag>
65
70
  ))}
66
71
  </Center>
67
72
  <div className={styles.desc}>{description}</div>
68
- <Link aria-label={author} className={styles.author} href={homepage} target={'_blank'}>
69
- @{author}
70
- </Link>
71
73
  <Button block onClick={handleAddAgentAndConverse} type={'primary'}>
72
74
  {t('addAgentAndConverse')}
73
75
  </Button>
74
76
  <Button block onClick={handleAddAgent}>
75
77
  {t('addAgent')}
76
78
  </Button>
77
- <div className={styles.date}>{createAt}</div>
79
+ <Flexbox align={'center'} gap={12} horizontal>
80
+ <Link aria-label={author} className={styles.author} href={homepage} target={'_blank'}>
81
+ @{author}
82
+ </Link>
83
+ <time className={styles.time} dateTime={new Date(createAt).toISOString()}>
84
+ {createAt}
85
+ </time>
86
+ </Flexbox>
78
87
  </Center>
79
88
  );
80
89
  });
@@ -1,11 +1,13 @@
1
+ 'use client';
2
+
1
3
  import { Markdown, TabsNav } from '@lobehub/ui';
2
4
  import { memo, useState } from 'react';
3
5
  import { useTranslation } from 'react-i18next';
4
6
  import { Flexbox } from 'react-layout-kit';
5
7
 
8
+ import AgentCardBanner from '@/app/(main)/market/features/AgentCard/AgentCardBanner';
6
9
  import { useMarketStore } from '@/store/market';
7
10
 
8
- import AgentCardBanner from '../../../features/AgentCard/AgentCardBanner';
9
11
  import Comment from './Comment';
10
12
  import Header from './Header';
11
13
  import Loading from './Loading';
@@ -17,7 +19,7 @@ enum InfoTabs {
17
19
  prompt = 'prompt',
18
20
  }
19
21
 
20
- const AgentModalInner = memo(() => {
22
+ const AgentModalInner = memo<{ mobile?: boolean }>(({ mobile }) => {
21
23
  const [useFetchAgent, currentIdentifier] = useMarketStore((s) => [
22
24
  s.useFetchAgent,
23
25
  s.currentIdentifier,
@@ -34,8 +36,12 @@ const AgentModalInner = memo(() => {
34
36
 
35
37
  return (
36
38
  <>
37
- <AgentCardBanner meta={meta} size={400} style={{ height: 120, marginBottom: -60 }} />
38
- <Header />
39
+ <AgentCardBanner
40
+ avatar={meta?.avatar}
41
+ size={800}
42
+ style={{ height: 120, marginBottom: -60 }}
43
+ />
44
+ <Header mobile={mobile} />
39
45
  <Flexbox align={'center'}>
40
46
  <TabsNav
41
47
  activeKey={tab}
@@ -4,21 +4,13 @@ export const useStyles = createStyles(({ css, token, prefixCls }) => ({
4
4
  author: css`
5
5
  font-size: 12px;
6
6
  `,
7
-
8
- avatar: css`
9
- flex: none;
10
- `,
11
7
  container: css`
12
8
  position: relative;
13
9
  padding: 16px 16px 24px;
14
10
  border-bottom: 1px solid ${token.colorBorderSecondary};
15
11
  `,
16
- date: css`
17
- font-size: 12px;
18
- color: ${token.colorTextDescription};
19
- `,
20
12
  desc: css`
21
- color: ${token.colorTextDescription};
13
+ color: ${token.colorTextSecondary};
22
14
  text-align: center;
23
15
  `,
24
16
  loading: css`
@@ -30,9 +22,13 @@ export const useStyles = createStyles(({ css, token, prefixCls }) => ({
30
22
  nav: css`
31
23
  padding-top: 8px;
32
24
  `,
25
+ time: css`
26
+ font-size: 12px;
27
+ color: ${token.colorTextDescription};
28
+ `,
33
29
  title: css`
34
- font-size: 20px;
35
- font-weight: 600;
30
+ margin-bottom: 0;
31
+ font-weight: bold;
36
32
  text-align: center;
37
33
  `,
38
34
  }));
@@ -1,6 +1,7 @@
1
+ 'use client';
2
+
1
3
  import { ChatHeader, Logo } from '@lobehub/ui';
2
4
  import { createStyles } from 'antd-style';
3
- import Link from 'next/link';
4
5
  import { memo } from 'react';
5
6
 
6
7
  import ShareAgentButton from '../../features/ShareAgentButton';
@@ -17,11 +18,7 @@ const Header = memo(() => {
17
18
 
18
19
  return (
19
20
  <ChatHeader
20
- left={
21
- <Link aria-label={'home'} href={'/'}>
22
- <Logo className={styles.logo} extra={'Discover'} size={36} type={'text'} />
23
- </Link>
24
- }
21
+ left={<Logo className={styles.logo} extra={'Discover'} size={36} type={'text'} />}
25
22
  right={<ShareAgentButton />}
26
23
  />
27
24
  );
@@ -0,0 +1,39 @@
1
+ 'use client';
2
+
3
+ import { GridBackground } from '@lobehub/ui';
4
+ import { createStyles } from 'antd-style';
5
+ import { memo } from 'react';
6
+ import { Center } from 'react-layout-kit';
7
+
8
+ const useStyles = createStyles(({ css, responsive }) => ({
9
+ background: css`
10
+ width: 80%;
11
+ margin: -60px 0 -20px;
12
+
13
+ ${responsive.md} {
14
+ display: none;
15
+ }
16
+ `,
17
+ title: css`
18
+ z-index: 2;
19
+
20
+ margin-top: 24px;
21
+
22
+ font-size: min(56px, 5vw);
23
+ font-weight: 800;
24
+ line-height: 1.2;
25
+ text-align: center;
26
+ `,
27
+ }));
28
+
29
+ const Hero = memo(() => {
30
+ const { theme, styles } = useStyles();
31
+ return (
32
+ <Center>
33
+ <h1 className={styles.title}>Find & Use The Best Agents</h1>
34
+ <GridBackground animation className={styles.background} colorFront={theme.colorText} random />
35
+ </Center>
36
+ );
37
+ });
38
+
39
+ export default Hero;
@@ -1,61 +1,40 @@
1
- 'use client';
2
-
3
- import { GridBackground } from '@lobehub/ui';
4
- import { createStyles } from 'antd-style';
5
- import dynamic from 'next/dynamic';
6
- import { PropsWithChildren, memo } from 'react';
7
- import { Center, Flexbox } from 'react-layout-kit';
1
+ import { Flexbox } from 'react-layout-kit';
8
2
 
9
3
  import SafeSpacing from '@/components/SafeSpacing';
10
- import ClientResponsiveLayout from '@/components/client/ClientResponsiveLayout';
11
4
  import { MAX_WIDTH } from '@/const/layoutTokens';
12
5
 
13
- import AgentSearchBar from '../../features/AgentSearchBar';
6
+ import { LayoutProps } from '../type';
14
7
  import Header from './Header';
8
+ import Hero from './Hero';
15
9
 
16
- const SideBar = dynamic(() => import('./AgentDetail'));
17
-
18
- const useStyles = createStyles(({ css }) => ({
19
- background: css`
20
- width: 80%;
21
- margin: -60px 0 -20px;
22
- `,
23
- title: css`
24
- z-index: 2;
25
- margin-top: 24px;
26
- font-size: 56px;
27
- font-weight: 800;
28
- `,
29
- }));
30
-
31
- const Desktop = memo<PropsWithChildren>(({ children }) => {
32
- const { theme, styles } = useStyles();
33
-
10
+ const Layout = ({ children, detail }: LayoutProps) => {
34
11
  return (
35
- <Flexbox flex={1} height={'100%'} id={'lobe-market-container'} style={{ position: 'relative' }}>
12
+ <Flexbox
13
+ height={'100%'}
14
+ id={'lobe-market-container'}
15
+ style={{ position: 'relative' }}
16
+ width={'100%'}
17
+ >
36
18
  <Header />
37
- <Flexbox flex={1} height={'calc(100% - 64px)'} horizontal>
38
- <Flexbox align={'center'} flex={1} style={{ overflowY: 'scroll', padding: 16 }}>
19
+ <Flexbox height={'100%'} horizontal style={{ position: 'relative' }} width={'100%'}>
20
+ <Flexbox
21
+ align={'center'}
22
+ flex={1}
23
+ padding={16}
24
+ style={{ overflowX: 'hidden', overflowY: 'scroll', position: 'relative' }}
25
+ >
39
26
  <SafeSpacing />
40
-
41
27
  <Flexbox gap={16} style={{ maxWidth: MAX_WIDTH, position: 'relative', width: '100%' }}>
42
- <Center>
43
- <h1 className={styles.title}>Find & Use The Best Agents</h1>
44
- <GridBackground
45
- animation
46
- className={styles.background}
47
- colorFront={theme.colorText}
48
- random
49
- />
50
- </Center>
51
- <AgentSearchBar />
28
+ <Hero />
52
29
  {children}
53
30
  </Flexbox>
54
31
  </Flexbox>
55
- <SideBar />
32
+ {detail}
56
33
  </Flexbox>
57
34
  </Flexbox>
58
35
  );
59
- });
36
+ };
37
+
38
+ Layout.displayName = 'DesktopMarketLayout';
60
39
 
61
- export default ClientResponsiveLayout({ Desktop, Mobile: () => import('../Mobile') });
40
+ export default Layout;
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { Logo, MobileNavBar } from '@lobehub/ui';
3
+ import { MobileNavBar } from '@lobehub/ui';
4
4
  import { memo } from 'react';
5
5
 
6
6
  import { mobileHeaderSticky } from '@/styles/mobileHeader';
@@ -10,7 +10,7 @@ import ShareAgentButton from '../../features/ShareAgentButton';
10
10
  const Header = memo(() => {
11
11
  return (
12
12
  <MobileNavBar
13
- center={<Logo type={'text'} />}
13
+ center={<div style={{ fontSize: 20, fontWeight: 900 }}>Discover</div>}
14
14
  right={<ShareAgentButton mobile />}
15
15
  style={mobileHeaderSticky}
16
16
  />
@@ -1,17 +1,23 @@
1
- import { PropsWithChildren } from 'react';
2
-
3
1
  import MobileContentLayout from '@/components/server/MobileNavLayout';
4
2
 
5
- import AgentSearchBar from '../../features/AgentSearchBar';
3
+ import { LayoutProps } from '../type';
6
4
  import Header from './Header';
7
5
 
8
- const MobileLayout = ({ children }: PropsWithChildren) => {
6
+ const Layout = ({ children, detail }: LayoutProps) => {
9
7
  return (
10
- <MobileContentLayout gap={16} header={<Header />} style={{ paddingInline: 16 }} withNav>
11
- <AgentSearchBar mobile />
12
- {children}
13
- </MobileContentLayout>
8
+ <>
9
+ <MobileContentLayout
10
+ gap={16}
11
+ header={<Header />}
12
+ style={{ paddingInline: 16, paddingTop: 8 }}
13
+ >
14
+ {children}
15
+ </MobileContentLayout>
16
+ {detail}
17
+ </>
14
18
  );
15
19
  };
16
20
 
17
- export default MobileLayout;
21
+ Layout.displayName = 'MobileMarketLayout';
22
+
23
+ export default Layout;
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export interface LayoutProps {
4
+ children: ReactNode;
5
+ detail: ReactNode;
6
+ }