From 2e8803a0673ab52c1148f7707d353cdb34895cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Wed, 30 Sep 2026 07:13:59 +0500 Subject: [PATCH] Phase 1/2: Tauri shell, React UI (welcome, read-only import, overview with start/stop), e2e driver Verified in the native window against a disposable fixture: import writes only .manager + registry; start surfaces a human 'database update required' message; stop returns to Offline. Live install untouched throughout. Co-Authored-By: Claude Sonnet 5.5 --- .claude/launch.json | 6 + Cargo.lock | 3850 ++++++++++++++++++++++++- Cargo.toml | 2 +- README.md | 25 + crates/coa-core/src/driver.rs | 3 +- crates/coa-core/src/layout.rs | 10 +- index.html | 12 + package-lock.json | 2288 +++++++++++++++ package.json | 32 + src-tauri/Cargo.toml | 19 + src-tauri/build.rs | 3 + src-tauri/capabilities/default.json | 7 + src-tauri/icons/128x128.png | Bin 0 -> 6415 bytes src-tauri/icons/128x128@2x.png | Bin 0 -> 12412 bytes src-tauri/icons/32x32.png | Bin 0 -> 1490 bytes src-tauri/icons/64x64.png | Bin 0 -> 3249 bytes src-tauri/icons/Square107x107Logo.png | Bin 0 -> 5417 bytes src-tauri/icons/Square142x142Logo.png | Bin 0 -> 7236 bytes src-tauri/icons/Square150x150Logo.png | Bin 0 -> 7661 bytes src-tauri/icons/Square284x284Logo.png | Bin 0 -> 14688 bytes src-tauri/icons/Square30x30Logo.png | Bin 0 -> 1350 bytes src-tauri/icons/Square310x310Logo.png | Bin 0 -> 16258 bytes src-tauri/icons/Square44x44Logo.png | Bin 0 -> 2165 bytes src-tauri/icons/Square71x71Logo.png | Bin 0 -> 3639 bytes src-tauri/icons/Square89x89Logo.png | Bin 0 -> 4595 bytes src-tauri/icons/StoreLogo.png | Bin 0 -> 2505 bytes src-tauri/icons/icon.icns | Bin 0 -> 106140 bytes src-tauri/icons/icon.ico | Bin 0 -> 22923 bytes src-tauri/icons/icon.png | Bin 0 -> 3276 bytes src-tauri/icons/source.png | Bin 0 -> 3678 bytes src-tauri/src/lib.rs | 182 ++ src-tauri/src/main.rs | 5 + src-tauri/tauri.conf.json | 32 + src/App.tsx | 56 + src/components/ui/button.tsx | 34 + src/components/ui/card.tsx | 11 + src/dev/mock.ts | 28 + src/index.css | 59 + src/lib/api.ts | 93 + src/lib/utils.ts | 16 + src/main.tsx | 14 + src/screens/ImportServer.tsx | 150 + src/screens/Overview.tsx | 204 ++ src/screens/Placeholder.tsx | 11 + src/screens/Shell.tsx | 85 + src/screens/Welcome.tsx | 34 + src/vite-env.d.ts | 1 + tests/e2e/cdp.mjs | 24 + tsconfig.json | 32 + vite.config.ts | 12 + 50 files changed, 7331 insertions(+), 9 deletions(-) create mode 100644 .claude/launch.json create mode 100644 README.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/capabilities/default.json create mode 100644 src-tauri/icons/128x128.png create mode 100644 src-tauri/icons/128x128@2x.png create mode 100644 src-tauri/icons/32x32.png create mode 100644 src-tauri/icons/64x64.png create mode 100644 src-tauri/icons/Square107x107Logo.png create mode 100644 src-tauri/icons/Square142x142Logo.png create mode 100644 src-tauri/icons/Square150x150Logo.png create mode 100644 src-tauri/icons/Square284x284Logo.png create mode 100644 src-tauri/icons/Square30x30Logo.png create mode 100644 src-tauri/icons/Square310x310Logo.png create mode 100644 src-tauri/icons/Square44x44Logo.png create mode 100644 src-tauri/icons/Square71x71Logo.png create mode 100644 src-tauri/icons/Square89x89Logo.png create mode 100644 src-tauri/icons/StoreLogo.png create mode 100644 src-tauri/icons/icon.icns create mode 100644 src-tauri/icons/icon.ico create mode 100644 src-tauri/icons/icon.png create mode 100644 src-tauri/icons/source.png 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/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/dev/mock.ts create mode 100644 src/index.css create mode 100644 src/lib/api.ts create mode 100644 src/lib/utils.ts create mode 100644 src/main.tsx create mode 100644 src/screens/ImportServer.tsx create mode 100644 src/screens/Overview.tsx create mode 100644 src/screens/Placeholder.tsx create mode 100644 src/screens/Shell.tsx create mode 100644 src/screens/Welcome.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tests/e2e/cdp.mjs create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000..620deb4 --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,6 @@ +{ + "version": "0.0.1", + "configurations": [ + { "name": "vite", "runtimeExecutable": "npx", "runtimeArgs": ["vite"], "port": 1420 } + ] +} diff --git a/Cargo.lock b/Cargo.lock index 5a4a439..c149573 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,36 @@ # 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 = "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 = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2fb6cfd47bf496ff64095c20eaba0c201404ee38714d4142fcfa1dc334fcc7a" + +[[package]] +name = "alloc-stdlib" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5c1865780388bfa186411ab5f247819487fc4864c6e9c3106611fa347586e1" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "android_system_properties" version = "0.1.6" @@ -11,17 +41,94 @@ 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 = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + +[[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.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" +dependencies = [ + "serde_core", +] [[package]] name = "block-buffer" @@ -32,12 +139,140 @@ 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 = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8b851b75c23ca7873623d612fe49bd1989aeb03d08fb9432187eb253d3d4c6b" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941cd9bd4ddab83cb46fa5a2d428f1c857b24ac78cb876cf7beb710840934bd7" +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.2", + "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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbad30e4b4c14a39e3cc8aed085a12a327257c316619c93581e017bc52be591" +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.21", +] + +[[package]] +name = "cargo_toml" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f4b26e751e711a5302649417f2da046dce6391b2ea30a4820f37462314f0b9" +dependencies = [ + "semver", + "serde", + "toml 1.1.6+spec-1.1.0", +] + [[package]] name = "cc" version = "1.5.1" @@ -48,6 +283,33 @@ dependencies = [ "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.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a347dcabdae9c31b0825fd6a8bed285ec9c2acb89c47827126d52fa4f59cece3" +dependencies = [ + "fnv", + "uuid", + "web-time", +] + +[[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.5" @@ -78,19 +340,86 @@ dependencies = [ "serde_json", "sha2", "tempfile", - "thiserror", + "thiserror 2.0.21", "tracing", "tracing-subscriber", "uuid", "windows-sys 0.60.2", ] +[[package]] +name = "coa-server-manager" +version = "0.1.0" +dependencies = [ + "coa-core", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-dialog", + "tracing", +] + +[[package]] +name = "combine" +version = "4.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +dependencies = [ + "bytes", + "memchr", +] + +[[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.2", + "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.2", + "core-foundation", + "libc", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -100,6 +429,30 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" + [[package]] name = "crypto-common" version = "0.1.7" @@ -110,6 +463,141 @@ dependencies = [ "typenum", ] +[[package]] +name = "cssparser" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d045de693cb712d0b22c6a64be5b953f67b3ce00ab5ad3dd5d8b441886ab8e1a" +dependencies = [ + "quote", + "syn 3.0.6", +] + +[[package]] +name = "ctor" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" + +[[package]] +name = "darling" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 3.0.6", +] + +[[package]] +name = "darling_macro" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" +dependencies = [ + "darling_core", + "quote", + "syn 3.0.6", +] + +[[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.21", +] + +[[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" @@ -120,12 +608,161 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dirs" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d57d423b3c82e89b9a24ca3091fee61f456a26edbd28d26c65906f4bc1dcd8f" +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.2", + "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.6", +] + +[[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.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fac5fca71e65e94cc718a6e2af65d6e0f9c6027751c2aa562fbb5087fda639bc" +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 = "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.6+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 = "errno" version = "0.3.14" @@ -142,12 +779,90 @@ 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.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" +[[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.6", +] + +[[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 = "fs4" version = "0.13.1" @@ -158,12 +873,55 @@ dependencies = [ "windows-sys 0.59.0", ] +[[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.6", +] + +[[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" @@ -177,11 +935,114 @@ 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" @@ -192,6 +1053,18 @@ dependencies = [ "version_check", ] +[[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" @@ -200,15 +1073,280 @@ checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", - "r-efi", + "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.2", + "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.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8" +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.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff" +dependencies = [ + "base64 0.23.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "httparse", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.65" @@ -233,12 +1371,291 @@ 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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4200d433cbd5178df7797c9c2e75b348b728e39631cf14520d1e2fc424201f4" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" + [[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.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1baf72f08796de0260609515130699b890ac25f30e610ad894bc5856cafdb" +dependencies = [ + "defmt", + "jiff-core", + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-link", +] + +[[package]] +name = "jiff-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e52fe76043ccecc9005d2305ebaadf7d7fc0cc89ca6baa10a94d6bc68c7128c" +dependencies = [ + "defmt", + "log", +] + +[[package]] +name = "jiff-static" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "378268a1116ad67ae6228701118ac9f491d78fda38a40a1f1a9e1348de6f7212" +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.106" @@ -250,36 +1667,255 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "json-patch" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7421438de105a0827e44fadd05377727847d717c80ce29a229f85fd04c427b72" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 2.0.21", +] + +[[package]] +name = "jsonptr" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5a3cc660ba5d72bce0b3bb295bf20847ccbb40fd423f3f05b61273672e561fe" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d" +dependencies = [ + "bitflags 2.13.2", + "serde", +] + [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[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.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d" +dependencies = [ + "libc", +] + [[package]] name = "linux-raw-sys" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +[[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.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" +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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca139e57da4383727f189e43e66e84fa372347027fc996f9f1a007ec0a37996" +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.21", + "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.2", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[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 = "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" @@ -289,18 +1925,484 @@ 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.2", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", + "objc2-quartz-core", +] + +[[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.2", + "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.2", + "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.2", + "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.2", + "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.2", + "block2", + "libc", + "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.2", + "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.2", + "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.2", + "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.2", + "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" +[[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", +] + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896bade328c13f7042a297ea5ac5b0951f6cf989dea5f32c2fd98da398195cb" +dependencies = [ + "base64 0.23.1", + "indexmap 2.14.2", + "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.2", + "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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" +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.15+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" @@ -310,6 +2412,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "quick-xml" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b1177fdf999d2321d3fb46ff47159d9c1fb9ad66a4879f8c50a0b504615e9b" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.47" @@ -319,19 +2430,172 @@ 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.2", +] + +[[package]] +name = "redox_users" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0" +dependencies = [ + "libredox", + "thiserror 2.0.21", +] + +[[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.6", +] + +[[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 = "reqwest" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" +dependencies = [ + "base64 0.23.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 = "rfd" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672" +dependencies = [ + "block2", + "dispatch2", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.60.2", +] + +[[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 = "rustix" version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ - "bitflags", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys", @@ -344,6 +2608,101 @@ 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.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d" +dependencies = [ + "bitflags 2.13.2", + "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" @@ -354,6 +2713,18 @@ dependencies = [ "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" @@ -374,6 +2745,17 @@ dependencies = [ "syn 3.0.6", ] +[[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" @@ -387,6 +2769,99 @@ dependencies = [ "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.6", +] + +[[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.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9adc193c780ef8f159aee8b61e2d5801aaa555e6eb0947fe45530ec506296f" +dependencies = [ + "base64 0.23.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.2", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e17bbc68e28663bbbb90df47e058aa7eda4fb445b89fe70457bb94fbccf6e49" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[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" @@ -413,12 +2888,145 @@ 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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256" + [[package]] name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +[[package]] +name = "smallvec" +version = "1.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" + +[[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 = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[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" @@ -441,6 +3049,367 @@ dependencies = [ "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.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[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.37.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37f381f4e048e6cdf038b5705f8cf14ad108279d46eb968140a7b291aba9400" +dependencies = [ + "bitflags 2.13.2", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core", + "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.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb20ef8e6f97d6fe03039666cd82861f09a38b56291fa2f0f9fe140023f61c1a" +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.21", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b5ae674f48836f5dd2eeaf9e221c095bd3e78a8d0439c77ca93b48740a1b644" +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.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3926b73ac01df7c14f19ff872cd56e67213a87acc0000ea37ddb300f3d11a3e3" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.18.1", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", + "thiserror 2.0.21", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d21d0fa2c0529972ea6ecaf7404fcf40efac098eda0beb06ca682f41e33a6aa5" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9ff3ebb9fda56ceb93d46f6cbb126bae82951bf43498543a5163dde5def49a1" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-dialog" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7527c5fd1678032d116c1a82e5d609c67370e56f858ae6cfd376bbca37fe0490" +dependencies = [ + "log", + "raw-window-handle", + "rfd", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror 2.0.21", + "url", +] + +[[package]] +name = "tauri-plugin-fs" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "466eb32466fe5021b6728b06862f9ff14a9f7e1af890047654e03a96d7c0e1bb" +dependencies = [ + "anyhow", + "dunce", + "glob", + "log", + "objc2-foundation", + "percent-encoding", + "schemars 0.8.22", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "tauri-utils", + "thiserror 2.0.21", + "toml 1.1.6+spec-1.1.0", + "url", +] + +[[package]] +name = "tauri-runtime" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e6d5ef76985b32ff012a43b58df205d25a285e400ca878afcacddc5d5f3238" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.21", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa829eb69860cf1fb0bedb21d2d5f1effce3527d054a68ca1cd7355c654400a3" +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.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dd257082deff79550de3409ed146104aeaf86fe38649615b04a304144939677" +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.21", + "toml 1.1.6+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.6+spec-1.1.0", +] + [[package]] name = "tempfile" version = "3.27.0" @@ -448,19 +3417,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", ] +[[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 = "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.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.21", +] + +[[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]] @@ -483,6 +3481,220 @@ dependencies = [ "cfg-if", ] +[[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 = "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.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" + +[[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 = "1.1.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" +dependencies = [ + "indexmap 2.14.2", + "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 = "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.2", + "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.2", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.15+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" +dependencies = [ + "indexmap 2.14.2", + "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.2", + "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" @@ -525,6 +3737,40 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tray-icon" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b9c52859a94554803ccd4a24b98f74148ebc73b90676d783f3490b1bff9d72" +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.21", + "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" @@ -537,24 +3783,121 @@ version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" +[[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.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df16f50ef4cc145211879a3867ba757076b25dfee812040dcb0658bd9ae7904b" +dependencies = [ + "icu_properties", + "regex", + "serde", + "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.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ - "getrandom", + "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.129" @@ -568,6 +3911,17 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" +dependencies = [ + "js-sys", + "tokio", + "wasm-bindgen", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.129" @@ -600,6 +3954,197 @@ 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.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" +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.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f89fca7a704cee10dcb3654c1dbb8941d1783132f1917358af75bec37a7d7e6" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core", +] + +[[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.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a07132775117d6065853d9d1178157b8c90e228de47129d6bce2c7edebedfb" +dependencies = [ + "thiserror 2.0.21", + "windows", + "windows-core", +] + +[[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.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111e51caca442cafd9bab396628ac4d814880eaea4e63dfd76a12e9f342b5580" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "windows-sys 0.61.2", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core", +] + [[package]] name = "windows-core" version = "0.62.2" @@ -613,6 +4158,17 @@ dependencies = [ "windows-strings", ] +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -641,6 +4197,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core", + "windows-link", +] + [[package]] name = "windows-result" version = "0.4.1" @@ -659,6 +4225,15 @@ dependencies = [ "windows-link", ] +[[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" @@ -686,6 +4261,21 @@ dependencies = [ "windows-link", ] +[[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" @@ -719,6 +4309,30 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link", +] + +[[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" @@ -731,6 +4345,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[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" @@ -743,6 +4363,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[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" @@ -767,6 +4393,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[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" @@ -779,6 +4411,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[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" @@ -791,6 +4429,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[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" @@ -803,6 +4447,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[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" @@ -815,6 +4465,194 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +[[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 = "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.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a819957a01b3119af85e638a38d242af76dbc87d130dca67bfd0441072e21ff0" +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.21", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core", + "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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", + "synstructure", +] + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", + "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.6", +] + +[[package]] +name = "zlib-rs" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" + [[package]] name = "zmij" version = "1.0.23" diff --git a/Cargo.toml b/Cargo.toml index d86cc97..b3236b1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "2" -members = ["crates/coa-core"] +members = ["crates/coa-core", "src-tauri"] [workspace.package] version = "0.1.0" diff --git a/README.md b/README.md new file mode 100644 index 0000000..0ab0bd3 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# CoA Server Manager + +Windows desktop manager for local Conquest of Azeroth (AzerothCore) servers. Tauri 2 + Rust + React. +Design and audit: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md). + +## Status +| Phase | State | +|-------|-------| +| 0 Audit + architecture | done | +| 1 Foundation (fsx, registry, manifest, logging, error catalogue) | done | +| 2 Read-only import, process observation, Start/Stop via repack launcher, health diagnosis | done | +| 3 Config UI, 4 Backups, 5 Clean install, 6 Updates/CI, 7 Bots, 8 Client, 9 Friends, 10 Polish | not started | + +## Develop +``` +npm install +cargo test --workspace # core logic (scan, fsx, manifest, process, driver, health) +npx vite # UI in a browser uses a mock IPC (src/dev/mock.ts) +cargo build -p coa-server-manager # native app (debug build loads http://localhost:1420) +``` +Live checks against a real repack: `cargo run -p coa-core --example scan -- ` (read-only). +Start/stop testing must use a disposable copy: `tools/make-fixture.ps1` builds `C:\games\coa-fixture` +on offset ports from the pristine packaged database. Never run start/stop against a server in use. +`tests/e2e/cdp.mjs` drives the real window through WebView2 remote debugging +(`WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--remote-debugging-port=9222`). diff --git a/crates/coa-core/src/driver.rs b/crates/coa-core/src/driver.rs index 1d49e72..96cbee7 100644 --- a/crates/coa-core/src/driver.rs +++ b/crates/coa-core/src/driver.rs @@ -41,6 +41,7 @@ pub struct DriverOutcome { pub exit_code: Option, /// Human-facing classification of a failure. pub code: Option, + pub human: Option, pub output: String, } @@ -128,7 +129,7 @@ pub fn run(root: &Path, verb: Verb) -> Result { } }; tracing::info!(?verb, ok, ?code, "driver: launcher verb finished"); - Ok(DriverOutcome { ok, exit_code, code, output }) + Ok(DriverOutcome { ok, exit_code, code, human: code.map(ErrorCode::human), output }) } #[cfg(test)] diff --git a/crates/coa-core/src/layout.rs b/crates/coa-core/src/layout.rs index 0104752..a30f095 100644 --- a/crates/coa-core/src/layout.rs +++ b/crates/coa-core/src/layout.rs @@ -125,7 +125,7 @@ fn hash_exe(path: &Path, release: Option<&ReleaseJson>, name: &str) -> Option Ports { +pub fn read_ports(root: &Path) -> Ports { #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct P { @@ -195,6 +195,9 @@ fn count_bot_keys(conf: &Path) -> usize { /// Scan `root` without modifying it. pub fn scan(root: &Path) -> Result { + if !root.is_dir() { + return Err(crate::error::Error::Invalid(format!("{} is not a folder", root.display()))); + } let root = fsx::canonicalize_lenient(root)?; let mut notes = Vec::new(); @@ -402,6 +405,11 @@ mod tests { assert_eq!(scan(&root).unwrap().classification, Classification::UnknownCustom); } + #[test] + fn missing_folder_is_an_error_not_a_verdict() { + assert!(scan(Path::new("C:/definitely/not/here")).is_err()); + } + #[test] fn client_and_random_folders_are_incompatible() { let dir = tempfile::tempdir().unwrap(); diff --git a/index.html b/index.html new file mode 100644 index 0000000..53c9d0e --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + CoA Server Manager + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a379ab8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2288 @@ +{ + "name": "coa-server-manager", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "coa-server-manager", + "version": "0.1.0", + "dependencies": { + "@tauri-apps/api": "^2.12.0", + "@tauri-apps/plugin-dialog": "^2.8.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^1.49.0", + "react": "^19.3.0", + "react-dom": "^19.3.0", + "tailwind-merge": "^3.7.0" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.3.3", + "@tauri-apps/cli": "^2.12.0", + "@types/node": "^26.6.3", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.1", + "tailwindcss": "^4.3.3", + "typescript": "^7.0.2", + "vite": "^8.3.1" + } + }, + "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/@oxc-project/types": { + "version": "0.151.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.151.0.tgz", + "integrity": "sha512-J1yXrIlNDZVzE3ada310xeAw7nH8yCAyLPuUIsjKatFPmfn5bS1oW+cM+QsGOtVWd5nhSpbwZWx/rue+r5Z+PA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.11.tgz", + "integrity": "sha512-A5kXfGKvKWWZE0TtPrfsvT+q4Y5d1QG8gGUzpYjGydM+fARM9MuX90PrXYXe0XbsDVgyxxNzHo6giCj90bsFNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.11.tgz", + "integrity": "sha512-z6cTycz+iJ4PVkuL4HHW4DfTfoeU/2nqYYuSOrTmH7yHK5Y0LCOnA03V4ZNxavyVaU1oOqUgIg2klN/s+USGOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.11.tgz", + "integrity": "sha512-jShvqNtP6vDC6/A5JOAzbVV+DkgHqhl/ScVCJEbt+TUY6QYz7YnXcrg3sLtFBniro0f/Ld50ZwCWA6f7KYD1nQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.11.tgz", + "integrity": "sha512-f2i2xiNWq1Z1l2++q2fuhZRdLAT3aqxD6vRNm1RAxpUoBcdqNB3C0s1Bt+K+PbEx2F5F4gQp6hqKkphCY/xF9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.11.tgz", + "integrity": "sha512-4Ir5FSOKIAMr4r0kExpt1s3bMgzJU3rA45AYOHtQpls0oNeqcYBKrWMlckrYH4KCfGLfkfn1tN1dmZPMVsdXow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.11.tgz", + "integrity": "sha512-/gnRDM+39BROzAN/k1OZjDPnDMcZxB/0EUxKjONO5yVkNEvlsoMDrxGNKgZi/ttFriS2gwlDNzB65pvNbFOXIQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.11.tgz", + "integrity": "sha512-PFaK8HwvAHbaKbBcDNQihjMKYvFnA5hiENx/l5tphTDz1E0WFp32l0A7aq7lyUwGsRw/xSrNIy/gIK4thrSCrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.11.tgz", + "integrity": "sha512-AskzJUIKRLPxkruR1wLKewGbOw+EYfU/9lOrBFj4AFrEA8hPpKFnODWNu2WLaNs0QNkEb9QIJufmVZZIL/bJlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.11.tgz", + "integrity": "sha512-qlUGAheh2yh8afH7QBgx0PrRHN85hKnNd78x8MeMhXivuevgd8vgf6/CstOzmNKY/lLTHvNTrPy98cLnAugzJw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.11.tgz", + "integrity": "sha512-secpEad+0vCbSfn8upFySkDskv+bGPk3THSDS9Y89yc4rb4kzqHp8Dmyd9BkQW4SnhNXBZCl/6CrO//hZahNJQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.11.tgz", + "integrity": "sha512-mOVBT3dPpkWm8XBWPmU4bf+U6dYDLeMo/9ojUmis4N0L5uu10qra5vOyngZ7/PSdoE4G9KvRt4bloRxNjLas7A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.11.tgz", + "integrity": "sha512-Is78i9A8Ui4SqcxUwFJ9uMmjDn58IbVTjFWYdQestFEgeuEmHMLGNriXnVJKkwG2YiZjw8cP0zCTyDMdDGtOOg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.11.tgz", + "integrity": "sha512-dUCXneZ87INUMyQ0D+C0HrEBNUPNXHaPmU5GTjyKTJEiussw9Kaj5Ln8UztPe4epV/ffvgNBEadksdYhmW6xJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.11.tgz", + "integrity": "sha512-jByxb6qfd+bH1xUd0qnfFnb17i9sWBPY2tOavJ0l3tdr3OTu+Kvtm8cd/JV5nFt657b1VqGltxg9olOEfofXWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.11.tgz", + "integrity": "sha512-/PzKqzAJ03i19oy2ItPvyvaVjOjBCNnfaJs8yvUdGBKmiESgnrJSQ2awd81QzFbbnAmu7YO9ZnJrDCb9VSJPRA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tauri-apps/api": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.12.0.tgz", + "integrity": "sha512-fUSxFX8VABYe9W9K5ROdEaKVkNUFRcMSRofjruvaxztXA+I0XnQHcYHF8m/a6iExRUxsUf0HsFWhPBuH9IgzJw==", + "license": "Apache-2.0 OR MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.12.0.tgz", + "integrity": "sha512-GIShnAR4C16kSTA8NO02fo8fOw/I5z5sAUEB5S2HlPHFnBkbihL4c9a/MpkxOm1+q5S+tFd3X4QUjHWxfyGzpQ==", + "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.12.0", + "@tauri-apps/cli-darwin-x64": "2.12.0", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.12.0", + "@tauri-apps/cli-linux-arm64-gnu": "2.12.0", + "@tauri-apps/cli-linux-arm64-musl": "2.12.0", + "@tauri-apps/cli-linux-riscv64-gnu": "2.12.0", + "@tauri-apps/cli-linux-x64-gnu": "2.12.0", + "@tauri-apps/cli-linux-x64-musl": "2.12.0", + "@tauri-apps/cli-win32-arm64-msvc": "2.12.0", + "@tauri-apps/cli-win32-ia32-msvc": "2.12.0", + "@tauri-apps/cli-win32-x64-msvc": "2.12.0" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.12.0.tgz", + "integrity": "sha512-v5J+jISihLGtih1+3yWagbsL+5dbLZORu4vaSI0vhY0Heb+MAW+T/1s1RyKxrQrwEPGBG5kqwfDDTnSbmVkuqA==", + "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.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.12.0.tgz", + "integrity": "sha512-g27I07pfW/dMS8vcNqB9lamgKF0TqLlcy8e7t9qDGsB1iaeyjJWb2TgBF4tM9ZwLqPAZUXbsz28oXljO12WC4g==", + "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.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.12.0.tgz", + "integrity": "sha512-gXyQ710fNc99YuxFxNyeX9PLSrIpbtgBBj7GQo9tSeRT6fIK40q3/gm7X5jqZo7mWLR2m0R/2ALd3vAWo0Z32Q==", + "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.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.12.0.tgz", + "integrity": "sha512-H9cyXuq9WgxoHh2NZ+R+oN+W78x5UwaBDEp0/fmqUUkaBoioCuOZErM9xKiIV6bpNAhmw1RoWZ49u37q/vaiAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.12.0.tgz", + "integrity": "sha512-5tFuk3JKMBa1M/iN4gN32OYlSfhY3aqb5PO3zCugxaT+sfecyMKpc3EM9VDbhmwWBE9QD4Tfj7wGhlqx2yy2pQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.12.0.tgz", + "integrity": "sha512-LOrMyV+nb7pKq8P0BZtTBQuyzm1ORjn16R9MlupmxuT5LqxtuYJlw3VMwbaeXCToJ8jbP5u9JnkfmbqDlvETXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.12.0.tgz", + "integrity": "sha512-aMIkI+X9qvD2+k80QZB3tuOYT41/cEheikC510CwAIZ31KLXORsRASYYzM4mi1/58ICmtzSLFhCC08keir7COw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.12.0.tgz", + "integrity": "sha512-9gl3NhUbfuGhSKjeGCypKSdtoezOQRcDUrkhTWtLQEjnajets6peO6NadgI2DF0OzbiiFOzrnnIGMwBS+Ap6Iw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.12.0.tgz", + "integrity": "sha512-1W+v86wsYLuyBDN0iDessD4CD9o+yNyO0m8Dp3+/vfjiZrJ/v7R7/aTRBeikaq2tLGgxeag0gxnFggBNBGw91A==", + "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.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.12.0.tgz", + "integrity": "sha512-SsBjvq4f7YaBGqcWoE3cycoItPf0SrQeqFqWWgfxoeZWAIz01E31LDSeZ2p/etJiIY0R9oi045chkFfb0O7WGw==", + "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.12.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.12.0.tgz", + "integrity": "sha512-9zzDKYUH4TKKBgRdDdVQX8fiRO5gJ8hD1nGsHU9DOHG5Jpm3arjbu9Xg1frR20EusG3Sl8X0dppoO/4EoUXUGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-dialog": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.8.0.tgz", + "integrity": "sha512-HSSD5C8UFE9ijD1wue84F7jjaIReFmj8AAPtS+xyjYRltJafIc4BiWHY7SJ6vbbew6u+YljEJHfyNfy5VwywXg==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.12.0" + } + }, + "node_modules/@types/node": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.3.tgz", + "integrity": "sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.1.tgz", + "integrity": "sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.145.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz", + "integrity": "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "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/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lucide-react": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.49.0.tgz", + "integrity": "sha512-ApfaNM4/7jBrVopqLJ84Jz8TMQ1Q1JeZ1PmKh25aeS3E1FTVcMkSh1bEQB7dfzdIrwXRP8p3z4AJjTIHHb5IIA==", + "license": "ISC", + "peerDependencies": { + "@types/react": "*", + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "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/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/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "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.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.0" + } + }, + "node_modules/rolldown": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.11.tgz", + "integrity": "sha512-qpSwIyz0jHQq5qXBTNxFmE6664rJ7O+4TvPFOiOaBSrz8IOHc1koKKSqTM2H6u1UG1+TveuC6vaDHKXFOvb1Kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.151.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.11", + "@rolldown/binding-android-arm64": "1.2.11", + "@rolldown/binding-darwin-arm64": "1.2.11", + "@rolldown/binding-darwin-x64": "1.2.11", + "@rolldown/binding-freebsd-x64": "1.2.11", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.11", + "@rolldown/binding-linux-arm64-gnu": "1.2.11", + "@rolldown/binding-linux-arm64-musl": "1.2.11", + "@rolldown/binding-linux-ppc64-gnu": "1.2.11", + "@rolldown/binding-linux-s390x-gnu": "1.2.11", + "@rolldown/binding-linux-x64-gnu": "1.2.11", + "@rolldown/binding-linux-x64-musl": "1.2.11", + "@rolldown/binding-openharmony-arm64": "1.2.11", + "@rolldown/binding-win32-arm64-msvc": "1.2.11", + "@rolldown/binding-win32-x64-msvc": "1.2.11" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "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/tailwind-merge": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.7.0.tgz", + "integrity": "sha512-XPPUyAc+cvspz3lHTcR/QgPfW2A0lv/xQNIjX3HGhLR+Nq2lHaLq5MtTesHn8GUr3W3DguT2KT5x3NVgRtYwmA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc" + }, + "engines": { + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.1.tgz", + "integrity": "sha512-/bvH9E9tmCXRGp2uXY3WbOldqpTwFkbha/8ANaEQ6VkxhH60KyqLwgZq6lG2y+4uT55x9+9eUHMpQ7uGnOCKjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.28", + "rolldown": "~1.2.9", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/vite/node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e047dca --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "coa-server-manager", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc --noEmit && vite build", + "tauri": "tauri" + }, + "dependencies": { + "@tauri-apps/api": "^2.12.0", + "@tauri-apps/plugin-dialog": "^2.8.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^1.49.0", + "react": "^19.3.0", + "react-dom": "^19.3.0", + "tailwind-merge": "^3.7.0" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.3.3", + "@tauri-apps/cli": "^2.12.0", + "@types/node": "^26.6.3", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "@vitejs/plugin-react": "^6.1.1", + "tailwindcss": "^4.3.3", + "typescript": "^7.0.2", + "vite": "^8.3.1" + } +} diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 0000000..500fd8b --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "coa-server-manager" +version.workspace = true +edition.workspace = true + +[lib] +name = "coa_server_manager_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +tauri = { version = "2", features = [] } +tauri-plugin-dialog = "2" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +coa-core = { path = "../crates/coa-core" } +tracing = "0.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/capabilities/default.json b/src-tauri/capabilities/default.json new file mode 100644 index 0000000..b69f2ca --- /dev/null +++ b/src-tauri/capabilities/default.json @@ -0,0 +1,7 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "UI may call our own commands and open the folder picker. No filesystem, shell or http scope is granted to the frontend.", + "windows": ["main"], + "permissions": ["core:default", "dialog:allow-open"] +} diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..84e4f7733e2ed57a2950265338770c2496021c4c GIT binary patch literal 6415 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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..dd73ed91ecbdebc6b128f41b313055bcfa68ce4a GIT binary patch literal 1490 zcmV;@1ugoCP)#QIhagl(RV3{Q|HFfH<*OatHUR#RQDKFnDS{hmN)o-aB$D+FOE{nzi7U9eF*PENWq7Jd5O9PVpcdG|<}UM^n8=C6dY7 zh}L>A63^hZ4mEy5lF8$R_Xp5_brvDvMR_@vB|t>EgP^?l;hWuP z6QZ#U0iXQ;`JXuXWgH8Owt|_g*NP<|+49Amvow$1AH#Epw@QMxAZ8#jvxsNkzMxR_ z$o*1c8a{vEty1XInH-Kj-H!XZHz8Tv#XBDjFI8_jHl-%RMG`elUe$ zDbazuqAKCWs1FTwKAiq8F2ppJC7_q~Id@C8lW@$Iuyg01eUp#{JgVM=@OrJ~6z>t? zm^}Mc-!zW*jv^wp=UNZk9m73cQKW@iOm;;AuE?;}$aWHrH7D%RaDhOTiX2sWqr#xdhhTY{`Dg zD;17RW}mawNGhjFzcgg^nYlcE9a~WA7;?644#1XJS~&-ZFQn{s+@U={hP#KQqHmjWS8uH`Z+C?u0~^_wo_j9Dl#DJGt$DH z+k$9m^cA>}ws2)6t!&ywR(Dm5lMJnse$Lh-3N#i|Y4`fepcSEgMAqOhTk_)N8H~mk z)Ml3?yu4l=<4?dd^`8~9^9{1i65r4_6GM+j+wmJ!^S{$P|$#9sU z4bxKTY6o^lF_E+stcI?w2|Mre*}Yv6y!1qi(tfUW=KBQBT}-GpES(pZxuM&;{W3u8 z-`yZ2^uQ9;qN@>+0r7^c)YTM)p~x^`VOZ51s@Hx#&REnyp5*lWh($ literal 0 HcmV?d00001 diff --git a/src-tauri/icons/64x64.png b/src-tauri/icons/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..f45c7cbd84f244ed4d0696dbb1d7b0c14c2500d6 GIT binary patch literal 3249 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..211147bdb7493796b3f5b89af1a4343ae3106792 GIT binary patch literal 5417 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 T0z9ax00000NkvXXu0mjfIo(a~ literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..70c001b251dfa916915144e38fa7d09e1c498c1e GIT binary patch literal 7236 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 DfdaWl literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..41e6ef5a5b0da87352ab44273a5eec3f697df7bd GIT binary patch literal 14688 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..adce861e184fd5386933728dd39b507c4adb0c48 GIT binary patch literal 1350 zcmV-M1-bf(P)T8DMcyLM{!XdxJJP)2_Wo)_6V8fPyZ-1V_J0Fc;dai(2#H#9im1Dk~7pE=F z5uAIi2VM8ZFrTrdd?qGmi?}kJmdvu4OF0@~^>GUiv`5jmKY`ZfFfzFk>S7^GOy_ap z-9h~ER~E6_)y|hWX5`F_{X2j15O(j1>dZ}3;p4BS@Y#1WxHE4r1*pO0`rv9vhVb0s zM)V)ssgWKQuuVzE$It#E?-WrJB0wvuS`(=~eRo_G7Km@SF!r{licS12?jG>|jy{+n5aN;4faDhGnYd7^>`RI_KbtN1Aj`Szf+; z`onQ;u&F+zuURr4ZutnV4Y9;$u8w4I>in481JW`LM;>g%Gmq}n=cb`nJLWucWQbmt zn>}TDFAt_9@{rDGz472ZKGTq}aP@iy7cNdp%S@@Dix-}3L9JA(vd>1qNF0amwzwV{ zB9=g6c^N=};EgN>orqcZ;?gW`P8K8}4}05U=n=d5LTL#bh7T&Gdr5L&4>>YKFM$-2 z@z?|tYNWHD^BD)1t}V!TDFK#&Lwl0CB5Gx+xyVSt;>c`uc^dV=uj4tCe9)sqY#YW3 zaCv1!2QM5m-Dnr75sJjk-3&LqoZNTZgAbDSV3@<;s zOLKi~*u-M(D3j&k&VeFMJ*Bkqu`{pi#=))_W`s-_EMI0tXhR?JConj(U}Nun zQJj6X12ti#wfM)OIeh;8l(t<-nak9Py)U<{dK8*jWngjB}y8F0Og0HeKTxoO``TdL7Zq zLc%Bak_O30BnK{z4ADy3G{7#>R_{%;$BWzMB1_cTUu>ZLte+Nd%l zd~z>oFkmDCk0V3$vN!B0%X{X+b^JM*uj+J7$ANP?BjTy2ls2ji3E!(Sw?zqr=p~TY zQ=*qB-qdEVas$tsEH(9%(ngi(C~t37nUP2ioKubr(Muq4O4i%ptBrhxVfKuidg|{c zv4muQ7vhf+GYp>HmTwY)A?_Ac6%kS8>tHLi?cbeTcl$K!AAV_#P%c?y#Q*>R07*qo IM6N<$f`b!_ZvX%Q literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bd242aac683caf01d8667106525b3a71b8ee9f47 GIT binary patch literal 16258 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e329ffb7776d726cbd780dde97470a8161fa9bd9 GIT binary patch literal 3639 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 TupiSj00000NkvXXu0mjfOU3EU literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..bda5606bd42c9bcaa9857cbb6da6d42f7e064e65 GIT binary patch literal 106140 zcmdRW2UJu|v*4XT&QT-|Ny(r{kT_(Js6+_@l7oPN)}f3IlV z=dUR7L)@VpL{HS2%okG+0v4wy&N+;6^DkWe7Q>2zrud&Ucy9)OOX^b_7Q02Gmap@Y z)43i_7(t1W&)0$Ka8cg@2qWYPkoh`X5H4y$P9Q=)AD*Yf^%9`|KZw-&ll@I9g1P+t z(?zA}ed`I@ZEW}#?cu1i^y!AyHu>2loO?=B*9+l!_y(h_zf*YQtZJI>&ag1|>UzE3 znk~dG&8QCPKP7lEJCmwv^io6I91uexwgNeEIe}I^!mp=M*Vk$Sp1a>x>BLoWk8k<- zThr+SIpp(E!t;+({3fG{i@8%s_E*QR-iJ{gP#hn|+Ys%w$1-W$j8FXK6bQS&(q}#Y zrSP7p{uZo^C;RjKCW<=dENVxty)RV&kEA%V%Is9SD}$-&)~y%UAI_GQYTh%`d_j43 zzABiltVUZ+?KHP~$O$R;c$)Qpg>DJ(;@dyV~zw6%x^xgggc0rQ1`GjZbhmYBy`~KCH6P`#??I&Vv$x2iGS< z9fvQ@`HrIe+m^NsCAga*cLG`#6%=m2{a|}j)!5x^XXP3fq=iB#c2?c4LW#a(;Y|)s z072$X7p=&T&V{@zl*1V{&2!{~rI6K+HS_lK&ny@& z@(v)Ae%jta<}ToGYr+|r_3GFhgJFj1Z<#!uV`wE)r-jtxamfW8d=aQU%=cbO7W4n@ zUrvpowhurOppEdD&yEd9mjc~~G-`e4Ju`+3I72s;c4;oiA<#GbB3gnIU9Mh(feFls z8PIBLZZVw_9cbDM7pdQGRi-E>-w8UunsCilFU@LZnJdV?aZ#IHuBs%PM+bp@p>9V= zeXC5`sP#^5v3|?zZ25>2$_YrMuSnZ_F><}$MjRmkatOX$U;v>$;m4Q==0idb;3oP! zBssBXnZgh%E{A@(W;4iK_^zrvA$XTYxMeT3(v*$nEYTP)gnhg@?7Cj)FD|o1SxnAw z^zHrzhBAT@eR^_2_jaId;5=6REw(VBFQ0~SUZuuSz`P$YhtI+66O?U%t59mn^PP{d zd&y60p_*5DAdEA=Rh-_MR0YrfFsMC!N92paEt>hQ_^xC)A;$!zrbf0M7b+QC8#Y+s ztH#cT0yW^1&_RZ!VA;GFjF1NqQ1Z}`)eq6kpkwmGmsPdsQI8tsEYV3t5?Ht=VY|fo zo+lhl{_r~=HG&CYXK^PFOKRbF0D(FK-91cfM_)$6PfDE@JQw|Kf78&Fo7Y1=aRT__ z%8oSRCD`>c0iC1ROz-J%s2IWL(Y zszJHur#7*S!7MD>zSNo*b00(Fub!uMX>0Ki_XscL=C0|OY``B<-?BVfvNkAZ-%S&j zx)DI#l;lCs>@|jnd5y||m@-fkoQM8`9zHe&PH8(!)Al) z?IF{tr8suUVb|{;LWa6B?i;<|J~@rd2$x)VFZAKAP5VTnw zz~~np0S+BeIEDb5?7V?pAEE6CiI};9Gkd6PS2$TJxn;?E#3X(Htp#MN&Mt9!RI)uP zb?M`mDXB2@)sorn)xNK->aB-~1h=YNH+I(NCCB)5fJIy$8T@ELeyx<!j@6;(BDdp$RhK*M|?I?_adky2!5)hN+ww_1jcFh)|%+NogC2X`3K7&Wgr4 zW35n7evy6$mg^H;a!2+I*$we(I&Y-dE;@A8SR{2Z`Z6ph|T(J9z+$+|d%C;N0ghdU?_ytOd-ZwcTPxiOcQc4C&FBSqbY$XPE|a>$6{)jpfM_| znX)`@z011y{H_6nNID#=oPcjUXqx$)tS7GZ9wl-J@qh}N|9BQPN{%v|{^}{me*P<1 z){v*JNeB(o_ftzb{a(vaUtW_NbnJuoXjF#vXkMzS_uaMdVLXa%Yqsi(7qlncD%nFz z=UKPQ<#inJDbd93Z9cEI&Ce`iHBj;Du)75XpH_OsJ@;*PwLYBm%BHsk*(4LM5r2Bq zHb^ewym9ExvuT*%{bL3@1N(f4i6;K|lEzSp=agdD2iyO4sgq#=HA|GWKUxzUow2Ix z$%9AQ2xygs(v-B`Y=8D}*EjI=!+F?e8|{XQ`RWo{B-dyB&wQjE-VK$B1`qn_eI7M* z7yUxr#aV2j7(Jan$192TICO(}CiR?ZTPSx@9qx7#Wh^n|rt^=G=ts*PF!_j(`vg{< zyYWg_Y~!0edDE_aB}NK@%Dzi*ShcomUQw4FYyBNc6{MZ{ij*ZnaOQj{$S;xrP}B)A z4xF+%4B6x+%+@j0>uU;TNJ8JyVlDWFV6f0o@uD5q(qAy#nATvZ+`q?UD7C<@0e$WT zsmo(YaSNKKD(;}3$qSzuJfYJ(pDcQC63en~>G8OlBfB^>ut1SejKHQXp=^_8#9^$- zujA$K$s034Ca{$1j9$wj>ntotmAUB|vOxtwFSV7eHQjfLtF+KGZQy2BFZAc>Q)~9u0BFuEWTcU3c1NCIB7<-BuwSpu_>S?EY-qKgorHVOr{$EyK z&vS01x|w+727O8WcHHNxhQwdU|9;ec9~NEcJSL`kO8V>vXY6XaGu1Es@SrHZ#|>pQ z)!Cx!E5(6$QQ`+w((35=f|-P;^=Y$FD&_!1Fn+aRZt$t>dJf8?eqtrE^^8z{e3HqR=*%*kEMVzb$&qM_QP^n zLZR{xL=66Cwx(rSS2S6@&wN-mi#LDW9C%qLKohhhy+vr*tXLp93RS43v1w7tjeU2A z|3`v5mf)JYibJ5OH6LJi-%hK$RNG8iozMvh{cUxd>(;sQ#`tNbd7VO;bHsA`PZ3?# zXd=w7-OSV19ric0IVk6KwuBWd)Q0VjZ)@(gt1~&LD@VcE0Z@vlTJN+VW#VqS#|ch< z!Va4&$A|e{iiq)qc5)z~wBe*P!1l;5M}3i{dBLoQY&L2v*E2Ry@2DA112KLuOujx_ zkpE6xQ?>Q!!1DLLlJz)cN$eW#_|7m;9EQiqPVF_)A1~iY7DSWcZMt5OFn@f;;KMw# zj;%JlMN;(m%~ljue^WcTRC5YC8@rQ2{>8lh^g-O)6e~URvr)$5=stcDXwG{Feaw)i zL+$x+4dp&3i*8`a@%Nuo{>%~_EZa4<$6R~w8j#Sw9Y9}dYqCt7WR60bk=*p->xge| z=gupOKRhLWTP?10QJ)2Xk?3}r(2H?0kBt&3S*JhIyxy*^B5eq*(rGgxN(6QE%$x(| z0i!%Ridnu@Q5y3-K%(L!J8*rgO@VEkXL%ucF#95iMFU%4G8<(cu}AqC{~^G0MqRpw zL>>y2crZvpfh5vu4T&z5Yb5vlx#lcenVf3k!$%3rn;lQsv)!Mrs_!5FR`<0jk~>Nu z44xBjGf8pe^Lo-{T5Q4pdKRtI2DsGB{@gxxN+CNxvtJJMvr5>cu#S*T&yozP8xfN~ z{ABn}&~Y(kUs*u6H{z3cJLzh8Zfu`J(R^&C;%VkVevFdc1gT?3!~U-KZzlqEr_*1G z(30_h05dY_E$i#4uGcwjmZBt|wk>{;Rx(3TO@wHI>x#2_d%B5zCgxcj$`Us`FCH!f z5$L13?!60<>`zY!bTc%)U9L&lRF2-YrL&-_MCCC_toIfDpqc#DFnPU#ph(vCC_f!e zCN+{W?E@8tk!PKbu}A%WWiAZga*_$2a`vY5yi0&N5{tHe-Ucp(Y`R}88$0&x9pd^l z5$d#j4I|HBp+%RC9Q`5`=Wq5k_Vi8u6vA2U4Ze@c*MF;x}E*2vzE@Q;8M#yAhoXJnRMFJq36?O zbDhBkJ~M~|cl^LuJO|{cx>ENM^#zrf$4nR(Fe8*2?nwNh!I%K$D85fGR1U)?@yiL_S6Q_kbkdU{Kz%B?L_= z`;v84$2{|YId%q-R61(J&H@0QJ^JdaZ21ymU1WuqckIE3gzJCTx0 zowC$we6zP5`AKZUf(ycIR?V^HEOFHAGKv+~EU>8Ox?Dxodj{YLDg$ zneRo|ygM+|_(A>s3otRmT=3!IJu&5t? zb+61|dE<2xaYF)Lg28}=`|7Q5<_02gfr#ggP)Rr!5scSBa$#Z?X5BoAY!ySWL@ywNSJ03S1<#KUT?Q^$vHtHaC z!`2aRgWaTg)AxBuZsw*AkAaIE(nH(%qPN&Gaf&XAbGDm8EqX%bOVy0{_wZ=oZu=OTxh0bP%Q2!~;L3=-SB}7sv^f4ql zEU3EuN0`|y&NERaTb7O6(_8G)SjP)qtGM1!<1W8|=_fD;M&9SKc8~HmrG9 zEPY?5iJ;XB=dPCy^PUe#5^8B9I~(Q{&Gczc8fT$IHUrU_F~U5VvDN(N0UIRv1({SvVe+#2OFW13y zWY?o9rv1uOT9SPnA%f^wN0V(Yh_yfl1Mo6W#bqUo`NvVS^Hk#nmTI*&dpvj_OT%(A z9=?tpHI9eT8Pl$Iv^-1IEOzLzwVosUE)hTm>?kRsS}VKDv*#VLgx>t0nMKiuKP?73U+W2A=uf2uCP|y#-^paG#H5ZDaS>fX zdtBeeo$7cvkRJccML!KNcuy3<=OKUl0q`>xty%RE{VcSzNP3ir3+uuU?X>M3^a;%u ze;m*4B8PrBF!4OayI`k?5Y_%hgl^aGz5WHw^{KD-US`nf9{*<3Y{#YH%ArLG!^#nZ zIv)WJR}0)cyHA#bWocMNV_05VXm|2prPGA%ib37oS+4kZvjqrQJNWpwUcht4x;|g* zX&y<6l*{xpAkP+{)~%{?-_3z^(h>5U<}<>s1KJD;aSKX1rP0%TO2;-(slp$ws&9NY zw#(HH#kX!*sFC;UrFLz<71X-b0kR ze1DjSdY%Z}i!X?K{yNReots)WFl~-b_s;kA2dwdI&yA&P2{US!L_$ZN!dpL7w#1vX z(C*`0b(u_ze)|daFy`7}XAQll;iv<-&}-N4{3SkBPR<3CI{D&i?|!`d>0c!ow8&!s zM-lSyxf=-;OC(Zs#T=31yeZ8QH>|7$X6x^By{0E|8!KSTkwfY&J+mcJ{(4_645jN) z;fa&?uv6U#_V%YP(Lc@%o?FN)icmqjF4BuWmki(mC^fUdvrG-^IiZ%2T8j zsK51^Ti2kFk4=Q1A>W9^He)`9s*6@d`Iq76eEgE?xO1!}vyDn*-5rOA9;H@1Cnhbn zcp?uwtjBDn%UEQ=9gjCNl_CRg@{&wu%*>PWJo?^0=|b^)_(S-xR&kXx6#8%o@8HvI zx#(*yMzEQ3kKU5!KQv98LP0yjLle$xcn~Vl$2(KjZ27;)USG_TIhqGg7yKUCVODr;8^rPu(#Ff@GW5DNCn3VDH5K|zf9yfK5 z;-e^WNB{L5+l=9tJApH`p%0TGLV+nruEf|JV&3me3)EIVcS4S#qCB+1}~$C zEXFhTLgU(@7*@o3MRCP%Zqx$5G{_5AX@od6Vosk z-t8_UTsnDHVeOJ_qGKy?EfUD(VqLDO~Tm;BDfbU3hnmO-6&ZCGd;BB`~&fnWbOqBh?AAE9m%<<>H zToKbXOP1T6c@i-*nRH`?Fe(XneZnmVF6Rekr*BvdX_I@In&M;Maz4A&9+aJ}L#We# zs)$YUWTHZKxZHDf>lx>leo4@dCG+I-AwHdO)5i5q)eoa*xNsNfR{} z=#KTx=;K9Wpw=F?kscU$0mrv6ZxWd=v-m@9m2aJYpj4i1&WSx!t;a94*(fS_wfe(j zWj))gLvrj~Y_QjpufLKqJ3DIH0>e9S$#~If&0dL5hKJsRapm4s(U7gLdEohk zy^zl1NsM_f!9^n!#c6TpE^=bzBWQw~*1W(l^5di^EW~sc7lDg{u(n5K-0Yh@Y{r^@ zdHvM(i#`_t*EN!h{5i6EEFHJqCl`3*a!5X7>BP8thjsb-N{Ci>a|B&e#OM#n8?7V# z_TI!E;)T+h;N}&ZRn8N=w7DhAFE|;~FN!h+oF3l`#tjSB3CNay^_|9ii2x|l5m7PC z_5Bj-chXY}xj7S9jTE~9>BcaWCWTVB^QZv z{Z;F~3J@ESotfRZ<^8{KXI>ki*z!D{yS=jzb6$N?M4Wu;Wnt=Un&{6w?drU?W33^Z zOfg@ss(G6ph4nqrvEgC; z3e&t9gtf?#*&Xnz-JA4VKKW6L+L<~{w|aB-y;wUx1=k}&Hs@>XkD00&rUH@GnxkTg z>bcy03IH6#*v&qco6K|{P2a&Z<#SD>HR&T`Bt+9XKh9U>o+|cpdClW!x`d?NSHD7} zj5s?@hx6R?;wsXgm@PrG-8i3xI$Ii|Jsp3KW|oC1bdl*u=sjyK~$5e zp`5FvgCV_^V`+0LdGK)-17vnB)W+(h8Jc*j+_Fiq+F=7cp~F|2H!mT`TUt;%^p5Ly z&E2=tsvX2xsD?)4#aV_|-$b5i1gnWGs%v1g$V0bxyYH-Fo>QFk3~qLwxDL{)ye7!| zY)p7%4KqtotpDS>p~a92y+i9U$B!tGv&(apH&XL$Hn=D zIb_-B_`zZ}r1dUUWSh<n;-ma_5z^-edPBGRwAO)Yd6edqncUcv_LUTgRq) z*$GvhjDypg%U$GtJP+~En8;_aZ1&G51)^2PeLLHSCZ0n-u8n)Rg&$reRb#$SAydIp z6V%So9h8RcZwV@NCvp+&QqS~Xk~~~5>Uylgm&>7n*Z$misSL^*c$<< z!##Q#+gp+^e3Vx@*3UbG?^gp$e*8QkwKQamEWb@7SXM;#HzQLJtoioIiuW{mW7YbS zX>&U{>K9?+k%8;l#v&(6vga_j$j#q_f*wQ--^TasRez1)+%= zx@|m2N}{%cGBaIuA4k}pDrH$L_*0nIIt%qYb)g42H+1XmK6*#6en2zVR7CeZ^y=oL zV}?iH;bXoP@0KSk9N)ZhiaV&6oE!FkhsxMkQP99W#K=wwg?&4DdjHo({*2AUQMRx# z&vILXZ*0){QjlYbc9g^-3lS7Ouhg}LQO!AEVl1FhH?~H{%-pzQm+Tp$mHD7!LsfYF zwva~ICOtJ}Vl~PbrmPX9;rYGvVkX#KA~55+q*dB=)e+ZL*^R^9wHOwu@>Cw4q~{#i zb_%3J@lZ;3y>?@fzSiB><*I~O^(1Ta_SO$MQ-)*Z0r6Jt$JFqB!56^)ni4&Gw z$z*{CrhU0~t!!JFXVMKUA25a+L1xr)JQO_^ZX5*YuLQ}aoOF6pc`xBoat#mFU_Fvw zjANoI>!rIlo|X=ysqN3dg=BdSPWhdCp6qI8%X^Hj$lo`%0dZi?V}$*~x~?j7;9ZOv8LyG)pwz+WC2&9>JUif{js; zNxA6>fzB(p_aZ0|IF=soIN_reuT4+PGa(~NiFxYhLT8Ip}Q(_?9w2$EXPYvrTCau2{np;ZRsZc7= zCqvu>gauld6`S>+lH_Zq4T@^0ElN={EKH1wN$RGun={Hv>tq$6NSzr*S*RU(;vUii~j+9<~Ubf1I@O7RrF(lyh=$)y*eG3t3nGd21n zRw(l*B9Hkn%h*LW_Ixj}fLc?J-mh_mEb2$iTZuAj{u&C>eC zIGty*8LjDx!ga=};xnm5DYr;z(j2q!EA5spu1h$aPAD)Qb*f3h-U#w48-x_EQ}C;d zFhi^O_ql7me1)ex$HFoG4yIj%#am)xui2Tl1&N^1P=c3~a%RcGp9^9$jhTIGGMVS` za$Z$2wO&)JLUTA;V~!8pf-y6{q=!9HC(mvV)jh8=lX+-?JICQuW=V18PI)m(iPTd? zOFH)-^q=%!ltV2@&UPMG5>8)zv9IsblM{=QFk*#`6ylqhMXnFeD{S3p!4aV^SQm6D zT0II`EC(zIRL_H=;SH1Fvcqt4PRgx^@Gb22c;4~A*l>pkT+n&r70KE)=V@WCAy=F# zTqgOj74d+U243oG#wq87m3~b`v*=ZNk8{8GCa#Y(I#wR>%^{m#+AX6S$Q0bPBN~YD z5sn;g@AXmlM#g!H7tZke*aO_H$YcfksaE}8&rz5+pT4zzmXY#V?{17;`wi-Nw#dWR z*ZAnG*!bT4c1k*v7Q|U3_<9Ad@R~VS%zcG)pJZ_>3r;QDlWnG?zA(J~yC^(>#WslU zOJEIA@O^Tmo*KG>a4X|3BFvWRvy4JJ>k$IgHhi!Z!s&nvjnHWfA80gCXwt~`74y64QVV0NFwAtVDFEgF#jN!@VLFk zo%-SvE2={kbU784}NgqzkU9GzlkjX<3klefB-f zYaxp_i*%^D>r1ZoXy0FKB--gNf?@^CTi}#|G@MTgJ00Iuc;(!w?R4ka6{*Ivw!W>C zomclbQoUmX+$_5^kGf)jJ8FR4`2^MmVpj86pHzfY?xjKKl_}Y}3`io%aNkIGp3(OA zfUpMfdD3UKF23gQ-E;4+ZT1kA-zpWG>#tj8n)@8Af**WabQ!~OFmj&o$%@sWEPL0afURCn^BC!791=P`u%Ptby$O7a9?I_rSd~`I#ib* zFmu;C-=zvXUbyW!Fn4X`S6^v#3l8;lmmPM|(6m-T7D;3S=5~;(I-8L(*UMtMmm&}! z4vfRaSFC4#HI9OmIS|43H2f3N6lh@Hr{dD8-7S{12NQ5gLd;P24#B{>)B6V>7`Br^ z0SXSQ70Q$OhOk7PTrdeMBYJ3g@XJ^K zD(>k^K&y$9?uoAX%@6~@yBuC>p&##F4-v8SzVKYE?r^O!2$3hi1e!s+>Cd?A2wWPT z2o%TtkSD&EZpTX!PJ_Ra-$j0i-(|g7YnPe`WW4zK8_aB)jl9x=Q@(q?z-!xo?*&W~(&QO@Cl_XmFfnbnx zyfZtLz`CLr-<>lQ)f0$o@LgdLn-zF&z7_dE3QQrnkz4*6j!6>1l;%g`0P2`uyhVfE zm3Q7C6biFST_DG@4@U**f)!lwe2PBs;XLv51JijvG+l4P2t|oLGD&%l zXydI|+TJUT9H+51>@oYPL)SOrGJ~#9o4JYHDo0=GrwpNa{M)Ff9^+mF6IbmIm-wUm{0U^>pYdnfM z>7mE9q$xUfeO%HNA7e$!F=2p?sebc<>?BJ5E{-_?!uBz=T?8JOXoWKr&_9vM<5TDx z>&Yx2Q=vr~#EwTc;H@JO-&H}{#4Nd`9N~K*)$LX1RVPSHw~o0Q&Ys2U>)1?T+*Vjy zw!TI+GwlJ9`lKfeQoS$;`6}uZEn>+8X1>5V+$glU;wah1@8b?J$i* zM9&&owt1{^qC=Ye8&@|w;s|EzYpyp#>X|75$dT8nAP3BfzUS$bsE3{H=!p;P6CR(G za_*-t*n5W>I(~_@t=o9vuybf3VRaDHyKb;&d+tl+SNb9(xA)pK_pMoVWgK~XPOdgw z!h)S?jd}&MSCsAkk5pL7#Jl<{t8ncHdxN&Oh2Jkb9qs?JL(_1*eOd<3^C`;&?x6&U z$LK;A76mn2-;lFPF7dNVv`>;&;>W z@kL11o-$^Y{9wd;pGZ!+UDtbSJdu>iB1GFz{CQxVAi1*4Yk!htfI6S|cF~Jl`EeW9 zt_LOBG)Bfm^}`S$U`qA1P}~lATZm!^@JmQmHa#2fsMzQvgrL@k#D}82)%D>F(;xpv ze3O-&?Zh-)WkUn!`lB|%jxWq$GJ8xCdCLz@Mjz6O;DEp@c68tOd4g*qr{H>QS`km5 z%?u4lOWcsA8aVsBPWxM<8dexohr12tUCWU0U-f3Pf7n)BRp9@2C)&ZADgAJ_o;ur{ z;VF%6;!kzt^BG)47cY#on3#j6gKqC>Jua9-&-NOgucLu$A{g?2BWwOYO47GF!iov8 zw{)Gy9)h5$C;hF~T>st$(x6}NU%uf1-JKZr zKQ|lj0RZ`jHb4#lDDWE`01)5{y!7xt0fFrNub}^v(tnBiKhgi$$iFE=w>*=9rloYX z9oS$eyrSM=<%B3==N$tNZ=mJ{D3Jg_TQ3AkV02IbieoVr3nd3EX4&zP04gE@0RmEF z9)bX)Bm7IiGCM8^C`_RHC*TYp@-Kka1abg^DkQtCK`VO+FgioP$-&-GXK4XH`GUxy z_(1uQ96ka-&*8D603enn97wu#gkOHvxEs#^2;nzA`X3-7gW&invf^UZ5HzsMikbi> z0gGc;FO>@*R032%@IlH*{6s^*=mO;t#Q+c^(2oEYp!^K7NC81v!g>qILh7JsR7f2q zAO<2~>Ouju5M(i>4!T7Mz~DP~z+#Kzu-!NST@GY9?SO^Qc3#L|t$-;d&4Akm1waQy z?Ir-|S-ft@4m*<32O&$^LIR}7_I;L}4!}<%a{=6{Kh|Lv0>+P6=B|O7m``wBnnS`7 zASaKR1PK*E$+}oJr0qC8oEebf>CAur9-#;WVkR7Ws~j=~4^e?coN ze+eu<;|~f4*#5K&cA4Uzc8@5a(I^7C063@;-zE~^+d0Eej3}D_FQ6QLGz!$(PSshX zhh0t$1Z{Z()%XaN`A3B*vN3V0k-{#pLD32>M0#0Y>jZwSS@q_?bsU?oM;ldjLoe0em zgrkf_vVg^IQyPHz9?)$FLAi3Gb|V3u;z){Uz=IZoVukmz-~;-OM<@^bX*NK}6YUF! z)V?*u6 z0y>#MS{D?UVFniIAbB@QNYK8bxi|pmM}8K%5}`aEX%PX$1n6UB0CZxAkvrd*fZm!B z&~OwWZqpQiBPDuL8Nf^cm`QeE;lcArAR5>;xx@wb$C{rxVBAy7)leJ(*0D7;Q zNz;fHYCt#~;9(JBAqQ#%plH)8K#4y(3kj4c0^Qya)LXo6P?;bL?$WOpARf(5;OGWD z8qMZ}tVIx5$`7}gW(R&sqHeQ+lpu+#2%tL zgOCLxkbPNT6b1#JkfsU$!zUp&15LXi3(o=(m!!aEP^N8=G)X986ANi?!245*{4fi2 zv;3h9I^5q;%)lra6jc`t>t_8|J`r_>X5X9wcH49Q>G}RtPh^<{($u>JfHNvIFnYxW z0MI0t(t+(EgY01zG6cZC@#F2XD*&pV^$+}_1y`u}-_iSrcSnI3|Em3eOXLznww55q z0=0O+3M^du0CHfL@E<~4cF^TCfVgbs9|Zp{`ybHVn*USZ<4=7Q%Q~qcwir?_HVFXW z==mq}zqOr#?(6@G9s*ke0}dhpgzRTXH|M`&_Ewp>*GVIZ1@joyU(Ebz7&-kFlBNJf zU|ZOMZWq~VkeV3S41n02`MVQPXZEH5s1?v<|KZa;@bv{`apnvhj!=|G0^mjj zplbMmtw+G0(e*uK^6{ zwt)lRq*1#>P~;3eYKxB*#pqSAeq)zS}f8utE*&>H|KifxM6`;VyH) zLOf&_2Z}7EzlSkRF9tm)=+1hRZpQ%Ve&`}T9OWlchXx(rvF#qk)_c}UaB8Bn*#3o! zY^8TZc|3Fh{a?i_Zf_J>Bj`8j+%cvoK<7&&6X;espy=jDOMiRX-;pdn7d=WlcBms^ zx$>h%64bZ|b)$z1Gw6l)BH4Yu^~iy)Z)=O;1*S$6yTbr%eFZ0W(C-q8N;QJszCOPd z44zKu9yHHett$9{^D%A1d;$Xy)ue;d_vW@r5DW!Q1+Czm`SYVCQI5*)vol;o175o; z3_VwM_85jKr)$F02=`3_M|6|$Y7!uJX6Fj%>{u`9>`-LimEZ zSRmkR2{SrLk^P$xe=vB4gCsUOF#-uupy*QI;
OY;L`4_ef&#sf&AArurBjBqH>HA;X*8qmw@ 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 _GptgV=oaV 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/source.png b/src-tauri/icons/source.png new file mode 100644 index 0000000000000000000000000000000000000000..312790f704d5bd2d0a7ff9e56e246bad66a079bc GIT binary patch literal 3678 zcmb_eU1%It6h8OvO?FH+$t(u4nAV+aQ2JoaMv$Ulb~f2|o0n2VC@3`B2K1rWAEZ#l zCetR=EhGkCiVs4CiVr@heX5GuDGe$3A`zdgkd2Yjm)ZnlSn8Vkoinq$N!pqgd{|~@ z?)kp+o$s8vch2tJlW%EyqKSxF26yLPCerw;$!f%9`NYq6h+3Z-%w=CW@yo62S6ar> z?YZne`t9{&A3HyM()rnQ`4`|=2m%Q1041lXsHUPU~y#QQo>jz+0a+QlK5NHE1i20c|B~Kx;eZqlhKzwyZm{?#jAHOi0RGipFcHgwP-G z%VSn8)k0eesb-QniQ-f}Y@lZ|Pd8S#yGN=ey>VaJw3s2RO5l@OlG^La~X=3uVS94W^&XbP3yJ4M!+UQLXQv+TrZEYr_46PIDGqm36m zP-%gwq79aK7U~>DV_ajA@s{$4MNxB$-Nsg^k(rAuaK~zqaw0HbE>tEnDQ33OsxH3F zBp0SE76?$51v1Fd5C|RUpk{%SnIefmm>vj34>)&QHV9&?C5TIxAQl(~fieo^ED&uB z1Y#Z_(7`A;#&GG}k(7%$!alqMB8RSBQX7-S#)_9E~gqRGo9*_73Op%mBzpg4Hg$4nozcO;? zQmBKfBFb9>o&IYKGxA&`48MR_iRv9}o05m&Le2e+;%YS>z6%zfm1>`G%cQ|=dX-XZ zZtZHywZVx|MWyorEKD1A>t0WcM}(gkMS3&lnvDDAeei0SAe?o~IbP}pdAOlPkV5!D zj(-JPyn>50Z~uo|(5=fF#|y(byfACZg`a-8nUqtVFZ;gv{fy#yWj{lQ$pp-Ni|jZDLaVvdPD4zJIxp9gIH9i-iQnred-t6ghX&f~EPqC+3+eO^n`O&p5D0beJsAb5sk z(^jP}wqIy-sGg^!8l-DMFc4^XiT#KV0p(~eep0Nejtw^vyTxK|er$C$H;5>yQ;8Y+Y&ff8XzD|TLlp(@3#lVS>rl(5N0h%s4!xIG>zdVdu zQm$1fBRAK=XSH(3)`<}u$F?d4xr;PTXXeUq38M@HIJcE}I>x$+Ovr17bs-b4dGmoT z<1b>Kumyt#`YSKocu02f9qU0$reqBu>H; z*A&&n_sH$&X>ax#a@*>(Um6ygY+6yZz}%TaIV<2Xa%0{svH=`sQ*@9f`l{LB zQ6I9wd7GTZ^c@F)!g7|pgnx64DC=E`GT;KhMl~XvrDF_en0XR_riqsTNF?5I$=jX& z!y_U?7@Ic5R|mI>Z^^|!P3SuILJ4tjdBD;mhS!-MioG80LPDS^eAd1~H=OUf=MHUe P#}W`sfzi|3rf3n{t literal 0 HcmV?d00001 diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs new file mode 100644 index 0000000..cc159cd --- /dev/null +++ b/src-tauri/src/lib.rs @@ -0,0 +1,182 @@ +//! Thin Tauri command layer. Every mutating command takes an installation *id* and resolves the path from the +//! registry; the frontend can never ask the backend to touch an arbitrary path (scan is read-only). + +use std::collections::HashSet; +use std::path::PathBuf; +use std::sync::Mutex; + +use coa_core::driver::{self, DriverOutcome, Verb}; +use coa_core::error::UiError; +use coa_core::layout::{self, Classification, ScanReport}; +use coa_core::process::{self, Observed}; +use coa_core::registry::{metadata_dir_for, InstallKind, InstallMeta, MetaDir, Registry}; +use coa_core::{Error, Result}; +use serde::Serialize; +use tauri::State; + +struct AppState { + registry: Registry, + /// Installation ids with a start/stop currently running (one action at a time per server). + busy: Mutex>, +} + +#[derive(Serialize)] +struct ServerSummary { + id: String, + name: String, + path: String, +} + +#[derive(Serialize)] +struct StatusView { + observed: Observed, + busy: bool, + path_exists: bool, +} + +fn data_dir() -> PathBuf { + let base = std::env::var_os("LOCALAPPDATA").map(PathBuf::from).unwrap_or_else(std::env::temp_dir); + base.join("CoAServerManager") +} + +fn path_of(state: &AppState, id: &str) -> Result { + state + .registry + .list()? + .into_iter() + .find(|(i, _)| i == id) + .map(|(_, p)| p) + .ok_or_else(|| Error::UnknownInstallation(id.to_string())) +} + +fn summary(id: String, path: PathBuf) -> ServerSummary { + let name = path.file_name().map(|n| n.to_string_lossy().into_owned()).unwrap_or_else(|| "Server".into()); + ServerSummary { id, name, path: path.to_string_lossy().into_owned() } +} + +#[tauri::command] +fn default_install_dir() -> String { + "C:\\Games\\CoA Server".into() +} + +#[tauri::command] +async fn scan_server(path: String) -> std::result::Result { + tauri::async_runtime::spawn_blocking(move || layout::scan(std::path::Path::new(&path))) + .await + .map_err(|e| Error::Invalid(e.to_string()))? + .map_err(Into::into) +} + +/// Import: writes only `.manager` and the registry entry. The server folder is never modified. +#[tauri::command] +async fn add_server(state: State<'_, AppState>, path: String) -> std::result::Result { + let root = PathBuf::from(&path); + let report = tauri::async_runtime::spawn_blocking({ + let root = root.clone(); + move || layout::scan(&root) + }) + .await + .map_err(|e| Error::Invalid(e.to_string()))??; + + if report.classification == Classification::Incompatible { + return Err(Error::Invalid("This folder is not a CoA server folder.".into()).into()); + } + if let Some(existing) = state.registry.find_by_path(&root)? { + return Ok(summary(existing, PathBuf::from(report.path))); + } + + let mut meta = InstallMeta::new(InstallKind::Imported, std::path::Path::new(&report.path)); + meta.core.commit = report.release.as_ref().and_then(|r| r.main_revision.clone()); + meta.core.version = report.banner_revision.clone(); + meta.database.port = Some(report.ports.mysql); + meta.database.schemas = report.database_schemas.clone(); + for (rel, exe) in [("Core/worldserver.exe", &report.worldserver), ("Core/authserver.exe", &report.authserver)] { + if let Some(e) = exe { + meta.original_hashes.insert(rel.into(), e.sha256.clone()); + } + } + let server = PathBuf::from(&report.path); + let dir = metadata_dir_for(&server)?; + let (meta, _dir) = if dir.join("install.json").is_file() { + MetaDir::open(&dir).map(|(d, m)| (m, d))? + } else { + let d = MetaDir::create(&server, &meta)?; + (meta, d) + }; + state.registry.register(&meta.id, &server)?; + tracing::info!(id = %meta.id, path = %server.display(), "server imported (read-only)"); + Ok(summary(meta.id, server)) +} + +#[tauri::command] +fn list_servers(state: State<'_, AppState>) -> std::result::Result, UiError> { + Ok(state.registry.list()?.into_iter().map(|(id, p)| summary(id, p)).collect()) +} + +#[tauri::command] +fn forget_server(state: State<'_, AppState>, id: String) -> std::result::Result<(), UiError> { + // Removes only the registry entry; no files are deleted. + Ok(state.registry.unregister(&id)?) +} + +#[tauri::command] +async fn server_status(state: State<'_, AppState>, id: String) -> std::result::Result { + let root = path_of(&state, &id)?; + let busy = state.busy.lock().map(|b| b.contains(&id)).unwrap_or(false); + let path_exists = root.is_dir(); + let observed = tauri::async_runtime::spawn_blocking(move || { + let ports = layout::read_ports(&root); + process::observe(&root, &ports) + }) + .await + .map_err(|e| Error::Invalid(e.to_string()))?; + Ok(StatusView { observed, busy, path_exists }) +} + +async fn run_verb(state: &AppState, id: String, verb: Verb) -> std::result::Result { + let root = path_of(state, &id)?; + if !state.busy.lock().map_err(|_| Error::Invalid("state poisoned".into()))?.insert(id.clone()) { + return Ok(DriverOutcome { + ok: false, + exit_code: None, + code: Some(coa_core::ErrorCode::OperationInProgress), + human: Some(coa_core::ErrorCode::OperationInProgress.human()), + output: String::new(), + }); + } + let result = tauri::async_runtime::spawn_blocking(move || driver::run(&root, verb)).await; + if let Ok(mut b) = state.busy.lock() { + b.remove(&id); + } + result.map_err(|e| Error::Invalid(e.to_string()))?.map_err(Into::into) +} + +#[tauri::command] +async fn start_server(state: State<'_, AppState>, id: String) -> std::result::Result { + run_verb(&state, id, Verb::StartAll).await +} + +#[tauri::command] +async fn stop_server(state: State<'_, AppState>, id: String) -> std::result::Result { + run_verb(&state, id, Verb::StopAll).await +} + +pub fn run() { + let dir = data_dir(); + let _ = coa_core::logging::init(&dir.join("logs").join("manager.log")); + tauri::Builder::default() + .plugin(tauri_plugin_dialog::init()) + .manage(AppState { registry: Registry::at(dir.join("installs.json")), busy: Mutex::new(HashSet::new()) }) + .invoke_handler(tauri::generate_handler![ + default_install_dir, + scan_server, + add_server, + list_servers, + forget_server, + server_status, + start_server, + stop_server + ]) + .run(tauri::generate_context!()) + .expect("error while running CoA Server Manager"); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..abbcfa2 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + coa_server_manager_lib::run() +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..a1966db --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "CoA Server Manager", + "version": "0.1.0", + "identifier": "com.coa.servermanager", + "build": { + "beforeDevCommand": "npm run dev", + "devUrl": "http://localhost:1420", + "beforeBuildCommand": "npm run build", + "frontendDist": "../dist" + }, + "app": { + "windows": [ + { + "title": "CoA Server Manager", + "width": 1120, + "height": 740, + "minWidth": 900, + "minHeight": 620, + "center": true + } + ], + "security": { + "csp": "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self' ipc: http://ipc.localhost" + } + }, + "bundle": { + "active": true, + "targets": ["nsis"], + "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..8293ef3 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,56 @@ +import { useCallback, useEffect, useState } from "react"; +import { api, type ServerSummary } from "@/lib/api"; +import { Welcome } from "@/screens/Welcome"; +import { ImportServer } from "@/screens/ImportServer"; +import { Shell } from "@/screens/Shell"; + +type View = "welcome" | "import"; + +export default function App() { + const [servers, setServers] = useState(null); + const [view, setView] = useState("welcome"); + const [activeId, setActiveId] = useState(null); + + const refresh = useCallback(async () => { + const list = await api.list().catch(() => []); + setServers(list); + setActiveId((cur) => (cur && list.some((s) => s.id === cur) ? cur : (list[0]?.id ?? null))); + }, []); + + useEffect(() => { + void refresh(); + }, [refresh]); + + if (servers === null) return null; + + if (servers.length > 0 && view === "welcome" && activeId) { + return ( + setView("import")} + onForget={async (id) => { + await api.forget(id); + await refresh(); + }} + /> + ); + } + + if (view === "import") { + return ( + 0} + onCancel={() => setView("welcome")} + onAdded={async (s) => { + await refresh(); + setActiveId(s.id); + setView("welcome"); + }} + /> + ); + } + + return setView("import")} />; +} diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..e6beb01 --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,34 @@ +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 rounded-md font-medium transition-colors disabled:pointer-events-none disabled:opacity-45 cursor-pointer", + { + variants: { + variant: { + primary: "bg-gold text-[#17130a] hover:bg-gold-strong", + secondary: "bg-card-2 text-ink border border-line hover:bg-[#1f2226]", + ghost: "text-muted hover:text-ink hover:bg-white/5", + danger: "bg-bad/90 text-white hover:bg-bad", + }, + size: { + sm: "h-9 px-3 text-sm", + md: "h-11 px-5 text-[15px]", + xl: "h-16 px-10 text-lg tracking-wide", + }, + }, + defaultVariants: { variant: "secondary", size: "md" }, + }, +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps {} + +export const Button = React.forwardRef( + ({ className, variant, size, ...props }, ref) => ( + + {props.canCancel && ( + + )} + + + {busy && !report &&

