diff --git a/src/renderer/src/components/user-button.tsx b/src/renderer/src/components/user-button.tsx index 6a20c824b..3a1230de7 100644 --- a/src/renderer/src/components/user-button.tsx +++ b/src/renderer/src/components/user-button.tsx @@ -5,13 +5,18 @@ import { AvatarImage, } from "@renderer/components/ui/avatar" import { useSignOut } from "@renderer/hooks/biz/useSignOut" -import { useAuthQuery } from "@renderer/hooks/common" +import { + useAuthQuery, + useSetTheme, + useThemeAtomValue, +} from "@renderer/hooks/common" import { apiClient } from "@renderer/lib/api-fetch" import { defineQuery } from "@renderer/lib/defineQuery" import { nextFrame } from "@renderer/lib/dom" import { cn } from "@renderer/lib/utils" import { LoginModalContent } from "@renderer/modules/auth/LoginModalContent" import { usePresentUserProfileModal } from "@renderer/modules/profile/hooks" +import { SettingTabbedSegment } from "@renderer/modules/settings/control" import { useSettingModal } from "@renderer/modules/settings/modal/hooks" import { useSession } from "@renderer/queries/auth" import type { FC } from "react" @@ -76,7 +81,10 @@ export const ProfileButton: FC = memo((props) => { return ( - + @@ -106,6 +114,13 @@ export const ProfileButton: FC = memo((props) => { Profile + + + + + + + { // Here we need to delay one frame, so it's two raf, @@ -201,3 +216,42 @@ export function UserAvatar({ ) } + +const AppTheme = () => { + const theme = useThemeAtomValue() + const setTheme = useSetTheme() + return ( + + + + Theme + + + )} + value={theme} + values={[ + { + value: "system", + label: "", + icon: , + }, + { + value: "light", + label: "", + icon: , + }, + { + value: "dark", + label: "", + icon: , + }, + ]} + onValueChanged={(value) => { + setTheme(value as "light" | "dark" | "system") + }} + /> + ) +} diff --git a/src/renderer/src/modules/settings/control.tsx b/src/renderer/src/modules/settings/control.tsx index d1c0bb2ef..43b640b8d 100644 --- a/src/renderer/src/modules/settings/control.tsx +++ b/src/renderer/src/modules/settings/control.tsx @@ -91,7 +91,7 @@ export const SettingInput: Component<{ } export const SettingTabbedSegment: Component<{ - label: string + label: ReactNode value: string onValueChanged?: (value: string) => void values: { value: string, label: string, icon?: ReactNode }[]