Skip to content

Commit cce22a5

Browse files
committed
add logo to titlebar, mode-toggle moved to menu
1 parent 63e9a24 commit cce22a5

File tree

2 files changed

+94
-21
lines changed

2 files changed

+94
-21
lines changed

src/components/menu-mode-toggle.tsx

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"use client"
2+
3+
import * as React from "react"
4+
import { useTheme } from "next-themes"
5+
6+
import { Button } from "@/components/ui/button"
7+
import {
8+
DropdownMenu,
9+
DropdownMenuContent,
10+
DropdownMenuItem,
11+
DropdownMenuTrigger,
12+
} from "@/components/ui/dropdown-menu"
13+
import {
14+
MenubarContent,
15+
MenubarMenu,
16+
MenubarRadioGroup,
17+
MenubarRadioItem,
18+
MenubarTrigger,
19+
} from "@/components/ui/menubar"
20+
import { Icons } from "@/components/icons"
21+
22+
export function MenuModeToggle() {
23+
const { setTheme, theme } = useTheme()
24+
25+
return (
26+
<MenubarMenu>
27+
<MenubarTrigger>Theme</MenubarTrigger>
28+
<MenubarContent forceMount>
29+
<MenubarRadioGroup value={theme}>
30+
<MenubarRadioItem value="light" onClick={() => setTheme("light")}>
31+
<Icons.sun className="mr-2 h-4 w-4" />
32+
<span>Light</span>
33+
</MenubarRadioItem>
34+
<MenubarRadioItem value="dark" onClick={() => setTheme("dark")}>
35+
<Icons.moon className="mr-2 h-4 w-4" />
36+
<span>Dark</span>
37+
</MenubarRadioItem>
38+
<MenubarRadioItem value="system" onClick={() => setTheme("system")}>
39+
<Icons.laptop className="mr-2 h-4 w-4" />
40+
<span>System</span>
41+
</MenubarRadioItem>
42+
</MenubarRadioGroup>
43+
</MenubarContent>
44+
</MenubarMenu>
45+
)
46+
}

src/components/menu.tsx

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
"use client"
22

3-
import { useEffect, useState } from "react"
4-
import type { WebviewWindow } from "@tauri-apps/api/window"
5-
import { Globe, Maximize, Mic, X } from "lucide-react"
3+
import { useCallback, useEffect, useState } from "react"
4+
import Image from "next/image"
5+
import { usePathname } from "next/navigation"
6+
import logo from "@/assets/logo.png"
7+
// import { appWindow, type WebviewWindow } from "@tauri-apps/plugin-window"
8+
import { Globe, Maximize, Mic, Music2, Sailboat, X, Zap } from "lucide-react"
69

710
import { Button } from "@/components/ui/button"
811
import {
@@ -24,38 +27,58 @@ import {
2427

2528
import { ExamplesNav } from "./examples-nav"
2629
import { Icons } from "./icons"
30+
import { MenuModeToggle } from "./menu-mode-toggle"
2731
import { ModeToggle } from "./mode-toggle"
2832

2933
export function Menu() {
30-
const [appWindow, setAppWindow] = useState<null | WebviewWindow>(null)
34+
// const [appWindow, setAppWindow] = useState(null)
3135

32-
// Dinamically import the tauri API, but only when it's in a tauri window
33-
useEffect(() => {
34-
import("@tauri-apps/api/window").then(({ appWindow }) => {
35-
setAppWindow(appWindow)
36-
})
37-
}, [])
36+
// // Dinamically import the tauri API, but only when it's in a tauri window
37+
// useEffect(() => {
38+
// import("@tauri-apps/plugin-window").then(({ tauriWindow }: any) => {
39+
// setAppWindow(tauriWindow)
40+
// })
41+
// }, [])
42+
43+
const minimizeWindow = useCallback(async () => {
44+
const { appWindow } = await import("@tauri-apps/plugin-window")
3845

39-
const minimizeWindow = () => {
4046
appWindow?.minimize()
41-
}
42-
const maximizeWindow = async () => {
47+
}, [])
48+
49+
const maximizeWindow = useCallback(async () => {
50+
const { appWindow } = await import("@tauri-apps/plugin-window")
51+
4352
if (await appWindow?.isMaximized()) {
4453
appWindow?.unmaximize()
4554
} else {
4655
appWindow?.maximize()
4756
}
48-
}
49-
const closeWindow = () => {
50-
appWindow?.close()
51-
}
57+
}, [])
58+
59+
const closeWindow = useCallback(async () => {
60+
const { appWindow } = await import("@tauri-apps/plugin-window")
61+
62+
appWindow.close()
63+
}, [])
5264

5365
return (
54-
<Menubar className="rounded-none border-b border-none pl-2 lg:pl-4">
66+
<Menubar className="rounded-none border-b border-none pl-2 lg:pl-3">
67+
{/* App Logo */}
68+
<MenubarMenu>
69+
<div className="inline-flex h-fit w-fit items-center text-cyan-500">
70+
{usePathname() === "/" || usePathname() === "/examples/music" ? (
71+
<Image src={logo} alt="logo" width={40} />
72+
) : (
73+
<Sailboat className="h-5 w-5" />
74+
)}
75+
</div>
76+
</MenubarMenu>
77+
5578
<MenubarMenu>
5679
<MenubarTrigger className="font-bold">App</MenubarTrigger>
5780
<MenubarContent>
58-
<MenubarItem>About Music</MenubarItem>
81+
<MenubarItem>About App</MenubarItem>
5982
<MenubarSeparator />
6083
<MenubarItem>
6184
Preferences... <MenubarShortcut>⌘,</MenubarShortcut>
@@ -205,14 +228,18 @@ export function Menu() {
205228
<MenubarItem inset>Add Account...</MenubarItem>
206229
</MenubarContent>
207230
</MenubarMenu>
231+
232+
<MenuModeToggle />
233+
208234
<ExamplesNav />
235+
209236
<div
210237
data-tauri-drag-region
211238
className="inline-flex h-full w-full justify-end"
212239
>
213-
<div className="pr-3">
240+
{/* <div className="pr-3">
214241
<ModeToggle />
215-
</div>
242+
</div> */}
216243

217244
<Button
218245
onClick={minimizeWindow}

0 commit comments

Comments
 (0)