From 56e14eba02ed58553016dd3734c619a1b9c691ac Mon Sep 17 00:00:00 2001 From: Mahmoud Date: Tue, 24 Dec 2024 22:28:33 +0200 Subject: [PATCH] feat: add dioxus support --- Cargo.lock | 1429 +++++++++++++++++++- Cargo.toml | 6 + DIOXUS.md | 165 +++ README.md | 4 +- examples/dioxus/.gitignore | 2 + examples/dioxus/Cargo.lock | 1942 ++++++++++++++++++++++++++++ examples/dioxus/Cargo.toml | 21 + examples/dioxus/Dioxus.toml | 46 + examples/dioxus/README.md | 69 + examples/dioxus/assets/apple.png | Bin 0 -> 10781 bytes examples/dioxus/assets/linux.png | Bin 0 -> 135446 bytes examples/dioxus/assets/main.css | 8 + examples/dioxus/assets/windows.png | Bin 0 -> 49378 bytes examples/dioxus/src/main.rs | 215 +++ examples/yew/Cargo.lock | 2 +- examples/yew/Cargo.toml | 2 +- src/common.rs | 2 + src/dioxus.rs | 596 +++++++++ src/lib.rs | 3 + src/yew.rs | 6 +- 20 files changed, 4492 insertions(+), 26 deletions(-) create mode 100644 DIOXUS.md create mode 100644 examples/dioxus/.gitignore create mode 100644 examples/dioxus/Cargo.lock create mode 100755 examples/dioxus/Cargo.toml create mode 100755 examples/dioxus/Dioxus.toml create mode 100644 examples/dioxus/README.md create mode 100644 examples/dioxus/assets/apple.png create mode 100644 examples/dioxus/assets/linux.png create mode 100644 examples/dioxus/assets/main.css create mode 100644 examples/dioxus/assets/windows.png create mode 100755 examples/dioxus/src/main.rs create mode 100644 src/dioxus.rs diff --git a/Cargo.lock b/Cargo.lock index f925797..2d15b7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -81,6 +81,17 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + [[package]] name = "autocfg" version = "1.4.0" @@ -102,6 +113,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bincode" version = "1.3.3" @@ -111,6 +128,21 @@ dependencies = [ "serde", ] +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "boolinator" version = "2.4.0" @@ -133,6 +165,12 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" version = "1.9.0" @@ -145,6 +183,33 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "clap" version = "4.5.23" @@ -168,37 +233,538 @@ dependencies = [ ] [[package]] -name = "clap_derive" -version = "4.5.18" +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-serialize" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26cbdf356b126a2e8bb11ca4665b9a32847de4207345d7c8a2778b5fba3e1e5b" +dependencies = [ + "const-serialize-macro", + "serde", +] + +[[package]] +name = "const-serialize-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82bbc5425ac9ef9a7f8705222dcd18ffb20420d7238f22d7c30d7c6b6fe4381" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cpufeatures" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] + +[[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 = "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.91", +] + +[[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.91", +] + +[[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.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dioxus" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ce361786137509f7fbf6326d1029b8fef6c959650ea0ba587fcf379e593e14" +dependencies = [ + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-devtools", + "dioxus-document", + "dioxus-fullstack", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-logger", + "dioxus-signals", + "dioxus-web", + "manganis", +] + +[[package]] +name = "dioxus-cli-config" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c11a6723d6d0e8cfce29f0ed6d462f296054153c3dd5df0c8783d19477d1e8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "dioxus-config-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183e101722209bd00d560f3f20867fedf0b3545496066b7c167cbc1d5aa6a352" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "dioxus-core" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d17c829ce7b8ecf750fc107a91c7da972dc9514a1eed1affd406b8c70377ee24" +dependencies = [ + "const_format", + "dioxus-core-types", + "futures-channel", + "futures-util", + "generational-box", + "longest-increasing-subsequence", + "rustc-hash", + "rustversion", + "serde", + "slab", + "slotmap", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-core-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abff76b546af9f10e8c601f219a5a172fe95622fab1e098b194daecff9c69ef6" +dependencies = [ + "convert_case", + "dioxus-rsx", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "dioxus-core-types" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1795086b161d3033e5d769a5ee3a8e3d99c23093d24240832dc5733a0af9d585" +dependencies = [ + "once_cell", +] + +[[package]] +name = "dioxus-devtools" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2cca475d00152799b2750f26667d75df9da215e2fd6b60ef92589a6e073f286" +dependencies = [ + "dioxus-core", + "dioxus-devtools-types", + "dioxus-signals", + "serde", + "serde_json", + "tracing", + "tungstenite", + "warnings", +] + +[[package]] +name = "dioxus-devtools-types" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "152852a7de4df2fda36767db93d871a6249e1f698ac586cfc6a81373fe81d09f" +dependencies = [ + "dioxus-core", + "serde", +] + +[[package]] +name = "dioxus-document" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac82ac2a41f369f6d2d38375aa4004762297e0c9f7039a62484ed0aa24244260" +dependencies = [ + "dioxus-core", + "dioxus-core-macro", + "dioxus-core-types", + "dioxus-html", + "futures-channel", + "futures-util", + "generational-box", + "lazy-js-bundle", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "dioxus-fullstack" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3806e61071c9b4f9efcaa4d2f28a49d1b51be7a2fe53686305b85944d406a72" +dependencies = [ + "base64", + "bytes", + "ciborium", + "dioxus-devtools", + "dioxus-history", + "dioxus-lib", + "dioxus-web", + "dioxus_server_macro", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "serde", + "server_fn", + "tracing", +] + +[[package]] +name = "dioxus-history" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2b24b84c384973e41b9a42beefc0535f86b1e58f01a871a27aac3720bfdc72" +dependencies = [ + "dioxus-core", + "tracing", +] + +[[package]] +name = "dioxus-hooks" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb65a083c01d192478106adcf55609bfae4911816065d1f4fa850ed36eea77a" +dependencies = [ + "dioxus-core", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "rustversion", + "slab", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-html" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "676541e90fbacd78fb723d5c492fcbbc13c34177d5693b333c913836e7715253" +dependencies = [ + "async-trait", + "dioxus-core", + "dioxus-core-macro", + "dioxus-core-types", + "dioxus-hooks", + "dioxus-html-internal-macro", + "enumset", + "euclid", + "futures-channel", + "generational-box", + "keyboard-types", + "lazy-js-bundle", + "rustversion", + "tracing", +] + +[[package]] +name = "dioxus-html-internal-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f50f698bffea14525f0576f02faa5d926ad31252ba3717c340706bf50a311a" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "dioxus-interpreter-js" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da2716b62d08dbb2e4e4678f67cd7c9f25204b598eb7c0a569050d68fa3f85e6" +dependencies = [ + "js-sys", + "lazy-js-bundle", + "rustc-hash", + "sledgehammer_bindgen", + "sledgehammer_utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus-lib" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c9150858fae1bf2b3b76751ab30a58871a32d265496ddd432011a2c93d1aa4" +dependencies = [ + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-document", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx", + "dioxus-signals", +] + +[[package]] +name = "dioxus-logger" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0214f450acfdc4265b09790b149bc615bb37cd30c634e0d835b39bc0bcd5223" +dependencies = [ + "console_error_panic_hook", + "dioxus-cli-config", + "tracing", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "dioxus-rsx" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e3b4c24416463629be0b048b0decd9eaf762597a9e8f46ff4bd1113d2e0c1a" +dependencies = [ + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "dioxus-signals" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c24e8226b7ce0c6921066ebe4218fd999eda1603b9b7ddcfac3b8450614b03" +dependencies = [ + "dioxus-core", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "parking_lot", + "rustc-hash", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-web" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad30399877d3e7e476a246077fbb9e3e57dd094401174b915dfb8aaf99142f0a" +dependencies = [ + "async-trait", + "ciborium", + "dioxus-cli-config", + "dioxus-core", + "dioxus-core-types", + "dioxus-devtools", + "dioxus-document", + "dioxus-history", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "js-sys", + "lazy-js-bundle", + "rustc-hash", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_json", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus_server_macro" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "533109e4635ce1a74d8f1418949585a44aa8cbd953e8f935c23ad4e320962067" dependencies = [ - "heck", "proc-macro2", "quote", + "server_fn_macro", "syn 2.0.91", ] [[package]] -name = "clap_lex" -version = "0.7.4" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] [[package]] -name = "colorchoice" -version = "1.0.3" +name = "enumset" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] [[package]] -name = "console_error_panic_hook" -version = "0.1.7" +name = "enumset_derive" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" dependencies = [ - "cfg-if", - "wasm-bindgen", + "darling", + "proc-macro2", + "quote", + "syn 2.0.91", ] [[package]] @@ -207,6 +773,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + [[package]] name = "fnv" version = "1.0.7" @@ -230,6 +805,7 @@ checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", + "futures-executor", "futures-io", "futures-sink", "futures-task", @@ -252,6 +828,17 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + [[package]] name = "futures-io" version = "0.3.31" @@ -299,6 +886,26 @@ dependencies = [ "slab", ] +[[package]] +name = "generational-box" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb0db311f84454bdb16231ecd63da9169d61ad06a3262d44ea9be794dd19bf2d" +dependencies = [ + "parking_lot", + "tracing", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -489,7 +1096,7 @@ dependencies = [ "futures-core", "futures-sink", "gloo-utils 0.1.7", - "http", + "http 0.2.12", "js-sys", "pin-project", "serde", @@ -510,7 +1117,28 @@ dependencies = [ "futures-core", "futures-sink", "gloo-utils 0.2.0", - "http", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 1.2.0", "js-sys", "pin-project", "serde", @@ -665,6 +1293,22 @@ dependencies = [ "syn 2.0.91", ] +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "hashbrown" version = "0.15.2" @@ -694,6 +1338,168 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "implicit-clone" version = "0.4.9" @@ -721,7 +1527,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.2", ] [[package]] @@ -746,18 +1552,96 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags", +] + +[[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.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +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 = "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.91", +] + [[package]] name = "memchr" version = "2.7.4" @@ -773,6 +1657,15 @@ dependencies = [ "adler2", ] +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.16.0" @@ -798,6 +1691,29 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -847,6 +1763,15 @@ dependencies = [ "thiserror", ] +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + [[package]] name = "prettyplease" version = "0.2.25" @@ -900,6 +1825,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", + "version_check", +] + [[package]] name = "prokio" version = "0.1.0" @@ -928,14 +1865,54 @@ dependencies = [ [[package]] name = "radiors" -version = "0.0.0" +version = "0.0.1" dependencies = [ "bump2version", + "dioxus", "log", "web-sys", "yew", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[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", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags", +] + [[package]] name = "regex" version = "1.11.1" @@ -971,6 +1948,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustversion" version = "1.0.18" @@ -983,6 +1966,21 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +dependencies = [ + "futures-core", +] + [[package]] name = "serde" version = "1.0.216" @@ -1037,6 +2035,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_qs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1049,6 +2058,78 @@ dependencies = [ "serde", ] +[[package]] +name = "server_fn" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fae7a3038a32e5a34ba32c6c45eb4852f8affaf8b794ebfcd4b1099e2d62ebe" +dependencies = [ + "bytes", + "const_format", + "dashmap", + "futures", + "gloo-net 0.6.0", + "http 1.2.0", + "js-sys", + "once_cell", + "send_wrapper", + "serde", + "serde_json", + "serde_qs", + "server_fn_macro_default", + "thiserror", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1" +dependencies = [ + "const_format", + "convert_case", + "proc-macro2", + "quote", + "syn 2.0.91", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro_default" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2aa8119b558a17992e0ac1fd07f080099564f24532858811ce04f742542440" +dependencies = [ + "server_fn_macro", + "syn 2.0.91", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "slab" version = "0.4.9" @@ -1058,6 +2139,57 @@ dependencies = [ "autocfg", ] +[[package]] +name = "sledgehammer_bindgen" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e83e178d176459c92bc129cfd0958afac3ced925471b889b3a75546cfc4133" +dependencies = [ + "sledgehammer_bindgen_macro", + "wasm-bindgen", +] + +[[package]] +name = "sledgehammer_bindgen_macro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33a1b4f13e2bbf2f5b29d09dfebc9de69229ffee245aed80e3b70f9b5fd28c06" +dependencies = [ + "quote", + "syn 2.0.91", +] + +[[package]] +name = "sledgehammer_utils" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debdd4b83524961983cea3c55383b3910fd2f24fd13a188f5b091d2d504a61ae" +dependencies = [ + "rustc-hash", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "serde", + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.11.1" @@ -1085,6 +2217,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -1105,6 +2248,26 @@ dependencies = [ "syn 2.0.91", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tokio" version = "1.42.0" @@ -1174,12 +2337,99 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "tungstenite" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.2.0", + "httparse", + "log", + "rand", + "sha1", + "thiserror", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + [[package]] name = "unicode-ident" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -1192,6 +2442,28 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[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.91", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1265,6 +2537,19 @@ version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.76" @@ -1357,6 +2642,24 @@ dependencies = [ "memchr", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "xxhash-rust" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d48f1b18be023c95e7b75f481cac649d74be7c507ff4a407c55cfb957f7934" + [[package]] name = "yew" version = "0.21.0" @@ -1396,3 +2699,91 @@ dependencies = [ "quote", "syn 2.0.91", ] + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] diff --git a/Cargo.toml b/Cargo.toml index 79e4166..a222c2c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,9 +17,11 @@ exclude = ["assets", "examples"] [dependencies] web-sys = "0.3.76" yew = { version = "0.21.0", default-features = false, optional = true } +dioxus = { version = "0.6.1", optional = true } [features] yew = ["dep:yew"] +dio = ["dioxus"] [profile.release] opt-level = "z" @@ -33,6 +35,10 @@ incremental = false [badges] maintenance = { status = "actively-developed" } +[package.metadata.docs.rs] +all-features = true +rustdoc-args = ["--cfg", "docsrs"] + [dev-dependencies] log = "0.4.22" bump2version = "0.1.4" diff --git a/DIOXUS.md b/DIOXUS.md new file mode 100644 index 0000000..7e28e91 --- /dev/null +++ b/DIOXUS.md @@ -0,0 +1,165 @@ +# 🧬 Radio RS Dioxus Usage + +Adding Radio RS to your project is simple: + +1. Make sure your project is set up with **Dioxus**. Refer to the [Dioxus Getting Started Guide](https://dioxuslabs.com/learn/0.6/getting_started) for setup instructions. + +1. Add the Radio component to your dependencies by including it in your `Cargo.toml` file. + + ```sh + cargo add radiors --features=dio + ``` + +1. Import the `Radio` components into your Dioxus component and start using it in your app. + +## 🛠️ Usage + +Incorporating the Accordion component into your application is easy. Follow these steps: + +1. Import the Radio components into your Dioxus project: + + ```rust + use dioxus::prelude::*; + use radiors::dioxus::{Radio, Group}; + use radiors::{Size, Orientation}; + ``` + +1. Use the `Radio` components within your Dioxus application: + + ```rust + use dioxus::prelude::*; + use radiors::dioxus::{Radio, Group}; + use radiors::{Size, Orientation}; + + #[component] + pub fn app() -> Element { + let mut selected_value = use_signal(|| "Option1".to_string()); + + rsx! { + Group { + selected: selected_value(), + onchange: move |new_value| { + selected_value.set(new_value); + }, + orientation: Orientation::Vertical, + class: "radio-group", + Radio { + label: "Option 1", + value: "Option1", + class: "radio-button" + } + Radio { + label: "Option 2", + value: "Option2", + class: "radio-button" + } + } + } + } + ``` + +## 🔧 Props + +### `Group` Props + +#### Main Props + +| Property | Type | Description | Default | +| ---------- | --------- | ---------------------------------------------------- | ------- | +| `selected` | `String` | The currently selected value of the radio group. | `""` | +| `children` | `Element` | Child `Radio` components to render within the group. | `""` | + +#### Styling Props + +```sh ++-----------------------------------------------------------+ +| [Group Container] | <-- `class` & `style` +| | +| +-----------------------------------------------+ | <-- `orientation` +| | [Child Radio Buttons] | | <-- `children` +| +-----------------------------------------------+ | +| | ++-----------------------------------------------------------+ +``` + +| Property | Type | Description | Default | +| ------------- | -------------- | ------------------------------------------------------------ | ------------------------- | +| `style` | `&'static str` | Inline styles for the radio group container. | `""` | +| `class` | `&'static str` | CSS class for the radio group container. | `""` | +| `orientation` | `Orientation` | Orientation of the radio group (`Horizontal` or `Vertical`). | `Orientation::Horizontal` | + +#### Behavioral Props + +| Property | Type | Description | Default | +| ---------- | ------------------ | --------------------------------------------------- | ------- | +| `onchange` | `Callback` | Callback triggered when the selected value changes. | No-op | + +### `Radio` Props + +#### Main Props + +| Property | Type | Description | Default | +| ---------- | -------------- | ------------------------------------------------------- | ------- | +| `label` | `&'static str` | Text label displayed alongside the radio button. | `""` | +| `value` | `&'static str` | Unique value for the radio button. | `""` | +| `src` | `&'static str` | Optional image URL to display next to the radio button. | `""` | +| `selected` | `bool` | Indicates whether this radio button is selected. | `false` | +| `disabled` | `bool` | Disables the radio button when `true`. | `false` | + +#### Styling Props + +```sh ++-----------------------------------------------------------+ +| [Radio Container] | <-- `class` & `style` +| | +| +-------------------------------------------------+ | <-- `selected_class` & `selected_style` (when selected) +| | [Radio Button] | | <-- `disabled_class` & `disabled_style` (when disabled) +| | | | +| | +---------------------------------------+ | | +| | | [Hidden Input] | | | <-- `input_class` & `input_style` +| | +---------------------------------------+ | | +| | | | +| | +---------------------------------------+ | | +| | | [Optional Image] | | | <-- `image_class` & `image_style` +| | +---------------------------------------+ | | +| | | | +| | +---------------------------------------+ | | +| | | [Radio Label] | | | <-- `label_class` & `label_style` +| | +---------------------------------------+ | | +| +-------------------------------------------------+ | +| | ++-----------------------------------------------------------+ +``` + +| Property | Type | Description | Default | +| ----------------- | -------------- | ---------------------------------------------------------------- | -------------------- | +| `style` | `&'static str` | Custom inline styles for the radio container. | `""` | +| `class` | `&'static str` | CSS class for the radio container. | `""` | +| `label_style` | `&'static str` | Inline styles for the radio label. | `""` | +| `label_class` | `&'static str` | CSS class for the radio label. | `""` | +| `image_style` | `&'static str` | Inline styles for the image (if `src` is provided). | `""` | +| `image_class` | `&'static str` | CSS class for the image (if `src` is provided). | `""` | +| `size` | `Size` | Size of the radio button (`Small`, `Medium`, `Large`). | `Size::XSmall` | +| `type` | `Type` | Styling type of the radio button (e.g., `Primary`, `Secondary`). | `Type::None` | +| `selected_style` | `&'static str` | Inline styles for the selected state of the radio button. | `""` | +| `selected_class` | `&'static str` | CSS class for the selected state of the radio button. | `""` | +| `disabled_style` | `&'static str` | Inline styles for the disabled state of the radio button. | `""` | +| `disabled_class` | `&'static str` | CSS class for the disabled state of the radio button. | `""` | +| `animation_style` | `&'static str` | Inline styles for animations applied to the radio button. | `""` | +| `animation_class` | `&'static str` | CSS class for animations applied to the radio button. | `""` | +| `input_style` | `&'static str` | Inline styles for the hidden `` element. | `HIDDEN_INPUT_STYLE` | +| `input_class` | `&'static str` | CSS class for the hidden `` element. | `""` | + +#### Behavioral Props + +| Property | Type | Description | Default | +| --------- | ------------------ | ---------------------------------------------------- | ------- | +| `onclick` | `Callback` | Callback triggered when the radio button is clicked. | No-op | + +## 💡 Notes + +- Use the `Group` component to manage state for multiple `Radio` components. +- Callback props like `onchange` and `onclick` allow you to handle user interactions effectively. +- Make sure that the `value` for each `Radio` is unique within the `Group` to avoid conflicts. +- Customize the layout with the `orientation` prop (`Horizontal` or `Vertical`). +- Enhance the appearance by applying custom classes and styles or using any CSS framework. diff --git a/README.md b/README.md index 46ac8ef..f8d0f22 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ | Framework | Live Demo | | --- | --- | | Yew | [![Netlify Status](https://api.netlify.com/api/v1/badges/a0efc7e9-f20e-4dd9-93e1-c8f4fde7506f/deploy-status)](https://radio-rs.netlify.app) | -| Dioxus | TODO | +| Dioxus | [![Netlify Status](https://api.netlify.com/api/v1/badges/4dabc732-d6de-4598-a629-980be35c003f/deploy-status)](https://radio-rs-dioxus.netlify.app) | | Leptos | TODO | ## 📜 Intro @@ -43,7 +43,7 @@ The following features make Radio RS a valuable addition to your WASM-based proj Refer to [our guide](YEW.md) to integrate this component into your Yew app. -## 🧬 Dioxus Usage (TODO) +## 🧬 Dioxus Usage Refer to [our guide](DIOXUS.md) to integrate this component into your Dioxus app. diff --git a/examples/dioxus/.gitignore b/examples/dioxus/.gitignore new file mode 100644 index 0000000..cc39038 --- /dev/null +++ b/examples/dioxus/.gitignore @@ -0,0 +1,2 @@ +target/**/* +dist/**/* diff --git a/examples/dioxus/Cargo.lock b/examples/dioxus/Cargo.lock new file mode 100644 index 0000000..2c53e90 --- /dev/null +++ b/examples/dioxus/Cargo.lock @@ -0,0 +1,1942 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-serialize" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26cbdf356b126a2e8bb11ca4665b9a32847de4207345d7c8a2778b5fba3e1e5b" +dependencies = [ + "const-serialize-macro", + "serde", +] + +[[package]] +name = "const-serialize-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82bbc5425ac9ef9a7f8705222dcd18ffb20420d7238f22d7c30d7c6b6fe4381" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "const_format" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cpufeatures" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] + +[[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 = "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", +] + +[[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", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dioxus" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ce361786137509f7fbf6326d1029b8fef6c959650ea0ba587fcf379e593e14" +dependencies = [ + "dioxus-cli-config", + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-devtools", + "dioxus-document", + "dioxus-fullstack", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-logger", + "dioxus-signals", + "dioxus-web", + "manganis", +] + +[[package]] +name = "dioxus-cli-config" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c11a6723d6d0e8cfce29f0ed6d462f296054153c3dd5df0c8783d19477d1e8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "dioxus-config-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183e101722209bd00d560f3f20867fedf0b3545496066b7c167cbc1d5aa6a352" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "dioxus-core" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d17c829ce7b8ecf750fc107a91c7da972dc9514a1eed1affd406b8c70377ee24" +dependencies = [ + "const_format", + "dioxus-core-types", + "futures-channel", + "futures-util", + "generational-box", + "longest-increasing-subsequence", + "rustc-hash", + "rustversion", + "serde", + "slab", + "slotmap", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-core-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abff76b546af9f10e8c601f219a5a172fe95622fab1e098b194daecff9c69ef6" +dependencies = [ + "convert_case", + "dioxus-rsx", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-core-types" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1795086b161d3033e5d769a5ee3a8e3d99c23093d24240832dc5733a0af9d585" +dependencies = [ + "once_cell", +] + +[[package]] +name = "dioxus-devtools" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2cca475d00152799b2750f26667d75df9da215e2fd6b60ef92589a6e073f286" +dependencies = [ + "dioxus-core", + "dioxus-devtools-types", + "dioxus-signals", + "serde", + "serde_json", + "tracing", + "tungstenite", + "warnings", +] + +[[package]] +name = "dioxus-devtools-types" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "152852a7de4df2fda36767db93d871a6249e1f698ac586cfc6a81373fe81d09f" +dependencies = [ + "dioxus-core", + "serde", +] + +[[package]] +name = "dioxus-document" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac82ac2a41f369f6d2d38375aa4004762297e0c9f7039a62484ed0aa24244260" +dependencies = [ + "dioxus-core", + "dioxus-core-macro", + "dioxus-core-types", + "dioxus-html", + "futures-channel", + "futures-util", + "generational-box", + "lazy-js-bundle", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "dioxus-fullstack" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3806e61071c9b4f9efcaa4d2f28a49d1b51be7a2fe53686305b85944d406a72" +dependencies = [ + "base64", + "bytes", + "ciborium", + "dioxus-devtools", + "dioxus-history", + "dioxus-lib", + "dioxus-web", + "dioxus_server_macro", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "serde", + "server_fn", + "tracing", + "web-sys", +] + +[[package]] +name = "dioxus-history" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2b24b84c384973e41b9a42beefc0535f86b1e58f01a871a27aac3720bfdc72" +dependencies = [ + "dioxus-core", + "tracing", +] + +[[package]] +name = "dioxus-hooks" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb65a083c01d192478106adcf55609bfae4911816065d1f4fa850ed36eea77a" +dependencies = [ + "dioxus-core", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "rustversion", + "slab", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-html" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "676541e90fbacd78fb723d5c492fcbbc13c34177d5693b333c913836e7715253" +dependencies = [ + "async-trait", + "dioxus-core", + "dioxus-core-macro", + "dioxus-core-types", + "dioxus-hooks", + "dioxus-html-internal-macro", + "enumset", + "euclid", + "futures-channel", + "generational-box", + "keyboard-types", + "lazy-js-bundle", + "rustversion", + "tracing", +] + +[[package]] +name = "dioxus-html-internal-macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f50f698bffea14525f0576f02faa5d926ad31252ba3717c340706bf50a311a" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-interpreter-js" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da2716b62d08dbb2e4e4678f67cd7c9f25204b598eb7c0a569050d68fa3f85e6" +dependencies = [ + "js-sys", + "lazy-js-bundle", + "rustc-hash", + "sledgehammer_bindgen", + "sledgehammer_utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus-lib" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c9150858fae1bf2b3b76751ab30a58871a32d265496ddd432011a2c93d1aa4" +dependencies = [ + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-document", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx", + "dioxus-signals", +] + +[[package]] +name = "dioxus-logger" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0214f450acfdc4265b09790b149bc615bb37cd30c634e0d835b39bc0bcd5223" +dependencies = [ + "console_error_panic_hook", + "dioxus-cli-config", + "tracing", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "dioxus-rsx" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e3b4c24416463629be0b048b0decd9eaf762597a9e8f46ff4bd1113d2e0c1a" +dependencies = [ + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn", +] + +[[package]] +name = "dioxus-signals" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c24e8226b7ce0c6921066ebe4218fd999eda1603b9b7ddcfac3b8450614b03" +dependencies = [ + "dioxus-core", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "parking_lot", + "rustc-hash", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-web" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad30399877d3e7e476a246077fbb9e3e57dd094401174b915dfb8aaf99142f0a" +dependencies = [ + "async-trait", + "ciborium", + "dioxus-cli-config", + "dioxus-core", + "dioxus-core-types", + "dioxus-devtools", + "dioxus-document", + "dioxus-history", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "js-sys", + "lazy-js-bundle", + "rustc-hash", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus_server_macro" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533109e4635ce1a74d8f1418949585a44aa8cbd953e8f935c23ad4e320962067" +dependencies = [ + "proc-macro2", + "quote", + "server_fn_macro", + "syn", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "enumset" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generational-box" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb0db311f84454bdb16231ecd63da9169d61ad06a3262d44ea9be794dd19bf2d" +dependencies = [ + "parking_lot", + "tracing", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "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 = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[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", +] + +[[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.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.167" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +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 = "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", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radio-rs-dioxus-example" +version = "0.1.0" +dependencies = [ + "dioxus", + "dioxus-logger", + "radiors", +] + +[[package]] +name = "radiors" +version = "0.0.1" +dependencies = [ + "dioxus", + "web-sys", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[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", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +dependencies = [ + "futures-core", +] + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + +[[package]] +name = "server_fn" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fae7a3038a32e5a34ba32c6c45eb4852f8affaf8b794ebfcd4b1099e2d62ebe" +dependencies = [ + "bytes", + "const_format", + "dashmap", + "futures", + "gloo-net", + "http", + "js-sys", + "once_cell", + "send_wrapper", + "serde", + "serde_json", + "serde_qs", + "server_fn_macro_default", + "thiserror", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1" +dependencies = [ + "const_format", + "convert_case", + "proc-macro2", + "quote", + "syn", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro_default" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2aa8119b558a17992e0ac1fd07f080099564f24532858811ce04f742542440" +dependencies = [ + "server_fn_macro", + "syn", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sledgehammer_bindgen" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e83e178d176459c92bc129cfd0958afac3ced925471b889b3a75546cfc4133" +dependencies = [ + "sledgehammer_bindgen_macro", + "wasm-bindgen", +] + +[[package]] +name = "sledgehammer_bindgen_macro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33a1b4f13e2bbf2f5b29d09dfebc9de69229ffee245aed80e3b70f9b5fd28c06" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "sledgehammer_utils" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debdd4b83524961983cea3c55383b3910fd2f24fd13a188f5b091d2d504a61ae" +dependencies = [ + "rustc-hash", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "serde", + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "syn" +version = "2.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "tungstenite" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "sha1", + "thiserror", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[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", +] + +[[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", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +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", + "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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +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 = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[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.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[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.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[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.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "xxhash-rust" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/examples/dioxus/Cargo.toml b/examples/dioxus/Cargo.toml new file mode 100755 index 0000000..cd39a69 --- /dev/null +++ b/examples/dioxus/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "radio-rs-dioxus-example" +version = "0.1.0" +edition = "2021" + +[dependencies] +dioxus = { version = "0.6.1", features = ["web"] } +radiors = { path = "../../", features = ["dio"] } +dioxus-logger = "0.6.1" + +[profile] + +[profile.wasm-dev] +inherits = "dev" +opt-level = 1 + +[profile.server-dev] +inherits = "dev" + +[profile.android-dev] +inherits = "dev" diff --git a/examples/dioxus/Dioxus.toml b/examples/dioxus/Dioxus.toml new file mode 100755 index 0000000..1135684 --- /dev/null +++ b/examples/dioxus/Dioxus.toml @@ -0,0 +1,46 @@ +[application] + +# App (Project) Name +name = "radio-rs" + +# Dioxus App Default Platform +# desktop, web +default_platform = "web" + +# `build` & `serve` dist path +out_dir = "dist" + +# resource (assets) file folder +asset_dir = "assets" + +[web.app] + +# HTML title tag content +title = "radio-rs" + +[web.watcher] + +# when watcher trigger, regenerate the `index.html` +reload_html = true + +# which files or dirs will be watcher monitoring +watch_path = ["src", "assets"] + +# include `assets` in web platform +[web.resource] + +# CSS style file +style = [ + # online cdn. + "https://unpkg.com/tailwindcss@2.2.19/dist/tailwind.min.css", + "/assets/main.css", +] + +# Javascript code file +script = [] + +[web.resource.dev] + +# Javascript code file +# serve: [dev-server] only +script = [] diff --git a/examples/dioxus/README.md b/examples/dioxus/README.md new file mode 100644 index 0000000..615b057 --- /dev/null +++ b/examples/dioxus/README.md @@ -0,0 +1,69 @@ +# 📚 Radio RS Dioxus Example + +## 🛠️ Pre-requisites: + +### 🐧 **Linux Users** + +1. **Install [`rustup`](https://www.rust-lang.org/tools/install)**: + + ```sh + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + ``` + +1. Install [`Dioxus CLI`](https://dioxuslabs.com/learn/0.5/getting_started): + + ```sh + cargo install dioxus-cli + ``` + +### 🪟 **Windows Users** + +1. **Download and install `rustup`**: Follow the installation instructions [here](https://www.rust-lang.org/tools/install). + +1. **Install [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install)**: Open PowerShell as administrator and run: + + ```sh + wsl --install + ``` + +1. **Reset Network Stack**: In PowerShell (administrator mode), run: + + ```sh + netsh int ip reset all + netsh winsock reset + ``` + +1. **Install Linux packages in WSL**: Once inside your WSL terminal, update and install required dependencies: + + ```sh + sudo apt update + sudo apt install build-essential pkg-config libudev-dev + ``` + +1. Install [`Dioxus CLI`](https://dioxuslabs.com/learn/0.5/getting_started): + + ```sh + cargo install dioxus-cli + ``` + +## 🚀 Building and Running + +1. Fork/Clone the GitHub repository. + + ```sh + git clone https://github.com/opensass/radio-rs + ``` + +1. Navigate to the application directory. + + ```sh + cd radio-rs/examples/dioxus + ``` + +1. Run the client: + + ```sh + dx serve --port 3000 + ``` + +Navigate to http://localhost:3000 to explore the landing page. diff --git a/examples/dioxus/assets/apple.png b/examples/dioxus/assets/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..3a352cfada67b7318e6a328484b3f4724712877d GIT binary patch literal 10781 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%0D*vPT5PkBReI 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 literal 0 HcmV?d00001 diff --git a/examples/dioxus/assets/main.css b/examples/dioxus/assets/main.css new file mode 100644 index 0000000..913598f --- /dev/null +++ b/examples/dioxus/assets/main.css @@ -0,0 +1,8 @@ +body { + color: #5e5c7f; + background-color: #303030; + font-family: "Rubik", sans-serif; + font-size: 16px; + line-height: 1.7; + overflow-x: hidden; +} diff --git a/examples/dioxus/assets/windows.png b/examples/dioxus/assets/windows.png new file mode 100644 index 0000000000000000000000000000000000000000..82dbacd652456008dabcfb1ba5b18d1e99cdfd3d GIT binary patch literal 49378 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

{lS9b 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 bAZ9>QyN~y8N|$QX{{w1IwUx>gEd2imUy=R= literal 0 HcmV?d00001 diff --git a/examples/dioxus/src/main.rs b/examples/dioxus/src/main.rs new file mode 100755 index 0000000..a8fe439 --- /dev/null +++ b/examples/dioxus/src/main.rs @@ -0,0 +1,215 @@ +use dioxus::prelude::*; +use dioxus_logger::tracing; +use radiors::dioxus::{Group, Radio}; +use radiors::Orientation; + +fn main() { + dioxus_logger::init(tracing::Level::INFO).expect("failed to init logger"); + tracing::info!("starting app"); + launch(app); +} + +#[component] +fn app() -> Element { + rsx! { + LandingPage {} + } +} + +#[component] +pub fn LandingPage() -> Element { + let os_selected = use_signal(|| "mac".to_string()); + let browser_selected = use_signal(|| "chrome".to_string()); + + let onchange = |mut state: Signal| move |value: String| state.set(value); + + rsx! { + div { + class: "m-6 min-h-screen flex flex-col items-center justify-center", + h1 { class: "text-3xl font-bold mb-8 text-white", "Radio RS Dioxus Examples" } + div { + class: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-8", + + // Default Headless Radio Buttons + div { + class: "flex flex-col items-center bg-gray-200 p-4 rounded-lg shadow-md", + h2 { class: "text-xl font-bold mb-2", "Default Headless Radio Buttons" } + pre { + class: "font-mono text-xs text-white p-4 bg-gray-800 mb-8 rounded-md w-full overflow-x-auto", + r##"Group {{ + selected: selected.clone(), + onchange: |value| selected.set(value), + Radio {{ value: "mac", label: "Mac", input_style: "" }} + Radio {{ value: "windows", label: "Windows", input_style: "" }} + Radio {{ value: "linux", label: "Linux", input_style: "" }} +}}"## + } + Group { + selected: os_selected.clone(), + onchange: onchange(os_selected.clone()), + Radio { + value: "mac", + label: "Mac", + input_style: "" + } + Radio { + value: "windows", + label: "Windows", + input_style: "" + } + Radio { + value: "linux", + label: "Linux", + input_style: "" + } + } + } + + // Horizontal Headless Radio Buttons + div { + class: "flex flex-col items-center bg-gray-200 p-4 rounded-lg shadow-md", + h2 { class: "text-xl font-bold mb-2", "Horizontal Headless Radio Buttons" } + pre { + class: "font-mono text-xs text-white p-4 bg-gray-800 mb-8 rounded-md w-full overflow-x-auto", + r##"Group {{ + selected: os_selected.clone(), + onchange: |value| os_selected.set(value), + orientation: Orientation::Horizontal, + Radio {{ value: "mac", label: "Mac", input_style: "" }} + Radio {{ value: "windows", label: "Windows", input_style: "" }} + Radio {{ value: "linux", label: "Linux", input_style: "" }} +}}"## + } + Group { + selected: os_selected.clone(), + onchange: onchange(os_selected.clone()), + orientation: Orientation::Horizontal, + Radio { + value: "mac", + label: "Mac", + input_style: "" + } + Radio { + value: "windows", + label: "Windows", + input_style: "" + } + Radio { + value: "linux", + label: "Linux", + input_style: "" + } + } + } + + // Disabled Radio Buttons + div { + class: "flex flex-col items-center bg-gray-200 p-4 rounded-lg shadow-md", + h2 { class: "text-xl font-bold mb-2", "Disabled Radio Buttons" } + pre { + class: "font-mono text-xs text-white p-4 bg-gray-800 mb-8 rounded-md w-full overflow-x-auto", + r##"Group {{ + selected: browser_selected.clone(), + onchange: |value| browser_selected.set(value), + Radio {{ value: "mac", label: "Mac", input_style: "", disabled: true }} + Radio {{ value: "windows", label: "Windows", input_style: "", disabled: true }} + Radio {{ value: "linux", label: "Linux", input_style: "", disabled: true }} +}}"## + } + Group { + selected: browser_selected.clone(), + onchange: onchange(browser_selected.clone()), + Radio { + value: "mac", + label: "Mac", + input_style: "", + disabled: true + } + Radio { + value: "windows", + label: "Windows", + input_style: "", + disabled: true + } + Radio { + value: "linux", + label: "Linux", + input_style: "", + disabled: true + } + } + } + + // Horizontal Radio Buttons With Images + div { + class: "flex flex-col items-center bg-gray-200 p-4 rounded-lg shadow-md", + h2 { class: "text-xl font-bold mb-2", "Horizontal Radio Buttons With Images" } + pre { + class: "font-mono text-xs text-white p-4 bg-gray-800 mb-8 rounded-md w-full overflow-x-auto", + r##"Group {{ + selected: os_selected.clone(), + onchange: |value| os_selected.set(value), + orientation: Orientation::Horizontal, + Radio {{ + value: "mac", + label: "Mac", + src: "assets/apple.png", + class: "p-4 border-gray-400 border items-center rounded-lg cursor-pointer hover:shadow-md", + selected_class: "border-blue-500 bg-blue-100 text-blue-800", + image_class: "w-16", + }} + Radio {{ + value: "windows", + label: "Windows", + src: "assets/windows.png", + class: "p-4 border-gray-400 border items-center rounded-lg cursor-pointer hover:shadow-md", + selected_class: "border-blue-500 bg-blue-100 text-blue-800", + image_class: "w-16", + }} + Radio {{ + value: "linux", + label: "Linux", + src: "assets/linux.png", + class: "p-4 border-gray-400 border items-center rounded-lg cursor-pointer hover:shadow-md", + selected_class: "border-blue-500 bg-blue-100 text-blue-800", + image_class: "w-16", + }} +}}"## + } + Group { + selected: os_selected.clone(), + onchange: onchange(os_selected.clone()), + orientation: Orientation::Horizontal, + Radio { + value: "mac", + label: "Mac", + src: "assets/apple.png", + class: "p-4 border-gray-400 border items-center rounded-lg cursor-pointer hover:shadow-md", + selected_class: "border-blue-500 bg-blue-100 text-blue-800", + image_class: "w-16", + onclick: Callback::new(|value: String| tracing::info!("{} button has been selected", value)) + } + Radio { + value: "windows", + label: "Windows", + src: "assets/windows.png", + class: "p-4 border-gray-400 border items-center rounded-lg cursor-pointer hover:shadow-md", + selected_class: "border-blue-500 bg-blue-100 text-blue-800", + image_class: "w-16", + onclick: Callback::new(|value: String| tracing::info!("{} button has been selected", value)) + } + Radio { + value: "linux", + label: "Linux", + src: "assets/linux.png", + class: "p-4 border-gray-400 border items-center rounded-lg cursor-pointer hover:shadow-md", + selected_class: "border-blue-500 bg-blue-100 text-blue-800", + image_class: "w-16", + onclick: Callback::new(|value: String| tracing::info!("{} button has been selected", value)) + } + } + } + } + } + } +} diff --git a/examples/yew/Cargo.lock b/examples/yew/Cargo.lock index 97eeb19..067edab 100644 --- a/examples/yew/Cargo.lock +++ b/examples/yew/Cargo.lock @@ -3,7 +3,7 @@ version = 3 [[package]] -name = "accordion-rs-yew-example" +name = "radio-rs-yew-example" version = "0.1.0" dependencies = [ "console_error_panic_hook", diff --git a/examples/yew/Cargo.toml b/examples/yew/Cargo.toml index 2136dfb..289fd60 100644 --- a/examples/yew/Cargo.toml +++ b/examples/yew/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "accordion-rs-yew-example" +name = "radio-rs-yew-example" version = "0.1.0" authors = ["Mahmoud Harmouch "] edition = "2021" diff --git a/src/common.rs b/src/common.rs index fb95742..64308f9 100644 --- a/src/common.rs +++ b/src/common.rs @@ -1,3 +1,5 @@ +#![allow(unused)] + const FLEX_HORIZONTAL: &str = "display: flex; flex-direction: row; gap: 16px;"; const FLEX_VERTICAL: &str = "display: flex; flex-direction: column; gap: 16px;"; pub(crate) const HIDDEN_INPUT_STYLE: &str = "position: absolute; opacity: 0; pointer-events: none;"; diff --git a/src/dioxus.rs b/src/dioxus.rs new file mode 100644 index 0000000..50e99f6 --- /dev/null +++ b/src/dioxus.rs @@ -0,0 +1,596 @@ +use crate::common::{Orientation, Size, Type, HIDDEN_INPUT_STYLE}; +use dioxus::prelude::*; +use dioxus_core::AttributeValue; + +/// Properties for configuring the `Group` component. +/// +/// The `Group` component allows you to create a group of radio buttons with customizable +/// styles, orientation, and behavior. This is useful for creating user-selectable options +/// presented as a single group. +/// +/// It supports horizontal or vertical layouts, CSS customizations, and child components of type `Radio` only (TODO). +#[derive(Props, PartialEq, Clone)] +pub struct GroupProps { + /// The selected value of the radio group. + /// + /// This represents the current value selected in the group. It can be bound to a state + /// to reflect changes dynamically. Defaults to an empty string if not provided. + #[props(default)] + pub selected: String, + + /// Callback for when the selected value changes. + /// + /// This callback is triggered whenever the user selects a different radio button. It + /// provides the new selected value as a string. Defaults to a no-op. + #[props(default)] + pub onchange: Callback, + + /// Orientation of the radio buttons group (horizontal or vertical). + /// + /// Determines the layout of the radio buttons. The available options are: + /// - `Orientation::Horizontal`: Displays the radio buttons side by side. + /// - `Orientation::Vertical`: Stacks the radio buttons vertically. + /// Defaults to `Orientation::Horizontal`. + #[props(default)] + pub orientation: Orientation, + + /// Additional inline styles for the container. + /// + /// Allows for custom inline styles to be applied directly to the group container. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub style: &'static str, + + /// Additional CSS classes for the container. + /// + /// Enables adding custom CSS classes to the group container for further styling or + /// overriding default styles. Defaults to an empty string if not provided. + #[props(default = "")] + pub class: &'static str, + + /// Child components for the group. + /// + /// This property allows you to pass one or more `Radio` components as children of the + /// `Group` component. The children will be arranged based on the specified `orientation`. + /// Defaults to an empty list of children if not provided. + /// + /// TODO: Restrict children to `Radio` type and not any Element. + pub children: Element, +} + +// TODO: Fix this 9000 IQ HACK +fn process_attrs( + mut attrs: Box<[Box<[Attribute]>]>, + selected: &str, + onchange: Callback, +) -> Box<[Box<[Attribute]>]> { + for attribute in &mut attrs { + let attr = &mut (*attribute)[0]; + + if attr.name == "value" { + let is_selected = match &attr.value { + AttributeValue::Text(value) => value == selected, + _ => false, + }; + + if is_selected { + attr.value = AttributeValue::Bool(true); + } else { + attr.value = AttributeValue::Bool(false); + } + } + + if attr.name == "on_click" { + let onclick = { + let value = match &attr.value { + AttributeValue::Text(val) => val.clone(), + _ => String::new(), + }; + Callback::new(move |_| { + onchange.call(value.clone()); + }) + }; + attr.value = AttributeValue::Listener(onclick); + } + } + attrs +} + +/// Group Component +/// +/// A Dioxus component for creating a group of radio buttons with customizable styles, +/// orientation, and behavior. The `Group` component arranges child `Radio` components +/// horizontally or vertically and handles the selection state. +/// +/// # Properties +/// The `Group` component uses the `GroupProps` struct for its properties. Key properties include: +/// +/// - **selected**: The currently selected value of the group (`String`). +/// Represents the value of the selected radio button. +/// - **onchange**: Callback function that is triggered when the selected value changes (`Callback`). +/// - **orientation**: Defines the layout direction of the group. Can be horizontal or vertical +/// (`Orientation`). Default: `Orientation::Horizontal`. +/// - **style**: Custom inline styles applied to the group container (`String`). Default: `""`. +/// - **class**: CSS class names for the group container (`String`). Default: `""`. +/// - **children**: A collection of `Radio` components to be rendered inside the `Group`. Each child should be a `Radio` component. +/// +/// # Features +/// - Automatically manages the state of the selected radio button. +/// - Triggers the provided `onchange` callback with the updated value when the selection changes. +/// - Supports horizontal or vertical orientation through the `Orientation` enum. +/// - Highly customizable with inline styles and additional CSS classes. +/// - Ensures only valid `Radio` components are accepted as children. +/// +/// # Examples +/// +/// ## Basic Usage +/// This example demonstrates how to create a simple horizontal radio group: +/// +/// ```rust +/// use dioxus::prelude::*; +/// use radiors::dioxus::{Group, Radio}; +/// +/// #[component] +/// fn App() -> Element { +/// let mut selected = use_signal(|| "Option1".to_string()); +/// let onchange = { +/// move |new_value: String| selected.set(new_value) +/// }; +/// +/// rsx! { +/// Group { +/// selected: selected(), +/// onchange: onchange, +/// Radio { value: "Option1", label: "Option 1" } +/// Radio { value: "Option2", label: "Option 2" } +/// Radio { value: "Option3", label: "Option 3" } +/// } +/// } +/// } +/// ``` +/// +/// ## Horizontal Orientation +/// Use the `orientation` property to arrange the group horizontally: +/// +/// ```rust +/// use dioxus::prelude::*; +/// use radiors::dioxus::{Group, Radio}; +/// use radiors::Orientation; +/// +/// #[component] +/// fn App() -> Element { +/// let mut selected = use_signal(|| "Option1".to_string()); +/// let onchange = { +/// move |new_value: String| selected.set(new_value) +/// }; +/// +/// rsx! { +/// Group { +/// selected: selected(), +/// onchange: onchange, +/// orientation: Orientation::Horizontal, +/// style: "margin: 20px;", +/// Radio { value: "Option1", label: "Option 1" } +/// Radio { value: "Option2", label: "Option 2" } +/// Radio { value: "Option3", label: "Option 3" } +/// } +/// } +/// } +/// ``` +/// +/// ## Custom Styling +/// Customize the appearance of the group container using `style` and `class`: +/// +/// ```rust +/// use dioxus::prelude::*; +/// use radiors::dioxus::{Group, Radio}; +/// +/// #[component] +/// fn App() -> Element { +/// rsx! { +/// Group { +/// selected: "Option1", +/// style: "border: 1px solid black; padding: 10px;", +/// class: "custom-radio-group", +/// Radio { value: "Option1", label: "Option 1" } +/// Radio { value: "Option2", label: "Option 2" } +/// } +/// } +/// } +/// ``` +/// +/// # Behavior +/// - Clicking a `Radio` component updates the `selected` value in the `Group`. +/// - The `onchange` callback is triggered with the `value` of the selected `Radio` as a `String`. +/// - When `orientation` is set to `Orientation::Vertical`, the child components are stacked vertically. +/// - Inline styles and CSS classes allow fine-grained control of the component's appearance. +/// +/// # Notes +/// - TODO: The `children` property must contain only `Radio` components; other elements will cause runtime errors. +/// - The `selected` property must match one of the `value` attributes in the `Radio` components for proper behavior. +#[component] +pub fn Group(props: GroupProps) -> Element { + rsx! { + div { + class: "{props.class}", + style: "{props.orientation.to_style()} {props.style}", + for child in props.children.iter() { + { + VNode::new( + child.key.clone(), + child.template, + child.dynamic_nodes.clone(), + process_attrs( + child.dynamic_attrs.clone(), + &props.selected, + props.onchange + ) + ) + } + } + } + } +} + +/// Properties for configuring the `Radio` component. +/// +/// The `Radio` component allows the creation of individual, customizable radio buttons. +/// It supports various configurations for appearance, behavior, and styles. +#[derive(Props, PartialEq, Clone)] +pub struct RadioProps { + /// The label for the radio button. + /// + /// Defines the text displayed next to the radio button. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub label: &'static str, + + /// The value for the radio button. + /// + /// This value represents the data associated with the radio button, used to identify + /// it in the `Group`'s selection context. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub value: &'static str, + + /// Optional image URL for the radio button. + /// + /// If provided, the radio button can display an image along with its label. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub src: &'static str, + + /// Inline styles for the container. + /// + /// Allows applying custom inline CSS styles directly to the radio button's container. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub style: &'static str, + + /// CSS class for the container. + /// + /// Adds custom CSS classes to style the radio button's container. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub class: &'static str, + + /// Inline styles for the label. + /// + /// Enables the addition of custom inline CSS styles to the label text. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub label_style: &'static str, + + /// CSS class for the label. + /// + /// Adds custom CSS classes to style the radio button's label. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub label_class: &'static str, + + /// Inline styles for the image. + /// + /// Allows applying custom inline CSS styles to the image associated with the radio button. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub image_style: &'static str, + + /// CSS class for the image. + /// + /// Adds custom CSS classes to style the image associated with the radio button. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub image_class: &'static str, + + /// The size of the radio button. + /// + /// Specifies the size of the radio button. Possible values are: + /// - `Size::XSmall` + /// - `Size::Small` + /// - `Size::Medium` + /// - etc + /// Defaults to `Size::XSmall` if not provided. + #[props(default)] + pub size: Size, + + /// The styling type of the radio button. + /// + /// Determines the visual theme of the radio button, such as Primary or Secondary styles. + /// Defaults to `Type::None` if not provided. + #[props(default)] + pub r#type: Type, + + /// Whether this radio button is selected. + /// + /// Indicates if the radio button is currently selected. Managed internally in the `Group` + /// component context. Defaults to `false`. + #[props(default = false)] + pub selected: bool, + + /// Whether this radio button is disabled. + /// + /// If `true`, the radio button is not clickable and appears disabled. + /// Defaults to `false`. + #[props(default = false)] + pub disabled: bool, + + /// Inline styles applied when the radio button is selected. + /// + /// Provides custom styles for the radio button in the selected state. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub selected_style: &'static str, + + /// CSS class applied when the radio button is selected. + /// + /// Adds custom CSS classes to style the radio button in the selected state. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub selected_class: &'static str, + + /// Inline styles applied when the radio button is disabled. + /// + /// Provides custom styles for the radio button in the disabled state. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub disabled_style: &'static str, + + /// CSS class applied when the radio button is disabled. + /// + /// Adds custom CSS classes to style the radio button in the disabled state. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub disabled_class: &'static str, + + /// Inline styles for animations applied to the radio button. + /// + /// Enables applying custom styles to animations or transitions for the radio button. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub animation_style: &'static str, + + /// CSS class for animations applied to the radio button. + /// + /// Adds custom CSS classes to handle animations or transitions for the radio button. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub animation_class: &'static str, + + /// Inline styles for the hidden input element. + /// + /// Provides custom styles for the hidden `` element used for the radio button. + /// Defaults to `HIDDEN_INPUT_STYLE`. + #[props(default = HIDDEN_INPUT_STYLE)] + pub input_style: &'static str, + + /// CSS class for the hidden input element. + /// + /// Adds custom CSS classes for the hidden `` element. + /// Defaults to an empty string if not provided. + #[props(default = "")] + pub input_class: &'static str, + + /// Callback for when the radio button is clicked. + /// + /// Triggered whenever the user clicks on the radio button. It provides the `value` of the + /// radio button as a string to the callback. + /// Defaults to a no-op. + #[props(default)] + pub onclick: Callback, + + /// Internal callback triggered when the radio button is clicked. + /// + /// This property is intended for use by the parent `Group` component to manage + /// the state of the radio group. It is not exposed for direct use by end users. + /// + /// The callback receives the `value` of the clicked radio button as a `String`. + #[props(default)] + pub on_click: Callback, +} + +/// Radio Component +/// +/// A Dioxus component for individual, customizable radio buttons. The `Radio` component is designed +/// to work seamlessly with the `Group` component, providing an interactive and customizable +/// selection experience. +/// +/// # Properties +/// The `Radio` component uses the `RadioProps` struct for its properties. Key properties include: +/// +/// - **label**: The text displayed next to the radio button (`String`). Default: `""`. +/// - **value**: The value associated with the radio button (`String`). Default: `""`. +/// - **selected**: Indicates if the radio button is selected (`bool`). Default: `false`. +/// - **disabled**: Whether the radio button is disabled (`bool`). Default: `false`. +/// - **on_click**: A callback triggered when the radio button is clicked (`Callback`). Default: no-op. +/// - **onclick**: A secondary callback triggered when the radio button is clicked (`Callback`). Default: no-op. +/// - **src**: URL of an optional image displayed alongside the radio button (`String`). Default: `""`. +/// - **style**: Custom inline styles for the container (`String`). Default: `""`. +/// - **class**: CSS class for the container (`String`). Default: `""`. +/// - **input_style**: Inline styles for the `` element (`String`). Default: `""`. +/// - **input_class**: CSS class for the `` element (`String`). Default: `""`. +/// - **selected_style**: Custom styles applied when the radio button is selected (`String`). Default: `""`. +/// - **selected_class**: CSS class applied when the radio button is selected (`String`). Default: `""`. +/// - **disabled_style**: Custom styles applied when the radio button is disabled (`String`). Default: `""`. +/// - **disabled_class**: CSS class applied when the radio button is disabled (`String`). Default: `""`. +/// - **animation_style**: Inline styles for animations (`String`). Default: `""`. +/// - **image_style**: Inline styles for the optional image (`String`). Default: `""`. +/// - **image_class**: CSS class for the optional image (`String`). Default: `""`. +/// - **label_style**: Inline styles for the label text (`String`). Default: `""`. +/// - **label_class**: CSS class for the label text (`String`). Default: `""`. +/// - **size**: Determines the size of the radio button. Uses the `Size` enum (`Size::Small`, `Size::Medium`, `Size::Large`). Default: `Size::XSmall`. +/// - **r#type**: Determines the type/style of the radio button. Uses the `Type` enum (e.g., `Type::Primary`, `Type::Secondary`). Default: `Type::None`. +/// +/// # Features +/// - Provides extensive customization for styles and classes. +/// - Optional image display alongside the label. +/// - Supports selected and disabled states. +/// - Works with callbacks for handling user interactions. +/// - Designed to integrate into the `Group` component for managing grouped radio buttons. +/// +/// # Examples +/// +/// ## Basic Radio Button +/// ```rust +/// use dioxus::prelude::*; +/// use radiors::dioxus::Radio; +/// +/// #[component] +/// fn App() -> Element { +/// rsx! { +/// Radio { +/// label: "Option 1", +/// value: "Option1", +/// } +/// } +/// } +/// ``` +/// +/// ## Radio Button with an Image +/// ```rust +/// use dioxus::prelude::*; +/// use radiors::dioxus::Radio; +/// +/// #[component] +/// fn App() -> Element { +/// rsx! { +/// Radio { +/// label: "Option 1", +/// value: "Option1", +/// src: "assets/radio.png", +/// image_style: "width: 20px; height: 20px;", +/// } +/// } +/// } +/// ``` +/// +/// ## Custom Styling +/// ```rust +/// use dioxus::prelude::*; +/// use radiors::dioxus::Radio; +/// +/// #[component] +/// fn App() -> Element { +/// rsx! { +/// Radio { +/// label: "Custom Radio", +/// value: "Custom", +/// style: "padding: 10px; border: 2px solid blue;", +/// class: "custom-radio-class", +/// } +/// } +/// } +/// ``` +/// +/// ## Disabled Radio Button +/// ```rust +/// use dioxus::prelude::*; +/// use radiors::dioxus::Radio; +/// +/// #[component] +/// fn App() -> Element { +/// rsx! { +/// Radio { +/// label: "Disabled Radio", +/// value: "Disabled", +/// disabled: true, +/// } +/// } +/// } +/// ``` +/// +/// # Behavior +/// - The `onclick` callback is triggered when the radio button is clicked, passing its `value`. +/// - If the `disabled` property is set to `true`, the button will not respond to clicks or emit callbacks. +/// - When selected, the radio button applies the `selected_style` and `selected_class`. +/// - Similarly, when disabled, the button applies the `disabled_style` and `disabled_class`. +/// +/// # Notes +/// - The `selected` and `on_click` properties are typically controlled by the parent `Group` component. +/// - If an image is provided via the `src` property, it will be rendered next to the label with optional custom styles and classes. +/// - The component uses the `Size` and `Type` enums for additional flexibility in appearance and behavior. +/// +/// TODO: Add animations +#[component] +pub fn Radio(props: RadioProps) -> Element { + let onclick = { + let value = props.value.to_string(); + move |e: MouseEvent| { + e.stop_propagation(); + if !props.disabled { + props.on_click.call(value.clone()); + props.onclick.call(value.clone()); + } + } + }; + + let selected_style = if props.selected { + props.selected_style + } else { + "" + }; + let disabled_style = if props.disabled { + props.disabled_style + } else { + "" + }; + let selected_class = if props.selected { + props.selected_class + } else { + "" + }; + let disabled_class = if props.disabled { + props.disabled_class + } else { + "" + }; + + rsx! { + div { + class: "{selected_class} {disabled_class} {props.class}", + style: "{selected_style} {disabled_style} {props.style} {props.animation_style} {props.r#type.to_style()} {props.size.to_style()}", + onclick: onclick, + input { + r#type: "radio", + name: "radio", + value: "{props.value}", + checked: "{props.selected}", + disabled: "{props.disabled}", + style: "{props.input_style}", + class: "{props.input_class}", + }, + if !props.src.is_empty() { + img { + src: "{props.src}", + alt: "{props.label}", + style: "{props.image_style}", + class: "{props.image_class}", + } + }, + span { + style: "{props.label_style}", + class: "{props.label_class}", + "{props.label}" + } + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 2c7e7cb..9770a04 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,4 +10,7 @@ pub mod common; #[cfg(feature = "yew")] pub mod yew; +#[cfg(feature = "dio")] +pub mod dioxus; + pub use common::{Orientation, Size, Type}; diff --git a/src/yew.rs b/src/yew.rs index 0d82de0..a37b16b 100644 --- a/src/yew.rs +++ b/src/yew.rs @@ -30,7 +30,7 @@ pub struct GroupProps { /// Determines the layout of the radio buttons. The available options are: /// - `Orientation::Horizontal`: Displays the radio buttons side by side. /// - `Orientation::Vertical`: Stacks the radio buttons vertically. - /// Defaults to `Orientation::Horizontal`. + /// Defaults to `Orientation::Horizontal`. #[prop_or_default] pub orientation: Orientation, @@ -271,7 +271,7 @@ pub struct RadioProps { /// - `Size::Small` /// - `Size::Medium` /// - etc - /// Defaults to `Size::XSmall` if not provided. + /// Defaults to `Size::XSmall` if not provided. #[prop_or_default] pub size: Size, @@ -456,7 +456,7 @@ pub fn radio(props: &RadioProps) -> Html { let on_click = props.on_click.clone(); let onclick = props.onclick.clone(); let value = props.value.to_string(); - let disabled = props.disabled.clone(); + let disabled = props.disabled; Callback::from(move |e: MouseEvent| { e.prevent_default(); if !disabled {