From 7b766a391a366115f3cc5bbf70ce14911129a612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Wed, 20 Aug 2025 14:07:59 +0200 Subject: [PATCH 1/2] Reflect connection state in system tray --- .gitignore | 2 + package.json | 12 +- pnpm-lock.yaml | 428 +++++++++--------- src-tauri/Cargo.lock | 117 +++-- .../icons/tray-32x32-black-active.png | Bin 0 -> 521 bytes .../icons/tray-32x32-color-active.png | Bin 0 -> 636 bytes .../icons/tray-32x32-gray-active.png | Bin 0 -> 587 bytes .../icons/tray-32x32-white-active.png | Bin 0 -> 537 bytes src-tauri/src/active_connections.rs | 4 +- src-tauri/src/app_config.rs | 2 +- src-tauri/src/bin/defguard-client.rs | 19 +- src-tauri/src/commands.rs | 18 +- src-tauri/src/tray.rs | 54 ++- .../AddInstanceDeviceForm.tsx | 9 +- 14 files changed, 344 insertions(+), 321 deletions(-) create mode 100644 src-tauri/resources/icons/tray-32x32-black-active.png create mode 100644 src-tauri/resources/icons/tray-32x32-color-active.png create mode 100644 src-tauri/resources/icons/tray-32x32-gray-active.png create mode 100644 src-tauri/resources/icons/tray-32x32-white-active.png diff --git a/.gitignore b/.gitignore index dbfa7123..cd36e384 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ dist-ssr .direnv .envrc + +src-tauri/gen/ diff --git a/package.json b/package.json index 252e245c..a677d9ba 100644 --- a/package.json +++ b/package.json @@ -56,9 +56,9 @@ "@tauri-apps/api": "^2.8.0", "@tauri-apps/plugin-clipboard-manager": "^2.3.0", "@tauri-apps/plugin-deep-link": "^2.4.1", - "@tauri-apps/plugin-dialog": "^2.3.2", - "@tauri-apps/plugin-fs": "^2.4.1", - "@tauri-apps/plugin-http": "^2.5.1", + "@tauri-apps/plugin-dialog": "^2.3.3", + "@tauri-apps/plugin-fs": "^2.4.2", + "@tauri-apps/plugin-http": "^2.5.2", "@tauri-apps/plugin-log": "^2.6.0", "@tauri-apps/plugin-notification": "^2.3.0", "@tauri-apps/plugin-window-state": "^2.4.0", @@ -98,15 +98,15 @@ "rxjs": "^7.8.2", "use-breakpoint": "^4.0.6", "zod": "^3.25.76", - "zustand": "^5.0.7" + "zustand": "^5.0.8" }, "devDependencies": { - "@biomejs/biome": "=2.1.4", + "@biomejs/biome": "^2.2.0", "@hookform/devtools": "^4.4.0", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.85.5", "@tanstack/react-query-devtools": "^5.85.5", - "@tauri-apps/cli": "^2.8.0", + "@tauri-apps/cli": "^2.8.1", "@types/file-saver": "^2.0.7", "@types/lodash-es": "^4.17.12", "@types/node": "^24.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 945e81d5..d1928e97 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,14 +39,14 @@ importers: specifier: ^2.4.1 version: 2.4.1 '@tauri-apps/plugin-dialog': - specifier: ^2.3.2 - version: 2.3.2 + specifier: ^2.3.3 + version: 2.3.3 '@tauri-apps/plugin-fs': - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^2.4.2 + version: 2.4.2 '@tauri-apps/plugin-http': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.2 + version: 2.5.2 '@tauri-apps/plugin-log': specifier: ^2.6.0 version: 2.6.0 @@ -165,12 +165,12 @@ importers: specifier: ^3.25.76 version: 3.25.76 zustand: - specifier: ^5.0.7 - version: 5.0.7(@types/react@18.3.23)(immer@10.1.1)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) + specifier: ^5.0.8 + version: 5.0.8(@types/react@18.3.23)(immer@10.1.1)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) devDependencies: '@biomejs/biome': - specifier: '=2.1.4' - version: 2.1.4 + specifier: ^2.2.0 + version: 2.2.0 '@hookform/devtools': specifier: ^4.4.0 version: 4.4.0(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -184,8 +184,8 @@ importers: specifier: ^5.85.5 version: 5.85.5(@tanstack/react-query@5.85.5(react@18.3.1))(react@18.3.1) '@tauri-apps/cli': - specifier: ^2.8.0 - version: 2.8.0 + specifier: ^2.8.1 + version: 2.8.1 '@types/file-saver': specifier: ^2.0.7 version: 2.0.7 @@ -328,55 +328,55 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.1.4': - resolution: {integrity: sha512-QWlrqyxsU0FCebuMnkvBIkxvPqH89afiJzjMl+z67ybutse590jgeaFdDurE9XYtzpjRGTI1tlUZPGWmbKsElA==} + '@biomejs/biome@2.2.0': + resolution: {integrity: sha512-3On3RSYLsX+n9KnoSgfoYlckYBoU6VRM22cw1gB4Y0OuUVSYd/O/2saOJMrA4HFfA1Ff0eacOvMN1yAAvHtzIw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.1.4': - resolution: {integrity: sha512-sCrNENE74I9MV090Wq/9Dg7EhPudx3+5OiSoQOkIe3DLPzFARuL1dOwCWhKCpA3I5RHmbrsbNSRfZwCabwd8Qg==} + '@biomejs/cli-darwin-arm64@2.2.0': + resolution: {integrity: sha512-zKbwUUh+9uFmWfS8IFxmVD6XwqFcENjZvEyfOxHs1epjdH3wyyMQG80FGDsmauPwS2r5kXdEM0v/+dTIA9FXAg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.1.4': - resolution: {integrity: sha512-gOEICJbTCy6iruBywBDcG4X5rHMbqCPs3clh3UQ+hRKlgvJTk4NHWQAyHOXvaLe+AxD1/TNX1jbZeffBJzcrOw==} + '@biomejs/cli-darwin-x64@2.2.0': + resolution: {integrity: sha512-+OmT4dsX2eTfhD5crUOPw3RPhaR+SKVspvGVmSdZ9y9O/AgL8pla6T4hOn1q+VAFBHuHhsdxDRJgFCSC7RaMOw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.1.4': - resolution: {integrity: sha512-nYr7H0CyAJPaLupFE2cH16KZmRC5Z9PEftiA2vWxk+CsFkPZQ6dBRdcC6RuS+zJlPc/JOd8xw3uCCt9Pv41WvQ==} + '@biomejs/cli-linux-arm64-musl@2.2.0': + resolution: {integrity: sha512-egKpOa+4FL9YO+SMUMLUvf543cprjevNc3CAgDNFLcjknuNMcZ0GLJYa3EGTCR2xIkIUJDVneBV3O9OcIlCEZQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.1.4': - resolution: {integrity: sha512-juhEkdkKR4nbUi5k/KRp1ocGPNWLgFRD4NrHZSveYrD6i98pyvuzmS9yFYgOZa5JhaVqo0HPnci0+YuzSwT2fw==} + '@biomejs/cli-linux-arm64@2.2.0': + resolution: {integrity: sha512-6eoRdF2yW5FnW9Lpeivh7Mayhq0KDdaDMYOJnH9aT02KuSIX5V1HmWJCQQPwIQbhDh68Zrcpl8inRlTEan0SXw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.1.4': - resolution: {integrity: sha512-lvwvb2SQQHctHUKvBKptR6PLFCM7JfRjpCCrDaTmvB7EeZ5/dQJPhTYBf36BE/B4CRWR2ZiBLRYhK7hhXBCZAg==} + '@biomejs/cli-linux-x64-musl@2.2.0': + resolution: {integrity: sha512-I5J85yWwUWpgJyC1CcytNSGusu2p9HjDnOPAFG4Y515hwRD0jpR9sT9/T1cKHtuCvEQ/sBvx+6zhz9l9wEJGAg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.1.4': - resolution: {integrity: sha512-Eoy9ycbhpJVYuR+LskV9s3uyaIkp89+qqgqhGQsWnp/I02Uqg2fXFblHJOpGZR8AxdB9ADy87oFVxn9MpFKUrw==} + '@biomejs/cli-linux-x64@2.2.0': + resolution: {integrity: sha512-5UmQx/OZAfJfi25zAnAGHUMuOd+LOsliIt119x2soA2gLggQYrVPA+2kMUxR6Mw5M1deUF/AWWP2qpxgH7Nyfw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.1.4': - resolution: {integrity: sha512-3WRYte7orvyi6TRfIZkDN9Jzoogbv+gSvR+b9VOXUg1We1XrjBg6WljADeVEaKTvOcpVdH0a90TwyOQ6ue4fGw==} + '@biomejs/cli-win32-arm64@2.2.0': + resolution: {integrity: sha512-n9a1/f2CwIDmNMNkFs+JI0ZjFnMO0jdOyGNtihgUNFnlmd84yIYY2KMTBmMV58ZlVHjgmY5Y6E1hVTnSRieggA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.1.4': - resolution: {integrity: sha512-tBc+W7anBPSFXGAoQW+f/+svkpt8/uXfRwDzN1DvnatkRMt16KIYpEi/iw8u9GahJlFv98kgHcIrSsZHZTR0sw==} + '@biomejs/cli-win32-x64@2.2.0': + resolution: {integrity: sha512-Nawu5nHjP/zPKTIryh2AavzTc/KEg4um/MxWdXW0A6P/RZOyIpa7+QSjeXwAwX/utJGaCoXRPWtF3m5U/bB3Ww==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -612,8 +612,8 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@gerrit0/mini-shiki@3.9.2': - resolution: {integrity: sha512-Tvsj+AOO4Z8xLRJK900WkyfxHsZQu+Zm1//oT1w443PO6RiYMoq/4NGOhaNuZoUMYsjKIAPVQ6eOFMddj6yphQ==} + '@gerrit0/mini-shiki@3.11.0': + resolution: {integrity: sha512-ooCDMAOKv71O7MszbXjSQGcI6K5T6NKlemQZOBHLq7Sv/oXCRfYbZ7UgbzFdl20lSXju6Juds4I3y30R6rHA4Q==} '@hookform/devtools@4.4.0': resolution: {integrity: sha512-Mtlic+uigoYBPXlfvPBfiYYUZuyMrD3pTjDpVIhL6eCZTvQkHsKBSKeZCvXWUZr8fqrkzDg27N+ZuazLKq6Vmg==} @@ -672,117 +672,117 @@ packages: '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rollup/rollup-android-arm-eabi@4.46.3': - resolution: {integrity: sha512-UmTdvXnLlqQNOCJnyksjPs1G4GqXNGW1LrzCe8+8QoaLhhDeTXYBgJ3k6x61WIhlHX2U+VzEJ55TtIjR/HTySA==} + '@rollup/rollup-android-arm-eabi@4.46.4': + resolution: {integrity: sha512-B2wfzCJ+ps/OBzRjeds7DlJumCU3rXMxJJS1vzURyj7+KBHGONm7c9q1TfdBl4vCuNMkDvARn3PBl2wZzuR5mw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.3': - resolution: {integrity: sha512-8NoxqLpXm7VyeI0ocidh335D6OKT0UJ6fHdnIxf3+6oOerZZc+O7r+UhvROji6OspyPm+rrIdb1gTXtVIqn+Sg==} + '@rollup/rollup-android-arm64@4.46.4': + resolution: {integrity: sha512-FGJYXvYdn8Bs6lAlBZYT5n+4x0ciEp4cmttsvKAZc/c8/JiPaQK8u0c/86vKX8lA7OY/+37lIQSe0YoAImvBAA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.3': - resolution: {integrity: sha512-csnNavqZVs1+7/hUKtgjMECsNG2cdB8F7XBHP6FfQjqhjF8rzMzb3SLyy/1BG7YSfQ+bG75Ph7DyedbUqwq1rA==} + '@rollup/rollup-darwin-arm64@4.46.4': + resolution: {integrity: sha512-/9qwE/BM7ATw/W/OFEMTm3dmywbJyLQb4f4v5nmOjgYxPIGpw7HaxRi6LnD4Pjn/q7k55FGeHe1/OD02w63apA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.3': - resolution: {integrity: sha512-r2MXNjbuYabSIX5yQqnT8SGSQ26XQc8fmp6UhlYJd95PZJkQD1u82fWP7HqvGUf33IsOC6qsiV+vcuD4SDP6iw==} + '@rollup/rollup-darwin-x64@4.46.4': + resolution: {integrity: sha512-QkWfNbeRuzFnv2d0aPlrzcA3Ebq2mE8kX/5Pl7VdRShbPBjSnom7dbT8E3Jmhxo2RL784hyqGvR5KHavCJQciw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.3': - resolution: {integrity: sha512-uluObTmgPJDuJh9xqxyr7MV61Imq+0IvVsAlWyvxAaBSNzCcmZlhfYcRhCdMaCsy46ccZa7vtDDripgs9Jkqsw==} + '@rollup/rollup-freebsd-arm64@4.46.4': + resolution: {integrity: sha512-+ToyOMYnSfV8D+ckxO6NthPln/PDNp1P6INcNypfZ7muLmEvPKXqduUiD8DlJpMMT8LxHcE5W0dK9kXfJke9Zw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.3': - resolution: {integrity: sha512-AVJXEq9RVHQnejdbFvh1eWEoobohUYN3nqJIPI4mNTMpsyYN01VvcAClxflyk2HIxvLpRcRggpX1m9hkXkpC/A==} + '@rollup/rollup-freebsd-x64@4.46.4': + resolution: {integrity: sha512-cGT6ey/W+sje6zywbLiqmkfkO210FgRz7tepWAzzEVgQU8Hn91JJmQWNqs55IuglG8sJdzk7XfNgmGRtcYlo1w==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.3': - resolution: {integrity: sha512-byyflM+huiwHlKi7VHLAYTKr67X199+V+mt1iRgJenAI594vcmGGddWlu6eHujmcdl6TqSNnvqaXJqZdnEWRGA==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.4': + resolution: {integrity: sha512-9fhTJyOb275w5RofPSl8lpr4jFowd+H4oQKJ9XTYzD1JWgxdZKE8bA6d4npuiMemkecQOcigX01FNZNCYnQBdA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.3': - resolution: {integrity: sha512-aLm3NMIjr4Y9LklrH5cu7yybBqoVCdr4Nvnm8WB7PKCn34fMCGypVNpGK0JQWdPAzR/FnoEoFtlRqZbBBLhVoQ==} + '@rollup/rollup-linux-arm-musleabihf@4.46.4': + resolution: {integrity: sha512-+6kCIM5Zjvz2HwPl/udgVs07tPMIp1VU2Y0c72ezjOvSvEfAIWsUgpcSDvnC7g9NrjYR6X9bZT92mZZ90TfvXw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.3': - resolution: {integrity: sha512-VtilE6eznJRDIoFOzaagQodUksTEfLIsvXymS+UdJiSXrPW7Ai+WG4uapAc3F7Hgs791TwdGh4xyOzbuzIZrnw==} + '@rollup/rollup-linux-arm64-gnu@4.46.4': + resolution: {integrity: sha512-SWuXdnsayCZL4lXoo6jn0yyAj7TTjWE4NwDVt9s7cmu6poMhtiras5c8h6Ih6Y0Zk6Z+8t/mLumvpdSPTWub2Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.3': - resolution: {integrity: sha512-dG3JuS6+cRAL0GQ925Vppafi0qwZnkHdPeuZIxIPXqkCLP02l7ka+OCyBoDEv8S+nKHxfjvjW4OZ7hTdHkx8/w==} + '@rollup/rollup-linux-arm64-musl@4.46.4': + resolution: {integrity: sha512-vDknMDqtMhrrroa5kyX6tuC0aRZZlQ+ipDfbXd2YGz5HeV2t8HOl/FDAd2ynhs7Ki5VooWiiZcCtxiZ4IjqZwQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.3': - resolution: {integrity: sha512-iU8DxnxEKJptf8Vcx4XvAUdpkZfaz0KWfRrnIRrOndL0SvzEte+MTM7nDH4A2Now4FvTZ01yFAgj6TX/mZl8hQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.4': + resolution: {integrity: sha512-mCBkjRZWhvjtl/x+Bd4fQkWZT8canStKDxGrHlBiTnZmJnWygGcvBylzLVCZXka4dco5ymkWhZlLwKCGFF4ivw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.46.3': - resolution: {integrity: sha512-VrQZp9tkk0yozJoQvQcqlWiqaPnLM6uY1qPYXvukKePb0fqaiQtOdMJSxNFUZFsGw5oA5vvVokjHrx8a9Qsz2A==} + '@rollup/rollup-linux-ppc64-gnu@4.46.4': + resolution: {integrity: sha512-YMdz2phOTFF+Z66dQfGf0gmeDSi5DJzY5bpZyeg9CPBkV9QDzJ1yFRlmi/j7WWRf3hYIWrOaJj5jsfwgc8GTHQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.3': - resolution: {integrity: sha512-uf2eucWSUb+M7b0poZ/08LsbcRgaDYL8NCGjUeFMwCWFwOuFcZ8D9ayPl25P3pl+D2FH45EbHdfyUesQ2Lt9wA==} + '@rollup/rollup-linux-riscv64-gnu@4.46.4': + resolution: {integrity: sha512-r0WKLSfFAK8ucG024v2yiLSJMedoWvk8yWqfNICX28NHDGeu3F/wBf8KG6mclghx4FsLePxJr/9N8rIj1PtCnw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.3': - resolution: {integrity: sha512-7tnUcDvN8DHm/9ra+/nF7lLzYHDeODKKKrh6JmZejbh1FnCNZS8zMkZY5J4sEipy2OW1d1Ncc4gNHUd0DLqkSg==} + '@rollup/rollup-linux-riscv64-musl@4.46.4': + resolution: {integrity: sha512-IaizpPP2UQU3MNyPH1u0Xxbm73D+4OupL0bjo4Hm0496e2wg3zuvoAIhubkD1NGy9fXILEExPQy87mweujEatA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.3': - resolution: {integrity: sha512-MUpAOallJim8CsJK+4Lc9tQzlfPbHxWDrGXZm2z6biaadNpvh3a5ewcdat478W+tXDoUiHwErX/dOql7ETcLqg==} + '@rollup/rollup-linux-s390x-gnu@4.46.4': + resolution: {integrity: sha512-aCM29orANR0a8wk896p6UEgIfupReupnmISz6SUwMIwTGaTI8MuKdE0OD2LvEg8ondDyZdMvnaN3bW4nFbATPA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.3': - resolution: {integrity: sha512-F42IgZI4JicE2vM2PWCe0N5mR5vR0gIdORPqhGQ32/u1S1v3kLtbZ0C/mi9FFk7C5T0PgdeyWEPajPjaUpyoKg==} + '@rollup/rollup-linux-x64-gnu@4.46.4': + resolution: {integrity: sha512-0Xj1vZE3cbr/wda8d/m+UeuSL+TDpuozzdD4QaSzu/xSOMK0Su5RhIkF7KVHFQsobemUNHPLEcYllL7ZTCP/Cg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.3': - resolution: {integrity: sha512-oLc+JrwwvbimJUInzx56Q3ujL3Kkhxehg7O1gWAYzm8hImCd5ld1F2Gry5YDjR21MNb5WCKhC9hXgU7rRlyegQ==} + '@rollup/rollup-linux-x64-musl@4.46.4': + resolution: {integrity: sha512-kM/orjpolfA5yxsx84kI6bnK47AAZuWxglGKcNmokw2yy9i5eHY5UAjcX45jemTJnfHAWo3/hOoRqEeeTdL5hw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.46.3': - resolution: {integrity: sha512-lOrQ+BVRstruD1fkWg9yjmumhowR0oLAAzavB7yFSaGltY8klttmZtCLvOXCmGE9mLIn8IBV/IFrQOWz5xbFPg==} + '@rollup/rollup-win32-arm64-msvc@4.46.4': + resolution: {integrity: sha512-cNLH4psMEsWKILW0isbpQA2OvjXLbKvnkcJFmqAptPQbtLrobiapBJVj6RoIvg6UXVp5w0wnIfd/Q56cNpF+Ew==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.3': - resolution: {integrity: sha512-vvrVKPRS4GduGR7VMH8EylCBqsDcw6U+/0nPDuIjXQRbHJc6xOBj+frx8ksfZAh6+Fptw5wHrN7etlMmQnPQVg==} + '@rollup/rollup-win32-ia32-msvc@4.46.4': + resolution: {integrity: sha512-OiEa5lRhiANpv4SfwYVgQ3opYWi/QmPDC5ve21m8G9pf6ZO+aX1g2EEF1/IFaM1xPSP7mK0msTRXlPs6mIagkg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.3': - resolution: {integrity: sha512-fi3cPxCnu3ZeM3EwKZPgXbWoGzm2XHgB/WShKI81uj8wG0+laobmqy5wbgEwzstlbLu4MyO8C19FyhhWseYKNQ==} + '@rollup/rollup-win32-x64-msvc@4.46.4': + resolution: {integrity: sha512-IKL9mewGZ5UuuX4NQlwOmxPyqielvkAPUS2s1cl6yWjjQvyN3h5JTdVFGD5Jr5xMjRC8setOfGQDVgX8V+dkjg==} cpu: [x64] os: [win32] - '@shikijs/engine-oniguruma@3.10.0': - resolution: {integrity: sha512-O7ofyEUm4uDBlfd+2YPc7GHA72Kr3eUw5wSgZzgK6GUniD52106diH9Fo7+7l+lhBiyWntYcvzGK8QMciwf+Xw==} + '@shikijs/engine-oniguruma@3.11.0': + resolution: {integrity: sha512-4DwIjIgETK04VneKbfOE4WNm4Q7WC1wo95wv82PoHKdqX4/9qLRUwrfKlmhf0gAuvT6GHy0uc7t9cailk6Tbhw==} - '@shikijs/langs@3.10.0': - resolution: {integrity: sha512-uE9ojRozrm1PmUw2aM8EbHpT/XdWzSdv/sWRN5MCMdXMW1eOl4bMxWAlY5yhZj0GghYfMbBzMlcDKqrIjOue/Q==} + '@shikijs/langs@3.11.0': + resolution: {integrity: sha512-Njg/nFL4HDcf/ObxcK2VeyidIq61EeLmocrwTHGGpOQx0BzrPWM1j55XtKQ1LvvDWH15cjQy7rg96aJ1/l63uw==} - '@shikijs/themes@3.10.0': - resolution: {integrity: sha512-JDnZKjYs4nhBniOmVILfEFZCA9JxxLnxG4PRQQQudn8DREhoWQelw7fhv+3Up8phzkoZWQ9TW2jp9k+6DjJS5A==} + '@shikijs/themes@3.11.0': + resolution: {integrity: sha512-BhhWRzCTEk2CtWt4S4bgsOqPJRkapvxdsifAwqP+6mk5uxboAQchc0etiJ0iIasxnMsb764qGD24DK9albcU9Q==} - '@shikijs/types@3.10.0': - resolution: {integrity: sha512-PAeyajDDhdzefMiSZn7ENCwVaACMnO53+p5pSrJpIQOJTSX+4Qn28Y5e7I6v9wkJNyepRFfbZmzmbbnzjxBMEA==} + '@shikijs/types@3.11.0': + resolution: {integrity: sha512-RB7IMo2E7NZHyfkqAuaf4CofyY8bPzjWPjJRzn6SEak3b46fIQyG6Vx5fG/obqkfppQ+g8vEsiD7Uc6lqQt32Q==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -1006,74 +1006,74 @@ packages: '@tauri-apps/api@2.8.0': resolution: {integrity: sha512-ga7zdhbS2GXOMTIZRT0mYjKJtR9fivsXzsyq5U3vjDL0s6DTMwYRm0UHNjzTY5dh4+LSC68Sm/7WEiimbQNYlw==} - '@tauri-apps/cli-darwin-arm64@2.8.0': - resolution: {integrity: sha512-+Ab2XNCTcJztTGM+1ym4uIDGOH7r6tYxwjDqa9/KxkrHdRYeoMxVBa5zQHsnJ/KXfynqagK86t61ys8Ei/tv0Q==} + '@tauri-apps/cli-darwin-arm64@2.8.1': + resolution: {integrity: sha512-301XWcDozcvJ79uMRquSvgI4vvAxetFs+reMpBI1U5mSWixjUqxZjxs9UDJAtE+GFXdGYTjSLUxCKe5WBDKZ/A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.8.0': - resolution: {integrity: sha512-DrBK3tf+CWmYC3ma+mhYn7LbXiPARLx27SjYCaErRK6/4hgmOgD0xrDhcRhYT2w7uY1iPhsfkx+ZOWQexH9qOw==} + '@tauri-apps/cli-darwin-x64@2.8.1': + resolution: {integrity: sha512-fJpOD/jWNy3sn27mjPGexBxGPTCgoCu29C+7qBV8kKJQGrRB4/zJk2zMqcKMjV/1Dma47n+saQWXLFwGpRUHgQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.8.0': - resolution: {integrity: sha512-ZlvSgEcYNQBn07dY+4QOChobnJwVtElMSI7NH+oA6x7pQu2n5JVW7Mu3nntIA05IDEArVVURGA/walDuoR0wIQ==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.8.1': + resolution: {integrity: sha512-BcrZiInB3xjdV/Q2yv88aAz4Ajrxomd1+oePUO8ZWVpdhFwMZaAAOMbpPVgrlanGBeSzU7Aim9i1Opz/+JYiDA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.8.0': - resolution: {integrity: sha512-wSQgTDFVJjXDMPrh/Muzl5p1JKAsSUhlT12HYDEc5aEmNHxWH0ng4Gp0QADhwlzUZkiJMqvMva2HzJijQnjELA==} + '@tauri-apps/cli-linux-arm64-gnu@2.8.1': + resolution: {integrity: sha512-uZXaQrcdk55h4qWSe3pngg6LMUwVUIoluxXG/cmKHeq8LddlUdKpj3OaSPahLWip1Ol6hq14ysvywzsrdhM4kA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-arm64-musl@2.8.0': - resolution: {integrity: sha512-/bC/v5SzT2pmfWh8NhIaFx0ON4UcdI3LpDjuXeU4y+rXFXRAKKdKnKBshReHr6KC9UxzS8wGSsSe2eTfJnyXWw==} + '@tauri-apps/cli-linux-arm64-musl@2.8.1': + resolution: {integrity: sha512-VK/zwBzQY9SfyK7RSrxlIRQLJyhyssoByYWPK/FJMre8SV/y8zZ071cTQNG9dPWM1f+onI1WPTleG+TBUq/0Gw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-riscv64-gnu@2.8.0': - resolution: {integrity: sha512-hzzsrGp3SXXLuJZdjcq1mAmzr9MaBEQy1DYGEn/HEBiwE8EY1Ou27sBistGkl+X/vusmGwgmLuRKe9Mtbb7mNQ==} + '@tauri-apps/cli-linux-riscv64-gnu@2.8.1': + resolution: {integrity: sha512-bFw3zK6xkyurDR5kw2QgiU6YFlFNrfgtli3wRdTRv8zSVLZMQ2iZ8keYnd57vpvsbZ9PusFPYAMS7Fkzkf9I4g==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - '@tauri-apps/cli-linux-x64-gnu@2.8.0': - resolution: {integrity: sha512-5z0uKFYGcy8pW8dDooRExmCtunz9BEVETlbNTaarTeXueGk1t3jH43k3uQ0/gIeYvL0X/8oWf848CzJdTSpoLQ==} + '@tauri-apps/cli-linux-x64-gnu@2.8.1': + resolution: {integrity: sha512-zOnFX+Rppuz0UVVSeCi67lMet8le+yT4UIiQ6t/QYGtpoWO/D4GpMoVYehJlR14klNXrC2CRxT9b3BUWTCEBwA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-linux-x64-musl@2.8.0': - resolution: {integrity: sha512-7uHwJUhE5e9NqSPrjAuN69X+I32uxN0V3UGwUB6eLhV7MhCyjroqVdfFqOkIT2rUE/OtSGQiUO7z0ZGfY3OIdQ==} + '@tauri-apps/cli-linux-x64-musl@2.8.1': + resolution: {integrity: sha512-gLy6eisaeOTC6NQirs3a0XZNCVT/i7JPYHkXx6ArH6+Kb9IU8ogthTY4MQoYbkWmdOp3ijKX+RT1dD3IZURrEg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-win32-arm64-msvc@2.8.0': - resolution: {integrity: sha512-Emzj0BswRbKp3daDZWS7jbiSzJ0pUcaXFIQYC8sHc34vQe4RwbHZc99XKf+J6XRAznXs0piDvW9HQbXs3uVvXA==} + '@tauri-apps/cli-win32-arm64-msvc@2.8.1': + resolution: {integrity: sha512-ciZ93Dm847zFDqRyc1e0YRiu/cdWne1bMhvifcZOibbyqSKB9o+b95Y5axMtXqR4Wsd2mHiC5TE+MVF3NDsdEw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.8.0': - resolution: {integrity: sha512-xHWSyiZCzyc5+7djVaB1soOTe++c/siTZ0EC05Or7QYQRQsKRxDpeTCgheN7Z/Sv1cdlvkK1OZgp4+ddB4hTCA==} + '@tauri-apps/cli-win32-ia32-msvc@2.8.1': + resolution: {integrity: sha512-uWUa503Pw53XidUvcqWOvVsBY7vpQs+ZlTyQgXSnPuTiMF1l5bFEzqoHMvZfIL3MFG13xCAqVK1bR7lFB/6qMQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.8.0': - resolution: {integrity: sha512-EpkyVj2idqQthfxkjYcLRTaFM+TluywD4RbdVfjnLE060vPM6LYPouDizYZqXRfEsd5LCi1/VAcsqTK9BAC/zA==} + '@tauri-apps/cli-win32-x64-msvc@2.8.1': + resolution: {integrity: sha512-KmiT0vI7FMBWfk5YDQg7+WcjzuMdeaHOQ7H0podZ7lyJg2qo2DpbGp8y+fMVCRsmvQx5bW6Cyh1ArfO1kkUInA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.8.0': - resolution: {integrity: sha512-2k1xCIDVaqtQ4b0mNUbr22JyPR2EnA/o3FsHf6sT53+5FIK+yzDC17gGopUJ3ikCvvverZ/83phmno0t4KFwUw==} + '@tauri-apps/cli@2.8.1': + resolution: {integrity: sha512-ONVAfI7PFUO6MdSq9dh2YwlIb1cAezrzqrWw2+TChVskoqzDyyzncU7yXlcph/H/nR/kNDEY3E1pC8aV3TVCNQ==} engines: {node: '>= 10'} hasBin: true @@ -1083,14 +1083,14 @@ packages: '@tauri-apps/plugin-deep-link@2.4.1': resolution: {integrity: sha512-I8Bo+spcAKGhIIJ1qN/gapp/Ot3mosQL98znxr975Zn2ODAkUZ++BQ9FnTpR7PDwfIl5ANSGdIW/YU01zVTcJw==} - '@tauri-apps/plugin-dialog@2.3.2': - resolution: {integrity: sha512-cNLo9YeQSC0MF4IgXnotHsqEgJk72MBZLXmQPrLA95qTaaWiiaFQ38hIMdZ6YbGUNkr3oni3EhU+AD5jLHcdUA==} + '@tauri-apps/plugin-dialog@2.3.3': + resolution: {integrity: sha512-cWXB9QJDbLIA0v7I5QY183awazBEQNPhp19iPvrMZoJRX8SbFkhWFx1/q7zy7xGpXXzxz29qtq6z21Ho7W5Iew==} - '@tauri-apps/plugin-fs@2.4.1': - resolution: {integrity: sha512-vJlKZVGF3UAFGoIEVT6Oq5L4HGDCD78WmA4uhzitToqYiBKWAvZR61M6zAyQzHqLs0ADemkE4RSy/5sCmZm6ZQ==} + '@tauri-apps/plugin-fs@2.4.2': + resolution: {integrity: sha512-YGhmYuTgXGsi6AjoV+5mh2NvicgWBfVJHHheuck6oHD+HC9bVWPaHvCP0/Aw4pHDejwrvT8hE3+zZAaWf+hrig==} - '@tauri-apps/plugin-http@2.5.1': - resolution: {integrity: sha512-SpQ1azXEdQI0UB2NZTIPljJTDEe0bIaKzHYR/k4UQp6yzRYGLC/ktmIgEfQ2RvKAWus8GcYgGr5K6LJPbo/NZw==} + '@tauri-apps/plugin-http@2.5.2': + resolution: {integrity: sha512-x1mQKHSLDk4mS2S938OTeyk8L7QyLpCrKZCZcjkljGsvTvRMojCvI9SeJ1kaxc7t8xSilkC7WdId8xER9TIGLg==} '@tauri-apps/plugin-log@2.6.0': resolution: {integrity: sha512-gVp3l31akA1Jk2bZsTA0hMFD5/gLe49Nw1btu5lViau0QqgC2XyT79LSwvy7a44ewtQbSexchqIg7oTJKMIbXQ==} @@ -2464,8 +2464,8 @@ packages: engines: {node: '>= 0.4'} hasBin: true - rollup@4.46.3: - resolution: {integrity: sha512-RZn2XTjXb8t5g13f5YclGoilU/kwT696DIkY3sywjdZidNSi3+vseaQov7D7BZXVJCPv3pDWUN69C78GGbXsKw==} + rollup@4.46.4: + resolution: {integrity: sha512-YbxoxvoqNg9zAmw4+vzh1FkGAiZRK+LhnSrbSrSXMdZYsRPDWoshcSd/pldKRO6lWzv/e9TiJAVQyirYIeSIPQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2848,8 +2848,8 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zustand@5.0.7: - resolution: {integrity: sha512-Ot6uqHDW/O2VdYsKLLU8GQu8sCOM1LcoE8RwvLv9uuRT9s6SOHCKs0ZEOhxg+I1Ld+A1Q5lwx+UlKXXUoCZITg==} + zustand@5.0.8: + resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -2990,39 +2990,39 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@biomejs/biome@2.1.4': + '@biomejs/biome@2.2.0': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.1.4 - '@biomejs/cli-darwin-x64': 2.1.4 - '@biomejs/cli-linux-arm64': 2.1.4 - '@biomejs/cli-linux-arm64-musl': 2.1.4 - '@biomejs/cli-linux-x64': 2.1.4 - '@biomejs/cli-linux-x64-musl': 2.1.4 - '@biomejs/cli-win32-arm64': 2.1.4 - '@biomejs/cli-win32-x64': 2.1.4 - - '@biomejs/cli-darwin-arm64@2.1.4': + '@biomejs/cli-darwin-arm64': 2.2.0 + '@biomejs/cli-darwin-x64': 2.2.0 + '@biomejs/cli-linux-arm64': 2.2.0 + '@biomejs/cli-linux-arm64-musl': 2.2.0 + '@biomejs/cli-linux-x64': 2.2.0 + '@biomejs/cli-linux-x64-musl': 2.2.0 + '@biomejs/cli-win32-arm64': 2.2.0 + '@biomejs/cli-win32-x64': 2.2.0 + + '@biomejs/cli-darwin-arm64@2.2.0': optional: true - '@biomejs/cli-darwin-x64@2.1.4': + '@biomejs/cli-darwin-x64@2.2.0': optional: true - '@biomejs/cli-linux-arm64-musl@2.1.4': + '@biomejs/cli-linux-arm64-musl@2.2.0': optional: true - '@biomejs/cli-linux-arm64@2.1.4': + '@biomejs/cli-linux-arm64@2.2.0': optional: true - '@biomejs/cli-linux-x64-musl@2.1.4': + '@biomejs/cli-linux-x64-musl@2.2.0': optional: true - '@biomejs/cli-linux-x64@2.1.4': + '@biomejs/cli-linux-x64@2.2.0': optional: true - '@biomejs/cli-win32-arm64@2.1.4': + '@biomejs/cli-win32-arm64@2.2.0': optional: true - '@biomejs/cli-win32-x64@2.1.4': + '@biomejs/cli-win32-x64@2.2.0': optional: true '@emotion/babel-plugin@11.13.5': @@ -3211,12 +3211,12 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@gerrit0/mini-shiki@3.9.2': + '@gerrit0/mini-shiki@3.11.0': dependencies: - '@shikijs/engine-oniguruma': 3.10.0 - '@shikijs/langs': 3.10.0 - '@shikijs/themes': 3.10.0 - '@shikijs/types': 3.10.0 + '@shikijs/engine-oniguruma': 3.11.0 + '@shikijs/langs': 3.11.0 + '@shikijs/themes': 3.11.0 + '@shikijs/types': 3.11.0 '@shikijs/vscode-textmate': 10.0.2 '@hookform/devtools@4.4.0(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -3283,80 +3283,80 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/rollup-android-arm-eabi@4.46.3': + '@rollup/rollup-android-arm-eabi@4.46.4': optional: true - '@rollup/rollup-android-arm64@4.46.3': + '@rollup/rollup-android-arm64@4.46.4': optional: true - '@rollup/rollup-darwin-arm64@4.46.3': + '@rollup/rollup-darwin-arm64@4.46.4': optional: true - '@rollup/rollup-darwin-x64@4.46.3': + '@rollup/rollup-darwin-x64@4.46.4': optional: true - '@rollup/rollup-freebsd-arm64@4.46.3': + '@rollup/rollup-freebsd-arm64@4.46.4': optional: true - '@rollup/rollup-freebsd-x64@4.46.3': + '@rollup/rollup-freebsd-x64@4.46.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.3': + '@rollup/rollup-linux-arm-gnueabihf@4.46.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.3': + '@rollup/rollup-linux-arm-musleabihf@4.46.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.3': + '@rollup/rollup-linux-arm64-gnu@4.46.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.3': + '@rollup/rollup-linux-arm64-musl@4.46.4': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.3': + '@rollup/rollup-linux-loongarch64-gnu@4.46.4': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.46.3': + '@rollup/rollup-linux-ppc64-gnu@4.46.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.3': + '@rollup/rollup-linux-riscv64-gnu@4.46.4': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.3': + '@rollup/rollup-linux-riscv64-musl@4.46.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.3': + '@rollup/rollup-linux-s390x-gnu@4.46.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.3': + '@rollup/rollup-linux-x64-gnu@4.46.4': optional: true - '@rollup/rollup-linux-x64-musl@4.46.3': + '@rollup/rollup-linux-x64-musl@4.46.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.3': + '@rollup/rollup-win32-arm64-msvc@4.46.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.3': + '@rollup/rollup-win32-ia32-msvc@4.46.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.3': + '@rollup/rollup-win32-x64-msvc@4.46.4': optional: true - '@shikijs/engine-oniguruma@3.10.0': + '@shikijs/engine-oniguruma@3.11.0': dependencies: - '@shikijs/types': 3.10.0 + '@shikijs/types': 3.11.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.10.0': + '@shikijs/langs@3.11.0': dependencies: - '@shikijs/types': 3.10.0 + '@shikijs/types': 3.11.0 - '@shikijs/themes@3.10.0': + '@shikijs/themes@3.11.0': dependencies: - '@shikijs/types': 3.10.0 + '@shikijs/types': 3.11.0 - '@shikijs/types@3.10.0': + '@shikijs/types@3.11.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -3572,52 +3572,52 @@ snapshots: '@tauri-apps/api@2.8.0': {} - '@tauri-apps/cli-darwin-arm64@2.8.0': + '@tauri-apps/cli-darwin-arm64@2.8.1': optional: true - '@tauri-apps/cli-darwin-x64@2.8.0': + '@tauri-apps/cli-darwin-x64@2.8.1': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.8.0': + '@tauri-apps/cli-linux-arm-gnueabihf@2.8.1': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.8.0': + '@tauri-apps/cli-linux-arm64-gnu@2.8.1': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.8.0': + '@tauri-apps/cli-linux-arm64-musl@2.8.1': optional: true - '@tauri-apps/cli-linux-riscv64-gnu@2.8.0': + '@tauri-apps/cli-linux-riscv64-gnu@2.8.1': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.8.0': + '@tauri-apps/cli-linux-x64-gnu@2.8.1': optional: true - '@tauri-apps/cli-linux-x64-musl@2.8.0': + '@tauri-apps/cli-linux-x64-musl@2.8.1': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.8.0': + '@tauri-apps/cli-win32-arm64-msvc@2.8.1': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.8.0': + '@tauri-apps/cli-win32-ia32-msvc@2.8.1': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.8.0': + '@tauri-apps/cli-win32-x64-msvc@2.8.1': optional: true - '@tauri-apps/cli@2.8.0': + '@tauri-apps/cli@2.8.1': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.8.0 - '@tauri-apps/cli-darwin-x64': 2.8.0 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.8.0 - '@tauri-apps/cli-linux-arm64-gnu': 2.8.0 - '@tauri-apps/cli-linux-arm64-musl': 2.8.0 - '@tauri-apps/cli-linux-riscv64-gnu': 2.8.0 - '@tauri-apps/cli-linux-x64-gnu': 2.8.0 - '@tauri-apps/cli-linux-x64-musl': 2.8.0 - '@tauri-apps/cli-win32-arm64-msvc': 2.8.0 - '@tauri-apps/cli-win32-ia32-msvc': 2.8.0 - '@tauri-apps/cli-win32-x64-msvc': 2.8.0 + '@tauri-apps/cli-darwin-arm64': 2.8.1 + '@tauri-apps/cli-darwin-x64': 2.8.1 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.8.1 + '@tauri-apps/cli-linux-arm64-gnu': 2.8.1 + '@tauri-apps/cli-linux-arm64-musl': 2.8.1 + '@tauri-apps/cli-linux-riscv64-gnu': 2.8.1 + '@tauri-apps/cli-linux-x64-gnu': 2.8.1 + '@tauri-apps/cli-linux-x64-musl': 2.8.1 + '@tauri-apps/cli-win32-arm64-msvc': 2.8.1 + '@tauri-apps/cli-win32-ia32-msvc': 2.8.1 + '@tauri-apps/cli-win32-x64-msvc': 2.8.1 '@tauri-apps/plugin-clipboard-manager@2.3.0': dependencies: @@ -3627,15 +3627,15 @@ snapshots: dependencies: '@tauri-apps/api': 2.8.0 - '@tauri-apps/plugin-dialog@2.3.2': + '@tauri-apps/plugin-dialog@2.3.3': dependencies: '@tauri-apps/api': 2.8.0 - '@tauri-apps/plugin-fs@2.4.1': + '@tauri-apps/plugin-fs@2.4.2': dependencies: '@tauri-apps/api': 2.8.0 - '@tauri-apps/plugin-http@2.5.1': + '@tauri-apps/plugin-http@2.5.2': dependencies: '@tauri-apps/api': 2.8.0 @@ -5244,30 +5244,30 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - rollup@4.46.3: + rollup@4.46.4: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.3 - '@rollup/rollup-android-arm64': 4.46.3 - '@rollup/rollup-darwin-arm64': 4.46.3 - '@rollup/rollup-darwin-x64': 4.46.3 - '@rollup/rollup-freebsd-arm64': 4.46.3 - '@rollup/rollup-freebsd-x64': 4.46.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.3 - '@rollup/rollup-linux-arm-musleabihf': 4.46.3 - '@rollup/rollup-linux-arm64-gnu': 4.46.3 - '@rollup/rollup-linux-arm64-musl': 4.46.3 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.3 - '@rollup/rollup-linux-ppc64-gnu': 4.46.3 - '@rollup/rollup-linux-riscv64-gnu': 4.46.3 - '@rollup/rollup-linux-riscv64-musl': 4.46.3 - '@rollup/rollup-linux-s390x-gnu': 4.46.3 - '@rollup/rollup-linux-x64-gnu': 4.46.3 - '@rollup/rollup-linux-x64-musl': 4.46.3 - '@rollup/rollup-win32-arm64-msvc': 4.46.3 - '@rollup/rollup-win32-ia32-msvc': 4.46.3 - '@rollup/rollup-win32-x64-msvc': 4.46.3 + '@rollup/rollup-android-arm-eabi': 4.46.4 + '@rollup/rollup-android-arm64': 4.46.4 + '@rollup/rollup-darwin-arm64': 4.46.4 + '@rollup/rollup-darwin-x64': 4.46.4 + '@rollup/rollup-freebsd-arm64': 4.46.4 + '@rollup/rollup-freebsd-x64': 4.46.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.4 + '@rollup/rollup-linux-arm-musleabihf': 4.46.4 + '@rollup/rollup-linux-arm64-gnu': 4.46.4 + '@rollup/rollup-linux-arm64-musl': 4.46.4 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.4 + '@rollup/rollup-linux-ppc64-gnu': 4.46.4 + '@rollup/rollup-linux-riscv64-gnu': 4.46.4 + '@rollup/rollup-linux-riscv64-musl': 4.46.4 + '@rollup/rollup-linux-s390x-gnu': 4.46.4 + '@rollup/rollup-linux-x64-gnu': 4.46.4 + '@rollup/rollup-linux-x64-musl': 4.46.4 + '@rollup/rollup-win32-arm64-msvc': 4.46.4 + '@rollup/rollup-win32-ia32-msvc': 4.46.4 + '@rollup/rollup-win32-x64-msvc': 4.46.4 fsevents: 2.3.3 rxjs@7.8.2: @@ -5528,7 +5528,7 @@ snapshots: typedoc@0.28.10(typescript@5.9.2): dependencies: - '@gerrit0/mini-shiki': 3.9.2 + '@gerrit0/mini-shiki': 3.11.0 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 @@ -5646,7 +5646,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.46.3 + rollup: 4.46.4 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 24.3.0 @@ -5729,7 +5729,7 @@ snapshots: zod@3.25.76: {} - zustand@5.0.7(@types/react@18.3.23)(immer@10.1.1)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)): + zustand@5.0.8(@types/react@18.3.23)(immer@10.1.1)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.23 immer: 10.1.1 diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 1bfb48d5..587465af 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -770,7 +770,7 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -823,9 +823,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -1267,7 +1267,7 @@ dependencies = [ "tauri-plugin-notification", "tauri-plugin-single-instance", "tauri-plugin-window-state", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "tokio", "tokio-stream", @@ -1299,7 +1299,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tracing", "tracing-subscriber", @@ -1322,7 +1322,7 @@ dependencies = [ "netlink-sys", "nix", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "x25519-dalek", ] @@ -3233,7 +3233,7 @@ dependencies = [ "once_cell", "png", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "windows-sys 0.60.2", ] @@ -4169,7 +4169,7 @@ checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" dependencies = [ "base64 0.22.1", "indexmap 2.10.0", - "quick-xml 0.38.1", + "quick-xml 0.38.2", "serde", "time", ] @@ -4429,9 +4429,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.38.1" +version = "0.38.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9845d9dccf565065824e69f9f235fafba1587031eda353c1f1561cd6a6be78f4" +checksum = "d200a41a7797e6461bd04e4e95c3347053a731c32c87f066f2f0dda22dbdbba8" dependencies = [ "memchr", ] @@ -4450,7 +4450,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2 0.5.10", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tracing", "web-time", @@ -4471,7 +4471,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.15", + "thiserror 2.0.16", "tinyvec", "tracing", "web-time", @@ -4656,7 +4656,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -5535,7 +5535,7 @@ dependencies = [ "serde_json", "sha2", "smallvec", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tokio-stream", "tracing", @@ -5619,7 +5619,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.15", + "thiserror 2.0.16", "tracing", "uuid", "whoami", @@ -5658,7 +5658,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.15", + "thiserror 2.0.16", "tracing", "uuid", "whoami", @@ -5684,7 +5684,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror 2.0.15", + "thiserror 2.0.16", "tracing", "url", "uuid", @@ -5943,9 +5943,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a95cd68dd3e97bfe689ed6076ea16c68389feabc51ec4a63138bbe4892c8d7" +checksum = "a54629607ea3084a8b455c1ebe888cbdfc4de02fa5edb2e40db0dc97091007e3" dependencies = [ "anyhow", "bytes", @@ -5983,7 +5983,7 @@ dependencies = [ "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "tray-icon", "url", @@ -6036,7 +6036,7 @@ dependencies = [ "sha2", "syn 2.0.106", "tauri-utils", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "url", "uuid", @@ -6086,7 +6086,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -6102,7 +6102,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-utils", - "thiserror 2.0.15", + "thiserror 2.0.16", "tracing", "url", "windows-registry", @@ -6111,9 +6111,9 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e5858cc7b455a73ab4ea2ebc08b5be33682c00ff1bf4cad5537d4fb62499d9" +checksum = "0ee5a3c416dc59d7d9aa0de5490a82d6e201c67ffe97388979d77b69b08cda40" dependencies = [ "log", "raw-window-handle", @@ -6123,15 +6123,15 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", - "thiserror 2.0.15", + "thiserror 2.0.16", "url", ] [[package]] name = "tauri-plugin-fs" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99" +checksum = "315784ec4be45e90a987687bae7235e6be3d6e9e350d2b75c16b8a4bf22c1db7" dependencies = [ "anyhow", "dunce", @@ -6144,16 +6144,16 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-utils", - "thiserror 2.0.15", - "toml 0.8.23", + "thiserror 2.0.16", + "toml 0.9.5", "url", ] [[package]] name = "tauri-plugin-http" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcde333d97e565a7765aad82f32d8672458f7bd77b6ee653830d5dded9d7b5c2" +checksum = "938a3d7051c9a82b431e3a0f3468f85715b3442b3c3a3913095e9fa509e2652c" dependencies = [ "bytes", "cookie_store", @@ -6167,7 +6167,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", - "thiserror 2.0.15", + "thiserror 2.0.16", "tokio", "url", "urlpattern", @@ -6191,7 +6191,7 @@ dependencies = [ "swift-rs", "tauri", "tauri-plugin", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", ] @@ -6209,7 +6209,7 @@ dependencies = [ "serde_repr", "tauri", "tauri-plugin", - "thiserror 2.0.15", + "thiserror 2.0.16", "time", "url", ] @@ -6224,7 +6224,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin-deep-link", - "thiserror 2.0.15", + "thiserror 2.0.16", "tracing", "windows-sys 0.60.2", "zbus", @@ -6242,7 +6242,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.15", + "thiserror 2.0.16", ] [[package]] @@ -6263,7 +6263,7 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "thiserror 2.0.15", + "thiserror 2.0.16", "url", "webkit2gtk", "webview2-com", @@ -6327,7 +6327,7 @@ dependencies = [ "serde_json", "serde_with", "swift-rs", - "thiserror 2.0.15", + "thiserror 2.0.16", "toml 0.9.5", "url", "urlpattern", @@ -6352,22 +6352,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b1e66e07de489fe43a46678dd0b8df65e0c973909df1b60ba33874e297ba9b9" dependencies = [ "quick-xml 0.37.5", - "thiserror 2.0.15", + "thiserror 2.0.16", "windows", "windows-version", ] [[package]] name = "tempfile" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix 1.0.8", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -6392,11 +6392,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.15", + "thiserror-impl 2.0.16", ] [[package]] @@ -6412,9 +6412,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", @@ -6661,7 +6661,6 @@ dependencies = [ "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", - "toml_write", "winnow 0.7.12", ] @@ -6674,12 +6673,6 @@ dependencies = [ "winnow 0.7.12", ] -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - [[package]] name = "toml_writer" version = "1.0.2" @@ -6911,7 +6904,7 @@ dependencies = [ "once_cell", "png", "serde", - "thiserror 2.0.15", + "thiserror 2.0.16", "windows-sys 0.59.0", ] @@ -7520,7 +7513,7 @@ version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" dependencies = [ - "thiserror 2.0.15", + "thiserror 2.0.16", "windows", "windows-core", ] @@ -7565,11 +7558,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -8081,7 +8074,7 @@ dependencies = [ "os_pipe", "rustix 0.38.44", "tempfile", - "thiserror 2.0.15", + "thiserror 2.0.16", "tree_magic_mini", "wayland-backend", "wayland-client", @@ -8129,7 +8122,7 @@ dependencies = [ "sha2", "soup3", "tao-macros", - "thiserror 2.0.15", + "thiserror 2.0.16", "url", "webkit2gtk", "webkit2gtk-sys", diff --git a/src-tauri/resources/icons/tray-32x32-black-active.png b/src-tauri/resources/icons/tray-32x32-black-active.png new file mode 100644 index 0000000000000000000000000000000000000000..69e37b717ca16a81ef37571d74218d33e1035abb GIT binary patch literal 521 zcmV+k0`~ohP)_ob#3*kO#nl2Gkc;EWqrNZyp7x#~Kj-aTgKZ5u^tInNwi}#9+8N?W{I{ z!M0d}WPPGrnf`h985QA|K16o(hpbvyc zwl?eo`YI&I(2;EnKz&=}2{|1A6a)vYIi``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{>A{G5LY10)ANA4=K+ueB7ye%ygd(iyC3lM zJ?80s2twWWd3zu5bOY5q1S;U|xi7LOPjqjd@SZ%8J-Gt=3qvLp7v!YAhd?%W*L@Bk339-FfqIZjL_F^60Ud2!666=m@PGdM{R;E%+t>Fy z+&`axKH&fT`}+mz&nGAVLH>UrD?Ywqf4+i2!uii7S> z)+`$eUSHRBC}zlfdcaqjU1<3T}1$@L|4rSj-~oy8E78Elg&d-TEsyCFC#l zu;~=ZF0nRRbAkKh^tEgrvz=c>iY;YZw*P%Cp9ibNETN#87cvwoPBGdStW;=y?aSEqvW{~<9<^wtsg=f}v9t4IjgQu&X%Q~loCII}D355Uv literal 0 HcmV?d00001 diff --git a/src-tauri/resources/icons/tray-32x32-gray-active.png b/src-tauri/resources/icons/tray-32x32-gray-active.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab5bd44602b42f768dfab8236667707af2a33c7 GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{^S6k5LX~wUtize-rn5Y+zJB_c1ueOL_lOu zp75SL(Y<*hdvXQ#7l?ouc@p~zB=%PWF%!rDiUAD=a)Gu384xbSx~ezF41vxvC<*clW)M)A-(avlKB0d9 zg#Y*N?-!^)ub_~ipinOmzrW#p{Qvy^f`WkldeGiXX*-KL!5?5cJu5!~RdChFs zqKrarTl4ovxDKEBW^B3r*n-@{{QT2?gqtkC@x=c{>N?MC1FmIZ8ZiH6BDq#5Eb&X$ znmA0mdvQUEY}Nvcx!h7gj7~4lwK`oqkaBB>_M6-3d7%tvJjw-|4I2(@TGLR-;Bp|f zp-|wkxVD4D{O<t<8 literal 0 HcmV?d00001 diff --git a/src-tauri/resources/icons/tray-32x32-white-active.png b/src-tauri/resources/icons/tray-32x32-white-active.png new file mode 100644 index 0000000000000000000000000000000000000000..f674c43be1ef44a7bd27097ab9160a2beaacb0a8 GIT binary patch literal 537 zcmV+!0_OdRP)-&!B?WB_6EID}m# zwxq@wLE66EK1(EeqE6Oa$+x6|WQyAt5T0CA~uK*W=a z%OU3jfH6zb-;0+&$Gt7T{;|utk6JV+K+^!wR(Zx8NU7>Q0NnR?QtuhFCJi3QCKW(K zQU-A*3D=*yXTL_|yZ{Itoh3lDw;CsIfd0YE0D&zroB(%x#%E^R{oio|DAL}|4$g-$ z{q};S*a5uf+PDZ#1dPcK5ZP-5W5OFV03d=BF*g7rJwWr~n1&AkN2?iG2Q+6LfZ-6Q zi0OoDH;i>4G+a;z!Yf-Js{`C1l@AiTvLyuww*@!knE((-j6i9g0KoL$;XE$@wndYQ bvEzOLPLA|Wsvz Option { let connections = ACTIVE_CONNECTIONS.lock().await; trace!( - "Checking for active connection with ID {id}, type {connection_type} in active connections." - ); + "Checking for active connection with ID {id}, type {connection_type} in active connections." + ); if let Some(connection) = connections .iter() diff --git a/src-tauri/src/app_config.rs b/src-tauri/src/app_config.rs index 48d17042..d949d67f 100644 --- a/src-tauri/src/app_config.rs +++ b/src-tauri/src/app_config.rs @@ -42,7 +42,7 @@ pub enum AppTheme { Dark, } -#[derive(Clone, Debug, Deserialize, Display, EnumString, PartialEq, Serialize)] +#[derive(Clone, Copy, Debug, Deserialize, Display, EnumString, PartialEq, Serialize)] #[strum(serialize_all = "lowercase")] #[serde(rename_all = "lowercase")] pub enum AppTrayTheme { diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index e2020589..3818c400 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -19,7 +19,7 @@ use defguard_client::{ events::EventKey, periodic::run_periodic_tasks, service, - tray::{configure_tray_icon, reload_tray_menu}, + tray::{configure_tray_icon, setup_tray}, utils::load_log_targets, VERSION, }; @@ -112,10 +112,12 @@ async fn startup(app_handle: &AppHandle) { "Re-generating tray menu to show all available instances and locations as we have \ connected to the database." ); - reload_tray_menu(app_handle).await; + if let Err(err) = setup_tray(app_handle).await { + error!("Failed to setup system tray: {err}"); + } let state = app_handle.state::(); - let theme = &state.app_config.lock().unwrap().tray_theme; - match configure_tray_icon(app_handle, theme) { + let theme = state.app_config.lock().unwrap().tray_theme; + match configure_tray_icon(app_handle, theme).await { Ok(()) => info!("System tray configured."), Err(err) => error!("Failed to configure system tray: {err}"), } @@ -291,13 +293,6 @@ fn main() { .build(), )?; - // Configure tray. - debug!("Configuring tray icon."); - match configure_tray_icon(app_handle, &config.tray_theme) { - Ok(()) => debug!("Tray icon has been configured successfully"), - Err(err) => error!("Failed to configure tray icon: {err}"), - } - let state = AppState::new(config); app.manage(state); @@ -356,6 +351,8 @@ fn main() { debug!("Exiting the application's main event loop."); tauri::async_runtime::block_on(async { let _ = close_all_connections().await; + // This will clean the database file, pruning write-ahead log. + DB_POOL.close().await; }); } _ => { diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 1efbe42b..8f5a0eb6 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -89,6 +89,12 @@ pub async fn connect( error!("Tunnel {location_id} not found"); return Err(Error::NotFound); } + + // Update tray icon to reflect connection state. + let app_state: State = handle.state(); + let theme = { app_state.app_config.lock().unwrap().tray_theme }; + configure_tray_icon(&handle, theme).await?; + Ok(()) } @@ -168,6 +174,12 @@ pub async fn disconnect( }; } info!("Disconnected from {connection_type} {name}(ID: {location_id})"); + + // Update tray icon to reflect connection state. + let app_state: State = handle.state(); + let theme = { app_state.app_config.lock().unwrap().tray_theme }; + configure_tray_icon(&handle, theme).await?; + Ok(()) } else { warn!( @@ -1092,8 +1104,8 @@ pub fn command_get_app_config(app_state: State<'_, AppState>) -> Result debug!("Tray updated upon config change"), Err(err) => error!("Tray change failed. Reason: {err}"), } diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index c62702bf..a5b65ba8 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -1,13 +1,13 @@ use tauri::{ image::Image, - menu::{MenuBuilder, MenuEvent, MenuItem, SubmenuBuilder}, + menu::{Menu, MenuBuilder, MenuEvent, MenuItem, SubmenuBuilder}, path::BaseDirectory, - tray::{TrayIcon, TrayIconBuilder}, - AppHandle, Emitter, Manager, + tray::TrayIconBuilder, + AppHandle, Emitter, Manager, Runtime, }; use crate::{ - active_connections::get_connection_id_by_type, + active_connections::{get_connection_id_by_type, ACTIVE_CONNECTIONS}, app_config::AppTrayTheme, commands::{all_instances, all_locations, connect, disconnect}, database::{models::location::Location, DB_POOL}, @@ -30,7 +30,8 @@ const TRAY_EVENT_UPDATES: &str = "updates"; const TRAY_EVENT_COMMINITY: &str = "community"; const TRAY_EVENT_FOLLOW: &str = "follow"; -pub async fn generate_tray_menu(app: &AppHandle) -> Result { +/// Generate contents of system tray menu. +async fn generate_tray_menu(app: &AppHandle) -> Result, Error> { debug!("Generating tray menu."); let quit = MenuItem::with_id(app, TRAY_EVENT_QUIT, "Quit", true, None::<&str>)?; let show = MenuItem::with_id(app, TRAY_EVENT_SHOW, "Show", true, None::<&str>)?; @@ -51,7 +52,6 @@ pub async fn generate_tray_menu(app: &AppHandle) -> Result { )?; let follow_us = MenuItem::with_id(app, TRAY_EVENT_FOLLOW, "Follow us", true, None::<&str>)?; - // INSTANCE SECTION let mut instance_menu = SubmenuBuilder::new(app, "Instances"); debug!("Getting all instances information for the tray menu"); match all_instances().await { @@ -93,8 +93,9 @@ pub async fn generate_tray_menu(app: &AppHandle) -> Result { } } - let tray_menu = MenuBuilder::new(app) - .items(&[&instance_menu.build()?]) + let submenu = instance_menu.build()?; + let menu = MenuBuilder::new(app) + .items(&[&submenu]) .separator() .items(&[&show, &hide]) .separator() @@ -102,10 +103,17 @@ pub async fn generate_tray_menu(app: &AppHandle) -> Result { .separator() .item(&quit) .build()?; + Ok(menu) +} + +/// Setup system tray. +/// This function should only be called once. +pub async fn setup_tray(app: &AppHandle) -> Result<(), Error> { + let tray_menu = generate_tray_menu(app).await?; // On macOS, always show menu under system tray icon. #[cfg(target_os = "macos")] - let tray = TrayIconBuilder::with_id(TRAY_ICON_ID) + TrayIconBuilder::with_id(TRAY_ICON_ID) .menu(&tray_menu) .show_menu_on_left_click(true) .on_menu_event(handle_tray_menu_event) @@ -113,7 +121,7 @@ pub async fn generate_tray_menu(app: &AppHandle) -> Result { // On other systems (especially Windows), system tray menu is on right-click, // and double-click shows the main window. #[cfg(not(target_os = "macos"))] - let tray = TrayIconBuilder::with_id(TRAY_ICON_ID) + TrayIconBuilder::with_id(TRAY_ICON_ID) .menu(&tray_menu) .show_menu_on_left_click(false) .on_tray_icon_event(|icon, event| { @@ -125,12 +133,19 @@ pub async fn generate_tray_menu(app: &AppHandle) -> Result { .build(app)?; debug!("Tray menu successfully generated"); - Ok(tray) + Ok(()) } -pub async fn reload_tray_menu(app_handle: &AppHandle) { - match generate_tray_menu(app_handle).await { - Ok(_) => debug!("System tray menu re-generarted."), +/// Reload menu contents in system tray. +pub(crate) async fn reload_tray_menu(app: &AppHandle) { + let Some(tray) = app.tray_by_id(TRAY_ICON_ID) else { + error!("System tray menu not initialized."); + return; + }; + + let menu = generate_tray_menu(app).await.ok(); + match tray.set_menu(menu) { + Ok(()) => debug!("System tray menu re-generarted."), Err(err) => error!("Failed to re-generate system tray menu: {err}"), } } @@ -185,12 +200,19 @@ pub fn handle_tray_menu_event(app: &AppHandle, event: MenuEvent) { } } -pub fn configure_tray_icon(app: &AppHandle, theme: &AppTrayTheme) -> Result<(), Error> { +pub async fn configure_tray_icon(app: &AppHandle, theme: AppTrayTheme) -> Result<(), Error> { let Some(tray_icon) = app.tray_by_id(TRAY_ICON_ID) else { error!("System tray menu not initialized."); return Ok(()); }; - let resource_str = format!("resources/icons/tray-32x32-{theme}.png"); + + let mut resource_str = String::from("resources/icons/tray-32x32-"); + resource_str.push_str(&theme.to_string()); + let active_connections = ACTIVE_CONNECTIONS.lock().await; + if !active_connections.is_empty() { + resource_str.push_str("-active"); + } + resource_str.push_str(".png"); debug!("Trying to load the tray icon from {resource_str}"); if let Ok(icon_path) = app.path().resolve(&resource_str, BaseDirectory::Resource) { let icon = Image::from_path(icon_path)?; diff --git a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/AddInstanceDeviceForm.tsx b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/AddInstanceDeviceForm.tsx index 8b8a560c..a4d75b28 100644 --- a/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/AddInstanceDeviceForm.tsx +++ b/src/pages/client/pages/ClientAddInstancePage/components/AddInstanceFormCard/components/AddInstanceDeviceForm/AddInstanceDeviceForm.tsx @@ -98,7 +98,7 @@ export const AddInstanceDeviceForm = ({ response }: Props) => { const data = await r.json() as ErrorData; const details = `${data?.error ? `${data.error}, ` : ''}`; error( - `Failed to create device check enrollment and Defguard logs, details: ${details} Error status code: ${r.status} `, + `Failed to create device. Check enrollment and Defguard logs, details: ${details}. Error status code: ${r.status}`, ); throw Error(`Failed to create device, details: ${details} `); } @@ -111,14 +111,11 @@ export const AddInstanceDeviceForm = ({ response }: Props) => { setIsLoading(false); toaster.success(localLL.messages.addSuccess()); const instances = await getInstances(); - const _selectedInstance: SelectedInstance = { + const selectedInstance: SelectedInstance = { id: res.instance.id, type: WireguardInstanceType.DEFGUARD_INSTANCE, }; - setClientStore({ - selectedInstance: _selectedInstance, - instances, - }); + setClientStore({ selectedInstance, instances }); // Clear token and URL values. useClientStore.setState({ instanceConfig: { token: '', url: '' } }); navigate(routes.client.instancePage, { replace: true }); From a245c519251d215f209833bc30adeaeb627043c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ciarcin=CC=81ski?= Date: Wed, 20 Aug 2025 14:13:42 +0200 Subject: [PATCH 2/2] Downgrade biome --- package.json | 2 +- pnpm-lock.yaml | 76 +++++++++++++++++++++++++------------------------- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index a677d9ba..da0e452d 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "zustand": "^5.0.8" }, "devDependencies": { - "@biomejs/biome": "^2.2.0", + "@biomejs/biome": "=2.1.4", "@hookform/devtools": "^4.4.0", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.85.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1928e97..52ba6038 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -169,8 +169,8 @@ importers: version: 5.0.8(@types/react@18.3.23)(immer@10.1.1)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) devDependencies: '@biomejs/biome': - specifier: ^2.2.0 - version: 2.2.0 + specifier: '=2.1.4' + version: 2.1.4 '@hookform/devtools': specifier: ^4.4.0 version: 4.4.0(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -328,55 +328,55 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.2.0': - resolution: {integrity: sha512-3On3RSYLsX+n9KnoSgfoYlckYBoU6VRM22cw1gB4Y0OuUVSYd/O/2saOJMrA4HFfA1Ff0eacOvMN1yAAvHtzIw==} + '@biomejs/biome@2.1.4': + resolution: {integrity: sha512-QWlrqyxsU0FCebuMnkvBIkxvPqH89afiJzjMl+z67ybutse590jgeaFdDurE9XYtzpjRGTI1tlUZPGWmbKsElA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.2.0': - resolution: {integrity: sha512-zKbwUUh+9uFmWfS8IFxmVD6XwqFcENjZvEyfOxHs1epjdH3wyyMQG80FGDsmauPwS2r5kXdEM0v/+dTIA9FXAg==} + '@biomejs/cli-darwin-arm64@2.1.4': + resolution: {integrity: sha512-sCrNENE74I9MV090Wq/9Dg7EhPudx3+5OiSoQOkIe3DLPzFARuL1dOwCWhKCpA3I5RHmbrsbNSRfZwCabwd8Qg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.2.0': - resolution: {integrity: sha512-+OmT4dsX2eTfhD5crUOPw3RPhaR+SKVspvGVmSdZ9y9O/AgL8pla6T4hOn1q+VAFBHuHhsdxDRJgFCSC7RaMOw==} + '@biomejs/cli-darwin-x64@2.1.4': + resolution: {integrity: sha512-gOEICJbTCy6iruBywBDcG4X5rHMbqCPs3clh3UQ+hRKlgvJTk4NHWQAyHOXvaLe+AxD1/TNX1jbZeffBJzcrOw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.2.0': - resolution: {integrity: sha512-egKpOa+4FL9YO+SMUMLUvf543cprjevNc3CAgDNFLcjknuNMcZ0GLJYa3EGTCR2xIkIUJDVneBV3O9OcIlCEZQ==} + '@biomejs/cli-linux-arm64-musl@2.1.4': + resolution: {integrity: sha512-nYr7H0CyAJPaLupFE2cH16KZmRC5Z9PEftiA2vWxk+CsFkPZQ6dBRdcC6RuS+zJlPc/JOd8xw3uCCt9Pv41WvQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.2.0': - resolution: {integrity: sha512-6eoRdF2yW5FnW9Lpeivh7Mayhq0KDdaDMYOJnH9aT02KuSIX5V1HmWJCQQPwIQbhDh68Zrcpl8inRlTEan0SXw==} + '@biomejs/cli-linux-arm64@2.1.4': + resolution: {integrity: sha512-juhEkdkKR4nbUi5k/KRp1ocGPNWLgFRD4NrHZSveYrD6i98pyvuzmS9yFYgOZa5JhaVqo0HPnci0+YuzSwT2fw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.2.0': - resolution: {integrity: sha512-I5J85yWwUWpgJyC1CcytNSGusu2p9HjDnOPAFG4Y515hwRD0jpR9sT9/T1cKHtuCvEQ/sBvx+6zhz9l9wEJGAg==} + '@biomejs/cli-linux-x64-musl@2.1.4': + resolution: {integrity: sha512-lvwvb2SQQHctHUKvBKptR6PLFCM7JfRjpCCrDaTmvB7EeZ5/dQJPhTYBf36BE/B4CRWR2ZiBLRYhK7hhXBCZAg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.2.0': - resolution: {integrity: sha512-5UmQx/OZAfJfi25zAnAGHUMuOd+LOsliIt119x2soA2gLggQYrVPA+2kMUxR6Mw5M1deUF/AWWP2qpxgH7Nyfw==} + '@biomejs/cli-linux-x64@2.1.4': + resolution: {integrity: sha512-Eoy9ycbhpJVYuR+LskV9s3uyaIkp89+qqgqhGQsWnp/I02Uqg2fXFblHJOpGZR8AxdB9ADy87oFVxn9MpFKUrw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.2.0': - resolution: {integrity: sha512-n9a1/f2CwIDmNMNkFs+JI0ZjFnMO0jdOyGNtihgUNFnlmd84yIYY2KMTBmMV58ZlVHjgmY5Y6E1hVTnSRieggA==} + '@biomejs/cli-win32-arm64@2.1.4': + resolution: {integrity: sha512-3WRYte7orvyi6TRfIZkDN9Jzoogbv+gSvR+b9VOXUg1We1XrjBg6WljADeVEaKTvOcpVdH0a90TwyOQ6ue4fGw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.2.0': - resolution: {integrity: sha512-Nawu5nHjP/zPKTIryh2AavzTc/KEg4um/MxWdXW0A6P/RZOyIpa7+QSjeXwAwX/utJGaCoXRPWtF3m5U/bB3Ww==} + '@biomejs/cli-win32-x64@2.1.4': + resolution: {integrity: sha512-tBc+W7anBPSFXGAoQW+f/+svkpt8/uXfRwDzN1DvnatkRMt16KIYpEi/iw8u9GahJlFv98kgHcIrSsZHZTR0sw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -2990,39 +2990,39 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@biomejs/biome@2.2.0': + '@biomejs/biome@2.1.4': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.2.0 - '@biomejs/cli-darwin-x64': 2.2.0 - '@biomejs/cli-linux-arm64': 2.2.0 - '@biomejs/cli-linux-arm64-musl': 2.2.0 - '@biomejs/cli-linux-x64': 2.2.0 - '@biomejs/cli-linux-x64-musl': 2.2.0 - '@biomejs/cli-win32-arm64': 2.2.0 - '@biomejs/cli-win32-x64': 2.2.0 - - '@biomejs/cli-darwin-arm64@2.2.0': + '@biomejs/cli-darwin-arm64': 2.1.4 + '@biomejs/cli-darwin-x64': 2.1.4 + '@biomejs/cli-linux-arm64': 2.1.4 + '@biomejs/cli-linux-arm64-musl': 2.1.4 + '@biomejs/cli-linux-x64': 2.1.4 + '@biomejs/cli-linux-x64-musl': 2.1.4 + '@biomejs/cli-win32-arm64': 2.1.4 + '@biomejs/cli-win32-x64': 2.1.4 + + '@biomejs/cli-darwin-arm64@2.1.4': optional: true - '@biomejs/cli-darwin-x64@2.2.0': + '@biomejs/cli-darwin-x64@2.1.4': optional: true - '@biomejs/cli-linux-arm64-musl@2.2.0': + '@biomejs/cli-linux-arm64-musl@2.1.4': optional: true - '@biomejs/cli-linux-arm64@2.2.0': + '@biomejs/cli-linux-arm64@2.1.4': optional: true - '@biomejs/cli-linux-x64-musl@2.2.0': + '@biomejs/cli-linux-x64-musl@2.1.4': optional: true - '@biomejs/cli-linux-x64@2.2.0': + '@biomejs/cli-linux-x64@2.1.4': optional: true - '@biomejs/cli-win32-arm64@2.2.0': + '@biomejs/cli-win32-arm64@2.1.4': optional: true - '@biomejs/cli-win32-x64@2.2.0': + '@biomejs/cli-win32-x64@2.1.4': optional: true '@emotion/babel-plugin@11.13.5':