@lobehub/chat 0.83.8 → 0.83.10

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 (146) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/package.json +2 -2
  3. package/src/app/chat/(desktop)/features/{ChatHeader/Desktop.tsx → ChatHeader.tsx} +2 -2
  4. package/src/app/chat/(desktop)/features/{ChatInput/Desktop.tsx → ChatInput.tsx} +5 -7
  5. package/src/app/chat/(desktop)/features/{SessionHeader/Desktop.tsx → SessionHeader.tsx} +1 -1
  6. package/src/app/chat/(desktop)/features/{SessionList/Desktop.tsx → SessionList.tsx} +5 -4
  7. package/src/app/chat/(desktop)/features/{SideBar/Desktop.tsx → SideBar.tsx} +5 -4
  8. package/src/app/chat/(desktop)/index.tsx +14 -8
  9. package/src/app/chat/(desktop)/{layout/Desktop.tsx → layout.desktop.tsx} +7 -8
  10. package/src/app/chat/(desktop)/layout.responsive.tsx +12 -0
  11. package/src/app/chat/(mobile)/features/ChatHeader.tsx +54 -1
  12. package/src/app/chat/(mobile)/features/ChatInput.tsx +28 -8
  13. package/src/app/chat/(mobile)/features/SessionList.tsx +13 -8
  14. package/src/app/chat/{components/Inspector/Mobile.tsx → (mobile)/features/TopicList.tsx} +6 -4
  15. package/src/app/chat/(mobile)/index.tsx +3 -5
  16. package/src/app/chat/(mobile)/layout.mobile.tsx +17 -0
  17. package/src/app/chat/(mobile)/mobile/index.tsx +19 -0
  18. package/src/app/chat/(mobile)/mobile/layout.mobile.tsx +11 -0
  19. package/src/app/chat/(mobile)/mobile/page.tsx +2 -20
  20. package/src/app/chat/{components → features}/ChatHeader/ShareButton/Preview.tsx +25 -9
  21. package/src/app/chat/{components → features}/ChatHeader/ShareButton/style.ts +7 -7
  22. package/src/app/chat/{components/ChatInput → features/ChatInputContent}/index.tsx +3 -1
  23. package/src/app/chat/{components/SessionList → features/SessionListContent}/Inbox/index.tsx +7 -5
  24. package/src/app/chat/{components/SessionList → features/SessionListContent}/index.tsx +3 -1
  25. package/src/app/chat/{components/Inspector → features/TopicListContent}/index.tsx +3 -1
  26. package/src/app/chat/page.tsx +3 -1
  27. package/src/app/chat/settings/(desktop)/index.tsx +14 -0
  28. package/src/app/chat/settings/(desktop)/layout.desktop.tsx +10 -15
  29. package/src/app/chat/settings/(desktop)/layout.responsive.tsx +12 -0
  30. package/src/app/chat/settings/(mobile)/index.tsx +14 -0
  31. package/src/app/chat/settings/(mobile)/layout.mobile.tsx +4 -8
  32. package/src/app/chat/settings/features/EditPage.tsx +38 -0
  33. package/src/app/chat/settings/page.tsx +9 -33
  34. package/src/app/market/{features/SideBar/Desktop.tsx → (desktop)/features/AgentDetail.tsx} +5 -3
  35. package/src/app/market/(desktop)/index.tsx +12 -0
  36. package/src/app/market/{layout.desktop/Desktop.tsx → (desktop)/layout.desktop.tsx} +5 -5
  37. package/src/app/market/(desktop)/layout.responsive.tsx +16 -0
  38. package/src/app/market/{features/SideBar/Mobile.tsx → (mobile)/features/AgentDetail.tsx} +6 -4
  39. package/src/app/market/(mobile)/index.tsx +12 -0
  40. package/src/app/market/{layout.mobile.tsx → (mobile)/layout.mobile.tsx} +5 -5
  41. package/src/app/market/features/{SideBar → AgentDetailContent}/AgentInfo/Header.tsx +1 -0
  42. package/src/app/market/features/{SideBar → AgentDetailContent}/AgentInfo/index.tsx +1 -1
  43. package/src/app/market/features/AgentDetailContent/index.tsx +12 -0
  44. package/src/app/market/features/TagList/index.tsx +2 -1
  45. package/src/app/market/page.tsx +8 -5
  46. package/src/app/settings/{features/Header/Desktop.tsx → (desktop)/features/Header.tsx} +2 -2
  47. package/src/app/settings/(desktop)/index.tsx +17 -0
  48. package/src/app/settings/{layout.desktop/Desktop.tsx → (desktop)/layout.desktop.tsx} +10 -9
  49. package/src/app/settings/(desktop)/layout.responsive.tsx +14 -0
  50. package/src/app/settings/{mobile → (mobile)/features}/ExtraList.tsx +1 -1
  51. package/src/app/settings/(mobile)/features/Header/Home.tsx +8 -0
  52. package/src/app/settings/{features/Header/Mobile.tsx → (mobile)/features/Header/index.tsx} +1 -0
  53. package/src/app/settings/(mobile)/index.tsx +3 -0
  54. package/src/app/settings/(mobile)/layout.mobile.tsx +19 -0
  55. package/src/app/settings/{mobile → (mobile)/mobile}/index.tsx +7 -7
  56. package/src/app/settings/(mobile)/mobile/layout.mobile.tsx +14 -0
  57. package/src/app/settings/agent/Agent.tsx +30 -0
  58. package/src/app/settings/agent/index.tsx +23 -0
  59. package/src/app/settings/agent/layout.tsx +1 -0
  60. package/src/app/settings/agent/page.tsx +2 -31
  61. package/src/app/settings/common/index.tsx +23 -0
  62. package/src/app/settings/common/layout.tsx +1 -0
  63. package/src/app/settings/common/page.tsx +2 -14
  64. package/src/app/settings/layout.server.tsx +12 -0
  65. package/src/app/settings/llm/index.tsx +23 -0
  66. package/src/app/settings/llm/layout.tsx +1 -0
  67. package/src/app/settings/llm/page.tsx +2 -14
  68. package/src/app/settings/page.tsx +14 -1
  69. package/src/app/welcome/(desktop)/features/Showcase.tsx +23 -0
  70. package/src/app/welcome/(desktop)/index.tsx +19 -0
  71. package/src/app/welcome/{DesktopLayout/Desktop.tsx → (desktop)/layout.desktop.tsx} +4 -4
  72. package/src/app/welcome/(desktop)/layout.responsive.tsx +14 -0
  73. package/src/app/welcome/(mobile)/features/Header.tsx +6 -0
  74. package/src/app/welcome/(mobile)/features/Showcase.tsx +16 -0
  75. package/src/app/welcome/(mobile)/index.tsx +10 -0
  76. package/src/app/welcome/(mobile)/layout.mobile.tsx +20 -0
  77. package/src/app/welcome/features/Banner/Hero.tsx +2 -3
  78. package/src/app/welcome/features/Banner/index.tsx +34 -31
  79. package/src/app/welcome/features/Banner/style.ts +10 -1
  80. package/src/app/welcome/page.tsx +9 -7
  81. package/src/components/ResponsiveIndex.tsx +17 -0
  82. package/src/features/MobileTabBar/index.tsx +1 -1
  83. package/src/features/SideBar/BottomActions.tsx +1 -1
  84. package/src/layout/{AppLayout.tsx → AppLayout.desktop.tsx} +2 -2
  85. package/src/layout/{AppMobileLayout.tsx → AppLayout.mobile.tsx} +2 -2
  86. package/src/layout/GlobalLayout/StoreHydration.tsx +15 -1
  87. package/src/layout/ResponsiveLayout.client.tsx +18 -0
  88. package/src/{components/ResponsiveLayout.tsx → layout/ResponsiveLayout.server.tsx} +5 -4
  89. package/src/store/session/slices/session/initialState.ts +2 -2
  90. package/src/app/chat/(desktop)/features/ChatHeader/index.tsx +0 -14
  91. package/src/app/chat/(desktop)/features/ChatInput/index.tsx +0 -22
  92. package/src/app/chat/(desktop)/features/SessionHeader/index.tsx +0 -14
  93. package/src/app/chat/(desktop)/features/SessionList/index.tsx +0 -20
  94. package/src/app/chat/(desktop)/features/SideBar/index.tsx +0 -20
  95. package/src/app/chat/(desktop)/layout/index.tsx +0 -25
  96. package/src/app/chat/(mobile)/features/Topics.tsx +0 -12
  97. package/src/app/chat/(mobile)/layout.tsx +0 -15
  98. package/src/app/chat/components/ChatHeader/Mobile.tsx +0 -54
  99. package/src/app/chat/components/ChatInput/Mobile.tsx +0 -35
  100. package/src/app/chat/components/SessionList/Mobile.tsx +0 -16
  101. package/src/app/chat/layout.tsx +0 -15
  102. package/src/app/chat/settings/layout.tsx +0 -14
  103. package/src/app/market/features/Header/index.tsx +0 -13
  104. package/src/app/market/features/SideBar/index.tsx +0 -23
  105. package/src/app/market/layout.desktop/index.tsx +0 -17
  106. package/src/app/market/layout.tsx +0 -13
  107. package/src/app/settings/features/Header/index.tsx +0 -14
  108. package/src/app/settings/layout.desktop/index.tsx +0 -32
  109. package/src/app/settings/layout.mobile.tsx +0 -16
  110. package/src/app/settings/layout.tsx +0 -15
  111. package/src/app/settings/mobile/page.tsx +0 -7
  112. package/src/app/welcome/DesktopLayout/index.tsx +0 -15
  113. package/src/app/welcome/MobileLayout.tsx +0 -23
  114. package/src/app/welcome/layout.tsx +0 -22
  115. /package/src/app/chat/{components → features}/ChatHeader/PluginTag/PluginStatus.tsx +0 -0
  116. /package/src/app/chat/{components → features}/ChatHeader/PluginTag/index.tsx +0 -0
  117. /package/src/app/chat/{components → features}/ChatHeader/ShareButton/Inner.tsx +0 -0
  118. /package/src/app/chat/{components → features}/ChatHeader/ShareButton/index.tsx +0 -0
  119. /package/src/app/chat/{components/ChatInput → features/ChatInputContent}/ActionBar/ActionLeft.tsx +0 -0
  120. /package/src/app/chat/{components/ChatInput → features/ChatInputContent}/ActionBar/ActionRight.tsx +0 -0
  121. /package/src/app/chat/{components/ChatInput → features/ChatInputContent}/ActionBar/Token.tsx +0 -0
  122. /package/src/app/chat/{components/ChatInput → features/ChatInputContent}/Footer/SaveTopic.tsx +0 -0
  123. /package/src/app/chat/{components/ChatInput → features/ChatInputContent}/Footer/index.tsx +0 -0
  124. /package/src/app/chat/features/{PageTitle.tsx → PageTitle/index.tsx} +0 -0
  125. /package/src/app/chat/{components/SessionList → features/SessionListContent}/CollapseGroup/index.tsx +0 -0
  126. /package/src/app/chat/{components/SessionList → features/SessionListContent}/List/AddButton.tsx +0 -0
  127. /package/src/app/chat/{components/SessionList → features/SessionListContent}/List/Item/Actions.tsx +0 -0
  128. /package/src/app/chat/{components/SessionList → features/SessionListContent}/List/Item/index.tsx +0 -0
  129. /package/src/app/chat/{components/SessionList → features/SessionListContent}/List/SkeletonList.tsx +0 -0
  130. /package/src/app/chat/{components/SessionList → features/SessionListContent}/List/index.tsx +0 -0
  131. /package/src/app/chat/{components/Inspector → features/TopicListContent}/SystemRole/Header.tsx +0 -0
  132. /package/src/app/chat/{components/Inspector → features/TopicListContent}/SystemRole/index.tsx +0 -0
  133. /package/src/app/chat/{components/Inspector → features/TopicListContent}/SystemRole/style.ts +0 -0
  134. /package/src/app/chat/{components/Inspector → features/TopicListContent}/Topic/DefaultContent.tsx +0 -0
  135. /package/src/app/chat/{components/Inspector → features/TopicListContent}/Topic/SkeletonList.tsx +0 -0
  136. /package/src/app/chat/{components/Inspector → features/TopicListContent}/Topic/TopicContent.tsx +0 -0
  137. /package/src/app/chat/{components/Inspector → features/TopicListContent}/Topic/TopicItem.tsx +0 -0
  138. /package/src/app/chat/{components/Inspector → features/TopicListContent}/Topic/index.tsx +0 -0
  139. /package/src/app/chat/{components/Inspector → features/TopicListContent}/TopicSearchBar/index.tsx +0 -0
  140. /package/src/app/market/{features/Header/Desktop.tsx → (desktop)/features/Header.tsx} +0 -0
  141. /package/src/app/market/{features/Header/Mobile.tsx → (mobile)/features/Header.tsx} +0 -0
  142. /package/src/app/market/features/{SideBar → AgentDetailContent}/AgentInfo/Comment.tsx +0 -0
  143. /package/src/app/market/features/{SideBar → AgentDetailContent}/AgentInfo/Loading.tsx +0 -0
  144. /package/src/app/market/features/{SideBar → AgentDetailContent}/AgentInfo/TokenTag.tsx +0 -0
  145. /package/src/app/market/features/{SideBar → AgentDetailContent}/AgentInfo/style.ts +0 -0
  146. /package/src/app/welcome/{features/Footer/index.tsx → (desktop)/features/Footer.tsx} +0 -0
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+
3
+ import { PropsWithChildren, memo } from 'react';
4
+ import { Flexbox } from 'react-layout-kit';
5
+
6
+ import AppLayoutMobile from '@/layout/AppLayout.mobile';
7
+ import { useSwitchSideBarOnInit } from '@/store/global';
8
+ import { SidebarTabKey } from '@/store/global/initialState';
9
+
10
+ import Header from './features/Header';
11
+
12
+ export default memo(({ children }: PropsWithChildren) => {
13
+ useSwitchSideBarOnInit(SidebarTabKey.Setting);
14
+ return (
15
+ <AppLayoutMobile navBar={<Header />}>
16
+ <Flexbox style={{ overflow: 'auto' }}>{children}</Flexbox>
17
+ </AppLayoutMobile>
18
+ );
19
+ });
@@ -7,15 +7,14 @@ import { Center } from 'react-layout-kit';
7
7
 
