diff --git a/src/components/settings/appearance-settings.tsx b/src/components/settings/appearance-settings.tsx index 22c18e1..8c7b51f 100644 --- a/src/components/settings/appearance-settings.tsx +++ b/src/components/settings/appearance-settings.tsx @@ -1,8 +1,9 @@ "use client" -import { Monitor, Moon, Sun } from "lucide-react" +import { Monitor, Moon, RotateCcw, Sun, Type } from "lucide-react" import { useTranslations } from "next-intl" import { useTheme } from "next-themes" +import { Button } from "@/components/ui/button" import { Select, SelectContent, @@ -10,12 +11,26 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select" +import { useThemeColor, useZoomLevel } from "@/hooks/use-appearance" +import { cn } from "@/lib/utils" +import { + DEFAULT_THEME_COLOR, + DEFAULT_ZOOM_LEVEL, + THEME_COLOR_PREVIEW, + THEME_COLORS, + ZOOM_LEVELS, + type ThemeColor, + type ZoomLevel, +} from "@/lib/theme-presets" type ThemeMode = "system" | "light" | "dark" export function AppearanceSettings() { const t = useTranslations("AppearanceSettings") const { theme, resolvedTheme, setTheme } = useTheme() + const { themeColor, setThemeColor } = useThemeColor() + const { zoomLevel, setZoomLevel } = useZoomLevel() + const resolvedThemeLabel = resolvedTheme === "dark" ? t("resolvedTheme.dark") @@ -23,9 +38,18 @@ export function AppearanceSettings() { ? t("resolvedTheme.light") : t("resolvedTheme.unknown") + const isAtDefaults = + themeColor === DEFAULT_THEME_COLOR && zoomLevel === DEFAULT_ZOOM_LEVEL + + const handleResetToDefaults = () => { + setThemeColor(DEFAULT_THEME_COLOR) + setZoomLevel(DEFAULT_ZOOM_LEVEL) + } + return (
+ {t("themeColor.sectionDescription")} +
+ ++ {t("themeColor.current", { + color: t(`themeColor.options.${themeColor}`), + })} +
++ {t("zoomLevel.sectionDescription")} +
+ ++ {t("zoomLevel.current", { zoom: zoomLevel })} +
+