diff --git a/Cargo.lock b/Cargo.lock index 5ba81ef48..4d8b3c8f0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -513,7 +513,7 @@ dependencies = [ "futures-channel", "futures-util", "rand 0.8.5", - "raw-window-handle 0.6.2", + "raw-window-handle", "serde", "serde_repr", "tokio", @@ -1043,12 +1043,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.9.0" @@ -1523,66 +1517,6 @@ dependencies = [ "cc", ] -[[package]] -name = "cocoa" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation 0.1.2", - "core-foundation 0.9.4", - "core-graphics 0.23.2", - "foreign-types 0.5.0", - "libc", - "objc", -] - -[[package]] -name = "cocoa" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" -dependencies = [ - "bitflags 2.9.0", - "block", - "cocoa-foundation 0.2.0", - "core-foundation 0.10.0", - "core-graphics 0.24.0", - "foreign-types 0.5.0", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" -dependencies = [ - "bitflags 2.9.0", - "block", - "core-foundation 0.10.0", - "core-graphics-types 0.2.0", - "libc", - "objc", -] - [[package]] name = "color-thief" version = "0.2.2" @@ -1785,19 +1719,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core-graphics" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "foreign-types 0.5.0", - "libc", -] - [[package]] name = "core-graphics" version = "0.24.0" @@ -1806,22 +1727,11 @@ checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ "bitflags 2.9.0", "core-foundation 0.10.0", - "core-graphics-types 0.2.0", + "core-graphics-types", "foreign-types 0.5.0", "libc", ] -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "libc", -] - [[package]] name = "core-graphics-types" version = "0.2.0" @@ -4943,15 +4853,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - [[package]] name = "mappings" version = "0.7.0" @@ -5231,7 +5132,7 @@ dependencies = [ "objc2-core-foundation", "objc2-core-graphics", "objc2-foundation 0.3.1", - "raw-window-handle 0.6.2", + "raw-window-handle", "thiserror 2.0.12", "versions", "wfd", @@ -5267,7 +5168,7 @@ dependencies = [ "log", "ndk-sys", "num_enum", - "raw-window-handle 0.6.2", + "raw-window-handle", "thiserror 1.0.69", ] @@ -5539,15 +5440,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - [[package]] name = "objc-sys" version = "0.3.5" @@ -6948,12 +6840,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -7249,7 +7135,7 @@ dependencies = [ "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", - "raw-window-handle 0.6.2", + "raw-window-handle", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -8360,14 +8246,14 @@ checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ "bytemuck", "cfg_aliases", - "core-graphics 0.24.0", + "core-graphics", "foreign-types 0.5.0", "js-sys", "log", "objc2 0.5.2", "objc2-foundation 0.2.2", "objc2-quartz-core 0.2.2", - "raw-window-handle 0.6.2", + "raw-window-handle", "redox_syscall", "wasm-bindgen", "web-sys", @@ -8942,7 +8828,7 @@ checksum = "1e59c1f38e657351a2e822eadf40d6a2ad4627b9c25557bc1180ec1b3295ef82" dependencies = [ "bitflags 2.9.0", "core-foundation 0.10.0", - "core-graphics 0.24.0", + "core-graphics", "crossbeam-channel", "dispatch", "dlopen2", @@ -8962,7 +8848,7 @@ dependencies = [ "objc2-foundation 0.3.1", "once_cell", "parking_lot", - "raw-window-handle 0.6.2", + "raw-window-handle", "scopeguard", "tao-macros", "unicode-segmentation", @@ -9036,7 +8922,7 @@ dependencies = [ "objc2-ui-kit", "percent-encoding", "plist", - "raw-window-handle 0.6.2", + "raw-window-handle", "reqwest 0.12.15", "serde", "serde_json", @@ -9168,7 +9054,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcaf6e5d6062423a0f711a23c2a573ccba222b6a16a9322d8499928f27e41376" dependencies = [ "log", - "raw-window-handle 0.6.2", + "raw-window-handle", "rfd", "serde", "serde_json", @@ -9317,7 +9203,7 @@ dependencies = [ "jni", "objc2 0.6.1", "objc2-ui-kit", - "raw-window-handle 0.6.2", + "raw-window-handle", "serde", "serde_json", "tauri-utils", @@ -9341,7 +9227,7 @@ dependencies = [ "objc2-foundation 0.3.1", "once_cell", "percent-encoding", - "raw-window-handle 0.6.2", + "raw-window-handle", "softbuffer", "tao", "tauri-runtime", @@ -9501,17 +9387,13 @@ name = "theseus_gui" version = "0.9.5" dependencies = [ "chrono", - "cocoa 0.26.0", "daedalus", "dashmap 6.1.0", "either", "enumset", "native-dialog", - "objc", "opener", - "os_info", "paste", - "rand 0.9.1", "serde", "serde_json", "serde_with", @@ -9532,7 +9414,6 @@ dependencies = [ "url", "urlencoding", "uuid 1.16.0", - "window-shadows", ] [[package]] @@ -10852,18 +10733,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "window-shadows" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ff424735b1ac21293b0492b069394b0a189c8a463fb015a16dea7c2e221c08" -dependencies = [ - "cocoa 0.25.0", - "objc", - "raw-window-handle 0.5.2", - "windows-sys 0.48.0", -] - [[package]] name = "window-vibrancy" version = "0.6.0" @@ -10874,7 +10743,7 @@ dependencies = [ "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", - "raw-window-handle 0.6.2", + "raw-window-handle", "windows-sys 0.59.0", "windows-version", ] @@ -11559,7 +11428,7 @@ dependencies = [ "objc2-web-kit", "once_cell", "percent-encoding", - "raw-window-handle 0.6.2", + "raw-window-handle", "sha2 0.10.9", "soup3", "tao-macros", diff --git a/apps/app-frontend/package.json b/apps/app-frontend/package.json index fbc130015..fa6d8f926 100644 --- a/apps/app-frontend/package.json +++ b/apps/app-frontend/package.json @@ -17,12 +17,12 @@ "@modrinth/utils": "workspace:*", "@sentry/vue": "^8.27.0", "@geometrically/minecraft-motd-parser": "^1.1.4", - "@tauri-apps/api": "^2.1.1", - "@tauri-apps/plugin-dialog": "^2.2.0", - "@tauri-apps/plugin-os": "^2.2.0", - "@tauri-apps/plugin-opener": "^2.2.1", - "@tauri-apps/plugin-updater": "^2.3.0", - "@tauri-apps/plugin-window-state": "^2.2.0", + "@tauri-apps/api": "^2.5.0", + "@tauri-apps/plugin-dialog": "^2.2.1", + "@tauri-apps/plugin-os": "^2.2.1", + "@tauri-apps/plugin-opener": "^2.2.6", + "@tauri-apps/plugin-updater": "^2.7.1", + "@tauri-apps/plugin-window-state": "^2.2.2", "@vintl/vintl": "^4.4.1", "dayjs": "^1.11.10", "floating-vue": "^5.2.2", diff --git a/apps/app/Cargo.toml b/apps/app/Cargo.toml index 5786182bd..0309a8130 100644 --- a/apps/app/Cargo.toml +++ b/apps/app/Cargo.toml @@ -35,7 +35,6 @@ either = "1.15" url = "2.2" urlencoding = "2.1" uuid = { version = "1.1", features = ["serde", "v4"] } -os_info = "3.7.0" tracing = "0.1.37" tracing-error = "0.2.0" @@ -48,14 +47,6 @@ opener = { version = "0.7.2", features = ["reveal", "dbus-vendored"] } native-dialog = "0.9.0" -[target.'cfg(not(target_os = "linux"))'.dependencies] -window-shadows = "0.2.1" - -[target.'cfg(target_os = "macos")'.dependencies] -cocoa = "0.26.0" -objc = "0.2.7" -rand = "0.9.1" - [target.'cfg(target_os = "linux")'.dependencies] tauri-plugin-updater = { version = "2.3.0", optional = true, features = ["native-tls-vendored", "zip"], default-features = false } diff --git a/apps/app/package.json b/apps/app/package.json index 168ac3454..794bf7e0b 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -9,7 +9,7 @@ "fix": "cargo fmt && cargo clippy --fix" }, "devDependencies": { - "@tauri-apps/cli": "2.1.0" + "@tauri-apps/cli": "2.5.0" }, "dependencies": { "@modrinth/app-frontend": "workspace:*", diff --git a/apps/app/src/api/utils.rs b/apps/app/src/api/utils.rs index cb20d87c8..dfb1d9187 100644 --- a/apps/app/src/api/utils.rs +++ b/apps/app/src/api/utils.rs @@ -53,25 +53,24 @@ pub async fn progress_bars_list() Ok(res) } -// cfg only on mac os // disables mouseover and fixes a random crash error only fixed by recent versions of macos -#[cfg(target_os = "macos")] #[tauri::command] pub async fn should_disable_mouseover() -> bool { - // We try to match version to 12.2 or higher. If unrecognizable to pattern or lower, we default to the css with disabled mouseover for safety - let os = os_info::get(); - if let os_info::Version::Semantic(major, minor, _) = os.version() { - if *major >= 12 && *minor >= 3 { - // Mac os version is 12.3 or higher, we allow mouseover - return false; + if cfg!(target_os = "macos") { + // We try to match version to 12.2 or higher. If unrecognizable to pattern or lower, we default to the css with disabled mouseover for safety + if let tauri_plugin_os::Version::Semantic(major, minor, _) = + tauri_plugin_os::version() + { + if major >= 12 && minor >= 3 { + // Mac os version is 12.3 or higher, we allow mouseover + return false; + } } + true + } else { + // Not macos, we allow mouseover + false } - true -} -#[cfg(not(target_os = "macos"))] -#[tauri::command] -pub async fn should_disable_mouseover() -> bool { - false } #[tauri::command] diff --git a/apps/app/src/macos/mod.rs b/apps/app/src/macos/mod.rs index 8098222ea..af946b000 100644 --- a/apps/app/src/macos/mod.rs +++ b/apps/app/src/macos/mod.rs @@ -1,2 +1 @@ pub mod deep_link; -pub mod window_ext; diff --git a/apps/app/src/macos/window_ext.rs b/apps/app/src/macos/window_ext.rs deleted file mode 100644 index 0e3975509..000000000 --- a/apps/app/src/macos/window_ext.rs +++ /dev/null @@ -1,412 +0,0 @@ -// Stolen from https://gist.github.com/charrondev/43150e940bd2771b1ea88256d491c7a9 -use objc::{msg_send, sel, sel_impl}; -use rand::{Rng, distributions::Alphanumeric}; -use tauri::{ - Emitter, Runtime, Window, - plugin::{Builder, TauriPlugin}, -}; // 0.8 - -const WINDOW_CONTROL_PAD_X: f64 = 9.0; -const WINDOW_CONTROL_PAD_Y: f64 = 10.0; - -struct UnsafeWindowHandle(*mut std::ffi::c_void); -unsafe impl Send for UnsafeWindowHandle {} -unsafe impl Sync for UnsafeWindowHandle {} - -pub fn init() -> TauriPlugin { - Builder::new("traffic_light_positioner") - .on_window_ready(|window| { - #[cfg(target_os = "macos")] - setup_traffic_light_positioner(window); - }) - .build() -} - -#[cfg(target_os = "macos")] -fn position_traffic_lights( - ns_window_handle: UnsafeWindowHandle, - x: f64, - y: f64, -) { - use cocoa::appkit::{NSView, NSWindow, NSWindowButton}; - use cocoa::foundation::NSRect; - let ns_window = ns_window_handle.0 as cocoa::base::id; - unsafe { - let close = ns_window - .standardWindowButton_(NSWindowButton::NSWindowCloseButton); - let miniaturize = ns_window - .standardWindowButton_(NSWindowButton::NSWindowMiniaturizeButton); - let zoom = - ns_window.standardWindowButton_(NSWindowButton::NSWindowZoomButton); - - let title_bar_container_view = close.superview().superview(); - - let close_rect: NSRect = msg_send![close, frame]; - let button_height = close_rect.size.height + 12.0; - - let title_bar_frame_height = button_height + y; - let mut title_bar_rect = NSView::frame(title_bar_container_view); - title_bar_rect.size.height = title_bar_frame_height; - title_bar_rect.origin.y = - NSView::frame(ns_window).size.height - title_bar_frame_height; - let _: () = - msg_send![title_bar_container_view, setFrame: title_bar_rect]; - - let window_buttons = vec![close, miniaturize, zoom]; - let space_between = - NSView::frame(miniaturize).origin.x - NSView::frame(close).origin.x; - - for (i, button) in window_buttons.into_iter().enumerate() { - let mut rect: NSRect = NSView::frame(button); - rect.origin.x = x + (i as f64 * space_between) + 6.0; - button.setFrameOrigin(rect.origin); - } - } -} - -#[cfg(target_os = "macos")] -#[derive(Debug)] -struct WindowState { - window: Window, -} - -#[cfg(target_os = "macos")] -pub fn setup_traffic_light_positioner(window: Window) { - use cocoa::appkit::NSWindow; - use cocoa::base::{BOOL, id}; - use cocoa::foundation::NSUInteger; - use objc::runtime::{Object, Sel}; - use std::ffi::c_void; - - // Do the initial positioning - position_traffic_lights( - UnsafeWindowHandle( - window.ns_window().expect("Failed to create window handle"), - ), - WINDOW_CONTROL_PAD_X, - WINDOW_CONTROL_PAD_Y, - ); - - // Ensure they stay in place while resizing the window. - fn with_window_state) -> T, T>( - this: &Object, - func: F, - ) { - let ptr = unsafe { - let x: *mut c_void = *this.get_ivar("app_box"); - &mut *(x as *mut WindowState) - }; - func(ptr); - } - - unsafe { - let ns_win = window - .ns_window() - .expect("NS Window should exist to mount traffic light delegate.") - as id; - - let current_delegate: id = ns_win.delegate(); - - extern "C" fn on_window_should_close( - this: &Object, - _cmd: Sel, - sender: id, - ) -> BOOL { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - msg_send![super_del, windowShouldClose: sender] - } - } - extern "C" fn on_window_will_close( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, windowWillClose: notification]; - } - } - extern "C" fn on_window_did_resize( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - with_window_state(this, |state: &mut WindowState| { - let id = state.window.ns_window().expect( - "NS window should exist on state to handle resize", - ) as id; - - #[cfg(target_os = "macos")] - position_traffic_lights( - UnsafeWindowHandle(id as *mut std::ffi::c_void), - WINDOW_CONTROL_PAD_X, - WINDOW_CONTROL_PAD_Y, - ); - }); - - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, windowDidResize: notification]; - } - } - extern "C" fn on_window_did_move( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, windowDidMove: notification]; - } - } - extern "C" fn on_window_did_change_backing_properties( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, windowDidChangeBackingProperties: notification]; - } - } - extern "C" fn on_window_did_become_key( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = - msg_send![super_del, windowDidBecomeKey: notification]; - } - } - extern "C" fn on_window_did_resign_key( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = - msg_send![super_del, windowDidResignKey: notification]; - } - } - extern "C" fn on_dragging_entered( - this: &Object, - _cmd: Sel, - notification: id, - ) -> BOOL { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - msg_send![super_del, draggingEntered: notification] - } - } - extern "C" fn on_prepare_for_drag_operation( - this: &Object, - _cmd: Sel, - notification: id, - ) -> BOOL { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - msg_send![super_del, prepareForDragOperation: notification] - } - } - extern "C" fn on_perform_drag_operation( - this: &Object, - _cmd: Sel, - sender: id, - ) -> BOOL { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - msg_send![super_del, performDragOperation: sender] - } - } - extern "C" fn on_conclude_drag_operation( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = - msg_send![super_del, concludeDragOperation: notification]; - } - } - extern "C" fn on_dragging_exited( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, draggingExited: notification]; - } - } - extern "C" fn on_window_will_use_full_screen_presentation_options( - this: &Object, - _cmd: Sel, - window: id, - proposed_options: NSUInteger, - ) -> NSUInteger { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - msg_send![super_del, window: window willUseFullScreenPresentationOptions: proposed_options] - } - } - extern "C" fn on_window_did_enter_full_screen( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - with_window_state(this, |state: &mut WindowState| { - state - .window - .emit("did-enter-fullscreen", ()) - .expect("Failed to emit event"); - }); - - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, windowDidEnterFullScreen: notification]; - } - } - extern "C" fn on_window_will_enter_full_screen( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - with_window_state(this, |state: &mut WindowState| { - state - .window - .emit("will-enter-fullscreen", ()) - .expect("Failed to emit event"); - }); - - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, windowWillEnterFullScreen: notification]; - } - } - extern "C" fn on_window_did_exit_full_screen( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - with_window_state(this, |state: &mut WindowState| { - state - .window - .emit("did-exit-fullscreen", ()) - .expect("Failed to emit event"); - - let id = - state.window.ns_window().expect("Failed to emit event") - as id; - position_traffic_lights( - UnsafeWindowHandle(id as *mut std::ffi::c_void), - WINDOW_CONTROL_PAD_X, - WINDOW_CONTROL_PAD_Y, - ); - }); - - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = - msg_send![super_del, windowDidExitFullScreen: notification]; - } - } - extern "C" fn on_window_will_exit_full_screen( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - with_window_state(this, |state: &mut WindowState| { - state - .window - .emit("will-exit-fullscreen", ()) - .expect("Failed to emit event"); - }); - - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, windowWillExitFullScreen: notification]; - } - } - extern "C" fn on_window_did_fail_to_enter_full_screen( - this: &Object, - _cmd: Sel, - window: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, windowDidFailToEnterFullScreen: window]; - } - } - extern "C" fn on_effective_appearance_did_change( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![super_del, effectiveAppearanceDidChange: notification]; - } - } - extern "C" fn on_effective_appearance_did_changed_on_main_thread( - this: &Object, - _cmd: Sel, - notification: id, - ) { - unsafe { - let super_del: id = *this.get_ivar("super_delegate"); - let _: () = msg_send![ - super_del, - effectiveAppearanceDidChangedOnMainThread: notification - ]; - } - } - - // Are we deallocing this properly ? (I miss safe Rust :( ) - let window_label = window.label().to_string(); - - let app_state = WindowState { window }; - let app_box = Box::into_raw(Box::new(app_state)) as *mut c_void; - let random_str: String = rand::rng() - .sample_iter(&Alphanumeric) - .take(20) - .map(char::from) - .collect(); - - // We need to ensure we have a unique delegate name, otherwise we will panic while trying to create a duplicate - // delegate with the same name. - let delegate_name = - format!("windowDelegate_{}_{}", window_label, random_str); - - ns_win.setDelegate_(delegate!(&delegate_name, { - window: id = ns_win, - app_box: *mut c_void = app_box, - toolbar: id = cocoa::base::nil, - super_delegate: id = current_delegate, - (windowShouldClose:) => on_window_should_close as extern fn(&Object, Sel, id) -> BOOL, - (windowWillClose:) => on_window_will_close as extern fn(&Object, Sel, id), - (windowDidResize:) => on_window_did_resize:: as extern fn(&Object, Sel, id), - (windowDidMove:) => on_window_did_move as extern fn(&Object, Sel, id), - (windowDidChangeBackingProperties:) => on_window_did_change_backing_properties as extern fn(&Object, Sel, id), - (windowDidBecomeKey:) => on_window_did_become_key as extern fn(&Object, Sel, id), - (windowDidResignKey:) => on_window_did_resign_key as extern fn(&Object, Sel, id), - (draggingEntered:) => on_dragging_entered as extern fn(&Object, Sel, id) -> BOOL, - (prepareForDragOperation:) => on_prepare_for_drag_operation as extern fn(&Object, Sel, id) -> BOOL, - (performDragOperation:) => on_perform_drag_operation as extern fn(&Object, Sel, id) -> BOOL, - (concludeDragOperation:) => on_conclude_drag_operation as extern fn(&Object, Sel, id), - (draggingExited:) => on_dragging_exited as extern fn(&Object, Sel, id), - (window:willUseFullScreenPresentationOptions:) => on_window_will_use_full_screen_presentation_options as extern fn(&Object, Sel, id, NSUInteger) -> NSUInteger, - (windowDidEnterFullScreen:) => on_window_did_enter_full_screen:: as extern fn(&Object, Sel, id), - (windowWillEnterFullScreen:) => on_window_will_enter_full_screen:: as extern fn(&Object, Sel, id), - (windowDidExitFullScreen:) => on_window_did_exit_full_screen:: as extern fn(&Object, Sel, id), - (windowWillExitFullScreen:) => on_window_will_exit_full_screen:: as extern fn(&Object, Sel, id), - (windowDidFailToEnterFullScreen:) => on_window_did_fail_to_enter_full_screen as extern fn(&Object, Sel, id), - (effectiveAppearanceDidChange:) => on_effective_appearance_did_change as extern fn(&Object, Sel, id), - (effectiveAppearanceDidChangedOnMainThread:) => on_effective_appearance_did_changed_on_main_thread as extern fn(&Object, Sel, id) - })) - } -} diff --git a/apps/app/src/main.rs b/apps/app/src/main.rs index 134d34bfe..4291431df 100644 --- a/apps/app/src/main.rs +++ b/apps/app/src/main.rs @@ -14,14 +14,6 @@ mod error; #[cfg(target_os = "macos")] mod macos; -#[cfg(target_os = "macos")] -#[macro_use] -extern crate cocoa; - -#[cfg(target_os = "macos")] -#[macro_use] -extern crate objc; - // Should be called in launcher initialization #[tracing::instrument(skip_all)] #[tauri::command] @@ -241,9 +233,9 @@ fn main() { }); #[cfg(not(target_os = "linux"))] - { - if let Some(window) = app.get_window("main") { - window.set_shadow(true).unwrap(); + if let Some(window) = app.get_window("main") { + if let Err(e) = window.set_shadow(true) { + tracing::warn!("Failed to set window shadow: {e}"); } } @@ -276,11 +268,6 @@ fn main() { restart_app, ]); - #[cfg(target_os = "macos")] - { - builder = builder.plugin(macos::window_ext::init()); - } - tracing::info!("Initializing app..."); let app = builder.build(tauri::generate_context!()); diff --git a/apps/app/tauri.conf.json b/apps/app/tauri.conf.json index a9a6dc3ba..72e380d8d 100644 --- a/apps/app/tauri.conf.json +++ b/apps/app/tauri.conf.json @@ -1,4 +1,5 @@ { + "$schema": "https://schema.tauri.app/config/2", "build": { "beforeDevCommand": "pnpm turbo run dev --filter=@modrinth/app-frontend", "beforeBuildCommand": "pnpm turbo run build --filter=@modrinth/app-frontend", @@ -76,7 +77,14 @@ ], "security": { "assetProtocol": { - "scope": ["$APPDATA/caches/icons/*", "$APPCONFIG/caches/icons/*", "$CONFIG/caches/icons/*", "$APPDATA/profiles/*/saves/*/icon.png", "$APPCONFIG/profiles/*/saves/*/icon.png", "$CONFIG/profiles/*/saves/*/icon.png"], + "scope": [ + "$APPDATA/caches/icons/*", + "$APPCONFIG/caches/icons/*", + "$CONFIG/caches/icons/*", + "$APPDATA/profiles/*/saves/*/icon.png", + "$APPCONFIG/profiles/*/saves/*/icon.png", + "$CONFIG/profiles/*/saves/*/icon.png" + ], "enable": true }, "capabilities": ["ads", "core", "plugins"], diff --git a/apps/app/tauri.macos.conf.json b/apps/app/tauri.macos.conf.json index d618f3228..821902426 100644 --- a/apps/app/tauri.macos.conf.json +++ b/apps/app/tauri.macos.conf.json @@ -13,7 +13,11 @@ "minWidth": 1100, "visible": false, "zoomHotkeysEnabled": false, - "decorations": true + "decorations": true, + "trafficLightPosition": { + "x": 15.0, + "y": 22.0 + } } ] } diff --git a/apps/labrinth/Cargo.toml b/apps/labrinth/Cargo.toml index 663f0ab24..ce5e55844 100644 --- a/apps/labrinth/Cargo.toml +++ b/apps/labrinth/Cargo.toml @@ -128,7 +128,7 @@ ariadne = { path = "../../packages/ariadne" } clap = { version = "4.5", features = ["derive"] } iana-time-zone = "0.1.61" -[target.'cfg(not(target_env = "msvc"))'.dependencies] +[target.'cfg(target_os = "linux")'.dependencies] tikv-jemallocator = { version = "0.6.0", features = ["profiling", "unprefixed_malloc_on_supported_platforms"] } tikv-jemalloc-ctl = { version = "0.6.0", features = ["stats"] } jemalloc_pprof = { version = "0.7.0", features = ["flamegraph"] } diff --git a/apps/labrinth/src/lib.rs b/apps/labrinth/src/lib.rs index 61b5839a9..562e70267 100644 --- a/apps/labrinth/src/lib.rs +++ b/apps/labrinth/src/lib.rs @@ -316,7 +316,7 @@ pub fn app_config( .configure( #[allow(unused_variables)] |cfg| { - #[cfg(not(target_env = "msvc"))] + #[cfg(target_os = "linux")] routes::debug::config(cfg) }, ) diff --git a/apps/labrinth/src/main.rs b/apps/labrinth/src/main.rs index 1c4f9c87c..e3fc5bed4 100644 --- a/apps/labrinth/src/main.rs +++ b/apps/labrinth/src/main.rs @@ -12,7 +12,7 @@ use std::sync::Arc; use tracing::{error, info}; use tracing_actix_web::TracingLogger; -#[cfg(not(target_env = "msvc"))] +#[cfg(target_os = "linux")] #[global_allocator] static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; @@ -149,7 +149,7 @@ async fn main() -> std::io::Result<()> { .await .expect("Failed to register redis metrics"); - #[cfg(not(target_env = "msvc"))] + #[cfg(target_os = "linux")] labrinth::routes::debug::jemalloc_mmeory_stats(&prometheus.registry) .expect("Failed to register jemalloc metrics"); diff --git a/apps/labrinth/src/routes/mod.rs b/apps/labrinth/src/routes/mod.rs index 131bddabc..64ef50ba9 100644 --- a/apps/labrinth/src/routes/mod.rs +++ b/apps/labrinth/src/routes/mod.rs @@ -12,7 +12,7 @@ pub mod internal; pub mod v2; pub mod v3; -#[cfg(not(target_env = "msvc"))] +#[cfg(target_os = "linux")] pub mod debug; pub mod v2_reroute; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 800cc3d19..795d937c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,8 +36,8 @@ importers: version: link:../../packages/daedalus devDependencies: '@tauri-apps/cli': - specifier: 2.1.0 - version: 2.1.0 + specifier: 2.5.0 + version: 2.5.0 apps/app-frontend: dependencies: @@ -57,23 +57,23 @@ importers: specifier: ^8.27.0 version: 8.27.0(vue@3.5.13(typescript@5.5.4)) '@tauri-apps/api': - specifier: ^2.1.1 - version: 2.1.1 + specifier: ^2.5.0 + version: 2.5.0 '@tauri-apps/plugin-dialog': - specifier: ^2.2.0 - version: 2.2.0 - '@tauri-apps/plugin-opener': specifier: ^2.2.1 version: 2.2.1 + '@tauri-apps/plugin-opener': + specifier: ^2.2.6 + version: 2.2.6 '@tauri-apps/plugin-os': - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.2.1 + version: 2.2.1 '@tauri-apps/plugin-updater': - specifier: ^2.3.0 - version: 2.3.0 + specifier: ^2.7.1 + version: 2.7.1 '@tauri-apps/plugin-window-state': - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.2.2 + version: 2.2.2 '@vintl/vintl': specifier: ^4.4.1 version: 4.4.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4)) @@ -2346,88 +2346,94 @@ packages: peerDependencies: vue: ^3.0.0 - '@tauri-apps/api@2.1.1': - resolution: {integrity: sha512-fzUfFFKo4lknXGJq8qrCidkUcKcH2UHhfaaCNt4GzgzGaW2iS26uFOg4tS3H4P8D6ZEeUxtiD5z0nwFF0UN30A==} + '@tauri-apps/api@2.5.0': + resolution: {integrity: sha512-Ldux4ip+HGAcPUmuLT8EIkk6yafl5vK0P0c0byzAKzxJh7vxelVtdPONjfgTm96PbN24yjZNESY8CKo8qniluA==} - '@tauri-apps/cli-darwin-arm64@2.1.0': - resolution: {integrity: sha512-ESc6J6CE8hl1yKH2vJ+ALF+thq4Be+DM1mvmTyUCQObvezNCNhzfS6abIUd3ou4x5RGH51ouiANeT3wekU6dCw==} + '@tauri-apps/cli-darwin-arm64@2.5.0': + resolution: {integrity: sha512-VuVAeTFq86dfpoBDNYAdtQVLbP0+2EKCHIIhkaxjeoPARR0sLpFHz2zs0PcFU76e+KAaxtEtAJAXGNUc8E1PzQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.1.0': - resolution: {integrity: sha512-TasHS442DFs8cSH2eUQzuDBXUST4ECjCd0yyP+zZzvAruiB0Bg+c8A+I/EnqCvBQ2G2yvWLYG8q/LI7c87A5UA==} + '@tauri-apps/cli-darwin-x64@2.5.0': + resolution: {integrity: sha512-hUF01sC06cZVa8+I0/VtsHOk9BbO75rd+YdtHJ48xTdcYaQ5QIwL4yZz9OR1AKBTaUYhBam8UX9Pvd5V2/4Dpw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.1.0': - resolution: {integrity: sha512-aP7ZBGNL4ny07Cbb6kKpUOSrmhcIK2KhjviTzYlh+pPhAptxnC78xQGD3zKQkTi2WliJLPmBYbOHWWQa57lQ9w==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.5.0': + resolution: {integrity: sha512-LQKqttsK252LlqYyX8R02MinUsfFcy3+NZiJwHFgi5Y3+ZUIAED9cSxJkyNtuY5KMnR4RlpgWyLv4P6akN1xhg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.1.0': - resolution: {integrity: sha512-ZTdgD5gLeMCzndMT2f358EkoYkZ5T+Qy6zPzU+l5vv5M7dHVN9ZmblNAYYXmoOuw7y+BY4X/rZvHV9pcGrcanQ==} + '@tauri-apps/cli-linux-arm64-gnu@2.5.0': + resolution: {integrity: sha512-mTQufsPcpdHg5RW0zypazMo4L55EfeE5snTzrPqbLX4yCK2qalN7+rnP8O8GT06xhp6ElSP/Ku1M2MR297SByQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-arm64-musl@2.1.0': - resolution: {integrity: sha512-NzwqjUCilhnhJzusz3d/0i0F1GFrwCQbkwR6yAHUxItESbsGYkZRJk0yMEWkg3PzFnyK4cWTlQJMEU52TjhEzA==} + '@tauri-apps/cli-linux-arm64-musl@2.5.0': + resolution: {integrity: sha512-rQO1HhRUQqyEaal5dUVOQruTRda/TD36s9kv1hTxZiFuSq3558lsTjAcUEnMAtBcBkps20sbyTJNMT0AwYIk8Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-x64-gnu@2.1.0': - resolution: {integrity: sha512-TyiIpMEtZxNOQmuFyfJwaaYbg3movSthpBJLIdPlKxSAB2BW0VWLY3/ZfIxm/G2YGHyREkjJvimzYE0i37PnMA==} + '@tauri-apps/cli-linux-riscv64-gnu@2.5.0': + resolution: {integrity: sha512-7oS18FN46yDxyw1zX/AxhLAd7T3GrLj3Ai6s8hZKd9qFVzrAn36ESL7d3G05s8wEtsJf26qjXnVF4qleS3dYsA==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@tauri-apps/cli-linux-x64-gnu@2.5.0': + resolution: {integrity: sha512-SG5sFNL7VMmDBdIg3nO3EzNRT306HsiEQ0N90ILe3ZABYAVoPDO/ttpCO37ApLInTzrq/DLN+gOlC/mgZvLw1w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-linux-x64-musl@2.1.0': - resolution: {integrity: sha512-/dQd0TlaxBdJACrR72DhynWftzHDaX32eBtS5WBrNJ+nnNb+znM3gON6nJ9tSE9jgDa6n1v2BkI/oIDtypfUXw==} + '@tauri-apps/cli-linux-x64-musl@2.5.0': + resolution: {integrity: sha512-QXDM8zp/6v05PNWju5ELsVwF0VH1n6b5pk2E6W/jFbbiwz80Vs1lACl9pv5kEHkrxBj+aWU/03JzGuIj2g3SkQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-win32-arm64-msvc@2.1.0': - resolution: {integrity: sha512-NdQJO7SmdYqOcE+JPU7bwg7+odfZMWO6g8xF9SXYCMdUzvM2Gv/AQfikNXz5yS7ralRhNFuW32i5dcHlxh4pDg==} + '@tauri-apps/cli-win32-arm64-msvc@2.5.0': + resolution: {integrity: sha512-pFSHFK6b+o9y4Un8w0gGLwVyFTZaC3P0kQ7umRt/BLDkzD5RnQ4vBM7CF8BCU5nkwmEBUCZd7Wt3TWZxe41o6Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.1.0': - resolution: {integrity: sha512-f5h8gKT/cB8s1ticFRUpNmHqkmaLutT62oFDB7N//2YTXnxst7EpMIn1w+QimxTvTk2gcx6EcW6bEk/y2hZGzg==} + '@tauri-apps/cli-win32-ia32-msvc@2.5.0': + resolution: {integrity: sha512-EArv1IaRlogdLAQyGlKmEqZqm5RfHCUMhJoedWu7GtdbOMUfSAz6FMX2boE1PtEmNO4An+g188flLeVErrxEKg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.1.0': - resolution: {integrity: sha512-P/+LrdSSb5Xbho1LRP4haBjFHdyPdjWvGgeopL96OVtrFpYnfC+RctB45z2V2XxqFk3HweDDxk266btjttfjGw==} + '@tauri-apps/cli-win32-x64-msvc@2.5.0': + resolution: {integrity: sha512-lj43EFYbnAta8pd9JnUq87o+xRUR0odz+4rixBtTUwUgdRdwQ2V9CzFtsMu6FQKpFQ6mujRK6P1IEwhL6ADRsQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.1.0': - resolution: {integrity: sha512-K2VhcKqBhAeS5pNOVdnR/xQRU6jwpgmkSL2ejHXcl0m+kaTggT0WRDQnFtPq6NljA7aE03cvwsbCAoFG7vtkJw==} + '@tauri-apps/cli@2.5.0': + resolution: {integrity: sha512-rAtHqG0Gh/IWLjN2zTf3nZqYqbo81oMbqop56rGTjrlWk9pTTAjkqOjSL9XQLIMZ3RbeVjveCqqCA0s8RnLdMg==} engines: {node: '>= 10'} hasBin: true - '@tauri-apps/plugin-dialog@2.2.0': - resolution: {integrity: sha512-6bLkYK68zyK31418AK5fNccCdVuRnNpbxquCl8IqgFByOgWFivbiIlvb79wpSXi0O+8k8RCSsIpOquebusRVSg==} + '@tauri-apps/plugin-dialog@2.2.1': + resolution: {integrity: sha512-wZmCouo4PgTosh/UoejPw9DPs6RllS5Pp3fuOV2JobCu36mR5AXU2MzU9NZiVaFi/5Zfc8RN0IhcZHnksJ1o8A==} - '@tauri-apps/plugin-opener@2.2.1': - resolution: {integrity: sha512-zloo4xzBqeh363xNA+xYt+7+/cu/lPYuG5PRtxjWAaSyfMqFo6IINdizkDBYylUewLiplXb5+S65GLVkeXTHPg==} + '@tauri-apps/plugin-opener@2.2.6': + resolution: {integrity: sha512-bSdkuP71ZQRepPOn8BOEdBKYJQvl6+jb160QtJX/i2H9BF6ZySY/kYljh76N2Ne5fJMQRge7rlKoStYQY5Jq1w==} - '@tauri-apps/plugin-os@2.2.0': - resolution: {integrity: sha512-HszbCdbisMlu5QhCNAN8YIWyz2v33abAWha6+uvV2CKX8P5VSct/y+kEe22JeyqrxCnWlQ3DRx7s49Byg7/0EA==} + '@tauri-apps/plugin-os@2.2.1': + resolution: {integrity: sha512-cNYpNri2CCc6BaNeB6G/mOtLvg8dFyFQyCUdf2y0K8PIAKGEWdEcu8DECkydU2B+oj4OJihDPD2de5K6cbVl9A==} - '@tauri-apps/plugin-updater@2.3.0': - resolution: {integrity: sha512-qdzyZEUN69FZQ/nRx51fBub10tT6wffJl3DLVo9q922Gvw8Wk++rZhoD9eethPlZYbog/7RGgT8JkrfLh5BKAg==} + '@tauri-apps/plugin-updater@2.7.1': + resolution: {integrity: sha512-1OPqEY/z7NDVSeTEMIhD2ss/vXWdpfZ5Th2Mk0KtPR/RA6FKuOTDGZQhxoyYBk0pcZJ+nNZUbl/IujDCLBApjA==} - '@tauri-apps/plugin-window-state@2.2.0': - resolution: {integrity: sha512-PFZ/vkZ6UPaRyuggEn8jWc/xwpiEw3Id8i6bin54zUR3vHY0MOK+ovvpvp6SEHKryCJbZMigYJz0OUT2eZ4YmQ==} + '@tauri-apps/plugin-window-state@2.2.2': + resolution: {integrity: sha512-7pFwmMtGhhhE/WgmM7PUrj0BSSWVAQMfDdYbRalphIqqF1tWBvxtlxclx8bTutpXHLJTQoCpIeWtBEIXsoAlGw==} '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -9850,70 +9856,74 @@ snapshots: dependencies: vue: 3.5.13(typescript@5.5.4) - '@tauri-apps/api@2.1.1': {} + '@tauri-apps/api@2.5.0': {} - '@tauri-apps/cli-darwin-arm64@2.1.0': + '@tauri-apps/cli-darwin-arm64@2.5.0': optional: true - '@tauri-apps/cli-darwin-x64@2.1.0': + '@tauri-apps/cli-darwin-x64@2.5.0': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.1.0': + '@tauri-apps/cli-linux-arm-gnueabihf@2.5.0': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.1.0': + '@tauri-apps/cli-linux-arm64-gnu@2.5.0': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.1.0': + '@tauri-apps/cli-linux-arm64-musl@2.5.0': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.1.0': + '@tauri-apps/cli-linux-riscv64-gnu@2.5.0': optional: true - '@tauri-apps/cli-linux-x64-musl@2.1.0': + '@tauri-apps/cli-linux-x64-gnu@2.5.0': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.1.0': + '@tauri-apps/cli-linux-x64-musl@2.5.0': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.1.0': + '@tauri-apps/cli-win32-arm64-msvc@2.5.0': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.1.0': + '@tauri-apps/cli-win32-ia32-msvc@2.5.0': optional: true - '@tauri-apps/cli@2.1.0': + '@tauri-apps/cli-win32-x64-msvc@2.5.0': + optional: true + + '@tauri-apps/cli@2.5.0': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.1.0 - '@tauri-apps/cli-darwin-x64': 2.1.0 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.1.0 - '@tauri-apps/cli-linux-arm64-gnu': 2.1.0 - '@tauri-apps/cli-linux-arm64-musl': 2.1.0 - '@tauri-apps/cli-linux-x64-gnu': 2.1.0 - '@tauri-apps/cli-linux-x64-musl': 2.1.0 - '@tauri-apps/cli-win32-arm64-msvc': 2.1.0 - '@tauri-apps/cli-win32-ia32-msvc': 2.1.0 - '@tauri-apps/cli-win32-x64-msvc': 2.1.0 + '@tauri-apps/cli-darwin-arm64': 2.5.0 + '@tauri-apps/cli-darwin-x64': 2.5.0 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.5.0 + '@tauri-apps/cli-linux-arm64-gnu': 2.5.0 + '@tauri-apps/cli-linux-arm64-musl': 2.5.0 + '@tauri-apps/cli-linux-riscv64-gnu': 2.5.0 + '@tauri-apps/cli-linux-x64-gnu': 2.5.0 + '@tauri-apps/cli-linux-x64-musl': 2.5.0 + '@tauri-apps/cli-win32-arm64-msvc': 2.5.0 + '@tauri-apps/cli-win32-ia32-msvc': 2.5.0 + '@tauri-apps/cli-win32-x64-msvc': 2.5.0 - '@tauri-apps/plugin-dialog@2.2.0': + '@tauri-apps/plugin-dialog@2.2.1': dependencies: - '@tauri-apps/api': 2.1.1 + '@tauri-apps/api': 2.5.0 - '@tauri-apps/plugin-opener@2.2.1': + '@tauri-apps/plugin-opener@2.2.6': dependencies: - '@tauri-apps/api': 2.1.1 + '@tauri-apps/api': 2.5.0 - '@tauri-apps/plugin-os@2.2.0': + '@tauri-apps/plugin-os@2.2.1': dependencies: - '@tauri-apps/api': 2.1.1 + '@tauri-apps/api': 2.5.0 - '@tauri-apps/plugin-updater@2.3.0': + '@tauri-apps/plugin-updater@2.7.1': dependencies: - '@tauri-apps/api': 2.1.1 + '@tauri-apps/api': 2.5.0 - '@tauri-apps/plugin-window-state@2.2.0': + '@tauri-apps/plugin-window-state@2.2.2': dependencies: - '@tauri-apps/api': 2.1.1 + '@tauri-apps/api': 2.5.0 '@trysound/sax@0.2.0': {}