From cafe0c2dbb21f68b834e149a537b4c265b599f53 Mon Sep 17 00:00:00 2001 From: Sabin Regmi Date: Sun, 29 Dec 2024 22:13:08 -0500 Subject: [PATCH 1/9] Updating Profile Section to use Dioxus Motion --- Cargo.lock | 4095 ++++++++++++++++++++++++++++++++----- Cargo.toml | 20 +- src/components/profile.rs | 135 +- 3 files changed, 3711 insertions(+), 539 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 489d57a..4638eed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,23 +2,213 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[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.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", + "tracing", +] + +[[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.90", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[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.79" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.90", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" @@ -36,6 +226,15 @@ name = "bitflags" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "block-buffer" @@ -46,6 +245,28 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + [[package]] name = "bumpalo" version = "3.15.4" @@ -64,12 +285,79 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.5.0", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[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 = "cc" +version = "1.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" +dependencies = [ + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "ciborium" version = "0.2.2" @@ -97,6 +385,85 @@ dependencies = [ "half", ] +[[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", + "libc", + "objc", +] + +[[package]] +name = "cocoa" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" +dependencies = [ + "bitflags 2.5.0", + "block", + "cocoa-foundation 0.2.0", + "core-foundation 0.10.0", + "core-graphics 0.24.0", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" +dependencies = [ + "bitflags 2.5.0", + "block", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", + "libc", + "objc", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -125,7 +492,7 @@ checksum = "f82bbc5425ac9ef9a7f8705222dcd18ffb20420d7238f22d7c30d7c6b6fe4381" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.90", ] [[package]] @@ -148,6 +515,12 @@ dependencies = [ "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" @@ -158,69 +531,194 @@ dependencies = [ ] [[package]] -name = "cpufeatures" -version = "0.2.12" +name = "core-foundation" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ + "core-foundation-sys", "libc", ] [[package]] -name = "crunchy" -version = "0.2.2" +name = "core-foundation" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "core-foundation-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ - "generic-array", - "typenum", + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", ] [[package]] -name = "darling" -version = "0.20.10" +name = "core-graphics" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "darling_core", - "darling_macro", + "bitflags 2.5.0", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", + "foreign-types", + "libc", ] [[package]] -name = "darling_core" -version = "0.20.10" +name = "core-graphics-types" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "syn", + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", ] [[package]] -name = "darling_macro" -version = "0.20.10" +name = "core-graphics-types" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "darling_core", - "quote", - "syn", + "bitflags 2.5.0", + "core-foundation 0.10.0", + "libc", ] [[package]] -name = "dashmap" -version = "5.5.3" +name = "cpufeatures" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "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.90", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", "hashbrown 0.14.3", @@ -235,6 +733,19 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.90", +] + [[package]] name = "digest" version = "0.10.7" @@ -255,6 +766,7 @@ dependencies = [ "dioxus-config-macro", "dioxus-core", "dioxus-core-macro", + "dioxus-desktop", "dioxus-devtools", "dioxus-document", "dioxus-fullstack", @@ -314,11 +826,11 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abff76b546af9f10e8c601f219a5a172fe95622fab1e098b194daecff9c69ef6" dependencies = [ - "convert_case", + "convert_case 0.6.0", "dioxus-rsx", "proc-macro2", "quote", - "syn", + "syn 2.0.90", ] [[package]] @@ -330,6 +842,55 @@ dependencies = [ "once_cell", ] +[[package]] +name = "dioxus-desktop" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5275c023606e38ba2f37a85dbbba22ad098c0abc6c26beb42aa1f60112f1c9d4" +dependencies = [ + "async-trait", + "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", + "serde", + "serde_json", + "signal-hook", + "slab", + "tao", + "thiserror", + "tokio", + "tracing", + "tray-icon", + "urlencoding", + "webbrowser", + "wry", +] + [[package]] name = "dioxus-devtools" version = "0.6.1" @@ -381,9 +942,10 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3806e61071c9b4f9efcaa4d2f28a49d1b51be7a2fe53686305b85944d406a72" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "ciborium", + "dioxus-desktop", "dioxus-devtools", "dioxus-history", "dioxus-lib", @@ -445,6 +1007,9 @@ dependencies = [ "keyboard-types", "lazy-js-bundle", "rustversion", + "serde", + "serde_json", + "serde_repr", "tracing", ] @@ -454,10 +1019,10 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f50f698bffea14525f0576f02faa5d926ad31252ba3717c340706bf50a311a" dependencies = [ - "convert_case", + "convert_case 0.6.0", "proc-macro2", "quote", - "syn", + "syn 2.0.90", ] [[package]] @@ -466,9 +1031,13 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da2716b62d08dbb2e4e4678f67cd7c9f25204b598eb7c0a569050d68fa3f85e6" dependencies = [ + "dioxus-core", + "dioxus-core-types", + "dioxus-html", "js-sys", "lazy-js-bundle", "rustc-hash", + "serde", "sledgehammer_bindgen", "sledgehammer_utils", "wasm-bindgen", @@ -506,6 +1075,23 @@ dependencies = [ "tracing-wasm", ] +[[package]] +name = "dioxus-motion" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3452c0c1412b602310c3d47e04faa3339e7265291b0fda27ec463be187447844" +dependencies = [ + "dioxus-hooks", + "dioxus-signals", + "easer", + "futures-channel", + "futures-util", + "instant", + "tokio", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "dioxus-router" version = "0.6.1" @@ -531,7 +1117,7 @@ dependencies = [ "proc-macro2", "quote", "slab", - "syn", + "syn 2.0.90", ] [[package]] @@ -543,7 +1129,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn", + "syn 2.0.90", ] [[package]] @@ -604,492 +1190,1781 @@ dependencies = [ "proc-macro2", "quote", "server_fn_macro", - "syn", + "syn 2.0.90", ] [[package]] -name = "enumset" -version = "1.1.3" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "enumset_derive", + "dirs-sys", ] [[package]] -name = "enumset_derive" -version = "0.8.1" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "equivalent" -version = "1.0.1" +name = "dispatch" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" [[package]] -name = "euclid" -version = "0.22.9" +name = "dlopen2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" dependencies = [ - "num-traits", + "dlopen2_derive", + "libc", + "once_cell", + "winapi", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "dlopen2_derive" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] -name = "form_urlencoded" -version = "1.2.1" +name = "dpi" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" [[package]] -name = "futures" -version = "0.3.30" +name = "dtoa" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] -name = "futures-channel" -version = "0.3.30" +name = "dtoa-short" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" dependencies = [ - "futures-core", - "futures-sink", + "dtoa", ] [[package]] -name = "futures-core" -version = "0.3.30" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "futures-executor" -version = "0.3.30" +name = "easer" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "fba524f8b83c9c5bde02c2bb1627de9d1f81980489a6d54168cdfd08c258f917" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "num-traits", ] [[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" +name = "encoding_rs" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ - "proc-macro2", - "quote", - "syn", + "cfg-if", ] [[package]] -name = "futures-sink" -version = "0.3.30" +name = "endi" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" [[package]] -name = "futures-task" -version = "0.3.30" +name = "enumflags2" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +dependencies = [ + "enumflags2_derive", + "serde", +] [[package]] -name = "futures-util" -version = "0.3.30" +name = "enumflags2_derive" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "generational-box" -version = "0.6.1" +name = "enumset" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0db311f84454bdb16231ecd63da9169d61ad06a3262d44ea9be794dd19bf2d" +checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d" dependencies = [ - "parking_lot", - "tracing", + "enumset_derive", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "enumset_derive" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" dependencies = [ - "typenum", - "version_check", + "darling", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "getopts" -version = "0.2.21" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" -dependencies = [ - "unicode-width", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "getrandom" -version = "0.2.12" +name = "errno" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ - "cfg-if", "libc", - "wasi", + "windows-sys 0.59.0", ] [[package]] -name = "gloo-net" -version = "0.5.0" +name = "euclid" +version = "0.22.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43aaa242d1239a8822c15c645f02166398da4f8b5c4bae795c1f5b44e9eee173" +checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils", - "http 0.2.12", - "js-sys", - "pin-project", + "num-traits", "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", ] [[package]] -name = "gloo-utils" -version = "0.2.0" +name = "event-listener" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] -name = "half" -version = "2.4.0" +name = "event-listener-strategy" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eceaaeec696539ddaf7b333340f1af35a5aa87ae3e4f3ead0532f72affab2e" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "cfg-if", - "crunchy", + "event-listener", + "pin-project-lite", ] [[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "hashbrown" -version = "0.15.2" +name = "fastrand" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] -name = "http" -version = "0.2.12" +name = "fdeflate" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ - "bytes", - "fnv", - "itoa", + "simd-adler32", ] [[package]] -name = "http" -version = "1.1.0" +name = "field-offset" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "bytes", - "fnv", - "itoa", + "memoffset", + "rustc_version", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "flate2" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] [[package]] -name = "ident_case" -version = "1.0.1" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "idna" +name = "foreign-types" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "foreign-types-macros", + "foreign-types-shared", ] [[package]] -name = "include_dir" -version = "0.7.4" +name = "foreign-types-macros" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ - "include_dir_macros", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "include_dir_macros" -version = "0.7.4" +name = "foreign-types-shared" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" -dependencies = [ - "proc-macro2", - "quote", -] +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] -name = "indexmap" -version = "2.7.0" +name = "form_urlencoded" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "equivalent", - "hashbrown 0.15.2", + "percent-encoding", ] [[package]] -name = "itoa" -version = "1.0.11" +name = "futf" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] [[package]] -name = "js-sys" -version = "0.3.76" +name = "futures" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ - "once_cell", - "wasm-bindgen", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "keyboard-types" -version = "0.7.0" +name = "futures-channel" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ - "bitflags 2.5.0", + "futures-core", + "futures-sink", ] [[package]] -name = "lazy-js-bundle" -version = "0.6.1" +name = "futures-core" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12eae271f2ceba03bc1dc755b5fb224a80382ca480919aa6d58c31eaf269f9b2" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] -name = "lazy_static" -version = "1.4.0" +name = "futures-executor" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] [[package]] -name = "libc" -version = "0.2.153" +name = "futures-io" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] -name = "lock_api" -version = "0.4.11" +name = "futures-lite" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "autocfg", - "scopeguard", + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", ] [[package]] -name = "log" -version = "0.4.22" +name = "futures-macro" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] [[package]] -name = "longest-increasing-subsequence" -version = "0.1.0" +name = "futures-sink" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] -name = "manganis" -version = "0.6.1" +name = "futures-task" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "106aa1cb0b0f3ce6828fb1b38bcbd877aeded09e6195f353e4927a3fb8b2b2fb" -dependencies = [ - "const-serialize", - "manganis-core", - "manganis-macro", -] +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] -name = "manganis-core" -version = "0.6.1" +name = "futures-util" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343aa8aca68981a15232c318ff9575dd28c0b6b91a70b7d2881f0a4fdb35176c" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ - "const-serialize", - "dioxus-cli-config", - "dioxus-core-types", - "serde", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", ] [[package]] -name = "manganis-macro" -version = "0.6.1" +name = "fxhash" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad7cab3a5a41455854129b4e90a53c204430622d63005891e037d22fc67d92f9" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" dependencies = [ - "manganis-core", - "proc-macro2", - "quote", - "syn", + "byteorder", ] [[package]] -name = "memchr" -version = "2.7.2" +name = "gdk" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] [[package]] -name = "num-traits" -version = "0.2.18" +name = "gdk-pixbuf" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ - "autocfg", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", ] [[package]] -name = "once_cell" -version = "1.20.2" +name = "gdk-pixbuf-sys" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] [[package]] -name = "parking_lot" -version = "0.12.1" +name = "gdk-sys" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" dependencies = [ - "lock_api", - "parking_lot_core", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", ] [[package]] -name = "parking_lot_core" -version = "0.9.9" +name = "gdkwayland-sys" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" dependencies = [ - "cfg-if", + "gdk-sys", + "glib-sys", + "gobject-sys", "libc", - "redox_syscall", - "smallvec", - "windows-targets", + "pkg-config", + "system-deps", ] [[package]] -name = "percent-encoding" -version = "2.3.1" +name = "gdkx11" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] [[package]] -name = "pin-project" -version = "1.1.5" +name = "gdkx11-sys" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" dependencies = [ - "pin-project-internal", + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", ] [[package]] -name = "pin-project-internal" -version = "1.1.5" +name = "generational-box" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "fb0db311f84454bdb16231ecd63da9169d61ad06a3262d44ea9be794dd19bf2d" dependencies = [ - "proc-macro2", - "quote", - "syn", + "parking_lot", + "tracing", ] [[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getopts" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[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", +] + +[[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.5.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror", +] + +[[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.90", +] + +[[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.5.0", + "cocoa 0.25.0", + "crossbeam-channel", + "keyboard-types", + "objc", + "once_cell", + "thiserror", + "windows-sys 0.52.0", + "x11-dl", +] + +[[package]] +name = "gloo-net" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43aaa242d1239a8822c15c645f02166398da4f8b5c4bae795c1f5b44e9eee173" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "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 = "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.90", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.7.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eceaaeec696539ddaf7b333340f1af35a5aa87ae3e4f3ead0532f72affab2e" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.11", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.11", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http 0.2.12", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.11", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "infer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6c16b11a665b26aeeb9b1d7f954cdeb034be38dd00adab4f2ae921a8fee804" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[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.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.5.0", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +dependencies = [ + "cssparser", + "html5ever", + "indexmap 1.9.3", + "matches", + "selectors", +] + +[[package]] +name = "lazy-js-bundle" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12eae271f2ceba03bc1dc755b5fb224a80382ca480919aa6d58c31eaf269f9b2" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[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.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[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 = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "longest-increasing-subsequence" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "manganis" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106aa1cb0b0f3ce6828fb1b38bcbd877aeded09e6195f353e4927a3fb8b2b2fb" +dependencies = [ + "const-serialize", + "manganis-core", + "manganis-macro", +] + +[[package]] +name = "manganis-core" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343aa8aca68981a15232c318ff9575dd28c0b6b91a70b7d2881f0a4fdb35176c" +dependencies = [ + "const-serialize", + "dioxus-cli-config", + "dioxus-core-types", + "serde", +] + +[[package]] +name = "manganis-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad7cab3a5a41455854129b4e90a53c204430622d63005891e037d22fc67d92f9" +dependencies = [ + "manganis-core", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[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 = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[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", + "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", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "png", + "thiserror", + "windows-sys 0.59.0", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.5.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle 0.6.2", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + +[[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.5.0", + "cfg-if", + "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 = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[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 = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.5.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.5.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.5.0", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.5.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.5.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[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 = "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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[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_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_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_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", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] @@ -1098,12 +2973,127 @@ 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 = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[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.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "pollster" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" + [[package]] name = "ppv-lite86" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.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.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.22", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-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.92" @@ -1121,7 +3111,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.90", "version_check", ] @@ -1153,6 +3143,20 @@ dependencies = [ "proc-macro2", ] +[[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" @@ -1160,43 +3164,193 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.12", +] + +[[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 = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.12", + "libredox", + "thiserror", +] + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http 0.2.12", + "http-body", + "hyper", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg", +] + +[[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 = "rand_chacha" -version = "0.3.1" +name = "rustc-demangle" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] -name = "rand_core" -version = "0.6.4" +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "redox_syscall" +name = "rustc_version" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "bitflags 1.3.2", + "semver", ] [[package]] -name = "rustc-hash" -version = "1.1.0" +name = "rustix" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] [[package]] name = "rustversion" @@ -1210,12 +3364,47 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[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", + "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.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" + [[package]] name = "send_wrapper" version = "0.6.0" @@ -1227,9 +3416,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.216" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -1247,13 +3436,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.216" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.90", ] [[package]] @@ -1262,7 +3451,7 @@ version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ - "itoa", + "itoa 1.0.11", "ryu", "serde", ] @@ -1278,6 +3467,17 @@ dependencies = [ "thiserror", ] +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "serde_spanned" version = "0.6.8" @@ -1287,6 +3487,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.11", + "ryu", + "serde", +] + [[package]] name = "server_fn" version = "0.6.9" @@ -1301,6 +3513,7 @@ dependencies = [ "http 1.1.0", "js-sys", "once_cell", + "reqwest", "send_wrapper", "serde", "serde_json", @@ -1322,10 +3535,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1" dependencies = [ "const_format", - "convert_case", + "convert_case 0.6.0", "proc-macro2", "quote", - "syn", + "syn 2.0.90", "xxhash-rust", ] @@ -1336,7 +3549,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "060af1def72353a779fcc184c53e1965d3055a38b9e827f2259b2bff2d9c371e" dependencies = [ "server_fn_macro", - "syn", + "syn 2.0.90", +] + +[[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]] @@ -1350,6 +3573,17 @@ dependencies = [ "digest", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -1359,6 +3593,43 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "slab" version = "0.4.9" @@ -1385,7 +3656,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33a1b4f13e2bbf2f5b29d09dfebc9de69229ffee245aed80e3b70f9b5fd28c06" dependencies = [ "quote", - "syn", + "syn 2.0.90", ] [[package]] @@ -1413,6 +3684,91 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.90" @@ -1424,6 +3780,133 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "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", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a93f2c6b8fdaeb7f417bda89b5bc767999745c3052969664ae1fa65892deb7e" +dependencies = [ + "bitflags 2.5.0", + "cocoa 0.26.0", + "core-foundation 0.10.0", + "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", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core", + "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.90", +] + +[[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.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[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.58" @@ -1441,7 +3924,7 @@ checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.90", ] [[package]] @@ -1469,25 +3952,89 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ - "serde", - "serde_spanned", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.22", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.7.0", "toml_datetime", - "toml_edit", + "winnow 0.5.40", ] [[package]] -name = "toml_datetime" -version = "0.6.8" +name = "toml_edit" +version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "serde", + "indexmap 2.7.0", + "toml_datetime", + "winnow 0.5.40", ] [[package]] @@ -1496,13 +4043,19 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.20", ] +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.40" @@ -1522,7 +4075,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.90", ] [[package]] @@ -1556,6 +4109,32 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "tray-icon" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d48a05076dd272615d03033bf04f480199f7d1b66a8ac64d75c625fc4a70c06b" +dependencies = [ + "core-graphics 0.24.0", + "crossbeam-channel", + "dirs", + "libappindicator", + "muda 0.15.3", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "png", + "thiserror", + "windows-sys 0.59.0", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "tungstenite" version = "0.23.0" @@ -1568,7 +4147,7 @@ dependencies = [ "http 1.1.0", "httparse", "log", - "rand", + "rand 0.8.5", "sha1", "thiserror", "utf-8", @@ -1580,6 +4159,17 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[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.0" @@ -1623,180 +4213,494 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" name = "unicode-xid" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "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.90", +] + +[[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.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.90", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" +dependencies = [ + "core-foundation 0.9.4", + "home", + "jni", + "log", + "ndk-context", + "objc", + "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 = "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", + "windows-core", + "windows-implement", + "windows-interface", +] + +[[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.90", +] + +[[package]] +name = "webview2-com-sys" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" +dependencies = [ + "thiserror", + "windows", + "windows-core", +] + +[[package]] +name = "wheregmis" +version = "0.1.0" +dependencies = [ + "dioxus", + "dioxus-logger", + "dioxus-motion", + "easer", + "include_dir", + "pulldown-cmark", + "serde", + "toml", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "url" -version = "2.5.0" +name = "winapi-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", + "windows-sys 0.59.0", ] [[package]] -name = "urlencoding" -version = "2.1.3" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "utf-8" -version = "0.7.6" +name = "windows" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] [[package]] -name = "version_check" -version = "0.9.4" +name = "windows-core" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] [[package]] -name = "warnings" -version = "0.2.1" +name = "windows-implement" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f68998838dab65727c9b30465595c6f7c953313559371ca8bf31759b3680ad" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ - "pin-project", - "tracing", - "warnings-macro", + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] -name = "warnings-macro" -version = "0.2.0" +name = "windows-interface" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59195a1db0e95b920366d949ba5e0d3fc0e70b67c09be15ce5abb790106b0571" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.90", ] [[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +name = "windows-result" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] -name = "wasm-bindgen" -version = "0.2.99" +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", + "windows-result", + "windows-targets 0.52.6", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.99" +name = "windows-sys" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", + "windows-targets 0.42.2", ] [[package]] -name = "wasm-bindgen-futures" -version = "0.4.42" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", + "windows-targets 0.48.5", ] [[package]] -name = "wasm-bindgen-macro" -version = "0.2.99" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "quote", - "wasm-bindgen-macro-support", + "windows-targets 0.52.6", ] [[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.99" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", + "windows-targets 0.52.6", ] [[package]] -name = "wasm-bindgen-shared" -version = "0.2.99" +name = "windows-targets" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] [[package]] -name = "wasm-streams" -version = "0.4.0" +name = "windows-targets" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] -name = "web-sys" -version = "0.3.76" +name = "windows-targets" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "js-sys", - "wasm-bindgen", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] -name = "wheregmis" -version = "0.1.0" +name = "windows-version" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" dependencies = [ - "dioxus", - "dioxus-logger", - "include_dir", - "pulldown-cmark", - "serde", - "toml", + "windows-targets 0.52.6", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "windows_aarch64_gnullvm" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" @@ -1804,42 +4708,135 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "winnow" version = "0.6.20" @@ -1849,8 +4846,184 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[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.0", + "core-graphics 0.24.0", + "crossbeam-channel", + "dpi", + "dunce", + "gdkx11", + "gtk", + "html5ever", + "http 1.1.0", + "javascriptcore-rs", + "jni", + "kuchikiki", + "libc", + "ndk", + "objc", + "objc_id", + "once_cell", + "percent-encoding", + "raw-window-handle 0.6.2", + "sha2", + "soup3", + "tao-macros", + "thiserror", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "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 = "xxhash-rust" version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "927da81e25be1e1a2901d59b81b37dd2efd1fc9c9345a55007f09bf5a2d3ee03" + +[[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.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", + "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 = "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.2.0", + "proc-macro2", + "quote", + "syn 2.0.90", + "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.90", +] diff --git a/Cargo.toml b/Cargo.toml index 7e5488c..e7d826b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,17 +4,19 @@ version = "0.1.0" edition = "2021" [dependencies] - dioxus = { version = "0.6.1", features = ["router"] } dioxus-logger = { version = "0.6.1" } pulldown-cmark = "0.12.2" -serde = { version = "1.0.216", features = ["derive"] } +serde = { version = "1.0.217", features = ["derive"] } toml = "0.8.19" include_dir = "0.7.3" +dioxus-motion = { version = "0.1.4", default-features = false, optional = true } +easer = "0.3.0" [features] -default = [] -web = ["dioxus/web"] +default = ["web"] +web = ["dioxus/web", "dioxus-motion/web"] +desktop = ["dioxus/desktop", "dioxus-motion/desktop"] [profile.rapid] inherits = "dev" @@ -30,3 +32,13 @@ opt-level = "z" # Optimize for size. lto = true # Enable link-time optimization. codegen-units = 32 #Parallelize codegen across 1 cores strip = true # Automatically strip symbols from the binary. + +[profile.wasm-dev] +inherits = "dev" +opt-level = 1 + +[profile.server-dev] +inherits = "dev" + +[profile.android-dev] +inherits = "dev" diff --git a/src/components/profile.rs b/src/components/profile.rs index fd25b32..d6a82b7 100644 --- a/src/components/profile.rs +++ b/src/components/profile.rs @@ -1,10 +1,66 @@ use dioxus::prelude::*; +use dioxus_motion::{ + animation::Tween, + prelude::*, + use_transform_motion::{use_transform_animation, Transform}, +}; use document::eval; +use easer::functions::Easing; +use svg_attributes::points; use crate::PROFILE_PIC; #[component] pub fn Profile() -> Element { + let mut image_transform = use_transform_animation( + Transform { + opacity: 0.0, + scale: 0.8, + rotate: -10.0, + ..Default::default() + }, + Transform::default(), + AnimationMode::Spring(Spring { + stiffness: 100.0, + damping: 10.0, + mass: 1.0, + velocity: 0.0, + }), + ); + + let points_labels: Vec = vec![ + "Spearheading battery management innovation with Rust".to_string(), + "Revolutionizing renewable energy through Rust-powered solutions".to_string(), + "Dedicated to driving advancements in battery technology".to_string(), + ]; + + let point_animations = (0..3).map(|i: usize| { + let mut transform = use_transform_animation( + Transform { + opacity: 0.0, + x: -20.0, + ..Default::default() + }, + Transform::default(), + AnimationMode::Tween(Tween { + duration: Duration::from_millis(500 + i as u64 * 400), + easing: easer::functions::Cubic::ease_out, + }), + ); + + rsx! { + p { + class: "text-gray-400 leading-relaxed flex items-center space-x-2", + style: "{transform.style()}", + onmounted: move |_| { + transform.start(); + }, + span { class: "text-primary", "•" } + span { {points_labels[i].clone()} } + } + } + }); + rsx! { div { class: "container mx-auto px-4 pt-20", div { class: "relative overflow-hidden rounded-xl bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900 p-8 border border-gray-800", @@ -22,66 +78,8 @@ pub fn Profile() -> Element { p { class: "mt-4 text-xl text-gray-300 leading-relaxed", "Pioneering the future of battery technology with Rust-powered solutions." } - // Detailed description - div { class: "mt-6 space-y-2", - p { - id: "point-1", - class: "text-gray-400 leading-relaxed flex items-center space-x-2", - onmounted: move |_| { - eval( - r#" - Motion.animate('#point-1', { - opacity: [0, 1], - x: [-20, 0] - }, { - duration: 0.5, - delay: 0.7 - }); -"#, - ); - }, - span { class: "text-primary", "•" } - span { "Spearheading battery management innovation with Rust" } - } - p { - id: "point-2", - class: "text-gray-400 leading-relaxed flex items-center space-x-2", - onmounted: move |_| { - eval( - r#" - Motion.animate('#point-2', { - opacity: [0, 1], - x: [-20, 0] - }, { - duration: 0.5, - delay: 0.8 - }); -"#, - ); - }, - span { class: "text-primary", "•" } - span { "Revolutionizing renewable energy through Rust-powered solutions" } - } - p { - id: "point-3", - class: "text-gray-400 leading-relaxed flex items-center space-x-2", - onmounted: move |_| { - eval( - r#" - Motion.animate('#point-3', { - opacity: [0, 1], - x: [-20, 0] - }, { - duration: 0.5, - delay: 0.9 - }); -"#, - ); - }, - span { class: "text-primary", "•" } - span { "Dedicated to driving advancements in battery technology" } - } - } + + div { class: "mt-6 space-y-2", {point_animations} } // Current work p { class: "mt-4 text-gray-400", "Working with " @@ -118,20 +116,9 @@ pub fn Profile() -> Element { div { id: "profile-image-container", class: "relative overflow-hidden rounded-2xl transition-all duration-500 transform-gpu group-hover:scale-110", + style: "{image_transform.style()}", onmounted: move |_| { - eval( - r#" - Motion.animate('#profile-image-container', { - opacity: [0, 1], - scale: [0.8, 1], - rotate: [-10, 0] - }, { - duration: 0.8, - delay: 2, - easing: "spring(1, 100, 10, 0)" - }); - "#, - ); + image_transform.start(); }, // Glow effect with larger blur div { class: "absolute inset-0 bg-gradient-to-r from-primary/0 via-primary/40 to-accent-purple/0 opacity-0 group-hover:opacity-100 transition-all duration-500 blur-2xl" } @@ -139,7 +126,7 @@ pub fn Profile() -> Element { img { class: "w-full aspect-square object-cover border-4 border-surface-light/20 transition-all duration-500 group-hover:scale-105 group-hover:border-primary/50", src: PROFILE_PIC, - alt: "Sabin Regmi" + alt: "Sabin Regmi", } // AI Generated text overlay div { class: "absolute bottom-2 right-2 px-2 py-1 rounded-lg bg-black/50 backdrop-blur-sm text-xs text-white/70 group-hover:text-white/90 transition-colors", From 7b4b76e738cac17e539b305bff2351e144d18845 Mon Sep 17 00:00:00 2001 From: Sabin Regmi Date: Sun, 29 Dec 2024 23:53:44 -0500 Subject: [PATCH 2/9] Dioxus Motion MIgration --- assets/main.css | 159 ++++++++++-------- content/blog/blog_test.md | 1 + src/components/markdown.rs | 14 +- src/components/navbar.rs | 83 +++++---- src/components/profile.rs | 24 +-- src/components/project_grid.rs | 145 ++++++++++------ src/components/work_experience.rs | 270 +++++++++++++++++------------- src/main.rs | 33 ++-- src/views/footer.rs | 2 +- tailwind.config.js | 2 +- 10 files changed, 421 insertions(+), 312 deletions(-) diff --git a/assets/main.css b/assets/main.css index c64811c..be8b188 100644 --- a/assets/main.css +++ b/assets/main.css @@ -107,7 +107,7 @@ } /* -! tailwindcss v3.4.16 | MIT License | https://tailwindcss.com +! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com */ /* @@ -655,16 +655,16 @@ video { z-index: 50; } -.mx-auto { - margin-left: auto; - margin-right: auto; -} - .mx-4 { margin-left: 1rem; margin-right: 1rem; } +.mx-auto { + margin-left: auto; + margin-right: auto; +} + .-ml-48 { margin-left: -12rem; } @@ -709,6 +709,10 @@ video { margin-top: 0.5rem; } +.mt-20 { + margin-top: 5rem; +} + .mt-4 { margin-top: 1rem; } @@ -788,6 +792,10 @@ video { height: 100%; } +.min-h-screen { + min-height: 100vh; +} + .w-0 { width: 0px; } @@ -808,10 +816,6 @@ video { width: 2rem; } -.w-96 { - width: 24rem; -} - .w-\[25\%\] { width: 25%; } @@ -824,10 +828,6 @@ video { max-width: 56rem; } -.max-w-\[90\%\] { - max-width: 90%; -} - .max-w-none { max-width: none; } @@ -1003,20 +1003,21 @@ video { border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); } +.border-surface-light\/10 { + border-color: rgb(55 65 81 / 0.1); +} + .border-surface-light\/20 { border-color: rgb(55 65 81 / 0.2); } -.border-surface-light\/50 { - border-color: rgb(55 65 81 / 0.5); +.bg-background { + --tw-bg-opacity: 1; + background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); } .bg-background\/80 { - background-color: rgb(18 18 18 / 0.8); -} - -.bg-black\/50 { - background-color: rgb(0 0 0 / 0.5); + background-color: rgb(17 24 39 / 0.8); } .bg-blue-500 { @@ -1047,6 +1048,11 @@ video { background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); } +.bg-surface-light { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); +} + .bg-surface\/50 { background-color: rgb(31 41 55 / 0.5); } @@ -1055,11 +1061,6 @@ video { background-color: transparent; } -.bg-surface-light { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); -} - .bg-gradient-to-b { background-image: linear-gradient(to bottom, var(--tw-gradient-stops)); } @@ -1078,12 +1079,6 @@ video { --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } -.from-blue-500\/10 { - --tw-gradient-from: rgb(59 130 246 / 0.1) var(--tw-gradient-from-position); - --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - .from-gray-100 { --tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position); --tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position); @@ -1096,15 +1091,39 @@ video { --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } +.from-primary-light { + --tw-gradient-from: #60a5fa var(--tw-gradient-from-position); + --tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + .from-primary\/0 { --tw-gradient-from: rgb(187 134 252 / 0) var(--tw-gradient-from-position); --tw-gradient-to: rgb(187 134 252 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } -.via-gray-800 { - --tw-gradient-to: rgb(31 41 55 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), #1f2937 var(--tw-gradient-via-position), var(--tw-gradient-to); +.from-primary\/10 { + --tw-gradient-from: rgb(187 134 252 / 0.1) var(--tw-gradient-from-position); + --tw-gradient-to: rgb(187 134 252 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.from-surface { + --tw-gradient-from: #1F2937 var(--tw-gradient-from-position); + --tw-gradient-to: rgb(31 41 55 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.from-text-primary { + --tw-gradient-from: #FFFFFF var(--tw-gradient-from-position); + --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.via-accent-purple\/10 { + --tw-gradient-to: rgb(192 132 252 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), rgb(192 132 252 / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to); } .via-primary\/40 { @@ -1112,9 +1131,13 @@ video { --tw-gradient-stops: var(--tw-gradient-from), rgb(187 134 252 / 0.4) var(--tw-gradient-via-position), var(--tw-gradient-to); } -.via-purple-500\/10 { - --tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), rgb(168 85 247 / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to); +.via-surface-dark { + --tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), #111827 var(--tw-gradient-via-position), var(--tw-gradient-to); +} + +.to-accent-purple { + --tw-gradient-to: #C084FC var(--tw-gradient-to-position); } .to-accent-purple\/0 { @@ -1129,16 +1152,24 @@ video { --tw-gradient-to: #9ca3af var(--tw-gradient-to-position); } -.to-gray-900 { - --tw-gradient-to: #111827 var(--tw-gradient-to-position); +.to-purple-500 { + --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); } -.to-pink-500\/10 { - --tw-gradient-to: rgb(236 72 153 / 0.1) var(--tw-gradient-to-position); +.to-secondary\/10 { + --tw-gradient-to: rgb(3 169 244 / 0.1) var(--tw-gradient-to-position); } -.to-purple-500 { - --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); +.to-surface { + --tw-gradient-to: #1F2937 var(--tw-gradient-to-position); +} + +.to-background { + --tw-gradient-to: #111827 var(--tw-gradient-to-position); +} + +.to-text-secondary { + --tw-gradient-to: #D1D5DB var(--tw-gradient-to-position); } .bg-clip-text { @@ -1269,9 +1300,9 @@ video { line-height: 1.625; } -.text-blue-400 { +.text-accent-purple { --tw-text-opacity: 1; - color: rgb(96 165 250 / var(--tw-text-opacity, 1)); + color: rgb(192 132 252 / var(--tw-text-opacity, 1)); } .text-gray-300 { @@ -1289,9 +1320,9 @@ video { color: rgb(187 134 252 / var(--tw-text-opacity, 1)); } -.text-purple-400 { +.text-text-muted { --tw-text-opacity: 1; - color: rgb(192 132 252 / var(--tw-text-opacity, 1)); + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } .text-text-primary { @@ -1313,10 +1344,6 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } -.text-white\/70 { - color: rgb(255 255 255 / 0.7); -} - .opacity-0 { opacity: 0; } @@ -1333,8 +1360,8 @@ video { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } -.shadow-background\/20 { - --tw-shadow-color: rgb(18 18 18 / 0.2); +.shadow-background\/5 { + --tw-shadow-color: rgb(17 24 39 / 0.05); --tw-shadow: var(--tw-shadow-colored); } @@ -1376,12 +1403,6 @@ video { transition-duration: 150ms; } -.transition-transform { - transition-property: transform; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - .duration-300 { transition-duration: 300ms; } @@ -1403,17 +1424,18 @@ video { background-color: rgb(17 24 39 / 0.7); } -.hover\:bg-primary-hover:hover { - background-color: #147197253; +.hover\:bg-primary:hover { + --tw-bg-opacity: 1; + background-color: rgb(187 134 252 / var(--tw-bg-opacity, 1)); } .hover\:bg-surface-hover:hover { background-color: #111827B3; } -.hover\:text-blue-300:hover { +.hover\:text-accent-purple-hover:hover { --tw-text-opacity: 1; - color: rgb(147 197 253 / var(--tw-text-opacity, 1)); + color: rgb(216 180 254 / var(--tw-text-opacity, 1)); } .hover\:text-primary:hover { @@ -1421,9 +1443,9 @@ video { color: rgb(187 134 252 / var(--tw-text-opacity, 1)); } -.hover\:text-purple-300:hover { +.hover\:text-primary-light:hover { --tw-text-opacity: 1; - color: rgb(216 180 254 / var(--tw-text-opacity, 1)); + color: rgb(96 165 250 / var(--tw-text-opacity, 1)); } .hover\:text-text-primary:hover { @@ -1472,8 +1494,9 @@ video { color: rgb(96 165 250 / var(--tw-text-opacity, 1)); } -.group:hover .group-hover\:text-white\/90 { - color: rgb(255 255 255 / 0.9); +.group:hover .group-hover\:text-text-secondary { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); } .group:hover .group-hover\:opacity-100 { diff --git a/content/blog/blog_test.md b/content/blog/blog_test.md index e6ac208..4fb0cff 100644 --- a/content/blog/blog_test.md +++ b/content/blog/blog_test.md @@ -17,6 +17,7 @@ Building web applications in Rust has never been more exciting. With Dioxus, we - **Modern Tooling**: Rich ecosystem and excellent developer experience ## Code Example + ```rust #[component] fn App() -> Element { diff --git a/src/components/markdown.rs b/src/components/markdown.rs index 0c635c8..bf7fd2d 100644 --- a/src/components/markdown.rs +++ b/src/components/markdown.rs @@ -17,14 +17,18 @@ pub fn Markdown(props: MarkdownProps) -> Element { html::push_html(&mut html_buf, parser); rsx! { - // document::Link { - // rel: "stylesheet", - // href: "https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css" - // } + document::Link { + rel: "stylesheet", + href: "https://cdn.jsdelivr.net/npm/star-markdown-css/dist/planet/markdown.min.css", + } + document::Link { + rel: "stylesheet", + href: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/default.min.css", + } div { id: "{props.id}", class: "prose prose-invert max-w-none {props.class}", - dangerous_inner_html: "{html_buf}" + dangerous_inner_html: "{html_buf}", } } } diff --git a/src/components/navbar.rs b/src/components/navbar.rs index 566c68a..c67e99c 100644 --- a/src/components/navbar.rs +++ b/src/components/navbar.rs @@ -11,14 +11,19 @@ pub fn NavBar() -> Element { let is_blog = path.to_string().starts_with("/blo"); rsx! { - div { class: "w-full h-full flex flex-col items-center justify-center", - header { class: "fixed top-0 w-full z-50 h-16 backdrop-blur-md border-b border-surface-light", - div { class: "container mx-auto h-full px-4", - div { class: "flex items-center justify-between h-full", + div { + class: "w-full h-full bg-background text-text-secondary", + header { + class: "fixed top-0 w-full z-50 h-16 backdrop-blur-md border-b border-surface-light/20", + div { + class: "container mx-auto h-full px-4", + div { + class: "flex items-center justify-between h-full", // Left side - Logo and name - div { class: "flex items-center space-x-3", - // Container for name and nav - div { class: "flex items-center gap-8 px-6 py-2 bg-surface/50 backdrop-blur-sm border border-surface-light/50 rounded-full shadow-lg shadow-background/20", + div { + class: "flex items-center space-x-3", + div { + class: "flex items-center gap-8 px-6 py-2 bg-surface/50 backdrop-blur-sm border border-surface-light/10 rounded-full shadow-lg shadow-background/5", svg { class: "w-8 h-8 text-text-secondary", xmlns: "http://www.w3.org/2000/svg", @@ -51,16 +56,16 @@ pub fn NavBar() -> Element { } } if !is_blog { - // Center - Navigation - nav { class: "hidden md:flex items-center space-x-6", - for link in ["Experience", "Projects", "Blogs"].iter() { - a { - class: "text-sm text-text-secondary hover:text-text-primary transition-colors relative group cursor-pointer", - onclick: move |evt| { - evt.prevent_default(); - eval( - &format!( - r#" + nav { + class: "hidden md:flex items-center space-x-6", + for link in ["Experience", "Projects", "Blogs"].iter() { + a { + class: "text-sm text-text-secondary hover:text-text-primary transition-colors relative group cursor-pointer", + onclick: move |evt| { + evt.prevent_default(); + eval( + &format!( + r#" const element = document.getElementById('{}'); if (element) {{ const offset = 60; // Adjust this value for desired offset @@ -70,27 +75,27 @@ if (element) {{ behavior: 'smooth' }}); }} - "#, - link.to_lowercase(), - ), - ); - }, - "{link}" - // Hover line effect - div { class: "absolute -bottom-1 left-0 h-[2px] w-0 bg-primary transition-all group-hover:w-full" } + "#, + link.to_lowercase(), + ), + ); + }, + "{link}" + div { + class: "absolute -bottom-1 left-0 h-[2px] w-0 bg-primary transition-all group-hover:w-full" + } + } + } } } } - } - } } if !is_blog { - // Right side - Download CV - button { - class: "ml-6 px-4 py-1.5 text-sm font-medium bg-surface hover:bg-surface-hover text-text-primary rounded-full transition-colors border border-surface-light/50", - onclick: move |_| show_modal.set(true), - "Download CV" - } + button { + class: "ml-6 px-4 py-1.5 text-sm font-medium bg-surface hover:bg-surface-hover text-text-primary rounded-full transition-colors border border-surface-light/20", + onclick: move |_| show_modal.set(true), + "Download CV" + } } } } @@ -100,10 +105,8 @@ if (element) {{ div { class: "fixed inset-0 flex items-center justify-center bg-background/80 backdrop-blur-sm z-50", onclick: move |_| show_modal.set(false), - - // Modal content div { - class: "relative w-full mx-4 md:max-w-2xl bg-surface p-8 rounded-xl border border-surface-light shadow-xl", + class: "relative w-full mx-4 md:max-w-2xl bg-surface p-8 rounded-xl border border-surface-light/20 shadow-xl", onclick: move |e| e.stop_propagation(), onmounted: move |_| { eval(r#" @@ -116,18 +119,14 @@ if (element) {{ }); "#); }, - - // Message p { class: "text-xl text-center text-text-primary font-medium mb-6", "You still need my CV? Unbelievable! 😂" } - - // Close button div { class: "flex justify-center", button { - class: "px-6 py-2 text-sm bg-surface-light hover:bg-primary-hover text-text-primary rounded-lg transition-colors", + class: "px-6 py-2 text-sm bg-surface-light hover:bg-primary text-text-primary rounded-lg transition-colors", onclick: move |_| show_modal.set(false), "Sorry!" } @@ -135,7 +134,7 @@ if (element) {{ } } } - div { class: "container mx-auto", Outlet:: {} } + Outlet:: {} } } } diff --git a/src/components/profile.rs b/src/components/profile.rs index d6a82b7..1b77ab4 100644 --- a/src/components/profile.rs +++ b/src/components/profile.rs @@ -50,7 +50,7 @@ pub fn Profile() -> Element { rsx! { p { - class: "text-gray-400 leading-relaxed flex items-center space-x-2", + class: "text-text-muted leading-relaxed flex items-center space-x-2", style: "{transform.style()}", onmounted: move |_| { transform.start(); @@ -63,31 +63,31 @@ pub fn Profile() -> Element { rsx! { div { class: "container mx-auto px-4 pt-20", - div { class: "relative overflow-hidden rounded-xl bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900 p-8 border border-gray-800", + div { class: "relative overflow-hidden rounded-xl bg-gradient-to-br from-surface via-surface-dark to-surface p-8 border border-surface-light", // Gradient overlay - div { class: "absolute inset-0 bg-gradient-to-br from-blue-500/10 via-purple-500/10 to-pink-500/10" } + div { class: "absolute inset-0 bg-gradient-to-br from-primary/10 via-accent-purple/10 to-secondary/10" } // Content container with flex div { class: "relative z-10 flex items-start justify-between gap-8", // Left content div { class: "flex-1", // Heading - h1 { class: "text-4xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-500", + h1 { class: "text-4xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary-light to-accent-purple", "Software Engineer" } // Main description - p { class: "mt-4 text-xl text-gray-300 leading-relaxed", + p { class: "mt-4 text-xl text-text-secondary leading-relaxed", "Pioneering the future of battery technology with Rust-powered solutions." } div { class: "mt-6 space-y-2", {point_animations} } // Current work - p { class: "mt-4 text-gray-400", + p { class: "mt-4 text-text-muted", "Working with " - span { class: "text-blue-400 hover:text-blue-300 transition-colors", + span { class: "text-primary hover:text-primary-light transition-colors", "Rust" } " and " - span { class: "text-purple-400 hover:text-purple-300 transition-colors", + span { class: "text-accent-purple hover:text-accent-purple-hover transition-colors", "Dioxus" } " when I'm not working on my day job." @@ -95,17 +95,17 @@ pub fn Profile() -> Element { // Social links div { class: "mt-8 flex items-center space-x-4", a { - class: "text-gray-400 hover:text-white transition-colors", + class: "text-text-muted hover:text-text-primary transition-colors", href: "https://github.com/yourusername", i { class: "fab fa-github text-xl" } } a { - class: "text-gray-400 hover:text-white transition-colors", + class: "text-text-muted hover:text-text-primary transition-colors", href: "https://twitter.com/yourusername", i { class: "fab fa-twitter text-xl" } } a { - class: "text-gray-400 hover:text-white transition-colors", + class: "text-text-muted hover:text-text-primary transition-colors", href: "https://linkedin.com/in/yourusername", i { class: "fab fa-linkedin text-xl" } } @@ -129,7 +129,7 @@ pub fn Profile() -> Element { alt: "Sabin Regmi", } // AI Generated text overlay - div { class: "absolute bottom-2 right-2 px-2 py-1 rounded-lg bg-black/50 backdrop-blur-sm text-xs text-white/70 group-hover:text-white/90 transition-colors", + div { class: "absolute bottom-2 right-2 px-2 py-1 rounded-lg bg-surface/50 backdrop-blur-sm text-xs text-text-muted group-hover:text-text-secondary transition-colors", "Apple Playground AI Generated" } } diff --git a/src/components/project_grid.rs b/src/components/project_grid.rs index 60498c1..71732de 100644 --- a/src/components/project_grid.rs +++ b/src/components/project_grid.rs @@ -1,12 +1,19 @@ use dioxus::prelude::*; use document::eval; +use dioxus_motion::{ + animation::Tween, + platform::TimeProvider, + prelude::*, + use_transform_motion::{use_transform_animation, Transform}, + Time, +}; +use easer::functions::Easing; + #[component] pub fn ProjectGrid() -> Element { rsx! { - div { - id: "projects", - class: "container mx-auto px-4 py-12", + div { id: "projects", class: "container mx-auto px-4 py-12", // Section header h2 { class: "text-3xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-500 mb-2", "Featured Projects" @@ -16,12 +23,19 @@ pub fn ProjectGrid() -> Element { } // Project grid div { class: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", + ProjectCard { + title: "Dioxus Motion 🚀", + description: "A lightweight, cross-platform animation library for Dioxus, designed to bring smooth, flexible animations to your Rust web, desktop, and mobile applications.", + image: "https://devpro-aceternity.vercel.app/_next/image?url=%2Fimages%2Fprojects%2Falgochurn.png&w=3840&q=75", + tech_stack: vec!["Rust", "Dioxus", "Tailwind"], + link: "https://crates.io/crates/dioxus-motion", + } ProjectCard { title: "HTML to RSX Converter", description: "Convert HTML to Dioxus RSX with a single click.", image: "https://devpro-aceternity.vercel.app/_next/image?url=%2Fimages%2Fprojects%2Falgochurn.png&w=3840&q=75", tech_stack: vec!["Rust", "Dioxus", "Tailwind"], - link: "https://wheregmis.github.io/dioxus_html_rsx/" + link: "https://wheregmis.github.io/dioxus_html_rsx/", } } @@ -37,67 +51,96 @@ struct ProjectCardProps { tech_stack: Vec<&'static str>, link: String, } - #[component] fn ProjectCard(props: ProjectCardProps) -> Element { - let title = props.title.to_lowercase().replace(" ", "-"); + let is_visible = use_signal(|| false); + + let mut card_transform = use_transform_animation( + Transform { + opacity: 0.0, + y: 20.0, + ..Default::default() + }, + Transform::default(), + AnimationMode::Spring(Spring { + stiffness: 100.0, + damping: 15.0, + mass: 1.0, + velocity: 0.0, + }), + ); + + let mut image_transform = use_transform_animation( + Transform::default(), + Transform { + scale: 1.1, + ..Default::default() + }, + AnimationMode::Spring(Spring { + stiffness: 200.0, + damping: 20.0, + mass: 1.0, + velocity: 0.0, + }), + ); rsx! { - a { - href: "{props.link}", - target: "_blank", + a { href: "{props.link}", target: "_blank", div { - id: format!("project-card-{}", props.title.to_lowercase().replace(" ", "-")), - class: "opacity-0 group h-[420px] flex flex-col relative overflow-hidden rounded-xl bg-gray-900/50 border border-gray-800 transition-all duration-300 hover:bg-gray-900/70 hover:border-gray-700 hover:shadow-xl hover:shadow-blue-500/20", - onmounted: move |_| { - eval(&format!(r#" - const observer = new IntersectionObserver((entries) => {{ - entries.forEach(entry => {{ - if (entry.isIntersecting) {{ - Motion.animate('#project-card-{}', {{ - opacity: [0, 1], - transform: ['translateY(20px)', 'translateY(0)'] - }}, {{ - duration: 0.6, - easing: "spring(1, 100, 10, 0)" - }}); - observer.unobserve(entry.target); - }} - }}); - }}, {{ threshold: 0.1 }}); + class: "group h-[420px] flex flex-col relative overflow-hidden rounded-xl bg-gray-900/50 border border-gray-800 transition-all duration-300 hover:bg-gray-900/70 hover:border-gray-700 hover:shadow-xl hover:shadow-blue-500/20", + style: "{card_transform.style()}", + onmounted: move |_| card_transform.start(), - observer.observe(document.getElementById("project-card-{}")); - "#, - title, - title - )); - }, - // Rest of the card content remains the same div { class: "relative h-48 overflow-hidden", + onmouseenter: move |_| image_transform.start(), + onmouseleave: move |_| image_transform.reset(), + img { - class: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-110", + class: "w-full h-full object-cover", + style: "{image_transform.style()}", src: "{props.image}", - alt: "{props.title}" + alt: "{props.title}", } } - div { - class: "flex flex-col flex-1 p-6", - h3 { - class: "text-xl font-semibold text-white mb-2 group-hover:text-blue-400 transition-colors", + + div { class: "flex flex-col flex-1 p-6", + h3 { class: "text-xl font-semibold text-white mb-2 group-hover:text-blue-400 transition-colors", "{props.title}" } - p { - class: "text-gray-400 mb-4 line-clamp-3", - "{props.description}" - } - div { - class: "mt-auto flex flex-wrap gap-2", - for tech in props.tech_stack.iter() { - span { - class: "px-3 py-1 text-xs rounded-full bg-gray-800 text-gray-300", - "{tech}" - } + p { class: "text-gray-400 mb-4 line-clamp-3", "{props.description}" } + div { class: "mt-auto flex flex-wrap gap-2", + { + props + .tech_stack + .iter() + .enumerate() + .map(|(index, tech)| { + let mut tech_transform = use_transform_animation( + Transform { + opacity: 0.0, + y: 10.0, + ..Default::default() + }, + Transform::default(), + AnimationMode::Tween(Tween { + duration: Duration::from_millis(300), + easing: easer::functions::Cubic::ease_out, + }), + ); + rsx! { + span { + class: "px-3 py-1 text-xs rounded-full bg-gray-800 text-gray-300", + style: "{tech_transform.style()}", + onmounted: move |_| async move { + let delay = Duration::from_millis((500.0 + (index as f32 * 100.0)) as u64); + Time::delay(delay).await; + tech_transform.start(); + }, + "{tech}" + } + } + }) } } } diff --git a/src/components/work_experience.rs b/src/components/work_experience.rs index 958bd12..815ef0c 100644 --- a/src/components/work_experience.rs +++ b/src/components/work_experience.rs @@ -1,10 +1,53 @@ use dioxus::prelude::*; use document::eval; +use dioxus_motion::{ + animation::Tween, + platform::TimeProvider, + prelude::*, + use_transform_motion::{use_transform_animation, Transform}, + Time, +}; +use easer::functions::Easing; + #[component] pub fn WorkExperience() -> Element { let mut selected_company = use_signal(|| 0); + // Timeline dot animation + let mut dot_transform = use_transform_animation( + Transform { + opacity: 0.0, + y: 0.0, + ..Default::default() + }, + Transform { + opacity: 1.0, + y: 300.0, + ..Default::default() + }, + AnimationMode::Tween(Tween { + duration: Duration::from_secs(2), + easing: easer::functions::Linear::ease_in_out, + }), + ); + + // Details panel animation + let mut details_transform = use_transform_animation( + Transform { + opacity: 0.0, + x: 20.0, + ..Default::default() + }, + Transform::default(), + AnimationMode::Spring(Spring { + stiffness: 100.0, + damping: 15.0, + mass: 1.0, + velocity: 0.0, + }), + ); + let companies = [ ( "TROES Corp", @@ -15,8 +58,115 @@ pub fn WorkExperience() -> Element { "Rust", "Python", "AWS", "Redis", "Vue", "Tailwind", "Docker", "Grafana", "InfluxDB", ] ), + ( + "Lambton College", + "2021 - Present", + "Research Assistant", + "Led development of battery management systems and remote monitoring solutions, resulting in 40% efficiency improvement in data processing.", + vec![ + "Rust", "Python", "AWS", "Redis", "Vue", "Tailwind", "Docker", "Grafana", "InfluxDB", + ] + ), ]; + let companies_comp = companies.iter().enumerate().map(|(index, (company, duration, _, _, _))| { + let mut point_transform = use_transform_animation( + Transform::default(), + Transform { scale: 1.2, ..Default::default() }, + AnimationMode::Spring(Spring::default()) + ); + + rsx! { + div { + class: "relative cursor-pointer group", + onclick: move |_| { + selected_company.set(index); + point_transform.start(); + }, + // Point indicator + div { + class: "absolute -left-[25px] top-1/2 -translate-y-1/2 w-4 h-4 rounded-full border-2 transition-colors duration-300", + class: if selected_company() == index { "bg-blue-500 border-blue-400" } else { "bg-gray-800 border-gray-700" }, + style: "{point_transform.style()}", + } + // Company info + div { + class: "p-4 rounded-lg transition-colors duration-300", + class: if selected_company() == index { "bg-gray-800/50" } else { "bg-transparent" }, + h3 { class: "font-medium text-white", "{company}" } + p { class: "text-sm text-gray-400", "{duration}" } + } + } + } + }); + + let mut title_transform = use_transform_animation( + Transform { + y: 10.0, + opacity: 0.0, + ..Default::default() + }, + Transform::default(), + AnimationMode::Spring(Spring { + stiffness: 100.0, + damping: 15.0, + mass: 1.0, + velocity: 0.0, + }), + ); + + let experience_section = { + let (_company, duration, title, description, tech_stack) = &companies[selected_company()]; + rsx! { + div { class: "space-y-4", + h3 { + class: "text-xl font-semibold text-white", + style: "{title_transform.style()}", + onmounted: move |_| title_transform.start(), + "{title}" + } + p { class: "text-gray-400", "{duration}" } + p { class: "text-gray-300 leading-relaxed", "{description}" } + div { class: "flex flex-wrap gap-2", + { + tech_stack + .iter() + .enumerate() + .map(|(index, tech)| { + let mut tech_transform = use_transform_animation( + Transform { + opacity: 0.0, + scale: 0.8, + y: 10.0, + ..Default::default() + }, + Transform::default(), + AnimationMode::Spring(Spring { + stiffness: 100.0, + damping: 10.0, + mass: 1.0, + velocity: 0.0, + }), + ); + rsx! { + span { + class: "px-3 py-1 text-xs rounded-full bg-gray-800 text-gray-300", + style: "{tech_transform.style()}", + onmounted: move |_| async move { + let delay = Duration::from_millis((200.0 + (index as f32 * 100.0)) as u64); + Time::delay(delay).await; + tech_transform.start(); + }, + "{tech}" + } + } + }) + } + } + } + } + }; + rsx! { div { id: "experience", class: "container mx-auto px-4 py-12", h2 { class: "text-3xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-500 mb-8", @@ -31,127 +181,19 @@ pub fn WorkExperience() -> Element { div { id: "timeline-dot", class: "absolute w-2 h-2 bg-blue-500 rounded-full -left-[3px] opacity-0", - onmounted: move |_| { - eval( - r#" - requestAnimationFrame(() => { - const container = document.querySelector('.bg-gray-800'); - if (container) { - const height = container.offsetHeight; - Motion.animate('#timeline-dot', { - opacity: [0, 1], - y: [0, height] - }, { - duration: 2, - repeat: Infinity, - easing: "linear", - delay: 0 - }); - } - }); - "#, - ); - } + style: "{dot_transform.style()}", + onmounted: move |_| dot_transform.loop_animation(), } } // Companies list - div { class: "space-y-8 pl-4", - for (index , (company , duration , _title , _description , _tech_stack)) in companies.iter().enumerate() { - div { - class: "relative cursor-pointer group", - onclick: move |_| selected_company.set(index), - div { - class: "absolute -left-[25px] top-1/2 -translate-y-1/2 w-4 h-4 rounded-full border-2 transition-colors duration-300", - class: if selected_company() == index { - "bg-blue-500 border-blue-400" - } else { - "bg-gray-800 border-gray-700" - } - } - div { - class: "p-4 rounded-lg transition-colors duration-300", - class: if selected_company() == index { "bg-gray-800/50" } else { "bg-transparent" }, - h3 { class: "font-medium text-white", "{company}" } - p { class: "text-sm text-gray-400", "{duration}" } - } - } - } - } + div { class: "space-y-8 pl-4", {companies_comp} } // Experience details section with animations div { id: "experience-details", class: "bg-gray-900/50 rounded-xl p-6 border border-gray-800", - onmounted: move |_| { - eval( - r#" - const element = document.getElementById('experience-details'); - if (element) { - Motion.animate(element, { - opacity: [0, 1], - transform: ['translateX(20px)', 'translateX(0)'] - }, { - duration: 0.5, - easing: 'ease-out' - }); - } - "#, - ); - }, - { - let (company, duration, title, description, tech_stack) = &companies[selected_company()]; - rsx! { - div { - class: "space-y-4", - h3 { - id: "experience-title", - class: "text-xl font-semibold text-white", - onmounted: move |_| { - eval(r#" - Motion.animate('#experience-title', { - opacity: [0, 1], - transform: ['translateY(10px)', 'translateY(0)'] - }, { - duration: 0.3, - delay: 0.2 - }); - "#); - }, - "{title}" - } - p { - class: "text-gray-400", - "{duration}" - } - p { - class: "text-gray-300 leading-relaxed", - "{description}" - } - div { - class: "flex flex-wrap gap-2", - for (index, tech) in tech_stack.iter().enumerate() { - span { - id: format!("tech-{}", index), - class: "px-3 py-1 text-xs rounded-full bg-gray-800 text-gray-300 opacity-0", // Set initial opacity to 0 - onmounted: move |_| { - eval(&format!(r#" - Motion.animate('#tech-{}', {{ - opacity: [0, 1], - transform: ['scale(0.8)', 'scale(1)'], - y: [10, 0] - }}, {{ - duration: 0.4, - delay: {}, - easing: "spring(1, 100, 10, 0)" - }}); - "#, index, 0.2 + (index as f32 * 0.1))); - }, - "{tech}" - } - } - } - } - } - } + style: "{details_transform.style()}", + onmounted: move |_| details_transform.start(), + {experience_section} } } } diff --git a/src/main.rs b/src/main.rs index 3b90171..45299aa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,13 +31,10 @@ fn App() -> Element { rsx! { document::Title { "Sabin Regmi" } document::Link { rel: "stylesheet", href: MAIN_CSS } + document::Link { rel: "stylesheet", - href: "https://cdn.jsdelivr.net/npm/daisyui@4.12.14/dist/full.min.css" - } - document::Link { - rel: "stylesheet", - href: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" + href: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css", } Router:: {} @@ -48,25 +45,25 @@ fn App() -> Element { #[component] fn Home() -> Element { rsx! { - // Main container div with Tailwind CSS classes for centering and max-width - div { class: "container mx-auto", - // Profile section - Displays personal/bio information + div { class: "min-h-screen bg-background text-text-primary", + // Main container + // Hero/Profile section Profile {} - // Work Experience section - Shows professional history - WorkExperience {} + // Work Experience section + div { class: "mt-20", WorkExperience {} } - // Project Grid - Displays portfolio of projects - ProjectGrid {} + // Project Grid + div { class: "mt-20", ProjectGrid {} } - // Blog Preview - Shows recent blog posts - BlogPreview {} + // Blog Preview + div { class: "mt-20", BlogPreview {} } - // Testimonials section - Displays client/colleague feedback - Testimonials {} + // Testimonials + div { class: "mt-20", Testimonials {} } - // Footer component - Contains contact info and site navigation - Footer {} + // Footer + div { class: "mt-20", Footer {} } } } } diff --git a/src/views/footer.rs b/src/views/footer.rs index 62107cf..cca1bd0 100644 --- a/src/views/footer.rs +++ b/src/views/footer.rs @@ -3,7 +3,7 @@ use dioxus::prelude::*; #[component] pub fn Footer() -> Element { rsx! { - footer { class: "mt-auto bg-gradient-to-b from-gray-900 to-black border-t border-gray-800", + footer { class: "w-full mt-auto bg-gradient-to-b from-gray-900 to-black border-t border-gray-800", div { class: "container mx-auto px-4 py-12", div { class: "grid grid-cols-1 md:grid-cols-3 gap-8", // Logo and description diff --git a/tailwind.config.js b/tailwind.config.js index 870b86e..405fe99 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -31,7 +31,7 @@ module.exports = { }), colors: { 'background': { - DEFAULT: '#121212', + DEFAULT: '#111827', 'light': '#FFFFFF' }, 'primary': { From 43fc51585697faed439286ddeb00015bb2b69ad9 Mon Sep 17 00:00:00 2001 From: Sabin Regmi Date: Mon, 30 Dec 2024 00:51:54 -0500 Subject: [PATCH 3/9] Syntax Highlighting for Code --- assets/main.css | 27 ++++++++++----------------- index.html | 2 ++ src/components/markdown.rs | 16 +++++++++++----- tailwind.config.js | 2 +- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/assets/main.css b/assets/main.css index be8b188..72a6529 100644 --- a/assets/main.css +++ b/assets/main.css @@ -561,6 +561,13 @@ video { --primary-foreground: 210 40% 98%; } +.dark { + --background: 224 71% 4%; + --foreground: 210 40% 98%; + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; +} + .container { width: 100%; } @@ -1013,11 +1020,11 @@ video { .bg-background { --tw-bg-opacity: 1; - background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); + background-color: rgb(10 15 26 / var(--tw-bg-opacity, 1)); } .bg-background\/80 { - background-color: rgb(17 24 39 / 0.8); + background-color: rgb(10 15 26 / 0.8); } .bg-blue-500 { @@ -1115,12 +1122,6 @@ video { --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } -.from-text-primary { - --tw-gradient-from: #FFFFFF var(--tw-gradient-from-position); - --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - .via-accent-purple\/10 { --tw-gradient-to: rgb(192 132 252 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), rgb(192 132 252 / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to); @@ -1164,14 +1165,6 @@ video { --tw-gradient-to: #1F2937 var(--tw-gradient-to-position); } -.to-background { - --tw-gradient-to: #111827 var(--tw-gradient-to-position); -} - -.to-text-secondary { - --tw-gradient-to: #D1D5DB var(--tw-gradient-to-position); -} - .bg-clip-text { -webkit-background-clip: text; background-clip: text; @@ -1361,7 +1354,7 @@ video { } .shadow-background\/5 { - --tw-shadow-color: rgb(17 24 39 / 0.05); + --tw-shadow-color: rgb(10 15 26 / 0.05); --tw-shadow: var(--tw-shadow-colored); } diff --git a/index.html b/index.html index b0cfa29..08901d4 100644 --- a/index.html +++ b/index.html @@ -25,6 +25,8 @@ ); + + \ No newline at end of file diff --git a/assets/html-rsx.png b/assets/html-rsx.png new file mode 100644 index 0000000000000000000000000000000000000000..e589bf8e7ea45aa8723477d07a8b889084b01f23 GIT binary patch literal 150284 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

AFlK9Bx3^+3vMJ@ z;h;Imn(ydx>k)IsA1|&~EAA67Czh3y&UhX2pR(WDpd?p0IiTX_@asrCg^pm3rc~%? T7YDBc|7cy*{VnUf)gS){b9nmw literal 0 HcmV?d00001 diff --git a/assets/main.css b/assets/main.css index 25d4291..89ddffe 100644 --- a/assets/main.css +++ b/assets/main.css @@ -561,13 +561,6 @@ video { --primary-foreground: 210 40% 98%; } -.dark { - --background: 224 71% 4%; - --foreground: 210 40% 98%; - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 11.2%; -} - .container { width: 100%; } @@ -602,18 +595,10 @@ video { } } -.pointer-events-none { - pointer-events: none; -} - .visible { visibility: visible; } -.collapse { - visibility: collapse; -} - .static { position: static; } @@ -646,18 +631,10 @@ video { left: -3px; } -.bottom-2 { - bottom: 0.5rem; -} - .left-0 { left: 0px; } -.right-2 { - right: 0.5rem; -} - .top-0 { top: 0px; } @@ -666,8 +643,12 @@ video { top: 50%; } -.right-0 { - right: 0px; +.bottom-2 { + bottom: 0.5rem; +} + +.right-2 { + right: 0.5rem; } .z-10 { @@ -678,26 +659,13 @@ video { z-index: 50; } -.float-right { - float: right; -} - -.float-left { - float: left; -} - -.mx-4 { - margin-left: 1rem; - margin-right: 1rem; -} - .mx-auto { margin-left: auto; margin-right: auto; } -.-ml-48 { - margin-left: -12rem; +.mb-1 { + margin-bottom: 0.25rem; } .mb-12 { @@ -724,10 +692,6 @@ video { margin-left: 0.5rem; } -.ml-6 { - margin-left: 1.5rem; -} - .mr-2 { margin-right: 0.5rem; } @@ -740,18 +704,10 @@ video { margin-top: 0.5rem; } -.mt-20 { - margin-top: 5rem; -} - .mt-4 { margin-top: 1rem; } -.mt-6 { - margin-top: 1.5rem; -} - .mt-8 { margin-top: 2rem; } @@ -760,16 +716,12 @@ video { margin-top: auto; } -.mb-5 { - margin-bottom: 1.25rem; -} - -.mt-10 { - margin-top: 2.5rem; +.-ml-48 { + margin-left: -12rem; } -.mb-1 { - margin-bottom: 0.25rem; +.mt-6 { + margin-top: 1.5rem; } .line-clamp-1 { @@ -779,36 +731,24 @@ video { -webkit-line-clamp: 1; } -.line-clamp-3 { +.line-clamp-2 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; - -webkit-line-clamp: 3; + -webkit-line-clamp: 2; } -.line-clamp-2 { +.line-clamp-3 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.block { - display: block; -} - -.inline { - display: inline; + -webkit-line-clamp: 3; } .flex { display: flex; } -.table { - display: table; -} - .grid { display: grid; } @@ -845,6 +785,10 @@ video { height: 200px; } +.h-\[250px\] { + height: 250px; +} + .h-\[2px\] { height: 2px; } @@ -861,18 +805,6 @@ video { height: 100%; } -.h-\[300px\] { - height: 300px; -} - -.h-\[250px\] { - height: 250px; -} - -.h-1 { - height: 0.25rem; -} - .min-h-screen { min-height: 100vh; } @@ -881,6 +813,10 @@ video { width: 0px; } +.w-1\/4 { + width: 25%; +} + .w-12 { width: 3rem; } @@ -897,20 +833,12 @@ video { width: 2rem; } -.w-\[25\%\] { - width: 25%; -} - .w-full { width: 100%; } -.w-1 { - width: 0.25rem; -} - -.w-16 { - width: 4rem; +.w-\[25\%\] { + width: 25%; } .max-w-4xl { @@ -921,10 +849,6 @@ video { max-width: none; } -.max-w-3xl { - max-width: 48rem; -} - .flex-1 { flex: 1 1 0%; } @@ -933,25 +857,11 @@ video { flex-shrink: 0; } -.border-collapse { - border-collapse: collapse; -} - .-translate-y-1\/2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } -.-translate-x-12 { - --tw-translate-x: -3rem; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-x-12 { - --tw-translate-x: 3rem; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - .transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } @@ -992,10 +902,6 @@ video { align-items: center; } -.justify-center { - justify-content: center; -} - .justify-between { justify-content: space-between; } @@ -1042,12 +948,24 @@ video { margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } +.space-y-3 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); +} + .space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); } +.space-y-6 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); +} + .space-y-8 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse))); @@ -1058,10 +976,6 @@ video { overflow: hidden; } -.overflow-x-auto { - overflow-x: auto; -} - .rounded-2xl { border-radius: 1rem; } @@ -1113,11 +1027,6 @@ video { border-color: rgb(31 41 55 / var(--tw-border-opacity, 1)); } -.border-surface-light { - --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); -} - .border-surface-light\/10 { border-color: rgb(55 65 81 / 0.1); } @@ -1126,16 +1035,13 @@ video { border-color: rgb(55 65 81 / 0.2); } -.border-surface-light\/5 { - border-color: rgb(55 65 81 / 0.05); -} - .border-surface-light\/50 { border-color: rgb(55 65 81 / 0.5); } -.border-blue-500\/30 { - border-color: rgb(59 130 246 / 0.3); +.border-surface-light { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); } .bg-background { @@ -1143,10 +1049,6 @@ video { background-color: rgb(10 15 26 / var(--tw-bg-opacity, 1)); } -.bg-background\/80 { - background-color: rgb(10 15 26 / 0.8); -} - .bg-blue-500 { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); @@ -1171,11 +1073,6 @@ video { background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); } -.bg-surface-light { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); -} - .bg-surface\/50 { background-color: rgb(31 41 55 / 0.5); } @@ -1184,23 +1081,6 @@ video { background-color: transparent; } -.bg-primary\/20 { - background-color: rgb(187 134 252 / 0.2); -} - -.bg-primary\/10 { - background-color: rgb(187 134 252 / 0.1); -} - -.bg-gray-600 { - --tw-bg-opacity: 1; - background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1)); -} - -.bg-gray-800\/50 { - background-color: rgb(31 41 55 / 0.5); -} - .bg-gradient-to-br { background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); } @@ -1213,10 +1093,6 @@ video { background-image: linear-gradient(to top, var(--tw-gradient-stops)); } -.bg-gradient-to-b { - background-image: linear-gradient(to bottom, var(--tw-gradient-stops)); -} - .from-black { --tw-gradient-from: #000 var(--tw-gradient-from-position); --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); @@ -1229,12 +1105,30 @@ video { --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } +.from-blue-500\/0 { + --tw-gradient-from: rgb(59 130 246 / 0) var(--tw-gradient-from-position); + --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.from-blue-600 { + --tw-gradient-from: #2563eb var(--tw-gradient-from-position); + --tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + .from-gray-100 { --tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position); --tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } +.from-white { + --tw-gradient-from: #fff var(--tw-gradient-from-position); + --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + .from-primary-light { --tw-gradient-from: #60a5fa var(--tw-gradient-from-position); --tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position); @@ -1259,22 +1153,14 @@ video { --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } -.from-blue-500\/0 { - --tw-gradient-from: rgb(59 130 246 / 0) var(--tw-gradient-from-position); - --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-primary { - --tw-gradient-from: #BB86FC var(--tw-gradient-from-position); - --tw-gradient-to: rgb(187 134 252 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +.via-blue-500\/10 { + --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), rgb(59 130 246 / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to); } -.from-primary\/30 { - --tw-gradient-from: rgb(187 134 252 / 0.3) var(--tw-gradient-from-position); - --tw-gradient-to: rgb(187 134 252 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +.via-blue-500\/30 { + --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), rgb(59 130 246 / 0.3) var(--tw-gradient-via-position), var(--tw-gradient-to); } .via-accent-purple\/10 { @@ -1292,30 +1178,32 @@ video { --tw-gradient-stops: var(--tw-gradient-from), #111827 var(--tw-gradient-via-position), var(--tw-gradient-to); } -.via-blue-500\/10 { - --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), rgb(59 130 246 / 0.1) var(--tw-gradient-via-position), var(--tw-gradient-to); +.to-gray-400 { + --tw-gradient-to: #9ca3af var(--tw-gradient-to-position); } -.via-accent-purple\/30 { - --tw-gradient-to: rgb(192 132 252 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), rgb(192 132 252 / 0.3) var(--tw-gradient-via-position), var(--tw-gradient-to); +.to-gray-50 { + --tw-gradient-to: #f9fafb var(--tw-gradient-to-position); } -.to-accent-purple { - --tw-gradient-to: #C084FC var(--tw-gradient-to-position); +.to-purple-500 { + --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); } -.to-accent-purple\/0 { - --tw-gradient-to: rgb(192 132 252 / 0) var(--tw-gradient-to-position); +.to-purple-500\/0 { + --tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position); } -.to-gray-400 { - --tw-gradient-to: #9ca3af var(--tw-gradient-to-position); +.to-purple-600 { + --tw-gradient-to: #9333ea var(--tw-gradient-to-position); } -.to-purple-500 { - --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); +.to-accent-purple { + --tw-gradient-to: #C084FC var(--tw-gradient-to-position); +} + +.to-accent-purple\/0 { + --tw-gradient-to: rgb(192 132 252 / 0) var(--tw-gradient-to-position); } .to-secondary\/10 { @@ -1326,14 +1214,6 @@ video { --tw-gradient-to: #1F2937 var(--tw-gradient-to-position); } -.to-purple-500\/0 { - --tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position); -} - -.to-secondary\/30 { - --tw-gradient-to: rgb(3 169 244 / 0.3) var(--tw-gradient-to-position); -} - .bg-clip-text { -webkit-background-clip: text; background-clip: text; @@ -1356,14 +1236,6 @@ video { padding: 2rem; } -.p-5 { - padding: 1.25rem; -} - -.p-2 { - padding: 0.5rem; -} - .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; @@ -1389,35 +1261,40 @@ video { padding-bottom: 0.25rem; } -.py-1\.5 { - padding-top: 0.375rem; - padding-bottom: 0.375rem; -} - .py-12 { padding-top: 3rem; padding-bottom: 3rem; } +.py-16 { + padding-top: 4rem; + padding-bottom: 4rem; +} + .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; } +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + .pl-4 { padding-left: 1rem; } -.pt-20 { - padding-top: 5rem; +.pt-4 { + padding-top: 1rem; } .pt-8 { padding-top: 2rem; } -.pt-4 { - padding-top: 1rem; +.pt-20 { + padding-top: 5rem; } .text-center { @@ -1434,6 +1311,11 @@ video { line-height: 2.5rem; } +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + .text-lg { font-size: 1.125rem; line-height: 1.75rem; @@ -1454,11 +1336,6 @@ video { line-height: 1rem; } -.text-base { - font-size: 1rem; - line-height: 1.5rem; -} - .font-bold { font-weight: 700; } @@ -1479,9 +1356,14 @@ video { line-height: 1.625; } -.text-accent-purple { +.text-blue-500 { --tw-text-opacity: 1; - color: rgb(192 132 252 / var(--tw-text-opacity, 1)); + color: rgb(59 130 246 / var(--tw-text-opacity, 1)); +} + +.text-blue-600 { + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .text-gray-300 { @@ -1494,9 +1376,14 @@ video { color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } -.text-primary { +.text-gray-600 { --tw-text-opacity: 1; - color: rgb(187 134 252 / var(--tw-text-opacity, 1)); + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} + +.text-purple-600 { + --tw-text-opacity: 1; + color: rgb(147 51 234 / var(--tw-text-opacity, 1)); } .text-text-muted { @@ -1523,6 +1410,16 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } +.text-accent-purple { + --tw-text-opacity: 1; + color: rgb(192 132 252 / var(--tw-text-opacity, 1)); +} + +.text-primary { + --tw-text-opacity: 1; + color: rgb(187 134 252 / var(--tw-text-opacity, 1)); +} + .opacity-0 { opacity: 0; } @@ -1544,8 +1441,9 @@ video { --tw-shadow: var(--tw-shadow-colored); } -.outline { - outline-style: solid; +.blur-xl { + --tw-blur: blur(24px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .blur { @@ -1558,16 +1456,6 @@ video { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } -.blur-xl { - --tw-blur: blur(24px); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.blur-sm { - --tw-blur: blur(4px); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } @@ -1602,14 +1490,6 @@ video { transition-duration: 150ms; } -.transition { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - .duration-300 { transition-duration: 300ms; } @@ -1618,10 +1498,6 @@ video { transition-duration: 500ms; } -.ease-out { - transition-timing-function: cubic-bezier(0, 0, 0.2, 1); -} - .hover\:border-gray-700:hover { --tw-border-opacity: 1; border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); @@ -1635,23 +1511,13 @@ video { background-color: rgb(17 24 39 / 0.7); } -.hover\:bg-primary:hover { - --tw-bg-opacity: 1; - background-color: rgb(187 134 252 / var(--tw-bg-opacity, 1)); -} - .hover\:bg-surface-hover:hover { background-color: #111827B3; } -.hover\:bg-gray-800:hover { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1)); -} - -.hover\:text-accent-purple-hover:hover { +.hover\:text-blue-600:hover { --tw-text-opacity: 1; - color: rgb(216 180 254 / var(--tw-text-opacity, 1)); + color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .hover\:text-primary:hover { @@ -1659,11 +1525,6 @@ video { color: rgb(187 134 252 / var(--tw-text-opacity, 1)); } -.hover\:text-primary-light:hover { - --tw-text-opacity: 1; - color: rgb(96 165 250 / var(--tw-text-opacity, 1)); -} - .hover\:text-text-primary:hover { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); @@ -1674,6 +1535,16 @@ video { color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } +.hover\:text-accent-purple-hover:hover { + --tw-text-opacity: 1; + color: rgb(216 180 254 / var(--tw-text-opacity, 1)); +} + +.hover\:text-primary-light:hover { + --tw-text-opacity: 1; + color: rgb(96 165 250 / var(--tw-text-opacity, 1)); +} + .hover\:shadow-xl:hover { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); @@ -1699,6 +1570,11 @@ video { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } +.group:hover .group-hover\:translate-y-\[-2px\] { + --tw-translate-y: -2px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + .group:hover .group-hover\:scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; @@ -1744,10 +1620,6 @@ video { display: flex; } - .md\:max-w-2xl { - max-width: 42rem; - } - .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } @@ -1761,13 +1633,4 @@ video { .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } -} - -.dark\:bg-transparent:where(.dark, .dark *) { - background-color: transparent; -} - -.dark\:text-white:where(.dark, .dark *) { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } \ No newline at end of file diff --git a/image.png b/image.png deleted file mode 100644 index e143dc79a6abb15fa9e90609b7c283db2ea1b607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57000 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

nk9R%W2G;HH;>F>h`osmc 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 diff --git a/index.html b/index.html index e80d6bd..c9abf68 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,11 @@ + + + + + diff --git a/src/components/profile.rs b/src/components/profile.rs index 87de784..d8a9cb3 100644 --- a/src/components/profile.rs +++ b/src/components/profile.rs @@ -1,16 +1,38 @@ use dioxus::prelude::*; -use dioxus_motion::prelude::*; +use dioxus_motion::{ + enhanced_motion::{use_motion, AnimationSequence, EnhancedAnimationManager}, + prelude::*, +}; use easer::functions::Easing; +use std::time::Duration; use crate::PROFILE_PIC; #[component] pub fn Profile() -> Element { - let mut image_transform = use_motion(Transform::new(-20.0, 0.0, 0.8, 0.0)); + // Main content animations + let mut content_transform = use_motion(Transform::new(-20.0, 0.0, 0.8, 0.0)); + let mut content_opacity = use_motion(0.0f32); + // Image animations + let mut image_transform = use_motion(Transform::new(-20.0, 0.0, 0.8, 0.0)); let mut opacity = use_motion(0.0f32); + + // Initial animation sequence on mount use_effect(move || { - image_transform.animate_to( + // Content entrance sequence + let content_sequence = AnimationSequence::new().then( + Transform::identity(), + AnimationConfig::new(AnimationMode::Spring(Spring { + stiffness: 100.0, + damping: 10.0, + mass: 1.0, + ..Default::default() + })), + ); + + // Image entrance sequence + let image_sequence = AnimationSequence::new().then( Transform::identity(), AnimationConfig::new(AnimationMode::Spring(Spring { stiffness: 100.0, @@ -20,6 +42,9 @@ pub fn Profile() -> Element { })), ); + content_transform.animate_sequence(content_sequence); + image_transform.animate_sequence(image_sequence); + opacity.animate_to( 1.0, AnimationConfig::new(AnimationMode::Tween(Tween { @@ -27,6 +52,14 @@ pub fn Profile() -> Element { easing: easer::functions::Sine::ease_in_out, })), ); + + content_opacity.animate_to( + 1.0, + AnimationConfig::new(AnimationMode::Tween(Tween { + duration: Duration::from_millis(800), + easing: easer::functions::Sine::ease_in_out, + })), + ); }); let points_labels = [ @@ -40,7 +73,8 @@ pub fn Profile() -> Element { use_effect(move || { let delay = Duration::from_millis(500 + i as u64 * 400); - point_transform.animate_to( + + let point_sequence = AnimationSequence::new().then( Transform::identity(), AnimationConfig::new(AnimationMode::Spring(Spring { stiffness: 100.0, @@ -50,6 +84,8 @@ pub fn Profile() -> Element { })) .with_delay(delay), ); + + point_transform.animate_sequence(point_sequence); }); rsx! { @@ -70,7 +106,9 @@ pub fn Profile() -> Element { // Content container with flex div { class: "relative z-10 flex items-start justify-between gap-8", // Left content - div { class: "flex-1", + div { + class: "flex-1", + style: "transform: translateX({content_transform.get_value().x}px) scale({content_transform.get_value().scale}); opacity: {content_opacity.get_value()};", // Heading h1 { class: "text-4xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary-light to-accent-purple", "Software Engineer" diff --git a/src/components/project_grid.rs b/src/components/project_grid.rs index 087a41a..9fdfafc 100644 --- a/src/components/project_grid.rs +++ b/src/components/project_grid.rs @@ -1,6 +1,12 @@ use dioxus::prelude::*; +use dioxus_motion::{ + enhanced_motion::{use_motion, AnimationSequence, EnhancedAnimationManager}, + prelude::*, +}; +use easer::functions::Easing; +use std::time::Duration; -use dioxus_motion::prelude::*; +use crate::{HTML_RSX_PIC, MOTION_PIC}; #[component] pub fn ProjectGrid() -> Element { @@ -18,14 +24,14 @@ pub fn ProjectGrid() -> Element { ProjectCard { title: "Dioxus Motion 🚀", description: "A lightweight, cross-platform animation library for Dioxus, designed to bring smooth, flexible animations to your Rust web, desktop, and mobile applications.", - image: "https://devpro-aceternity.vercel.app/_next/image?url=%2Fimages%2Fprojects%2Falgochurn.png&w=3840&q=75", + image: MOTION_PIC.to_string(), tech_stack: vec!["Rust", "Dioxus", "Tailwind"], link: "https://crates.io/crates/dioxus-motion", } ProjectCard { title: "HTML to RSX Converter", description: "Convert HTML to Dioxus RSX with a single click. A simple yet powerful tool built with Rust and Dioxus.", - image: "https://devpro-aceternity.vercel.app/_next/image?url=%2Fimages%2Fprojects%2Falgochurn.png&w=3840&q=75", + image: HTML_RSX_PIC.to_string(), tech_stack: vec!["Rust", "Dioxus", "Tailwind"], link: "https://wheregmis.github.io/dioxus_html_rsx/", } @@ -34,7 +40,6 @@ pub fn ProjectGrid() -> Element { } } } - #[derive(Props, PartialEq, Clone)] struct ProjectCardProps { title: String, @@ -43,69 +48,140 @@ struct ProjectCardProps { tech_stack: Vec<&'static str>, link: String, } + #[component] fn ProjectCard(props: ProjectCardProps) -> Element { - let mut card_transform = use_motion(Transform::new(0.0, 20.0, 1.0, 0.0)); - let mut image_transform = use_motion(Transform::identity()); + // Card animations + let mut card_transform = use_motion(Transform::new(0.0, 20.0, 0.8, 0.0)); + let mut card_opacity = use_motion(0.0f32); + + // Image animations + let mut image_transform = use_motion(Transform::new(0.0, 0.0, 1.0, 0.0)); + let mut image_blur = use_motion(5.0f32); + + // Title animations + let mut title_transform = use_motion(Transform::new(-20.0, 0.0, 0.9, 0.0)); - // Card animation on mount - use_effect(move || { - card_transform.animate_to( + // Description animations + let mut desc_transform = use_motion(Transform::new(-20.0, 0.0, 0.9, 0.0)); + + // Card entrance animation when visible + let on_card_visible = move |_| { + let card_sequence = AnimationSequence::new().then( Transform::identity(), AnimationConfig::new(AnimationMode::Spring(Spring { stiffness: 100.0, damping: 15.0, mass: 1.0, - ..Default::default() + velocity: 0.0, + })) + .with_delay(Duration::from_millis(800)), + ); + + let title_sequence = AnimationSequence::new().then( + Transform::identity(), + AnimationConfig::new(AnimationMode::Spring(Spring { + stiffness: 120.0, + damping: 12.0, + mass: 1.0, + velocity: 0.0, + })) + .with_delay(Duration::from_millis(400)), + ); + + let desc_sequence = AnimationSequence::new().then( + Transform::identity(), + AnimationConfig::new(AnimationMode::Spring(Spring { + stiffness: 120.0, + damping: 12.0, + mass: 1.0, + velocity: 0.0, + })) + .with_delay(Duration::from_millis(500)), + ); + + card_transform.animate_sequence(card_sequence); + title_transform.animate_sequence(title_sequence); + desc_transform.animate_sequence(desc_sequence); + + card_opacity.animate_to( + 1.0, + AnimationConfig::new(AnimationMode::Tween(Tween { + duration: Duration::from_millis(600), + easing: easer::functions::Sine::ease_in_out, })), ); - }); - // Image hover animation - let animate_image_hover = move |_| { - image_transform.animate_to( + image_blur.animate_to( + 0.0, + AnimationConfig::new(AnimationMode::Tween(Tween { + duration: Duration::from_millis(800), + easing: easer::functions::Cubic::ease_out, + })) + .with_delay(Duration::from_millis(300)), + ); + }; + + // Image hover animations + let on_image_hover = move |_| { + let image_sequence = AnimationSequence::new().then( Transform::new(0.0, 0.0, 1.1, 0.0), AnimationConfig::new(AnimationMode::Spring(Spring { stiffness: 200.0, damping: 20.0, mass: 1.0, - ..Default::default() + velocity: 5.0, })), ); + + image_transform.animate_sequence(image_sequence); }; - let animate_image_reset = move |_| { - image_transform.animate_to( + let on_image_unhover = move |_| { + let image_sequence = AnimationSequence::new().then( Transform::identity(), - AnimationConfig::new(AnimationMode::Spring(Spring::default())), + AnimationConfig::new(AnimationMode::Spring(Spring { + stiffness: 200.0, + damping: 20.0, + mass: 1.0, + velocity: -5.0, + })), ); + + image_transform.animate_sequence(image_sequence); }; rsx! { a { href: "{props.link}", target: "_blank", div { - // Fixed card height class: "group h-[400px] flex flex-col relative overflow-hidden rounded-xl bg-surface/50 border border-surface-light/20 transition-all duration-300 hover:bg-surface-hover hover:border-surface-light/40 hover:shadow-xl hover:shadow-primary/20", - style: "transform: translateY({card_transform.get_value().y}px) scale({card_transform.get_value().scale}); opacity: {card_transform.get_value().scale};", - // Fixed image height + style: "transform: translateY({card_transform.get_value().y}px) scale({card_transform.get_value().scale}); opacity: {card_opacity.get_value()};", + // Image container div { + onvisible: on_card_visible, class: "relative h-[200px] w-full overflow-hidden", - onmouseenter: animate_image_hover, - onmouseleave: animate_image_reset, + onmouseenter: on_image_hover, + onmouseleave: on_image_unhover, img { class: "w-full h-full object-cover transition-transform duration-300", + style: "transform: scale({image_transform.get_value().scale}); filter: blur({image_blur.get_value()}px);", src: "{props.image}", - style: "transform: scale({image_transform.get_value().scale});", } } - // Content with fixed spacing + // Content container div { class: "flex flex-col flex-1 p-6 h-[200px]", - h3 { class: "text-lg font-semibold text-text-primary group-hover:text-primary transition-colors line-clamp-1 mb-2", + h3 { + class: "text-lg font-semibold text-text-primary group-hover:text-primary transition-colors line-clamp-1 mb-2", + style: "transform: translateX({title_transform.get_value().x}px) scale({title_transform.get_value().scale});", "{props.title}" } - p { class: "text-sm text-text-secondary line-clamp-3 mb-4", "{props.description}" } - // Tech stack fixed to bottom + p { + class: "text-sm text-text-secondary line-clamp-3 mb-4", + style: "transform: translateX({desc_transform.get_value().x}px) scale({desc_transform.get_value().scale});", + "{props.description}" + } + // Tech stack div { class: "mt-auto flex flex-wrap gap-2", { props @@ -115,20 +191,20 @@ fn ProjectCard(props: ProjectCardProps) -> Element { .map(|(index, tech)| { let mut tech_transform = use_motion(Transform::new(0.0, 10.0, 0.0, 0.0)); use_effect(move || { - let delay = Duration::from_millis(500 + index as u64 * 100); - tech_transform - .animate_to( + let tech_sequence = AnimationSequence::new() + .then( Transform::identity(), AnimationConfig::new( AnimationMode::Spring(Spring { stiffness: 100.0, damping: 15.0, mass: 1.0, - ..Default::default() + velocity: 0.0, }), ) - .with_delay(delay), + .with_delay(Duration::from_millis(600 + index as u64 * 100)), ); + tech_transform.animate_sequence(tech_sequence); }); rsx! { span { diff --git a/src/components/testimonials.rs b/src/components/testimonials.rs index f7e6a97..2d73829 100644 --- a/src/components/testimonials.rs +++ b/src/components/testimonials.rs @@ -1,4 +1,8 @@ +use dioxus::hooks::*; use dioxus::prelude::*; +use dioxus_motion::{enhanced_motion::use_motion, prelude::*}; +use easer::functions::Easing; +use std::time::Duration; use crate::PROFILE_PIC; @@ -30,38 +34,89 @@ pub fn Testimonials() -> Element { }, ]; + let mut container_transform = use_motion(Transform::new(0.0, 20.0, 0.95, 0.0)); + let mut container_opacity = use_motion(0.0f32); + + use_effect(move || { + container_transform.animate_to( + Transform::identity(), + AnimationConfig::new(AnimationMode::Spring(Spring { + stiffness: 100.0, + damping: 15.0, + mass: 1.0, + ..Default::default() + })), + ); + + container_opacity.animate_to( + 1.0, + AnimationConfig::new(AnimationMode::Tween(Tween { + duration: Duration::from_millis(800), + easing: easer::functions::Sine::ease_in_out, + })), + ); + }); + rsx! { - div { class: "container mx-auto px-4 py-12", - // Section header + div { + class: "container mx-auto px-4 py-12", + style: "transform: translateY({container_transform.get_value().y}px) scale({container_transform.get_value().scale}); opacity: {container_opacity.get_value()};", h2 { class: "text-3xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-500 mb-2 text-center", "What People Say" } p { class: "text-gray-400 mb-12 text-center", "Testimonials from people I've worked with" } - // Testimonials grid + div { class: "grid grid-cols-1 md:grid-cols-2 gap-6", - for testimonial in testimonials { - div { class: "group relative overflow-hidden rounded-xl bg-gray-900/50 border border-gray-800 p-6 transition-all duration-300 hover:bg-gray-900/70 hover:border-gray-700", - // Quote - p { class: "text-gray-300 mb-6 italic", - "" - {testimonial.quote}, - "" - } - // Author info - div { class: "flex items-center space-x-4", - img { - class: "w-12 h-12 rounded-full object-cover", - src: "{testimonial.avatar}", - alt: "{testimonial.name}" - } - div { - h4 { class: "text-white font-medium", "{testimonial.name}" } - p { class: "text-sm text-gray-400", - "{testimonial.role} at {testimonial.company}" + { + testimonials + .iter() + .enumerate() + .map(|(index, testimonial)| { + let mut card_transform = use_motion( + Transform::new(-20.0, 0.0, 0.95, 0.0), + ); + use_effect(move || { + let delay = Duration::from_millis(300 + index as u64 * 200); + card_transform + .animate_to( + Transform::identity(), + AnimationConfig::new( + AnimationMode::Spring(Spring { + stiffness: 100.0, + damping: 15.0, + mass: 1.0, + ..Default::default() + }), + ) + .with_delay(delay), + ); + }); + rsx! { + div { + class: "group relative overflow-hidden rounded-xl bg-surface/50 border border-surface-light/20 p-6 transition-all duration-300 hover:bg-surface-hover hover:border-surface-light/40", + style: "transform: translateX({card_transform.get_value().x}px) scale({card_transform.get_value().scale});", + + + p { class: "text-text-secondary mb-6 italic", + "" + "{testimonial.quote}" + "" + } + + div { class: "flex items-center space-x-4 transition-transform duration-300 group-hover:translate-y-[-2px]", + img { + class: "w-12 h-12 rounded-full object-cover transition-transform duration-300 group-hover:scale-110", + src: "{testimonial.avatar}", + alt: "{testimonial.name}", + } + div { + h4 { class: "text-text-primary font-medium", "{testimonial.name}" } + p { class: "text-sm text-text-muted", "{testimonial.role} at {testimonial.company}" } + } + } } } - } - } + }) } } } diff --git a/src/components/work_experience.rs b/src/components/work_experience.rs index 1e56dd4..68128aa 100644 --- a/src/components/work_experience.rs +++ b/src/components/work_experience.rs @@ -26,20 +26,29 @@ pub fn WorkExperience() -> Element { let companies = [ ( "TROES Corp", - "2021 - Present", + "May, 2023 - Present", "Software Engineer", - "Led development of battery management systems and remote monitoring solutions, resulting in 40% efficiency improvement in data processing.", + "Developed high-performance battery management systems and remote monitoring solutions, achieving 40% improvement in data processing efficiency. Built robust battery controllers using Rust, with real-time monitoring through InfluxDB and Grafana. Designed scalable web platforms using Django and Vue.js for seamless IoT energy management.", vec![ "Rust", "Python", "AWS", "Redis", "Vue", "Tailwind", "Docker", "Grafana", "InfluxDB", ] ), ( "Lambton College", - "2021 - Present", + "Aug, 2022 - April, 2023", "Research Assistant", - "Led development of battery management systems and remote monitoring solutions, resulting in 40% efficiency improvement in data processing.", + "Focused on developing remote monitoring systems for battery energy storage using Flutter, Vue.js, and Django. Designed and implemented web and mobile applications to track system performance, enabling real-time data access and improving overall monitoring efficiency.", vec![ - "Rust", "Python", "AWS", "Redis", "Vue", "Tailwind", "Docker", "Grafana", "InfluxDB", + "Python", "AWS", "Vue", "Tailwind", "Docker", "InfluxDB", + ] + ), + ( + "Seva Development", + "Oct, 2021 - Jan, 2022", + "Contract Based Software Engineer", + "Developed a data migration engine as a Software Engineer, enabling seamless data transfer between diverse sources and destinations, including MySQL, Oracle, PostgreSQL, and Salesforce. Optimized the migration process for accuracy and efficiency, ensuring reliable data handling across multiple platforms.", + vec![ + "Python", "AWS Lambda","PostgreSQL", ] ), ]; @@ -155,7 +164,7 @@ pub fn WorkExperience() -> Element { // Timeline line container div { id: "timeline-line", - class: "relative h-[calc(100%-2rem)] bg-gray-800", + class: "relative h-[calc(100%)] bg-gray-800", // Moving dot div { id: "timeline-dot", @@ -164,7 +173,7 @@ pub fn WorkExperience() -> Element { onmounted: move |_| { dot_transform .animate_to( - Transform::new(0.0, 200.0, 1.0, 0.0), + Transform::new(0.0, 280.0, 1.0, 0.0), AnimationConfig::new( AnimationMode::Spring(Spring { stiffness: 100.0, diff --git a/src/main.rs b/src/main.rs index f1a733e..5420b80 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,6 +21,9 @@ enum Route { pub const MARKDOWN_CSS: Asset = asset!("/assets/markdown.css"); const MAIN_CSS: Asset = asset!("/assets/main.css"); pub const PROFILE_PIC: Asset = asset!("/assets/pf.png"); +pub const MOTION_PIC: Asset = asset!("/assets/dioxus-motion.png"); +pub const HTML_RSX_PIC: Asset = asset!("/assets/html-rsx.png"); + fn main() { dioxus_logger::init(Level::INFO).expect("failed to init logger"); dioxus::launch(App); @@ -54,9 +57,12 @@ pub static BLOG_PREVIEW: GlobalSignal Element { + let css = MAIN_CSS.to_string(); rsx! { div { - class: "min-h-screen bg-background text-text-primary", + + class: "min-h-screen bg-background text-text-primary", + // Main container // Hero/Profile section onmounted: move |data| { diff --git a/src/views/blog.rs b/src/views/blog.rs index c171307..b828eeb 100644 --- a/src/views/blog.rs +++ b/src/views/blog.rs @@ -1,7 +1,11 @@ use crate::{components::Markdown, Route}; use dioxus::prelude::*; -use dioxus_motion::prelude::*; +use dioxus_motion::{ + enhanced_motion::{use_motion, AnimationSequence, EnhancedAnimationManager}, + prelude::*, +}; use document::eval; +use easer::functions::Easing; // Add this import use serde::Deserialize; @@ -61,6 +65,7 @@ impl BlogPost { .unwrap_or_else(|| panic!("Blog post with id {} not found", id)) } } + #[component] pub fn BlogPreview() -> Element { let posts = BlogPost::all(); @@ -74,26 +79,36 @@ pub fn BlogPreview() -> Element { for (index , post) in posts.into_iter().enumerate() { { let mut card_transform = use_motion(Transform::new(0.0, 20.0, 0.8, 0.0)); - use_effect(move || { - let delay = Duration::from_millis(100 * index as u64); - card_transform - .animate_to( + let mut card_opacity = use_motion(0.0f32); + let on_card_visible = move |_| { + let card_sequence = AnimationSequence::new() + .then( Transform::identity(), AnimationConfig::new( AnimationMode::Spring(Spring { stiffness: 100.0, damping: 15.0, mass: 1.0, - ..Default::default() + velocity: 0.0, }), ) - .with_delay(delay), + .with_delay(Duration::from_millis(1300)), ); - }); + card_transform.animate_sequence(card_sequence); + + card_opacity.animate_to( + 1.0, + AnimationConfig::new(AnimationMode::Tween(Tween { + duration: Duration::from_millis(600), + easing: easer::functions::Sine::ease_in_out, + })), + ); + }; rsx! { Link { to: Route::Blog { id: post.id }, div { // Added fixed height and hover glow effect + onvisible: on_card_visible, class: "group relative h-[250px] overflow-hidden rounded-xl bg-gray-900/50 border border-gray-800 p-6 transition-all duration-300 hover:bg-gray-900/70 hover:border-gray-700 hover:shadow-xl hover:shadow-primary/20", style: "transform: translateY({card_transform.get_value().y}px) scale({card_transform.get_value().scale}); opacity: {card_transform.get_value().scale};", // Glow effect @@ -164,17 +179,17 @@ pub fn Blog(id: i32) -> Element { eval( r#" hljs.highlightAll(); - + // Add copy function window.copyCode = function(button) { const pre = button.parentElement.querySelector('pre'); const code = pre.textContent; - + navigator.clipboard.writeText(code).then(() => { const originalText = button.textContent; button.textContent = 'Copied!'; button.style.backgroundColor = 'rgba(46, 160, 67, 0.4)'; - + setTimeout(() => { button.textContent = originalText; button.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; @@ -183,7 +198,7 @@ pub fn Blog(id: i32) -> Element { console.error('Failed to copy:', err); button.textContent = 'Error!'; button.style.backgroundColor = 'rgba(248, 81, 73, 0.4)'; - + setTimeout(() => { button.textContent = 'Copy'; button.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; @@ -200,7 +215,7 @@ pub fn Blog(id: i32) -> Element { copyButton.className = 'copy-button'; copyButton.textContent = 'Copy'; copyButton.onclick = function() { copyCode(this); }; - + pre.parentNode.insertBefore(wrapper, pre); wrapper.appendChild(pre); wrapper.appendChild(copyButton); diff --git a/src/views/footer.rs b/src/views/footer.rs index 8310d3d..758f844 100644 --- a/src/views/footer.rs +++ b/src/views/footer.rs @@ -1,5 +1,7 @@ use dioxus::prelude::*; +use crate::{BLOG_PREVIEW, PROFILE_ELEMENT, PROJECT_GRID, WORKEXPERIENCE}; + #[component] pub fn Footer() -> Element { rsx! { @@ -20,11 +22,31 @@ pub fn Footer() -> Element { div { class: "space-y-4", h4 { class: "text-white font-medium", "Quick Links" } div { class: "flex flex-col space-y-2", - for link in ["About", "Projects", "Blog", "Contact"].iter() { + for link in ["About", "Projects", "Blogs"].iter() { a { - class: "text-gray-400 hover:text-white transition-colors", - href: "#", + class: "text-sm text-text-secondary hover:text-text-primary transition-colors relative group cursor-pointer", + onclick: move |_| async move { + match *link { + "About" => { + if let Some(header) = PROFILE_ELEMENT.cloned() { + let _ = header.scroll_to(ScrollBehavior::Smooth).await; + } + } + "Projects" => { + if let Some(header) = PROJECT_GRID.cloned() { + let _ = header.scroll_to(ScrollBehavior::Smooth).await; + } + } + "Blogs" => { + if let Some(header) = BLOG_PREVIEW.cloned() { + let _ = header.scroll_to(ScrollBehavior::Smooth).await; + } + } + _ => {} + } + }, "{link}" + } } } @@ -53,8 +75,12 @@ pub fn Footer() -> Element { } // Copyright div { class: "mt-12 pt-8 border-t border-gray-800 text-center text-gray-400", - "© 2024 Sabin Regmi. All rights reserved. Thanks to ChatGPT for sucking in RUST" + "© 2024 Sabin Regmi" + div { class: "text-center text-gray-400", + "Built with ❤️ using Dioxus" + } } + } } }