diff --git a/Cargo.lock b/Cargo.lock index 0085d92..e89e628 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -158,6 +158,47 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" +[[package]] +name = "ashpd" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" +dependencies = [ + "enumflags2", + "futures-channel", + "futures-util", + "rand 0.8.5", + "serde", + "serde_repr", + "tokio", + "url", + "zbus", +] + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-compression" version = "0.4.32" @@ -171,6 +212,24 @@ dependencies = [ "tokio", ] +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if 1.0.4", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + [[package]] name = "async-lock" version = "3.4.1" @@ -182,6 +241,59 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if 1.0.4", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "async-signal" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if 1.0.4", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + [[package]] name = "async-trait" version = "0.1.89" @@ -193,6 +305,29 @@ dependencies = [ "syn 2.0.108", ] +[[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" @@ -231,7 +366,7 @@ dependencies = [ "http-body-util", "hyper", "hyper-util", - "itoa", + "itoa 1.0.15", "matchit", "memchr 2.7.6", "mime", @@ -367,6 +502,15 @@ name = "bitflags" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "block-buffer" @@ -377,6 +521,37 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2 0.5.2", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2 0.6.3", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + [[package]] name = "bon" version = "3.8.1" @@ -503,6 +678,31 @@ 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.10.0", + "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 = "cbor4ii" version = "0.2.14" @@ -539,6 +739,27 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "0.1.10" @@ -684,6 +905,65 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation 0.1.2", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "foreign-types 0.5.0", + "libc", + "objc", +] + +[[package]] +name = "cocoa" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c" +dependencies = [ + "bitflags 2.10.0", + "block", + "cocoa-foundation 0.2.1", + "core-foundation 0.10.1", + "core-graphics 0.24.0", + "foreign-types 0.5.0", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" +dependencies = [ + "bitflags 2.10.0", + "block", + "core-foundation 0.10.1", + "core-graphics-types 0.2.0", + "objc", +] + [[package]] name = "colorchoice" version = "1.0.4" @@ -748,18 +1028,84 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if 1.0.4", + "wasm-bindgen", +] + [[package]] name = "const-oid" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-serialize" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08259976d62c715c4826cb4a3d64a3a9e5c5f68f964ff6087319857f569f93a6" +dependencies = [ + "const-serialize-macro", + "serde", +] + +[[package]] +name = "const-serialize-macro" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04382d0d9df7434af6b1b49ea1a026ef39df1b0738b1cc373368cf175354f6eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + [[package]] name = "const-str" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie" version = "0.18.1" @@ -808,28 +1154,76 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "core2" -version = "0.4.0" +name = "core-graphics" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ - "memchr 2.7.6", + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types 0.5.0", + "libc", ] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "core-graphics" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.10.1", + "core-graphics-types 0.2.0", + "foreign-types 0.5.0", "libc", ] [[package]] -name = "crc32fast" -version = "1.5.0" +name = "core-graphics-types" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "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.10.0", + "core-foundation 0.10.1", + "libc", +] + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr 2.7.6", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if 1.0.4", ] @@ -896,6 +1290,33 @@ dependencies = [ "typenum", ] +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.108", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -993,6 +1414,19 @@ dependencies = [ "syn 2.0.108", ] +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if 1.0.4", + "hashbrown 0.14.5", + "lock_api 0.4.14", + "once_cell", + "parking_lot_core 0.9.12", +] + [[package]] name = "dashmap" version = "6.1.0" @@ -1082,6 +1516,19 @@ dependencies = [ "serde_core", ] +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.108", +] + [[package]] name = "derive_more" version = "1.0.0" @@ -1119,7 +1566,7 @@ dependencies = [ "byteorder", "chrono", "diesel_derives", - "itoa", + "itoa 1.0.15", "libsqlite3-sys", "pq-sys", "serde_json", @@ -1187,186 +1634,740 @@ dependencies = [ ] [[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys", +name = "dioxus" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a247114500f1a78e87022defa8173de847accfada8e8809dfae23a118a580c" +dependencies = [ + "dioxus-cli-config", + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-desktop", + "dioxus-devtools", + "dioxus-document", + "dioxus-fullstack", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-logger", + "dioxus-mobile", + "dioxus-router", + "dioxus-signals", + "dioxus-web", + "manganis", + "serde", + "warnings", ] [[package]] -name = "dirs-sys" -version = "0.5.0" +name = "dioxus-cli-config" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +checksum = "cdd16948f1ffdb068dd9a64812158073a4250e2af4e98ea31fdac0312e6bce86" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", + "wasm-bindgen", ] [[package]] -name = "displaydoc" -version = "0.2.5" +name = "dioxus-config-macro" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "75cbf582fbb1c32d34a1042ea675469065574109c95154468710a4d73ee98b49" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", ] [[package]] -name = "dotenvy" -version = "0.15.7" +name = "dioxus-core" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +checksum = "9c03f451a119e47433c16e2d8eb5b15bf7d6e6734eb1a4c47574e6711dadff8d" +dependencies = [ + "const_format", + "dioxus-core-types", + "futures-channel", + "futures-util", + "generational-box", + "longest-increasing-subsequence", + "rustc-hash 1.1.0", + "rustversion", + "serde", + "slab", + "slotmap", + "tracing", + "warnings", +] [[package]] -name = "dsl_auto_type" -version = "0.1.3" +name = "dioxus-core-macro" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b" +checksum = "105c954caaaedf8cd10f3d1ba576b01e18aa8d33ad435182125eefe488cf0064" dependencies = [ - "darling 0.20.11", - "either", - "heck 0.5.0", + "convert_case 0.6.0", + "dioxus-rsx", "proc-macro2", "quote", "syn 2.0.108", ] [[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - -[[package]] -name = "dynosaur" -version = "0.2.0" +name = "dioxus-core-types" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "277b2cb52d2df4acece06bb16bc0bb0a006970c7bf504eac2d310927a6f65890" +checksum = "91a82fccfa48574eb7aa183e297769540904694844598433a9eb55896ad9f93b" dependencies = [ - "dynosaur_derive", - "trait-variant", + "once_cell", ] [[package]] -name = "dynosaur_derive" -version = "0.2.0" +name = "dioxus-desktop" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4102713839a8c01c77c165bc38ef2e83948f6397fa1e1dcfacec0f07b149d3" +checksum = "b5b0cca3e7a10a4a3df37ea52c4cc7a53e5c9233489e03ee3f2829471fc3099a" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.108", + "async-trait", + "base64 0.22.1", + "cocoa 0.25.0", + "core-foundation 0.9.4", + "dioxus-cli-config", + "dioxus-core", + "dioxus-devtools", + "dioxus-document", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-signals", + "dunce", + "futures-channel", + "futures-util", + "generational-box", + "global-hotkey", + "infer", + "jni", + "lazy-js-bundle", + "muda 0.11.5", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "objc_id", + "once_cell", + "rfd", + "rustc-hash 1.1.0", + "serde", + "serde_json", + "signal-hook", + "slab", + "tao", + "thiserror 1.0.69", + "tokio", + "tracing", + "tray-icon", + "urlencoding", + "webbrowser", + "wry", ] [[package]] -name = "ecdsa" -version = "0.16.9" +name = "dioxus-devtools" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "712a7300f1e8181218187b03502044157eef04e0a25b518117c5ef9ae1096880" dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", + "dioxus-core", + "dioxus-devtools-types", + "dioxus-signals", + "serde", + "serde_json", + "tracing", + "tungstenite 0.23.0", + "warnings", ] [[package]] -name = "ed25519" -version = "2.2.3" +name = "dioxus-devtools-types" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "f62434973c0c9c5a3bc42e9cd5e7070401c2062a437fb5528f318c3e42ebf4ff" dependencies = [ - "signature", + "dioxus-core", + "serde", ] [[package]] -name = "ed25519-dalek" -version = "2.2.0" +name = "dioxus-document" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +checksum = "802a2014d1662b6615eec0a275745822ee4fc66aacd9d0f2fb33d6c8da79b8f2" dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core 0.6.4", - "sha2", - "subtle", - "zeroize", + "dioxus-core", + "dioxus-core-macro", + "dioxus-core-types", + "dioxus-html", + "futures-channel", + "futures-util", + "generational-box", + "lazy-js-bundle", + "serde", + "serde_json", + "tracing", ] [[package]] -name = "either" -version = "1.15.0" +name = "dioxus-fullstack" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "fe99b48a1348eec385b5c4bd3e80fd863b0d3b47257d34e2ddc58754dec5d128" +dependencies = [ + "base64 0.22.1", + "bytes", + "ciborium", + "dioxus-desktop", + "dioxus-devtools", + "dioxus-history", + "dioxus-lib", + "dioxus-mobile", + "dioxus-web", + "dioxus_server_macro", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "serde", + "server_fn", + "tracing", + "web-sys", +] [[package]] -name = "elliptic-curve" -version = "0.13.8" +name = "dioxus-history" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "5ae4e22616c698f35b60727313134955d885de2d32e83689258e586ebc9b7909" dependencies = [ - "base16ct", - "base64ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "serde_json", - "serdect", - "subtle", - "zeroize", + "dioxus-core", + "tracing", ] [[package]] -name = "encode_unicode" -version = "1.0.0" +name = "dioxus-hooks" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +checksum = "948e2b3f20d9d4b2c300aaa60281b1755f3298684448920b27106da5841896d0" +dependencies = [ + "dioxus-core", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "rustversion", + "slab", + "tracing", + "warnings", +] [[package]] -name = "encoding_rs" -version = "0.8.35" +name = "dioxus-html" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "59c9a40e6fee20ce7990095492dedb6a753eebe05e67d28271a249de74dc796d" dependencies = [ - "cfg-if 1.0.4", + "async-trait", + "dioxus-core", + "dioxus-core-macro", + "dioxus-core-types", + "dioxus-hooks", + "dioxus-html-internal-macro", + "enumset", + "euclid", + "futures-channel", + "generational-box", + "keyboard-types", + "lazy-js-bundle", + "rustversion", + "serde", + "serde_json", + "serde_repr", + "tracing", ] [[package]] -name = "enum-as-inner" -version = "0.6.1" +name = "dioxus-html-internal-macro" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +checksum = "43ba87b53688a2c9f619ecdf4b3b955bc1f08bd0570a80a0d626c405f6d14a76" dependencies = [ - "heck 0.5.0", + "convert_case 0.6.0", "proc-macro2", "quote", "syn 2.0.108", ] [[package]] -name = "equivalent" -version = "1.0.2" +name = "dioxus-interpreter-js" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "330707b10ca75cb0eb05f9e5f8d80217cd0d7e62116a8277ae363c1a09b57a22" +dependencies = [ + "dioxus-core", + "dioxus-core-types", + "dioxus-html", + "js-sys", + "lazy-js-bundle", + "rustc-hash 1.1.0", + "serde", + "sledgehammer_bindgen", + "sledgehammer_utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] [[package]] -name = "errno" -version = "0.3.14" +name = "dioxus-lib" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5405b71aa9b8b0c3e0d22728f12f34217ca5277792bd315878cc6ecab7301b72" +dependencies = [ + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-document", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx", + "dioxus-signals", + "warnings", +] + +[[package]] +name = "dioxus-logger" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545961e752f6c8bf59c274951b3c8b18a106db6ad2f9e2035b29e1f2a3e899b1" +dependencies = [ + "console_error_panic_hook", + "dioxus-cli-config", + "tracing", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "dioxus-mobile" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1295388909f427758993f32a571e0f8698d6ce0f125fa0e81b8bfdec3fa952" +dependencies = [ + "dioxus-cli-config", + "dioxus-desktop", + "dioxus-lib", + "jni", + "libc", + "once_cell", +] + +[[package]] +name = "dioxus-router" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7266a76fc9e4a91f56499d1d1aecfff7168952b6627a6008b4e9748d6bf863e4" +dependencies = [ + "dioxus-cli-config", + "dioxus-history", + "dioxus-lib", + "dioxus-router-macro", + "rustversion", + "tracing", + "url", + "urlencoding", +] + +[[package]] +name = "dioxus-router-macro" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2743ffb79e9a7d33d779c87d6deea2a6c047d0736012f95d63b909b83f0a6fd2" +dependencies = [ + "proc-macro2", + "quote", + "slab", + "syn 2.0.108", +] + +[[package]] +name = "dioxus-rsx" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb588e05800b5a7eb90b2f40fca5bbd7626e823fb5e1ba21e011de649b45aa1" +dependencies = [ + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "dioxus-signals" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10e032dbb3a2c0386ec8b8ee59bc20b5aeb67038147c855801237b45b13d72ac" +dependencies = [ + "dioxus-core", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "parking_lot 0.12.5", + "rustc-hash 1.1.0", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-web" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7c12475c3d360058b8afe1b68eb6dfc9cbb7dcd760aed37c5f85c561c83ed1" +dependencies = [ + "async-trait", + "ciborium", + "dioxus-cli-config", + "dioxus-core", + "dioxus-core-types", + "dioxus-devtools", + "dioxus-document", + "dioxus-history", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "js-sys", + "lazy-js-bundle", + "rustc-hash 1.1.0", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus_server_macro" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "371a5b21989a06b53c5092e977b3f75d0e60a65a4c15a2aa1d07014c3b2dda97" +dependencies = [ + "proc-macro2", + "quote", + "server_fn_macro", + "syn 2.0.108", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.10.0", + "objc2 0.6.3", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "dlopen2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" + +[[package]] +name = "dsl_auto_type" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b" +dependencies = [ + "darling 0.20.11", + "either", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "dtoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + +[[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 = "dynosaur" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "277b2cb52d2df4acece06bb16bc0bb0a006970c7bf504eac2d310927a6f65890" +dependencies = [ + "dynosaur_derive", + "trait-variant", +] + +[[package]] +name = "dynosaur_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4102713839a8c01c77c165bc38ef2e83948f6397fa1e1dcfacec0f07b149d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "sha2", + "subtle", + "zeroize", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "base64ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serde_json", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if 1.0.4", +] + +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "enumset" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ @@ -1374,6 +2375,16 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", + "serde", +] + [[package]] name = "event-listener" version = "5.4.1" @@ -1418,6 +2429,15 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + [[package]] name = "ff" version = "0.13.1" @@ -1434,6 +2454,16 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[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 = "filetime" version = "0.2.26" @@ -1496,7 +2526,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[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 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", ] [[package]] @@ -1505,6 +2556,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[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" @@ -1514,15 +2571,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - [[package]] name = "futf" version = "0.1.5" @@ -1600,52 +2648,170 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr 2.7.6", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[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 = "futures-macro" -version = "0.3.31" +name = "gdkwayland-sys" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.108", + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", ] [[package]] -name = "futures-sink" -version = "0.3.31" +name = "gdkx11" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] [[package]] -name = "futures-task" -version = "0.3.31" +name = "gdkx11-sys" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] [[package]] -name = "futures-util" -version = "0.3.31" +name = "generational-box" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "a673cf4fb0ea6a91aa86c08695756dfe875277a912cdbf33db9a9f62d47ed82b" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr 2.7.6", - "pin-project-lite", - "pin-utils", - "slab", + "parking_lot 0.12.5", + "tracing", ] [[package]] @@ -1659,7 +2825,7 @@ dependencies = [ "libc", "log", "rustversion", - "windows", + "windows 0.61.3", ] [[package]] @@ -1683,6 +2849,17 @@ dependencies = [ "unicode-width 0.2.2", ] +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.4", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.16" @@ -1692,7 +2869,7 @@ dependencies = [ "cfg-if 1.0.4", "js-sys", "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -1716,6 +2893,102 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" +[[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.10.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr 2.7.6", + "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.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[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 = "global-hotkey" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b436093d1598b05e3b7fddc097b2bad32763f53a1beb25ab6f9718c6a60acd09" +dependencies = [ + "bitflags 2.10.0", + "cocoa 0.25.0", + "crossbeam-channel", + "keyboard-types", + "objc", + "once_cell", + "thiserror 1.0.69", + "windows-sys 0.52.0", + "x11-dl", +] + [[package]] name = "globset" version = "0.4.18" @@ -1729,6 +3002,51 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[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 = "group" version = "0.13.0" @@ -1740,6 +3058,58 @@ dependencies = [ "subtle", ] +[[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.108", +] + [[package]] name = "gzip-header" version = "1.0.0" @@ -1926,6 +3296,20 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever 0.11.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "html5ever" version = "0.27.0" @@ -1934,7 +3318,7 @@ checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" dependencies = [ "log", "mac", - "markup5ever", + "markup5ever 0.12.1", "proc-macro2", "quote", "syn 2.0.108", @@ -1948,7 +3332,7 @@ checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", - "itoa", + "itoa 1.0.15", ] [[package]] @@ -2007,7 +3391,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa", + "itoa 1.0.15", "pin-project-lite", "pin-utils", "smallvec", @@ -2255,23 +3639,12 @@ dependencies = [ ] [[package]] -name = "inotify" +name = "infer" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" -dependencies = [ - "bitflags 2.10.0", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +checksum = "0a6c16b11a665b26aeeb9b1d7f954cdeb034be38dd00adab4f2ae921a8fee804" dependencies = [ - "libc", + "cfb", ] [[package]] @@ -2286,6 +3659,15 @@ dependencies = [ "similar", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if 1.0.4", +] + [[package]] name = "inventory" version = "0.3.21" @@ -2346,6 +3728,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + [[package]] name = "itoa" version = "1.0.15" @@ -2509,7 +3897,7 @@ version = "0.8.0" source = "git+https://tangled.org/@nonbinary.computer/jacquard#10d719d2a2c459ab562b2be6fecdfe11f52b521c" dependencies = [ "cid", - "dashmap", + "dashmap 6.1.0", "heck 0.5.0", "inventory", "jacquard-common", @@ -2537,7 +3925,7 @@ dependencies = [ "base64 0.22.1", "bytes", "chrono", - "dashmap", + "dashmap 6.1.0", "elliptic-curve", "http", "jacquard-common", @@ -2562,6 +3950,29 @@ dependencies = [ "webbrowser", ] +[[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 = "jni" version = "0.21.1" @@ -2697,23 +4108,27 @@ dependencies = [ ] [[package]] -name = "kqueue" -version = "1.1.1" +name = "keyboard-types" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "kqueue-sys", - "libc", + "bitflags 2.10.0", + "serde", + "unicode-segmentation", ] [[package]] -name = "kqueue-sys" -version = "1.0.4" +name = "kuchikiki" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" dependencies = [ - "bitflags 1.3.2", - "libc", + "cssparser", + "html5ever 0.26.0", + "indexmap 1.9.3", + "matches", + "selectors", ] [[package]] @@ -2727,6 +4142,12 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "lazy-js-bundle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e49596223b9d9d4947a14a25c142a6e7d8ab3f27eb3ade269d238bb8b5c267e2" + [[package]] name = "lazy_static" version = "1.5.0" @@ -2736,12 +4157,46 @@ dependencies = [ "spin 0.9.8", ] +[[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.177" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if 1.0.4", + "winapi", +] + [[package]] name = "libm" version = "0.2.15" @@ -2769,6 +4224,25 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "libxdo" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db" +dependencies = [ + "libxdo-sys", +] + +[[package]] +name = "libxdo-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212" +dependencies = [ + "libc", + "x11", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -2811,6 +4285,12 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[package]] +name = "longest-increasing-subsequence" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" + [[package]] name = "loom" version = "0.7.2" @@ -2854,6 +4334,42 @@ dependencies = [ "libc", ] +[[package]] +name = "manganis" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317af44b15e7605b85f04525449a3bb631753040156c9b318e6cba8a3ea4ef73" +dependencies = [ + "const-serialize", + "manganis-core", + "manganis-macro", +] + +[[package]] +name = "manganis-core" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c38bee65cc725b2bba23b5dbb290f57c8be8fadbe2043fb7e2ce73022ea06519" +dependencies = [ + "const-serialize", + "dioxus-cli-config", + "dioxus-core-types", + "serde", +] + +[[package]] +name = "manganis-macro" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f4f71310913c40174d9f0cfcbcb127dad0329ecdb3945678a120db22d3d065" +dependencies = [ + "dunce", + "manganis-core", + "proc-macro2", + "quote", + "syn 2.0.108", +] + [[package]] name = "markdown-weaver" version = "0.13.0" @@ -2872,6 +4388,20 @@ name = "markdown-weaver-escape" version = "0.11.0" source = "git+https://github.com/rsform/markdown-weaver#46f3eee6c93118da84a5de3d25fef642735aedd2" +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + [[package]] name = "markup5ever" version = "0.12.1" @@ -2880,7 +4410,7 @@ checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" dependencies = [ "log", "phf 0.11.3", - "phf_codegen", + "phf_codegen 0.11.3", "string_cache", "string_cache_codegen", "tendril", @@ -2892,8 +4422,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18" dependencies = [ - "html5ever", - "markup5ever", + "html5ever 0.27.0", + "markup5ever 0.12.1", "tendril", "xml5ever", ] @@ -2918,6 +4448,12 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + [[package]] name = "matchit" version = "0.8.4" @@ -2958,6 +4494,15 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + [[package]] name = "miette" version = "5.10.0" @@ -3091,8 +4636,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "log", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.61.2", ] @@ -3117,6 +4661,44 @@ dependencies = [ "uuid", ] +[[package]] +name = "muda" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c47e7625990fc1af2226ea4f34fb2412b03c12639fcb91868581eb3a6893453" +dependencies = [ + "cocoa 0.25.0", + "crossbeam-channel", + "gtk", + "keyboard-types", + "libxdo", + "objc", + "once_cell", + "png", + "thiserror 1.0.69", + "windows-sys 0.52.0", +] + +[[package]] +name = "muda" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "libxdo", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", + "once_cell", + "png", + "thiserror 1.0.69", + "windows-sys 0.59.0", +] + [[package]] name = "multibase" version = "0.9.2" @@ -3165,7 +4747,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794" dependencies = [ "cfg_aliases", - "derive_more", + "derive_more 1.0.0", "futures-buffered", "futures-lite", "futures-util", @@ -3196,149 +4778,373 @@ dependencies = [ "tempfile", ] +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.10.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle 0.6.2", + "thiserror 1.0.69", +] + [[package]] name = "ndk-context" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" +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", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.10.0", + "cfg-if 1.0.4", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nom" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b" +dependencies = [ + "memchr 1.0.2", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr 2.7.6", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi 0.5.2", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] [[package]] -name = "new_debug_unreachable" -version = "1.0.6" +name = "objc2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] [[package]] -name = "nom" -version = "3.2.1" +name = "objc2-app-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "memchr 1.0.2", + "bitflags 2.10.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation 0.2.2", + "objc2-quartz-core", ] [[package]] -name = "nom" -version = "7.1.3" +name = "objc2-app-kit" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "memchr 2.7.6", - "minimal-lexical", + "bitflags 2.10.0", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-foundation 0.3.2", ] [[package]] -name = "notify" -version = "8.2.0" +name = "objc2-core-data" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.10.0", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "log", - "mio", - "notify-types", - "walkdir", - "windows-sys 0.60.2", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] -name = "notify-types" -version = "2.0.0" +name = "objc2-core-foundation" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.10.0", + "dispatch2", + "objc2 0.6.3", +] [[package]] -name = "nu-ansi-term" -version = "0.50.3" +name = "objc2-core-graphics" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "windows-sys 0.61.2", + "bitflags 2.10.0", + "objc2-core-foundation", ] [[package]] -name = "num-bigint-dig" -version = "0.8.4" +name = "objc2-core-image" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.5", - "smallvec", - "zeroize", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal", ] [[package]] -name = "num-conv" -version = "0.1.0" +name = "objc2-encode" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] -name = "num-integer" -version = "0.1.46" +name = "objc2-foundation" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "num-traits", + "bitflags 2.10.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", ] [[package]] -name = "num-iter" -version = "0.1.45" +name = "objc2-foundation" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "bitflags 2.10.0", + "block2 0.6.2", + "objc2 0.6.3", + "objc2-core-foundation", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "objc2-metal" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "autocfg", - "libm", + "bitflags 2.10.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] -name = "num_cpus" -version = "1.17.0" +name = "objc2-quartz-core" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "hermit-abi 0.5.2", - "libc", + "bitflags 2.10.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal", ] [[package]] -name = "num_threads" -version = "0.1.7" +name = "objc_exception" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" dependencies = [ - "libc", + "cc", ] [[package]] -name = "objc" -version = "0.2.7" +name = "objc_id" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" dependencies = [ - "malloc_buf", + "objc", ] [[package]] @@ -3392,7 +5198,7 @@ checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" dependencies = [ "bitflags 2.10.0", "cfg-if 1.0.4", - "foreign-types", + "foreign-types 0.3.2", "libc", "once_cell", "openssl-macros", @@ -3443,6 +5249,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "ouroboros" version = "0.18.5" @@ -3497,6 +5313,31 @@ dependencies = [ "sha2", ] +[[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" version = "2.2.1" @@ -3581,6 +5422,26 @@ dependencies = [ "indexmap 1.9.3", ] +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared 0.10.0", +] + [[package]] name = "phf" version = "0.11.3" @@ -3600,16 +5461,56 @@ dependencies = [ "serde", ] +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + [[package]] name = "phf_codegen" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ - "phf_generator", + "phf_generator 0.11.3", "phf_shared 0.11.3", ] +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + [[package]] name = "phf_generator" version = "0.11.3" @@ -3620,13 +5521,45 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + [[package]] name = "phf_shared" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ - "siphasher", + "siphasher 1.0.1", ] [[package]] @@ -3635,7 +5568,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" dependencies = [ - "siphasher", + "siphasher 1.0.1", ] [[package]] @@ -3670,6 +5603,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + [[package]] name = "pkcs1" version = "0.7.5" @@ -3710,6 +5654,39 @@ dependencies = [ "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", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if 1.0.4", + "concurrent-queue", + "hermit-abi 0.5.2", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "pollster" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" + [[package]] name = "portable-atomic" version = "1.11.1" @@ -3805,6 +5782,34 @@ dependencies = [ "elliptic-curve", ] +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -3829,6 +5834,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + [[package]] name = "proc-macro2" version = "1.0.103" @@ -3877,7 +5888,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", + "rustc-hash 2.1.1", "rustls", "socket2 0.6.1", "thiserror 2.0.17", @@ -3897,7 +5908,7 @@ dependencies = [ "lru-slab", "rand 0.9.2", "ring", - "rustc-hash", + "rustc-hash 2.1.1", "rustls", "rustls-pki-types", "slab", @@ -3936,6 +5947,20 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + [[package]] name = "rand" version = "0.8.5" @@ -3957,6 +5982,16 @@ dependencies = [ "rand_core 0.9.3", ] +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -3977,6 +6012,15 @@ dependencies = [ "rand_core 0.9.3", ] +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + [[package]] name = "rand_core" version = "0.6.4" @@ -3995,6 +6039,24 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "range-traits" version = "0.3.2" @@ -4007,6 +6069,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + [[package]] name = "redox_syscall" version = "0.1.57" @@ -4105,6 +6173,7 @@ dependencies = [ "js-sys", "log", "mime", + "mime_guess", "native-tls", "percent-encoding", "pin-project-lite", @@ -4146,6 +6215,29 @@ dependencies = [ "subtle", ] +[[package]] +name = "rfd" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" +dependencies = [ + "ashpd", + "block", + "dispatch", + "js-sys", + "log", + "objc", + "objc-foundation", + "objc_id", + "pollster", + "raw-window-handle 0.6.2", + "urlencoding", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.48.0", +] + [[package]] name = "ring" version = "0.17.14" @@ -4210,6 +6302,12 @@ version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.1.1" @@ -4433,6 +6531,26 @@ dependencies = [ "libc", ] +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more 0.99.20", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + [[package]] name = "semver" version = "1.0.27" @@ -4444,6 +6562,9 @@ name = "send_wrapper" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +dependencies = [ + "futures-core", +] [[package]] name = "serde" @@ -4465,6 +6586,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_bytes" version = "0.11.19" @@ -4513,7 +6645,7 @@ checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" dependencies = [ "form_urlencoded", "indexmap 2.12.0", - "itoa", + "itoa 1.0.15", "ryu", "serde_core", ] @@ -4537,7 +6669,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "indexmap 2.12.0", - "itoa", + "itoa 1.0.15", "memchr 2.7.6", "ryu", "serde", @@ -4550,11 +6682,22 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ - "itoa", + "itoa 1.0.15", "serde", "serde_core", ] +[[package]] +name = "serde_qs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" +dependencies = [ + "percent-encoding", + "serde", + "thiserror 1.0.69", +] + [[package]] name = "serde_repr" version = "0.1.20" @@ -4591,7 +6734,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa", + "itoa 1.0.15", "ryu", "serde", ] @@ -4637,6 +6780,69 @@ dependencies = [ "serde", ] +[[package]] +name = "server_fn" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fae7a3038a32e5a34ba32c6c45eb4852f8affaf8b794ebfcd4b1099e2d62ebe" +dependencies = [ + "bytes", + "const_format", + "dashmap 5.5.3", + "futures", + "gloo-net", + "http", + "js-sys", + "once_cell", + "reqwest", + "send_wrapper", + "serde", + "serde_json", + "serde_qs", + "server_fn_macro_default", + "thiserror 1.0.69", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1" +dependencies = [ + "const_format", + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.108", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro_default" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2aa8119b558a17992e0ac1fd07f080099564f24532858811ce04f742542440" +dependencies = [ + "server_fn_macro", + "syn 2.0.108", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + [[package]] name = "sha1" version = "0.10.6" @@ -4680,6 +6886,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + [[package]] name = "signal-hook-registry" version = "1.4.6" @@ -4711,6 +6927,12 @@ version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "siphasher" version = "1.0.1" @@ -4723,6 +6945,45 @@ version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +[[package]] +name = "sledgehammer_bindgen" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e83e178d176459c92bc129cfd0958afac3ced925471b889b3a75546cfc4133" +dependencies = [ + "sledgehammer_bindgen_macro", + "wasm-bindgen", +] + +[[package]] +name = "sledgehammer_bindgen_macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f62f06db0370222f7f498ef478fce9f8df5828848d1d3517e3331936d7074f55" +dependencies = [ + "quote", + "syn 2.0.108", +] + +[[package]] +name = "sledgehammer_utils" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debdd4b83524961983cea3c55383b3910fd2f24fd13a188f5b091d2d504a61ae" +dependencies = [ + "rustc-hash 1.1.0", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "serde", + "version_check", +] + [[package]] name = "smallvec" version = "1.15.1" @@ -4759,6 +7020,32 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "spin" version = "0.9.8" @@ -4832,7 +7119,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" dependencies = [ - "phf_generator", + "phf_generator 0.11.3", "phf_shared 0.11.3", "proc-macro2", "quote", @@ -4973,6 +7260,19 @@ dependencies = [ "libc", ] +[[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.23", + "version-compare", +] + [[package]] name = "tabwriter" version = "1.4.1" @@ -4988,6 +7288,63 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" +[[package]] +name = "tao" +version = "0.30.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6682a07cf5bab0b8a2bd20d0a542917ab928b5edb75ebd4eda6b05cbaab872da" +dependencies = [ + "bitflags 2.10.0", + "cocoa 0.26.1", + "core-foundation 0.10.1", + "core-graphics 0.24.0", + "crossbeam-channel", + "dispatch", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot 0.12.5", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows 0.58.0", + "windows-core 0.58.0", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tempfile" version = "3.23.0" @@ -5041,6 +7398,12 @@ dependencies = [ "unicode-width 0.2.2", ] +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + [[package]] name = "thiserror" version = "1.0.69" @@ -5106,7 +7469,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", - "itoa", + "itoa 1.0.15", "libc", "num-conv", "num_threads", @@ -5183,6 +7546,7 @@ dependencies = [ "signal-hook-registry", "socket2 0.6.1", "tokio-macros", + "tracing", "windows-sys 0.61.2", ] @@ -5256,7 +7620,7 @@ dependencies = [ "rustls-pki-types", "tokio", "tokio-rustls", - "tungstenite", + "tungstenite 0.24.0", ] [[package]] @@ -5302,7 +7666,7 @@ dependencies = [ "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", - "toml_edit", + "toml_edit 0.22.27", ] [[package]] @@ -5317,7 +7681,7 @@ dependencies = [ "toml_datetime 0.7.3", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.13", ] [[package]] @@ -5338,6 +7702,28 @@ 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.12.0", + "toml_datetime 0.6.11", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.12.0", + "toml_datetime 0.6.11", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -5349,7 +7735,19 @@ dependencies = [ "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", - "winnow", + "winnow 0.7.13", +] + +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.12.0", + "toml_datetime 0.7.3", + "toml_parser", + "winnow 0.7.13", ] [[package]] @@ -5358,7 +7756,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ - "winnow", + "winnow 0.7.13", ] [[package]] @@ -5534,6 +7932,17 @@ dependencies = [ "tracing-serde", ] +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + [[package]] name = "trait-variant" version = "0.1.2" @@ -5545,6 +7954,27 @@ dependencies = [ "syn 2.0.108", ] +[[package]] +name = "tray-icon" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadd75f5002e2513eaa19b2365f533090cc3e93abd38788452d9ea85cff7b48a" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda 0.15.3", + "objc2 0.6.3", + "objc2-app-kit 0.3.2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation 0.3.2", + "once_cell", + "png", + "thiserror 2.0.17", + "windows-sys 0.59.0", +] + [[package]] name = "tree_magic" version = "0.2.3" @@ -5569,6 +7999,24 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "sha1", + "thiserror 1.0.69", + "utf-8", +] + [[package]] name = "tungstenite" version = "0.24.0" @@ -5604,6 +8052,17 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset", + "tempfile", + "winapi", +] + [[package]] name = "unicase" version = "2.8.1" @@ -5745,6 +8204,12 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[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" @@ -5770,6 +8235,34 @@ dependencies = [ "try-lock", ] +[[package]] +name = "warnings" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f68998838dab65727c9b30465595c6f7c953313559371ca8bf31759b3680ad" +dependencies = [ + "pin-project", + "tracing", + "warnings-macro", +] + +[[package]] +name = "warnings-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59195a1db0e95b920366d949ba5e0d3fc0e70b67c09be15ce5abb790106b0571" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -5885,7 +8378,7 @@ dependencies = [ "axum", "chrono", "clap 4.5.51", - "dashmap", + "dashmap 6.1.0", "diesel", "diesel-async", "diesel_migrations", @@ -5976,7 +8469,7 @@ dependencies = [ "async-trait", "bitflags 2.10.0", "compact_string", - "dashmap", + "dashmap 6.1.0", "dynosaur", "http", "ignore", @@ -6006,12 +8499,8 @@ dependencies = [ name = "weaver-server" version = "0.1.0" dependencies = [ - "axum", - "clap 4.5.51", + "dioxus", "jacquard", - "jacquard-axum", - "notify", - "tokio", "weaver-common", "weaver-workspace-hack", ] @@ -6068,7 +8557,7 @@ dependencies = [ "tracing", "tracing-core", "uuid", - "winnow", + "winnow 0.7.13", "zerocopy", "zeroize", ] @@ -6105,18 +8594,62 @@ dependencies = [ "log", "ndk-context", "objc", - "raw-window-handle", + "raw-window-handle 0.5.2", "url", "web-sys", ] +[[package]] +name = "webkit2gtk" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" +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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +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 = "webpage" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac" dependencies = [ - "html5ever", + "html5ever 0.27.0", "markup5ever_rcdom", "serde_json", "url", @@ -6131,6 +8664,42 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "webview2-com" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.58.0", + "windows-core 0.58.0", + "windows-implement 0.58.0", + "windows-interface 0.58.0", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + +[[package]] +name = "webview2-com-sys" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" +dependencies = [ + "thiserror 1.0.69", + "windows 0.58.0", + "windows-core 0.58.0", +] + [[package]] name = "whoami" version = "1.6.1" @@ -6179,6 +8748,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.61.3" @@ -6201,14 +8780,27 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -6220,8 +8812,8 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.2.1", "windows-result 0.4.1", "windows-strings 0.5.1", @@ -6238,6 +8830,17 @@ dependencies = [ "windows-threading", ] +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -6249,6 +8852,17 @@ dependencies = [ "syn 2.0.108", ] +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] + [[package]] name = "windows-interface" version = "0.59.3" @@ -6293,6 +8907,15 @@ dependencies = [ "windows-strings 0.4.2", ] +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -6311,6 +8934,16 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-strings" version = "0.4.2" @@ -6455,6 +9088,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -6635,6 +9277,15 @@ 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 2.7.6", +] + [[package]] name = "winnow" version = "0.7.13" @@ -6666,6 +9317,77 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +[[package]] +name = "wry" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac0099a336829fbf54c26b5f620c68980ebbe37196772aeaf6118df4931b5cb0" +dependencies = [ + "base64 0.22.1", + "block", + "cocoa 0.26.1", + "core-graphics 0.24.0", + "crossbeam-channel", + "dpi", + "dunce", + "gdkx11", + "gtk", + "html5ever 0.26.0", + "http", + "javascriptcore-rs", + "jni", + "kuchikiki", + "libc", + "ndk", + "objc", + "objc_id", + "once_cell", + "percent-encoding", + "raw-window-handle 0.6.2", + "sha2", + "soup3", + "tao-macros", + "thiserror 1.0.69", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.58.0", + "windows-core 0.58.0", + "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 = "xdg-home" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "xml5ever" version = "0.18.1" @@ -6674,9 +9396,15 @@ checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69" dependencies = [ "log", "mac", - "markup5ever", + "markup5ever 0.12.1", ] +[[package]] +name = "xxhash-rust" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" + [[package]] name = "yaml-rust" version = "0.4.5" @@ -6726,6 +9454,63 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zbus" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +dependencies = [ + "async-broadcast", + "async-process", + "async-recursion", + "async-trait", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "ordered-stream", + "rand 0.8.5", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tokio", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.108", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + [[package]] name = "zerocopy" version = "0.8.27" @@ -6848,3 +9633,41 @@ dependencies = [ "cc", "pkg-config", ] + +[[package]] +name = "zvariant" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "url", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.108", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.108", +] diff --git a/Cargo.toml b/Cargo.toml index 28c127f..dad8d50 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ resolver = "2" # paths because the flake.nix is written in a way such that top-level members # (`weaver-cli` and `weaver-server`) are built as different derivations which avoid being # rebuilt if the other package's sources change. -members = ["crates/*"] +members = ["crates/*", "crates/weaver-server"] #default-members = ["crates/weaver-cli"] @@ -43,3 +43,15 @@ jacquard = { git = "https://tangled.org/@nonbinary.computer/jacquard", default-f jacquard-api = { git = "https://tangled.org/@nonbinary.computer/jacquard" } jacquard-axum = { git = "https://tangled.org/@nonbinary.computer/jacquard" } tree_magic = { version = "0.2.3", features = ["cli"] } + +[profile] + +[profile.wasm-dev] +inherits = "dev" +opt-level = 1 + +[profile.server-dev] +inherits = "dev" + +[profile.android-dev] +inherits = "dev" diff --git a/alloy/css/base.css b/alloy/css/base.css deleted file mode 100644 index cd4ccd7..0000000 --- a/alloy/css/base.css +++ /dev/null @@ -1,158 +0,0 @@ -/* CSS Reset */ -*, *::before, *::after { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -/* CSS Variables */ -:root { - --color-background: #faf4ed; - --color-foreground: #2b303b; - --color-link: #286983; - --color-link-hover: #56949f; - - --font-body: IBM Plex, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - --font-heading: IBM Plex Sans, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - --font-mono: 'IBM Plex Mono', 'Berkeley Mono', 'Cascadia Code', 'Roboto Mono', Consolas, monospace; - - --spacing-base: 16px; - --spacing-line-height: 1.6; - --spacing-scale: 1.25; -} - -/* Base Styles */ -html { - font-size: var(--spacing-base); - line-height: var(--spacing-line-height); -} - -body { - font-family: var(--font-body); - color: var(--color-foreground); - background-color: var(--color-background); - max-width: 65ch; - margin: 0 auto; - padding: 2rem 1rem; -} - -/* Typography */ -h1, h2, h3, h4, h5, h6 { - font-family: var(--font-heading); - margin-top: calc(1rem * var(--spacing-scale)); - margin-bottom: 0.5rem; - line-height: 1.2; -} - -h1 { font-size: 2.5rem; } -h2 { font-size: 2rem; } -h3 { font-size: 1.5rem; } -h4 { font-size: 1.25rem; } -h5 { font-size: 1.125rem; } -h6 { font-size: 1rem; } - -p { - margin-bottom: 1rem; -} - -a { - color: var(--color-link); - text-decoration: none; -} - -a:hover { - color: var(--color-link-hover); - text-decoration: underline; -} - -/* Lists */ -ul, ol { - margin-left: 2rem; - margin-bottom: 1rem; -} - -li { - margin-bottom: 0.25rem; -} - -/* Code */ -code { - font-family: var(--font-mono); - background-color: rgba(0, 0, 0, 0.05); - padding: 0.125rem 0.25rem; - border-radius: 3px; - font-size: 0.9em; -} - -pre { - overflow-x: auto; - margin-bottom: 1rem; -} - -pre code { - display: block; - padding: 1rem; - background-color: rgba(0, 0, 0, 0.03); - border-radius: 5px; -} - -/* Math */ -.math { - font-family: var(--font-mono); -} - -.math-display { - display: block; - margin: 1rem 0; - text-align: center; -} - -/* Blockquotes */ -blockquote { - border-left: 4px solid var(--color-link); - padding-left: 1rem; - margin: 1rem 0; - font-style: italic; -} - -/* Tables */ -table { - border-collapse: collapse; - width: 100%; - margin-bottom: 1rem; -} - -th, td { - border: 1px solid rgba(0, 0, 0, 0.1); - padding: 0.5rem; - text-align: left; -} - -th { - background-color: rgba(0, 0, 0, 0.05); - font-weight: 600; -} - -/* Footnotes */ -.footnote-reference { - font-size: 0.8em; -} - -.footnote-definition { - margin-top: 2rem; - padding-top: 0.5rem; - border-top: 1px solid rgba(0, 0, 0, 0.1); - font-size: 0.9em; -} - -.footnote-definition-label { - font-weight: 600; - margin-right: 0.5rem; -} - -/* Horizontal Rule */ -hr { - border: none; - border-top: 1px solid rgba(0, 0, 0, 0.1); - margin: 2rem 0; -} diff --git a/alloy/css/syntax.css b/alloy/css/syntax.css deleted file mode 100644 index 3dd4e15..0000000 --- a/alloy/css/syntax.css +++ /dev/null @@ -1,88 +0,0 @@ -/* - * theme "Rosé Pine Dawn" generated by syntect - */ - -.wvrcode-code { - color: #575279; - background-color: #faf4ed; -} - -.wvrcode-comment { - color: #797593; -font-style: italic; -} -.wvrcode-string, .wvrcode-punctuation.wvrcode-definition.wvrcode-string { - color: #ea9d34; -} -.wvrcode-constant.wvrcode-numeric { - color: #ea9d34; -} -.wvrcode-constant.wvrcode-language { - color: #ea9d34; -font-weight: bold; -} -.wvrcode-constant.wvrcode-character, .wvrcode-constant.wvrcode-other { - color: #ea9d34; -} -.wvrcode-variable { - color: #575279; -font-style: italic; -} -.wvrcode-keyword { - color: #286983; -} -.wvrcode-storage { - color: #56949f; -} -.wvrcode-storage.wvrcode-type { - color: #56949f; -} -.wvrcode-entity.wvrcode-name.wvrcode-class { - color: #286983; -font-weight: bold; -} -.wvrcode-entity.wvrcode-other.wvrcode-inherited-class { - color: #286983; -font-style: italic; -} -.wvrcode-entity.wvrcode-name.wvrcode-function { - color: #d7827e; -font-style: italic; -} -.wvrcode-variable.wvrcode-parameter { - color: #907aa9; -} -.wvrcode-entity.wvrcode-name.wvrcode-tag { - color: #286983; -font-weight: bold; -} -.wvrcode-entity.wvrcode-other.wvrcode-attribute-name { - color: #907aa9; -} -.wvrcode-support.wvrcode-function { - color: #d7827e; -font-weight: bold; -} -.wvrcode-support.wvrcode-constant { - color: #ea9d34; -font-weight: bold; -} -.wvrcode-support.wvrcode-type, .wvrcode-support.wvrcode-class { - color: #56949f; -font-weight: bold; -} -.wvrcode-support.wvrcode-other.wvrcode-variable { - color: #b4637a; -font-weight: bold; -} -.wvrcode-invalid { - color: #575279; - background-color: #b4637a; -} -.wvrcode-invalid.wvrcode-deprecated { - color: #575279; - background-color: #907aa9; -} -.wvrcode-punctuation, .wvrcode-keyword.wvrcode-operator { - color: #797593; -} diff --git a/alloy/entry/Features/Allocator.html b/alloy/entry/Features/Allocator.html deleted file mode 100644 index d904e95..0000000 --- a/alloy/entry/Features/Allocator.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Allocator - - - - - - diff --git a/alloy/entry/Features/Effects.html b/alloy/entry/Features/Effects.html deleted file mode 100644 index 7c9f46f..0000000 --- a/alloy/entry/Features/Effects.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - Effects - - - - -

Overview

-

Alloy's effect system provides explicit tracking of side effects at the type level. This allows for better reasoning about code behavior and enables powerful optimizations while maintaining clarity about what a function can do.

-

Core Concepts

-

Effect Declaration

-

Effects are declared using the effect keyword:

-
effect IO {
-	read_line() -> String
-	print(String)
-}
-
-effect State[T] {
-	get() -> T
-	set(T)
-}
-
-effect Random {
-	next_int(min: i32, max: i32) -> i32
-}
-
-

Using Effects

-

Functions must declare which effects they use with the with keyword:

-
fn get_user_name() -> String with IO {
-	print("Enter your name: ")
-	read_line()
-}
-
-fn generate_id() -> i32 with Random {
-	next_int(0, 1000)
-}
-
-

Multiple Effects

-

Functions can use multiple effects:

-
fn interactive_random() -> i32 with IO, Random {
-	print("Generating a random number...")
-	let num = next_int(0, 100)
-	print("Generated: {num}")
-	num
-}
-
-

Effect Handlers

-

Effects are implemented using handlers:

-
handler ConsoleIO for IO {
-	fn read_line() -> String {
-		// Implementation using actual console I/O
-	}
-	
-	fn print(message: String) {
-		// Implementation using actual console I/O
-	}
-}
-
-handler TestIO for IO {
-	let mut inputs: Vec[String]
-	let mut outputs: Vec[String]
-	
-	fn read_line() -> String {
-		inputs.pop().unwrap_or("Test Input")
-	}
-
-	fn print(message: String) {
-		outputs.push(messages)
-	}
-}
-
-

Running with Effects

-

Use the run keyword to execute code with effect handlers:

-
fn main() {
-	// Using real I/O
-	run with ConsoleIO {
-		let name = get_user_name()
-		print("Hello, {name}!")
-	}
-
-	// Using test I/O
-	let test_io = TestIO {
-		inputs: vec!["Test User"],
-		outputs: vec![]
-	}
-
-	run with test_io {
-		let name = get_user_name()
-		print("Hello, {name}!")
-	}
-
-	assert_eq(test_io.outputs, ["Enter your name: ", "Hello, Test User!"])
-}
-
-

Effect Composition

-

Combining Effects

-
effect Logger {
-	log(message: String)
-} 
-
-effect Database {
-	query(sql: String) -> Result[Row, DbError]
-}
-
-// Combined effect handler
-fn process_user() -> Result[(), Error] with Logger, Database, IO {
-	log("Starting user processing")
-	let user = match query("SELECT * FROM users LIMIT 1") {
-		Ok(row) -> row,
-		Err(e) -> {
-			log("Database error: {e}")
-			return Err(e.into())
-		}
-	}
-	print("Found user: {user.name}")
-	Ok(())
-}
-
-

Effect Polymorphism

-
// Generic over any effect that provides logging
-
-fn audit[E: Logger](action: String) -> () with E {
-	log("Audit: {action}")
-}
-
-

Best Practices

-
    -
  1. Effect Granularity
  2. -
- -
    -
  1. Effect Isolation
  2. -
- -
    -
  1. Testing with Effects
  2. -
- -
    -
  1. Effect Documentation
  2. -
- -
    -
  1. Effect Performance
  2. -
- -

Patterns

-

The Reader Effect

-
effect Reader[C] {
-	ask() -> C
-}
-  
-fn get_config[C]() -> C with Reader[C] {
-	ask()
-}
-
-fn use_config() -> String with Reader[Config] {
-	let config = ask()
-	config.base_url
-}
-
-

The Writer Effect

-
effect Writer[W] {
-	tell(W)
-	clear()
-}
-
-fn log_action(action: String) -> () with Writer[String] {
-	tell("[{timestamp()}] {action}")
-}
-
-

Combining with Pipelines

-
effect Transform {
-	validate(String) -> Result[String, Error]
-	normalize(String) -> String
-	encrypt(String) -> String
-}
-
-fn process_input(input: String) -> Result[String, Error] with Transform {
-	input
-		|> validate()
-		|> map(normalize)
-		|> map(encrypt)
-}
-
- diff --git a/alloy/entry/Features/Traits.html b/alloy/entry/Features/Traits.html deleted file mode 100644 index d16fb35..0000000 --- a/alloy/entry/Features/Traits.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - Traits - - - - -

Trait System Guide

-

Overview

-

Alloy's trait system builds on Rust's traits while adding powerful features like default implementations, template control, and better composition patterns.

-

Core Concepts

-

The basics follow Rust closely

-

Basic Trait Declaration

-
trait Display {
-	fn display(self) -> String // Note: no semicolon
-}
-
-

Implementation

-
struct Point {
-	x: f64
-	y: f64
-}
-
-impl Display for Point {
-	fn display(self) -> String {
-		"({self.x}, {self.y})" // Alloy builds formatting into Strings
-	}
-}
-
-

Generic Traits

-
trait Container[T] { // Alloy uses [] rather than < > for type parameters
-	fn add(self, item: T)
-	fn remove(self) -> Option[T]
-	fn is_empty(self) -> bool
-}  
-
-impl[T] Container[T] for Stack[T] {
-	fn add(self, item: T) {
-		self.push(item)
-	} 
-
-	fn remove(self) -> Option[T] {
-		self.pop()
-	}
-
-	fn is_empty(self) -> bool {
-		self.len() == 0
-	}
-}
-
-

Features

-

Default Implementations

-

Like in Rust, traits in Alloy can contain a mix of methods which include a default implementation and ones which require the implementer to provide an implementation.

-
trait Collection[T] {
-	fn is_empty(self) -> bool {
-		self.len() == 0
-	}
-  
-	fn len(self) -> usize  
-
-	fn contains(self, item: T) -> bool {
-		self.into_iter().any { x in x == item }
-	}
-}
-
-

Trait Defaults

-

Unlike in Rust, associated types in Alloy can carry a default value. Sensible defaults make writing simple things easy, without losing any flexibility.

-
// Define a trait with a default implementation strategy
-trait ToString {
-	default = JsonString
-	fn to_string(self) -> String
-}  
-
-// Implementations can override the default
-impl ToString for CustomType {
-	fn to_string(self) -> String {
-		// Custom implementation
-	}
-}
-  
-// Or use the default
-impl ToString for SimpleType default
-
-

Template Control

-

Defaults allow more organic composition and make code simpler.

-
trait Serialize[Format] {
-	default Format = Json
-	fn serialize(self) -> String
-}  
-
-// Use default format
-fn save[T: Serialize](item: T) {
-	item.serialize() // Uses Json format
-}  
-
-// Override default format
-fn save_xml[T: Serialize[Xml]](item: T) {
-	item.serialize() // Uses XML format
-}
-
-

Conditional Implementation

-
impl[T: Display] Display for Option[T] {
-	fn display(self) -> String {
-		match self {
-			Some(value) -> value.display()
-			None -> "None"
-		}
-	}
-}
-
-

The above snippet, if not defined in either the same crate as Display or the same crate as Option[T], would require a newtype wrapper in Rust due to the orphan rule, and a bunch of extra boilerplate to make it behave nicely. Alloy either avoids or elides all that for you. Types are types and traits are traits, and you should be able to work with them as you wish. The compiler will attempt to resolve them and handle any possible conflicts as expected, without surprises, but if it cannot, or if you want to choose the implementation, you can specify.

-

Trait Composition

-

Traits can also be composed quite freely using a few simple operators, to build up more complex types, in a way that is easy to understand.

-
trait Identified {
-	fn id(self) -> usize
-}
-  
-trait Named {
-	fn name(self) -> String
-}  
-
-// Compose traits
-trait Entity = Identified + Named {
-	// Additional requirements can be added
-	fn describe(self) -> String {
-		"{self.id()}: {self.name()}"
-	}
-}
-
-// Misha can you check my syntax here?
-trait Component = Identified + !Named // Marker trait
-
-trait GameObject = Entity | Component {
-	fn describe(self) -> String {
-		match typeof self {
-			Entity -> (self as Entity).describe()
-			Component -> "{(self as Identified).id()}"
-		}
-	}
-}
-
-

Best Practices

-
    -
  1. Trait Cohesion
  2. -
- -
    -
  1. Default Implementations
  2. -
- -
    -
  1. Template Defaults
  2. -
- -
    -
  1. Trait Bounds
  2. -
- -
    -
  1. Documentation
  2. -
- -

Patterns

-

Builder Pattern

-
trait Builder[T] {
-	fn build(self) -> Result[T, BuildError]  
-
-	// Optional steps with defaults
-	fn with_name(self, name: String) -> Self {
-		self
-	}
-
-	fn with_id(self, id: usize) -> Self {
-		self
-	}
-}
-
-

Type State Pattern

-
trait State {
-	type Next: State
-	fn transition(self) -> Next
-}
-
-  
-implement State for Draft {
-	type Next = Review
-
-	fn transition(self) -> Review {
-		Review::new(self)
-	}
-}
-
- diff --git a/alloy/entry/Language Overview.html b/alloy/entry/Language Overview.html deleted file mode 100644 index 4857e47..0000000 --- a/alloy/entry/Language Overview.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - Language Overview - - - - -

.ac file extension

-

Design Philosophy

-

Safety First

- -

Performance

- -

Ergonomics

- -

Key Features

-

Type System

- -
// Union types and type narrowing
-type StringOrNumber = string | number
-
-fn process(value: StringOrNumber) {
-	match typeof value {
-		"string" -> handle_string(value as string)
-		"number" -> handle_number(value as number)
-	}
-}
-
-// Optional chaining and null coalescing
-let value = obj?.prop?.method() ?? default_value
-
-

Memory Management

- -

Example:

-
// Standard usage - implicit Arc
-let shared = ComplexType::new()
-
-// No-atomic reference counting for embedded platforms
-
-#[no_atomic]
-let basic = ComplexType::new()
-
-// Custom allocation
-
-let bump_allocator = BumpAllocator::new(1024)
-	run with bump_allocator as Alloc {
-	let temp = ComplexType::new()
-}
-
-

...

- - diff --git a/alloy/entry/Logo.svg b/alloy/entry/Logo.svg deleted file mode 100644 index 27794da..0000000 --- a/alloy/entry/Logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/alloy/entry/README.md.html b/alloy/entry/README.md.html deleted file mode 100644 index 0cac346..0000000 --- a/alloy/entry/README.md.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - README.md - - - - -

Logo.svg

-

Alloy

-

Alloy is a language that fuses Rust's power, safety guarantees, and performance with Swift's ergonomics and TypeScript's type system innovations. It features unique systems like explicit effect tracking and an advanced trait system with defaults. It maintains portability and compatibility by transpiling to Rust code, meaning it runs pretty much anywhere Rust does, and can take advantage of the existing Rust ecosystem.

-

Key Features

- -

Example

-
effect IO {
-	read_line() -> String
-	print(String)
-}
-
-fn process(input: String) -> String {
-	input
-		|> trim()
-		|> to_uppercase()
-		|> add_exclamation()
-}
-
-fn main() -> Result[(), Error] with IO {
-	print("Enter your name: ")
-	let name = read_line()
-	let processed = process(name)
-	print("Hello, {processed}!")
-	Ok(())
-}
-
-

Documentation

- -

Status

-

Contributing

-

License

-

Alloy is licensed under the MPL-2.0.

-

License: MPL 2.0

- - diff --git a/alloy/entry/Syntax Guide.html b/alloy/entry/Syntax Guide.html deleted file mode 100644 index 1b1b0d3..0000000 --- a/alloy/entry/Syntax Guide.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - Syntax Guide - - - - -

Core Principles

-
    -
  1. Clean and consistent syntax that prioritizes readability
  2. -
  3. Pipeline-oriented flow where appropriate
  4. -
  5. Explicit over implicit
  6. -
  7. Thread-local and immutable by default
  8. -
  9. Square brackets for generics/templates
  10. -
  11. Minimal noise and ceremony
  12. -
  13. Predictable formatting rules
  14. -
-

Basic Syntax Elements

-

Keywords and Names

-

Functions

-
// Function declaration
-fn add(x: i32, y: i32) -> i32 {
-	x + y
-}
-
-// Async function
-fn fetch_data() -> Result[Data, Error] with Async {
-	// ...
-}
-
-// Generic function
-fn map[T, U](value: T, f: fn(T) -> U) -> U {
-	f(value)
-}
-
-

Variables

-

-// Immutable by default
-let x = 5
-
-// Mutable variables must be declared with 'let mut'
-let mut count = 0
-
-// Explicit type annotation
-let name: String = "Alice"
-
-// Pattern binding
-let Point(x, y) = point
-
-

Types and Traits

-
// Type declaration
-type Point {
-	x: f64
-	y: f64
-}
-
-// Enum (sum type)
-type Option[T] {
-	Some(T)
-	None
-}
-
-// Trait declaration
-trait Display {
-	fn display(self) -> String
-}
-
-// Generic trait with associated type
-trait Container[T] {
-	type Item
-	fn get(self) -> Option[T]
-	fn insert(self, item: T)
-}
-
-

Control Flow

-

Pattern Matching

-
// Basic match expression using pipeline
-let description = value
-	|> match {
-		Ok(n) if n > 0 -> "Positive"
-		Ok(n) if n < 0 -> "Negative"
-		Ok(0) -> "Zero"
-		Err(e) -> "Error: {e}"
-	}
-
-// Match with complex patterns
-let command = input
-	|> match {
-		Command.Quit -> exit(0)
-		Command.Move(x, y) -> move_cursor(x, y)
-		Command.Text(str) -> insert_text(str)
-		_ -> beep()
-	}
-
-

Conditionals

-
// If expression
-let status = if count > 0 {
-	"Active"
-} else {
-	"Inactive"
-}
-
-// Guard statement for early returns
-fn process(data: Option[Data]) -> Result[Output, Error] {
-	guard let unwrapped = data else {
-		return Err(Error.InvalidData)
-	}
-	process_unwrapped(unwrapped)
-}
-
-
-

Loops

-
// For-in loop
-for item in items {
-	process(item)
-}
-
-// While loop
-while condition {
-	// ...
-}
-
-// Loop with iterator methods
-items
-	|> filter(pred)
-	|> map(transform)
-	|> collect()
-
-

Error Handling

-

Results and Options

-
// Using Result type
-fn divide(x: f64, y: f64) -> Result[f64, DivisionError] {
-	if y == 0.0 {
-		Err(DivisionError.DivideByZero)
-	} else {
-		Ok(x / y)
-	}
-}
-
-// Chaining Results
-let result = value
-	|> first_operation()
-	|> and_then(second_operation)
-	|> map(third_operation)
-	|> map_err(CustomError)
-
-// Pattern matching on Result
-let output = result
-	|> match {
-		Ok(value) -> process(value)
-		Err(e) -> handle_error(e)
-	}
-
-

Effects and Side Effects

-

Effect Declaration and Usage

-
// Declaring effects
-effect IO {
-	read_line() -> String
-	print(str: String)
-}
-
-// Using effects
-fn greet() -> String with IO {
-	print("What's your name?")
-	let name = read_line()
-	print("Hello, {name}!")
-	name
-}
-
-// Handling effects
-fn main() {
-	run with IO = ConsoleIO {
-		let name = greet()
-		print("Goodbye, {name}")
-	}
-}
-
-

Generics and Traits

-

Generic Types

-
// Generic type declaration
-type List[T] {
-	head: Option[T]
-	tail: Option[Box[List[T]]]
-}
-
-// Generic trait bounds
-fn sort[T: Ord](list: &mut [T]) {
-	// Implementation
-}
-
-// Multiple bounds
-fn process[T: Display + Clone](item: T) {
-	// Implementation
-}
-
-

Trait Implementation

-
implement Display for Point {
-	fn display(self) -> String {
-		"Point({self.x}, {self.y})"
-	}
-}
-
-// Generic implementation
-implement[T: Display] Display for Option[T] {
-	fn display(self) -> String {
-		match self {
-			Some(value) -> "Some({value})"
-			None -> "None"
-		}
-	}
-}
-
-
-

Concurrency

-

Async/Await

-
// Async function declaration
-fn fetch_data(url: String) -> Result[Data, Error] with Async {
-	let response = http.get(url)?.await
-	let data = response.json()?.await
-	Ok(data)
-}
-
-// Using async functions
-fn process() with Async {
-	let data = fetch_data("example.com")?
-		|> await
-	process_data(data)
-		|> await
-}
-
-

Thread Safety

-
// Thread-local by default
-let counter = 0
-
-// Explicitly shared state
-shared let global_counter = AtomicInteger(0)
-
-// Shared function
-shared fn increment() {
-	global_counter.fetch_add(1)
-}
-
-

Pipeline Operator

-

Basic Usage

-
// Pipeline with simple transformations
-let result = value
-	|> transform1()
-	|> transform2()
-	|> transform3()
-	
-// Pipeline with closures
-let processed = data
-	|> map(x -> x * 2)
-	|> filter(x -> x > 0)
-	|> fold(0, (acc, x) -> acc + x)
-
-

Complex Pipelines

-
let result = initial_value
-	|> validate()
-	|> match {
-		Ok(value) -> process(value)
-		Err(e) -> handle_error(e)
-	}
-	|> transform()
-	|> finalize()
-
-

Standard Library Conventions

-

Iterator Methods

-
// Method chaining with iterators
-let sum = numbers
-	|> filter(n -> n > 0)
-	|> map(n -> n * n)
-	|> sum()
-
-// Collecting results
-let vec = iter
-	|> filter(pred)
-	|> map(transform)
-	|> collect()
-
-

String Formatting

-
// String interpolation
-let message = "Hello, {name}!"
-
-// Multi-line strings
-let text = """
-	This is a multi-line
-	string with proper
-	indentation handling
-"""
-
-

Module System

-

Module Declaration

-
// Module declaration
-module math {
-	pub fn add(x: i32, y: i32) -> i32 {
-		x + y
-	}
-}
-
-// Using modules
-use math.{add, subtract}
-use collections.{HashMap, Vector}
-
-

Comments and Documentation

-

Documentation Comments

-
/// Function documentation
-///
-/// # Arguments
-/// * `x` - First number
-/// * `y` - Second number
-///
-/// # Returns
-/// Sum of the two numbers
-
-fn add(x: i32, y: i32) -> i32 {
-	x + y
-}
-
-// Regular single-line comment
-
-/* Block comment
-spanning multiple
-lines */
-
-
-

Formatting Rules

-
    -
  1. Use 4 spaces for indentation
  2. -
  3. One statement per line
  4. -
  5. Blank line between function definitions
  6. -
  7. No semicolon for expressions that are the last in a block
  8. -
  9. Space after keywords
  10. -
  11. No space after function names in calls
  12. -
  13. Align match arms
  14. -
  15. Pipeline operators at the start of lines
  16. -
  17. Break long lines at sensible points (pipelines, binary operators)
  18. -
-

Best Practices

-
    -
  1. Prefer pipeline style for transformations and matches
  2. -
  3. Use pattern matching over if/else chains
  4. -
  5. Make effects explicit
  6. -
  7. Keep functions focused and small
  8. -
  9. Use meaningful and descriptive names
  10. -
  11. Document public interfaces
  12. -
  13. Utilize type inference where it aids readability
  14. -
  15. Make thread sharing explicit
  16. -
  17. Handle all error cases explicitly
  18. -
  19. Use appropriate abstraction levels
  20. -
- - diff --git a/alloy/entry/Untitled.html b/alloy/entry/Untitled.html deleted file mode 100644 index b58b309..0000000 --- a/alloy/entry/Untitled.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - Untitled - - - - -

-struct Encoder {
-	
-}
-
-impl Encoder {
-	fn new(chars: &[char]) --> Self {
-		Self {
-			chars,
-			position: 0,
-			is_number: false,
-			number_start: 0
-		}
-	}
-}
-
-let chars = {}
-
-let enc = Encoder::new(chars)
-
-for char in enc.chars {
-	
-}
-
-
-
- diff --git a/alloy/entry/todo!.html b/alloy/entry/todo!.html deleted file mode 100644 index ccb3daa..0000000 --- a/alloy/entry/todo!.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - todo! - - - - -
-

kanban-plugin: board

-
-

PLANNED

-

NOT STARTED

-

BLOCKED

-

IN PROGRESS

-

IN TESTING

-

DONE

-

Complete

-

%% kanban:settings

-
{"kanban-plugin":"board","list-collapse":[true,true,true,true,true,true]}
-
-

%%

- - diff --git a/alloy/index.html b/alloy/index.html deleted file mode 100644 index b6ea4a4..0000000 --- a/alloy/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Language Overview - - - - -

Index

- - - diff --git a/crates/weaver-server/.gitignore b/crates/weaver-server/.gitignore new file mode 100644 index 0000000..80aab8e --- /dev/null +++ b/crates/weaver-server/.gitignore @@ -0,0 +1,7 @@ +# Generated by Cargo +# will have compiled files and executables +/target +.DS_Store + +# These are backup files generated by rustfmt +**/*.rs.bk diff --git a/crates/weaver-server/Cargo.toml b/crates/weaver-server/Cargo.toml index f80d495..2ec4218 100644 --- a/crates/weaver-server/Cargo.toml +++ b/crates/weaver-server/Cargo.toml @@ -1,27 +1,23 @@ [package] name = "weaver-server" -version.workspace = true -edition.workspace = true -license.workspace = true -publish = false +version = "0.1.0" +authors = ["Orual "] +edition = "2021" -[[bin]] -name = "weaver-server" -path = "src/main.rs" - -[lib] -name = "weaver_server" -path = "src/lib.rs" +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +dioxus = { version = "0.6.0", features = ["router", "fullstack"] } weaver-common = { path = "../weaver-common" } weaver-workspace-hack = { version = "0.1", path = "../weaver-workspace-hack" } jacquard = { workspace = true, features = ["tracing"] } -jacquard-axum = { workspace = true } - -axum = "0.8" -tokio = { version = "1.44", features = ["full"] } -notify = "8.0" -clap = { version = "4.5", features = ["derive", "env", "cargo", "unicode"] } +[features] +default = ["web"] +# The feature that are only required for the web = ["dioxus/web"] build target should be optional and only enabled in the web = ["dioxus/web"] feature +web = ["dioxus/web"] +# The feature that are only required for the desktop = ["dioxus/desktop"] build target should be optional and only enabled in the desktop = ["dioxus/desktop"] feature +desktop = ["dioxus/desktop"] +# The feature that are only required for the mobile = ["dioxus/mobile"] build target should be optional and only enabled in the mobile = ["dioxus/mobile"] feature +mobile = ["dioxus/mobile"] diff --git a/crates/weaver-server/Dioxus.toml b/crates/weaver-server/Dioxus.toml new file mode 100644 index 0000000..adc1b3a --- /dev/null +++ b/crates/weaver-server/Dioxus.toml @@ -0,0 +1,21 @@ +[application] + +[web.app] + +# HTML title tag content +title = "weaver-server" + +# include `assets` in web platform +[web.resource] + +# Additional CSS style files +style = [] + +# Additional JavaScript files +script = [] + +[web.resource.dev] + +# Javascript code file +# serve: [dev-server] only +script = [] diff --git a/crates/weaver-server/README.md b/crates/weaver-server/README.md new file mode 100644 index 0000000..c8e57d7 --- /dev/null +++ b/crates/weaver-server/README.md @@ -0,0 +1,34 @@ +# Development + +Your new jumpstart project includes basic organization with an organized `assets` folder and a `components` folder. +If you chose to develop with the router feature, you will also have a `views` folder. + +``` +project/ +├─ assets/ # Any assets that are used by the app should be placed here +├─ src/ +│ ├─ main.rs # The entrypoint for the app. It also defines the routes for the app. +│ ├─ components/ +│ │ ├─ mod.rs # Defines the components module +│ │ ├─ hero.rs # The Hero component for use in the home page +│ │ ├─ echo.rs # The echo component uses server functions to communicate with the server +│ ├─ views/ # The views each route will render in the app. +│ │ ├─ mod.rs # Defines the module for the views route and re-exports the components for each route +│ │ ├─ blog.rs # The component that will render at the /blog/:id route +│ │ ├─ home.rs # The component that will render at the / route +├─ Cargo.toml # The Cargo.toml file defines the dependencies and feature flags for your project +``` + +### Serving Your App + +Run the following command in the root of your project to start developing with the default platform: + +```bash +dx serve --platform web +``` + +To run for a different platform, use the `--platform platform` flag. E.g. +```bash +dx serve --platform desktop +``` + diff --git a/crates/weaver-server/assets/favicon.ico b/crates/weaver-server/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..eed0c09735ab94e724c486a053c367cf7ee3d694 GIT binary patch literal 132770 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 vKYngAlX;?f=+C1!yQV)7 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 egUhN1> \ No newline at end of file diff --git a/crates/weaver-server/assets/styling/blog.css b/crates/weaver-server/assets/styling/blog.css new file mode 100644 index 0000000..f27f060 --- /dev/null +++ b/crates/weaver-server/assets/styling/blog.css @@ -0,0 +1,8 @@ +#blog { + margin-top: 50px; +} + +#blog a { + color: #ffffff; + margin-top: 50px; +} \ No newline at end of file diff --git a/crates/weaver-server/assets/styling/echo.css b/crates/weaver-server/assets/styling/echo.css new file mode 100644 index 0000000..67d9b2b --- /dev/null +++ b/crates/weaver-server/assets/styling/echo.css @@ -0,0 +1,34 @@ +#echo { + width: 360px; + margin-left: auto; + margin-right: auto; + margin-top: 50px; + background-color: #1e222d; + padding: 20px; + border-radius: 10px; +} + +#echo>h4 { + margin: 0px 0px 15px 0px; +} + + +#echo>input { + border: none; + border-bottom: 1px white solid; + background-color: transparent; + color: #ffffff; + transition: border-bottom-color 0.2s ease; + outline: none; + display: block; + padding: 0px 0px 5px 0px; + width: 100%; +} + +#echo>input:focus { + border-bottom-color: #6d85c6; +} + +#echo>p { + margin: 20px 0px 0px auto; +} \ No newline at end of file diff --git a/crates/weaver-server/assets/styling/main.css b/crates/weaver-server/assets/styling/main.css new file mode 100644 index 0000000..e13b92d --- /dev/null +++ b/crates/weaver-server/assets/styling/main.css @@ -0,0 +1,42 @@ +body { + background-color: #0f1116; + color: #ffffff; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + margin: 20px; +} + +#hero { + margin: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +#links { + width: 400px; + text-align: left; + font-size: x-large; + color: white; + display: flex; + flex-direction: column; +} + +#links a { + color: white; + text-decoration: none; + margin-top: 20px; + margin: 10px 0px; + border: white 1px solid; + border-radius: 5px; + padding: 10px; +} + +#links a:hover { + background-color: #1f1f1f; + cursor: pointer; +} + +#header { + max-width: 1200px; +} \ No newline at end of file diff --git a/crates/weaver-server/assets/styling/navbar.css b/crates/weaver-server/assets/styling/navbar.css new file mode 100644 index 0000000..7372c63 --- /dev/null +++ b/crates/weaver-server/assets/styling/navbar.css @@ -0,0 +1,16 @@ +#navbar { + display: flex; + flex-direction: row; +} + +#navbar a { + color: #ffffff; + margin-right: 20px; + text-decoration: none; + transition: color 0.2s ease; +} + +#navbar a:hover { + cursor: pointer; + color: #91a4d2; +} \ No newline at end of file diff --git a/crates/weaver-server/clippy.toml b/crates/weaver-server/clippy.toml new file mode 100644 index 0000000..40456af --- /dev/null +++ b/crates/weaver-server/clippy.toml @@ -0,0 +1,8 @@ +await-holding-invalid-types = [ + "generational_box::GenerationalRef", + { path = "generational_box::GenerationalRef", reason = "Reads should not be held over an await point. This will cause any writes to fail while the await is pending since the read borrow is still active." }, + "generational_box::GenerationalRefMut", + { path = "generational_box::GenerationalRefMut", reason = "Write should not be held over an await point. This will cause any reads or writes to fail while the await is pending since the write borrow is still active." }, + "dioxus_signals::Write", + { path = "dioxus_signals::Write", reason = "Write should not be held over an await point. This will cause any reads or writes to fail while the await is pending since the write borrow is still active." }, +] diff --git a/crates/weaver-server/src/components/echo.rs b/crates/weaver-server/src/components/echo.rs new file mode 100644 index 0000000..119962d --- /dev/null +++ b/crates/weaver-server/src/components/echo.rs @@ -0,0 +1,61 @@ +use dioxus::prelude::*; + +const ECHO_CSS: Asset = asset!("/assets/styling/echo.css"); + +/// Echo component that demonstrates fullstack server functions. +#[component] +pub fn Echo() -> Element { + // use_signal is a hook. Hooks in dioxus must be run in a consistent order every time the component is rendered. + // That means they can't be run inside other hooks, async blocks, if statements, or loops. + // + // use_signal is a hook that creates a state for the component. It takes a closure that returns the initial value of the state. + // The state is automatically tracked and will rerun any other hooks or components that read it whenever it changes. + let mut response = use_signal(|| String::new()); + + rsx! { + document::Link { rel: "stylesheet", href: ECHO_CSS } + + div { + id: "echo", + h4 { "ServerFn Echo" } + input { + placeholder: "Type here to echo...", + // `oninput` is an event handler that will run when the input changes. It can return either nothing or a future + // that will be run when the event runs. + oninput: move |event| async move { + // When we call the echo_server function from the client, it will fire a request to the server and return + // the response. It handles serialization and deserialization of the request and response for us. + let data = echo_server(event.value()).await.unwrap(); + + // After we have the data from the server, we can set the state of the signal to the new value. + // Since we read the `response` signal later in this component, the component will rerun. + response.set(data); + }, + } + + // Signals can be called like a function to clone the current value of the signal + if !response().is_empty() { + p { + "Server echoed: " + // Since we read the signal inside this component, the component "subscribes" to the signal. Whenever + // the signal changes, the component will rerun. + i { "{response}" } + } + } + } + } +} + +// Server functions let us define public APIs on the server that can be called like a normal async function from the client. +// Each server function needs to be annotated with the `#[server]` attribute, accept and return serializable types, and return +// a `Result` with the error type [`ServerFnError`]. +// +// When the server function is called from the client, it will just serialize the arguments, call the API, and deserialize the +// response. +#[server] +async fn echo_server(input: String) -> Result { + // The body of server function like this comment are only included on the server. If you have any server-only logic like + // database queries, you can put it here. Any imports for the server function should either be imported inside the function + // or imported under a `#[cfg(feature = "server")]` block. + Ok(input) +} diff --git a/crates/weaver-server/src/components/hero.rs b/crates/weaver-server/src/components/hero.rs new file mode 100644 index 0000000..3088c5c --- /dev/null +++ b/crates/weaver-server/src/components/hero.rs @@ -0,0 +1,25 @@ +use dioxus::prelude::*; + +const HEADER_SVG: Asset = asset!("/assets/header.svg"); + +#[component] +pub fn Hero() -> Element { + rsx! { + // We can create elements inside the rsx macro with the element name followed by a block of attributes and children. + div { + // Attributes should be defined in the element before any children + id: "hero", + // After all attributes are defined, we can define child elements and components + img { src: HEADER_SVG, id: "header" } + div { id: "links", + // The RSX macro also supports text nodes surrounded by quotes + a { href: "https://dioxuslabs.com/learn/0.6/", "📚 Learn Dioxus" } + a { href: "https://dioxuslabs.com/awesome", "🚀 Awesome Dioxus" } + a { href: "https://github.com/dioxus-community/", "📡 Community Libraries" } + a { href: "https://github.com/DioxusLabs/sdk", "⚙️ Dioxus Development Kit" } + a { href: "https://marketplace.visualstudio.com/items?itemName=DioxusLabs.dioxus", "💫 VSCode Extension" } + a { href: "https://discord.gg/XgGxMSkvUM", "👋 Community Discord" } + } + } + } +} diff --git a/crates/weaver-server/src/components/mod.rs b/crates/weaver-server/src/components/mod.rs new file mode 100644 index 0000000..57bc3b9 --- /dev/null +++ b/crates/weaver-server/src/components/mod.rs @@ -0,0 +1,9 @@ +//! The components module contains all shared components for our app. Components are the building blocks of dioxus apps. +//! They can be used to defined common UI elements like buttons, forms, and modals. In this template, we define a Hero +//! component and an Echo component for fullstack apps to be used in our app. + +mod hero; +pub use hero::Hero; + +mod echo; +pub use echo::Echo; diff --git a/crates/weaver-server/src/lib.rs b/crates/weaver-server/src/lib.rs deleted file mode 100644 index 8b13789..0000000 --- a/crates/weaver-server/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/weaver-server/src/main.rs b/crates/weaver-server/src/main.rs index 342370f..2fcd3f1 100644 --- a/crates/weaver-server/src/main.rs +++ b/crates/weaver-server/src/main.rs @@ -1,15 +1,65 @@ -//! Weaver server -//! -//! This crate is a lightweight HTTP server which can serve a notebook. -//! It will auto-reload +// The dioxus prelude contains a ton of common items used in dioxus apps. It's a good idea to import wherever you +// need dioxus +use dioxus::prelude::*; -use axum::{Router, response::Html, routing::get}; +use views::{Blog, Home, Navbar}; -use tokio::net::TcpListener; +/// Define a components module that contains all shared components for our app. +mod components; +/// Define a views module that contains the UI for all Layouts and Routes for our app. +mod views; + +/// The Route enum is used to define the structure of internal routes in our app. All route enums need to derive +/// the [`Routable`] trait, which provides the necessary methods for the router to work. +/// +/// Each variant represents a different URL pattern that can be matched by the router. If that pattern is matched, +/// the components for that route will be rendered. +#[derive(Debug, Clone, Routable, PartialEq)] +#[rustfmt::skip] +enum Route { + // The layout attribute defines a wrapper for all routes under the layout. Layouts are great for wrapping + // many routes with a common UI like a navbar. + #[layout(Navbar)] + // The route attribute defines the URL pattern that a specific route matches. If that pattern matches the URL, + // the component for that route will be rendered. The component name that is rendered defaults to the variant name. + #[route("/")] + Home {}, + // The route attribute can include dynamic parameters that implement [`std::str::FromStr`] and [`std::fmt::Display`] with the `:` syntax. + // In this case, id will match any integer like `/blog/123` or `/blog/-456`. + #[route("/blog/:id")] + // Fields of the route variant will be passed to the component as props. In this case, the blog component must accept + // an `id` prop of type `i32`. + Blog { id: i32 }, +} + +// We can import assets in dioxus with the `asset!` macro. This macro takes a path to an asset relative to the crate root. +// The macro returns an `Asset` type that will display as the path to the asset in the browser or a local path in desktop bundles. +const FAVICON: Asset = asset!("/assets/favicon.ico"); +// The asset macro also minifies some assets like CSS and JS to make bundled smaller +const MAIN_CSS: Asset = asset!("/assets/styling/main.css"); + +fn main() { + // The `launch` function is the main entry point for a dioxus app. It takes a component and renders it with the platform feature + // you have enabled + dioxus::launch(App); +} + +/// App is the main component of our app. Components are the building blocks of dioxus apps. Each component is a function +/// that takes some props and returns an Element. In this case, App takes no props because it is the root of our app. +/// +/// Components should be annotated with `#[component]` to support props, better error messages, and autocomplete +#[component] +fn App() -> Element { + // The `rsx!` macro lets us define HTML inside of rust. It expands to an Element with all of our HTML inside. + rsx! { + // In addition to element and text (which we will see later), rsx can contain other components. In this case, + // we are using the `document::Link` component to add a link to our favicon and main CSS file into the head of our app. + document::Link { rel: "icon", href: FAVICON } + document::Link { rel: "stylesheet", href: MAIN_CSS } -#[tokio::main] -async fn main() {} -async fn handler() -> Html<&'static str> { - Html("

Hello, World!

") + // The router component renders the route enum we defined above. It will handle synchronization of the URL and render + // the layouts and components for the active route. + Router:: {} + } } diff --git a/crates/weaver-server/src/views/blog.rs b/crates/weaver-server/src/views/blog.rs new file mode 100644 index 0000000..50c2ba7 --- /dev/null +++ b/crates/weaver-server/src/views/blog.rs @@ -0,0 +1,39 @@ +use crate::Route; +use dioxus::prelude::*; + +const BLOG_CSS: Asset = asset!("/assets/styling/blog.css"); + +/// The Blog page component that will be rendered when the current route is `[Route::Blog]` +/// +/// The component takes a `id` prop of type `i32` from the route enum. Whenever the id changes, the component function will be +/// re-run and the rendered HTML will be updated. +#[component] +pub fn Blog(id: i32) -> Element { + rsx! { + document::Link { rel: "stylesheet", href: BLOG_CSS } + + div { + id: "blog", + + // Content + h1 { "This is blog #{id}!" } + p { "In blog #{id}, we show how the Dioxus router works and how URL parameters can be passed as props to our route components." } + + // Navigation links + // The `Link` component lets us link to other routes inside our app. It takes a `to` prop of type `Route` and + // any number of child nodes. + Link { + // The `to` prop is the route that the link should navigate to. We can use the `Route` enum to link to the + // blog page with the id of -1. Since we are using an enum instead of a string, all of the routes will be checked + // at compile time to make sure they are valid. + to: Route::Blog { id: id - 1 }, + "Previous" + } + span { " <---> " } + Link { + to: Route::Blog { id: id + 1 }, + "Next" + } + } + } +} diff --git a/crates/weaver-server/src/views/home.rs b/crates/weaver-server/src/views/home.rs new file mode 100644 index 0000000..686ce7d --- /dev/null +++ b/crates/weaver-server/src/views/home.rs @@ -0,0 +1,11 @@ +use crate::components::{Echo, Hero}; +use dioxus::prelude::*; + +/// The Home page component that will be rendered when the current route is `[Route::Home]` +#[component] +pub fn Home() -> Element { + rsx! { + Hero {} + Echo {} + } +} diff --git a/crates/weaver-server/src/views/mod.rs b/crates/weaver-server/src/views/mod.rs new file mode 100644 index 0000000..0a41003 --- /dev/null +++ b/crates/weaver-server/src/views/mod.rs @@ -0,0 +1,18 @@ +//! The views module contains the components for all Layouts and Routes for our app. Each layout and route in our [`Route`] +//! enum will render one of these components. +//! +//! +//! The [`Home`] and [`Blog`] components will be rendered when the current route is [`Route::Home`] or [`Route::Blog`] respectively. +//! +//! +//! The [`Navbar`] component will be rendered on all pages of our app since every page is under the layout. The layout defines +//! a common wrapper around all child routes. + +mod home; +pub use home::Home; + +mod blog; +pub use blog::Blog; + +mod navbar; +pub use navbar::Navbar; diff --git a/crates/weaver-server/src/views/navbar.rs b/crates/weaver-server/src/views/navbar.rs new file mode 100644 index 0000000..1b13536 --- /dev/null +++ b/crates/weaver-server/src/views/navbar.rs @@ -0,0 +1,32 @@ +use crate::Route; +use dioxus::prelude::*; + +const NAVBAR_CSS: Asset = asset!("/assets/styling/navbar.css"); + +/// The Navbar component that will be rendered on all pages of our app since every page is under the layout. +/// +/// +/// This layout component wraps the UI of [Route::Home] and [Route::Blog] in a common navbar. The contents of the Home and Blog +/// routes will be rendered under the outlet inside this component +#[component] +pub fn Navbar() -> Element { + rsx! { + document::Link { rel: "stylesheet", href: NAVBAR_CSS } + + div { + id: "navbar", + Link { + to: Route::Home {}, + "Home" + } + Link { + to: Route::Blog { id: 1 }, + "Blog" + } + } + + // The `Outlet` component is used to render the next component inside the layout. In this case, it will render either + // the [`Home`] or [`Blog`] component depending on the current route. + Outlet:: {} + } +} diff --git a/flake.nix b/flake.nix index bc3b07d..4a89c84 100644 --- a/flake.nix +++ b/flake.nix @@ -37,7 +37,7 @@ toolchain.default.override { # Set the build targets supported by the toolchain, # wasm32-unknown-unknown is required for trunk. - targets = ["wasm32-unknown-unknown" "wasm32-wasip1" "wasm32-wasip2"]; + targets = ["wasm32-unknown-unknown"]; extensions = [ "rust-src" "rust-analyzer" @@ -218,15 +218,15 @@ }; devShells.default = let - # dioxus-cli = pkgs.dioxus-cli.overrideAttrs (_: { - # postPatch = '' - # rm Cargo.lock - # cp ${./Dioxus.lock} Cargo.lock - # ''; - # cargoDeps = pkgs.rustPlatform.importCargoLock { - # lockFile = ./Dioxus.lock; - # }; - # }); + dioxus-cli = pkgs.dioxus-cli.overrideAttrs (_: { + postPatch = '' + rm Cargo.lock + cp ${./crates/weaver-server/Dioxus.lock} Cargo.lock + ''; + cargoDeps = pkgs.rustPlatform.importCargoLock { + lockFile = ./crates/weaver-server/Dioxus.lock; + }; + }); cargoLock = builtins.fromTOML (builtins.readFile ./Cargo.lock); wasmBindgen =