diff --git a/.changes/api-transfrom-icon-about-menu-item.md b/.changes/api-transfrom-icon-about-menu-item.md deleted file mode 100644 index b62f4636e84f..000000000000 --- a/.changes/api-transfrom-icon-about-menu-item.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@tauri-apps/api": "patch:bug" ---- - -Fix error when calling `PredefinedMenuItem.new` to create an `About` menu item that uses an `Image` instance for the about icon. - diff --git a/.changes/api-transfrom-icon-icon-menu-item.md b/.changes/api-transfrom-icon-icon-menu-item.md deleted file mode 100644 index 734e59d17f87..000000000000 --- a/.changes/api-transfrom-icon-icon-menu-item.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@tauri-apps/api": "patch:bug" ---- - -Fix error when calling `IconMenuItem.new` using an `Image` instance for the icon. - diff --git a/.changes/bundler-nsis-portuguese.md b/.changes/bundler-nsis-portuguese.md deleted file mode 100644 index e0a586c38380..000000000000 --- a/.changes/bundler-nsis-portuguese.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"tauri-bundler": "patch:enhance" -"tauri-cli": "patch:enhance" -"@tauri-apps/cli": "patch:enhance" ---- - -Add support for `Portuguese` language for NSIS windows installer. - diff --git a/.changes/bundler-skip-ci.md b/.changes/bundler-skip-ci.md deleted file mode 100644 index 66ad0f001898..000000000000 --- a/.changes/bundler-skip-ci.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -tauri-bundler: 'patch:enhance' ---- - -The bundler now reads the `TAURI_BUNDLER_DMG_IGNORE_CI` env var to decide whether to check for `CI: true` when building DMG files. diff --git a/.changes/cli-generate-64x64-icon.md b/.changes/cli-generate-64x64-icon.md new file mode 100644 index 000000000000..18a0b9151757 --- /dev/null +++ b/.changes/cli-generate-64x64-icon.md @@ -0,0 +1,6 @@ +--- +'tauri-cli': 'patch:enhance' +'@tauri-apps/cli': 'patch:enhance' +--- + +Enhance `tauri icon` command by including 64x64 png size in default icon sizes. \ No newline at end of file diff --git a/.changes/core-background-color-permissions.md b/.changes/core-background-color-permissions.md deleted file mode 100644 index c09ed3727cf6..000000000000 --- a/.changes/core-background-color-permissions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -tauri: "patch:bug" ---- - -Add webview and window color setters to autogenerated permissions. diff --git a/.changes/core-builder-on-tray-icon-event.md b/.changes/core-builder-on-tray-icon-event.md deleted file mode 100644 index 8a4115049bd3..000000000000 --- a/.changes/core-builder-on-tray-icon-event.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"tauri": "minor:feat" ---- - -Add `tauri::Builder::on_tray_icon_event` handler. - diff --git a/.changes/core-scope-is-forbidden.md b/.changes/core-scope-is-forbidden.md deleted file mode 100644 index f3c230364cc5..000000000000 --- a/.changes/core-scope-is-forbidden.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -tauri: 'minor:feat' ---- - -Added `Scope::is_forbidden` to check if a path was explicitly forbidden. diff --git a/.changes/data-store-identifier.md b/.changes/data-store-identifier.md deleted file mode 100644 index 922ad089e6a0..000000000000 --- a/.changes/data-store-identifier.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"tauri": "minor:feat" -"tauri-runtime": "minor:feat" -"tauri-runtime-wry": "minor:feat" ---- - -Add `WebviewWindowBuilder/WebviewBuilder::data_store_identifier` on macOS. diff --git a/.changes/deb-updater-support.md b/.changes/deb-updater-support.md deleted file mode 100644 index 001a5b1dccd7..000000000000 --- a/.changes/deb-updater-support.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'tauri-bundler': minor:feat -'tauri-cli': minor:feat -'@tauri-apps/cli': minor:feat ---- - -Generate signature for `.deb` packages when `createUpdaterArtifacts` option is enabled. diff --git a/.changes/extension-path.md b/.changes/extension-path.md deleted file mode 100644 index caec2b54d50e..000000000000 --- a/.changes/extension-path.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"tauri": "minor:feat" -"tauri-runtime": "minor:feat" -"tauri-runtime-wry": "minor:feat" ---- - -Add `WebviewWindowBuilder/WebviewBuilder::extensions_path` on Linux and Windows. diff --git a/.changes/fix-add-capability-panic.md b/.changes/fix-add-capability-panic.md deleted file mode 100644 index 2263dc78774c..000000000000 --- a/.changes/fix-add-capability-panic.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -tauri: 'patch:bug' ---- - -Fix panic when a plugin command is run with a capability added at runtime (via `Manager::add_capability`). diff --git a/.changes/fix-apijs-mockipc-cb-type.md b/.changes/fix-apijs-mockipc-cb-type.md deleted file mode 100644 index fa1bb70acfdb..000000000000 --- a/.changes/fix-apijs-mockipc-cb-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@tauri-apps/api": "patch:bug" ---- - -Removed the generic in the type of the callback function argument in `mockIPC` which prevented its proper use in tests using TypeScript. diff --git a/.changes/fix-cli-plugin-path.md b/.changes/fix-cli-plugin-path.md deleted file mode 100644 index dcc04a37e214..000000000000 --- a/.changes/fix-cli-plugin-path.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'tauri-cli': patch:bug -'@tauri-apps/cli': patch:bug ---- - -Fix the exclude path in file `Cargo.toml` of plugin template generated by cli. Path changed in [#9346](https://github.com/tauri-apps/tauri/pull/9346) diff --git a/.changes/info-linux-de-and-session.md b/.changes/info-linux-de-and-session.md deleted file mode 100644 index 024c5f23591b..000000000000 --- a/.changes/info-linux-de-and-session.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"tauri-cli": "patch:feat" -"@tauri-apps/cli": "patch:feat" ---- - -Include Linux destkop environment and session type in `tauri info` command. - diff --git a/.changes/json5-capability-files.md b/.changes/json5-capability-files.md deleted file mode 100644 index b0fe7fb54699..000000000000 --- a/.changes/json5-capability-files.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"tauri": patch:bug -"tauri-utils": patch:bug ---- - -Fix `.json5` capability files not recognized even with `config-json5` feature enabled diff --git a/.changes/overlay.md b/.changes/overlay.md deleted file mode 100644 index 2c29c2da2431..000000000000 --- a/.changes/overlay.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"tauri": minor:feat -"tauri-runtime-wry": minor:feat -"tauri-runtime": minor:feat -'@tauri-apps/api': minor:feat ---- - -Add badging APIs: -- `Window/WebviewWindow::set_badge_count` for Linux, macOS and IOS. -- `Window/WebviewWindow::set_overlay_icon` for Windows Only. -- `Window/WebviewWindow::set_badge_label`for macOS Only. \ No newline at end of file diff --git a/.changes/path-plugin-is-absolute.md b/.changes/path-plugin-is-absolute.md deleted file mode 100644 index c0a8a69a543b..000000000000 --- a/.changes/path-plugin-is-absolute.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@tauri-apps/api": "patch:bug" ---- - -Fix error where using `isAbsolute` would return `Command not found`. diff --git a/.changes/set-show-menu-on-left-click-windows-api.md b/.changes/set-show-menu-on-left-click-windows-api.md deleted file mode 100644 index 2cf5ce40977d..000000000000 --- a/.changes/set-show-menu-on-left-click-windows-api.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@tauri-apps/api": "minor:feat" ---- - -Add `TrayIcon.setShowMenuOnLeftClick` method and deprecate `TrayIcon.setMenuOnLeftClick` to match the Rust API. - diff --git a/.changes/show-menu-on-left-click-windows-api.md b/.changes/show-menu-on-left-click-windows-api.md deleted file mode 100644 index c13b44136259..000000000000 --- a/.changes/show-menu-on-left-click-windows-api.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@tauri-apps/api": "minor:feat" ---- - -Add `TrayIconOptions.showMenuOnLeftClick` field and deprecate `TrayIconOptions.menuOnLeftClick` to match the Rust API. - diff --git a/.changes/show-menu-on-left-click-windows.md b/.changes/show-menu-on-left-click-windows.md deleted file mode 100644 index 721a1d8aed51..000000000000 --- a/.changes/show-menu-on-left-click-windows.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"tauri": "minor:feat" ---- - -Add `TrayIconBuilder::show_menu_on_left_click` method and deprecate `TrayIconBuilder::menu_on_left_click` for consistent naming and clarity. - diff --git a/.changes/specta-feature-fix.md b/.changes/specta-feature-fix.md deleted file mode 100644 index b937c68a6854..000000000000 --- a/.changes/specta-feature-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"tauri": patch:bug ---- - -Fix `specta-util` dependency not found error when using `specta` feature diff --git a/.changes/tray-icon-menu-on-left-click-windows-api.md b/.changes/tray-icon-menu-on-left-click-windows-api.md deleted file mode 100644 index bb1014f908c5..000000000000 --- a/.changes/tray-icon-menu-on-left-click-windows-api.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@tauri-apps/api": "minor:enhance" ---- - -Add support for `TrayIconOptions.menuOnLeftClick` option and `TrayIcon.setMenuOnLeftClick` on Windows. - diff --git a/.changes/tray-icon-menu-on-left-click-windows.md b/.changes/tray-icon-menu-on-left-click-windows.md deleted file mode 100644 index a414e88b61d1..000000000000 --- a/.changes/tray-icon-menu-on-left-click-windows.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"tauri": "minor:enhance" ---- - -Add support for `TrayIconBuilder::menu_on_left_click` and `TrayIcon::set_show_menu_on_left_click` on Windows. - diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index afc07f94768a..eceace09b3ed 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -111,7 +111,7 @@ jobs: - name: Create Pull Request With Versions Bumped if: steps.covector.outputs.commandRan == 'version' - uses: tauri-apps/create-pull-request@v3 + uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # 7.0.6 with: token: ${{ secrets.GITHUB_TOKEN }} branch: release/version-updates @@ -124,7 +124,7 @@ jobs: if: | steps.covector.outputs.successfulPublish == 'true' && steps.covector.outputs.packagesPublished != '' - uses: peter-evans/repository-dispatch@v1 + uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # 3.0.0 with: token: ${{ secrets.ORG_TAURI_BOT_PAT }} repository: tauri-apps/tauri-docs diff --git a/.github/workflows/test-cli-js.yml b/.github/workflows/test-cli-js.yml index 2f556f421638..855f00723553 100644 --- a/.github/workflows/test-cli-js.yml +++ b/.github/workflows/test-cli-js.yml @@ -48,7 +48,7 @@ jobs: if: matrix.platform == 'ubuntu-latest' run: | sudo apt-get update - sudo apt-get install -y webkit2gtk-4.1 libayatana-appindicator3-dev + sudo apt-get install -y webkit2gtk-4.1 libayatana-appindicator3-dev librsvg2-dev - uses: Swatinem/rust-cache@v2 diff --git a/.github/workflows/test-cli-rs.yml b/.github/workflows/test-cli-rs.yml index 2d97c55b2645..fe5e082c1751 100644 --- a/.github/workflows/test-cli-rs.yml +++ b/.github/workflows/test-cli-rs.yml @@ -52,7 +52,7 @@ jobs: if: matrix.platform.os == 'ubuntu-latest' run: | sudo apt-get update - sudo apt-get install -y libgtk-3-dev webkit2gtk-4.1 libayatana-appindicator3-dev + sudo apt-get install -y libgtk-3-dev webkit2gtk-4.1 libayatana-appindicator3-dev librsvg2-dev - uses: Swatinem/rust-cache@v2 diff --git a/Cargo.lock b/Cargo.lock index 173a44c92ff0..1b01969af5e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,7 +14,7 @@ version = "0.1.0" dependencies = [ "insta", "serde_json", - "tauri-utils 2.1.0", + "tauri-utils 2.1.1", ] [[package]] @@ -73,6 +73,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "aes-kw" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fa2b352dcefb5f7f3a5fb840e02665d311d878955380515e4fd50095dd3d8c" +dependencies = [ + "aes", +] + [[package]] name = "ahash" version = "0.7.8" @@ -130,9 +139,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -217,9 +226,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "api" @@ -422,7 +431,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -507,7 +516,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -570,9 +579,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" dependencies = [ "arrayvec", ] @@ -983,7 +992,7 @@ dependencies = [ "sync_wrapper 1.0.1", "tokio", "tokio-tungstenite", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -1113,18 +1122,18 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.6.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bit_field" @@ -1245,6 +1254,12 @@ dependencies = [ "cipher", ] +[[package]] +name = "borrow-or-share" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eeab4423108c5d7c744f4d234de88d18d636100093ae04caf4825134b9c3a32" + [[package]] name = "borsh" version = "1.5.1" @@ -1265,7 +1280,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", "syn_derive", ] @@ -1383,9 +1398,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" dependencies = [ "serde", ] @@ -1530,6 +1545,20 @@ dependencies = [ "thiserror 1.0.68", ] +[[package]] +name = "cargo_metadata" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc309ed89476c8957c50fb818f56fe894db857866c3e163335faa91dc34eb85" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 1.0.68", +] + [[package]] name = "cargo_toml" version = "0.17.2" @@ -1697,7 +1726,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -1717,22 +1746,6 @@ dependencies = [ "digest", ] -[[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" @@ -1741,28 +1754,14 @@ checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ "bitflags 2.6.0", "block", - "cocoa-foundation 0.2.0", + "cocoa-foundation", "core-foundation 0.10.0", - "core-graphics 0.24.0", + "core-graphics", "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" @@ -1772,7 +1771,7 @@ dependencies = [ "bitflags 2.6.0", "block", "core-foundation 0.10.0", - "core-graphics-types 0.2.0", + "core-graphics-types", "libc", "objc", ] @@ -1838,7 +1837,7 @@ dependencies = [ "encode_unicode", "lazy_static", "libc", - "unicode-width", + "unicode-width 0.1.14", "windows-sys 0.52.0", ] @@ -1924,19 +1923,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" @@ -1945,22 +1931,11 @@ checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ "bitflags 2.6.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" @@ -1981,6 +1956,12 @@ dependencies = [ "libm", ] +[[package]] +name = "cow-utils" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "417bef24afe1460300965a25ff4a24b8b45ad011948302ec221e8a0a81eb2c79" + [[package]] name = "cpio" version = "0.4.0" @@ -2154,7 +2135,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2164,7 +2145,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2196,7 +2177,7 @@ dependencies = [ "cpufeatures", "curve25519-dalek-derive", "digest", - "fiat-crypto", + "fiat-crypto 0.2.9", "rand_core 0.6.4", "rustc_version", "subtle", @@ -2211,7 +2192,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2235,7 +2216,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2246,7 +2227,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2323,7 +2304,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2344,7 +2325,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2354,7 +2335,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4abae7035bf79b9877b779505d8cf3749285b80c43941eda66604841889451dc" dependencies = [ "derive_builder_core", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2367,7 +2348,28 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.90", + "syn 2.0.94", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", + "unicode-xid", ] [[package]] @@ -2478,7 +2480,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2501,7 +2503,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2637,6 +2639,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed448-goldilocks" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87b5fa9e9e3dd5fe1369f380acd3dcdfa766dbd0a1cd5b048fb40e38a6a78e79" +dependencies = [ + "fiat-crypto 0.1.20", + "hex", + "subtle", +] + [[package]] name = "either" version = "1.13.0" @@ -2690,6 +2703,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "email_address" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" +dependencies = [ + "serde", +] + [[package]] name = "embed-resource" version = "2.5.0" @@ -2750,7 +2772,7 @@ checksum = "ba7795da175654fe16979af73f81f26a8ea27638d8d9823d317016888a63dc4c" dependencies = [ "num-traits", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -2763,6 +2785,12 @@ dependencies = [ "regex", ] +[[package]] +name = "env_home" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" + [[package]] name = "env_logger" version = "0.8.4" @@ -2817,12 +2845,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2843,9 +2871,9 @@ dependencies = [ [[package]] name = "fancy-regex" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" dependencies = [ "bit-set", "regex-automata", @@ -2869,9 +2897,9 @@ dependencies = [ [[package]] name = "fern" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" +checksum = "4316185f709b23713e41e3195f90edef7fb00c3ed4adc79769cf09cc762a3b29" dependencies = [ "log", ] @@ -2896,6 +2924,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + [[package]] name = "fiat-crypto" version = "0.2.9" @@ -2926,6 +2960,15 @@ dependencies = [ "version_check", ] +[[package]] +name = "file-id" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bc904b9bbefcadbd8e3a9fb0d464a9b979de6324c03b3c663e8994f46a5be36" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "filetime" version = "0.2.25" @@ -2940,9 +2983,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", @@ -2956,11 +2999,13 @@ checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" [[package]] name = "fluent-uri" -version = "0.1.4" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" +checksum = "1918b65d96df47d3591bed19c5cca17e3fa5d0707318e4b5ef2eae01764df7e5" dependencies = [ - "bitflags 1.3.2", + "borrow-or-share", + "ref-cast", + "serde", ] [[package]] @@ -2989,9 +3034,9 @@ dependencies = [ [[package]] name = "fontdb" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37be9fc20d966be438cd57a45767f73349477fb0f85ce86e000557f787298afb" +checksum = "a3a6f9af55fb97ad673fb7a69533eb2f967648a06fa21f8c9bb2cd6d33975716" dependencies = [ "fontconfig-parser", "log", @@ -3028,7 +3073,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -3114,9 +3159,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -3124,9 +3169,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" @@ -3141,32 +3186,32 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -3176,9 +3221,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -3427,7 +3472,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -3442,9 +3487,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "globset" @@ -3552,7 +3597,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -3639,9 +3684,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -3865,7 +3910,7 @@ dependencies = [ "http 1.1.0", "hyper 1.4.1", "hyper-util", - "rustls 0.23.13", + "rustls 0.23.20", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -4056,7 +4101,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -4113,9 +4158,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.4" +version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc144d44a31d753b02ce64093d532f55ff8dc4ebf2ffb8a63c0dda691385acae" +checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" dependencies = [ "bytemuck", "byteorder-lite", @@ -4203,7 +4248,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "serde", ] @@ -4233,9 +4278,9 @@ checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" [[package]] name = "inotify" -version = "0.9.6" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" dependencies = [ "bitflags 1.3.2", "inotify-sys", @@ -4273,6 +4318,15 @@ dependencies = [ "similar", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + [[package]] name = "interpolate_name" version = "0.2.4" @@ -4281,7 +4335,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -4327,15 +4381,6 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" -[[package]] -name = "iso8601" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924e5d73ea28f59011fec52a0d12185d496a9b075d360657aed2a5707f701153" -dependencies = [ - "nom", -] - [[package]] name = "iter-read" version = "1.1.0" @@ -4472,25 +4517,13 @@ dependencies = [ "thiserror 1.0.68", ] -[[package]] -name = "json-patch" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc" -dependencies = [ - "jsonptr 0.4.7", - "serde", - "serde_json", - "thiserror 1.0.68", -] - [[package]] name = "json-patch" version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" dependencies = [ - "jsonptr 0.6.3", + "jsonptr", "serde", "serde_json", "thiserror 1.0.68", @@ -4507,17 +4540,6 @@ dependencies = [ "serde", ] -[[package]] -name = "jsonptr" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627" -dependencies = [ - "fluent-uri", - "serde", - "serde_json", -] - [[package]] name = "jsonptr" version = "0.6.3" @@ -4639,32 +4661,27 @@ dependencies = [ [[package]] name = "jsonschema" -version = "0.18.3" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0f4bea31643be4c6a678e9aa4ae44f0db9e5609d5ca9dc9083d06eb3e9a27a" +checksum = "c2303ef9ebb6acd7afe7c48cbc06ab807349c429d4e47c4cde8b35400503198f" dependencies = [ "ahash 0.8.11", - "anyhow", "base64 0.22.1", "bytecount", - "clap", + "email_address", "fancy-regex", "fraction", - "getrandom 0.2.15", - "iso8601", + "idna", "itoa 1.0.11", - "memchr", "num-cmp", "once_cell", - "parking_lot", "percent-encoding", - "regex", + "referencing", + "regex-syntax", "reqwest 0.12.9", "serde", "serde_json", - "time", - "url", - "uuid", + "uuid-simd", ] [[package]] @@ -4826,9 +4843,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.159" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libfuzzer-sys" @@ -4858,7 +4875,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -5091,31 +5108,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "miette" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4edc8853320c2a0dab800fbda86253c8938f6ea88510dc92c5f1ed20e794afc1" -dependencies = [ - "cfg-if", - "miette-derive", - "owo-colors", - "textwrap", - "thiserror 1.0.68", - "unicode-width", -] - -[[package]] -name = "miette-derive" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.90", -] - [[package]] name = "mime" version = "0.3.17" @@ -5178,18 +5170,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - [[package]] name = "mio" version = "1.0.2" @@ -5198,6 +5178,7 @@ checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi 0.3.9", "libc", + "log", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -5253,7 +5234,7 @@ dependencies = [ "napi-derive-backend", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -5268,7 +5249,7 @@ dependencies = [ "quote", "regex", "semver", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -5307,7 +5288,7 @@ dependencies = [ "jni-sys", "log", "ndk-sys", - "num_enum", + "num_enum 0.7.3", "raw-window-handle", "thiserror 1.0.68", ] @@ -5400,32 +5381,43 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "notify" -version = "6.1.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +checksum = "c533b4c39709f9ba5005d8002048266593c1cfaf3c5f0739d5b8ab0c6c504009" dependencies = [ "bitflags 2.6.0", - "crossbeam-channel", "filetime", "fsevent-sys", "inotify", "kqueue", "libc", "log", - "mio 0.8.11", + "mio", + "notify-types", "walkdir", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] -name = "notify-debouncer-mini" -version = "0.4.1" +name = "notify-debouncer-full" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d40b221972a1fc5ef4d858a2f671fb34c75983eb385463dff3780eeff6a9d43" +checksum = "9dcf855483228259b2353f89e99df35fc639b2b2510d1166e4858e3f67ec1afb" dependencies = [ - "crossbeam-channel", + "file-id", "log", "notify", + "notify-types", + "walkdir", +] + +[[package]] +name = "notify-types" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585d3cb5e12e01aed9e8a1f70d5c6b5e86fe2a6e48fc8cd0b3e0b8df6f6eb174" +dependencies = [ + "instant", ] [[package]] @@ -5499,7 +5491,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -5558,13 +5550,34 @@ dependencies = [ "libm", ] +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + [[package]] name = "num_enum" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.7.3", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -5576,7 +5589,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -5904,7 +5917,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -5983,11 +5996,36 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" +[[package]] +name = "oxc-miette" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e03e63fd113c068b82d07c9c614b0b146c08a3ac0a4dface3ea1d1a9d14d549e" +dependencies = [ + "cfg-if", + "owo-colors", + "oxc-miette-derive", + "textwrap", + "thiserror 1.0.68", + "unicode-width 0.2.0", +] + +[[package]] +name = "oxc-miette-derive" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e21f680e8c5f1900297d394627d495351b9e37761f7bbf90116bd5eeb6e80967" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + [[package]] name = "oxc_allocator" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "466379b9ab2e05996bfedfae9c96753a633bb5a53aaf0898eb0e0ab09e169514" +checksum = "931f734a61f63a0571163b160b764d90d83077c4d2631d15b26fe1b66763dad8" dependencies = [ "allocator-api2", "bumpalo", @@ -5995,55 +6033,64 @@ dependencies = [ [[package]] name = "oxc_ast" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34bd4f56fe32adea489153f6d681d9ee01f0336b9b6a89f062611488d8f80797" +checksum = "b9a771175e84c2324c841fe7ca3ddacb5df8102f043e2fc3e96d0bfee039c13d" dependencies = [ "bitflags 2.6.0", + "cow-utils", "num-bigint", + "num-traits", "oxc_allocator", "oxc_ast_macros", + "oxc_estree", + "oxc_regular_expression", "oxc_span", "oxc_syntax", ] [[package]] name = "oxc_ast_macros" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197b36739db0e80919e19a90785233eea5664697d4cd829bd49af34838ec43d2" +checksum = "ed71131e79889e226fb6510b90fa1a4a7495c8fdac43a4f505334fb0f1324e3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] name = "oxc_diagnostics" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd4bb48b9527f5825c84acb688ec1485df4a5edadc17b3582626bb49736752b" +checksum = "e37049d46eb02a97e4cc0900672a921666393c642c1ad419a20d483285f5b590" dependencies = [ - "miette", - "owo-colors", - "textwrap", - "unicode-width", + "oxc-miette", + "rustc-hash", ] +[[package]] +name = "oxc_estree" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fa45c638ccfd88b5c26147b0a98e1e8dd49542327dda94445b940ef91920d6a" + [[package]] name = "oxc_index" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9aa9446f6d2a64d0baa02fe20dc3d64e3e112083854b84fdacb82261be2b84" +checksum = "ae76739229d0cc5e834e0e3b9e8c4078a86828ff47f5bc71138e4571ce528f83" [[package]] name = "oxc_parser" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3432e80a58cfb38f9a138203e64d0f9a621d4c4e9d18e3e3bd870b51ce1f0e" +checksum = "0106e10cd67a59d91a75232d4c40f188b8532efea9b9bbed110bce157e7d3b9a" dependencies = [ "assert-unchecked", "bitflags 2.6.0", + "cow-utils", "memchr", "num-bigint", "num-traits", @@ -6059,12 +6106,14 @@ dependencies = [ [[package]] name = "oxc_regular_expression" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc6d05fec98ad6cc864ba8cfe7ece2e258106059a9a57e35b02450650b06979" +checksum = "f1bd0d5b1b943173378a5f61d6a4c49edc7e8c9157241e9bbba54594d7449b4c" dependencies = [ "oxc_allocator", + "oxc_ast_macros", "oxc_diagnostics", + "oxc_estree", "oxc_span", "phf 0.11.2", "rustc-hash", @@ -6073,27 +6122,30 @@ dependencies = [ [[package]] name = "oxc_span" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a862a896ac3abd269863a19d4f77302b019458d90513705c7a017b138c8449b" +checksum = "c7b5d7caf8a20611f34c5c9ebdf232b6b42498e5424d02ef1e2dffe31553b49f" dependencies = [ "compact_str", - "miette", + "oxc-miette", "oxc_allocator", "oxc_ast_macros", + "oxc_estree", ] [[package]] name = "oxc_syntax" -version = "0.25.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50c7ea034fb12f65376cfffc8ae4bfde3cda0a1e14407f82ffba1d26431703d" +checksum = "3135d5ddd0dc8ca535c0ac517a526ace8cac2699bb1345064c9fe046ca761dfa" dependencies = [ + "assert-unchecked", "bitflags 2.6.0", "dashmap", "nonmax", "oxc_allocator", "oxc_ast_macros", + "oxc_estree", "oxc_index", "oxc_span", "phf 0.11.2", @@ -6274,7 +6326,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -6333,7 +6385,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -6349,14 +6401,15 @@ dependencies = [ [[package]] name = "pgp" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6c842436d5fa2b59eac1e9b3d142b50bfff99c1744c816b1f4c2ac55a20754" +checksum = "49bb5f77aaf8ae1ed6fe63387ad513b10cd44716fd053ecc227b9493c096cdb2" dependencies = [ "aes", "aes-gcm", + "aes-kw", "argon2", - "base64 0.22.1", + "base64 0.21.7", "bitfield", "block-padding", "blowfish", @@ -6372,6 +6425,7 @@ dependencies = [ "crc24", "curve25519-dalek", "derive_builder", + "derive_more 1.0.0", "des", "digest", "dsa", @@ -6391,7 +6445,7 @@ dependencies = [ "nom", "num-bigint-dig", "num-traits", - "num_enum", + "num_enum 0.5.11", "ocb3", "p256 0.13.2", "p384", @@ -6408,6 +6462,7 @@ dependencies = [ "thiserror 1.0.68", "twofish", "x25519-dalek", + "x448", "zeroize", ] @@ -6515,7 +6570,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -6545,12 +6600,6 @@ dependencies = [ "siphasher 0.3.11", ] -[[package]] -name = "pico-args" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" - [[package]] name = "pico-args" version = "0.5.0" @@ -6574,7 +6623,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -6647,9 +6696,9 @@ dependencies = [ [[package]] name = "png" -version = "0.17.15" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67582bd5b65bdff614270e2ea89a1cf15bef71245cc1e5f7ea126977144211d" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -6785,7 +6834,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", "version_check", "yansi", ] @@ -6806,14 +6855,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] name = "proptest" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set", "bit-vec", @@ -6912,7 +6961,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.13", + "rustls 0.23.20", "socket2", "thiserror 1.0.68", "tokio", @@ -6929,7 +6978,7 @@ dependencies = [ "rand 0.8.5", "ring", "rustc-hash", - "rustls 0.23.13", + "rustls 0.23.20", "slab", "thiserror 1.0.68", "tinyvec", @@ -6951,9 +7000,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -7129,9 +7178,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.5" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" dependencies = [ "avif-serialize", "imgref", @@ -7197,6 +7246,39 @@ dependencies = [ "thiserror 1.0.68", ] +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "referencing" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fb7a1f338d8e32357ad1d7078454c248e5fdd2188fbb6966b400c2fa4d4f566" +dependencies = [ + "ahash 0.8.11", + "fluent-uri", + "once_cell", + "percent-encoding", + "serde_json", +] + [[package]] name = "regex" version = "1.11.1" @@ -7310,7 +7392,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.13", + "rustls 0.23.20", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", @@ -7351,14 +7433,14 @@ dependencies = [ [[package]] name = "resvg" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7314563c59c7ce31c18e23ad3dd092c37b928a0fa4e1c0a1a6504351ab411d1" +checksum = "4a325d5e8d1cebddd070b13f44cec8071594ab67d1012797c121f27a669b7958" dependencies = [ "gif", "image-webp 0.1.3", "log", - "pico-args 0.5.0", + "pico-args", "rgb", "svgtypes", "tiny-skia", @@ -7474,9 +7556,9 @@ dependencies = [ [[package]] name = "rpm" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95c49b6baaa0e8fa864b2069d1e94e7a132471da3ac26a132f3fa7e71416772c" +checksum = "1630639f4dbc1c71ad7b704cda2171584c80735c502efae94804d02763fc6f7d" dependencies = [ "bitflags 2.6.0", "bzip2", @@ -7497,7 +7579,7 @@ dependencies = [ "pgp", "sha1", "sha2", - "thiserror 1.0.68", + "thiserror 2.0.9", "xz2", "zstd", ] @@ -7594,15 +7676,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.37" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags 2.6.0", "errno", "libc", "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7633,9 +7715,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.13" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ "log", "once_cell", @@ -7691,9 +7773,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" [[package]] name = "rustls-webpki" @@ -7759,7 +7841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" dependencies = [ "byteorder", - "derive_more", + "derive_more 0.99.18", "twox-hash", ] @@ -7828,7 +7910,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -7854,7 +7936,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -7949,7 +8031,7 @@ checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" dependencies = [ "bitflags 1.3.2", "cssparser", - "derive_more", + "derive_more 0.99.18", "fxhash", "log", "matches", @@ -7963,9 +8045,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" dependencies = [ "serde", ] @@ -7978,9 +8060,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.216" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -8042,13 +8124,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.216" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8059,7 +8141,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8073,9 +8155,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.133" +version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ "indexmap 2.6.0", "itoa 1.0.11", @@ -8102,7 +8184,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8153,7 +8235,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8171,9 +8253,9 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.1.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" +checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" dependencies = [ "futures", "log", @@ -8185,13 +8267,13 @@ dependencies = [ [[package]] name = "serial_test_derive" -version = "3.1.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" +checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8495,7 +8577,7 @@ checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ "bytemuck", "cfg_aliases", - "core-graphics 0.24.0", + "core-graphics", "foreign-types 0.5.0", "js-sys", "log", @@ -8583,7 +8665,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8816,9 +8898,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.90" +version = "2.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" dependencies = [ "proc-macro2", "quote", @@ -8834,7 +8916,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8872,7 +8954,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8929,9 +9011,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc6b53216f32e60efc27dfa111268481e4dfba53e553e4cdebcaed9db36c11bb" dependencies = [ "bitflags 2.6.0", - "cocoa 0.26.0", + "cocoa", "core-foundation 0.10.0", - "core-graphics 0.24.0", + "core-graphics", "crossbeam-channel", "dispatch", "dlopen2", @@ -8968,7 +9050,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -8979,9 +9061,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" dependencies = [ "filetime", "libc", @@ -8996,7 +9078,7 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.1.1" +version = "2.2.0" dependencies = [ "anyhow", "bytes", @@ -9041,8 +9123,8 @@ dependencies = [ "tauri-macros", "tauri-runtime", "tauri-runtime-wry", - "tauri-utils 2.1.0", - "thiserror 2.0.6", + "tauri-utils 2.1.1", + "thiserror 2.0.9", "tokio", "tracing", "tray-icon", @@ -9057,7 +9139,7 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.3" +version = "2.0.4" dependencies = [ "anyhow", "cargo_toml", @@ -9071,7 +9153,7 @@ dependencies = [ "serde", "serde_json", "tauri-codegen", - "tauri-utils 2.1.0", + "tauri-utils 2.1.1", "tauri-winres", "toml 0.8.19", "walkdir", @@ -9079,7 +9161,7 @@ dependencies = [ [[package]] name = "tauri-bundler" -version = "2.1.0" +version = "2.2.0" dependencies = [ "anyhow", "ar", @@ -9108,9 +9190,9 @@ dependencies = [ "tar", "tauri-icns", "tauri-macos-sign", - "tauri-utils 2.1.0", + "tauri-utils 2.1.1", "tempfile", - "thiserror 2.0.6", + "thiserror 2.0.9", "time", "ureq", "url", @@ -9118,12 +9200,12 @@ dependencies = [ "walkdir", "windows-registry 0.3.0", "windows-sys 0.59.0", - "zip 2.2.0", + "zip 2.2.2", ] [[package]] name = "tauri-cli" -version = "2.1.0" +version = "2.2.2" dependencies = [ "anyhow", "ar", @@ -9164,7 +9246,7 @@ dependencies = [ "memchr", "minisign", "notify", - "notify-debouncer-mini", + "notify-debouncer-full", "object 0.36.5", "os_info", "os_pipe", @@ -9188,7 +9270,7 @@ dependencies = [ "tauri-icns", "tauri-macos-sign", "tauri-utils 1.6.0", - "tauri-utils 2.1.0", + "tauri-utils 2.1.1", "tempfile", "tokio", "toml 0.8.19", @@ -9213,7 +9295,7 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.3" +version = "2.0.4" dependencies = [ "base64 0.22.1", "brotli", @@ -9228,9 +9310,9 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.90", - "tauri-utils 2.1.0", - "thiserror 2.0.6", + "syn 2.0.94", + "tauri-utils 2.1.1", + "thiserror 2.0.9", "time", "url", "uuid", @@ -9245,13 +9327,13 @@ dependencies = [ "futures", "futures-util", "hyper 0.14.30", - "pico-args 0.4.2", + "pico-args", "serde", "serde_json", "signal-hook", "signal-hook-tokio", "tokio", - "which 4.4.2", + "which 7.0.1", ] [[package]] @@ -9297,21 +9379,21 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.3" +version = "2.0.4" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", "tauri-codegen", - "tauri-utils 2.1.0", + "tauri-utils 2.1.1", ] [[package]] name = "tauri-plugin" -version = "2.0.0-rc.13" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6de7ffe64afa61c4cc13d450d64643b8db6cbb177a802beb88bf595594505ddf" +checksum = "e753f2a30933a9bbf0a202fa47d7cc4a3401f06e8d6dcc53b79aa62954828c79" dependencies = [ "anyhow", "glob", @@ -9319,14 +9401,14 @@ dependencies = [ "schemars", "serde", "serde_json", - "tauri-utils 2.0.0-rc.13", + "tauri-utils 2.1.0", "toml 0.8.19", "walkdir", ] [[package]] name = "tauri-plugin" -version = "2.0.3" +version = "2.0.4" dependencies = [ "anyhow", "glob", @@ -9334,20 +9416,20 @@ dependencies = [ "schemars", "serde", "serde_json", - "tauri-utils 2.1.0", + "tauri-utils 2.1.1", "toml 0.8.19", "walkdir", ] [[package]] name = "tauri-plugin-log" -version = "2.0.0-rc.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b57e4666c4a5d81f81b7bb8eacf51ae32c4e69c35071aabb480ad20a80836e4e" +checksum = "eddd784c138c08a43954bc3e735402e6b2b2ee8d8c254a7391f4e77c01273dd5" dependencies = [ "android_logger", "byte-unit", - "cocoa 0.25.0", + "cocoa", "fern", "log", "objc", @@ -9356,8 +9438,8 @@ dependencies = [ "serde_repr", "swift-rs", "tauri", - "tauri-plugin 2.0.0-rc.13", - "thiserror 1.0.68", + "tauri-plugin 2.0.3", + "thiserror 2.0.9", "time", ] @@ -9368,13 +9450,13 @@ dependencies = [ "log", "serde", "tauri", - "tauri-plugin 2.0.3", - "thiserror 2.0.6", + "tauri-plugin 2.0.4", + "thiserror 2.0.9", ] [[package]] name = "tauri-runtime" -version = "2.2.0" +version = "2.3.0" dependencies = [ "dpi", "gtk", @@ -9383,15 +9465,15 @@ dependencies = [ "raw-window-handle", "serde", "serde_json", - "tauri-utils 2.1.0", - "thiserror 2.0.6", + "tauri-utils 2.1.1", + "thiserror 2.0.9", "url", "windows", ] [[package]] name = "tauri-runtime-wry" -version = "2.2.0" +version = "2.3.0" dependencies = [ "gtk", "http 1.1.0", @@ -9405,7 +9487,7 @@ dependencies = [ "softbuffer", "tao", "tauri-runtime", - "tauri-utils 2.1.0", + "tauri-utils 2.1.1", "tracing", "url", "webkit2gtk", @@ -9421,7 +9503,7 @@ dependencies = [ "schemars", "serde", "serde_json", - "tauri-utils 2.1.0", + "tauri-utils 2.1.1", "url", ] @@ -9472,17 +9554,18 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-rc.13" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a271545e4c25b36b922d98cf7e0c1755f64e92355705f656893e352aef0331e3" +checksum = "9271a88f99b4adea0dc71d0baca4505475a0bbd139fb135f62958721aaa8fe54" dependencies = [ - "cargo_metadata", + "cargo_metadata 0.18.1", "ctor", "dunce", "glob", "html5ever", + "http 1.1.0", "infer 0.16.0", - "json-patch 2.0.0", + "json-patch 3.0.1", "kuchikiki", "log", "memchr", @@ -9497,7 +9580,7 @@ dependencies = [ "serde_json", "serde_with", "swift-rs", - "thiserror 1.0.68", + "thiserror 2.0.9", "toml 0.8.19", "url", "urlpattern", @@ -9506,11 +9589,11 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.1.0" +version = "2.1.1" dependencies = [ "aes-gcm", "brotli", - "cargo_metadata", + "cargo_metadata 0.19.0", "ctor", "dunce", "getrandom 0.2.15", @@ -9536,7 +9619,7 @@ dependencies = [ "serial_test", "serialize-to-javascript", "swift-rs", - "thiserror 2.0.6", + "thiserror 2.0.9", "toml 0.8.19", "url", "urlpattern", @@ -9567,14 +9650,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", "once_cell", - "rustix 0.38.37", + "rustix 0.38.42", "windows-sys 0.59.0", ] @@ -9617,7 +9700,7 @@ dependencies = [ "smawk", "terminal_size", "unicode-linebreak", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -9637,11 +9720,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.6" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec2a1820ebd077e2b90c4df007bebf344cd394098a13c563957d0afc83ea47" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" dependencies = [ - "thiserror-impl 2.0.6", + "thiserror-impl 2.0.9", ] [[package]] @@ -9652,18 +9735,18 @@ checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] name = "thiserror-impl" -version = "2.0.6" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65750cab40f4ff1929fb1ba509e9914eb756131cef4210da8d5d700d26f6312" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -9783,7 +9866,7 @@ dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.2", + "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", @@ -9800,7 +9883,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -9829,7 +9912,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.13", + "rustls 0.23.20", "rustls-pki-types", "tokio", ] @@ -9960,14 +10043,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.1", "tokio", "tower-layer", "tower-service", @@ -10006,7 +10089,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -10024,7 +10107,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533fc2d4105e0e3d96ce1c71f2d308c9fbbe2ef9c587cab63dd627ab5bde218f" dependencies = [ - "core-graphics 0.24.0", + "core-graphics", "crossbeam-channel", "dirs", "libappindicator", @@ -10277,6 +10360,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -10307,16 +10396,16 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.10.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" dependencies = [ "base64 0.22.1", "flate2", "log", "native-tls", "once_cell", - "rustls 0.23.13", + "rustls 0.23.20", "rustls-pki-types", "socks", "url", @@ -10355,9 +10444,9 @@ dependencies = [ [[package]] name = "usvg" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6803057b5cbb426e9fb8ce2216f3a9b4ca1dd2c705ba3cbebc13006e437735fd" +checksum = "7447e703d7223b067607655e625e0dbca80822880248937da65966194c4864e6" dependencies = [ "base64 0.22.1", "data-url", @@ -10366,7 +10455,7 @@ dependencies = [ "imagesize", "kurbo", "log", - "pico-args 0.5.0", + "pico-args", "roxmltree", "rustybuzz", "simplecss", @@ -10421,6 +10510,17 @@ dependencies = [ "sha1_smol", ] +[[package]] +name = "uuid-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b082222b4f6619906941c17eb2297fff4c2fb96cb60164170522942a200bd8" +dependencies = [ + "outref", + "uuid", + "vsimd", +] + [[package]] name = "v_frame" version = "0.3.8" @@ -10580,7 +10680,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", "wasm-bindgen-shared", ] @@ -10614,7 +10714,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10709,9 +10809,9 @@ dependencies = [ [[package]] name = "webview2-com" -version = "0.33.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" +checksum = "823e7ebcfaea51e78f72c87fc3b65a1e602c321f407a0b36dbb327d7bb7cd921" dependencies = [ "webview2-com-macros", "webview2-com-sys", @@ -10729,14 +10829,14 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] name = "webview2-com-sys" -version = "0.33.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" +checksum = "7a82bce72db6e5ee83c68b5de1e2cd6ea195b9fbff91cb37df5884cbe3222df4" dependencies = [ "thiserror 1.0.68", "windows", @@ -10751,25 +10851,25 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "which" -version = "4.4.2" +version = "6.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" dependencies = [ "either", "home", - "once_cell", - "rustix 0.38.37", + "rustix 0.38.42", + "winsafe", ] [[package]] name = "which" -version = "6.0.3" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +checksum = "fb4a9e33648339dc1642b0e36e21b3385e6148e289226f657c809dee59df5028" dependencies = [ "either", - "home", - "rustix 0.38.37", + "env_home", + "rustix 0.38.42", "winsafe", ] @@ -10801,7 +10901,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -10864,7 +10964,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -10875,7 +10975,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -11197,9 +11297,9 @@ checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" [[package]] name = "worker" -version = "0.3.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bd73bd2ea409ae91df99293cbed8b892d39c4c0df5039b646be7586df62c6b" +checksum = "727789ca7eff9733efbea9d0e97779edc1cf1926e98aee7d7d8afe32805458aa" dependencies = [ "async-trait", "axum", @@ -11244,14 +11344,14 @@ dependencies = [ [[package]] name = "worker-macros" -version = "0.3.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bbf47d65e77652febb28abedac18b317d8dfe4e57f0d8d9998c4e991fca8e23" +checksum = "7d625c24570ba9207a2617476013335f28a95cbe513e59bb814ffba092a18058" dependencies = [ "async-trait", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-macro-support", @@ -11260,9 +11360,9 @@ dependencies = [ [[package]] name = "worker-sys" -version = "0.3.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4fbb72a85a6509e5ac5dcd1361543468be089ff5ea5c932043b6d0aeac7b6a5" +checksum = "34563340d41016b4381257c5a16b0d2bc590dbe00500ecfbebcaa16f5f85ce90" dependencies = [ "cfg-if", "js-sys", @@ -11284,9 +11384,9 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "wry" -version = "0.47.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "553ca1ce149982123962fac2506aa75b8b76288779a77e72b12fa2fc34938647" +checksum = "1e644bf458e27b11b0ecafc9e5633d1304fdae82baca1d42185669752fe6ca4f" dependencies = [ "base64 0.22.1", "block2", @@ -11314,7 +11414,7 @@ dependencies = [ "sha2", "soup3", "tao-macros", - "thiserror 1.0.68", + "thiserror 2.0.9", "tracing", "url", "webkit2gtk", @@ -11368,6 +11468,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "x448" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cd07d4fae29e07089dbcacf7077cd52dce7760125ca9a4dd5a35ca603ffebb" +dependencies = [ + "ed448-goldilocks", + "hex", + "rand_core 0.5.1", +] + [[package]] name = "x509" version = "0.2.0" @@ -11405,7 +11516,7 @@ checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", "linux-raw-sys 0.4.14", - "rustix 0.38.37", + "rustix 0.38.42", ] [[package]] @@ -11467,7 +11578,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", "synstructure 0.13.1", ] @@ -11489,7 +11600,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -11509,7 +11620,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", "synstructure 0.13.1", ] @@ -11530,7 +11641,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -11552,7 +11663,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.94", ] [[package]] @@ -11569,9 +11680,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.2.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" +checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" dependencies = [ "arbitrary", "crc32fast", @@ -11580,7 +11691,7 @@ dependencies = [ "flate2", "indexmap 2.6.0", "memchr", - "thiserror 1.0.68", + "thiserror 2.0.9", "zopfli", ] diff --git a/bench/Cargo.toml b/bench/Cargo.toml index 7b9b36e334cb..2a2b92886e56 100644 --- a/bench/Cargo.toml +++ b/bench/Cargo.toml @@ -9,11 +9,11 @@ description = "Cross-platform WebView rendering library" repository = "https://github.com/tauri-apps/wry" [dependencies] -anyhow = "1.0.40" +anyhow = "1" time = { version = "0.3", features = ["formatting"] } -tempfile = "3.2.0" -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } +tempfile = "3" +serde_json = "1" +serde = { version = "1", features = ["derive"] } [[bin]] name = "run_benchmark" diff --git a/bench/tests/cpu_intensive/src-tauri/Cargo.toml b/bench/tests/cpu_intensive/src-tauri/Cargo.toml index e4471b07a7dd..f88b056196cd 100644 --- a/bench/tests/cpu_intensive/src-tauri/Cargo.toml +++ b/bench/tests/cpu_intensive/src-tauri/Cargo.toml @@ -11,6 +11,6 @@ tauri-build = { path = "../../../../crates/tauri-build", features = [ ] } [dependencies] -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } +serde_json = "1" +serde = { version = "1", features = ["derive"] } tauri = { path = "../../../../crates/tauri", features = [] } diff --git a/bench/tests/files_transfer/src-tauri/Cargo.toml b/bench/tests/files_transfer/src-tauri/Cargo.toml index 247a671e3043..39b309e70e03 100644 --- a/bench/tests/files_transfer/src-tauri/Cargo.toml +++ b/bench/tests/files_transfer/src-tauri/Cargo.toml @@ -11,6 +11,6 @@ tauri-build = { path = "../../../../crates/tauri-build", features = [ ] } [dependencies] -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } +serde_json = "1" +serde = { version = "1", features = ["derive"] } tauri = { path = "../../../../crates/tauri", features = [] } diff --git a/bench/tests/files_transfer/src-tauri/src/main.rs b/bench/tests/files_transfer/src-tauri/src/main.rs index 9ac64be2d4b7..3563d86850bf 100644 --- a/bench/tests/files_transfer/src-tauri/src/main.rs +++ b/bench/tests/files_transfer/src-tauri/src/main.rs @@ -18,7 +18,7 @@ async fn read_file(app: AppHandle) -> Result { .path() .resolve(".tauri_3mb.json", BaseDirectory::Home) .map_err(|e| e.to_string())?; - let contents = read(&path).map_err(|e| e.to_string())?; + let contents = read(path).map_err(|e| e.to_string())?; Ok(Response::new(contents)) } diff --git a/bench/tests/helloworld/src-tauri/Cargo.toml b/bench/tests/helloworld/src-tauri/Cargo.toml index e8d1ad8d9668..825b0c2d7df8 100644 --- a/bench/tests/helloworld/src-tauri/Cargo.toml +++ b/bench/tests/helloworld/src-tauri/Cargo.toml @@ -11,6 +11,6 @@ tauri-build = { path = "../../../../crates/tauri-build", features = [ ] } [dependencies] -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } +serde_json = "1" +serde = { version = "1", features = ["derive"] } tauri = { path = "../../../../crates/tauri", features = [] } diff --git a/crates/tauri-build/CHANGELOG.md b/crates/tauri-build/CHANGELOG.md index 43c42af79d65..4eaa8d59dec0 100644 --- a/crates/tauri-build/CHANGELOG.md +++ b/crates/tauri-build/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## \[2.0.4] + +### Dependencies + +- Upgraded to `tauri-utils@2.1.1` +- Upgraded to `tauri-codegen@2.0.4` + ## \[2.0.3] ### Dependencies diff --git a/crates/tauri-build/Cargo.toml b/crates/tauri-build/Cargo.toml index 858e500f1787..c6a8972b8d62 100644 --- a/crates/tauri-build/Cargo.toml +++ b/crates/tauri-build/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-build" -version = "2.0.3" +version = "2.0.4" description = "build time code to pair with https://crates.io/crates/tauri" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -28,8 +28,8 @@ rustdoc-args = ["--cfg", "docsrs"] [dependencies] anyhow = "1" quote = { version = "1", optional = true } -tauri-codegen = { version = "2.0.3", path = "../tauri-codegen", optional = true } -tauri-utils = { version = "2.1.0", path = "../tauri-utils", features = [ +tauri-codegen = { version = "2.0.4", path = "../tauri-codegen", optional = true } +tauri-utils = { version = "2.1.1", path = "../tauri-utils", features = [ "build", "resources", ] } @@ -37,13 +37,14 @@ cargo_toml = "0.17" serde = "1" serde_json = "1" heck = "0.5" -json-patch = "3.0" +json-patch = "3" walkdir = "2" tauri-winres = "0.1" semver = "1" dirs = "5" glob = "0.3" toml = "0.8" +# Our code requires at least 0.8.18 so don't simplify this to 0.8 schemars = { version = "0.8.18", features = ["preserve_order"] } [features] diff --git a/crates/tauri-bundler/CHANGELOG.md b/crates/tauri-bundler/CHANGELOG.md index 1acb1a70b9db..5f6dfcaf0b4f 100644 --- a/crates/tauri-bundler/CHANGELOG.md +++ b/crates/tauri-bundler/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## \[2.2.0] + +### New Features + +- [`cccb308c7`](https://www.github.com/tauri-apps/tauri/commit/cccb308c7b559b0838138d6cea280665f060c925) ([#11562](https://www.github.com/tauri-apps/tauri/pull/11562) by [@jLynx](https://www.github.com/tauri-apps/tauri/../../jLynx)) Generate signature for `.deb` packages when `createUpdaterArtifacts` option is enabled. + +### Enhancements + +- [`93a3a043d`](https://www.github.com/tauri-apps/tauri/commit/93a3a043d39cc96515d51d98beeb14261d3a246b) ([#11727](https://www.github.com/tauri-apps/tauri/pull/11727) by [@Kiyozz](https://www.github.com/tauri-apps/tauri/../../Kiyozz)) Add support for `Portuguese` language for NSIS windows installer. +- [`53f808674`](https://www.github.com/tauri-apps/tauri/commit/53f808674b2c0012bc44a41ced90e742afbb41e8) ([#11799](https://www.github.com/tauri-apps/tauri/pull/11799) by [@FabianLars](https://www.github.com/tauri-apps/tauri/../../FabianLars)) The bundler now reads the `TAURI_BUNDLER_DMG_IGNORE_CI` env var to decide whether to check for `CI: true` when building DMG files. + +### Dependencies + +- Upgraded to `tauri-utils@2.1.1` + ## \[2.1.0] ### New Features diff --git a/crates/tauri-bundler/Cargo.toml b/crates/tauri-bundler/Cargo.toml index 0bac40537fcd..c5f44d1a393e 100644 --- a/crates/tauri-bundler/Cargo.toml +++ b/crates/tauri-bundler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-bundler" -version = "2.1.0" +version = "2.2.0" authors = [ "George Burton ", "Tauri Programme within The Commons Conservancy", @@ -15,32 +15,30 @@ rust-version = "1.77.2" exclude = ["CHANGELOG.md", "/target", "rustfmt.toml"] [dependencies] -tauri-utils = { version = "2.1.0", path = "../tauri-utils", features = [ +tauri-utils = { version = "2.1.1", path = "../tauri-utils", features = [ "resources", ] } -image = "0.25.0" -flate2 = "1.0" -anyhow = "1.0" +image = "0.25" +flate2 = "1" +anyhow = "1" thiserror = "2" -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } -strsim = "0.11.0" -tar = "0.4.40" +serde_json = "1" +serde = { version = "1", features = ["derive"] } +strsim = "0.11" +tar = "0.4" walkdir = "2" handlebars = "6" -tempfile = "3.10.1" +tempfile = "3" log = { version = "0.4.21", features = ["kv"] } dirs = "5" os_pipe = "1" -ureq = { version = "2.9.6", default-features = false, features = [ - "socks-proxy", -] } +ureq = { version = "2", default-features = false, features = ["socks-proxy"] } native-tls = { version = "0.2", optional = true } hex = "0.4" semver = "1" sha1 = "0.10" sha2 = "0.10" -zip = { version = "2.0", default-features = false, features = ["deflate"] } +zip = { version = "2", default-features = false, features = ["deflate"] } dunce = "1" url = "2" uuid = { version = "1", features = ["v4", "v5"] } @@ -48,7 +46,7 @@ regex = "1" [target."cfg(target_os = \"windows\")".dependencies] bitness = "0.4" -windows-registry = "0.3.0" +windows-registry = "0.3" glob = "0.3" [target."cfg(target_os = \"windows\")".dependencies.windows-sys] @@ -63,9 +61,9 @@ tauri-macos-sign = { version = "2.0.1", path = "../tauri-macos-sign" } [target."cfg(target_os = \"linux\")".dependencies] heck = "0.5" -ar = "0.9.0" -md5 = "0.7.0" -rpm = "0.15.0" +ar = "0.9" +md5 = "0.7" +rpm = { version = "0.16", features = ["bzip2-compression"] } [lib] name = "tauri_bundler" diff --git a/crates/tauri-bundler/src/bundle/linux/appimage.rs b/crates/tauri-bundler/src/bundle/linux/appimage.rs index 533f3fbe0a90..87aa238eb1f4 100644 --- a/crates/tauri-bundler/src/bundle/linux/appimage.rs +++ b/crates/tauri-bundler/src/bundle/linux/appimage.rs @@ -56,7 +56,7 @@ pub fn bundle_project(settings: &Settings) -> crate::Result> { let product_name = settings.product_name(); let mut settings = settings.clone(); - if main_binary.name().contains(" ") { + if main_binary.name().contains(' ') { let main_binary_path = settings.binary_path(main_binary); let project_out_directory = settings.project_out_directory(); @@ -108,7 +108,7 @@ pub fn bundle_project(settings: &Settings) -> crate::Result> { // Using create_dir_all for a single dir so we don't get errors if the path already exists fs::create_dir_all(&app_dir_usr_bin)?; - fs::create_dir_all(&app_dir_usr_lib)?; + fs::create_dir_all(app_dir_usr_lib)?; // Copy bins and libs that linuxdeploy doesn't know about @@ -258,7 +258,7 @@ fn prepare_tools(tools_path: &Path, arch: &str) -> crate::Result { fn write_and_make_executable(path: &Path, data: Vec) -> std::io::Result<()> { use std::os::unix::fs::PermissionsExt; - fs::write(path, &data)?; + fs::write(path, data)?; fs::set_permissions(path, fs::Permissions::from_mode(0o770))?; Ok(()) diff --git a/crates/tauri-bundler/src/bundle/linux/freedesktop/mod.rs b/crates/tauri-bundler/src/bundle/linux/freedesktop/mod.rs index 75d6d9bcdb5d..4a7c08917412 100644 --- a/crates/tauri-bundler/src/bundle/linux/freedesktop/mod.rs +++ b/crates/tauri-bundler/src/bundle/linux/freedesktop/mod.rs @@ -153,7 +153,7 @@ pub fn generate_desktop_file( let mime_type = (!mime_type.is_empty()).then_some(mime_type.join(";")); - let bin_name_exec = if bin_name.contains(" ") { + let bin_name_exec = if bin_name.contains(' ') { format!("\"{bin_name}\"") } else { bin_name.to_string() diff --git a/crates/tauri-bundler/src/bundle/linux/rpm.rs b/crates/tauri-bundler/src/bundle/linux/rpm.rs index f01f6a8718a4..f0e0f4893c60 100644 --- a/crates/tauri-bundler/src/bundle/linux/rpm.rs +++ b/crates/tauri-bundler/src/bundle/linux/rpm.rs @@ -67,6 +67,7 @@ pub fn bundle_project(settings: &Settings) -> crate::Result> { _ => rpm::CompressionWithLevel::None, }) // This matches .deb compression. On a 240MB source binary the bundle will be 100KB larger than rpm's default while reducing build times by ~25%. + // TODO: Default to Zstd in v3 to match rpm-rs new default in 0.16 .unwrap_or(rpm::CompressionWithLevel::Gzip(6)); let mut builder = rpm::PackageBuilder::new(&name, version, &license, arch, summary) diff --git a/crates/tauri-cli/CHANGELOG.md b/crates/tauri-cli/CHANGELOG.md index 29eae0a920cd..51b097613e56 100644 --- a/crates/tauri-cli/CHANGELOG.md +++ b/crates/tauri-cli/CHANGELOG.md @@ -1,5 +1,38 @@ # Changelog +## \[2.2.2] + +### Bug Fixes + +- [`26fc9558f`](https://www.github.com/tauri-apps/tauri/commit/26fc9558fe7b2fe649f61926da88f36110dd5707) ([#12178](https://www.github.com/tauri-apps/tauri/pull/12178) by [@FabianLars](https://www.github.com/tauri-apps/tauri/../../FabianLars)) Fixed an issue that caused the `tauri dev` file watcher to exit after detecting file changes. + +## \[2.2.1] + +### Bug Fixes + +- [`881729448`](https://www.github.com/tauri-apps/tauri/commit/881729448c9abd0d0c7941a8a31c94119ce827af) ([#12164](https://www.github.com/tauri-apps/tauri/pull/12164) by [@FabianLars](https://www.github.com/tauri-apps/tauri/../../FabianLars)) Fixed an issue that caused `tauri dev` to crash before showing the app on Linux. + +## \[2.2.0] + +### New Features + +- [`cccb308c7`](https://www.github.com/tauri-apps/tauri/commit/cccb308c7b559b0838138d6cea280665f060c925) ([#11562](https://www.github.com/tauri-apps/tauri/pull/11562) by [@jLynx](https://www.github.com/tauri-apps/tauri/../../jLynx)) Generate signature for `.deb` packages when `createUpdaterArtifacts` option is enabled. +- [`74212d40d`](https://www.github.com/tauri-apps/tauri/commit/74212d40d80dba4501b3d4ae30104fa3d447bdf9) ([#11653](https://www.github.com/tauri-apps/tauri/pull/11653) by [@amrbashir](https://www.github.com/tauri-apps/tauri/../../amrbashir)) Include Linux destkop environment and session type in `tauri info` command. + +### Enhancements + +- [`93a3a043d`](https://www.github.com/tauri-apps/tauri/commit/93a3a043d39cc96515d51d98beeb14261d3a246b) ([#11727](https://www.github.com/tauri-apps/tauri/pull/11727) by [@Kiyozz](https://www.github.com/tauri-apps/tauri/../../Kiyozz)) Add support for `Portuguese` language for NSIS windows installer. + +### Bug Fixes + +- [`c8700656b`](https://www.github.com/tauri-apps/tauri/commit/c8700656be3001a0cc6e087f23aebd482430a85b) ([#11985](https://www.github.com/tauri-apps/tauri/pull/11985) by [@ShaunSHamilton](https://www.github.com/tauri-apps/tauri/../../ShaunSHamilton)) Fix `tauri remove` from removing object type (`{}`) permissions. +- [`0ae06c5ca`](https://www.github.com/tauri-apps/tauri/commit/0ae06c5ca89cecd24154affdc69668f5e1e67d85) ([#11914](https://www.github.com/tauri-apps/tauri/pull/11914) by [@wtto00](https://www.github.com/tauri-apps/tauri/../../wtto00)) Fix the exclude path in file `Cargo.toml` of plugin template generated by cli. Path changed in [#9346](https://github.com/tauri-apps/tauri/pull/9346) + +### Dependencies + +- Upgraded to `tauri-bundler@2.2.0` +- Upgraded to `tauri-utils@2.1.1` + ## \[2.1.0] ### New Features diff --git a/crates/tauri-cli/Cargo.toml b/crates/tauri-cli/Cargo.toml index e0756d299beb..27c7bbc1a5de 100644 --- a/crates/tauri-cli/Cargo.toml +++ b/crates/tauri-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-cli" -version = "2.1.0" +version = "2.2.2" authors = ["Tauri Programme within The Commons Conservancy"] edition = "2021" rust-version = "1.77.2" @@ -36,28 +36,28 @@ name = "cargo-tauri" path = "src/main.rs" [target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\", target_os = \"windows\", target_os = \"macos\"))".dependencies] -cargo-mobile2 = { version = "0.17.3", default-features = false } +cargo-mobile2 = { version = "0.17", default-features = false } [dependencies] -jsonrpsee = { version = "0.24.5", features = ["server"] } -jsonrpsee-core = "0.24.5" -jsonrpsee-client-transport = { version = "0.24.5", features = ["ws"] } -jsonrpsee-ws-client = { version = "0.24.5", default-features = false } +jsonrpsee = { version = "0.24", features = ["server"] } +jsonrpsee-core = "0.24" +jsonrpsee-client-transport = { version = "0.24", features = ["ws"] } +jsonrpsee-ws-client = { version = "0.24", default-features = false } sublime_fuzzy = "0.7" clap_complete = "4" -clap = { version = "4.5", features = ["derive", "env"] } -anyhow = "1.0" -tauri-bundler = { version = "2.1.0", default-features = false, path = "../tauri-bundler" } -colored = "2.1" -serde = { version = "1.0", features = ["derive"] } -serde_json = { version = "1.0", features = ["preserve_order"] } -notify = "6.1" -notify-debouncer-mini = "0.4" -shared_child = "1.0" +clap = { version = "4", features = ["derive", "env"] } +anyhow = "1" +tauri-bundler = { version = "2.2.0", default-features = false, path = "../tauri-bundler" } +colored = "2" +serde = { version = "1", features = ["derive"] } +serde_json = { version = "1", features = ["preserve_order"] } +notify = "7" +notify-debouncer-full = "0.4" +shared_child = "1" duct = "0.13" toml_edit = { version = "0.22", features = ["serde"] } -json-patch = "3.0" -tauri-utils = { version = "2.1.0", path = "../tauri-utils", features = [ +json-patch = "3" +tauri-utils = { version = "2.1.1", path = "../tauri-utils", features = [ "isolation", "schema", "config-json5", @@ -70,41 +70,42 @@ tauri-utils-v1 = { version = "1", package = "tauri-utils", features = [ "config-toml", ] } toml = "0.8" -jsonschema = "0.18" -handlebars = "6.0" +jsonschema = "0.28" +handlebars = "6" include_dir = "0.7" minisign = "=0.7.3" -base64 = "0.22.0" -ureq = { version = "2.9.6", default-features = false, features = ["gzip"] } +base64 = "0.22" +ureq = { version = "2", default-features = false, features = ["gzip"] } os_info = "3" -semver = "1.0" -regex = "1.10.3" +semver = "1" +regex = "1" heck = "0.5" dialoguer = "0.11" -url = { version = "2.5", features = ["serde"] } +url = { version = "2", features = ["serde"] } os_pipe = "1" ignore = "0.4" -ctrlc = "3.4" +ctrlc = "3" log = { version = "0.4.21", features = ["kv", "kv_std"] } -env_logger = "0.11.5" +env_logger = "0.11" icns = { package = "tauri-icns", version = "0.1" } image = { version = "0.25", default-features = false, features = ["ico"] } -axum = { version = "0.7.4", features = ["ws"] } +axum = { version = "0.7", features = ["ws"] } html5ever = "0.26" kuchiki = { package = "kuchikiki", version = "0.8" } tokio = { version = "1", features = ["macros", "sync"] } common-path = "1" -serde-value = "0.7.0" +serde-value = "0.7" itertools = "0.13" local-ip-address = "0.6" css-color = "0.2" -resvg = "0.43.0" +resvg = "0.44.0" dunce = "1" glob = "0.3" -oxc_parser = "0.25" -oxc_span = "0.25" -oxc_allocator = "0.25" -oxc_ast = "0.25" +# 0.39 raised msrv to above 1.78 but 0.37+ can't compile on 1.77.2 either. +oxc_parser = "0.36" +oxc_span = "0.36" +oxc_allocator = "0.36" +oxc_ast = "0.36" magic_string = "0.3" phf = { version = "0.11", features = ["macros"] } walkdir = "2" diff --git a/crates/tauri-cli/config.schema.json b/crates/tauri-cli/config.schema.json index c3ae98aa508f..69f821490dad 100644 --- a/crates/tauri-cli/config.schema.json +++ b/crates/tauri-cli/config.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schema.tauri.app/config/2.1.1", + "$id": "https://schema.tauri.app/config/2.2.0", "title": "Config", "description": "The Tauri configuration object.\n It is read from a file where you can define your frontend assets,\n configure the bundler and define a tray icon.\n\n The configuration file is generated by the\n [`tauri init`](https://v2.tauri.app/reference/cli/#init) command that lives in\n your Tauri application source directory (src-tauri).\n\n Once generated, you may modify it at will to customize your Tauri application.\n\n ## File Formats\n\n By default, the configuration is defined as a JSON file named `tauri.conf.json`.\n\n Tauri also supports JSON5 and TOML files via the `config-json5` and `config-toml` Cargo features, respectively.\n The JSON5 file name must be either `tauri.conf.json` or `tauri.conf.json5`.\n The TOML file name is `Tauri.toml`.\n\n ## Platform-Specific Configuration\n\n In addition to the default configuration file, Tauri can\n read a platform-specific configuration from `tauri.linux.conf.json`,\n `tauri.windows.conf.json`, `tauri.macos.conf.json`, `tauri.android.conf.json` and `tauri.ios.conf.json`\n (or `Tauri.linux.toml`, `Tauri.windows.toml`, `Tauri.macos.toml`, `Tauri.android.toml` and `Tauri.ios.toml` if the `Tauri.toml` format is used),\n which gets merged with the main configuration object.\n\n ## Configuration Structure\n\n The configuration is composed of the following objects:\n\n - [`app`](#appconfig): The Tauri configuration\n - [`build`](#buildconfig): The build configuration\n - [`bundle`](#bundleconfig): The bundle configurations\n - [`plugins`](#pluginconfig): The plugins configuration\n\n Example tauri.config.json file:\n\n ```json\n {\n \"productName\": \"tauri-app\",\n \"version\": \"0.1.0\",\n \"build\": {\n \"beforeBuildCommand\": \"\",\n \"beforeDevCommand\": \"\",\n \"devUrl\": \"../dist\",\n \"frontendDist\": \"../dist\"\n },\n \"app\": {\n \"security\": {\n \"csp\": null\n },\n \"windows\": [\n {\n \"fullscreen\": false,\n \"height\": 600,\n \"resizable\": true,\n \"title\": \"Tauri App\",\n \"width\": 800\n }\n ]\n },\n \"bundle\": {},\n \"plugins\": {}\n }\n ```", "type": "object", @@ -3472,7 +3472,7 @@ "additionalProperties": false }, "AndroidConfig": { - "description": "General configuration for the iOS target.", + "description": "General configuration for the Android target.", "type": "object", "properties": { "minSdkVersion": { diff --git a/crates/tauri-cli/metadata-v2.json b/crates/tauri-cli/metadata-v2.json index 97d130b6b6dd..b0b083366fe1 100644 --- a/crates/tauri-cli/metadata-v2.json +++ b/crates/tauri-cli/metadata-v2.json @@ -1,9 +1,9 @@ { "cli.js": { - "version": "2.1.0", + "version": "2.2.2", "node": ">= 10.0.0" }, - "tauri": "2.1.1", - "tauri-build": "2.0.2", - "tauri-plugin": "2.0.2" + "tauri": "2.2.0", + "tauri-build": "2.0.3", + "tauri-plugin": "2.0.3" } diff --git a/crates/tauri-cli/src/acl/permission/rm.rs b/crates/tauri-cli/src/acl/permission/rm.rs index f565b6e56b6a..2ad232bfa446 100644 --- a/crates/tauri-cli/src/acl/permission/rm.rs +++ b/crates/tauri-cli/src/acl/permission/rm.rs @@ -86,10 +86,16 @@ fn rm_permission_from_capabilities(identifier: &str, dir: &Path) -> Result<()> { if let Ok(mut value) = content.parse::() { if let Some(permissions) = value.get_mut("permissions").and_then(|p| p.as_array_mut()) { let prev_len = permissions.len(); - permissions.retain(|p| { - p.as_str() - .map(|p| !identifier_match(identifier, p)) - .unwrap_or(false) + permissions.retain(|p| match p { + toml_edit::Value::String(s) => !identifier_match(identifier, s.value()), + toml_edit::Value::InlineTable(o) => { + if let Some(toml_edit::Value::String(permission_name)) = o.get("identifier") { + return !identifier_match(identifier, permission_name.value()); + } + + true + } + _ => false, }); if prev_len != permissions.len() { std::fs::write(&path, value.to_string())?; @@ -103,10 +109,16 @@ fn rm_permission_from_capabilities(identifier: &str, dir: &Path) -> Result<()> { if let Ok(mut value) = serde_json::from_slice::(&content) { if let Some(permissions) = value.get_mut("permissions").and_then(|p| p.as_array_mut()) { let prev_len = permissions.len(); - permissions.retain(|p| { - p.as_str() - .map(|p| !identifier_match(identifier, p)) - .unwrap_or(false) + permissions.retain(|p| match p { + serde_json::Value::String(s) => !identifier_match(identifier, s), + serde_json::Value::Object(o) => { + if let Some(serde_json::Value::String(permission_name)) = o.get("identifier") { + return !identifier_match(identifier, permission_name); + } + + true + } + _ => false, }); if prev_len != permissions.len() { std::fs::write(&path, serde_json::to_vec_pretty(&value)?)?; diff --git a/crates/tauri-cli/src/build.rs b/crates/tauri-cli/src/build.rs index 46ace0f95ec3..52d30262c113 100644 --- a/crates/tauri-cli/src/build.rs +++ b/crates/tauri-cli/src/build.rs @@ -87,7 +87,7 @@ pub fn command(mut options: Options, verbosity: u8) -> Result<()> { let bin_path = interface.build(interface_options)?; - log::info!(action ="Built"; "application at: {}", tauri_utils::display_path(&bin_path)); + log::info!(action ="Built"; "application at: {}", tauri_utils::display_path(bin_path)); let app_settings = interface.app_settings(); diff --git a/crates/tauri-cli/src/dev.rs b/crates/tauri-cli/src/dev.rs index 09e7a4b67ad5..841b3b3d56da 100644 --- a/crates/tauri-cli/src/dev.rs +++ b/crates/tauri-cli/src/dev.rs @@ -339,7 +339,10 @@ pub fn setup(interface: &AppInterface, options: &mut Options, config: ConfigHand } pub fn on_app_exit(code: Option, reason: ExitReason, exit_on_panic: bool, no_watch: bool) { - if no_watch || exit_on_panic || matches!(reason, ExitReason::NormalExit) { + if no_watch + || (!matches!(reason, ExitReason::TriggeredKill) + && (exit_on_panic || matches!(reason, ExitReason::NormalExit))) + { kill_before_dev_process(); exit(code.unwrap_or(0)); } diff --git a/crates/tauri-cli/src/dev/builtin_dev_server.rs b/crates/tauri-cli/src/dev/builtin_dev_server.rs index 1353cb440b1b..9f51f2d74ca7 100644 --- a/crates/tauri-cli/src/dev/builtin_dev_server.rs +++ b/crates/tauri-cli/src/dev/builtin_dev_server.rs @@ -162,11 +162,10 @@ fn watch(dir: PathBuf, handler: F) { thread::spawn(move || { let (tx, rx) = std::sync::mpsc::channel(); - let mut watcher = notify_debouncer_mini::new_debouncer(Duration::from_secs(1), tx) + let mut watcher = notify_debouncer_full::new_debouncer(Duration::from_secs(1), None, tx) .expect("failed to start builtin server fs watcher"); watcher - .watcher() .watch(&dir, notify::RecursiveMode::Recursive) .expect("builtin server failed to watch dir"); diff --git a/crates/tauri-cli/src/helpers/config.rs b/crates/tauri-cli/src/helpers/config.rs index 2ae0bf030b07..eb9cc5bded8b 100644 --- a/crates/tauri-cli/src/helpers/config.rs +++ b/crates/tauri-cli/src/helpers/config.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT +use itertools::Itertools; use json_patch::merge; use serde_json::Value as JsonValue; @@ -172,11 +173,11 @@ fn get_internal( || config_path.extension() == Some(OsStr::new("json5")) { let schema: JsonValue = serde_json::from_str(include_str!("../../config.schema.json"))?; - let schema = jsonschema::JSONSchema::compile(&schema).unwrap(); - let result = schema.validate(&config); - if let Err(errors) = result { + let validator = jsonschema::validator_for(&schema).expect("Invalid schema"); + let mut errors = validator.iter_errors(&config).peekable(); + if errors.peek().is_some() { for error in errors { - let path = error.instance_path.clone().into_vec().join(" > "); + let path = error.instance_path.into_iter().join(" > "); if path.is_empty() { log::error!("`{}` error: {}", config_file_name, error); } else { diff --git a/crates/tauri-cli/src/icon.rs b/crates/tauri-cli/src/icon.rs index e14f078e8f7f..f0277f17fd95 100644 --- a/crates/tauri-cli/src/icon.rs +++ b/crates/tauri-cli/src/icon.rs @@ -267,13 +267,13 @@ fn ico(source: &Source, out_dir: &Path) -> Result<()> { Ok(()) } -// Generate .png files in 32x32, 128x128, 256x256, 512x512 (icon.png) +// Generate .png files in 32x32, 64x64, 128x128, 256x256, 512x512 (icon.png) // Main target: Linux fn png(source: &Source, out_dir: &Path, ios_color: Rgba) -> Result<()> { fn desktop_entries(out_dir: &Path) -> Vec { let mut entries = Vec::new(); - for size in [32, 128, 256, 512] { + for size in [32, 64, 128, 256, 512] { let file_name = match size { 256 => "128x128@2x.png".to_string(), 512 => "icon.png".to_string(), diff --git a/crates/tauri-cli/src/interface/mod.rs b/crates/tauri-cli/src/interface/mod.rs index 1b2ad7be8a56..841bb9c2e467 100644 --- a/crates/tauri-cli/src/interface/mod.rs +++ b/crates/tauri-cli/src/interface/mod.rs @@ -87,7 +87,7 @@ pub trait AppSettings { #[derive(Debug)] pub enum ExitReason { /// Killed manually. - // TriggeredKill, + TriggeredKill, /// App compilation failed. CompilationFailed, /// Regular exit. diff --git a/crates/tauri-cli/src/interface/rust.rs b/crates/tauri-cli/src/interface/rust.rs index b6542466da18..7a9c733ebb33 100644 --- a/crates/tauri-cli/src/interface/rust.rs +++ b/crates/tauri-cli/src/interface/rust.rs @@ -18,7 +18,7 @@ use anyhow::Context; use glob::glob; use ignore::gitignore::{Gitignore, GitignoreBuilder}; use notify::RecursiveMode; -use notify_debouncer_mini::new_debouncer; +use notify_debouncer_full::new_debouncer; use serde::{Deserialize, Deserializer}; use tauri_bundler::{ AppCategory, AppImageSettings, BundleBinary, BundleSettings, DebianSettings, DmgSettings, @@ -124,15 +124,13 @@ impl Interface for Rust { fn new(config: &Config, target: Option) -> crate::Result { let manifest = { let (tx, rx) = sync_channel(1); - let mut watcher = new_debouncer(Duration::from_secs(1), move |r| { + let mut watcher = new_debouncer(Duration::from_secs(1), None, move |r| { if let Ok(events) = r { let _ = tx.send(events); } }) .unwrap(); - watcher - .watcher() - .watch(&tauri_dir().join("Cargo.toml"), RecursiveMode::Recursive)?; + watcher.watch(tauri_dir().join("Cargo.toml"), RecursiveMode::Recursive)?; let (manifest, _modified) = rewrite_manifest(config)?; let now = Instant::now(); let timeout = Duration::from_secs(2); @@ -527,7 +525,7 @@ impl Rust { .expect("watch_folders should not be empty"); let ignore_matcher = build_ignore_matcher(&common_ancestor); - let mut watcher = new_debouncer(Duration::from_secs(1), move |r| { + let mut watcher = new_debouncer(Duration::from_secs(1), None, move |r| { if let Ok(events) = r { tx.send(events).unwrap() } @@ -539,7 +537,7 @@ impl Rust { lookup(&path, |file_type, p| { if p != path { log::debug!("Watching {} for changes...", display_path(&p)); - let _ = watcher.watcher().watch( + let _ = watcher.watch( &p, if file_type.is_dir() { RecursiveMode::Recursive @@ -555,42 +553,42 @@ impl Rust { loop { if let Ok(events) = rx.recv() { for event in events { - let event_path = event.path; - - if !ignore_matcher.is_ignore(&event_path, event_path.is_dir()) { - if is_configuration_file(self.app_settings.target, &event_path) { - if let Ok(config) = reload_config(config.as_ref()) { - let (manifest, modified) = - rewrite_manifest(config.lock().unwrap().as_ref().unwrap())?; - if modified { - *self.app_settings.manifest.lock().unwrap() = manifest; - // no need to run the watcher logic, the manifest was modified - // and it will trigger the watcher again - continue; + if event.kind.is_access() { + continue; + } + + if let Some(event_path) = event.paths.first() { + if !ignore_matcher.is_ignore(event_path, event_path.is_dir()) { + if is_configuration_file(self.app_settings.target, event_path) { + if let Ok(config) = reload_config(config.as_ref()) { + let (manifest, modified) = + rewrite_manifest(config.lock().unwrap().as_ref().unwrap())?; + if modified { + *self.app_settings.manifest.lock().unwrap() = manifest; + // no need to run the watcher logic, the manifest was modified + // and it will trigger the watcher again + continue; + } } } - } - log::info!( - "File {} changed. Rebuilding application...", - display_path( - event_path - .strip_prefix(frontend_path) - .unwrap_or(&event_path) - ) - ); + log::info!( + "File {} changed. Rebuilding application...", + display_path(event_path.strip_prefix(frontend_path).unwrap_or(event_path)) + ); - let mut p = process.lock().unwrap(); - p.kill().with_context(|| "failed to kill app process")?; + let mut p = process.lock().unwrap(); + p.kill().with_context(|| "failed to kill app process")?; - // wait for the process to exit - // note that on mobile, kill() already waits for the process to exit (duct implementation) - loop { - if !matches!(p.try_wait(), Ok(None)) { - break; + // wait for the process to exit + // note that on mobile, kill() already waits for the process to exit (duct implementation) + loop { + if !matches!(p.try_wait(), Ok(None)) { + break; + } } + *p = run(self)?; } - *p = run(self)?; } } } diff --git a/crates/tauri-cli/src/interface/rust/desktop.rs b/crates/tauri-cli/src/interface/rust/desktop.rs index 70fbbea511c6..b6318251092d 100644 --- a/crates/tauri-cli/src/interface/rust/desktop.rs +++ b/crates/tauri-cli/src/interface/rust/desktop.rs @@ -78,6 +78,9 @@ pub fn run_dev, ExitReason) + Send + Sync + 'static>( dev_cmd.arg("--"); dev_cmd.args(run_args); + let manually_killed_app = Arc::new(AtomicBool::default()); + let manually_killed_app_ = manually_killed_app.clone(); + let dev_child = match SharedChild::spawn(&mut dev_cmd) { Ok(c) => Ok(c), Err(e) if e.kind() == ErrorKind::NotFound => Err(anyhow::anyhow!( @@ -128,6 +131,8 @@ pub fn run_dev, ExitReason) + Send + Sync + 'static>( status.code(), if status.code() == Some(101) && is_cargo_compile_error { ExitReason::CompilationFailed + } else if manually_killed_app_.load(Ordering::Relaxed) { + ExitReason::TriggeredKill } else { ExitReason::NormalExit }, @@ -135,9 +140,6 @@ pub fn run_dev, ExitReason) + Send + Sync + 'static>( } }); - // TODO: remove this and DevChild (requires refactor for code shared between mobile and desktop) - let manually_killed_app = Arc::new(AtomicBool::default()); - Ok(DevChild { manually_killed_app, dev_child, diff --git a/crates/tauri-cli/templates/plugin/__example-api/tauri-app/package.json b/crates/tauri-cli/templates/plugin/__example-api/tauri-app/package.json index 47858f2c0716..c8f9acba107d 100644 --- a/crates/tauri-cli/templates/plugin/__example-api/tauri-app/package.json +++ b/crates/tauri-cli/templates/plugin/__example-api/tauri-app/package.json @@ -10,13 +10,13 @@ "tauri": "tauri" }, "dependencies": { - "@tauri-apps/api": "^2.0.0-alpha.11", + "@tauri-apps/api": "^2.0.0", "tauri-plugin-{{ plugin_name }}-api": "file:../../" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.1", - "svelte": "^3.49.0", - "vite": "^3.0.2", - "@tauri-apps/cli": "^2.0.0-alpha.17" + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "svelte": "^5.0.0", + "vite": "^6.0.0", + "@tauri-apps/cli": "^2.0.0" } } diff --git a/crates/tauri-codegen/CHANGELOG.md b/crates/tauri-codegen/CHANGELOG.md index 95a0fb544b90..6064d6453c45 100644 --- a/crates/tauri-codegen/CHANGELOG.md +++ b/crates/tauri-codegen/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[2.0.4] + +### Dependencies + +- Upgraded to `tauri-utils@2.1.1` + ## \[2.0.3] ### Dependencies diff --git a/crates/tauri-codegen/Cargo.toml b/crates/tauri-codegen/Cargo.toml index 90f0df6270e0..18994b5a852b 100644 --- a/crates/tauri-codegen/Cargo.toml +++ b/crates/tauri-codegen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-codegen" -version = "2.0.3" +version = "2.0.4" description = "code generation meant to be consumed inside of `tauri` through `tauri-build` or `tauri-macros`" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -20,7 +20,7 @@ quote = "1" syn = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" -tauri-utils = { version = "2.1.0", path = "../tauri-utils", features = [ +tauri-utils = { version = "2.1.1", path = "../tauri-utils", features = [ "build", ] } thiserror = "2" @@ -33,7 +33,7 @@ uuid = { version = "1", features = ["v4"] } semver = "1" ico = "0.3" png = "0.17" -json-patch = "3.0" +json-patch = "3" url = "2" [target."cfg(target_os = \"macos\")".dependencies] diff --git a/crates/tauri-driver/Cargo.toml b/crates/tauri-driver/Cargo.toml index 38a5716a7aa8..b5cb0009a974 100644 --- a/crates/tauri-driver/Cargo.toml +++ b/crates/tauri-driver/Cargo.toml @@ -23,11 +23,11 @@ hyper = { version = "0.14", features = [ ] } futures = "0.3" futures-util = "0.3" -pico-args = "0.4" +pico-args = "0.5" serde = { version = "1", features = ["derive"] } serde_json = "1" tokio = { version = "1", features = ["macros"] } -which = "4" +which = "7" [target."cfg(unix)".dependencies] signal-hook = "0.3" diff --git a/crates/tauri-macos-sign/Cargo.toml b/crates/tauri-macos-sign/Cargo.toml index 8fd33172827c..fb824c681335 100644 --- a/crates/tauri-macos-sign/Cargo.toml +++ b/crates/tauri-macos-sign/Cargo.toml @@ -22,5 +22,5 @@ rand = "0.8" dirs-next = "2" log = { version = "0.4.21", features = ["kv"] } apple-codesign = "0.27" -chrono = "0.4.38" +chrono = "0.4" p12 = "0.6" diff --git a/crates/tauri-macros/CHANGELOG.md b/crates/tauri-macros/CHANGELOG.md index 3c80b3359ff7..543a9709ac38 100644 --- a/crates/tauri-macros/CHANGELOG.md +++ b/crates/tauri-macros/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## \[2.0.4] + +### Dependencies + +- Upgraded to `tauri-utils@2.1.1` +- Upgraded to `tauri-codegen@2.0.4` + ## \[2.0.3] ### Enhancements diff --git a/crates/tauri-macros/Cargo.toml b/crates/tauri-macros/Cargo.toml index adf7d9806f76..741d095296b8 100644 --- a/crates/tauri-macros/Cargo.toml +++ b/crates/tauri-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-macros" -version = "2.0.3" +version = "2.0.4" description = "Macros for the tauri crate." exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -20,8 +20,8 @@ proc-macro2 = { version = "1", features = ["span-locations"] } quote = "1" syn = { version = "2", features = ["full"] } heck = "0.5" -tauri-codegen = { version = "2.0.3", default-features = false, path = "../tauri-codegen" } -tauri-utils = { version = "2.1.0", path = "../tauri-utils" } +tauri-codegen = { version = "2.0.4", default-features = false, path = "../tauri-codegen" } +tauri-utils = { version = "2.1.1", path = "../tauri-utils" } [features] custom-protocol = [] diff --git a/crates/tauri-macros/src/command/wrapper.rs b/crates/tauri-macros/src/command/wrapper.rs index 4babd0dbb325..fc02b2537c3e 100644 --- a/crates/tauri-macros/src/command/wrapper.rs +++ b/crates/tauri-macros/src/command/wrapper.rs @@ -478,7 +478,7 @@ fn rustc_version() -> (u32, u32) { .split(' ') .nth(1) .unwrap_or_default() - .split(".") + .split('.') .take(2) .flat_map(|p| p.parse::().ok()) .collect::>(); diff --git a/crates/tauri-plugin/CHANGELOG.md b/crates/tauri-plugin/CHANGELOG.md index 26976234ab45..4d52d8c03e3c 100644 --- a/crates/tauri-plugin/CHANGELOG.md +++ b/crates/tauri-plugin/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[2.0.4] + +### Dependencies + +- Upgraded to `tauri-utils@2.1.1` + ## \[2.0.3] ### Dependencies diff --git a/crates/tauri-plugin/Cargo.toml b/crates/tauri-plugin/Cargo.toml index b572e55ff1ac..916a79b9cbf0 100644 --- a/crates/tauri-plugin/Cargo.toml +++ b/crates/tauri-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin" -version = "2.0.3" +version = "2.0.4" description = "Build script and runtime Tauri plugin definitions" authors.workspace = true homepage.workspace = true @@ -30,12 +30,13 @@ runtime = [] [dependencies] anyhow = { version = "1", optional = true } serde = { version = "1", optional = true } -tauri-utils = { version = "2.1.0", default-features = false, features = [ +tauri-utils = { version = "2.1.1", default-features = false, features = [ "build", ], path = "../tauri-utils" } serde_json = { version = "1", optional = true } glob = { version = "0.3", optional = true } toml = { version = "0.8", optional = true } +# Our code requires at least 0.8.18 so don't simplify this to 0.8 schemars = { version = "0.8.18", features = ["preserve_order"] } walkdir = { version = "2", optional = true } diff --git a/crates/tauri-runtime-wry/CHANGELOG.md b/crates/tauri-runtime-wry/CHANGELOG.md index 6fa4627d2914..ac0dcdf462cf 100644 --- a/crates/tauri-runtime-wry/CHANGELOG.md +++ b/crates/tauri-runtime-wry/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## \[2.3.0] + +### New Features + +- [`18bd639f6`](https://www.github.com/tauri-apps/tauri/commit/18bd639f6e22c0188aa219739f367b5bf5ab0398) ([#11798](https://www.github.com/tauri-apps/tauri/pull/11798) by [@lars-berger](https://www.github.com/tauri-apps/tauri/../../lars-berger)) Add `WebviewWindowBuilder/WebviewBuilder::data_store_identifier` on macOS. +- [`dc4d79477`](https://www.github.com/tauri-apps/tauri/commit/dc4d79477665bc3bfefb4048772414cf5d78e3df) ([#11628](https://www.github.com/tauri-apps/tauri/pull/11628) by [@SpikeHD](https://www.github.com/tauri-apps/tauri/../../SpikeHD)) Add `WebviewWindowBuilder/WebviewBuilder::extensions_path` on Linux and Windows. +- [`020ea0556`](https://www.github.com/tauri-apps/tauri/commit/020ea05561348dcd6d2a7df358f8a5190f661ba2) ([#11661](https://www.github.com/tauri-apps/tauri/pull/11661) by [@ahqsoftwares](https://www.github.com/tauri-apps/tauri/../../ahqsoftwares)) Add badging APIs: + + - `Window/WebviewWindow::set_badge_count` for Linux, macOS and IOS. + - `Window/WebviewWindow::set_overlay_icon` for Windows Only. + - `Window/WebviewWindow::set_badge_label`for macOS Only. + +### Dependencies + +- Upgraded to `tauri-runtime@2.3.0` +- Upgraded to `tauri-utils@2.1.1` + ## \[2.2.0] ### New Features diff --git a/crates/tauri-runtime-wry/Cargo.toml b/crates/tauri-runtime-wry/Cargo.toml index cded6a5c608e..ebf0cea2fe27 100644 --- a/crates/tauri-runtime-wry/Cargo.toml +++ b/crates/tauri-runtime-wry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-runtime-wry" -version = "2.2.0" +version = "2.3.0" description = "Wry bindings to the Tauri runtime" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -17,23 +17,23 @@ rustc-args = ["--cfg", "docsrs"] rustdoc-args = ["--cfg", "docsrs"] [dependencies] -wry = { version = "0.47", default-features = false, features = [ +wry = { version = "0.48", default-features = false, features = [ "drag-drop", "protocol", "os-webview", "linux-body", ] } tao = { version = "0.31.0", default-features = false, features = ["rwh_06"] } -tauri-runtime = { version = "2.2.0", path = "../tauri-runtime" } -tauri-utils = { version = "2.1.0", path = "../tauri-utils" } +tauri-runtime = { version = "2.3.0", path = "../tauri-runtime" } +tauri-utils = { version = "2.1.1", path = "../tauri-utils" } raw-window-handle = "0.6" -http = "1.1" +http = "1" url = "2" tracing = { version = "0.1", optional = true } -log = "0.4" +log = "0.4.21" [target."cfg(windows)".dependencies] -webview2-com = "0.33" +webview2-com = "0.34" softbuffer = { version = "0.4", default-features = false } [target."cfg(windows)".dependencies.windows] @@ -43,14 +43,14 @@ features = ["Win32_Foundation", "Win32_Graphics_Dwm"] [target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] gtk = { version = "0.18", features = ["v3_24"] } webkit2gtk = { version = "=2.0", features = ["v2_40"] } -percent-encoding = "2.1" +percent-encoding = "2" [target.'cfg(target_vendor = "apple")'.dependencies] -objc2 = "0.5.2" +objc2 = "0.5" [target.'cfg(target_os = "macos")'.dependencies] -objc2-foundation = { version = "0.2.2", features = [] } -objc2-app-kit = { version = "0.2.2", features = [ +objc2-foundation = { version = "0.2", features = [] } +objc2-app-kit = { version = "0.2", features = [ "block2", "NSApplication", "NSResponder", diff --git a/crates/tauri-runtime-wry/src/lib.rs b/crates/tauri-runtime-wry/src/lib.rs index 1da3b6c25f12..442186f8430a 100644 --- a/crates/tauri-runtime-wry/src/lib.rs +++ b/crates/tauri-runtime-wry/src/lib.rs @@ -2723,7 +2723,7 @@ impl Runtime for Wry { pending, )?; - #[allow(clippy::manual_inspect)] + #[allow(unknown_lints, clippy::manual_inspect)] self .context .main_thread @@ -3352,7 +3352,7 @@ fn handle_user_message( let _ = webview.print(); } WebviewMessage::Close => { - #[allow(clippy::manual_inspect)] + #[allow(unknown_lints, clippy::manual_inspect)] windows.0.borrow_mut().get_mut(&window_id).map(|window| { if let Some(i) = window.webviews.iter().position(|w| w.id == webview.id) { window.webviews.remove(i); @@ -3576,7 +3576,7 @@ fn handle_user_message( if let Some(window) = window { match handler(&window) { Ok(webview) => { - #[allow(clippy::manual_inspect)] + #[allow(unknown_lints, clippy::manual_inspect)] windows.0.borrow_mut().get_mut(&window_id).map(|w| { w.webviews.push(webview); w.has_children.store(true, Ordering::Relaxed); @@ -4416,7 +4416,7 @@ fn create_webview( ))] { if let Some(path) = &webview_attributes.extensions_path { - webview_builder = webview_builder.with_extension_path(path); + webview_builder = webview_builder.with_extensions_path(path); } } diff --git a/crates/tauri-runtime/CHANGELOG.md b/crates/tauri-runtime/CHANGELOG.md index 8970d59f66fb..a9045047f898 100644 --- a/crates/tauri-runtime/CHANGELOG.md +++ b/crates/tauri-runtime/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## \[2.3.0] + +### New Features + +- [`18bd639f6`](https://www.github.com/tauri-apps/tauri/commit/18bd639f6e22c0188aa219739f367b5bf5ab0398) ([#11798](https://www.github.com/tauri-apps/tauri/pull/11798) by [@lars-berger](https://www.github.com/tauri-apps/tauri/../../lars-berger)) Add `WebviewWindowBuilder/WebviewBuilder::data_store_identifier` on macOS. +- [`dc4d79477`](https://www.github.com/tauri-apps/tauri/commit/dc4d79477665bc3bfefb4048772414cf5d78e3df) ([#11628](https://www.github.com/tauri-apps/tauri/pull/11628) by [@SpikeHD](https://www.github.com/tauri-apps/tauri/../../SpikeHD)) Add `WebviewWindowBuilder/WebviewBuilder::extensions_path` on Linux and Windows. +- [`020ea0556`](https://www.github.com/tauri-apps/tauri/commit/020ea05561348dcd6d2a7df358f8a5190f661ba2) ([#11661](https://www.github.com/tauri-apps/tauri/pull/11661) by [@ahqsoftwares](https://www.github.com/tauri-apps/tauri/../../ahqsoftwares)) Add badging APIs: + + - `Window/WebviewWindow::set_badge_count` for Linux, macOS and IOS. + - `Window/WebviewWindow::set_overlay_icon` for Windows Only. + - `Window/WebviewWindow::set_badge_label`for macOS Only. + +### Dependencies + +- Upgraded to `tauri-utils@2.1.1` + ## \[2.2.0] ### New Features diff --git a/crates/tauri-runtime/Cargo.toml b/crates/tauri-runtime/Cargo.toml index 6a2110af08a0..0e2171b9c574 100644 --- a/crates/tauri-runtime/Cargo.toml +++ b/crates/tauri-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-runtime" -version = "2.2.0" +version = "2.3.0" description = "Runtime for Tauri applications" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -26,11 +26,11 @@ targets = [ ] [dependencies] -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" +serde = { version = "1", features = ["derive"] } +serde_json = "1" thiserror = "2" -tauri-utils = { version = "2.1.0", path = "../tauri-utils" } -http = "1.1" +tauri-utils = { version = "2.1.1", path = "../tauri-utils" } +http = "1" raw-window-handle = "0.6" url = { version = "2" } dpi = { version = "0.1", features = ["serde"] } diff --git a/crates/tauri-schema-generator/Cargo.toml b/crates/tauri-schema-generator/Cargo.toml index a2b42c3c27f0..06e3cd7c2a34 100644 --- a/crates/tauri-schema-generator/Cargo.toml +++ b/crates/tauri-schema-generator/Cargo.toml @@ -6,7 +6,7 @@ publish = false [build-dependencies] tauri-utils = { features = ["schema"], path = "../tauri-utils" } -schemars = { version = "0.8", features = ["url", "preserve_order"] } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" -url = { version = "2.3", features = ["serde"] } +schemars = { version = "0.8.18", features = ["url", "preserve_order"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +url = { version = "2", features = ["serde"] } diff --git a/crates/tauri-schema-generator/schemas/config.schema.json b/crates/tauri-schema-generator/schemas/config.schema.json index c3ae98aa508f..69f821490dad 100644 --- a/crates/tauri-schema-generator/schemas/config.schema.json +++ b/crates/tauri-schema-generator/schemas/config.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schema.tauri.app/config/2.1.1", + "$id": "https://schema.tauri.app/config/2.2.0", "title": "Config", "description": "The Tauri configuration object.\n It is read from a file where you can define your frontend assets,\n configure the bundler and define a tray icon.\n\n The configuration file is generated by the\n [`tauri init`](https://v2.tauri.app/reference/cli/#init) command that lives in\n your Tauri application source directory (src-tauri).\n\n Once generated, you may modify it at will to customize your Tauri application.\n\n ## File Formats\n\n By default, the configuration is defined as a JSON file named `tauri.conf.json`.\n\n Tauri also supports JSON5 and TOML files via the `config-json5` and `config-toml` Cargo features, respectively.\n The JSON5 file name must be either `tauri.conf.json` or `tauri.conf.json5`.\n The TOML file name is `Tauri.toml`.\n\n ## Platform-Specific Configuration\n\n In addition to the default configuration file, Tauri can\n read a platform-specific configuration from `tauri.linux.conf.json`,\n `tauri.windows.conf.json`, `tauri.macos.conf.json`, `tauri.android.conf.json` and `tauri.ios.conf.json`\n (or `Tauri.linux.toml`, `Tauri.windows.toml`, `Tauri.macos.toml`, `Tauri.android.toml` and `Tauri.ios.toml` if the `Tauri.toml` format is used),\n which gets merged with the main configuration object.\n\n ## Configuration Structure\n\n The configuration is composed of the following objects:\n\n - [`app`](#appconfig): The Tauri configuration\n - [`build`](#buildconfig): The build configuration\n - [`bundle`](#bundleconfig): The bundle configurations\n - [`plugins`](#pluginconfig): The plugins configuration\n\n Example tauri.config.json file:\n\n ```json\n {\n \"productName\": \"tauri-app\",\n \"version\": \"0.1.0\",\n \"build\": {\n \"beforeBuildCommand\": \"\",\n \"beforeDevCommand\": \"\",\n \"devUrl\": \"../dist\",\n \"frontendDist\": \"../dist\"\n },\n \"app\": {\n \"security\": {\n \"csp\": null\n },\n \"windows\": [\n {\n \"fullscreen\": false,\n \"height\": 600,\n \"resizable\": true,\n \"title\": \"Tauri App\",\n \"width\": 800\n }\n ]\n },\n \"bundle\": {},\n \"plugins\": {}\n }\n ```", "type": "object", @@ -3472,7 +3472,7 @@ "additionalProperties": false }, "AndroidConfig": { - "description": "General configuration for the iOS target.", + "description": "General configuration for the Android target.", "type": "object", "properties": { "minSdkVersion": { diff --git a/crates/tauri-schema-worker/Cargo.toml b/crates/tauri-schema-worker/Cargo.toml index 3af5a33e7ac8..36841860fd73 100644 --- a/crates/tauri-schema-worker/Cargo.toml +++ b/crates/tauri-schema-worker/Cargo.toml @@ -8,11 +8,11 @@ publish = false crate-type = ["cdylib"] [dependencies] -worker = { version = "0.3", features = ['http', 'axum'] } -worker-macros = { version = "0.3", features = ['http'] } +worker = { version = "0.5", features = ['http', 'axum'] } +worker-macros = { version = "0.5", features = ['http'] } console_error_panic_hook = { version = "0.1" } axum = { version = "0.7", default-features = false } tower-service = "0.3" -semver = { version = "1.0", features = ["serde"] } -serde = { version = "1.0", features = ["derive"] } -anyhow = "1.0" +semver = { version = "1", features = ["serde"] } +serde = { version = "1", features = ["derive"] } +anyhow = "1" diff --git a/crates/tauri-utils/CHANGELOG.md b/crates/tauri-utils/CHANGELOG.md index 319527f97ece..c951b181c159 100644 --- a/crates/tauri-utils/CHANGELOG.md +++ b/crates/tauri-utils/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[2.1.1] + +### Bug Fixes + +- [`46935212b`](https://www.github.com/tauri-apps/tauri/commit/46935212b61da44dc82dfeb803fceebf5659f7b7) ([#11658](https://www.github.com/tauri-apps/tauri/pull/11658) by [@Legend-Master](https://www.github.com/tauri-apps/tauri/../../Legend-Master)) Fix `.json5` capability files not recognized even with `config-json5` feature enabled + ## \[2.1.0] ### New Features diff --git a/crates/tauri-utils/Cargo.toml b/crates/tauri-utils/Cargo.toml index 27a44f5e6646..273582cc2460 100644 --- a/crates/tauri-utils/Cargo.toml +++ b/crates/tauri-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-utils" -version = "2.1.0" +version = "2.1.1" description = "Utilities for Tauri" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -25,6 +25,7 @@ html5ever = "0.26" kuchiki = { package = "kuchikiki", version = "0.8" } proc-macro2 = { version = "1", optional = true } quote = { version = "1", optional = true } +# Our code requires at least 0.8.18 so don't change this to 0.8 schemars = { version = "0.8.18", features = ["url", "uuid1"], optional = true } serde_with = "3" aes-gcm = { version = "0.10", optional = true } @@ -43,17 +44,17 @@ semver = "1" infer = "0.16" dunce = "1" log = "0.4.21" -cargo_metadata = { version = "0.18", optional = true } +cargo_metadata = { version = "0.19", optional = true } serde-untagged = "0.1" uuid = { version = "1", features = ["serde"] } -http = "1.1.0" +http = "1" [target."cfg(target_os = \"macos\")".dependencies] -swift-rs = { version = "1.0.7", optional = true, features = ["build"] } +swift-rs = { version = "1", optional = true, features = ["build"] } [dev-dependencies] getrandom = { version = "0.2", features = ["std"] } -serial_test = "3.1" +serial_test = "3" [features] build = ["proc-macro2", "quote", "cargo_metadata", "schema", "swift-rs"] diff --git a/crates/tauri-utils/README.md b/crates/tauri-utils/README.md index f583752aa731..0149159c15b8 100644 --- a/crates/tauri-utils/README.md +++ b/crates/tauri-utils/README.md @@ -11,9 +11,9 @@ [![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation) [![support](https://img.shields.io/badge/sponsor-Open%20Collective-blue.svg)](https://opencollective.com/tauri) -| Component | Version | -| ----------- | ---------------------------------------------------------------------------------------------------- | -| tauri-utils | [![](https://img.shields.io/crates/v/tauri-utils?style=flat-square)](https://crates.io/crates/utils) | +| Component | Version | +| ----------- | ---------------------------------------------------------------------------------------------------------- | +| tauri-utils | [![](https://img.shields.io/crates/v/tauri-utils?style=flat-square)](https://crates.io/crates/tauri-utils) | ## About Tauri diff --git a/crates/tauri-utils/src/config.rs b/crates/tauri-utils/src/config.rs index 53c632795f3a..2162e6441c62 100644 --- a/crates/tauri-utils/src/config.rs +++ b/crates/tauri-utils/src/config.rs @@ -2523,7 +2523,7 @@ impl Default for IosConfig { } } -/// General configuration for the iOS target. +/// General configuration for the Android target. #[skip_serializing_none] #[derive(Debug, PartialEq, Eq, Clone, Deserialize, Serialize)] #[cfg_attr(feature = "schema", derive(JsonSchema))] diff --git a/crates/tauri-utils/src/platform.rs b/crates/tauri-utils/src/platform.rs index 7a9c99431ed5..f795820691dd 100644 --- a/crates/tauri-utils/src/platform.rs +++ b/crates/tauri-utils/src/platform.rs @@ -396,6 +396,7 @@ mod tests { assert_eq!(resource_dir, path.parent().unwrap()); let path = PathBuf::from("/path/to/target/unknown-profile/app"); + #[allow(clippy::needless_borrows_for_generic_args)] let resource_dir = super::resource_dir_from(&path, &package_info, &env); #[cfg(target_os = "macos")] assert!(resource_dir.is_err()); diff --git a/crates/tauri/CHANGELOG.md b/crates/tauri/CHANGELOG.md index 14dab6a14205..8200479d2329 100644 --- a/crates/tauri/CHANGELOG.md +++ b/crates/tauri/CHANGELOG.md @@ -1,5 +1,42 @@ # Changelog +## \[2.2.0] + +### New Features + +- [`f884bae75`](https://www.github.com/tauri-apps/tauri/commit/f884bae75b3ad8f8debfd29bb05ac9cbc9748c89) ([#11742](https://www.github.com/tauri-apps/tauri/pull/11742) by [@amrbashir](https://www.github.com/tauri-apps/tauri/../../amrbashir)) Add `tauri::Builder::on_tray_icon_event` handler. +- [`5188c0fae`](https://www.github.com/tauri-apps/tauri/commit/5188c0fae2bb47e40d09f70bf308c300045a2e2b) ([#11767](https://www.github.com/tauri-apps/tauri/pull/11767) by [@FabianLars](https://www.github.com/tauri-apps/tauri/../../FabianLars)) Added `Scope::is_forbidden` to check if a path was explicitly forbidden. +- [`18bd639f6`](https://www.github.com/tauri-apps/tauri/commit/18bd639f6e22c0188aa219739f367b5bf5ab0398) ([#11798](https://www.github.com/tauri-apps/tauri/pull/11798) by [@lars-berger](https://www.github.com/tauri-apps/tauri/../../lars-berger)) Add `WebviewWindowBuilder/WebviewBuilder::data_store_identifier` on macOS. +- [`dc4d79477`](https://www.github.com/tauri-apps/tauri/commit/dc4d79477665bc3bfefb4048772414cf5d78e3df) ([#11628](https://www.github.com/tauri-apps/tauri/pull/11628) by [@SpikeHD](https://www.github.com/tauri-apps/tauri/../../SpikeHD)) Add `WebviewWindowBuilder/WebviewBuilder::extensions_path` on Linux and Windows. +- [`020ea0556`](https://www.github.com/tauri-apps/tauri/commit/020ea05561348dcd6d2a7df358f8a5190f661ba2) ([#11661](https://www.github.com/tauri-apps/tauri/pull/11661) by [@ahqsoftwares](https://www.github.com/tauri-apps/tauri/../../ahqsoftwares)) Add badging APIs: + + - `Window/WebviewWindow::set_badge_count` for Linux, macOS and IOS. + - `Window/WebviewWindow::set_overlay_icon` for Windows Only. + - `Window/WebviewWindow::set_badge_label`for macOS Only. +- [`fc30b20be`](https://www.github.com/tauri-apps/tauri/commit/fc30b20bea125f647db00ca824663f8e1da4d61f) ([#11726](https://www.github.com/tauri-apps/tauri/pull/11726) by [@amrbashir](https://www.github.com/tauri-apps/tauri/../../amrbashir)) Add `TrayIconBuilder::show_menu_on_left_click` method and deprecate `TrayIconBuilder::menu_on_left_click` for consistent naming and clarity. + +### Enhancements + +- [`d86aaccb0`](https://www.github.com/tauri-apps/tauri/commit/d86aaccb0b42760bb59bc04d74a6ea234bb64229) ([#11729](https://www.github.com/tauri-apps/tauri/pull/11729) by [@sandercox](https://www.github.com/tauri-apps/tauri/../../sandercox)) Add support for `TrayIconBuilder::menu_on_left_click` and `TrayIcon::set_show_menu_on_left_click` on Windows. +- [`b0ddee899`](https://www.github.com/tauri-apps/tauri/commit/b0ddee8992ac3c7d47e2cfc9714f5725fadca7cf) ([#12101](https://www.github.com/tauri-apps/tauri/pull/12101) by [@renovate](https://www.github.com/tauri-apps/tauri/../../renovate)) **Breaking change:** Updated `webview2-com` to `0.34`. This may be a breaking change if you use the `with_webview` method. + +### Bug Fixes + +- [`b50a1ac0e`](https://www.github.com/tauri-apps/tauri/commit/b50a1ac0ef4c7686c3537512f1ba607b9ba6589c) ([#11850](https://www.github.com/tauri-apps/tauri/pull/11850) by [@FabianLars](https://www.github.com/tauri-apps/tauri/../../FabianLars)) Add webview and window color setters to autogenerated permissions. +- [`ba6f37014`](https://www.github.com/tauri-apps/tauri/commit/ba6f3701472daa9295a39709761ea85c128881f1) ([#11785](https://www.github.com/tauri-apps/tauri/pull/11785) by [@lars-berger](https://www.github.com/tauri-apps/tauri/../../lars-berger)) Fix panic when a plugin command is run with a capability added at runtime (via `Manager::add_capability`). +- [`e349dfe57`](https://www.github.com/tauri-apps/tauri/commit/e349dfe5722c0b47620582bd03f8c184ffeb6979) ([#12000](https://www.github.com/tauri-apps/tauri/pull/12000) by [@stringhandler](https://www.github.com/tauri-apps/tauri/../../stringhandler)) Fixed a panic caused by an assert when the resource random id has been used already. +- [`46935212b`](https://www.github.com/tauri-apps/tauri/commit/46935212b61da44dc82dfeb803fceebf5659f7b7) ([#11658](https://www.github.com/tauri-apps/tauri/pull/11658) by [@Legend-Master](https://www.github.com/tauri-apps/tauri/../../Legend-Master)) Fix `.json5` capability files not recognized even with `config-json5` feature enabled +- [`b37741da6`](https://www.github.com/tauri-apps/tauri/commit/b37741da6a2d3dad71490c910a64eeedda2ba9ca) ([#11871](https://www.github.com/tauri-apps/tauri/pull/11871) by [@johncarmack1984](https://www.github.com/tauri-apps/tauri/../../johncarmack1984)) Fix `specta-util` dependency not found error when using `specta` feature +- [`ca7f025fd`](https://www.github.com/tauri-apps/tauri/commit/ca7f025fd8666f8fce6894bb5e16cf2d4fc81e0c) ([#11958](https://www.github.com/tauri-apps/tauri/pull/11958) by [@amrbashir](https://www.github.com/tauri-apps/tauri/../../amrbashir)) Fix panic when invoking a command with an unmanaged state, an error will be returned instead. + +### Dependencies + +- Upgraded to `tauri-runtime@2.3.0` +- Upgraded to `tauri-runtime-wry@2.3.0` +- Upgraded to `tauri-utils@2.1.1` +- Upgraded to `tauri-macros@2.0.4` +- Upgraded to `tauri-build@2.0.4` + ## \[2.1.1] ### Bug Fixes diff --git a/crates/tauri/Cargo.toml b/crates/tauri/Cargo.toml index a4f62dd65fc8..e7a39710fa7d 100644 --- a/crates/tauri/Cargo.toml +++ b/crates/tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri" -version = "2.1.1" +version = "2.2.0" description = "Make tiny, secure apps for all desktop platforms with Tauri" exclude = ["/test", "/.scripts", "CHANGELOG.md", "/target"] readme = "README.md" @@ -43,8 +43,8 @@ build = ["tauri-build"] development = ["quickcheck_macros"] [dependencies] -serde_json = { version = "1.0", features = ["raw_value"] } -serde = { version = "1.0", features = ["derive", "rc"] } +serde_json = { version = "1", features = ["raw_value"] } +serde = { version = "1", features = ["derive", "rc"] } tokio = { version = "1", features = [ "rt", "rt-multi-thread", @@ -55,19 +55,19 @@ tokio = { version = "1", features = [ futures-util = "0.3" uuid = { version = "1", features = ["v4"], optional = true } url = "2" -anyhow = "1.0" +anyhow = "1" thiserror = "2" -tauri-runtime = { version = "2.2.0", path = "../tauri-runtime" } -tauri-macros = { version = "2.0.3", path = "../tauri-macros" } -tauri-utils = { version = "2.1.0", features = [ +tauri-runtime = { version = "2.3.0", path = "../tauri-runtime" } +tauri-macros = { version = "2.0.4", path = "../tauri-macros" } +tauri-utils = { version = "2.1.1", features = [ "resources", ], path = "../tauri-utils" } -tauri-runtime-wry = { version = "2.2.0", path = "../tauri-runtime-wry", optional = true } +tauri-runtime-wry = { version = "2.3.0", path = "../tauri-runtime-wry", optional = true } getrandom = "0.2" serde_repr = "0.1" -http = "1.1" +http = "1" dirs = "5" -percent-encoding = "2.3" +percent-encoding = "2" reqwest = { version = "0.12", default-features = false, features = [ "json", "stream", @@ -80,10 +80,10 @@ mime = "0.3" data-url = { version = "0.3", optional = true } serialize-to-javascript = "=0.1.1" image = { version = "0.25", default-features = false, optional = true } -http-range = { version = "0.1.5", optional = true } +http-range = { version = "0.1", optional = true } tracing = { version = "0.1", optional = true } heck = "0.5" -log = "0.4" +log = "0.4.21" dunce = "1" specta = { version = "^2.0.0-rc.20", optional = true, default-features = false, features = [ "function", @@ -107,9 +107,9 @@ webkit2gtk = { version = "=2.0.1", features = ["v2_40"] } [target.'cfg(target_os = "macos")'.dependencies] embed_plist = "1.2" plist = "1" -objc2 = "0.5.2" -objc2-foundation = { version = "0.2.2", features = ["NSData", "NSThread"] } -objc2-app-kit = { version = "0.2.2", features = [ +objc2 = "0.5" +objc2-foundation = { version = "0.2", features = ["NSData", "NSThread"] } +objc2-app-kit = { version = "0.2", features = [ "NSApplication", "NSColor", "NSResponder", @@ -120,7 +120,7 @@ objc2-app-kit = { version = "0.2.2", features = [ window-vibrancy = "0.5" [target."cfg(windows)".dependencies] -webview2-com = "0.33" +webview2-com = "0.34" window-vibrancy = "0.5" [target."cfg(windows)".dependencies.windows] @@ -133,21 +133,21 @@ jni = "0.21" # UIKit, i.e. iOS/tvOS/watchOS/visionOS [target.'cfg(all(target_vendor = "apple", not(target_os = "macos")))'.dependencies] libc = "0.2" -swift-rs = "1.0.7" +swift-rs = "1" [build-dependencies] heck = "0.5" -tauri-build = { path = "../tauri-build/", default-features = false, version = "2.0.3" } -tauri-utils = { path = "../tauri-utils/", version = "2.1.0", features = [ +tauri-build = { path = "../tauri-build/", default-features = false, version = "2.0.4" } +tauri-utils = { path = "../tauri-utils/", version = "2.1.1", features = [ "build", ] } [dev-dependencies] -proptest = "1.4.0" +proptest = "1.6.0" quickcheck = "1.0.3" quickcheck_macros = "1.0.0" -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" +serde = { version = "1", features = ["derive"] } +serde_json = "1" tauri = { path = ".", default-features = false, features = ["wry"] } tokio = { version = "1", features = ["full"] } cargo_toml = "0.17" @@ -155,7 +155,7 @@ http-range = "0.1.5" # macOS [target.'cfg(target_os = "macos")'.dev-dependencies] -objc2-web-kit = { version = "0.2.2", features = [ +objc2-web-kit = { version = "0.2", features = [ "objc2-app-kit", "WKWebView", "WKUserContentController", diff --git a/crates/tauri/build.rs b/crates/tauri/build.rs index 6d42d967b4ce..86eb0f55897d 100644 --- a/crates/tauri/build.rs +++ b/crates/tauri/build.rs @@ -428,7 +428,7 @@ permissions = [{}] .join(",") ); - write_if_changed(&default_toml, toml_content) + write_if_changed(default_toml, toml_content) .unwrap_or_else(|_| panic!("unable to autogenerate core:default set")); let _ = tauri_utils::acl::build::define_permissions( diff --git a/crates/tauri/scripts/bundle.global.js b/crates/tauri/scripts/bundle.global.js index 46c756b1a50c..03416080c2e9 100644 --- a/crates/tauri/scripts/bundle.global.js +++ b/crates/tauri/scripts/bundle.global.js @@ -1 +1 @@ -var __TAURI_IIFE__=function(e){"use strict";function n(e,n,t,i){if("a"===t&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?e!==n||!i:!n.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?i:"a"===t?i.call(e):i?i.value:n.get(e)}function t(e,n,t,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?e!==n||!r:!n.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,t):r?r.value=t:n.set(e,t),t}var i,r,s,a;"function"==typeof SuppressedError&&SuppressedError;const l="__TAURI_TO_IPC_KEY__";function o(e,n=!1){return window.__TAURI_INTERNALS__.transformCallback(e,n)}class u{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,i.set(this,(()=>{})),r.set(this,0),s.set(this,{}),this.id=o((({message:e,id:a})=>{if(a===n(this,r,"f")){t(this,r,a+1,"f"),n(this,i,"f").call(this,e);const l=Object.keys(n(this,s,"f"));if(l.length>0){let e=a+1;for(const t of l.sort()){if(parseInt(t)!==e)break;{const r=n(this,s,"f")[t];delete n(this,s,"f")[t],n(this,i,"f").call(this,r),e+=1}}t(this,r,e,"f")}}else n(this,s,"f")[a.toString()]=e}))}set onmessage(e){t(this,i,e,"f")}get onmessage(){return n(this,i,"f")}[(i=new WeakMap,r=new WeakMap,s=new WeakMap,l)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[l]()}}class c{constructor(e,n,t){this.plugin=e,this.event=n,this.channelId=t}async unregister(){return d(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}}async function d(e,n={},t){return window.__TAURI_INTERNALS__.invoke(e,n,t)}class h{get rid(){return n(this,a,"f")}constructor(e){a.set(this,void 0),t(this,a,e,"f")}async close(){return d("plugin:resources|close",{rid:this.rid})}}a=new WeakMap;var p=Object.freeze({__proto__:null,Channel:u,PluginListener:c,Resource:h,SERIALIZE_TO_IPC_FN:l,addPluginListener:async function(e,n,t){const i=new u;return i.onmessage=t,d(`plugin:${e}|registerListener`,{event:n,handler:i}).then((()=>new c(e,n,i.id)))},checkPermissions:async function(e){return d(`plugin:${e}|check_permissions`)},convertFileSrc:function(e,n="asset"){return window.__TAURI_INTERNALS__.convertFileSrc(e,n)},invoke:d,isTauri:function(){return"isTauri"in window&&!!window.isTauri},requestPermissions:async function(e){return d(`plugin:${e}|request_permissions`)},transformCallback:o});class w extends h{constructor(e){super(e)}static async new(e,n,t){return d("plugin:image|new",{rgba:y(e),width:n,height:t}).then((e=>new w(e)))}static async fromBytes(e){return d("plugin:image|from_bytes",{bytes:y(e)}).then((e=>new w(e)))}static async fromPath(e){return d("plugin:image|from_path",{path:e}).then((e=>new w(e)))}async rgba(){return d("plugin:image|rgba",{rid:this.rid}).then((e=>new Uint8Array(e)))}async size(){return d("plugin:image|size",{rid:this.rid})}}function y(e){return null==e?null:"string"==typeof e?e:e instanceof w?e.rid:e}var _=Object.freeze({__proto__:null,Image:w,transformImage:y});var g=Object.freeze({__proto__:null,defaultWindowIcon:async function(){return d("plugin:app|default_window_icon").then((e=>e?new w(e):null))},getName:async function(){return d("plugin:app|name")},getTauriVersion:async function(){return d("plugin:app|tauri_version")},getVersion:async function(){return d("plugin:app|version")},hide:async function(){return d("plugin:app|app_hide")},setTheme:async function(e){return d("plugin:app|set_app_theme",{theme:e})},show:async function(){return d("plugin:app|app_show")}});class b{constructor(...e){this.type="Logical",1===e.length?"Logical"in e[0]?(this.width=e[0].Logical.width,this.height=e[0].Logical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toPhysical(e){return new m(this.width*e,this.height*e)}[l](){return{width:this.width,height:this.height}}toJSON(){return this[l]()}}class m{constructor(...e){this.type="Physical",1===e.length?"Physical"in e[0]?(this.width=e[0].Physical.width,this.height=e[0].Physical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toLogical(e){return new b(this.width/e,this.height/e)}[l](){return{width:this.width,height:this.height}}toJSON(){return this[l]()}}class v{constructor(e){this.size=e}toLogical(e){return this.size instanceof b?this.size:this.size.toLogical(e)}toPhysical(e){return this.size instanceof m?this.size:this.size.toPhysical(e)}[l](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[l]()}}class f{constructor(...e){this.type="Logical",1===e.length?"Logical"in e[0]?(this.x=e[0].Logical.x,this.y=e[0].Logical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toPhysical(e){return new k(this.x*e,this.y*e)}[l](){return{x:this.x,y:this.y}}toJSON(){return this[l]()}}class k{constructor(...e){this.type="Physical",1===e.length?"Physical"in e[0]?(this.x=e[0].Physical.x,this.y=e[0].Physical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toLogical(e){return new f(this.x/e,this.y/e)}[l](){return{x:this.x,y:this.y}}toJSON(){return this[l]()}}class A{constructor(e){this.position=e}toLogical(e){return this.position instanceof f?this.position:this.position.toLogical(e)}toPhysical(e){return this.position instanceof k?this.position:this.position.toPhysical(e)}[l](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[l]()}}var E,T=Object.freeze({__proto__:null,LogicalPosition:f,LogicalSize:b,PhysicalPosition:k,PhysicalSize:m,Position:A,Size:v});async function D(e,n){await d("plugin:event|unlisten",{event:e,eventId:n})}async function I(e,n,t){var i;const r="string"==typeof(null==t?void 0:t.target)?{kind:"AnyLabel",label:t.target}:null!==(i=null==t?void 0:t.target)&&void 0!==i?i:{kind:"Any"};return d("plugin:event|listen",{event:e,target:r,handler:o(n)}).then((n=>async()=>D(e,n)))}async function R(e,n,t){return I(e,(t=>{D(e,t.id),n(t)}),t)}async function S(e,n){await d("plugin:event|emit",{event:e,payload:n})}async function L(e,n,t){const i="string"==typeof e?{kind:"AnyLabel",label:e}:e;await d("plugin:event|emit_to",{target:i,event:n,payload:t})}!function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",e.WINDOW_DESTROYED="tauri://destroyed",e.WINDOW_FOCUS="tauri://focus",e.WINDOW_BLUR="tauri://blur",e.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",e.WINDOW_THEME_CHANGED="tauri://theme-changed",e.WINDOW_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"}(E||(E={}));var x,C,N,P=Object.freeze({__proto__:null,get TauriEvent(){return E},emit:S,emitTo:L,listen:I,once:R});function z(e){var n;if("items"in e)e.items=null===(n=e.items)||void 0===n?void 0:n.map((e=>"rid"in e?e:z(e)));else if("action"in e&&e.action){const n=new u;return n.onmessage=e.action,delete e.action,{...e,handler:n}}return e}async function W(e,n){const t=new u;if(n&&"object"==typeof n&&("action"in n&&n.action&&(t.onmessage=n.action,delete n.action),"item"in n&&n.item&&"object"==typeof n.item&&"About"in n.item&&n.item.About&&"object"==typeof n.item.About&&"icon"in n.item.About&&n.item.About.icon&&(n.item.About.icon=y(n.item.About.icon)),"icon"in n&&n.icon&&(n.icon=y(n.icon)),"items"in n&&n.items)){function i(e){var n;return"rid"in e?[e.rid,e.kind]:("item"in e&&"object"==typeof e.item&&(null===(n=e.item.About)||void 0===n?void 0:n.icon)&&(e.item.About.icon=y(e.item.About.icon)),"icon"in e&&e.icon&&(e.icon=y(e.icon)),"items"in e&&e.items&&(e.items=e.items.map(i)),z(e))}n.items=n.items.map(i)}return d("plugin:menu|new",{kind:e,options:n,handler:t})}class O extends h{get id(){return n(this,x,"f")}get kind(){return n(this,C,"f")}constructor(e,n,i){super(e),x.set(this,void 0),C.set(this,void 0),t(this,x,n,"f"),t(this,C,i,"f")}}x=new WeakMap,C=new WeakMap;class F extends O{constructor(e,n){super(e,n,"MenuItem")}static async new(e){return W("MenuItem",e).then((([e,n])=>new F(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}async isEnabled(){return d("plugin:menu|is_enabled",{rid:this.rid,kind:this.kind})}async setEnabled(e){return d("plugin:menu|set_enabled",{rid:this.rid,kind:this.kind,enabled:e})}async setAccelerator(e){return d("plugin:menu|set_accelerator",{rid:this.rid,kind:this.kind,accelerator:e})}}class M extends O{constructor(e,n){super(e,n,"Check")}static async new(e){return W("Check",e).then((([e,n])=>new M(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}async isEnabled(){return d("plugin:menu|is_enabled",{rid:this.rid,kind:this.kind})}async setEnabled(e){return d("plugin:menu|set_enabled",{rid:this.rid,kind:this.kind,enabled:e})}async setAccelerator(e){return d("plugin:menu|set_accelerator",{rid:this.rid,kind:this.kind,accelerator:e})}async isChecked(){return d("plugin:menu|is_checked",{rid:this.rid})}async setChecked(e){return d("plugin:menu|set_checked",{rid:this.rid,checked:e})}}!function(e){e.Add="Add",e.Advanced="Advanced",e.Bluetooth="Bluetooth",e.Bookmarks="Bookmarks",e.Caution="Caution",e.ColorPanel="ColorPanel",e.ColumnView="ColumnView",e.Computer="Computer",e.EnterFullScreen="EnterFullScreen",e.Everyone="Everyone",e.ExitFullScreen="ExitFullScreen",e.FlowView="FlowView",e.Folder="Folder",e.FolderBurnable="FolderBurnable",e.FolderSmart="FolderSmart",e.FollowLinkFreestanding="FollowLinkFreestanding",e.FontPanel="FontPanel",e.GoLeft="GoLeft",e.GoRight="GoRight",e.Home="Home",e.IChatTheater="IChatTheater",e.IconView="IconView",e.Info="Info",e.InvalidDataFreestanding="InvalidDataFreestanding",e.LeftFacingTriangle="LeftFacingTriangle",e.ListView="ListView",e.LockLocked="LockLocked",e.LockUnlocked="LockUnlocked",e.MenuMixedState="MenuMixedState",e.MenuOnState="MenuOnState",e.MobileMe="MobileMe",e.MultipleDocuments="MultipleDocuments",e.Network="Network",e.Path="Path",e.PreferencesGeneral="PreferencesGeneral",e.QuickLook="QuickLook",e.RefreshFreestanding="RefreshFreestanding",e.Refresh="Refresh",e.Remove="Remove",e.RevealFreestanding="RevealFreestanding",e.RightFacingTriangle="RightFacingTriangle",e.Share="Share",e.Slideshow="Slideshow",e.SmartBadge="SmartBadge",e.StatusAvailable="StatusAvailable",e.StatusNone="StatusNone",e.StatusPartiallyAvailable="StatusPartiallyAvailable",e.StatusUnavailable="StatusUnavailable",e.StopProgressFreestanding="StopProgressFreestanding",e.StopProgress="StopProgress",e.TrashEmpty="TrashEmpty",e.TrashFull="TrashFull",e.User="User",e.UserAccounts="UserAccounts",e.UserGroup="UserGroup",e.UserGuest="UserGuest"}(N||(N={}));class U extends O{constructor(e,n){super(e,n,"Icon")}static async new(e){return W("Icon",e).then((([e,n])=>new U(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}async isEnabled(){return d("plugin:menu|is_enabled",{rid:this.rid,kind:this.kind})}async setEnabled(e){return d("plugin:menu|set_enabled",{rid:this.rid,kind:this.kind,enabled:e})}async setAccelerator(e){return d("plugin:menu|set_accelerator",{rid:this.rid,kind:this.kind,accelerator:e})}async setIcon(e){return d("plugin:menu|set_icon",{rid:this.rid,icon:y(e)})}}class B extends O{constructor(e,n){super(e,n,"Predefined")}static async new(e){return W("Predefined",e).then((([e,n])=>new B(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}}function j([e,n,t]){switch(t){case"Submenu":return new V(e,n);case"Predefined":return new B(e,n);case"Check":return new M(e,n);case"Icon":return new U(e,n);default:return new F(e,n)}}class V extends O{constructor(e,n){super(e,n,"Submenu")}static async new(e){return W("Submenu",e).then((([e,n])=>new V(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}async isEnabled(){return d("plugin:menu|is_enabled",{rid:this.rid,kind:this.kind})}async setEnabled(e){return d("plugin:menu|set_enabled",{rid:this.rid,kind:this.kind,enabled:e})}async append(e){return d("plugin:menu|append",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e))})}async prepend(e){return d("plugin:menu|prepend",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e))})}async insert(e,n){return d("plugin:menu|insert",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e)),position:n})}async remove(e){return d("plugin:menu|remove",{rid:this.rid,kind:this.kind,item:[e.rid,e.kind]})}async removeAt(e){return d("plugin:menu|remove_at",{rid:this.rid,kind:this.kind,position:e}).then(j)}async items(){return d("plugin:menu|items",{rid:this.rid,kind:this.kind}).then((e=>e.map(j)))}async get(e){return d("plugin:menu|get",{rid:this.rid,kind:this.kind,id:e}).then((e=>e?j(e):null))}async popup(e,n){var t;return d("plugin:menu|popup",{rid:this.rid,kind:this.kind,window:null!==(t=null==n?void 0:n.label)&&void 0!==t?t:null,at:e instanceof A?e:e?new A(e):null})}async setAsWindowsMenuForNSApp(){return d("plugin:menu|set_as_windows_menu_for_nsapp",{rid:this.rid})}async setAsHelpMenuForNSApp(){return d("plugin:menu|set_as_help_menu_for_nsapp",{rid:this.rid})}}class G extends O{constructor(e,n){super(e,n,"Menu")}static async new(e){return W("Menu",e).then((([e,n])=>new G(e,n)))}static async default(){return d("plugin:menu|create_default").then((([e,n])=>new G(e,n)))}async append(e){return d("plugin:menu|append",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e))})}async prepend(e){return d("plugin:menu|prepend",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e))})}async insert(e,n){return d("plugin:menu|insert",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e)),position:n})}async remove(e){return d("plugin:menu|remove",{rid:this.rid,kind:this.kind,item:[e.rid,e.kind]})}async removeAt(e){return d("plugin:menu|remove_at",{rid:this.rid,kind:this.kind,position:e}).then(j)}async items(){return d("plugin:menu|items",{rid:this.rid,kind:this.kind}).then((e=>e.map(j)))}async get(e){return d("plugin:menu|get",{rid:this.rid,kind:this.kind,id:e}).then((e=>e?j(e):null))}async popup(e,n){var t;return d("plugin:menu|popup",{rid:this.rid,kind:this.kind,window:null!==(t=null==n?void 0:n.label)&&void 0!==t?t:null,at:e instanceof A?e:e?new A(e):null})}async setAsAppMenu(){return d("plugin:menu|set_as_app_menu",{rid:this.rid}).then((e=>e?new G(e[0],e[1]):null))}async setAsWindowMenu(e){var n;return d("plugin:menu|set_as_window_menu",{rid:this.rid,window:null!==(n=null==e?void 0:e.label)&&void 0!==n?n:null}).then((e=>e?new G(e[0],e[1]):null))}}var H=Object.freeze({__proto__:null,CheckMenuItem:M,IconMenuItem:U,Menu:G,MenuItem:F,get NativeIcon(){return N},PredefinedMenuItem:B,Submenu:V,itemFromKind:j});function $(){var e;window.__TAURI_INTERNALS__=null!==(e=window.__TAURI_INTERNALS__)&&void 0!==e?e:{}}var q,J=Object.freeze({__proto__:null,clearMocks:function(){var e,n,t;"object"==typeof window.__TAURI_INTERNALS__&&((null===(e=window.__TAURI_INTERNALS__)||void 0===e?void 0:e.convertFileSrc)&&delete window.__TAURI_INTERNALS__.convertFileSrc,(null===(n=window.__TAURI_INTERNALS__)||void 0===n?void 0:n.invoke)&&delete window.__TAURI_INTERNALS__.invoke,(null===(t=window.__TAURI_INTERNALS__)||void 0===t?void 0:t.metadata)&&delete window.__TAURI_INTERNALS__.metadata)},mockConvertFileSrc:function(e){$(),window.__TAURI_INTERNALS__.convertFileSrc=function(n,t="asset"){const i=encodeURIComponent(n);return"windows"===e?`http://${t}.localhost/${i}`:`${t}://localhost/${i}`}},mockIPC:function(e){$(),window.__TAURI_INTERNALS__.transformCallback=function(e,n=!1){const t=window.crypto.getRandomValues(new Uint32Array(1))[0],i=`_${t}`;return Object.defineProperty(window,i,{value:t=>(n&&Reflect.deleteProperty(window,i),e&&e(t)),writable:!1,configurable:!0}),t},window.__TAURI_INTERNALS__.invoke=async function(n,t,i){return e(n,t)}},mockWindows:function(e,...n){$(),window.__TAURI_INTERNALS__.metadata={currentWindow:{label:e},currentWebview:{windowLabel:e,label:e}}}});!function(e){e[e.Audio=1]="Audio",e[e.Cache=2]="Cache",e[e.Config=3]="Config",e[e.Data=4]="Data",e[e.LocalData=5]="LocalData",e[e.Document=6]="Document",e[e.Download=7]="Download",e[e.Picture=8]="Picture",e[e.Public=9]="Public",e[e.Video=10]="Video",e[e.Resource=11]="Resource",e[e.Temp=12]="Temp",e[e.AppConfig=13]="AppConfig",e[e.AppData=14]="AppData",e[e.AppLocalData=15]="AppLocalData",e[e.AppCache=16]="AppCache",e[e.AppLog=17]="AppLog",e[e.Desktop=18]="Desktop",e[e.Executable=19]="Executable",e[e.Font=20]="Font",e[e.Home=21]="Home",e[e.Runtime=22]="Runtime",e[e.Template=23]="Template"}(q||(q={}));var Q=Object.freeze({__proto__:null,get BaseDirectory(){return q},appCacheDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppCache})},appConfigDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppConfig})},appDataDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppData})},appLocalDataDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppLocalData})},appLogDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppLog})},audioDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Audio})},basename:async function(e,n){return d("plugin:path|basename",{path:e,ext:n})},cacheDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Cache})},configDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Config})},dataDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Data})},delimiter:function(){return window.__TAURI_INTERNALS__.plugins.path.delimiter},desktopDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Desktop})},dirname:async function(e){return d("plugin:path|dirname",{path:e})},documentDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Document})},downloadDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Download})},executableDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Executable})},extname:async function(e){return d("plugin:path|extname",{path:e})},fontDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Font})},homeDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Home})},isAbsolute:async function(e){return d("plugin:path|is_absolute",{path:e})},join:async function(...e){return d("plugin:path|join",{paths:e})},localDataDir:async function(){return d("plugin:path|resolve_directory",{directory:q.LocalData})},normalize:async function(e){return d("plugin:path|normalize",{path:e})},pictureDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Picture})},publicDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Public})},resolve:async function(...e){return d("plugin:path|resolve",{paths:e})},resolveResource:async function(e){return d("plugin:path|resolve_directory",{directory:q.Resource,path:e})},resourceDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Resource})},runtimeDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Runtime})},sep:function(){return window.__TAURI_INTERNALS__.plugins.path.sep},tempDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Temp})},templateDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Template})},videoDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Video})}});class Z extends h{constructor(e,n){super(e),this.id=n}static async getById(e){return d("plugin:tray|get_by_id",{id:e}).then((n=>n?new Z(n,e):null))}static async removeById(e){return d("plugin:tray|remove_by_id",{id:e})}static async new(e){(null==e?void 0:e.menu)&&(e.menu=[e.menu.rid,e.menu.kind]),(null==e?void 0:e.icon)&&(e.icon=y(e.icon));const n=new u;if(null==e?void 0:e.action){const t=e.action;n.onmessage=e=>t(function(e){const n=e;return n.position=new k(e.position),n.rect.position=new k(e.rect.position),n.rect.size=new m(e.rect.size),n}(e)),delete e.action}return d("plugin:tray|new",{options:null!=e?e:{},handler:n}).then((([e,n])=>new Z(e,n)))}async setIcon(e){let n=null;return e&&(n=y(e)),d("plugin:tray|set_icon",{rid:this.rid,icon:n})}async setMenu(e){return e&&(e=[e.rid,e.kind]),d("plugin:tray|set_menu",{rid:this.rid,menu:e})}async setTooltip(e){return d("plugin:tray|set_tooltip",{rid:this.rid,tooltip:e})}async setTitle(e){return d("plugin:tray|set_title",{rid:this.rid,title:e})}async setVisible(e){return d("plugin:tray|set_visible",{rid:this.rid,visible:e})}async setTempDirPath(e){return d("plugin:tray|set_temp_dir_path",{rid:this.rid,path:e})}async setIconAsTemplate(e){return d("plugin:tray|set_icon_as_template",{rid:this.rid,asTemplate:e})}async setMenuOnLeftClick(e){return d("plugin:tray|set_show_menu_on_left_click",{rid:this.rid,onLeft:e})}async setShowMenuOnLeftClick(e){return d("plugin:tray|set_show_menu_on_left_click",{rid:this.rid,onLeft:e})}}var K,Y,X=Object.freeze({__proto__:null,TrayIcon:Z});!function(e){e[e.Critical=1]="Critical",e[e.Informational=2]="Informational"}(K||(K={}));class ee{constructor(e){this._preventDefault=!1,this.event=e.event,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}function ne(){return new re(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function te(){return d("plugin:window|get_all_windows").then((e=>e.map((e=>new re(e,{skip:!0})))))}!function(e){e.None="none",e.Normal="normal",e.Indeterminate="indeterminate",e.Paused="paused",e.Error="error"}(Y||(Y={}));const ie=["tauri://created","tauri://error"];class re{constructor(e,n={}){var t;this.label=e,this.listeners=Object.create(null),(null==n?void 0:n.skip)||d("plugin:window|create",{options:{...n,parent:"string"==typeof n.parent?n.parent:null===(t=n.parent)||void 0===t?void 0:t.label,label:e}}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static async getByLabel(e){var n;return null!==(n=(await te()).find((n=>n.label===e)))&&void 0!==n?n:null}static getCurrent(){return ne()}static async getAll(){return te()}static async getFocusedWindow(){for(const e of await te())if(await e.isFocused())return e;return null}async listen(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:I(e,n,{target:{kind:"Window",label:this.label}})}async once(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:R(e,n,{target:{kind:"Window",label:this.label}})}async emit(e,n){if(!ie.includes(e))return S(e,n);for(const t of this.listeners[e]||[])t({event:e,id:-1,payload:n})}async emitTo(e,n,t){if(!ie.includes(n))return L(e,n,t);for(const e of this.listeners[n]||[])e({event:n,id:-1,payload:t})}_handleTauriEvent(e,n){return!!ie.includes(e)&&(e in this.listeners?this.listeners[e].push(n):this.listeners[e]=[n],!0)}async scaleFactor(){return d("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return d("plugin:window|inner_position",{label:this.label}).then((e=>new k(e)))}async outerPosition(){return d("plugin:window|outer_position",{label:this.label}).then((e=>new k(e)))}async innerSize(){return d("plugin:window|inner_size",{label:this.label}).then((e=>new m(e)))}async outerSize(){return d("plugin:window|outer_size",{label:this.label}).then((e=>new m(e)))}async isFullscreen(){return d("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return d("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return d("plugin:window|is_maximized",{label:this.label})}async isFocused(){return d("plugin:window|is_focused",{label:this.label})}async isDecorated(){return d("plugin:window|is_decorated",{label:this.label})}async isResizable(){return d("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return d("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return d("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return d("plugin:window|is_closable",{label:this.label})}async isVisible(){return d("plugin:window|is_visible",{label:this.label})}async title(){return d("plugin:window|title",{label:this.label})}async theme(){return d("plugin:window|theme",{label:this.label})}async center(){return d("plugin:window|center",{label:this.label})}async requestUserAttention(e){let n=null;return e&&(n=e===K.Critical?{type:"Critical"}:{type:"Informational"}),d("plugin:window|request_user_attention",{label:this.label,value:n})}async setResizable(e){return d("plugin:window|set_resizable",{label:this.label,value:e})}async setEnabled(e){return d("plugin:window|set_enabled",{label:this.label,value:e})}async isEnabled(){return d("plugin:window|is_enabled",{label:this.label})}async setMaximizable(e){return d("plugin:window|set_maximizable",{label:this.label,value:e})}async setMinimizable(e){return d("plugin:window|set_minimizable",{label:this.label,value:e})}async setClosable(e){return d("plugin:window|set_closable",{label:this.label,value:e})}async setTitle(e){return d("plugin:window|set_title",{label:this.label,value:e})}async maximize(){return d("plugin:window|maximize",{label:this.label})}async unmaximize(){return d("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return d("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return d("plugin:window|minimize",{label:this.label})}async unminimize(){return d("plugin:window|unminimize",{label:this.label})}async show(){return d("plugin:window|show",{label:this.label})}async hide(){return d("plugin:window|hide",{label:this.label})}async close(){return d("plugin:window|close",{label:this.label})}async destroy(){return d("plugin:window|destroy",{label:this.label})}async setDecorations(e){return d("plugin:window|set_decorations",{label:this.label,value:e})}async setShadow(e){return d("plugin:window|set_shadow",{label:this.label,value:e})}async setEffects(e){return d("plugin:window|set_effects",{label:this.label,value:e})}async clearEffects(){return d("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(e){return d("plugin:window|set_always_on_top",{label:this.label,value:e})}async setAlwaysOnBottom(e){return d("plugin:window|set_always_on_bottom",{label:this.label,value:e})}async setContentProtected(e){return d("plugin:window|set_content_protected",{label:this.label,value:e})}async setSize(e){return d("plugin:window|set_size",{label:this.label,value:e instanceof v?e:new v(e)})}async setMinSize(e){return d("plugin:window|set_min_size",{label:this.label,value:e instanceof v?e:e?new v(e):null})}async setMaxSize(e){return d("plugin:window|set_max_size",{label:this.label,value:e instanceof v?e:e?new v(e):null})}async setSizeConstraints(e){function n(e){return e?{Logical:e}:null}return d("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:n(null==e?void 0:e.minWidth),minHeight:n(null==e?void 0:e.minHeight),maxWidth:n(null==e?void 0:e.maxWidth),maxHeight:n(null==e?void 0:e.maxHeight)}})}async setPosition(e){return d("plugin:window|set_position",{label:this.label,value:e instanceof A?e:new A(e)})}async setFullscreen(e){return d("plugin:window|set_fullscreen",{label:this.label,value:e})}async setFocus(){return d("plugin:window|set_focus",{label:this.label})}async setIcon(e){return d("plugin:window|set_icon",{label:this.label,value:y(e)})}async setSkipTaskbar(e){return d("plugin:window|set_skip_taskbar",{label:this.label,value:e})}async setCursorGrab(e){return d("plugin:window|set_cursor_grab",{label:this.label,value:e})}async setCursorVisible(e){return d("plugin:window|set_cursor_visible",{label:this.label,value:e})}async setCursorIcon(e){return d("plugin:window|set_cursor_icon",{label:this.label,value:e})}async setBackgroundColor(e){return d("plugin:window|set_background_color",{color:e})}async setCursorPosition(e){return d("plugin:window|set_cursor_position",{label:this.label,value:e instanceof A?e:new A(e)})}async setIgnoreCursorEvents(e){return d("plugin:window|set_ignore_cursor_events",{label:this.label,value:e})}async startDragging(){return d("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(e){return d("plugin:window|start_resize_dragging",{label:this.label,value:e})}async setBadgeCount(e){return d("plugin:window|set_badge_count",{label:this.label,value:e})}async setBadgeLabel(e){return d("plugin:window|set_badge_label",{label:this.label,value:e})}async setOverlayIcon(e){return d("plugin:window|set_overlay_icon",{label:this.label,value:e?y(e):void 0})}async setProgressBar(e){return d("plugin:window|set_progress_bar",{label:this.label,value:e})}async setVisibleOnAllWorkspaces(e){return d("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:e})}async setTitleBarStyle(e){return d("plugin:window|set_title_bar_style",{label:this.label,value:e})}async setTheme(e){return d("plugin:window|set_theme",{label:this.label,value:e})}async onResized(e){return this.listen(E.WINDOW_RESIZED,(n=>{n.payload=new m(n.payload),e(n)}))}async onMoved(e){return this.listen(E.WINDOW_MOVED,(n=>{n.payload=new k(n.payload),e(n)}))}async onCloseRequested(e){return this.listen(E.WINDOW_CLOSE_REQUESTED,(async n=>{const t=new ee(n);await e(t),t.isPreventDefault()||await this.destroy()}))}async onDragDropEvent(e){const n=await this.listen(E.DRAG_ENTER,(n=>{e({...n,payload:{type:"enter",paths:n.payload.paths,position:new k(n.payload.position)}})})),t=await this.listen(E.DRAG_OVER,(n=>{e({...n,payload:{type:"over",position:new k(n.payload.position)}})})),i=await this.listen(E.DRAG_DROP,(n=>{e({...n,payload:{type:"drop",paths:n.payload.paths,position:new k(n.payload.position)}})})),r=await this.listen(E.DRAG_LEAVE,(n=>{e({...n,payload:{type:"leave"}})}));return()=>{n(),i(),t(),r()}}async onFocusChanged(e){const n=await this.listen(E.WINDOW_FOCUS,(n=>{e({...n,payload:!0})})),t=await this.listen(E.WINDOW_BLUR,(n=>{e({...n,payload:!1})}));return()=>{n(),t()}}async onScaleChanged(e){return this.listen(E.WINDOW_SCALE_FACTOR_CHANGED,e)}async onThemeChanged(e){return this.listen(E.WINDOW_THEME_CHANGED,e)}}var se,ae;function le(e){return null===e?null:{name:e.name,scaleFactor:e.scaleFactor,position:new k(e.position),size:new m(e.size)}}!function(e){e.AppearanceBased="appearanceBased",e.Light="light",e.Dark="dark",e.MediumLight="mediumLight",e.UltraDark="ultraDark",e.Titlebar="titlebar",e.Selection="selection",e.Menu="menu",e.Popover="popover",e.Sidebar="sidebar",e.HeaderView="headerView",e.Sheet="sheet",e.WindowBackground="windowBackground",e.HudWindow="hudWindow",e.FullScreenUI="fullScreenUI",e.Tooltip="tooltip",e.ContentBackground="contentBackground",e.UnderWindowBackground="underWindowBackground",e.UnderPageBackground="underPageBackground",e.Mica="mica",e.Blur="blur",e.Acrylic="acrylic",e.Tabbed="tabbed",e.TabbedDark="tabbedDark",e.TabbedLight="tabbedLight"}(se||(se={})),function(e){e.FollowsWindowActiveState="followsWindowActiveState",e.Active="active",e.Inactive="inactive"}(ae||(ae={}));var oe=Object.freeze({__proto__:null,CloseRequestedEvent:ee,get Effect(){return se},get EffectState(){return ae},LogicalPosition:f,LogicalSize:b,PhysicalPosition:k,PhysicalSize:m,get ProgressBarStatus(){return Y},get UserAttentionType(){return K},Window:re,availableMonitors:async function(){return d("plugin:window|available_monitors").then((e=>e.map(le)))},currentMonitor:async function(){return d("plugin:window|current_monitor").then(le)},cursorPosition:async function(){return d("plugin:window|cursor_position").then((e=>new k(e)))},getAllWindows:te,getCurrentWindow:ne,monitorFromPoint:async function(e,n){return d("plugin:window|monitor_from_point",{x:e,y:n}).then(le)},primaryMonitor:async function(){return d("plugin:window|primary_monitor").then(le)}});function ue(){return new he(ne(),window.__TAURI_INTERNALS__.metadata.currentWebview.label,{skip:!0})}async function ce(){return d("plugin:webview|get_all_webviews").then((e=>e.map((e=>new he(new re(e.windowLabel,{skip:!0}),e.label,{skip:!0})))))}const de=["tauri://created","tauri://error"];class he{constructor(e,n,t){this.window=e,this.label=n,this.listeners=Object.create(null),(null==t?void 0:t.skip)||d("plugin:webview|create_webview",{windowLabel:e.label,label:n,options:t}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static async getByLabel(e){var n;return null!==(n=(await ce()).find((n=>n.label===e)))&&void 0!==n?n:null}static getCurrent(){return ue()}static async getAll(){return ce()}async listen(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:I(e,n,{target:{kind:"Webview",label:this.label}})}async once(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:R(e,n,{target:{kind:"Webview",label:this.label}})}async emit(e,n){if(!de.includes(e))return S(e,n);for(const t of this.listeners[e]||[])t({event:e,id:-1,payload:n})}async emitTo(e,n,t){if(!de.includes(n))return L(e,n,t);for(const e of this.listeners[n]||[])e({event:n,id:-1,payload:t})}_handleTauriEvent(e,n){return!!de.includes(e)&&(e in this.listeners?this.listeners[e].push(n):this.listeners[e]=[n],!0)}async position(){return d("plugin:webview|webview_position",{label:this.label}).then((e=>new k(e)))}async size(){return d("plugin:webview|webview_size",{label:this.label}).then((e=>new m(e)))}async close(){return d("plugin:webview|close",{label:this.label})}async setSize(e){return d("plugin:webview|set_webview_size",{label:this.label,value:e instanceof v?e:new v(e)})}async setPosition(e){return d("plugin:webview|set_webview_position",{label:this.label,value:e instanceof A?e:new A(e)})}async setFocus(){return d("plugin:webview|set_webview_focus",{label:this.label})}async hide(){return d("plugin:webview|webview_hide",{label:this.label})}async show(){return d("plugin:webview|webview_show",{label:this.label})}async setZoom(e){return d("plugin:webview|set_webview_zoom",{label:this.label,value:e})}async reparent(e){return d("plugin:webview|reparent",{label:this.label,window:"string"==typeof e?e:e.label})}async clearAllBrowsingData(){return d("plugin:webview|clear_all_browsing_data")}async setBackgroundColor(e){return d("plugin:webview|set_webview_background_color",{color:e})}async onDragDropEvent(e){const n=await this.listen(E.DRAG_ENTER,(n=>{e({...n,payload:{type:"enter",paths:n.payload.paths,position:new k(n.payload.position)}})})),t=await this.listen(E.DRAG_OVER,(n=>{e({...n,payload:{type:"over",position:new k(n.payload.position)}})})),i=await this.listen(E.DRAG_DROP,(n=>{e({...n,payload:{type:"drop",paths:n.payload.paths,position:new k(n.payload.position)}})})),r=await this.listen(E.DRAG_LEAVE,(n=>{e({...n,payload:{type:"leave"}})}));return()=>{n(),i(),t(),r()}}}var pe,we,ye=Object.freeze({__proto__:null,Webview:he,getAllWebviews:ce,getCurrentWebview:ue});function _e(){const e=ue();return new be(e.label,{skip:!0})}async function ge(){return d("plugin:window|get_all_windows").then((e=>e.map((e=>new be(e,{skip:!0})))))}class be{constructor(e,n={}){var t;this.label=e,this.listeners=Object.create(null),(null==n?void 0:n.skip)||d("plugin:webview|create_webview_window",{options:{...n,parent:"string"==typeof n.parent?n.parent:null===(t=n.parent)||void 0===t?void 0:t.label,label:e}}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static async getByLabel(e){var n;const t=null!==(n=(await ge()).find((n=>n.label===e)))&&void 0!==n?n:null;return t?new be(t.label,{skip:!0}):null}static getCurrent(){return _e()}static async getAll(){return ge()}async listen(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:I(e,n,{target:{kind:"WebviewWindow",label:this.label}})}async once(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:R(e,n,{target:{kind:"WebviewWindow",label:this.label}})}async setBackgroundColor(e){return d("plugin:window|set_background_color",{color:e}).then((()=>d("plugin:webview|set_webview_background_color",{color:e})))}}pe=be,we=[re,he],(Array.isArray(we)?we:[we]).forEach((e=>{Object.getOwnPropertyNames(e.prototype).forEach((n=>{var t;"object"==typeof pe.prototype&&pe.prototype&&n in pe.prototype||Object.defineProperty(pe.prototype,n,null!==(t=Object.getOwnPropertyDescriptor(e.prototype,n))&&void 0!==t?t:Object.create(null))}))}));var me=Object.freeze({__proto__:null,WebviewWindow:be,getAllWebviewWindows:ge,getCurrentWebviewWindow:_e});return e.app=g,e.core=p,e.dpi=T,e.event=P,e.image=_,e.menu=H,e.mocks=J,e.path=Q,e.tray=X,e.webview=ye,e.webviewWindow=me,e.window=oe,e}({});window.__TAURI__=__TAURI_IIFE__; +var __TAURI_IIFE__=function(e){"use strict";function n(e,n,t,i){if("a"===t&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?e!==n||!i:!n.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?i:"a"===t?i.call(e):i?i.value:n.get(e)}function t(e,n,t,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?e!==n||!r:!n.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(e,t):r?r.value=t:n.set(e,t),t}var i,r,s,a;"function"==typeof SuppressedError&&SuppressedError;const l="__TAURI_TO_IPC_KEY__";function o(e,n=!1){return window.__TAURI_INTERNALS__.transformCallback(e,n)}class u{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,i.set(this,(()=>{})),r.set(this,0),s.set(this,[]),this.id=o((({message:e,id:a})=>{if(a==n(this,r,"f"))for(n(this,i,"f").call(this,e),t(this,r,n(this,r,"f")+1,"f");n(this,r,"f")in n(this,s,"f");){const e=n(this,s,"f")[n(this,r,"f")];n(this,i,"f").call(this,e),delete n(this,s,"f")[n(this,r,"f")],t(this,r,n(this,r,"f")+1,"f")}else n(this,s,"f")[a]=e}))}set onmessage(e){t(this,i,e,"f")}get onmessage(){return n(this,i,"f")}[(i=new WeakMap,r=new WeakMap,s=new WeakMap,l)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[l]()}}class c{constructor(e,n,t){this.plugin=e,this.event=n,this.channelId=t}async unregister(){return d(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}}async function d(e,n={},t){return window.__TAURI_INTERNALS__.invoke(e,n,t)}class h{get rid(){return n(this,a,"f")}constructor(e){a.set(this,void 0),t(this,a,e,"f")}async close(){return d("plugin:resources|close",{rid:this.rid})}}a=new WeakMap;var p=Object.freeze({__proto__:null,Channel:u,PluginListener:c,Resource:h,SERIALIZE_TO_IPC_FN:l,addPluginListener:async function(e,n,t){const i=new u;return i.onmessage=t,d(`plugin:${e}|registerListener`,{event:n,handler:i}).then((()=>new c(e,n,i.id)))},checkPermissions:async function(e){return d(`plugin:${e}|check_permissions`)},convertFileSrc:function(e,n="asset"){return window.__TAURI_INTERNALS__.convertFileSrc(e,n)},invoke:d,isTauri:function(){return"isTauri"in window&&!!window.isTauri},requestPermissions:async function(e){return d(`plugin:${e}|request_permissions`)},transformCallback:o});class w extends h{constructor(e){super(e)}static async new(e,n,t){return d("plugin:image|new",{rgba:y(e),width:n,height:t}).then((e=>new w(e)))}static async fromBytes(e){return d("plugin:image|from_bytes",{bytes:y(e)}).then((e=>new w(e)))}static async fromPath(e){return d("plugin:image|from_path",{path:e}).then((e=>new w(e)))}async rgba(){return d("plugin:image|rgba",{rid:this.rid}).then((e=>new Uint8Array(e)))}async size(){return d("plugin:image|size",{rid:this.rid})}}function y(e){return null==e?null:"string"==typeof e?e:e instanceof w?e.rid:e}var _=Object.freeze({__proto__:null,Image:w,transformImage:y});var g=Object.freeze({__proto__:null,defaultWindowIcon:async function(){return d("plugin:app|default_window_icon").then((e=>e?new w(e):null))},getName:async function(){return d("plugin:app|name")},getTauriVersion:async function(){return d("plugin:app|tauri_version")},getVersion:async function(){return d("plugin:app|version")},hide:async function(){return d("plugin:app|app_hide")},setTheme:async function(e){return d("plugin:app|set_app_theme",{theme:e})},show:async function(){return d("plugin:app|app_show")}});class b{constructor(...e){this.type="Logical",1===e.length?"Logical"in e[0]?(this.width=e[0].Logical.width,this.height=e[0].Logical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toPhysical(e){return new m(this.width*e,this.height*e)}[l](){return{width:this.width,height:this.height}}toJSON(){return this[l]()}}class m{constructor(...e){this.type="Physical",1===e.length?"Physical"in e[0]?(this.width=e[0].Physical.width,this.height=e[0].Physical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toLogical(e){return new b(this.width/e,this.height/e)}[l](){return{width:this.width,height:this.height}}toJSON(){return this[l]()}}class v{constructor(e){this.size=e}toLogical(e){return this.size instanceof b?this.size:this.size.toLogical(e)}toPhysical(e){return this.size instanceof m?this.size:this.size.toPhysical(e)}[l](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[l]()}}class f{constructor(...e){this.type="Logical",1===e.length?"Logical"in e[0]?(this.x=e[0].Logical.x,this.y=e[0].Logical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toPhysical(e){return new k(this.x*e,this.y*e)}[l](){return{x:this.x,y:this.y}}toJSON(){return this[l]()}}class k{constructor(...e){this.type="Physical",1===e.length?"Physical"in e[0]?(this.x=e[0].Physical.x,this.y=e[0].Physical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toLogical(e){return new f(this.x/e,this.y/e)}[l](){return{x:this.x,y:this.y}}toJSON(){return this[l]()}}class A{constructor(e){this.position=e}toLogical(e){return this.position instanceof f?this.position:this.position.toLogical(e)}toPhysical(e){return this.position instanceof k?this.position:this.position.toPhysical(e)}[l](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[l]()}}var E,T=Object.freeze({__proto__:null,LogicalPosition:f,LogicalSize:b,PhysicalPosition:k,PhysicalSize:m,Position:A,Size:v});async function D(e,n){await d("plugin:event|unlisten",{event:e,eventId:n})}async function I(e,n,t){var i;const r="string"==typeof(null==t?void 0:t.target)?{kind:"AnyLabel",label:t.target}:null!==(i=null==t?void 0:t.target)&&void 0!==i?i:{kind:"Any"};return d("plugin:event|listen",{event:e,target:r,handler:o(n)}).then((n=>async()=>D(e,n)))}async function R(e,n,t){return I(e,(t=>{D(e,t.id),n(t)}),t)}async function S(e,n){await d("plugin:event|emit",{event:e,payload:n})}async function L(e,n,t){const i="string"==typeof e?{kind:"AnyLabel",label:e}:e;await d("plugin:event|emit_to",{target:i,event:n,payload:t})}!function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",e.WINDOW_DESTROYED="tauri://destroyed",e.WINDOW_FOCUS="tauri://focus",e.WINDOW_BLUR="tauri://blur",e.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",e.WINDOW_THEME_CHANGED="tauri://theme-changed",e.WINDOW_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"}(E||(E={}));var x,C,N,P=Object.freeze({__proto__:null,get TauriEvent(){return E},emit:S,emitTo:L,listen:I,once:R});function z(e){var n;if("items"in e)e.items=null===(n=e.items)||void 0===n?void 0:n.map((e=>"rid"in e?e:z(e)));else if("action"in e&&e.action){const n=new u;return n.onmessage=e.action,delete e.action,{...e,handler:n}}return e}async function W(e,n){const t=new u;if(n&&"object"==typeof n&&("action"in n&&n.action&&(t.onmessage=n.action,delete n.action),"item"in n&&n.item&&"object"==typeof n.item&&"About"in n.item&&n.item.About&&"object"==typeof n.item.About&&"icon"in n.item.About&&n.item.About.icon&&(n.item.About.icon=y(n.item.About.icon)),"icon"in n&&n.icon&&(n.icon=y(n.icon)),"items"in n&&n.items)){function i(e){var n;return"rid"in e?[e.rid,e.kind]:("item"in e&&"object"==typeof e.item&&(null===(n=e.item.About)||void 0===n?void 0:n.icon)&&(e.item.About.icon=y(e.item.About.icon)),"icon"in e&&e.icon&&(e.icon=y(e.icon)),"items"in e&&e.items&&(e.items=e.items.map(i)),z(e))}n.items=n.items.map(i)}return d("plugin:menu|new",{kind:e,options:n,handler:t})}class O extends h{get id(){return n(this,x,"f")}get kind(){return n(this,C,"f")}constructor(e,n,i){super(e),x.set(this,void 0),C.set(this,void 0),t(this,x,n,"f"),t(this,C,i,"f")}}x=new WeakMap,C=new WeakMap;class F extends O{constructor(e,n){super(e,n,"MenuItem")}static async new(e){return W("MenuItem",e).then((([e,n])=>new F(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}async isEnabled(){return d("plugin:menu|is_enabled",{rid:this.rid,kind:this.kind})}async setEnabled(e){return d("plugin:menu|set_enabled",{rid:this.rid,kind:this.kind,enabled:e})}async setAccelerator(e){return d("plugin:menu|set_accelerator",{rid:this.rid,kind:this.kind,accelerator:e})}}class M extends O{constructor(e,n){super(e,n,"Check")}static async new(e){return W("Check",e).then((([e,n])=>new M(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}async isEnabled(){return d("plugin:menu|is_enabled",{rid:this.rid,kind:this.kind})}async setEnabled(e){return d("plugin:menu|set_enabled",{rid:this.rid,kind:this.kind,enabled:e})}async setAccelerator(e){return d("plugin:menu|set_accelerator",{rid:this.rid,kind:this.kind,accelerator:e})}async isChecked(){return d("plugin:menu|is_checked",{rid:this.rid})}async setChecked(e){return d("plugin:menu|set_checked",{rid:this.rid,checked:e})}}!function(e){e.Add="Add",e.Advanced="Advanced",e.Bluetooth="Bluetooth",e.Bookmarks="Bookmarks",e.Caution="Caution",e.ColorPanel="ColorPanel",e.ColumnView="ColumnView",e.Computer="Computer",e.EnterFullScreen="EnterFullScreen",e.Everyone="Everyone",e.ExitFullScreen="ExitFullScreen",e.FlowView="FlowView",e.Folder="Folder",e.FolderBurnable="FolderBurnable",e.FolderSmart="FolderSmart",e.FollowLinkFreestanding="FollowLinkFreestanding",e.FontPanel="FontPanel",e.GoLeft="GoLeft",e.GoRight="GoRight",e.Home="Home",e.IChatTheater="IChatTheater",e.IconView="IconView",e.Info="Info",e.InvalidDataFreestanding="InvalidDataFreestanding",e.LeftFacingTriangle="LeftFacingTriangle",e.ListView="ListView",e.LockLocked="LockLocked",e.LockUnlocked="LockUnlocked",e.MenuMixedState="MenuMixedState",e.MenuOnState="MenuOnState",e.MobileMe="MobileMe",e.MultipleDocuments="MultipleDocuments",e.Network="Network",e.Path="Path",e.PreferencesGeneral="PreferencesGeneral",e.QuickLook="QuickLook",e.RefreshFreestanding="RefreshFreestanding",e.Refresh="Refresh",e.Remove="Remove",e.RevealFreestanding="RevealFreestanding",e.RightFacingTriangle="RightFacingTriangle",e.Share="Share",e.Slideshow="Slideshow",e.SmartBadge="SmartBadge",e.StatusAvailable="StatusAvailable",e.StatusNone="StatusNone",e.StatusPartiallyAvailable="StatusPartiallyAvailable",e.StatusUnavailable="StatusUnavailable",e.StopProgressFreestanding="StopProgressFreestanding",e.StopProgress="StopProgress",e.TrashEmpty="TrashEmpty",e.TrashFull="TrashFull",e.User="User",e.UserAccounts="UserAccounts",e.UserGroup="UserGroup",e.UserGuest="UserGuest"}(N||(N={}));class U extends O{constructor(e,n){super(e,n,"Icon")}static async new(e){return W("Icon",e).then((([e,n])=>new U(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}async isEnabled(){return d("plugin:menu|is_enabled",{rid:this.rid,kind:this.kind})}async setEnabled(e){return d("plugin:menu|set_enabled",{rid:this.rid,kind:this.kind,enabled:e})}async setAccelerator(e){return d("plugin:menu|set_accelerator",{rid:this.rid,kind:this.kind,accelerator:e})}async setIcon(e){return d("plugin:menu|set_icon",{rid:this.rid,icon:y(e)})}}class B extends O{constructor(e,n){super(e,n,"Predefined")}static async new(e){return W("Predefined",e).then((([e,n])=>new B(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}}function j([e,n,t]){switch(t){case"Submenu":return new V(e,n);case"Predefined":return new B(e,n);case"Check":return new M(e,n);case"Icon":return new U(e,n);default:return new F(e,n)}}class V extends O{constructor(e,n){super(e,n,"Submenu")}static async new(e){return W("Submenu",e).then((([e,n])=>new V(e,n)))}async text(){return d("plugin:menu|text",{rid:this.rid,kind:this.kind})}async setText(e){return d("plugin:menu|set_text",{rid:this.rid,kind:this.kind,text:e})}async isEnabled(){return d("plugin:menu|is_enabled",{rid:this.rid,kind:this.kind})}async setEnabled(e){return d("plugin:menu|set_enabled",{rid:this.rid,kind:this.kind,enabled:e})}async append(e){return d("plugin:menu|append",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e))})}async prepend(e){return d("plugin:menu|prepend",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e))})}async insert(e,n){return d("plugin:menu|insert",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e)),position:n})}async remove(e){return d("plugin:menu|remove",{rid:this.rid,kind:this.kind,item:[e.rid,e.kind]})}async removeAt(e){return d("plugin:menu|remove_at",{rid:this.rid,kind:this.kind,position:e}).then(j)}async items(){return d("plugin:menu|items",{rid:this.rid,kind:this.kind}).then((e=>e.map(j)))}async get(e){return d("plugin:menu|get",{rid:this.rid,kind:this.kind,id:e}).then((e=>e?j(e):null))}async popup(e,n){var t;return d("plugin:menu|popup",{rid:this.rid,kind:this.kind,window:null!==(t=null==n?void 0:n.label)&&void 0!==t?t:null,at:e instanceof A?e:e?new A(e):null})}async setAsWindowsMenuForNSApp(){return d("plugin:menu|set_as_windows_menu_for_nsapp",{rid:this.rid})}async setAsHelpMenuForNSApp(){return d("plugin:menu|set_as_help_menu_for_nsapp",{rid:this.rid})}}class G extends O{constructor(e,n){super(e,n,"Menu")}static async new(e){return W("Menu",e).then((([e,n])=>new G(e,n)))}static async default(){return d("plugin:menu|create_default").then((([e,n])=>new G(e,n)))}async append(e){return d("plugin:menu|append",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e))})}async prepend(e){return d("plugin:menu|prepend",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e))})}async insert(e,n){return d("plugin:menu|insert",{rid:this.rid,kind:this.kind,items:(Array.isArray(e)?e:[e]).map((e=>"rid"in e?[e.rid,e.kind]:e)),position:n})}async remove(e){return d("plugin:menu|remove",{rid:this.rid,kind:this.kind,item:[e.rid,e.kind]})}async removeAt(e){return d("plugin:menu|remove_at",{rid:this.rid,kind:this.kind,position:e}).then(j)}async items(){return d("plugin:menu|items",{rid:this.rid,kind:this.kind}).then((e=>e.map(j)))}async get(e){return d("plugin:menu|get",{rid:this.rid,kind:this.kind,id:e}).then((e=>e?j(e):null))}async popup(e,n){var t;return d("plugin:menu|popup",{rid:this.rid,kind:this.kind,window:null!==(t=null==n?void 0:n.label)&&void 0!==t?t:null,at:e instanceof A?e:e?new A(e):null})}async setAsAppMenu(){return d("plugin:menu|set_as_app_menu",{rid:this.rid}).then((e=>e?new G(e[0],e[1]):null))}async setAsWindowMenu(e){var n;return d("plugin:menu|set_as_window_menu",{rid:this.rid,window:null!==(n=null==e?void 0:e.label)&&void 0!==n?n:null}).then((e=>e?new G(e[0],e[1]):null))}}var H=Object.freeze({__proto__:null,CheckMenuItem:M,IconMenuItem:U,Menu:G,MenuItem:F,get NativeIcon(){return N},PredefinedMenuItem:B,Submenu:V,itemFromKind:j});function $(){var e;window.__TAURI_INTERNALS__=null!==(e=window.__TAURI_INTERNALS__)&&void 0!==e?e:{}}var q,J=Object.freeze({__proto__:null,clearMocks:function(){var e,n,t;"object"==typeof window.__TAURI_INTERNALS__&&((null===(e=window.__TAURI_INTERNALS__)||void 0===e?void 0:e.convertFileSrc)&&delete window.__TAURI_INTERNALS__.convertFileSrc,(null===(n=window.__TAURI_INTERNALS__)||void 0===n?void 0:n.invoke)&&delete window.__TAURI_INTERNALS__.invoke,(null===(t=window.__TAURI_INTERNALS__)||void 0===t?void 0:t.metadata)&&delete window.__TAURI_INTERNALS__.metadata)},mockConvertFileSrc:function(e){$(),window.__TAURI_INTERNALS__.convertFileSrc=function(n,t="asset"){const i=encodeURIComponent(n);return"windows"===e?`http://${t}.localhost/${i}`:`${t}://localhost/${i}`}},mockIPC:function(e){$(),window.__TAURI_INTERNALS__.transformCallback=function(e,n=!1){const t=window.crypto.getRandomValues(new Uint32Array(1))[0],i=`_${t}`;return Object.defineProperty(window,i,{value:t=>(n&&Reflect.deleteProperty(window,i),e&&e(t)),writable:!1,configurable:!0}),t},window.__TAURI_INTERNALS__.invoke=async function(n,t,i){return e(n,t)}},mockWindows:function(e,...n){$(),window.__TAURI_INTERNALS__.metadata={currentWindow:{label:e},currentWebview:{windowLabel:e,label:e}}}});!function(e){e[e.Audio=1]="Audio",e[e.Cache=2]="Cache",e[e.Config=3]="Config",e[e.Data=4]="Data",e[e.LocalData=5]="LocalData",e[e.Document=6]="Document",e[e.Download=7]="Download",e[e.Picture=8]="Picture",e[e.Public=9]="Public",e[e.Video=10]="Video",e[e.Resource=11]="Resource",e[e.Temp=12]="Temp",e[e.AppConfig=13]="AppConfig",e[e.AppData=14]="AppData",e[e.AppLocalData=15]="AppLocalData",e[e.AppCache=16]="AppCache",e[e.AppLog=17]="AppLog",e[e.Desktop=18]="Desktop",e[e.Executable=19]="Executable",e[e.Font=20]="Font",e[e.Home=21]="Home",e[e.Runtime=22]="Runtime",e[e.Template=23]="Template"}(q||(q={}));var Q=Object.freeze({__proto__:null,get BaseDirectory(){return q},appCacheDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppCache})},appConfigDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppConfig})},appDataDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppData})},appLocalDataDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppLocalData})},appLogDir:async function(){return d("plugin:path|resolve_directory",{directory:q.AppLog})},audioDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Audio})},basename:async function(e,n){return d("plugin:path|basename",{path:e,ext:n})},cacheDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Cache})},configDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Config})},dataDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Data})},delimiter:function(){return window.__TAURI_INTERNALS__.plugins.path.delimiter},desktopDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Desktop})},dirname:async function(e){return d("plugin:path|dirname",{path:e})},documentDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Document})},downloadDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Download})},executableDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Executable})},extname:async function(e){return d("plugin:path|extname",{path:e})},fontDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Font})},homeDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Home})},isAbsolute:async function(e){return d("plugin:path|is_absolute",{path:e})},join:async function(...e){return d("plugin:path|join",{paths:e})},localDataDir:async function(){return d("plugin:path|resolve_directory",{directory:q.LocalData})},normalize:async function(e){return d("plugin:path|normalize",{path:e})},pictureDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Picture})},publicDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Public})},resolve:async function(...e){return d("plugin:path|resolve",{paths:e})},resolveResource:async function(e){return d("plugin:path|resolve_directory",{directory:q.Resource,path:e})},resourceDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Resource})},runtimeDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Runtime})},sep:function(){return window.__TAURI_INTERNALS__.plugins.path.sep},tempDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Temp})},templateDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Template})},videoDir:async function(){return d("plugin:path|resolve_directory",{directory:q.Video})}});class Z extends h{constructor(e,n){super(e),this.id=n}static async getById(e){return d("plugin:tray|get_by_id",{id:e}).then((n=>n?new Z(n,e):null))}static async removeById(e){return d("plugin:tray|remove_by_id",{id:e})}static async new(e){(null==e?void 0:e.menu)&&(e.menu=[e.menu.rid,e.menu.kind]),(null==e?void 0:e.icon)&&(e.icon=y(e.icon));const n=new u;if(null==e?void 0:e.action){const t=e.action;n.onmessage=e=>t(function(e){const n=e;return n.position=new k(e.position),n.rect.position=new k(e.rect.position),n.rect.size=new m(e.rect.size),n}(e)),delete e.action}return d("plugin:tray|new",{options:null!=e?e:{},handler:n}).then((([e,n])=>new Z(e,n)))}async setIcon(e){let n=null;return e&&(n=y(e)),d("plugin:tray|set_icon",{rid:this.rid,icon:n})}async setMenu(e){return e&&(e=[e.rid,e.kind]),d("plugin:tray|set_menu",{rid:this.rid,menu:e})}async setTooltip(e){return d("plugin:tray|set_tooltip",{rid:this.rid,tooltip:e})}async setTitle(e){return d("plugin:tray|set_title",{rid:this.rid,title:e})}async setVisible(e){return d("plugin:tray|set_visible",{rid:this.rid,visible:e})}async setTempDirPath(e){return d("plugin:tray|set_temp_dir_path",{rid:this.rid,path:e})}async setIconAsTemplate(e){return d("plugin:tray|set_icon_as_template",{rid:this.rid,asTemplate:e})}async setMenuOnLeftClick(e){return d("plugin:tray|set_show_menu_on_left_click",{rid:this.rid,onLeft:e})}async setShowMenuOnLeftClick(e){return d("plugin:tray|set_show_menu_on_left_click",{rid:this.rid,onLeft:e})}}var K,Y,X=Object.freeze({__proto__:null,TrayIcon:Z});!function(e){e[e.Critical=1]="Critical",e[e.Informational=2]="Informational"}(K||(K={}));class ee{constructor(e){this._preventDefault=!1,this.event=e.event,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}function ne(){return new re(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function te(){return d("plugin:window|get_all_windows").then((e=>e.map((e=>new re(e,{skip:!0})))))}!function(e){e.None="none",e.Normal="normal",e.Indeterminate="indeterminate",e.Paused="paused",e.Error="error"}(Y||(Y={}));const ie=["tauri://created","tauri://error"];class re{constructor(e,n={}){var t;this.label=e,this.listeners=Object.create(null),(null==n?void 0:n.skip)||d("plugin:window|create",{options:{...n,parent:"string"==typeof n.parent?n.parent:null===(t=n.parent)||void 0===t?void 0:t.label,label:e}}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static async getByLabel(e){var n;return null!==(n=(await te()).find((n=>n.label===e)))&&void 0!==n?n:null}static getCurrent(){return ne()}static async getAll(){return te()}static async getFocusedWindow(){for(const e of await te())if(await e.isFocused())return e;return null}async listen(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:I(e,n,{target:{kind:"Window",label:this.label}})}async once(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:R(e,n,{target:{kind:"Window",label:this.label}})}async emit(e,n){if(!ie.includes(e))return S(e,n);for(const t of this.listeners[e]||[])t({event:e,id:-1,payload:n})}async emitTo(e,n,t){if(!ie.includes(n))return L(e,n,t);for(const e of this.listeners[n]||[])e({event:n,id:-1,payload:t})}_handleTauriEvent(e,n){return!!ie.includes(e)&&(e in this.listeners?this.listeners[e].push(n):this.listeners[e]=[n],!0)}async scaleFactor(){return d("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return d("plugin:window|inner_position",{label:this.label}).then((e=>new k(e)))}async outerPosition(){return d("plugin:window|outer_position",{label:this.label}).then((e=>new k(e)))}async innerSize(){return d("plugin:window|inner_size",{label:this.label}).then((e=>new m(e)))}async outerSize(){return d("plugin:window|outer_size",{label:this.label}).then((e=>new m(e)))}async isFullscreen(){return d("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return d("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return d("plugin:window|is_maximized",{label:this.label})}async isFocused(){return d("plugin:window|is_focused",{label:this.label})}async isDecorated(){return d("plugin:window|is_decorated",{label:this.label})}async isResizable(){return d("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return d("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return d("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return d("plugin:window|is_closable",{label:this.label})}async isVisible(){return d("plugin:window|is_visible",{label:this.label})}async title(){return d("plugin:window|title",{label:this.label})}async theme(){return d("plugin:window|theme",{label:this.label})}async center(){return d("plugin:window|center",{label:this.label})}async requestUserAttention(e){let n=null;return e&&(n=e===K.Critical?{type:"Critical"}:{type:"Informational"}),d("plugin:window|request_user_attention",{label:this.label,value:n})}async setResizable(e){return d("plugin:window|set_resizable",{label:this.label,value:e})}async setEnabled(e){return d("plugin:window|set_enabled",{label:this.label,value:e})}async isEnabled(){return d("plugin:window|is_enabled",{label:this.label})}async setMaximizable(e){return d("plugin:window|set_maximizable",{label:this.label,value:e})}async setMinimizable(e){return d("plugin:window|set_minimizable",{label:this.label,value:e})}async setClosable(e){return d("plugin:window|set_closable",{label:this.label,value:e})}async setTitle(e){return d("plugin:window|set_title",{label:this.label,value:e})}async maximize(){return d("plugin:window|maximize",{label:this.label})}async unmaximize(){return d("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return d("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return d("plugin:window|minimize",{label:this.label})}async unminimize(){return d("plugin:window|unminimize",{label:this.label})}async show(){return d("plugin:window|show",{label:this.label})}async hide(){return d("plugin:window|hide",{label:this.label})}async close(){return d("plugin:window|close",{label:this.label})}async destroy(){return d("plugin:window|destroy",{label:this.label})}async setDecorations(e){return d("plugin:window|set_decorations",{label:this.label,value:e})}async setShadow(e){return d("plugin:window|set_shadow",{label:this.label,value:e})}async setEffects(e){return d("plugin:window|set_effects",{label:this.label,value:e})}async clearEffects(){return d("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(e){return d("plugin:window|set_always_on_top",{label:this.label,value:e})}async setAlwaysOnBottom(e){return d("plugin:window|set_always_on_bottom",{label:this.label,value:e})}async setContentProtected(e){return d("plugin:window|set_content_protected",{label:this.label,value:e})}async setSize(e){return d("plugin:window|set_size",{label:this.label,value:e instanceof v?e:new v(e)})}async setMinSize(e){return d("plugin:window|set_min_size",{label:this.label,value:e instanceof v?e:e?new v(e):null})}async setMaxSize(e){return d("plugin:window|set_max_size",{label:this.label,value:e instanceof v?e:e?new v(e):null})}async setSizeConstraints(e){function n(e){return e?{Logical:e}:null}return d("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:n(null==e?void 0:e.minWidth),minHeight:n(null==e?void 0:e.minHeight),maxWidth:n(null==e?void 0:e.maxWidth),maxHeight:n(null==e?void 0:e.maxHeight)}})}async setPosition(e){return d("plugin:window|set_position",{label:this.label,value:e instanceof A?e:new A(e)})}async setFullscreen(e){return d("plugin:window|set_fullscreen",{label:this.label,value:e})}async setFocus(){return d("plugin:window|set_focus",{label:this.label})}async setIcon(e){return d("plugin:window|set_icon",{label:this.label,value:y(e)})}async setSkipTaskbar(e){return d("plugin:window|set_skip_taskbar",{label:this.label,value:e})}async setCursorGrab(e){return d("plugin:window|set_cursor_grab",{label:this.label,value:e})}async setCursorVisible(e){return d("plugin:window|set_cursor_visible",{label:this.label,value:e})}async setCursorIcon(e){return d("plugin:window|set_cursor_icon",{label:this.label,value:e})}async setBackgroundColor(e){return d("plugin:window|set_background_color",{color:e})}async setCursorPosition(e){return d("plugin:window|set_cursor_position",{label:this.label,value:e instanceof A?e:new A(e)})}async setIgnoreCursorEvents(e){return d("plugin:window|set_ignore_cursor_events",{label:this.label,value:e})}async startDragging(){return d("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(e){return d("plugin:window|start_resize_dragging",{label:this.label,value:e})}async setBadgeCount(e){return d("plugin:window|set_badge_count",{label:this.label,value:e})}async setBadgeLabel(e){return d("plugin:window|set_badge_label",{label:this.label,value:e})}async setOverlayIcon(e){return d("plugin:window|set_overlay_icon",{label:this.label,value:e?y(e):void 0})}async setProgressBar(e){return d("plugin:window|set_progress_bar",{label:this.label,value:e})}async setVisibleOnAllWorkspaces(e){return d("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:e})}async setTitleBarStyle(e){return d("plugin:window|set_title_bar_style",{label:this.label,value:e})}async setTheme(e){return d("plugin:window|set_theme",{label:this.label,value:e})}async onResized(e){return this.listen(E.WINDOW_RESIZED,(n=>{n.payload=new m(n.payload),e(n)}))}async onMoved(e){return this.listen(E.WINDOW_MOVED,(n=>{n.payload=new k(n.payload),e(n)}))}async onCloseRequested(e){return this.listen(E.WINDOW_CLOSE_REQUESTED,(async n=>{const t=new ee(n);await e(t),t.isPreventDefault()||await this.destroy()}))}async onDragDropEvent(e){const n=await this.listen(E.DRAG_ENTER,(n=>{e({...n,payload:{type:"enter",paths:n.payload.paths,position:new k(n.payload.position)}})})),t=await this.listen(E.DRAG_OVER,(n=>{e({...n,payload:{type:"over",position:new k(n.payload.position)}})})),i=await this.listen(E.DRAG_DROP,(n=>{e({...n,payload:{type:"drop",paths:n.payload.paths,position:new k(n.payload.position)}})})),r=await this.listen(E.DRAG_LEAVE,(n=>{e({...n,payload:{type:"leave"}})}));return()=>{n(),i(),t(),r()}}async onFocusChanged(e){const n=await this.listen(E.WINDOW_FOCUS,(n=>{e({...n,payload:!0})})),t=await this.listen(E.WINDOW_BLUR,(n=>{e({...n,payload:!1})}));return()=>{n(),t()}}async onScaleChanged(e){return this.listen(E.WINDOW_SCALE_FACTOR_CHANGED,e)}async onThemeChanged(e){return this.listen(E.WINDOW_THEME_CHANGED,e)}}var se,ae;function le(e){return null===e?null:{name:e.name,scaleFactor:e.scaleFactor,position:new k(e.position),size:new m(e.size)}}!function(e){e.AppearanceBased="appearanceBased",e.Light="light",e.Dark="dark",e.MediumLight="mediumLight",e.UltraDark="ultraDark",e.Titlebar="titlebar",e.Selection="selection",e.Menu="menu",e.Popover="popover",e.Sidebar="sidebar",e.HeaderView="headerView",e.Sheet="sheet",e.WindowBackground="windowBackground",e.HudWindow="hudWindow",e.FullScreenUI="fullScreenUI",e.Tooltip="tooltip",e.ContentBackground="contentBackground",e.UnderWindowBackground="underWindowBackground",e.UnderPageBackground="underPageBackground",e.Mica="mica",e.Blur="blur",e.Acrylic="acrylic",e.Tabbed="tabbed",e.TabbedDark="tabbedDark",e.TabbedLight="tabbedLight"}(se||(se={})),function(e){e.FollowsWindowActiveState="followsWindowActiveState",e.Active="active",e.Inactive="inactive"}(ae||(ae={}));var oe=Object.freeze({__proto__:null,CloseRequestedEvent:ee,get Effect(){return se},get EffectState(){return ae},LogicalPosition:f,LogicalSize:b,PhysicalPosition:k,PhysicalSize:m,get ProgressBarStatus(){return Y},get UserAttentionType(){return K},Window:re,availableMonitors:async function(){return d("plugin:window|available_monitors").then((e=>e.map(le)))},currentMonitor:async function(){return d("plugin:window|current_monitor").then(le)},cursorPosition:async function(){return d("plugin:window|cursor_position").then((e=>new k(e)))},getAllWindows:te,getCurrentWindow:ne,monitorFromPoint:async function(e,n){return d("plugin:window|monitor_from_point",{x:e,y:n}).then(le)},primaryMonitor:async function(){return d("plugin:window|primary_monitor").then(le)}});function ue(){return new he(ne(),window.__TAURI_INTERNALS__.metadata.currentWebview.label,{skip:!0})}async function ce(){return d("plugin:webview|get_all_webviews").then((e=>e.map((e=>new he(new re(e.windowLabel,{skip:!0}),e.label,{skip:!0})))))}const de=["tauri://created","tauri://error"];class he{constructor(e,n,t){this.window=e,this.label=n,this.listeners=Object.create(null),(null==t?void 0:t.skip)||d("plugin:webview|create_webview",{windowLabel:e.label,label:n,options:t}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static async getByLabel(e){var n;return null!==(n=(await ce()).find((n=>n.label===e)))&&void 0!==n?n:null}static getCurrent(){return ue()}static async getAll(){return ce()}async listen(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:I(e,n,{target:{kind:"Webview",label:this.label}})}async once(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:R(e,n,{target:{kind:"Webview",label:this.label}})}async emit(e,n){if(!de.includes(e))return S(e,n);for(const t of this.listeners[e]||[])t({event:e,id:-1,payload:n})}async emitTo(e,n,t){if(!de.includes(n))return L(e,n,t);for(const e of this.listeners[n]||[])e({event:n,id:-1,payload:t})}_handleTauriEvent(e,n){return!!de.includes(e)&&(e in this.listeners?this.listeners[e].push(n):this.listeners[e]=[n],!0)}async position(){return d("plugin:webview|webview_position",{label:this.label}).then((e=>new k(e)))}async size(){return d("plugin:webview|webview_size",{label:this.label}).then((e=>new m(e)))}async close(){return d("plugin:webview|close",{label:this.label})}async setSize(e){return d("plugin:webview|set_webview_size",{label:this.label,value:e instanceof v?e:new v(e)})}async setPosition(e){return d("plugin:webview|set_webview_position",{label:this.label,value:e instanceof A?e:new A(e)})}async setFocus(){return d("plugin:webview|set_webview_focus",{label:this.label})}async hide(){return d("plugin:webview|webview_hide",{label:this.label})}async show(){return d("plugin:webview|webview_show",{label:this.label})}async setZoom(e){return d("plugin:webview|set_webview_zoom",{label:this.label,value:e})}async reparent(e){return d("plugin:webview|reparent",{label:this.label,window:"string"==typeof e?e:e.label})}async clearAllBrowsingData(){return d("plugin:webview|clear_all_browsing_data")}async setBackgroundColor(e){return d("plugin:webview|set_webview_background_color",{color:e})}async onDragDropEvent(e){const n=await this.listen(E.DRAG_ENTER,(n=>{e({...n,payload:{type:"enter",paths:n.payload.paths,position:new k(n.payload.position)}})})),t=await this.listen(E.DRAG_OVER,(n=>{e({...n,payload:{type:"over",position:new k(n.payload.position)}})})),i=await this.listen(E.DRAG_DROP,(n=>{e({...n,payload:{type:"drop",paths:n.payload.paths,position:new k(n.payload.position)}})})),r=await this.listen(E.DRAG_LEAVE,(n=>{e({...n,payload:{type:"leave"}})}));return()=>{n(),i(),t(),r()}}}var pe,we,ye=Object.freeze({__proto__:null,Webview:he,getAllWebviews:ce,getCurrentWebview:ue});function _e(){const e=ue();return new be(e.label,{skip:!0})}async function ge(){return d("plugin:window|get_all_windows").then((e=>e.map((e=>new be(e,{skip:!0})))))}class be{constructor(e,n={}){var t;this.label=e,this.listeners=Object.create(null),(null==n?void 0:n.skip)||d("plugin:webview|create_webview_window",{options:{...n,parent:"string"==typeof n.parent?n.parent:null===(t=n.parent)||void 0===t?void 0:t.label,label:e}}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static async getByLabel(e){var n;const t=null!==(n=(await ge()).find((n=>n.label===e)))&&void 0!==n?n:null;return t?new be(t.label,{skip:!0}):null}static getCurrent(){return _e()}static async getAll(){return ge()}async listen(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:I(e,n,{target:{kind:"WebviewWindow",label:this.label}})}async once(e,n){return this._handleTauriEvent(e,n)?()=>{const t=this.listeners[e];t.splice(t.indexOf(n),1)}:R(e,n,{target:{kind:"WebviewWindow",label:this.label}})}async setBackgroundColor(e){return d("plugin:window|set_background_color",{color:e}).then((()=>d("plugin:webview|set_webview_background_color",{color:e})))}}pe=be,we=[re,he],(Array.isArray(we)?we:[we]).forEach((e=>{Object.getOwnPropertyNames(e.prototype).forEach((n=>{var t;"object"==typeof pe.prototype&&pe.prototype&&n in pe.prototype||Object.defineProperty(pe.prototype,n,null!==(t=Object.getOwnPropertyDescriptor(e.prototype,n))&&void 0!==t?t:Object.create(null))}))}));var me=Object.freeze({__proto__:null,WebviewWindow:be,getAllWebviewWindows:ge,getCurrentWebviewWindow:_e});return e.app=g,e.core=p,e.dpi=T,e.event=P,e.image=_,e.menu=H,e.mocks=J,e.path=Q,e.tray=X,e.webview=ye,e.webviewWindow=me,e.window=oe,e}({});window.__TAURI__=__TAURI_IIFE__; diff --git a/crates/tauri/src/resources/mod.rs b/crates/tauri/src/resources/mod.rs index 2c7fa018227f..72498503c730 100644 --- a/crates/tauri/src/resources/mod.rs +++ b/crates/tauri/src/resources/mod.rs @@ -111,7 +111,11 @@ impl ResourceTable { /// /// Returns a unique resource ID, which acts as a key for this resource. pub fn add_arc_dyn(&mut self, resource: Arc) -> ResourceId { - let rid = Self::new_random_rid(); + let mut rid = Self::new_random_rid(); + while self.index.contains_key(&rid) { + rid = Self::new_random_rid(); + } + let removed_resource = self.index.insert(rid, resource); assert!(removed_resource.is_none()); rid diff --git a/crates/tauri/src/state.rs b/crates/tauri/src/state.rs index 8175e62c7272..2f1092e6ce02 100644 --- a/crates/tauri/src/state.rs +++ b/crates/tauri/src/state.rs @@ -60,12 +60,12 @@ impl std::fmt::Debug for State<'_, T> { impl<'r, 'de: 'r, T: Send + Sync + 'static, R: Runtime> CommandArg<'de, R> for State<'r, T> { /// Grabs the [`State`] from the [`CommandItem`]. This will never fail. fn from_command(command: CommandItem<'de, R>) -> Result { - Ok(command.message.state_ref().try_get().unwrap_or_else(|| { - panic!( + command.message.state_ref().try_get().ok_or_else(|| { + InvokeError::from_anyhow(anyhow::anyhow!( "state not managed for field `{}` on command `{}`. You must call `.manage()` before using this command", command.key, command.name - ) - })) + )) + }) } } diff --git a/crates/tauri/src/webview/mod.rs b/crates/tauri/src/webview/mod.rs index fbbb539b9aea..cd27e2eb259a 100644 --- a/crates/tauri/src/webview/mod.rs +++ b/crates/tauri/src/webview/mod.rs @@ -1185,6 +1185,9 @@ impl Webview { /// /// The closure is executed on the main thread. /// + /// Note that `webview2-com`, `webkit2gtk`, `objc2_web_kit` and similar crates may be updated in minor releases of Tauri. + /// Therefore it's recommended to pin Tauri to at least a minor version when you're using `with_webview`. + /// /// # Examples /// #[cfg_attr( diff --git a/crates/tauri/src/webview/webview_window.rs b/crates/tauri/src/webview/webview_window.rs index b19e049dcc77..765a304bd6fe 100644 --- a/crates/tauri/src/webview/webview_window.rs +++ b/crates/tauri/src/webview/webview_window.rs @@ -1820,6 +1820,9 @@ impl WebviewWindow { /// /// The closure is executed on the main thread. /// + /// Note that `webview2-com`, `webkit2gtk`, `objc2_web_kit` and similar crates may be updated in minor releases of Tauri. + /// Therefore it's recommended to pin Tauri to at least a minor version when you're using `with_webview`. + /// /// # Examples /// /// ```rust,no_run diff --git a/examples/api/package.json b/examples/api/package.json index 17d4a7382721..1d0304c7daa1 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -13,12 +13,12 @@ "@tauri-apps/api": "../../packages/api/dist" }, "devDependencies": { - "@iconify-json/codicon": "^1.2.6", - "@iconify-json/ph": "^1.2.1", - "@sveltejs/vite-plugin-svelte": "5.0.1", - "@unocss/extractor-svelte": "0.65.1", - "svelte": "5.10.1", - "unocss": "0.65.1", - "vite": "6.0.3" + "@iconify-json/codicon": "^1.2.8", + "@iconify-json/ph": "^1.2.2", + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@unocss/extractor-svelte": "^0.65.3", + "svelte": "^5.16.1", + "unocss": "^0.65.3", + "vite": "^6.0.7" } } diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index a0d8fadc7482..2e6243190f87 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -17,12 +17,12 @@ tauri-build = { path = "../../../crates/tauri-build", features = [ ] } [dependencies] -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } +serde_json = "1" +serde = { version = "1", features = ["derive"] } tiny_http = "0.11" -log = "0.4" +log = "0.4.21" tauri-plugin-sample = { path = "./tauri-plugin-sample/" } -tauri-plugin-log = "2.0.0-rc" +tauri-plugin-log = "2" [dependencies.tauri] path = "../../../crates/tauri" diff --git a/examples/api/src-tauri/build.rs b/examples/api/src-tauri/build.rs index b874ad414257..1913c89218e3 100644 --- a/examples/api/src-tauri/build.rs +++ b/examples/api/src-tauri/build.rs @@ -17,6 +17,7 @@ fn main() { "log_operation", "perform_request", "echo", + "spam", ])), ) .expect("failed to run tauri-build"); diff --git a/examples/api/src-tauri/capabilities/run-app.json b/examples/api/src-tauri/capabilities/run-app.json index 7a93931b52a2..812f377ea7da 100644 --- a/examples/api/src-tauri/capabilities/run-app.json +++ b/examples/api/src-tauri/capabilities/run-app.json @@ -16,6 +16,7 @@ }, "allow-perform-request", "allow-echo", + "allow-spam", "app-menu:default", "sample:allow-ping-scoped", "sample:global-scope", diff --git a/examples/api/src-tauri/permissions/autogenerated/spam.toml b/examples/api/src-tauri/permissions/autogenerated/spam.toml new file mode 100644 index 000000000000..dfa659eb147f --- /dev/null +++ b/examples/api/src-tauri/permissions/autogenerated/spam.toml @@ -0,0 +1,11 @@ +# Automatically generated - DO NOT EDIT! + +[[permission]] +identifier = "allow-spam" +description = "Enables the spam command without any pre-configured scope." +commands.allow = ["spam"] + +[[permission]] +identifier = "deny-spam" +description = "Denies the spam command without any pre-configured scope." +commands.deny = ["spam"] diff --git a/examples/api/src-tauri/src/cmd.rs b/examples/api/src-tauri/src/cmd.rs index 80ae03d106d4..2db3c3896148 100644 --- a/examples/api/src-tauri/src/cmd.rs +++ b/examples/api/src-tauri/src/cmd.rs @@ -3,7 +3,10 @@ // SPDX-License-Identifier: MIT use serde::{Deserialize, Serialize}; -use tauri::{command, ipc::CommandScope}; +use tauri::{ + command, + ipc::{Channel, CommandScope}, +}; #[derive(Debug, Deserialize)] #[allow(unused)] @@ -28,7 +31,7 @@ pub fn log_operation( } else if !command_scope.allows().iter().any(|s| s.event == event) { Err("not allowed") } else { - log::info!("{} {:?}", event, payload); + log::info!("{event} {payload:?}"); Ok(()) } } @@ -40,7 +43,7 @@ pub struct ApiResponse { #[command] pub fn perform_request(endpoint: String, body: RequestBody) -> ApiResponse { - println!("{} {:?}", endpoint, body); + println!("{endpoint} {body:?}"); ApiResponse { message: "message response".into(), } @@ -50,3 +53,11 @@ pub fn perform_request(endpoint: String, body: RequestBody) -> ApiResponse { pub fn echo(request: tauri::ipc::Request<'_>) -> tauri::ipc::Response { tauri::ipc::Response::new(request.body().clone()) } + +#[command] +pub fn spam(channel: Channel) -> tauri::Result<()> { + for i in 1..=1_000 { + channel.send(i)?; + } + Ok(()) +} diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index 512f43c0aac0..e7e9891d9149 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -145,7 +145,8 @@ pub fn run_app) + Send + 'static>( .invoke_handler(tauri::generate_handler![ cmd::log_operation, cmd::perform_request, - cmd::echo + cmd::echo, + cmd::spam, ]) .build(tauri::tauri_build_context!()) .expect("error while building tauri application"); diff --git a/examples/api/src/views/Communication.svelte b/examples/api/src/views/Communication.svelte index cdee98ad4125..e12ee91a6c8e 100644 --- a/examples/api/src/views/Communication.svelte +++ b/examples/api/src/views/Communication.svelte @@ -1,6 +1,6 @@