diff --git a/src/app/(main)/(mobile)/me/(home)/loading.tsx b/src/app/(main)/(mobile)/me/(home)/loading.tsx
index 5db1a97cc46e..3849f753fd55 100644
--- a/src/app/(main)/(mobile)/me/(home)/loading.tsx
+++ b/src/app/(main)/(mobile)/me/(home)/loading.tsx
@@ -5,7 +5,7 @@ import { memo } from 'react';
import { Flexbox } from 'react-layout-kit';
import Divider from '@/components/Cell/Divider';
-import SkeletonLoading from '@/components/SkeletonLoading';
+import SkeletonLoading from '@/components/Loading/SkeletonLoading';
const Loading = memo(() => {
return (
diff --git a/src/app/(main)/(mobile)/me/data/loading.tsx b/src/app/(main)/(mobile)/me/data/loading.tsx
index b14417168468..d73434fcb685 100644
--- a/src/app/(main)/(mobile)/me/data/loading.tsx
+++ b/src/app/(main)/(mobile)/me/data/loading.tsx
@@ -1,4 +1,4 @@
-import SkeletonLoading from '@/components/SkeletonLoading';
+import SkeletonLoading from '@/components/Loading/SkeletonLoading';
export default () => {
return ;
diff --git a/src/app/(main)/(mobile)/me/profile/loading.tsx b/src/app/(main)/(mobile)/me/profile/loading.tsx
index b14417168468..d73434fcb685 100644
--- a/src/app/(main)/(mobile)/me/profile/loading.tsx
+++ b/src/app/(main)/(mobile)/me/profile/loading.tsx
@@ -1,4 +1,4 @@
-import SkeletonLoading from '@/components/SkeletonLoading';
+import SkeletonLoading from '@/components/Loading/SkeletonLoading';
export default () => {
return ;
diff --git a/src/app/(main)/(mobile)/me/settings/loading.tsx b/src/app/(main)/(mobile)/me/settings/loading.tsx
index b14417168468..d73434fcb685 100644
--- a/src/app/(main)/(mobile)/me/settings/loading.tsx
+++ b/src/app/(main)/(mobile)/me/settings/loading.tsx
@@ -1,4 +1,4 @@
-import SkeletonLoading from '@/components/SkeletonLoading';
+import SkeletonLoading from '@/components/Loading/SkeletonLoading';
export default () => {
return ;
diff --git a/src/app/(main)/chat/(workspace)/@portal/default.tsx b/src/app/(main)/chat/(workspace)/@portal/default.tsx
index d0ae67131022..4539bed10355 100644
--- a/src/app/(main)/chat/(workspace)/@portal/default.tsx
+++ b/src/app/(main)/chat/(workspace)/@portal/default.tsx
@@ -1,6 +1,6 @@
import React, { Suspense, lazy } from 'react';
-import Loading from '@/components/CircleLoading';
+import Loading from '@/components/Loading/BrandTextLoading';
import { isMobileDevice } from '@/utils/server/responsive';
import Desktop from './_layout/Desktop';
diff --git a/src/app/(main)/chat/(workspace)/@portal/loading.tsx b/src/app/(main)/chat/(workspace)/@portal/loading.tsx
index 22efdc4fff71..3ae0d871289d 100644
--- a/src/app/(main)/chat/(workspace)/@portal/loading.tsx
+++ b/src/app/(main)/chat/(workspace)/@portal/loading.tsx
@@ -1,3 +1,3 @@
-import Loading from '@/components/CircleLoading';
+import Loading from '@/components/Loading/BrandTextLoading';
export default () => ;
diff --git a/src/app/(main)/chat/@session/default.tsx b/src/app/(main)/chat/@session/default.tsx
index a64533d6e17f..42166f57889e 100644
--- a/src/app/(main)/chat/@session/default.tsx
+++ b/src/app/(main)/chat/@session/default.tsx
@@ -1,5 +1,6 @@
import { Suspense, lazy } from 'react';
+import CircleLoading from '@/components/Loading/CircleLoading';
import ServerLayout from '@/components/server/ServerLayout';
import Desktop from './_layout/Desktop';
@@ -13,14 +14,14 @@ const Layout = ServerLayout({ Desktop, Mobile });
const Session = () => {
return (
- <>
+ }>
}>
- >
+
);
};
diff --git a/src/app/(main)/chat/loading.tsx b/src/app/(main)/chat/loading.tsx
index 766e96b94759..44f5102947c3 100644
--- a/src/app/(main)/chat/loading.tsx
+++ b/src/app/(main)/chat/loading.tsx
@@ -1,3 +1,3 @@
-import CircleLoading from '@/components/CircleLoading';
+import CircleLoading from '@/components/Loading/BrandTextLoading';
export default () => ;
diff --git a/src/app/(main)/chat/settings/loading.tsx b/src/app/(main)/chat/settings/loading.tsx
index 9ca9c13ee77b..eb6bf9a4a6d8 100644
--- a/src/app/(main)/chat/settings/loading.tsx
+++ b/src/app/(main)/chat/settings/loading.tsx
@@ -1,3 +1,3 @@
-import SkeletonLoading from '@/components/SkeletonLoading';
+import SkeletonLoading from '@/components/Loading/SkeletonLoading';
export default () => ;
diff --git a/src/app/(main)/discover/loading.tsx b/src/app/(main)/discover/loading.tsx
index e15b868ba691..611cded27273 100644
--- a/src/app/(main)/discover/loading.tsx
+++ b/src/app/(main)/discover/loading.tsx
@@ -1,6 +1,6 @@
import { Center } from 'react-layout-kit';
-import CircleLoading from '@/components/CircleLoading';
+import CircleLoading from '@/components/Loading/BrandTextLoading';
export default () => (
diff --git a/src/app/(main)/files/loading.tsx b/src/app/(main)/files/loading.tsx
index cd2efe9a0548..44f5102947c3 100644
--- a/src/app/(main)/files/loading.tsx
+++ b/src/app/(main)/files/loading.tsx
@@ -1,23 +1,3 @@
-'use client';
+import CircleLoading from '@/components/Loading/BrandTextLoading';
-import { Icon } from '@lobehub/ui';
-import { Typography } from 'antd';
-import { LoaderCircle } from 'lucide-react';
-import { useTranslation } from 'react-i18next';
-import { Center, Flexbox } from 'react-layout-kit';
-
-export default () => {
- const { t } = useTranslation('common');
- return (
-
-
-
-
-
-
- {t('loading')}
-
-
-
- );
-};
+export default () => ;
diff --git a/src/app/(main)/profile/loading.tsx b/src/app/(main)/profile/loading.tsx
index 3cc69a2bc839..e7caee8aff5a 100644
--- a/src/app/(main)/profile/loading.tsx
+++ b/src/app/(main)/profile/loading.tsx
@@ -1,6 +1,6 @@
import { Flexbox } from 'react-layout-kit';
-import SkeletonLoading from '@/components/SkeletonLoading';
+import SkeletonLoading from '@/components/Loading/SkeletonLoading';
import { isMobileDevice } from '@/utils/server/responsive';
const Loading = async () => {
diff --git a/src/app/(main)/repos/[id]/evals/dataset/page.tsx b/src/app/(main)/repos/[id]/evals/dataset/page.tsx
index 7de4dd92ad79..bf5330b89c30 100644
--- a/src/app/(main)/repos/[id]/evals/dataset/page.tsx
+++ b/src/app/(main)/repos/[id]/evals/dataset/page.tsx
@@ -3,7 +3,7 @@
import { createStyles } from 'antd-style';
import { Flexbox } from 'react-layout-kit';
-import CircleLoading from '@/components/CircleLoading';
+import CircleLoading from '@/components/Loading/BrandTextLoading';
import { useKnowledgeBaseStore } from '@/store/knowledgeBase';
import DatasetDetail from './DatasetDetail';
diff --git a/src/app/(main)/repos/[id]/evals/evaluation/page.tsx b/src/app/(main)/repos/[id]/evals/evaluation/page.tsx
index 9a661bac7da7..d93f2d59b6b0 100644
--- a/src/app/(main)/repos/[id]/evals/evaluation/page.tsx
+++ b/src/app/(main)/repos/[id]/evals/evaluation/page.tsx
@@ -2,7 +2,7 @@
import { Flexbox } from 'react-layout-kit';
-import CircleLoading from '@/components/CircleLoading';
+import CircleLoading from '@/components/Loading/BrandTextLoading';
import { useKnowledgeBaseStore } from '@/store/knowledgeBase';
import EmptyGuide from './EmptyGuide';
diff --git a/src/app/(main)/settings/@category/default.tsx b/src/app/(main)/settings/@category/default.tsx
index eafd1d904b1a..ad4118197143 100644
--- a/src/app/(main)/settings/@category/default.tsx
+++ b/src/app/(main)/settings/@category/default.tsx
@@ -1,12 +1,16 @@
+import { Suspense } from 'react';
+
+import SkeletonLoading from '@/components/Loading/SkeletonLoading';
+
import UpgradeAlert from '../features/UpgradeAlert';
import CategoryContent from './features/CategoryContent';
const Category = () => {
return (
- <>
+ }>
- >
+
);
};
diff --git a/src/app/(main)/settings/_layout/Desktop/SideBar.tsx b/src/app/(main)/settings/_layout/Desktop/SideBar.tsx
index 930843ed85bd..93d5782546e9 100644
--- a/src/app/(main)/settings/_layout/Desktop/SideBar.tsx
+++ b/src/app/(main)/settings/_layout/Desktop/SideBar.tsx
@@ -33,7 +33,7 @@ const SidebarLayout = ({ children, className, title, desc, ...rest }: SidebarLay
{...rest}
>
- {children}
+ {children}
);
diff --git a/src/app/(main)/settings/loading.tsx b/src/app/(main)/settings/loading.tsx
index 6a5633602197..2c93414921ab 100644
--- a/src/app/(main)/settings/loading.tsx
+++ b/src/app/(main)/settings/loading.tsx
@@ -1,9 +1,3 @@
-import SkeletonLoading from '@/components/SkeletonLoading';
+import FullLoading from '@/components/Loading/BrandTextLoading';
-export default () => {
- return (
-
-
-
- );
-};
+export default () => ;
diff --git a/src/app/loading/Client/Content.tsx b/src/app/loading/Client/Content.tsx
index d035707f6fd8..262ab7790ccd 100644
--- a/src/app/loading/Client/Content.tsx
+++ b/src/app/loading/Client/Content.tsx
@@ -2,7 +2,7 @@ import dynamic from 'next/dynamic';
import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import FullscreenLoading from '@/components/FullscreenLoading';
+import FullscreenLoading from '@/components/Loading/FullscreenLoading';
import { useGlobalStore } from '@/store/global';
import { systemStatusSelectors } from '@/store/global/selectors';
import { DatabaseLoadingState } from '@/types/clientDB';
diff --git a/src/app/loading/Server/Content.tsx b/src/app/loading/Server/Content.tsx
index 48df787de997..42bc87432191 100644
--- a/src/app/loading/Server/Content.tsx
+++ b/src/app/loading/Server/Content.tsx
@@ -1,7 +1,7 @@
import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import FullscreenLoading from '@/components/FullscreenLoading';
+import FullscreenLoading from '@/components/Loading/FullscreenLoading';
import { AppLoadingStage, SERVER_LOADING_STAGES } from '../stage';
diff --git a/src/components/Loading/BrandTextLoading/LobeChatText/SVG.tsx b/src/components/Loading/BrandTextLoading/LobeChatText/SVG.tsx
new file mode 100644
index 000000000000..cec21559321b
--- /dev/null
+++ b/src/components/Loading/BrandTextLoading/LobeChatText/SVG.tsx
@@ -0,0 +1,44 @@
+import { memo } from 'react';
+
+const LobeChatText = memo<{ size?: number }>(({ size = '1em' }) => (
+
+));
+
+export default LobeChatText;
diff --git a/src/components/Loading/BrandTextLoading/LobeChatText/index.tsx b/src/components/Loading/BrandTextLoading/LobeChatText/index.tsx
new file mode 100644
index 000000000000..9fbf84d39b51
--- /dev/null
+++ b/src/components/Loading/BrandTextLoading/LobeChatText/index.tsx
@@ -0,0 +1,6 @@
+import LobeChatText from './SVG';
+import './style.css';
+
+const LobeChatTextLoading = () => ;
+
+export default LobeChatTextLoading;
diff --git a/src/components/Loading/BrandTextLoading/LobeChatText/style.css b/src/components/Loading/BrandTextLoading/LobeChatText/style.css
new file mode 100644
index 000000000000..f5d89566e4a9
--- /dev/null
+++ b/src/components/Loading/BrandTextLoading/LobeChatText/style.css
@@ -0,0 +1,32 @@
+@keyframes draw {
+ 0% {
+ stroke-dashoffset: 1000;
+ }
+
+ 100% {
+ stroke-dashoffset: 0;
+ }
+}
+
+@keyframes fill {
+ 30% {
+ fill-opacity: 0%;
+ }
+
+ 100% {
+ fill-opacity: 100%;
+ }
+}
+
+.animate-draw {
+ fill: currentcolor;
+ fill-opacity: 0%;
+ stroke: currentcolor;
+ stroke-dasharray: 1000;
+ stroke-dashoffset: 1000;
+ stroke-width: 1.5;
+
+ animation:
+ draw 2s cubic-bezier(0.4, 0, 0.2, 1) infinite,
+ fill 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
+}
diff --git a/src/components/Loading/BrandTextLoading/index.tsx b/src/components/Loading/BrandTextLoading/index.tsx
new file mode 100644
index 000000000000..9ae5fb6b8758
--- /dev/null
+++ b/src/components/Loading/BrandTextLoading/index.tsx
@@ -0,0 +1,11 @@
+import { Center } from 'react-layout-kit';
+
+import LobeChatText from './LobeChatText';
+
+export default () => {
+ return (
+
+
+
+ );
+};
diff --git a/src/components/CircleLoading/index.tsx b/src/components/Loading/CircleLoading/index.tsx
similarity index 100%
rename from src/components/CircleLoading/index.tsx
rename to src/components/Loading/CircleLoading/index.tsx
diff --git a/src/components/FullscreenLoading/index.tsx b/src/components/Loading/FullscreenLoading/index.tsx
similarity index 100%
rename from src/components/FullscreenLoading/index.tsx
rename to src/components/Loading/FullscreenLoading/index.tsx
diff --git a/src/components/SkeletonLoading/index.tsx b/src/components/Loading/SkeletonLoading/index.tsx
similarity index 80%
rename from src/components/SkeletonLoading/index.tsx
rename to src/components/Loading/SkeletonLoading/index.tsx
index a2a07e3c18a6..4e821ffcb6f2 100644
--- a/src/components/SkeletonLoading/index.tsx
+++ b/src/components/Loading/SkeletonLoading/index.tsx
@@ -15,7 +15,7 @@ const useStyles = createStyles(
const SkeletonLoading = memo(({ className, ...rest }) => {
const { cx, styles } = useStyles();
- return ;
+ return ;
});
export default SkeletonLoading;
diff --git a/src/features/FileViewer/Renderer/TXT/index.tsx b/src/features/FileViewer/Renderer/TXT/index.tsx
index 9f71e7b7c8bc..e4379d83ceff 100644
--- a/src/features/FileViewer/Renderer/TXT/index.tsx
+++ b/src/features/FileViewer/Renderer/TXT/index.tsx
@@ -4,7 +4,7 @@ import { createStyles } from 'antd-style';
import React from 'react';
import { Center, Flexbox } from 'react-layout-kit';
-import CircleLoading from '@/components/CircleLoading';
+import CircleLoading from '@/components/Loading/CircleLoading';
const useStyles = createStyles(({ css, token }) => ({
page: css`
diff --git a/src/features/Portal/FilePreview/Body/index.tsx b/src/features/Portal/FilePreview/Body/index.tsx
index 29a601b1480c..eec204896fd4 100644
--- a/src/features/Portal/FilePreview/Body/index.tsx
+++ b/src/features/Portal/FilePreview/Body/index.tsx
@@ -5,7 +5,7 @@ import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Flexbox } from 'react-layout-kit';
-import Loading from '@/components/CircleLoading';
+import Loading from '@/components/Loading/CircleLoading';
import FileViewer from '@/features/FileViewer';
import { useChatStore } from '@/store/chat';
import { chatPortalSelectors } from '@/store/chat/selectors';
diff --git a/src/features/Portal/Home/Body/Files/FileList/index.tsx b/src/features/Portal/Home/Body/Files/FileList/index.tsx
index fed90e859b87..3a87b9145d72 100644
--- a/src/features/Portal/Home/Body/Files/FileList/index.tsx
+++ b/src/features/Portal/Home/Body/Files/FileList/index.tsx
@@ -7,7 +7,7 @@ import { useTranslation } from 'react-i18next';
import { Center, Flexbox } from 'react-layout-kit';
import Balancer from 'react-wrap-balancer';
-import SkeletonLoading from '@/components/SkeletonLoading';
+import SkeletonLoading from '@/components/Loading/SkeletonLoading';
import { useChatStore } from '@/store/chat';
import { chatSelectors } from '@/store/chat/selectors';
diff --git a/src/features/Setting/Footer.tsx b/src/features/Setting/Footer.tsx
index 4fbf57c0bd20..fad687ab3fe9 100644
--- a/src/features/Setting/Footer.tsx
+++ b/src/features/Setting/Footer.tsx
@@ -32,7 +32,7 @@ const Footer = memo(() => {
return hideGitHub ? null : (
<>
-
+
(() => {
);
});
+Footer.displayName = 'SettingFooter';
+
export default Footer;
diff --git a/src/features/Setting/SettingContainer.tsx b/src/features/Setting/SettingContainer.tsx
index f1676849deea..2b205cc90ac8 100644
--- a/src/features/Setting/SettingContainer.tsx
+++ b/src/features/Setting/SettingContainer.tsx
@@ -33,6 +33,7 @@ const SettingContainer = memo>(
>
{addonBefore}