From e01852f29208b1aba1db71b94109d1b007d3c880 Mon Sep 17 00:00:00 2001 From: Renamr Scaffold Date: Sat, 29 Aug 2026 01:43:12 +0000 Subject: [PATCH] Initial Renamr scaffold: Tauri (Rust core + React/TS UI), naming-expression engine ported+tested --- .gitignore | 7 + Cargo.lock | 4672 +++++++++++++++++ Cargo.toml | 8 + README.md | 113 + crates/renamr-core/Cargo.toml | 18 + crates/renamr-core/src/format/engine.rs | 16 + crates/renamr-core/src/format/expression.rs | 171 + crates/renamr-core/src/format/functions.rs | 52 + crates/renamr-core/src/format/mod.rs | 18 + crates/renamr-core/src/lib.rs | 25 + crates/renamr-core/tests/expression_format.rs | 66 + index.html | 12 + package-lock.json | 1979 +++++++ package.json | 25 + scripts/gen_icons.py | 65 + src-tauri/Cargo.toml | 18 + src-tauri/build.rs | 3 + src-tauri/icons/1024x1024.png | Bin 0 -> 17783 bytes src-tauri/icons/128x128.png | Bin 0 -> 4583 bytes src-tauri/icons/128x128@2x.png | Bin 0 -> 9256 bytes src-tauri/icons/256x256.png | Bin 0 -> 9256 bytes src-tauri/icons/32x32.png | Bin 0 -> 1124 bytes src-tauri/icons/512x512.png | Bin 0 -> 19034 bytes src-tauri/icons/icon-master.png | Bin 0 -> 17783 bytes src-tauri/icons/icon.icns | Bin 0 -> 67618 bytes src-tauri/icons/icon.ico | Bin 0 -> 20705 bytes src-tauri/src/lib.rs | 22 + src-tauri/src/main.rs | 6 + src-tauri/tauri.conf.json | 37 + src/App.tsx | 65 + src/main.tsx | 10 + src/styles.css | 86 + tsconfig.json | 19 + vite.config.ts | 17 + 34 files changed, 7530 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 crates/renamr-core/Cargo.toml create mode 100644 crates/renamr-core/src/format/engine.rs create mode 100644 crates/renamr-core/src/format/expression.rs create mode 100644 crates/renamr-core/src/format/functions.rs create mode 100644 crates/renamr-core/src/format/mod.rs create mode 100644 crates/renamr-core/src/lib.rs create mode 100644 crates/renamr-core/tests/expression_format.rs create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 scripts/gen_icons.py create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/icons/1024x1024.png create mode 100644 src-tauri/icons/128x128.png create mode 100644 src-tauri/icons/128x128@2x.png create mode 100644 src-tauri/icons/256x256.png create mode 100644 src-tauri/icons/32x32.png create mode 100644 src-tauri/icons/512x512.png create mode 100644 src-tauri/icons/icon-master.png create mode 100644 src-tauri/icons/icon.icns create mode 100644 src-tauri/icons/icon.ico create mode 100644 src-tauri/src/lib.rs create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/tauri.conf.json create mode 100644 src/App.tsx create mode 100644 src/main.tsx create mode 100644 src/styles.css create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cec608c --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +/target +/node_modules +/dist +/src-tauri/target +/src-tauri/gen +*.log +.DS_Store diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..2d66b2f --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4672 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "const-random", + "getrandom 0.3.4", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "brotli" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.13.1", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.20", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "combine" +version = "4.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "cookie" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dbus" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.20", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "serde_core", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.13.1", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser", + "foldhash", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.4+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" + +[[package]] +name = "flate2" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +dependencies = [ + "crc32fast", + "miniz_oxide 0.9.1", + "zlib-rs", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-executor" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" + +[[package]] +name = "futures-macro" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "futures-sink" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.13.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "http" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07aa2048142242915a31d35844fb311e0e53fcca590c3a0a40dcf1b841fa09eb" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jiff" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" +dependencies = [ + "defmt", + "jiff-core", + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-link 0.2.1", +] + +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", +] + +[[package]] +name = "jiff-static" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" +dependencies = [ + "jiff-core", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "js-sys" +version = "0.3.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.13.1", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7955dfc218a8afb29dfeffd540e3a6e96baeb94fe7138228dd7cc6937fbbf96" +dependencies = [ + "libc", +] + +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd04e60bc0b07438a6771710ee1698f98f6ebbc7f89b61264af1563b8aeb878" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.1", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" +dependencies = [ + "spin", +] + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "plist" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1d65da6dd5d1e44199ac0f58712d241c0f439f80adea8924d832384087f85" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.1", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.13.1", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "portable-atomic-util" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.13+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.1", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.20", +] + +[[package]] +name = "ref-cast" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "renamr" +version = "0.1.0" +dependencies = [ + "renamr-core", + "serde", + "serde_json", + "tauri", + "tauri-build", +] + +[[package]] +name = "renamr-core" +version = "0.1.0" +dependencies = [ + "rhai", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "reqwest" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "rhai" +version = "1.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6e1be9d697d537ce450766df42ad6adf1a93f25f21d73217354ad7e3d3dae1" +dependencies = [ + "ahash", + "bitflags 2.13.1", + "no-std-compat", + "num-traits", + "once_cell", + "rhai_codegen", + "smallvec", + "smartstring", + "thin-vec", + "web-time", +] + +[[package]] +name = "rhai_codegen" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd3a7535e50bf36857e7be7bec276d334e8c2dfa469c2201226fd01638ea5ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.119", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.13.1", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.1", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45c444e496845d3f2a351146bff59aae4975b2280238df1dfaa0c7d1846f38e" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.35.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" +dependencies = [ + "bitflags 2.13.1", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "once_cell", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "667b20e2726d572dea2de7370da16e188eb06008faf9a92fab7cdc46791190b5" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.20", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9ce40b16101cb6ea63d3e221567affd1c3a9205f95d7bc574941a10636b632" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08279169ff42f8fc45a1dbc9dcae888893ba95288142e5880c59b93a26d2cfc5" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.17.16", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", + "thiserror 2.0.20", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8b394794f399a421811d06966343e7933fcae92d59f5180b9388d1174497a45" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-runtime" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b4bc95aed361b0019067d189a1174a603d460d0f6c72606512d59fc9c12ec8" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6fac707727b7a2f48e4ded90976324267371073edbb415ffb73bb0458d203f" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.20", + "toml 1.1.4+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.4+spec-1.1.0", +] + +[[package]] +name = "tendril" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +dependencies = [ + "new_debug_unreachable", +] + +[[package]] +name = "thin-vec" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79def32ffcd477db1ff26f76dab9e3a91f0bd42a85ca96577089b24623056f9d" + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +dependencies = [ + "thiserror-impl 2.0.20", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.1", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.4+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" +dependencies = [ + "indexmap 2.14.1", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.4", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.1", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.1", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.13+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +dependencies = [ + "indexmap 2.14.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.4", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow 1.0.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.13.1", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "045979e3f037cd18ad1cb2a419dfda133c5c29c9f3453370079f2255d46c257e" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5772d71c9be8a8a6ac2117d949c5b224c1b72241bb611d9a3012edcf8af7812" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.119", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.20", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "wry" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.4", +] + +[[package]] +name = "zlib-rs" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..f1a47e5 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] +resolver = "2" +members = ["crates/renamr-core", "src-tauri"] + +[workspace.package] +version = "0.1.0" +edition = "2021" +license = "MIT" diff --git a/README.md b/README.md new file mode 100644 index 0000000..9ef1f5f --- /dev/null +++ b/README.md @@ -0,0 +1,113 @@ +# Renamr + +A fast, cross-platform media renamer — a ground-up rewrite of FileBot (via its FB-Mod +fork), built from scratch as its own project: new stack, new architecture, new branding. + +**Status: early scaffold.** The naming-expression engine is ported and tested; the +matching engine, media metadata parsing, web datasource clients, rename engine, and the +real UI are not yet ported. See "Porting roadmap" below. + +## Why a rewrite, and why this stack + +The original is a ~20k+ line Java/Swing app built with Ant. The goals were: faster +startup and UI, faster matching/renaming, a codebase that's actually pleasant to work +in, and a genuine rebrand — not a coat of paint. + +Renamr is **Tauri**: a Rust core (`crates/renamr-core`, `src-tauri`) plus a +TypeScript/React frontend (`src`), compiled to a small native binary per platform +(Windows/macOS/Linux) with a system webview instead of shipping a bundled browser +engine. That's the concrete "faster" win over both the original JVM/Swing app and +an Electron-style rewrite: quick cold start, small binary, real OS-native windowing. + +An earlier attempt used Kotlin + Compose Multiplatform to stay on the JVM and reuse +FileBot's Java logic directly. That was abandoned (nothing was salvaged into this repo) +after discovering the sandbox this was originally built in blocks Maven Central and the +Gradle Plugin Portal, making it impossible to compile or test. Tauri was chosen as the +replacement because both halves — Cargo via crates.io, npm via the public npm registry +— are reachable, so every piece described as "done" below is actually compiled/tested, +not just written and hoped for. + +### Compatibility notes + +Goal: keep CLI flags, config file locations, and the *outer* `{ }` naming-scheme +template syntax compatible with FileBot conventions, so existing automation mostly +keeps working. + +One deliberate gap: FileBot's `{ }` expressions ran arbitrary **Groovy** code +(JVM-only). Renamr's Rust core has no Groovy engine, so expressions are evaluated with +[Rhai](https://rhai.rs/) instead. Simple bindings (`{n}`, `{s00e00}`, `{t}`) are +identical. More complex chained-method expressions will need small syntax tweaks +(e.g. Groovy's `.toUpperCase()` → Rhai's `.to_upper()`) — Rhai already ships most of the +common string/array methods FileBot's expression helpers wrapped, so most patterns +translate directly. + +## Project layout + +``` +crates/renamr-core/ Pure Rust core: naming-expression engine (ported), and — not yet + ported — matching/similarity scoring, media metadata parsing, + web datasource clients (TMDB/TVDB/AniDB/etc), the rename engine. + No Tauri dependency, so it builds and unit-tests standalone. +src-tauri/ Tauri app shell: exposes renamr-core as commands to the frontend, + app metadata/icons/window config (tauri.conf.json). +src/ React + TypeScript UI (Vite). Currently a single proof-of-concept + screen wired to the live naming-expression preview. +scripts/gen_icons.py Regenerates src-tauri/icons/ (placeholder branding — swap the + colors/glyph in the script, or replace the icons directly, to + change the look). +``` + +## Building + +Prerequisites: Rust (stable) + Cargo, Node.js 18+, and Tauri's platform prerequisites +(see https://v2.tauri.app/start/prerequisites/ — on Linux this means +`libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev` and a C +toolchain; macOS/Windows need Xcode / the VS Build Tools + WebView2 respectively). + +```sh +# Rust core (no UI deps needed): +cargo test -p renamr-core + +# Full app in dev mode (opens a native window): +npm install +npm run tauri dev + +# Production build (installer/bundle for your current OS): +npm run tauri build +``` + +Verified in the environment this was built in: `cargo test -p renamr-core` (all +passing), `cargo check -p renamr` (compiles clean against real Tauri + GTK/WebKit +system libraries), and `npm run build` (TypeScript type-checks, Vite bundles). The +actual GUI window has **not** been visually verified anywhere yet — that sandbox has no +display. Run `npm run tauri dev` on your machine to see and click through it for the +first time. + +## Porting roadmap (not yet done) + +Roughly in priority order — each references the original FileBot source file it's +ported from, for anyone picking this up: + +1. **Full naming-scheme bindings** — `net.filebot.format.MediaBindingBean` (1354 lines): + all the `{n}`, `{s00e00}`, `{airdate}`, `{vf}` (video format), etc. binding + properties. Currently only whatever bindings you pass in manually are available. +2. **String/expression helper methods** — `net.filebot.format.ExpressionFormatMethods` + (636 lines): FileBot-specific Groovy string extensions like `.pad()`, `.sortName()`. + Only a small subset (`any`, `all_of`, `concat`) is ported so far + (`crates/renamr-core/src/format/functions.rs`); Rhai's built-ins cover some of the + rest already. +3. **Matching/similarity engine** — `net.filebot.similarity.*`, especially + `EpisodeMetrics.java` (849 lines, the core fuzzy-matching score cascade) and + `SeriesNameMatcher`/`SeasonEpisodeMatcher`/`DateMatcher`. +4. **Media detection** — `net.filebot.media.MediaDetection` (1356 lines): ties file-name + parsing + matching together to auto-identify what a file is. +5. **Web datasource clients** — `net.filebot.web.*` (~40 files): TheMovieDB, TheTVDB, + AniDB, OMDb, TVmaze, OpenSubtitles, etc. Use `reqwest` + `serde_json`/`serde`. +6. **Rename engine + CLI** — `net.filebot.cli.CmdlineOperations` (1235 lines) and + `ArgumentBean` (415 lines, the full flag surface: `-rename`, `--db`, `--format`, + `--action`, `--conflict`, `-get-subtitles`, `-script`, etc.) — flags are catalogued + in project notes but not yet implemented against real logic. +7. **Real UI** — file browser / drag-drop, rename preview table, settings, subtitle + panel. Current `src/App.tsx` is a single proof-of-concept screen. +8. **Packaging** — code signing, auto-update, installers per platform via + `npm run tauri build`. diff --git a/crates/renamr-core/Cargo.toml b/crates/renamr-core/Cargo.toml new file mode 100644 index 0000000..7a7c8a4 --- /dev/null +++ b/crates/renamr-core/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "renamr-core" +version.workspace = true +edition.workspace = true +license.workspace = true +description = "Renamr core: naming-expression engine, media matching, and rename engine (UI-agnostic)." + +[dependencies] +# Embeddable scripting engine powering the {expression} naming-scheme language. +# Stands in for the Groovy JSR-223 engine FileBot used (Groovy is JVM-only, not available +# to a Rust core) while keeping the same outer `{ }` template syntax. +rhai = { version = "1.19", features = ["sync"] } + +thiserror = "1.0" +serde = { version = "1", features = ["derive"] } +serde_json = "1" + +[dev-dependencies] diff --git a/crates/renamr-core/src/format/engine.rs b/crates/renamr-core/src/format/engine.rs new file mode 100644 index 0000000..9462d2f --- /dev/null +++ b/crates/renamr-core/src/format/engine.rs @@ -0,0 +1,16 @@ +use rhai::Engine; +use std::sync::OnceLock; + +use super::functions; + +/// Shared Rhai engine, built once. Engines are relatively expensive to construct +/// (loading the standard package), so every [`crate::format::ExpressionFormat`] +/// compiles against this single shared instance. +pub(super) fn shared() -> &'static Engine { + static ENGINE: OnceLock = OnceLock::new(); + ENGINE.get_or_init(|| { + let mut engine = Engine::new(); + functions::register(&mut engine); + engine + }) +} diff --git a/crates/renamr-core/src/format/expression.rs b/crates/renamr-core/src/format/expression.rs new file mode 100644 index 0000000..a374c23 --- /dev/null +++ b/crates/renamr-core/src/format/expression.rs @@ -0,0 +1,171 @@ +use rhai::{Dynamic, Scope, AST}; +use std::collections::HashMap; +use thiserror::Error; + +use super::engine; + +/// The variables available inside a `{ }` expression, e.g. `n` -> show name. +pub type Bindings = HashMap; + +#[derive(Debug, Error)] +pub enum ExpressionError { + #[error("syntax error in expression `{expression}`: {message}")] + Syntax { expression: String, message: String }, + #[error("expression yields empty value: {0}")] + Empty(String), +} + +enum Segment { + Literal(String), + /// Fast path for bare identifiers like `{n}` or `{s00e00}`: skips the script engine + /// entirely, both for speed and so an undefined binding fails predictably. + Variable(String), + Script(AST), +} + +/// A compiled naming-scheme expression, e.g. `"{n} - {s00e00} - {t}"`. +/// +/// Compilation is separate from formatting (like `java.text.Format`/FileBot's +/// `ExpressionFormat`) so a pattern is parsed once and then applied to many files. +#[derive(Debug)] +pub struct ExpressionFormat { + expression: String, + segments: Vec, +} + +impl std::fmt::Debug for Segment { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Segment::Literal(s) => write!(f, "Literal({s:?})"), + Segment::Variable(s) => write!(f, "Variable({s:?})"), + Segment::Script(_) => write!(f, "Script(..)"), + } + } +} + +impl ExpressionFormat { + pub fn compile(expression: &str) -> Result { + let segments = parse(expression)?; + Ok(Self { + expression: expression.to_string(), + segments, + }) + } + + pub fn expression(&self) -> &str { + &self.expression + } + + /// Renders this pattern against the given bindings. Mirrors FileBot's semantics: + /// a scriptlet that fails to evaluate (e.g. references an undefined/empty binding) + /// simply contributes nothing, but the *overall* result must be non-empty. + pub fn format(&self, bindings: &Bindings) -> Result { + let engine = engine::shared(); + let mut out = String::new(); + + for segment in &self.segments { + match segment { + Segment::Literal(text) => out.push_str(text), + Segment::Variable(name) => { + if let Some(value) = bindings.get(name) { + if !value.is_unit() { + out.push_str(&value.to_string()); + } + } + } + Segment::Script(ast) => { + let mut scope = Scope::new(); + for (key, value) in bindings { + scope.push_dynamic(key.clone(), value.clone()); + } + if let Ok(value) = engine.eval_ast_with_scope::(&mut scope, ast) { + if !value.is_unit() { + out.push_str(&value.to_string()); + } + } + } + } + } + + if out.is_empty() { + return Err(ExpressionError::Empty(self.expression.clone())); + } + + Ok(out) + } +} + +fn is_identifier(token: &str) -> bool { + let mut chars = token.chars(); + match chars.next() { + Some(c) if c.is_alphabetic() || c == '_' => {} + _ => return false, + } + chars.all(|c| c.is_alphanumeric() || c == '_') +} + +fn compile_scriptlet(token: &str, expression: &str) -> Result { + if is_identifier(token) { + return Ok(Segment::Variable(token.to_string())); + } + + engine::shared() + .compile(token) + .map(Segment::Script) + .map_err(|e| ExpressionError::Syntax { + expression: expression.to_string(), + message: e.to_string(), + }) +} + +/// Splits an expression into literal text and `{ }` scriptlets, honoring nested braces +/// (so a scriptlet may itself contain `{ }`, e.g. a map literal or block). +fn parse(expression: &str) -> Result, ExpressionError> { + let mut segments = Vec::new(); + let mut token = String::new(); + let mut level = 0i32; + + for c in expression.chars() { + match c { + '{' => { + if level == 0 { + if !token.is_empty() { + segments.push(Segment::Literal(std::mem::take(&mut token))); + } + } else { + token.push(c); + } + level += 1; + } + '}' => { + level -= 1; + if level < 0 { + return Err(ExpressionError::Syntax { + expression: expression.to_string(), + message: "unexpected '}'".to_string(), + }); + } + if level == 0 { + if !token.is_empty() { + segments.push(compile_scriptlet(&std::mem::take(&mut token), expression)?); + } + } else { + token.push(c); + } + } + _ => token.push(c), + } + } + + if level != 0 { + return Err(ExpressionError::Syntax { + expression: expression.to_string(), + message: "missing '}'".to_string(), + }); + } + if !token.is_empty() { + segments.push(Segment::Literal(token)); + } + + Ok(segments) +} diff --git a/crates/renamr-core/src/format/functions.rs b/crates/renamr-core/src/format/functions.rs new file mode 100644 index 0000000..610633c --- /dev/null +++ b/crates/renamr-core/src/format/functions.rs @@ -0,0 +1,52 @@ +//! Global helper functions available inside every `{ }` expression, e.g. `{any([x, y])}`. +//! +//! Starter subset ported from FileBot's `ExpressionFormatFunctions.java`. Rhai already +//! provides `to_upper`, `to_lower`, `trim`, `sub_string`, `len`, `contains`, `pad` and +//! friends as built-in string methods, so this module only adds the FileBot-specific +//! helpers that don't already have a Rhai equivalent. More helpers (csv/read_lines/ +//! quote_bash/quote_powershell, etc.) are tracked in the porting backlog. + +use rhai::{Array, Dynamic, Engine}; + +fn is_empty_value(value: &Dynamic) -> bool { + if value.is_unit() { + return true; + } + if let Some(s) = value.clone().try_cast::() { + return s.is_empty(); + } + if let Some(arr) = value.clone().try_cast::() { + return arr.is_empty(); + } + false +} + +/// Returns the first array element that isn't empty/unit, or `()` if all are empty. +fn any_of(candidates: Array) -> Dynamic { + candidates + .into_iter() + .find(|v| !is_empty_value(v)) + .unwrap_or(Dynamic::UNIT) +} + +/// Returns all non-empty elements, preserving order. +fn all_of(candidates: Array) -> Array { + candidates.into_iter().filter(|v| !is_empty_value(v)).collect() +} + +/// Concatenates all non-empty elements' string forms with no separator. +fn concat(parts: Array) -> String { + parts + .into_iter() + .filter(|v| !is_empty_value(v)) + .map(|v| v.to_string()) + .collect::>() + .join("") +} + +pub fn register(engine: &mut Engine) { + engine.register_fn("is_empty_value", is_empty_value); + engine.register_fn("any", any_of); + engine.register_fn("all_of", all_of); + engine.register_fn("concat", concat); +} diff --git a/crates/renamr-core/src/format/mod.rs b/crates/renamr-core/src/format/mod.rs new file mode 100644 index 0000000..d0c32c5 --- /dev/null +++ b/crates/renamr-core/src/format/mod.rs @@ -0,0 +1,18 @@ +//! Renamr's naming-scheme expression language. +//! +//! A format string is literal text with `{ ... }` scriptlets spliced in, e.g. +//! `"{n} - {s00e00} - {t}"` +//! Everything inside `{ }` is evaluated as an expression against a set of "bindings" +//! (the variables available to the expression, e.g. `n` = show name). +//! +//! This keeps FileBot's outer `{ }` template syntax and simple-binding behavior +//! (`{n}`, `{s00e00}`, ...), so existing simple rename patterns keep working unchanged. +//! The inner expression *language* is Rhai rather than Groovy (Groovy is JVM-only and +//! this core is plain Rust) -- see the crate README for the compatibility notes on more +//! complex chained-method expressions. + +mod engine; +mod expression; +mod functions; + +pub use expression::{ExpressionError, ExpressionFormat}; diff --git a/crates/renamr-core/src/lib.rs b/crates/renamr-core/src/lib.rs new file mode 100644 index 0000000..453a107 --- /dev/null +++ b/crates/renamr-core/src/lib.rs @@ -0,0 +1,25 @@ +//! Renamr core: the UI-agnostic engine behind the Renamr media renamer. +//! +//! This crate has no Tauri/UI dependency so it can be built and unit-tested standalone. +//! It's the piece being ported first from the original FileBot (Java) codebase; see +//! the workspace README for the porting roadmap (matching engine, media metadata +//! parsing, web datasource clients, rename engine are not yet ported). + +pub mod format; + +use rhai::Dynamic; +use std::collections::HashMap; + +/// Convenience constructor for [`format::ExpressionFormat`] bindings from plain strings, +/// which is the common case (binding values are almost always show/movie/episode text). +pub fn string_bindings(pairs: I) -> HashMap +where + I: IntoIterator, + K: Into, + V: Into, +{ + pairs + .into_iter() + .map(|(k, v)| (k.into(), Dynamic::from(v.into()))) + .collect() +} diff --git a/crates/renamr-core/tests/expression_format.rs b/crates/renamr-core/tests/expression_format.rs new file mode 100644 index 0000000..6ae1b44 --- /dev/null +++ b/crates/renamr-core/tests/expression_format.rs @@ -0,0 +1,66 @@ +use renamr_core::format::ExpressionFormat; +use renamr_core::string_bindings; + +#[test] +fn simple_variable_substitution() { + let fmt = ExpressionFormat::compile("{n} - {s00e00} - {t}").unwrap(); + let bindings = string_bindings([ + ("n", "Breaking Bad"), + ("s00e00", "S05E14"), + ("t", "Ozymandias"), + ]); + assert_eq!(fmt.format(&bindings).unwrap(), "Breaking Bad - S05E14 - Ozymandias"); +} + +#[test] +fn scripted_expression_evaluation() { + let fmt = ExpressionFormat::compile("{n.to_upper()}").unwrap(); + let bindings = string_bindings([("n", "Breaking Bad")]); + assert_eq!(fmt.format(&bindings).unwrap(), "BREAKING BAD"); +} + +#[test] +fn literal_text_passes_through() { + let fmt = ExpressionFormat::compile("plain text, no expressions").unwrap(); + assert_eq!(fmt.format(&Default::default()).unwrap(), "plain text, no expressions"); +} + +#[test] +fn global_helper_function_any() { + let fmt = ExpressionFormat::compile("{any([x, y])}").unwrap(); + let bindings = string_bindings([("y", "fallback")]); + // `x` isn't bound at all; referencing it inside the array literal would normally + // error, so real usage is any([x_or_default, y]) - here we just prove `any` picks + // the first non-empty value among ones that DO evaluate. + let bindings2 = string_bindings([("x", ""), ("y", "fallback")]); + let _ = bindings; // silence unused warning for the simplified case above + assert_eq!(fmt.format(&bindings2).unwrap(), "fallback"); +} + +#[test] +fn undefined_binding_alone_yields_error() { + let fmt = ExpressionFormat::compile("{missing}").unwrap(); + let result = fmt.format(&Default::default()); + assert!(result.is_err(), "expected empty-result error, got {:?}", result); +} + +#[test] +fn undefined_binding_is_skipped_when_other_content_exists() { + let fmt = ExpressionFormat::compile("{n}{missing}").unwrap(); + let bindings = string_bindings([("n", "Show")]); + assert_eq!(fmt.format(&bindings).unwrap(), "Show"); +} + +#[test] +fn nested_braces_inside_a_scriptlet_are_preserved() { + // Rhai object map literal: #{ key: value } + let fmt = ExpressionFormat::compile("{ (#{a: 1, b: 2}).a }").unwrap(); + assert_eq!(fmt.format(&Default::default()).unwrap(), "1"); +} + +#[test] +fn syntax_error_is_reported_with_the_offending_expression() { + let err = ExpressionFormat::compile("{this is not valid rhai +++ }").unwrap_err(); + let message = err.to_string(); + assert!(message.contains("syntax error"), "message was: {message}"); +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..0645dbc --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + Renamr + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5ba8a49 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1979 @@ +{ + "name": "renamr", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "renamr", + "version": "0.1.0", + "dependencies": { + "@tauri-apps/api": "^2.1.1", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.1.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "typescript": "^5.6.3", + "vite": "^5.4.10" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.1.tgz", + "integrity": "sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.1.tgz", + "integrity": "sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.1.tgz", + "integrity": "sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.1.tgz", + "integrity": "sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.1.tgz", + "integrity": "sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.1.tgz", + "integrity": "sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.1.tgz", + "integrity": "sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.1.tgz", + "integrity": "sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.1.tgz", + "integrity": "sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.1.tgz", + "integrity": "sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.1.tgz", + "integrity": "sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.1.tgz", + "integrity": "sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.1.tgz", + "integrity": "sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.1.tgz", + "integrity": "sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.1.tgz", + "integrity": "sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.1.tgz", + "integrity": "sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.1.tgz", + "integrity": "sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.1.tgz", + "integrity": "sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.1.tgz", + "integrity": "sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.1.tgz", + "integrity": "sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.1.tgz", + "integrity": "sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.1.tgz", + "integrity": "sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.1.tgz", + "integrity": "sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.1.tgz", + "integrity": "sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.1.tgz", + "integrity": "sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tauri-apps/api": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.11.1.tgz", + "integrity": "sha512-M2FPuYND2m+wh5hfW9ZpSdxMPdEJovPBWwoHJmwUpysTYNHaOkVFN419m/K0LIgjb/7KU2vBgsUepJWugQCvAA==", + "license": "Apache-2.0 OR MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.11.4.tgz", + "integrity": "sha512-R8xGtMpwyetawSqm9kYOuMmEqkhUbvcUy8n0aNXIxollKBLESUu5f4Fx+64hgASYm1H+jSWq6jCW6zqTnH6hqQ==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.11.4", + "@tauri-apps/cli-darwin-x64": "2.11.4", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.11.4", + "@tauri-apps/cli-linux-arm64-gnu": "2.11.4", + "@tauri-apps/cli-linux-arm64-musl": "2.11.4", + "@tauri-apps/cli-linux-riscv64-gnu": "2.11.4", + "@tauri-apps/cli-linux-x64-gnu": "2.11.4", + "@tauri-apps/cli-linux-x64-musl": "2.11.4", + "@tauri-apps/cli-win32-arm64-msvc": "2.11.4", + "@tauri-apps/cli-win32-ia32-msvc": "2.11.4", + "@tauri-apps/cli-win32-x64-msvc": "2.11.4" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.11.4.tgz", + "integrity": "sha512-1ryOF3ZhpZ/nemHV5zVwBQBz9jDGKmKPvWPADOhc83ig0P4bMc2iER4NbC6r9sjeIZ6RVQ4g3RZIYvezhcl4TQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.11.4.tgz", + "integrity": "sha512-uFsGQAAfuyz1k/yGLmkWfkBlgKAqZfxqlHmLWx81QU27RJWfmbNHCIq8T8w1e+VClleIuZUjpHWfoE4E3DLo3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.11.4.tgz", + "integrity": "sha512-IaHZn5CdBL21oUmjiVOS1ctw6Ip1O0pjp70FwOWmYz1myWe0SY96ZIj2FYf7pT0m8bI2h/hrs5ZbEXXh44/MkQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.11.4.tgz", + "integrity": "sha512-N41/ukTRVe6XSuUTESuFdGeOW2i7k62tK+6gHK5Kd5/q5RPvvi19GaWAVPPb9u95HSGmTChSolBfzynUsssFaA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.11.4.tgz", + "integrity": "sha512-v277UnT/fB64xAfSroL5N3Km3tLmvATWqJJw/wRI+g6o+HkeD0slyE7gOhNs1MbjE41R7bQOTxMVoL3aomUJmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.11.4.tgz", + "integrity": "sha512-qqgNkQ2u1yZHxjhxsZaxUtRDW8dIqIYm33rx/mzwQv0SfY9x1B+iraj8vWeFiXjjSVVhEMepXSOts1TqPzvXNQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.11.4.tgz", + "integrity": "sha512-2VRNWl84FOH0m2giiDkO2h0QXlcMJeX+zJDpI5kDIQAx6s+geF3v48F4DXfJez4GS/FdoDGnPnw1C2iYGbQ7bQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.11.4.tgz", + "integrity": "sha512-o9GyhYor/nc7xarmwDE3ka2szuW3uuZzXjHWh64Q8YX5AtSgxdQkFWzrY4O8KiGtVNvFBI14H3Q49Qj5TOIP/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.11.4.tgz", + "integrity": "sha512-ld5Ehb598m0VkYyylRPNeCFsBe/km0jxis6KgMpl3IGY6I/i1RwQXO05I1AsXUXO2WC6AvB/Lw4qTf/asiuEiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.11.4.tgz", + "integrity": "sha512-12Hxi0XX/H5VFxO/bGgHkFWhml9VMgEOu9CidjeCeTNQ1l6fpUlbiGgSP7CLI3PFtW9/FfbeHieZ+kyWK5H7CA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.11.4.tgz", + "integrity": "sha512-+vDiqBIU5dMISg/wNvX3sF+ZHfgJGJ5T0AcO+EHNXV9GGAG+P5fzodlDXD3QdKCRgZxMoCm5PPvj3BqLNjBthw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", + "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz", + "integrity": "sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.416", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.416.tgz", + "integrity": "sha512-K6bvB2BjnNrugtIih6ewlbBI9DXa976jIdiIlRLHhBoEI9a4JaQjjHyF+A1IQI543aQYR4LnmOrT/K5fZj0aPA==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.54", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz", + "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.63.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.1.tgz", + "integrity": "sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.63.1", + "@rollup/rollup-android-arm64": "4.63.1", + "@rollup/rollup-darwin-arm64": "4.63.1", + "@rollup/rollup-darwin-x64": "4.63.1", + "@rollup/rollup-freebsd-arm64": "4.63.1", + "@rollup/rollup-freebsd-x64": "4.63.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.63.1", + "@rollup/rollup-linux-arm-musleabihf": "4.63.1", + "@rollup/rollup-linux-arm64-gnu": "4.63.1", + "@rollup/rollup-linux-arm64-musl": "4.63.1", + "@rollup/rollup-linux-loong64-gnu": "4.63.1", + "@rollup/rollup-linux-loong64-musl": "4.63.1", + "@rollup/rollup-linux-ppc64-gnu": "4.63.1", + "@rollup/rollup-linux-ppc64-musl": "4.63.1", + "@rollup/rollup-linux-riscv64-gnu": "4.63.1", + "@rollup/rollup-linux-riscv64-musl": "4.63.1", + "@rollup/rollup-linux-s390x-gnu": "4.63.1", + "@rollup/rollup-linux-x64-gnu": "4.63.1", + "@rollup/rollup-linux-x64-musl": "4.63.1", + "@rollup/rollup-openbsd-x64": "4.63.1", + "@rollup/rollup-openharmony-arm64": "4.63.1", + "@rollup/rollup-win32-arm64-msvc": "4.63.1", + "@rollup/rollup-win32-ia32-msvc": "4.63.1", + "@rollup/rollup-win32-x64-gnu": "4.63.1", + "@rollup/rollup-win32-x64-msvc": "4.63.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", + "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..406f83c --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "renamr", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "tauri": "tauri" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1", + "@tauri-apps/api": "^2.1.1" + }, + "devDependencies": { + "@tauri-apps/cli": "^2.1.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "typescript": "^5.6.3", + "vite": "^5.4.10" + } +} diff --git a/scripts/gen_icons.py b/scripts/gen_icons.py new file mode 100644 index 0000000..40b7790 --- /dev/null +++ b/scripts/gen_icons.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +"""Generates Renamr's app icon set (placeholder branding, easy to swap later). + +Produces the sizes Tauri's bundler expects in src-tauri/icons/. +""" +from PIL import Image, ImageDraw, ImageFont +import os + +OUT = os.path.join(os.path.dirname(__file__), "..", "src-tauri", "icons") +os.makedirs(OUT, exist_ok=True) + +SIZE = 1024 +BG_TOP = (91, 76, 245) # indigo +BG_BOTTOM = (56, 189, 178) # teal +FG = (255, 255, 255) + +def make_master(): + img = Image.new("RGB", (SIZE, SIZE), BG_TOP) + px = img.load() + for y in range(SIZE): + t = y / SIZE + r = int(BG_TOP[0] * (1 - t) + BG_BOTTOM[0] * t) + g = int(BG_TOP[1] * (1 - t) + BG_BOTTOM[1] * t) + b = int(BG_TOP[2] * (1 - t) + BG_BOTTOM[2] * t) + for x in range(SIZE): + px[x, y] = (r, g, b) + + # rounded-square mask + mask = Image.new("L", (SIZE, SIZE), 0) + ImageDraw.Draw(mask).rounded_rectangle([0, 0, SIZE - 1, SIZE - 1], radius=SIZE // 5, fill=255) + canvas = Image.new("RGBA", (SIZE, SIZE), (0, 0, 0, 0)) + canvas.paste(img, (0, 0), mask) + + draw = ImageDraw.Draw(canvas) + font = ImageFont.truetype("/usr/share/fonts/truetype/google-fonts/Poppins-Bold.ttf", int(SIZE * 0.56)) + text = "R" + bbox = draw.textbbox((0, 0), text, font=font) + tw, th = bbox[2] - bbox[0], bbox[3] - bbox[1] + draw.text(((SIZE - tw) / 2 - bbox[0], (SIZE - th) / 2 - bbox[1] - SIZE * 0.02), text, font=font, fill=FG) + + return canvas + +master = make_master() +master.save(os.path.join(OUT, "icon-master.png")) + +sizes = [32, 128, 256, 512, 1024] +for s in sizes: + master.resize((s, s), Image.LANCZOS).save(os.path.join(OUT, f"{s}x{s}.png")) + +# Tauri's expected filenames +master.resize((32, 32), Image.LANCZOS).save(os.path.join(OUT, "32x32.png")) +master.resize((128, 128), Image.LANCZOS).save(os.path.join(OUT, "128x128.png")) +master.resize((256, 256), Image.LANCZOS).save(os.path.join(OUT, "128x128@2x.png")) + +# Windows .ico (multi-resolution) +ico_sizes = [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)] +master.save(os.path.join(OUT, "icon.ico"), sizes=ico_sizes) + +# macOS .icns +try: + master.save(os.path.join(OUT, "icon.icns"), format="ICNS") +except Exception as e: + print(f"WARN: could not write icon.icns via Pillow ({e}); leaving it out") + +print("done:", os.listdir(OUT)) diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 0000000..d3c2627 --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "renamr" +version.workspace = true +edition.workspace = true +license.workspace = true + +[lib] +name = "renamr_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +renamr-core = { path = "../crates/renamr-core" } +tauri = { version = "2", features = [] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/icons/1024x1024.png b/src-tauri/icons/1024x1024.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe968ec7743b7638d6cfadb4c7206ff347c6bf5 GIT binary patch literal 17783 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%0A}2`wMl%8t3`eh8 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 RGG71y002ovPDHLkV1kILlluSw literal 0 HcmV?d00001 diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0114ee95a232e1897fd6b749a42d4776a2439314 GIT binary patch literal 9256 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/256x256.png b/src-tauri/icons/256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..0114ee95a232e1897fd6b749a42d4776a2439314 GIT binary patch literal 9256 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..015d55d1882a7a75bd79e28987b1bc6008dc7ebb GIT binary patch literal 1124 zcmV-q1e^PbP)DFnZs+_#)wmUlgMhFyW{AJ;oS#ySM?U|i@>OqHWNggb^fZ2PcJWj1%ALreavRvdY&R zb4R~CHaseO_RPK!3WLYe?qXLU+>5|>0-;+7)zD3^j|2^NNPTLi(IG39@;(5}och$% z>`<_vTe>ubf{9}H1%QC-(!_#p2^Ms~ET7>1iy&JD_H3(yFc8e=SGyT^<;V#*mwne| zl9&O=lX}a7xV!A_q(-x4l!`*JAgGf2%wVBE1I|ICrMx#Y5@s&&{O)74QX^JU7SXdJBMa3k}L;VXo6= z{O7am*f@k4loH{=K~E<}M5J#gl9xU?mGjyVnrS5VZkbZS5nMJzwbDo$vvm;|CKO^DISOP)4 z)Ha@M q8z3f5uH*a^%8|*JU(KH9X7Uf<2z*+{@gxEO0000a literal 0 HcmV?d00001 diff --git a/src-tauri/icons/512x512.png b/src-tauri/icons/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..75cded2550d011240c374e9ade156b8fa4cbf957 GIT binary patch literal 19034 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 D2UY~;q2@Rdbuz6NYr-1<5xKi7 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 L{ow!qpV0pSdF#Tf literal 0 HcmV?d00001 diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs new file mode 100644 index 0000000..a49b4a3 --- /dev/null +++ b/src-tauri/src/lib.rs @@ -0,0 +1,22 @@ +use renamr_core::format::ExpressionFormat; +use renamr_core::string_bindings; +use std::collections::HashMap; + +/// Renders a naming-scheme expression against a set of binding values. +/// This is the Tauri-facing entry point into the core format engine, used by the +/// rename-preview panel in the UI so users see live results as they edit a pattern. +#[tauri::command] +fn render_expression(expression: String, bindings: HashMap) -> Result { + let compiled = ExpressionFormat::compile(&expression).map_err(|e| e.to_string())?; + compiled + .format(&string_bindings(bindings)) + .map_err(|e| e.to_string()) +} + +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .invoke_handler(tauri::generate_handler![render_expression]) + .run(tauri::generate_context!()) + .expect("error while running Renamr"); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..1fb33d0 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,6 @@ +// Prevents an additional console window on Windows in release builds. +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + renamr_lib::run(); +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..ec0873a --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "Renamr", + "version": "0.1.0", + "identifier": "com.renamr.app", + "build": { + "beforeDevCommand": "npm run dev", + "beforeBuildCommand": "npm run build", + "devUrl": "http://localhost:5173", + "frontendDist": "../dist" + }, + "app": { + "windows": [ + { + "title": "Renamr", + "width": 1100, + "height": 720, + "minWidth": 720, + "minHeight": 480 + } + ], + "security": { + "csp": null + } + }, + "bundle": { + "active": true, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] + } +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..2c305cb --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,65 @@ +import { useEffect, useState } from "react"; +import { invoke } from "@tauri-apps/api/core"; + +const APP_NAME = "Renamr"; +const APP_VERSION = "0.1.0"; + +const DEFAULT_EXPRESSION = "{n} - {s00e00} - {t}"; +const DEFAULT_BINDINGS: Record = { + n: "Example Show", + s00e00: "S01E01", + t: "Pilot", +}; + +export default function App() { + const [expression, setExpression] = useState(DEFAULT_EXPRESSION); + const [preview, setPreview] = useState(""); + const [error, setError] = useState(null); + + useEffect(() => { + let cancelled = false; + + invoke("render_expression", { expression, bindings: DEFAULT_BINDINGS }) + .then((result) => { + if (!cancelled) { + setPreview(result); + setError(null); + } + }) + .catch((err) => { + if (!cancelled) { + setPreview(""); + setError(String(err)); + } + }); + + return () => { + cancelled = true; + }; + }, [expression]); + + return ( +
+
+

{APP_NAME}

+

A fast, cross-platform media renamer.

+

v{APP_VERSION}

+
+ +
+ + setExpression(e.target.value)} + spellCheck={false} + /> + +
+ Preview + {error ? {error} : {preview}} +
+
+
+ ); +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..fa1b97e --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; +import "./styles.css"; + +ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + +); diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..61585f2 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,86 @@ +:root { + color-scheme: light dark; + font-family: "Poppins", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; +} + +body { + margin: 0; + background: #0f1222; + color: #f4f5fb; +} + +.shell { + max-width: 640px; + margin: 0 auto; + padding: 48px 24px; +} + +header h1 { + font-size: 2.25rem; + margin: 0; + background: linear-gradient(135deg, #5b4cf5, #38bdb2); + -webkit-background-clip: text; + background-clip: text; + color: transparent; +} + +.tagline { + margin: 4px 0 0; + opacity: 0.8; +} + +.version { + margin: 2px 0 0; + font-size: 0.8rem; + opacity: 0.5; +} + +.panel { + margin-top: 32px; + background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; + padding: 20px; +} + +label { + display: block; + font-size: 0.8rem; + opacity: 0.7; + margin-bottom: 8px; +} + +input { + width: 100%; + box-sizing: border-box; + padding: 10px 12px; + border-radius: 8px; + border: 1px solid rgba(255, 255, 255, 0.15); + background: rgba(0, 0, 0, 0.25); + color: inherit; + font-size: 1rem; + font-family: ui-monospace, monospace; +} + +.preview { + margin-top: 16px; + padding: 12px; + border-radius: 8px; + background: rgba(0, 0, 0, 0.25); +} + +.preview-label { + display: block; + font-size: 0.75rem; + opacity: 0.6; + margin-bottom: 4px; +} + +.preview-value { + font-family: ui-monospace, monospace; +} + +.preview-error { + color: #ff8080; + font-family: ui-monospace, monospace; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..3ebe8ae --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2021", + "useDefineForClassFields": true, + "lib": ["ES2021", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..1c25e99 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +// Tauri expects a fixed dev server port and relative asset paths. +export default defineConfig({ + plugins: [react()], + clearScreen: false, + server: { + port: 5173, + strictPort: true, + }, + envPrefix: ["VITE_", "TAURI_"], + build: { + target: "esnext", + outDir: "dist", + }, +});