diff --git a/package.json b/package.json index 910f8ce..0ebd5a7 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@mui/material": "^5.11.14", "@mui/styled-engine-sc": "^5.11.11", "@radix-ui/react-dialog": "^1.0.3", + "@radix-ui/react-popover": "^1.0.5", "@radix-ui/react-select": "^1.2.1", "@radix-ui/react-tooltip": "^1.0.5", "@vercel/analytics": "^0.1.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a4e906..4c99ca3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,6 +16,9 @@ dependencies: '@radix-ui/react-dialog': specifier: ^1.0.3 version: 1.0.3(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popover': + specifier: ^1.0.5 + version: 1.0.5(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-select': specifier: ^1.2.1 version: 1.2.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) @@ -964,6 +967,34 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-popover@1.0.5(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GRHZ8yD12MrN2NLobHPE8Rb5uHTxd9x372DE9PPNnBjpczAQHcZ5ne0KXG4xpf+RDdXSzdLv9ym6mYJCDTaUZg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.0(react@18.2.0) + '@radix-ui/react-popper': 1.1.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.1(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.28)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@radix-ui/react-popper@1.1.1(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} peerDependencies: diff --git a/src/components/SettingModal.tsx b/src/components/SettingModal.tsx index 711c6a4..257abec 100644 --- a/src/components/SettingModal.tsx +++ b/src/components/SettingModal.tsx @@ -18,10 +18,10 @@ const SettingModal = (props: Props) => { return (
-
+
@@ -37,7 +37,7 @@ const SettingModal = (props: Props) => {
- Theme + {t("setting.theme.self")}
diff --git a/src/components/ThemeSelector.tsx b/src/components/ThemeSelector.tsx index 8b5207d..7b42e75 100644 --- a/src/components/ThemeSelector.tsx +++ b/src/components/ThemeSelector.tsx @@ -1,3 +1,4 @@ +import { useTranslation } from "react-i18next"; import { useSettingStore } from "@/store"; import { Theme } from "@/types"; import Select from "./kit/Select"; @@ -7,30 +8,31 @@ interface ThemeItem { label: string; } -const themeItemList: ThemeItem[] = [ - { - value: "system", - label: "System", - }, - { - value: "light", - label: "Light", - }, - { - value: "dark", - label: "Dark", - }, -]; - const ThemeSelector = () => { + const { t } = useTranslation(); const settingStore = useSettingStore(); const theme = settingStore.setting.theme; + const themeItemList: ThemeItem[] = [ + { + value: "system", + label: t("setting.theme.system"), + }, + { + value: "light", + label: t("setting.theme.light"), + }, + { + value: "dark", + label: t("setting.theme.dark"), + }, + ]; + const handleThemeChange = (theme: Theme) => { settingStore.setTheme(theme); }; - return ; }; export default ThemeSelector; diff --git a/src/components/WeChatQRCodeView.tsx b/src/components/WeChatQRCodeView.tsx index c45af22..25fd13c 100644 --- a/src/components/WeChatQRCodeView.tsx +++ b/src/components/WeChatQRCodeView.tsx @@ -1,34 +1,21 @@ -import { Popover } from "@mui/material"; -import { useState } from "react"; import { useTranslation } from "react-i18next"; import Icon from "./Icon"; +import Popover from "./kit/Popover"; const WeChatQRCodeView = () => { const { t } = useTranslation(); - const [wechatAnchorEl, setWeChatAnchorEl] = useState(null); - const openWeChatQrCodePopover = Boolean(wechatAnchorEl); return ( - <> -
setWeChatAnchorEl(e.currentTarget)} - > - - {t("social.join-wechat-group")} -
- setWeChatAnchorEl(null)} - anchorOrigin={{ - vertical: "bottom", - horizontal: "left", - }} - > - wechat qrcode - - + + + {t("social.join-wechat-group")} +
+ } + > + wechat qrcode + ); }; diff --git a/src/components/kit/Popover.tsx b/src/components/kit/Popover.tsx new file mode 100644 index 0000000..75b5f0c --- /dev/null +++ b/src/components/kit/Popover.tsx @@ -0,0 +1,25 @@ +import * as PopoverUI from "@radix-ui/react-popover"; +import { ReactNode } from "react"; + +interface Props { + className?: string; + children: ReactNode; + tigger: ReactNode; +} + +const Popover = (props: Props) => { + const { className, children, tigger } = props; + + return ( + + {tigger} + + + {children} + + + + ); +}; + +export default Popover; diff --git a/src/components/kit/Select.tsx b/src/components/kit/Select.tsx index edf1879..1dad085 100644 --- a/src/components/kit/Select.tsx +++ b/src/components/kit/Select.tsx @@ -40,7 +40,7 @@ const Select = (props: Props) => { {placeholder && {placeholder}} {itemList.map((item) => ( - + {item.label} ))} diff --git a/src/locales/en.json b/src/locales/en.json index 8feb745..d9fbb2c 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -36,6 +36,12 @@ "self": "Basic", "language": "Language" }, + "theme": { + "self": "Theme", + "system": "Follow system", + "light": "Light", + "dark": "Dark" + }, "openai-api-configuration": { "self": "OpenAI API configuration" }, diff --git a/src/locales/zh.json b/src/locales/zh.json index 7688654..49ce908 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -36,6 +36,12 @@ "self": "基础", "language": "语言" }, + "theme": { + "self": "主题", + "system": "跟随系统", + "light": "浅色", + "dark": "深色" + }, "openai-api-configuration": { "self": "OpenAI API 配置" },