Looking at your server…

} + + {error && ( + +

{error.human.title}

+

{error.human.message}

+
+ Show technical details +
{error.technical}
+
+
+ )} + + {report && head && ( + +
+ {report.classification === "healthy" ? ( + + ) : ( + + )} +
+

{head.title}

+

{head.text}

+

{report.path}

+
+
+ +
    + {report.items.map((it) => ( +
  • + {it.label} + + {it.detail && {it.detail}} + {it.status === "found" ? ( + + Detected + + ) : ( + + {it.key === "companions" ? "Not installed" : "Not found"} + + )} + +
  • + ))} +
+ + {report.notes.map((n) => ( +

+ {n} +

+ ))} + +
+

No files will be changed during import.

+ +
+
+ )} + + ); +} diff --git a/src/screens/Overview.tsx b/src/screens/Overview.tsx new file mode 100644 index 0000000..ac03d7f --- /dev/null +++ b/src/screens/Overview.tsx @@ -0,0 +1,204 @@ +import { useCallback, useEffect, useRef, useState } from "react"; +import { Loader2 } from "lucide-react"; +import { api, asUiError, type Human, type ServerSummary, type ServiceStatus, type StatusView } from "@/lib/api"; +import { cn, formatUptime } from "@/lib/utils"; +import { Button } from "@/components/ui/button"; +import { Card } from "@/components/ui/card"; + +type Action = "starting" | "stopping" | "restarting" | null; +type Failure = { human: Human; technical: string }; + +function Row({ label, s }: { label: string; s: ServiceStatus }) { + const running = s.state === "running"; + const starting = s.state === "starting"; + return ( +
+ {label} + + + {running ? "Running" : starting ? "Starting…" : "Stopped"} + +
+ ); +} + +export function Overview({ server, onForget }: { server: ServerSummary; onForget: () => Promise }) { + const [status, setStatus] = useState(null); + const [action, setAction] = useState(null); + const [failure, setFailure] = useState(null); + const [showDetails, setShowDetails] = useState(false); + const alive = useRef(true); + + const poll = useCallback(async () => { + try { + const s = await api.status(server.id); + if (alive.current) setStatus(s); + } catch { + /* transient; next poll retries */ + } + }, [server.id]); + + useEffect(() => { + alive.current = true; + void poll(); + const t = setInterval(poll, 2000); + return () => { + alive.current = false; + clearInterval(t); + }; + }, [poll]); + + async function run(kind: Exclude) { + setFailure(null); + setShowDetails(false); + setAction(kind); + try { + if (kind !== "starting") { + const out = await api.stop(server.id); + if (!out.ok) throw { human: out.human, technical: out.output }; + } + if (kind !== "stopping") { + setAction("starting"); + const out = await api.start(server.id); + if (!out.ok) throw { human: out.human, technical: out.output }; + } + } catch (e) { + const ui = asUiError(e); + setFailure({ human: ui.human ?? asUiError(String(e)).human, technical: ui.technical }); + } finally { + setAction(null); + void poll(); + } + } + + if (!status) return

Checking your server…

; + if (!status.path_exists) { + return ( +
+

Server folder not found

+

{server.path} is missing or was moved.

+ +
+ ); + } + + const { mysql, auth, world } = status.observed; + const all = [mysql, auth, world]; + const running = all.every((s) => s.state === "running"); + const anyUp = all.some((s) => s.state !== "stopped"); + const transitioning = action !== null || status.busy; + const conflict = all.find((s) => s.conflict)?.conflict ?? null; + + const headline = transitioning + ? action === "stopping" + ? "Stopping…" + : "Starting…" + : running + ? "Online" + : anyUp + ? "Needs attention" + : "Offline"; + const tone = transitioning ? "text-warn" : running ? "text-ok" : anyUp ? "text-warn" : "text-muted"; + + return ( +
+

{server.name}

+

{server.path}

+ + +
Server
+
+ + {headline} +
+ +
+ + + +
+ +
+
+
Uptime
+
{world.state === "running" ? formatUptime(world.uptime_secs) : "—"}
+
+
+
Players online
+
—
+
+
+ +
+ {running ? ( + + ) : ( + + )} + {running && ( + + )} + {anyUp && !running && ( + + )} +
+ {anyUp && !running && !transitioning && ( +

Some parts are running. Press Start to bring up the rest, or Stop to shut everything down.

+ )} +
+ + {conflict && !anyUp && ( + +

A port this server needs is already in use

+

+ Port {conflict.port} is used by another program{conflict.exe ? ` (${conflict.exe})` : ""}. +

+
+ )} + + {failure && ( + +

{failure.human.title}

+

{failure.human.message}

+
+ + +
+ {showDetails && ( +
+              {failure.technical || "(no output)"}
+            
+ )} +
+ )} +
+ ); +} diff --git a/src/screens/Placeholder.tsx b/src/screens/Placeholder.tsx new file mode 100644 index 0000000..51ab1ec --- /dev/null +++ b/src/screens/Placeholder.tsx @@ -0,0 +1,11 @@ +export function Placeholder({ title, question }: { title: string; question: string }) { + return ( +
+

{title}

+

{question}

+

+ This section is being built in a later release. +

+
+ ); +} diff --git a/src/screens/Shell.tsx b/src/screens/Shell.tsx new file mode 100644 index 0000000..37e3424 --- /dev/null +++ b/src/screens/Shell.tsx @@ -0,0 +1,85 @@ +import { useState } from "react"; +import { Archive, Bot, Gauge, Globe, Server, Settings, Terminal, Users, type LucideIcon } from "lucide-react"; +import { type ServerSummary } from "@/lib/api"; +import { cn } from "@/lib/utils"; +import { Overview } from "@/screens/Overview"; +import { Placeholder } from "@/screens/Placeholder"; +import { Button } from "@/components/ui/button"; + +type Page = "overview" | "bots" | "server" | "players" | "friends" | "backups" | "console" | "settings"; + +const NAV: { id: Page; label: string; icon: LucideIcon; question: string }[] = [ + { id: "overview", label: "Overview", icon: Gauge, question: "Is my server running?" }, + { id: "bots", label: "Bots", icon: Bot, question: "How are my bots configured?" }, + { id: "server", label: "Server", icon: Server, question: "How does my server behave?" }, + { id: "players", label: "Players", icon: Users, question: "Who is playing right now?" }, + { id: "friends", label: "Play with Friends", icon: Globe, question: "How can my friend join?" }, + { id: "backups", label: "Backups", icon: Archive, question: "Is my data safe?" }, + { id: "console", label: "Console", icon: Terminal, question: "What is the server doing?" }, + { id: "settings", label: "Settings", icon: Settings, question: "How does Manager behave?" }, +]; + +export function Shell(props: { + servers: ServerSummary[]; + activeId: string; + onSelect: (id: string) => void; + onAddAnother: () => void; + onForget: (id: string) => Promise; +}) { + const [page, setPage] = useState("overview"); + const server = props.servers.find((s) => s.id === props.activeId)!; + const current = NAV.find((n) => n.id === page)!; + + return ( +
+ + +
+ {page === "overview" ? ( + props.onForget(server.id)} /> + ) : ( + + )} +
+
+ ); +} diff --git a/src/screens/Welcome.tsx b/src/screens/Welcome.tsx new file mode 100644 index 0000000..3b3ff4d --- /dev/null +++ b/src/screens/Welcome.tsx @@ -0,0 +1,34 @@ +import { FolderSearch, Download } from "lucide-react"; +import { Card } from "@/components/ui/card"; + +export function Welcome({ onImport }: { onImport: () => void }) { + return ( +
+
+
+

Welcome to CoA Server Manager

+

Run your own Conquest of Azeroth server — no technical knowledge needed.

+
+ +
+ + +

Install new server

+

One-click setup with everything included.

+

Coming in a later release

+
+ + +
+
+ ); +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tests/e2e/cdp.mjs b/tests/e2e/cdp.mjs new file mode 100644 index 0000000..f26f11d --- /dev/null +++ b/tests/e2e/cdp.mjs @@ -0,0 +1,24 @@ +// Drives the real Tauri window over WebView2's DevTools protocol. Usage: node cdp.mjs +const port = process.env.CDP_PORT ?? "9222"; +const targets = await (await fetch(`http://127.0.0.1:${port}/json`)).json(); +const page = targets.find((t) => t.type === "page"); +const ws = new WebSocket(page.webSocketDebuggerUrl); +await new Promise((r) => (ws.onopen = r)); +let id = 0; +const pending = new Map(); +ws.onmessage = (m) => { + const d = JSON.parse(m.data); + if (d.id && pending.has(d.id)) pending.get(d.id)(d); +}; +export function evaluate(expression) { + return new Promise((resolve) => { + const n = ++id; + pending.set(n, resolve); + ws.send(JSON.stringify({ id: n, method: "Runtime.evaluate", params: { expression, awaitPromise: true, returnByValue: true } })); + }); +} +if (process.argv[2]) { + const r = await evaluate(process.argv[2]); + console.log(JSON.stringify(r.result?.result?.value ?? r.result, null, 2)); + ws.close(); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..5576230 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": [ + "ES2022", + "DOM", + "DOM.Iterable" + ], + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "noEmit": true, + "types": [ + "node" + ], + "paths": { + "@/*": [ + "./src/*" + ] + } + }, + "include": [ + "src", + "vite.config.ts" + ] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..2767b47 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import tailwindcss from "@tailwindcss/vite"; +import { fileURLToPath } from "node:url"; + +export default defineConfig({ + plugins: [react(), tailwindcss()], + resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)) } }, + clearScreen: false, + server: { port: 1420, strictPort: true }, + build: { target: "es2022", outDir: "dist" }, +});