diff --git a/src/components/icon-font/index.tsx b/src/components/icon-font/index.tsx
index 2c4fbc7b..6e45f38e 100644
--- a/src/components/icon-font/index.tsx
+++ b/src/components/icon-font/index.tsx
@@ -1,8 +1,8 @@
import { createFromIconfontCN } from '@ant-design/icons';
-import './iconfont/iconfont.js';
+// import './iconfont/iconfont.js';
const IconFont = createFromIconfontCN({
- scriptUrl: ''
+ scriptUrl: '//at.alicdn.com/t/c/font_4613488_ivhneql6a1f.js'
});
export default IconFont;
diff --git a/src/components/theme-toggle/theme-drop-actions.tsx b/src/components/theme-toggle/theme-drop-actions.tsx
new file mode 100644
index 00000000..243600a2
--- /dev/null
+++ b/src/components/theme-toggle/theme-drop-actions.tsx
@@ -0,0 +1,71 @@
+import useUserSettings from '@/hooks/use-user-settings';
+import { MoonOutlined, SunOutlined } from '@ant-design/icons';
+import { useIntl } from '@umijs/max';
+import { Dropdown } from 'antd';
+import { createStyles } from 'antd-style';
+import IconFont from '../icon-font';
+
+const useStyles = createStyles(({ token, css }) => ({
+ inner: css`
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ color: ${token.colorText};
+ font-size: var(--font-size-base);
+ padding: 0 8px;
+ &:hover {
+ color: ${token.colorTextTertiary};
+ }
+ .anticon {
+ font-size: 16px;
+ }
+ .icon-auto {
+ font-size: 20px;
+ }
+ `
+}));
+
+const ThemeDropActions = () => {
+ const { setTheme, userSettings } = useUserSettings();
+ const { styles } = useStyles();
+ const intl = useIntl();
+
+ const ThemeOptions = [
+ {
+ key: 'light',
+ label: intl.formatMessage({ id: 'common.appearance.light' }),
+ icon:
+ },
+ {
+ key: 'realDark',
+ label: intl.formatMessage({ id: 'common.appearance.dark' }),
+ icon:
+ },
+ {
+ key: 'auto',
+ label: intl.formatMessage({ id: 'common.appearance.system' }),
+ icon:
+ }
+ ];
+
+ const handleOnChange = (item: any) => {
+ const value = item.key as 'light' | 'realDark' | 'auto';
+ setTheme(value);
+ };
+
+ return (
+
+
+ {userSettings.mode === 'auto' ? (
+
+ ) : userSettings.mode === 'realDark' ? (
+
+ ) : (
+
+ )}
+
+
+ );
+};
+
+export default ThemeDropActions;
diff --git a/src/pages/login/components/login-form.tsx b/src/pages/login/components/login-form.tsx
index bb70085c..e2843b42 100644
--- a/src/pages/login/components/login-form.tsx
+++ b/src/pages/login/components/login-form.tsx
@@ -2,7 +2,7 @@ import LogoIcon from '@/assets/images/gpustack-logo.png';
import { initialPasswordAtom, userAtom } from '@/atoms/user';
import LangSelect from '@/components/lang-select';
import SealInput from '@/components/seal-form/seal-input';
-import ThemeToggle from '@/components/theme-toggle';
+import ThemeDropActions from '@/components/theme-toggle/theme-drop-actions';
import externalLinks from '@/constants/external-links';
import {
CRYPT_TEXT,
@@ -30,6 +30,7 @@ const useStyles = createStyles(({ token, css }) => ({
position: fixed;
right: 0;
top: 0;
+ height: 60px;
padding: 20px;
.anticon-global {
color: ${token.colorText};
@@ -153,7 +154,7 @@ const LoginForm = () => {
return (
-
+
diff --git a/src/pages/profile/components/appearance.tsx b/src/pages/profile/components/appearance.tsx
index 21b65a51..3150ea1f 100644
--- a/src/pages/profile/components/appearance.tsx
+++ b/src/pages/profile/components/appearance.tsx
@@ -2,7 +2,7 @@ import useUserSettings from '@/hooks/use-user-settings';
import { MoonOutlined, SunOutlined } from '@ant-design/icons';
import { useIntl } from '@umijs/max';
import { Select } from 'antd';
-import React, { useMemo } from 'react';
+import React from 'react';
import styled from 'styled-components';
const Wrapper = styled.div`
@@ -56,10 +56,6 @@ const Appearance: React.FC = () => {
setTheme(value);
};
- const theme = useMemo(() => {
- return userSettings?.theme || 'auto';
- }, [userSettings?.theme]);
-
return (