import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import * as z from "zod"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { useTheme } from "next-themes"; import { useEffect } from "react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; const appearanceFormSchema = z.object({ theme: z.enum(["light", "dark", "system"], { required_error: "Please select a theme.", }), }); type AppearanceFormValues = z.infer; // This can come from your database or API. const defaultValues: Partial = { theme: "system", }; export function AppearanceForm() { const { setTheme, theme } = useTheme(); const form = useForm({ resolver: zodResolver(appearanceFormSchema), defaultValues, }); useEffect(() => { form.reset({ theme: (theme ?? "system") as AppearanceFormValues["theme"], }); }, [form, theme]); function onSubmit(data: AppearanceFormValues) { setTheme(data.theme); toast.success("Preferences Updated"); } return ( Appearance Customize the theme of your dashboard.
{ return ( Theme Select a theme for your dashboard
light
Light
dark
Dark
system
System
); }} />
); }