ReviewOS

also looking at this

stacks/vite-plugin-tauri

feat: include icon menu option

#11
Merged iamzjohn wants to merge issue-10 into main
79 files +161 -8
example/tsconfig.jsondeleted+0-3
Changes to example/tsconfig.json
@@ -1,3 +0,0 @@
1{
2 "extends": "../tsconfig.json"
3}
example/.gitignore examples/tray-with-simple-menu/.gitignorecopied+0-0

No changes to show.

example/README.md examples/tray-with-simple-menu/README.mdcopied+0-0

No changes to show.

example/index.html examples/tray-with-simple-menu/index.htmlcopied+0-0

No changes to show.

example/package.json examples/tray-with-simple-menu/package.jsoncopied+0-0

No changes to show.

example/pkgx.yaml examples/tray-with-simple-menu/pkgx.yamlcopied+0-0

No changes to show.

example/public/vite.svg examples/tray-with-simple-menu/public/vite.svgcopied+0-0

No changes to show.

example/src-tauri/.gitignore examples/tray-with-simple-menu/src-tauri/.gitignorecopied+0-0

No changes to show.

example/src-tauri/Cargo.lock examples/tray-with-simple-menu/src-tauri/Cargo.lockcopied+0-0

No changes to show.

example/src-tauri/Cargo.toml examples/tray-with-simple-menu/src-tauri/Cargo.tomlcopied+4-1
Changes to examples/tray-with-simple-menu/src-tauri/Cargo.toml
@@ -17,7 +17,10 @@ tauri-build = { version = "2.1.1", features = [] }
1717[dependencies]
1818serde_json = "1.0.140"
1919serde = { version = "1.0.219", features = [ "derive" ] }
20tauri = { version = "2.4.1", features = [ "tray-icon", "image-png" ] }
20tauri = { version = "2.4.1", features = [
21 "tray-icon",
22 "image-png"
23] }
2124
2225[features]
2326# this feature is used for production builds or when `devPath` points to the filesystem
example/src-tauri/build.rs examples/tray-with-simple-menu/src-tauri/build.rscopied+0-0

No changes to show.

example/src-tauri/capabilities/default.json examples/tray-with-simple-menu/src-tauri/capabilities/default.jsoncopied+0-0

No changes to show.

example/src-tauri/icons/128x128.png examples/tray-with-simple-menu/src-tauri/icons/128x128.pngcopied+0-0

No changes to show.

example/src-tauri/icons/128x128@2x.png examples/tray-with-simple-menu/src-tauri/icons/128x128@2x.pngcopied+0-0

No changes to show.

example/src-tauri/icons/32x32.png examples/tray-with-simple-menu/src-tauri/icons/32x32.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square107x107Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square107x107Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square142x142Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square142x142Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square150x150Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square150x150Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square284x284Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square284x284Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square30x30Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square30x30Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square310x310Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square310x310Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square44x44Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square44x44Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square71x71Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square71x71Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/Square89x89Logo.png examples/tray-with-simple-menu/src-tauri/icons/Square89x89Logo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/StoreLogo.png examples/tray-with-simple-menu/src-tauri/icons/StoreLogo.pngcopied+0-0

No changes to show.

example/src-tauri/icons/icon.icns examples/tray-with-simple-menu/src-tauri/icons/icon.icnscopied+0-0

No changes to show.

example/src-tauri/icons/icon.ico examples/tray-with-simple-menu/src-tauri/icons/icon.icocopied+0-0

No changes to show.

example/src-tauri/icons/icon.png examples/tray-with-simple-menu/src-tauri/icons/icon.pngcopied+0-0

No changes to show.

example/src-tauri/src/main.rs examples/tray-with-simple-menu/src-tauri/src/main.rscopied+0-0

No changes to show.

example/src-tauri/tauri.conf.json examples/tray-with-simple-menu/src-tauri/tauri.conf.jsoncopied+0-0

No changes to show.

example/src/App.vue examples/tray-with-simple-menu/src/App.vuecopied+0-0

No changes to show.

example/src/assets/vue.svg examples/tray-with-simple-menu/src/assets/vue.svgcopied+0-0

No changes to show.

example/src/components/HelloWorld.vue examples/tray-with-simple-menu/src/components/HelloWorld.vuecopied+0-0

No changes to show.

example/src/main.js examples/tray-with-simple-menu/src/main.jscopied+0-0

No changes to show.

example/src/style.css examples/tray-with-simple-menu/src/style.csscopied+0-0

No changes to show.

example/src/tray.js examples/tray-with-simple-menu/src/tray.jsrenamed+0-0

