feat: replace DropdownMenu with Select component in ModeToggle for improved theme selection

This commit is contained in:
ecwu
2025-01-04 23:29:20 +08:00
parent 236d48e72d
commit 503bf6a9bb
4 changed files with 25 additions and 24 deletions

View File

@@ -7,31 +7,33 @@ import {
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { useTheme } from "@/components/ThemeProvider";
import {
Select,
SelectContent,
SelectGroup,
SelectItem,
SelectLabel,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { useTheme, Theme } from "@/components/ThemeProvider";
export function ModeToggle() {
const { setTheme } = useTheme();
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline" size="icon">
<Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
<Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
<span className="sr-only">Toggle theme</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem onClick={() => setTheme("light")}>
Light
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("dark")}>
Dark
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("system")}>
System
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
<Select onValueChange={(value) => setTheme(value as Theme)}>
<SelectTrigger className="w-full">
<SelectValue placeholder="Select theme" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectLabel>Theme</SelectLabel>
<SelectItem value="light">Light</SelectItem>
<SelectItem value="dark">Dark</SelectItem>
<SelectItem value="system">System</SelectItem>
</SelectGroup>
</SelectContent>
</Select>
);
}

View File

@@ -1,6 +1,6 @@
import { createContext, useContext, useEffect, useState } from "react";
type Theme = "dark" | "light" | "system";
export type Theme = "dark" | "light" | "system";
type ThemeProviderProps = {
children: React.ReactNode;

View File

@@ -14,7 +14,6 @@ import {
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { ModeToggle } from "@/components/ModeToggle";
import { SidebarTrigger } from "@/components/ui/sidebar";
import { Separator } from "@/components/ui/separator";
import {
@@ -130,7 +129,6 @@ const Navbar: React.FC = () => {
</Menubar>
</div>
</div>
<ModeToggle />
</div>
</div>
<div className="flex ml-auto gap-2 px-3">

View File

@@ -414,6 +414,7 @@ export function App() {
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<ModeToggle />
<AlertDialog>
<AlertDialogTrigger asChild>
<Button variant="destructive">{Tr("DEL")}</Button>