8
8
  import pkg from '@/../package.json';
9
9
  import AgentCardBanner from '@/app/market/features/AgentCard/AgentCardBanner';
10
- import Header from '@/app/market/features/Header';
11
10
  import AvatarWithUpload from '@/features/AvatarWithUpload';
12
- import AppMobileLayout from '@/layout/AppMobileLayout';
13
11
  import { useGlobalStore, useSwitchSideBarOnInit } from '@/store/global';
14
12
  import { SidebarTabKey } from '@/store/global/initialState';
15
13
  import { AVATAR } from '@/store/session/slices/chat/actions/share';
16
14
 
17
- import List from '../features/SideBar/List';
18
- import ExtraList from './ExtraList';
15
+ import List from '../../features/SideBar/List';
16
+ import ExtraList from '../features/ExtraList';
17
+ import Layout from './layout.mobile';
19
18
 
20
19
  const useStyles = createStyles(({ css, token }) => ({
21
20
  divider: css`
@@ -29,11 +28,12 @@ const useStyles = createStyles(({ css, token }) => ({
29
28
  }));
30
29
 
31
30
  const Setting = memo(() => {
31
+ useSwitchSideBarOnInit(SidebarTabKey.Setting);
32
32
  const avatar = useGlobalStore((s) => s.settings.avatar);
33
33
  const { styles } = useStyles();
34
- useSwitchSideBarOnInit(SidebarTabKey.Setting);
34
+
35
35
  return (
36
- <AppMobileLayout navBar={<Header />} showTabBar>
36
+ <Layout>
37
37
  <AgentCardBanner
38
38
  mask
39
39
  meta={{ avatar: avatar || AVATAR }}
@@ -54,7 +54,7 @@ const Setting = memo(() => {
54
54
  </Divider>
55
55
  </Center>
56
56
  </div>
57
- </AppMobileLayout>
57
+ </Layout>
58
58
  );
59
59
  });
60
60
 
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+
3
+ import { PropsWithChildren, memo } from 'react';
4
+ import { Flexbox } from 'react-layout-kit';
5
+
6
+ import AppLayoutMobile from '@/layout/AppLayout.mobile';
7
+
8
+ import Header from '../features/Header/Home';
9
+
10
+ export default memo(({ children }: PropsWithChildren) => (
11
+ <AppLayoutMobile navBar={<Header />} showTabBar>
12
+ <Flexbox style={{ overflow: 'auto' }}>{children}</Flexbox>
13
+ </AppLayoutMobile>
14
+ ));
@@ -0,0 +1,30 @@
1
+ import isEqual from 'fast-deep-equal';
2
+ import { memo } from 'react';
3
+
4
+ import AgentSetting from '@/features/AgentSetting';
5
+ import { settingsSelectors, useGlobalStore } from '@/store/global';
6
+ import { useSwitchSideBarOnInit } from '@/store/global/hooks/useSwitchSettingsOnInit';
7
+ import { SettingsTabs } from '@/store/global/initialState';
8
+
9
+ const Agent = memo(() => {
10
+ useSwitchSideBarOnInit(SettingsTabs.Agent);
11
+
12
+ const config = useGlobalStore(settingsSelectors.defaultAgentConfig, isEqual);
13
+ const meta = useGlobalStore(settingsSelectors.defaultAgentMeta, isEqual);
14
+ const [updateAgent] = useGlobalStore((s) => [s.updateDefaultAgent]);
15
+
16
+ return (
17
+ <AgentSetting
18
+ config={config}
19
+ meta={meta}
20
+ onConfigChange={(config) => {
21
+ updateAgent({ config });
22
+ }}
23
+ onMetaChange={(meta) => {
24
+ updateAgent({ meta });
25
+ }}
26
+ />
27
+ );
28
+ });
29
+
30
+ export default Agent;
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+
3
+ import { memo } from 'react';
4
+ import { useTranslation } from 'react-i18next';
5
+
6
+ import PageTitle from '@/components/PageTitle';
7
+ import { useSwitchSideBarOnInit } from '@/store/global/hooks/useSwitchSettingsOnInit';
8
+ import { SettingsTabs } from '@/store/global/initialState';
9
+ import { genSiteHeadTitle } from '@/utils/genSiteHeadTitle';
10
+
11
+ import Agent from './Agent';
12
+
13
+ export default memo(() => {
14
+ useSwitchSideBarOnInit(SettingsTabs.Agent);
15
+ const { t } = useTranslation('setting');
16
+ const pageTitle = genSiteHeadTitle(t('tab.agent'));
17
+ return (
18
+ <>
19
+ <PageTitle title={pageTitle} />
20
+ <Agent />
21
+ </>
22
+ );
23
+ });
@@ -0,0 +1 @@
1
+ export { default } from '../layout.server';
@@ -1,32 +1,3 @@
1
- 'use client';
1
+ import Index from './index';
2
2
 
3
- import isEqual from 'fast-deep-equal';
4
- import { memo } from 'react';
5
-
6
- import AgentSetting from '@/features/AgentSetting';
7
- import { settingsSelectors, useGlobalStore } from '@/store/global';
8
- import { useSwitchSideBarOnInit } from '@/store/global/hooks/useSwitchSettingsOnInit';
9
- import { SettingsTabs } from '@/store/global/initialState';
10
-
11
- const Agent = memo(() => {
12
- useSwitchSideBarOnInit(SettingsTabs.Agent);
13
-
14
- const config = useGlobalStore(settingsSelectors.defaultAgentConfig, isEqual);
15
- const meta = useGlobalStore(settingsSelectors.defaultAgentMeta, isEqual);
16
- const [updateAgent] = useGlobalStore((s) => [s.updateDefaultAgent]);
17
-
18
- return (
19
- <AgentSetting
20
- config={config}
21
- meta={meta}
22
- onConfigChange={(config) => {
23
- updateAgent({ config });
24
- }}
25
- onMetaChange={(meta) => {
26
- updateAgent({ meta });
27
- }}
28
- />
29
- );
30
- });
31
-
32
- export default Agent;
3
+ export default () => <Index />;
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+
3
+ import { memo } from 'react';
4
+ import { useTranslation } from 'react-i18next';
5
+
6
+ import PageTitle from '@/components/PageTitle';
7
+ import { useSwitchSideBarOnInit } from '@/store/global/hooks/useSwitchSettingsOnInit';
8
+ import { SettingsTabs } from '@/store/global/initialState';
9
+ import { genSiteHeadTitle } from '@/utils/genSiteHeadTitle';
10
+
11
+ import Common from './Common';
12
+
13
+ export default memo(() => {
14
+ useSwitchSideBarOnInit(SettingsTabs.Common);
15
+ const { t } = useTranslation('setting');
16
+ const pageTitle = genSiteHeadTitle(t('tab.common'));
17
+ return (
18
+ <>
19
+ <PageTitle title={pageTitle} />
20
+ <Common />
21
+ </>
22
+ );
23
+ });
@@ -0,0 +1 @@
1
+ export { default } from '../layout.server';
@@ -1,15 +1,3 @@
1
- 'use client';
1
+ import Index from './index';
2
2
 
3
- import { memo } from 'react';
4
-
5
- import { useSwitchSideBarOnInit } from '@/store/global/hooks/useSwitchSettingsOnInit';
6
- import { SettingsTabs } from '@/store/global/initialState';
7
-
8
- import Common from './Common';
9
-
10
- const CommonSetting = memo(() => {
11
- useSwitchSideBarOnInit(SettingsTabs.Common);
12
- return <Common />;
13
- });
14
-
15
- export default CommonSetting;
3
+ export default () => <Index />;
@@ -0,0 +1,12 @@
1
+ import { PropsWithChildren, memo } from 'react';
2
+
3
+ import ResponsiveLayout from '@/layout/ResponsiveLayout.server';
4
+
5
+ import DesktopLayout from './(desktop)/layout.responsive';
6
+ import MobileLayout from './(mobile)/layout.mobile';
7
+
8
+ export default memo(({ children }: PropsWithChildren) => (
9
+ <ResponsiveLayout Desktop={DesktopLayout} Mobile={MobileLayout}>
10
+ {children}
11
+ </ResponsiveLayout>
12
+ ));
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+
3
+ import { memo } from 'react';
4
+ import { useTranslation } from 'react-i18next';
5
+
6
+ import PageTitle from '@/components/PageTitle';
7
+ import { useSwitchSideBarOnInit } from '@/store/global/hooks/useSwitchSettingsOnInit';
8
+ import { SettingsTabs } from '@/store/global/initialState';
9
+ import { genSiteHeadTitle } from '@/utils/genSiteHeadTitle';
10
+
11
+ import LLM from './LLM';
12
+
13
+ export default memo(() => {
14
+ useSwitchSideBarOnInit(SettingsTabs.LLM);
15
+ const { t } = useTranslation('setting');
16
+ const pageTitle = genSiteHeadTitle(t('tab.llm'));
17
+ return (
18
+ <>
19
+ <PageTitle title={pageTitle} />
20
+ <LLM />
21
+ </>
22
+ );
23
+ });
@@ -0,0 +1 @@
1
+ export { default } from '../layout.server';
@@ -1,15 +1,3 @@
1
- 'use client';
1
+ import Index from './index';
2
2
 
3
- import { memo } from 'react';
4
-
5
- import { useSwitchSideBarOnInit } from '@/store/global/hooks/useSwitchSettingsOnInit';
6
- import { SettingsTabs } from '@/store/global/initialState';
7
-
8
- import LLM from './LLM';
9
-
10
- const LLMSetting = memo(() => {
11
- useSwitchSideBarOnInit(SettingsTabs.LLM);
12
- return <LLM />;
13
- });
14
-
15
- export default LLMSetting;
3
+ export default () => <Index />;
@@ -1 +1,14 @@
1
- export { default } from './common/page';
1
+ import { isMobileDevice } from '@/utils/responsive';
2
+
3
+ import DesktopPage from './(desktop)';
4
+ import MobilePage from './(mobile)';
5
+
6
+ const Page = () => {
7
+ const mobile = isMobileDevice();
8
+
9
+ const Page = mobile ? MobilePage : DesktopPage;
10
+
11
+ return <Page />;
12
+ };
13
+
14
+ export default Page;
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+
3
+ import { GridShowcase } from '@lobehub/ui';
4
+ import { memo } from 'react';
5
+ import { Flexbox } from 'react-layout-kit';
6
+
7
+ import Banner from '@/app/welcome/features/Banner';
8
+
9
+ const Showcase = memo(() => (
10
+ <Flexbox
11
+ flex={1}
12
+ justify={'center'}
13
+ style={{ height: '100vh', position: 'relative', width: '100%' }}
14
+ >
15
+ <GridShowcase>
16
+ <Banner />
17
+ </GridShowcase>
18
+ {/*TODO:暂时隐藏,待模板完成后再补回*/}
19
+ {/*<AgentTemplate width={width} />*/}
20
+ </Flexbox>
21
+ ));
22
+
23
+ export default Showcase;
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+
3
+ import { memo } from 'react';
4
+
5
+ import ResponsiveIndex from '@/components/ResponsiveIndex';
6
+
7
+ import Mobile from '../(mobile)';
8
+ import Footer from './features/Footer';
9
+ import Showcase from './features/Showcase';
10
+ import Layout from './layout.responsive';
11
+
12
+ export default memo(() => (
13
+ <ResponsiveIndex Mobile={Mobile}>
14
+ <Layout>
15
+ <Showcase />
16
+ <Footer />
17
+ </Layout>
18
+ </ResponsiveIndex>
19
+ ));
@@ -3,14 +3,14 @@ import Link from 'next/link';
3
3
  import { PropsWithChildren, memo } from 'react';
4
4
  import { Center, Flexbox } from 'react-layout-kit';
5
5
 
6
- import AppLayout from '@/layout/AppLayout';
6
+ import AppLayoutDesktop from '@/layout/AppLayout.desktop';
7
7
 
8
8
  import { useStyles } from '../features/Banner/style';
9
9
 
10
10
  const Desktop = memo<PropsWithChildren>(({ children }) => {
11
11
  const { styles } = useStyles();
12
12
  return (
13
- <AppLayout>
13
+ <AppLayoutDesktop>
14
14
  <Center
15
15
  className={styles.layout}
16
16
  flex={1}
@@ -21,11 +21,11 @@ const Desktop = memo<PropsWithChildren>(({ children }) => {
21
21
  <Link href={'/'}>
22
22
  <Logo className={styles.logo} size={36} type={'text'} />
23
23
  </Link>
24
- <Flexbox className={styles.view} flex={1} style={{ maxWidth: 1024 }}>
24
+ <Flexbox className={styles.view} flex={1}>
25
25
  {children}
26
26
  </Flexbox>
27
27
  </Center>
28
- </AppLayout>
28
+ </AppLayoutDesktop>
29
29
  );
30
30
  });
31
31
 
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+
3
+ import { PropsWithChildren, memo } from 'react';
4
+
5
+ import ResponsiveLayout from '@/layout/ResponsiveLayout.client';
6
+
7
+ import MobileLayout from '../(mobile)/layout.mobile';
8
+ import DesktopLayout from './layout.desktop';
9
+
10
+ export default memo(({ children }: PropsWithChildren) => (
11
+ <ResponsiveLayout Desktop={DesktopLayout} Mobile={MobileLayout}>
12
+ {children}
13
+ </ResponsiveLayout>
14
+ ));
@@ -0,0 +1,6 @@
1
+ import { Logo, MobileNavBar } from '@lobehub/ui';
2
+ import { memo } from 'react';
3
+
4
+ const Header = memo(() => <MobileNavBar center={<Logo type={'text'} />} />);
5
+
6
+ export default Header;
@@ -0,0 +1,16 @@
1
+ import { memo } from 'react';
2
+ import { Center, Flexbox } from 'react-layout-kit';
3
+
4
+ import Banner from '@/app/welcome/features/Banner';
5
+
6
+ const Showcase = memo(() => (
7
+ <Flexbox align={'center'} justify={'center'} style={{ height: 'calc(100vh - 44px)' }}>
8
+ <Center gap={16}>
9
+ <Banner mobile />
10
+ </Center>
11
+ {/*TODO:暂时隐藏,待模板完成后再补回*/}
12
+ {/*<AgentTemplate width={width} />*/}
13
+ </Flexbox>
14
+ ));
15
+
16
+ export default Showcase;
@@ -0,0 +1,10 @@
1
+ import { memo } from 'react';
2
+
3
+ import Showcase from './features/Showcase';
4
+ import Layout from './layout.mobile';
5
+
6
+ export default memo(() => (
7
+ <Layout>
8
+ <Showcase />
9
+ </Layout>
10
+ ));
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+
3
+ import { useTheme } from 'antd-style';
4
+ import { PropsWithChildren, memo } from 'react';
5
+
6
+ import AppLayoutMobile from '@/layout/AppLayout.mobile';
7
+
8
+ import Header from './features/Header';
9
+
10
+ const MobileLayout = memo<PropsWithChildren>(({ children }) => {
11
+ const theme = useTheme();
12
+
13
+ return (
14
+ <AppLayoutMobile navBar={<Header />} showTabBar style={{ background: theme.colorBgLayout }}>
15
+ <div style={{ paddingInline: 16 }}>{children}</div>
16
+ </AppLayoutMobile>
17
+ );
18
+ });
19
+
20
+ export default MobileLayout;
@@ -1,11 +1,10 @@
1
1
  import { LogoThree } from '@lobehub/ui';
2
- import { useResponsive } from 'antd-style';
3
2
  import { memo, useMemo } from 'react';
4
3
  import { useTranslation } from 'react-i18next';
5
4
 
6
5
  import { genSize, useStyles } from './style';
7
6
 
8
- const Hero = memo<{ width: number }>(({ width }) => {
7
+ const Hero = memo<{ mobile?: boolean; width: number }>(({ width, mobile }) => {
9
8
  const size = useMemo(
10
9
  () => ({
11
10
  base: genSize(width / 3.5, 240),
@@ -16,7 +15,7 @@ const Hero = memo<{ width: number }>(({ width }) => {
16
15
  [width],
17
16
  );
18
17
  const { styles } = useStyles(size.base);
19
- const { mobile } = useResponsive();
18
+
20
19
  const { t } = useTranslation('welcome');
21
20
 
22
21
  return (
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { GridShowcase, Icon } from '@lobehub/ui';
3
+ import { Icon } from '@lobehub/ui';
4
4
  import { useSize } from 'ahooks';
5
5
  import { Button, Upload } from 'antd';
6
6
  import { SendHorizonal } from 'lucide-react';
@@ -16,13 +16,12 @@ import { useSessionStore } from '@/store/session';
16
16
  import Hero from './Hero';
17
17
  import { useStyles } from './style';
18
18
 
19
- const Banner = memo<{ mobile?: boolean }>(() => {
19
+ const Banner = memo<{ mobile?: boolean }>(({ mobile }) => {
20
20
  const { importConfig } = useImportConfig();
21
21
  const ref = useRef(null);
22
22
  const domSize = useSize(ref);
23
23
  const width = domSize?.width || 1024;
24
24
  const { t } = useTranslation('welcome');
25
-
26
25
  const { styles } = useStyles();
27
26
 
28
27
  const switchSession = useSessionStore((s) => s.switchSession);
@@ -32,34 +31,38 @@ const Banner = memo<{ mobile?: boolean }>(() => {
32
31
  }, []);
33
32
 
34
33
  return (
35
- <Flexbox height={'80vh'} style={{ paddingTop: '10vh' }}>
36
- <GridShowcase>
37
- <div className={styles.container} ref={ref}>
38
- <Hero width={width} />
39
- </div>
40
- <Flexbox gap={16} horizontal style={{ marginTop: 16 }}>
41
- <Upload maxCount={1} onChange={handleImport} showUploadList={false}>
42
- <Button size={'large'}>{t('button.import')}</Button>
43
- </Upload>
44
- <Link
45
- href={SESSION_CHAT_URL()}
46
- onClick={(e) => {
47
- e.preventDefault();
48
- switchSession();
49
- }}
50
- >
51
- <Button size={'large'} type={'primary'}>
52
- <Flexbox align={'center'} gap={4} horizontal>
53
- {t('button.start')}
54
- <Icon icon={SendHorizonal} />
55
- </Flexbox>
56
- </Button>
57
- </Link>
58
- </Flexbox>
59
- </GridShowcase>
60
- {/*TODO:暂时隐藏,待模板完成后再补回*/}
61
- {/*<AgentTemplate width={width} />*/}
62
- </Flexbox>
34
+ <>
35
+ <div className={styles.container} ref={ref}>
36
+ <Hero mobile={mobile} width={width} />
37
+ </div>
38
+ <Flexbox
39
+ className={styles.buttonGroup}
40
+ gap={16}
41
+ horizontal={!mobile}
42
+ justify={'center'}
43
+ width={'100%'}
44
+ >
45
+ <Upload maxCount={1} onChange={handleImport} showUploadList={false}>
46
+ <Button block={mobile} size={'large'}>
47
+ {t('button.import')}
48
+ </Button>
49
+ </Upload>
50
+ <Link
51
+ href={SESSION_CHAT_URL()}
52
+ onClick={(e) => {
53
+ e.preventDefault();
54
+ switchSession();
55
+ }}
56
+ >
57
+ <Button block={mobile} size={'large'} type={'primary'}>
58
+ <Flexbox align={'center'} gap={4} horizontal justify={'center'}>
59
+ {t('button.start')}
60
+ <Icon icon={SendHorizonal} />
61
+ </Flexbox>
62
+ </Button>
63
+ </Link>
64
+ </Flexbox>
65
+ </>
63
66
  );
64
67
  });
65
68
 
@@ -1,8 +1,13 @@
1
1
  import { createStyles } from 'antd-style';
2
2
  import { rgba } from 'polished';
3
3
 
4
- export const useStyles = createStyles(({ css, token, stylish, cx }) => {
4
+ export const useStyles = createStyles(({ css, token, stylish, cx, prefixCls }) => {
5
5
  return {
6
+ buttonGroup: css`
7
+ .${prefixCls}-upload {
8
+ width: 100% !important;
9
+ }
10
+ `,
6
11
  container: css`
7
12
  z-index: 10;
8
13
 
@@ -49,8 +54,12 @@ export const useStyles = createStyles(({ css, token, stylish, cx }) => {
49
54
  view: cx(
50
55
  stylish.noScrollbar,
51
56
  css`
57
+ position: relative;
58
+
52
59
  overflow-x: hidden;
53
60
  overflow-y: auto;
61
+
62
+ max-width: 1024px;
54
63
  height: 100vh;
55
64
  padding: 32px 16px;
56
65
  `,
@@ -1,12 +1,14 @@
1
- import { t } from 'i18next';
2
- import { Metadata } from 'next';
1
+ import { isMobileDevice } from '@/utils/responsive';
3
2
 
4
- import Banner from './features/Banner';
3
+ import DesktopPage from './(desktop)';
4
+ import MobilePage from './(mobile)';
5
5
 
6
- export const generateMetadata = (): Metadata => ({
7
- title: t('header', { ns: 'welcome' }),
8
- });
6
+ const Page = () => {
7
+ const mobile = isMobileDevice();
9
8
 
10
- const Page = () => <Banner />;
9
+ const Page = mobile ? MobilePage : DesktopPage;
10
+
11
+ return <Page />;
12
+ };
11
13
 
12
14
  export default Page;
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+
3
+ import { FC, ReactNode } from 'react';
4
+
5
+ import { useIsMobile } from '@/hooks/useIsMobile';
6
+
7
+ interface ResponsiveIndexProps {
8
+ Mobile: FC;
9
+ children: ReactNode;
10
+ }
11
+ const ResponsiveIndex = ({ children, Mobile }: ResponsiveIndexProps) => {
12
+ const mobile = useIsMobile();
13
+
14
+ return mobile ? <Mobile /> : children;
15
+ };
16
+
17
+ export default ResponsiveIndex;
@@ -49,7 +49,7 @@ export default memo<{ className?: string }>(({ className }) => {
49
49
  key: SidebarTabKey.Setting,
50
50
  onClick: () => {
51
51
  setTab(SidebarTabKey.Setting);
52
- router.push('/settings/mobile');
52
+ router.push('/settings');
53
53
  },
54
54
  title: t('tab.setting'),
55
55
  },
@@ -102,7 +102,7 @@ const BottomActions = memo<BottomActionProps>(({ tab, setTab }) => {
102
102
  label: t('setting'),
103
103
  onClick: () => {
104
104
  setTab(SidebarTabKey.Setting);
105
- router.push('/settings');
105
+ router.push('/settings/common');
106
106
  },
107
107
  },
108
108
  ],