Renamed from example/src/tray.js. The contents are unchanged.

examples/tray-with-simple-menu/tsconfig.jsonadded+3-0
Changes to examples/tray-with-simple-menu/tsconfig.json
@@ -0,0 +1,3 @@
1{
2 "extends": "../../tsconfig.json"
3}
example/vite.config.tauri.ts examples/tray-with-simple-menu/vite.config.tauri.tscopied+1-1
Changes to examples/tray-with-simple-menu/vite.config.tauri.ts
@@ -1,6 +1,6 @@
11import type { UserConfig } from 'vite'
22import { defineConfig, mergeConfig } from 'vite'
3import { tauri } from '../packages/vite-plugin-tauri/src'
3import { tauri } from '../../packages/vite-plugin-tauri/src'
44import baseViteConfig from './vite.config'
55
66// https://vitejs.dev/config
example/vite.config.ts examples/tray-with-simple-menu/vite.config.tscopied+0-0

No changes to show.

example/.gitignore examples/tray-with-submenus/.gitignorerenamed+0-0

Renamed from example/.gitignore. The contents are unchanged.

example/README.md examples/tray-with-submenus/README.mdrenamed+0-0

Renamed from example/README.md. The contents are unchanged.

example/index.html examples/tray-with-submenus/index.htmlrenamed+0-0

Renamed from example/index.html. The contents are unchanged.

example/package.json examples/tray-with-submenus/package.jsonrenamed+1-1
Changes to examples/tray-with-submenus/package.json
@@ -1,5 +1,5 @@
11{
2 "name": "vite-project",
2 "name": "submenu-tray",
33 "type": "module",
44 "version": "0.0.0",
55 "private": true,
example/pkgx.yaml examples/tray-with-submenus/pkgx.yamlrenamed+0-0

Renamed from example/pkgx.yaml. The contents are unchanged.

example/src-tauri/icons/icon.png examples/tray-with-submenus/public/icon.pngcopied+0-0

No changes to show.

example/public/vite.svg examples/tray-with-submenus/public/vite.svgrenamed+0-0

Renamed from example/public/vite.svg. The contents are unchanged.

example/src-tauri/.gitignore examples/tray-with-submenus/src-tauri/.gitignorerenamed+0-0

Renamed from example/src-tauri/.gitignore. The contents are unchanged.

example/src-tauri/Cargo.lock examples/tray-with-submenus/src-tauri/Cargo.lockrenamed+0-0

Renamed from example/src-tauri/Cargo.lock. The contents are unchanged.

example/src-tauri/Cargo.toml examples/tray-with-submenus/src-tauri/Cargo.tomlrenamed+4-1
Changes to examples/tray-with-submenus/src-tauri/Cargo.toml
@@ -17,7 +17,10 @@ tauri-build = { version = "2.1.1", features = [] }
1717[dependencies]
1818serde_json = "1.0.140"
1919serde = { version = "1.0.219", features = [ "derive" ] }
20tauri = { version = "2.4.1", features = [ "tray-icon", "image-png" ] }
20tauri = { version = "2.4.1", features = [
21 "tray-icon",
22 "image-png"
23] }
2124
2225[features]
2326# this feature is used for production builds or when `devPath` points to the filesystem
example/src-tauri/build.rs examples/tray-with-submenus/src-tauri/build.rsrenamed+0-0

Renamed from example/src-tauri/build.rs. The contents are unchanged.

example/src-tauri/capabilities/default.json examples/tray-with-submenus/src-tauri/capabilities/default.jsonrenamed+0-0

Renamed from example/src-tauri/capabilities/default.json. The contents are unchanged.

example/src-tauri/icons/128x128.png examples/tray-with-submenus/src-tauri/icons/128x128.pngrenamed+0-0

Renamed from example/src-tauri/icons/128x128.png. The contents are unchanged.

example/src-tauri/icons/128x128@2x.png examples/tray-with-submenus/src-tauri/icons/128x128@2x.pngrenamed+0-0

Renamed from example/src-tauri/icons/128x128@2x.png. The contents are unchanged.

example/src-tauri/icons/32x32.png examples/tray-with-submenus/src-tauri/icons/32x32.pngrenamed+0-0

Renamed from example/src-tauri/icons/32x32.png. The contents are unchanged.

example/src-tauri/icons/Square107x107Logo.png examples/tray-with-submenus/src-tauri/icons/Square107x107Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square107x107Logo.png. The contents are unchanged.

example/src-tauri/icons/Square142x142Logo.png examples/tray-with-submenus/src-tauri/icons/Square142x142Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square142x142Logo.png. The contents are unchanged.

example/src-tauri/icons/Square150x150Logo.png examples/tray-with-submenus/src-tauri/icons/Square150x150Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square150x150Logo.png. The contents are unchanged.

example/src-tauri/icons/Square284x284Logo.png examples/tray-with-submenus/src-tauri/icons/Square284x284Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square284x284Logo.png. The contents are unchanged.

example/src-tauri/icons/Square30x30Logo.png examples/tray-with-submenus/src-tauri/icons/Square30x30Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square30x30Logo.png. The contents are unchanged.

example/src-tauri/icons/Square310x310Logo.png examples/tray-with-submenus/src-tauri/icons/Square310x310Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square310x310Logo.png. The contents are unchanged.

example/src-tauri/icons/Square44x44Logo.png examples/tray-with-submenus/src-tauri/icons/Square44x44Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square44x44Logo.png. The contents are unchanged.

example/src-tauri/icons/Square71x71Logo.png examples/tray-with-submenus/src-tauri/icons/Square71x71Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square71x71Logo.png. The contents are unchanged.

example/src-tauri/icons/Square89x89Logo.png examples/tray-with-submenus/src-tauri/icons/Square89x89Logo.pngrenamed+0-0

Renamed from example/src-tauri/icons/Square89x89Logo.png. The contents are unchanged.

example/src-tauri/icons/StoreLogo.png examples/tray-with-submenus/src-tauri/icons/StoreLogo.pngrenamed+0-0

Renamed from example/src-tauri/icons/StoreLogo.png. The contents are unchanged.

example/src-tauri/icons/icon.icns examples/tray-with-submenus/src-tauri/icons/icon.icnsrenamed+0-0

Renamed from example/src-tauri/icons/icon.icns. The contents are unchanged.

example/src-tauri/icons/icon.ico examples/tray-with-submenus/src-tauri/icons/icon.icorenamed+0-0

Renamed from example/src-tauri/icons/icon.ico. The contents are unchanged.

example/src-tauri/icons/icon.png examples/tray-with-submenus/src-tauri/icons/icon.pngrenamed+0-0

Renamed from example/src-tauri/icons/icon.png. The contents are unchanged.

example/src-tauri/src/main.rs examples/tray-with-submenus/src-tauri/src/main.rsrenamed+0-0

Renamed from example/src-tauri/src/main.rs. The contents are unchanged.

example/src-tauri/tauri.conf.json examples/tray-with-submenus/src-tauri/tauri.conf.jsonrenamed+0-0

Renamed from example/src-tauri/tauri.conf.json. The contents are unchanged.

example/src/App.vue examples/tray-with-submenus/src/App.vuerenamed+0-0

Renamed from example/src/App.vue. The contents are unchanged.

example/src/assets/vue.svg examples/tray-with-submenus/src/assets/vue.svgrenamed+0-0

Renamed from example/src/assets/vue.svg. The contents are unchanged.

example/src/components/HelloWorld.vue examples/tray-with-submenus/src/components/HelloWorld.vuerenamed+0-0

Renamed from example/src/components/HelloWorld.vue. The contents are unchanged.

example/src/main.js examples/tray-with-submenus/src/main.jsrenamed+0-0

Renamed from example/src/main.js. The contents are unchanged.

example/src/style.css examples/tray-with-submenus/src/style.cssrenamed+0-0

Renamed from example/src/style.css. The contents are unchanged.

examples/tray-with-submenus/src/tray.jsadded+142-0
Changes to examples/tray-with-submenus/src/tray.js
@@ -0,0 +1,142 @@
1import { window } from '@tauri-apps/api'
2import { defaultWindowIcon } from '@tauri-apps/api/app'
3import { Image } from '@tauri-apps/api/image'
4import { CheckMenuItem, IconMenuItem, Menu, MenuItem, PredefinedMenuItem, Submenu } from '@tauri-apps/api/menu'
5import { TrayIcon } from '@tauri-apps/api/tray'
6
7/**
8 * Initialize the system tray icon and menu
9 */
10export async function initTray() {
11 try {
12 // eslint-disable-next-line no-console
13 console.log('Initializing system tray...')
14
15 const appWindow = window.getCurrentWindow()
16
17 const icon = await Image.fromPath('../public/icon.png')
18
19 const separator = await PredefinedMenuItem.new({
20 text: 'separator-text',
21 item: 'Separator',
22 })
23
24 const checkMenuItem = await CheckMenuItem.new({
25 id: 'en',
26 text: 'Check Menu Item',
27 checked: true,
28 action: () => {
29 // eslint-disable-next-line no-console
30 console.log('Check Menu Item Clicked')
31 },
32 })
33
34 const iconMenuItem = await IconMenuItem.new({
35 id: 'icon_item',
36 text: 'Icon Menu Item',
37 icon,
38 action: () => {
39 // eslint-disable-next-line no-console
40 console.log('icon pressed')
41 },
42 })
43
44 const fileSubmenu = await Submenu.new({
45 text: 'File',
46 items: [
47 await MenuItem.new({
48 id: 'new',
49 text: 'New',
50 action: () => {
51 // eslint-disable-next-line no-console
52 console.log('New clicked')
53 },
54 }),
55 await MenuItem.new({
56 id: 'open',
57 text: 'Open',
58 action: () => {
59 // eslint-disable-next-line no-console
60 console.log('Open clicked')
61 },
62 }),
63 await MenuItem.new({
64 id: 'save_as',
65 text: 'Save As...',
66 action: () => {
67 // eslint-disable-next-line no-console
68 console.log('Save As clicked')
69 },
70 }),
71 ],
72 })
73
74 const editSubmenu = await Submenu.new({
75 text: 'Edit',
76 items: [
77 await MenuItem.new({
78 id: 'undo',
79 text: 'Undo',
80 action: () => {
81 // eslint-disable-next-line no-console
82 console.log('Undo clicked')
83 },
84 }),
85 await MenuItem.new({
86 id: 'redo',
87 text: 'Redo',
88 action: () => {
89 // eslint-disable-next-line no-console
90 console.log('Redo clicked')
91 },
92 }),
93 ],
94 })
95
96 const menu = await Menu.new({
97 items: [
98 checkMenuItem,
99 separator,
100 fileSubmenu,
101 separator,
102 editSubmenu,
103 separator,
104 iconMenuItem,
105 await MenuItem.new({
106 id: 'quit',
107 text: 'Quit',
108 action: () => {
109 // eslint-disable-next-line no-console
110 console.log('Quit pressed')
111 },
112 }),
113 ],
114 })
115
116 // Create the tray icon with minimal options
117 const trayIcon = await TrayIcon.new({
118 id: 'submenu-tray',
119 menu,
120 icon: await defaultWindowIcon(),
121 tooltip: 'Tauri Example App',
122 iconAsTemplate: true,
123 })
124
125 // eslint-disable-next-line no-console
126 console.log('System tray initialized with ID:', trayIcon.id)
127
128 // Setup window close handler to minimize to tray instead of quitting
129 appWindow.onCloseRequested(async (event) => {
130 // eslint-disable-next-line no-console
131 console.log('Window close requested, minimizing to tray instead')
132 event.preventDefault()
133 await appWindow.hide()
134 })
135
136 return trayIcon
137 }
138 catch (error) {
139 console.error('Failed to initialize system tray:', error)
140 throw error
141 }
142}
examples/tray-with-submenus/tsconfig.jsonadded+3-0
Changes to examples/tray-with-submenus/tsconfig.json
@@ -0,0 +1,3 @@
1{
2 "extends": "../../tsconfig.json"
3}
example/vite.config.tauri.ts examples/tray-with-submenus/vite.config.tauri.tsrenamed+1-1
Changes to examples/tray-with-submenus/vite.config.tauri.ts
@@ -1,6 +1,6 @@
11import type { UserConfig } from 'vite'
22import { defineConfig, mergeConfig } from 'vite'
3import { tauri } from '../packages/vite-plugin-tauri/src'
3import { tauri } from '../../packages/vite-plugin-tauri/src'
44import baseViteConfig from './vite.config'
55
66// https://vitejs.dev/config
example/vite.config.ts examples/tray-with-submenus/vite.config.tsrenamed+0-0

Renamed from example/vite.config.ts. The contents are unchanged.

packages/vite-plugin-tauri/src/tauri.tsmodified+2-0
Changes to packages/vite-plugin-tauri/src/tauri.ts
@@ -179,6 +179,7 @@ export function tauri(config?: TauriConfig): PluginOption {
179179 'core:tray:default',
180180 'core:menu:default',
181181 'core:app:allow-default-window-icon',
182 'core:image:allow-from-path',
182183 ],
183184 },
184185 ],
@@ -258,6 +259,7 @@ export function tauri(config?: TauriConfig): PluginOption {
258259 'core:tray:default',
259260 'core:menu:default',
260261 'core:app:allow-default-window-icon',
262 'core:image:allow-from-path',
261263 ],
262264 },
263265 ],