From a8750d4a947b0b853e7f866c582a965796e8da30 Mon Sep 17 00:00:00 2001 From: wiseaidev Date: Fri, 2 May 2025 21:31:24 +0300 Subject: [PATCH] feat: revamp && init add WASM frameworks support --- .bumpversion.toml | 6 + .github/workflows/rust.yml | 15 +- Cargo.lock | 4902 +++++++++++++++++ Cargo.toml | 46 +- LICENSE | 2 +- README.md | 304 +- YEW.md | 195 + assets/favicon.png | Bin 0 -> 61094 bytes assets/logo.webp | Bin 0 -> 11780 bytes examples/tailwind/.gitignore | 1 - examples/tailwind/Cargo.toml | 18 - examples/tailwind/LICENSE | 201 - examples/tailwind/README.md | 32 - examples/tailwind/Trunk.toml | 4 - examples/tailwind/images/logo.png | Bin 32546 -> 0 bytes examples/tailwind/index.html | 11 - examples/tailwind/src/main.rs | 7 - examples/tailwind/src/pages/landing.rs | 691 --- examples/x-sidebar-clone/.gitignore | 1 - examples/x-sidebar-clone/Cargo.lock | 1215 ---- examples/x-sidebar-clone/Cargo.toml | 18 - examples/x-sidebar-clone/LICENSE | 201 - examples/x-sidebar-clone/README.md | 32 - examples/x-sidebar-clone/Trunk.toml | 4 - examples/x-sidebar-clone/_redirects | 1 - examples/x-sidebar-clone/css/tailwind.css | 15 - examples/x-sidebar-clone/images/logo.png | Bin 108232 -> 0 bytes examples/x-sidebar-clone/images/pic.png | Bin 15104 -> 0 bytes examples/x-sidebar-clone/index.html | 11 - examples/x-sidebar-clone/postcss.config.js | 6 - examples/x-sidebar-clone/src/app.rs | 13 - examples/x-sidebar-clone/src/main.rs | 7 - examples/x-sidebar-clone/src/pages/landing.rs | 394 -- examples/x-sidebar-clone/src/pages/mod.rs | 1 - examples/x-sidebar-clone/src/router.rs | 16 - examples/x-sidebar-clone/tailwind.config.js | 42 - examples/yew/.gitignore | 2 + examples/{tailwind => yew}/Cargo.lock | 108 +- .../{youtube-sidebar-clone => yew}/Cargo.toml | 7 +- examples/yew/LICENSE | 201 + examples/yew/README.md | 84 + examples/yew/Trunk.toml | 4 + examples/{tailwind => yew}/_redirects | 0 examples/yew/assets/logo.webp | Bin 0 -> 18698 bytes examples/{tailwind => yew}/css/tailwind.css | 0 examples/yew/index.html | 12 + examples/{tailwind => yew}/postcss.config.js | 0 examples/{tailwind => yew}/src/app.rs | 0 examples/yew/src/main.rs | 9 + .../src/pages/mod.rs => yew/src/pages.rs} | 0 examples/yew/src/pages/landing.rs | 682 +++ examples/{tailwind => yew}/src/router.rs | 0 examples/{tailwind => yew}/tailwind.config.js | 0 examples/youtube-sidebar-clone/.gitignore | 1 - examples/youtube-sidebar-clone/Cargo.lock | 1225 ---- examples/youtube-sidebar-clone/LICENSE | 201 - examples/youtube-sidebar-clone/README.md | 32 - examples/youtube-sidebar-clone/Trunk.toml | 4 - examples/youtube-sidebar-clone/_redirects | 1 - .../youtube-sidebar-clone/css/tailwind.css | 15 - .../youtube-sidebar-clone/images/logo.png | Bin 13763 -> 0 bytes examples/youtube-sidebar-clone/index.html | 11 - .../youtube-sidebar-clone/postcss.config.js | 6 - examples/youtube-sidebar-clone/src/app.rs | 13 - examples/youtube-sidebar-clone/src/main.rs | 7 - .../src/pages/landing.rs | 407 -- .../youtube-sidebar-clone/src/pages/mod.rs | 1 - examples/youtube-sidebar-clone/src/router.rs | 16 - .../youtube-sidebar-clone/tailwind.config.js | 42 - src/dioxus.rs | 1 + src/leptos.rs | 1 + src/lib.rs | 450 +- src/yew.rs | 9 + src/yew/context.rs | 15 + src/yew/item.rs | 138 + src/yew/logo.rs | 27 + src/yew/menu.rs | 33 + src/yew/profile.rs | 44 + src/yew/sidebar.rs | 93 + src/yew/submenu.rs | 54 + 80 files changed, 6691 insertions(+), 5677 deletions(-) create mode 100755 .bumpversion.toml create mode 100644 Cargo.lock create mode 100644 YEW.md create mode 100644 assets/favicon.png create mode 100644 assets/logo.webp delete mode 100644 examples/tailwind/.gitignore delete mode 100644 examples/tailwind/Cargo.toml delete mode 100644 examples/tailwind/LICENSE delete mode 100644 examples/tailwind/README.md delete mode 100644 examples/tailwind/Trunk.toml delete mode 100644 examples/tailwind/images/logo.png delete mode 100644 examples/tailwind/index.html delete mode 100644 examples/tailwind/src/main.rs delete mode 100644 examples/tailwind/src/pages/landing.rs delete mode 100644 examples/x-sidebar-clone/.gitignore delete mode 100644 examples/x-sidebar-clone/Cargo.lock delete mode 100644 examples/x-sidebar-clone/Cargo.toml delete mode 100644 examples/x-sidebar-clone/LICENSE delete mode 100644 examples/x-sidebar-clone/README.md delete mode 100644 examples/x-sidebar-clone/Trunk.toml delete mode 100644 examples/x-sidebar-clone/_redirects delete mode 100644 examples/x-sidebar-clone/css/tailwind.css delete mode 100644 examples/x-sidebar-clone/images/logo.png delete mode 100644 examples/x-sidebar-clone/images/pic.png delete mode 100644 examples/x-sidebar-clone/index.html delete mode 100644 examples/x-sidebar-clone/postcss.config.js delete mode 100644 examples/x-sidebar-clone/src/app.rs delete mode 100644 examples/x-sidebar-clone/src/main.rs delete mode 100644 examples/x-sidebar-clone/src/pages/landing.rs delete mode 100644 examples/x-sidebar-clone/src/pages/mod.rs delete mode 100644 examples/x-sidebar-clone/src/router.rs delete mode 100644 examples/x-sidebar-clone/tailwind.config.js create mode 100644 examples/yew/.gitignore rename examples/{tailwind => yew}/Cargo.lock (95%) rename examples/{youtube-sidebar-clone => yew}/Cargo.toml (73%) create mode 100644 examples/yew/LICENSE create mode 100644 examples/yew/README.md create mode 100644 examples/yew/Trunk.toml rename examples/{tailwind => yew}/_redirects (100%) create mode 100644 examples/yew/assets/logo.webp rename examples/{tailwind => yew}/css/tailwind.css (100%) create mode 100644 examples/yew/index.html rename examples/{tailwind => yew}/postcss.config.js (100%) rename examples/{tailwind => yew}/src/app.rs (100%) create mode 100644 examples/yew/src/main.rs rename examples/{tailwind/src/pages/mod.rs => yew/src/pages.rs} (100%) create mode 100644 examples/yew/src/pages/landing.rs rename examples/{tailwind => yew}/src/router.rs (100%) rename examples/{tailwind => yew}/tailwind.config.js (100%) delete mode 100644 examples/youtube-sidebar-clone/.gitignore delete mode 100644 examples/youtube-sidebar-clone/Cargo.lock delete mode 100644 examples/youtube-sidebar-clone/LICENSE delete mode 100644 examples/youtube-sidebar-clone/README.md delete mode 100644 examples/youtube-sidebar-clone/Trunk.toml delete mode 100644 examples/youtube-sidebar-clone/_redirects delete mode 100644 examples/youtube-sidebar-clone/css/tailwind.css delete mode 100644 examples/youtube-sidebar-clone/images/logo.png delete mode 100644 examples/youtube-sidebar-clone/index.html delete mode 100644 examples/youtube-sidebar-clone/postcss.config.js delete mode 100644 examples/youtube-sidebar-clone/src/app.rs delete mode 100644 examples/youtube-sidebar-clone/src/main.rs delete mode 100644 examples/youtube-sidebar-clone/src/pages/landing.rs delete mode 100644 examples/youtube-sidebar-clone/src/pages/mod.rs delete mode 100644 examples/youtube-sidebar-clone/src/router.rs delete mode 100644 examples/youtube-sidebar-clone/tailwind.config.js create mode 100644 src/dioxus.rs create mode 100644 src/leptos.rs create mode 100644 src/yew.rs create mode 100644 src/yew/context.rs create mode 100644 src/yew/item.rs create mode 100644 src/yew/logo.rs create mode 100644 src/yew/menu.rs create mode 100644 src/yew/profile.rs create mode 100644 src/yew/sidebar.rs create mode 100644 src/yew/submenu.rs diff --git a/.bumpversion.toml b/.bumpversion.toml new file mode 100755 index 0000000..342c68f --- /dev/null +++ b/.bumpversion.toml @@ -0,0 +1,6 @@ +[bumpversion] +current_version = 0.0.0 + +[bumpversion:file:Cargo.toml] +search = version = "{current_version}" +replace = version = "{new_version}" diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 9241c49..ad8dfc8 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -2,21 +2,20 @@ name: CI on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] env: CARGO_TERM_COLOR: always jobs: build: - runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --lib --bins + - uses: actions/checkout@v3 + - name: Build + run: cargo build --verbose + - name: Run tests + run: cargo test --all-features diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..889424f --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4902 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + +[[package]] +name = "any_spawner" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41058deaa38c9d9dd933d6d238d825227cffa668e2839b52879f6619c63eee3b" +dependencies = [ + "futures", + "thiserror 2.0.9", + "wasm-bindgen-futures", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-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 = "attribute-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0053e96dd3bec5b4879c23a138d6ef26f2cb936c9cdc96274ac2b9ed44b5bb54" +dependencies = [ + "attribute-derive-macro", + "derive-where", + "manyhow", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "attribute-derive-macro" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463b53ad0fd5b460af4b1915fe045ff4d946d025fb6c4dc3337752eaa980f71b" +dependencies = [ + "collection_literals", + "interpolator", + "manyhow", + "proc-macro-utils", + "proc-macro2", + "quote", + "quote-use", + "syn 2.0.91", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" + +[[package]] +name = "bstr" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "bump2version" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ba520f2a8e80201cd0a6f77ef8519971a40620a3967034be701e2bb23c1304" +dependencies = [ + "anyhow", + "clap", + "gix", + "regex", + "smallvec", +] + +[[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 = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" + +[[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 = "clap" +version = "4.5.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +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 = "clru" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" + +[[package]] +name = "codee" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f18d705321923b1a9358e3fc3c57c3b50171196827fc7f5f10b053242aca627" +dependencies = [ + "serde", + "serde_json", + "thiserror 2.0.9", +] + +[[package]] +name = "collection_literals" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186dce98367766de751c42c4f03970fc60fc012296e706ccbb9d5df9b6c1e271" + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "config" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595aae20e65c3be792d05818e8c63025294ac3cb7e200f11459063a352a6ef80" +dependencies = [ + "convert_case 0.6.0", + "pathdiff", + "serde", + "toml", + "winnow 0.7.7", +] + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08259976d62c715c4826cb4a3d64a3a9e5c5f68f964ff6087319857f569f93a6" +dependencies = [ + "const-serialize-macro", + "serde", +] + +[[package]] +name = "const-serialize-macro" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04382d0d9df7434af6b1b49ea1a026ef39df1b0738b1cc373368cf175354f6eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.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 = "const_str_slice_concat" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f67855af358fcb20fac58f9d714c94e2b228fe5694c1c9b4ead4a366343eda1b" + +[[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 = "convert_case" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" +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 = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "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 = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "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 = "derive-where" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a247114500f1a78e87022defa8173de847accfada8e8809dfae23a118a580c" +dependencies = [ + "dioxus-cli-config", + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-devtools", + "dioxus-document", + "dioxus-fullstack", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-logger", + "dioxus-signals", + "dioxus-web", + "manganis", + "warnings", +] + +[[package]] +name = "dioxus-cli-config" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd16948f1ffdb068dd9a64812158073a4250e2af4e98ea31fdac0312e6bce86" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "dioxus-config-macro" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75cbf582fbb1c32d34a1042ea675469065574109c95154468710a4d73ee98b49" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "dioxus-core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c03f451a119e47433c16e2d8eb5b15bf7d6e6734eb1a4c47574e6711dadff8d" +dependencies = [ + "const_format", + "dioxus-core-types", + "futures-channel", + "futures-util", + "generational-box", + "longest-increasing-subsequence", + "rustc-hash 1.1.0", + "rustversion", + "serde", + "slab", + "slotmap", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-core-macro" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "105c954caaaedf8cd10f3d1ba576b01e18aa8d33ad435182125eefe488cf0064" +dependencies = [ + "convert_case 0.6.0", + "dioxus-rsx", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "dioxus-core-types" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91a82fccfa48574eb7aa183e297769540904694844598433a9eb55896ad9f93b" +dependencies = [ + "once_cell", +] + +[[package]] +name = "dioxus-devtools" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712a7300f1e8181218187b03502044157eef04e0a25b518117c5ef9ae1096880" +dependencies = [ + "dioxus-core", + "dioxus-devtools-types", + "dioxus-signals", + "serde", + "serde_json", + "tracing", + "tungstenite", + "warnings", +] + +[[package]] +name = "dioxus-devtools-types" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f62434973c0c9c5a3bc42e9cd5e7070401c2062a437fb5528f318c3e42ebf4ff" +dependencies = [ + "dioxus-core", + "serde", +] + +[[package]] +name = "dioxus-document" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "802a2014d1662b6615eec0a275745822ee4fc66aacd9d0f2fb33d6c8da79b8f2" +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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe99b48a1348eec385b5c4bd3e80fd863b0d3b47257d34e2ddc58754dec5d128" +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 0.6.15", + "tracing", +] + +[[package]] +name = "dioxus-history" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ae4e22616c698f35b60727313134955d885de2d32e83689258e586ebc9b7909" +dependencies = [ + "dioxus-core", + "tracing", +] + +[[package]] +name = "dioxus-hooks" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "948e2b3f20d9d4b2c300aaa60281b1755f3298684448920b27106da5841896d0" +dependencies = [ + "dioxus-core", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "rustversion", + "slab", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-html" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c9a40e6fee20ce7990095492dedb6a753eebe05e67d28271a249de74dc796d" +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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43ba87b53688a2c9f619ecdf4b3b955bc1f08bd0570a80a0d626c405f6d14a76" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "dioxus-interpreter-js" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330707b10ca75cb0eb05f9e5f8d80217cd0d7e62116a8277ae363c1a09b57a22" +dependencies = [ + "js-sys", + "lazy-js-bundle", + "rustc-hash 1.1.0", + "sledgehammer_bindgen", + "sledgehammer_utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus-lib" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5405b71aa9b8b0c3e0d22728f12f34217ca5277792bd315878cc6ecab7301b72" +dependencies = [ + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-document", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx", + "dioxus-signals", + "warnings", +] + +[[package]] +name = "dioxus-logger" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545961e752f6c8bf59c274951b3c8b18a106db6ad2f9e2035b29e1f2a3e899b1" +dependencies = [ + "console_error_panic_hook", + "dioxus-cli-config", + "tracing", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "dioxus-rsx" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb588e05800b5a7eb90b2f40fca5bbd7626e823fb5e1ba21e011de649b45aa1" +dependencies = [ + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "dioxus-signals" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10e032dbb3a2c0386ec8b8ee59bc20b5aeb67038147c855801237b45b13d72ac" +dependencies = [ + "dioxus-core", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "parking_lot", + "rustc-hash 1.1.0", + "tracing", + "warnings", +] + +[[package]] +name = "dioxus-web" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7c12475c3d360058b8afe1b68eb6dfc9cbb7dcd760aed37c5f85c561c83ed1" +dependencies = [ + "async-trait", + "ciborium", + "dioxus-cli-config", + "dioxus-core", + "dioxus-core-types", + "dioxus-devtools", + "dioxus-document", + "dioxus-history", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "js-sys", + "lazy-js-bundle", + "rustc-hash 1.1.0", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_json", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus_server_macro" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "371a5b21989a06b53c5092e977b3f75d0e60a65a4c15a2aa1d07014c3b2dda97" +dependencies = [ + "proc-macro2", + "quote", + "server_fn_macro 0.6.15", + "syn 2.0.91", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "drain_filter_polyfill" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "669a445ee724c5c69b1b06fe0b63e70a1c84bc9bb7d9696cd4f4e3ec45050408" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "either_of" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216d23e0ec69759a17f05e1c553f3a6870e5ec73420fbb07807a6f34d5d1d5a4" +dependencies = [ + "paste", + "pin-project-lite", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[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 2.0.91", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "faster-hex" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" +dependencies = [ + "serde", +] + +[[package]] +name = "faster-hex" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7223ae2d2f179b803433d9c830478527e92b8117eab39460edae7f1614d9fb73" +dependencies = [ + "heapless", + "serde", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] + +[[package]] +name = "flate2" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[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", + "num_cpus", +] + +[[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 2.0.91", +] + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a673cf4fb0ea6a91aa86c08695756dfe875277a912cdbf33db9a9f62d47ed82b" +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", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "gix" +version = "0.71.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a61e71ec6817fc3c9f12f812682cfe51ee6ea0d2e27e02fc3849c35524617435" +dependencies = [ + "gix-actor", + "gix-attributes", + "gix-command", + "gix-commitgraph", + "gix-config", + "gix-date", + "gix-diff", + "gix-dir", + "gix-discover", + "gix-features 0.41.1", + "gix-filter", + "gix-fs 0.14.0", + "gix-glob", + "gix-hash 0.17.0", + "gix-hashtable", + "gix-ignore", + "gix-index", + "gix-lock", + "gix-object", + "gix-odb", + "gix-pack", + "gix-path", + "gix-pathspec", + "gix-protocol", + "gix-ref", + "gix-refspec", + "gix-revision", + "gix-revwalk", + "gix-sec", + "gix-shallow", + "gix-status", + "gix-submodule", + "gix-tempfile", + "gix-trace", + "gix-traverse", + "gix-url", + "gix-utils 0.2.0", + "gix-validate 0.9.4", + "gix-worktree", + "gix-worktree-state", + "once_cell", + "smallvec", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-actor" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f438c87d4028aca4b82f82ba8d8ab1569823cfb3e5bc5fa8456a71678b2a20e7" +dependencies = [ + "bstr", + "gix-date", + "gix-utils 0.2.0", + "itoa", + "thiserror 2.0.9", + "winnow 0.7.7", +] + +[[package]] +name = "gix-attributes" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e25825e0430aa11096f8b65ced6780d4a96a133f81904edceebb5344c8dd7f" +dependencies = [ + "bstr", + "gix-glob", + "gix-path", + "gix-quote", + "gix-trace", + "kstring", + "smallvec", + "thiserror 2.0.9", + "unicode-bom", +] + +[[package]] +name = "gix-bitmap" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1db9765c69502650da68f0804e3dc2b5f8ccc6a2d104ca6c85bc40700d37540" +dependencies = [ + "thiserror 2.0.9", +] + +[[package]] +name = "gix-chunk" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b1f1d8764958699dc764e3f727cef280ff4d1bd92c107bbf8acd85b30c1bd6f" +dependencies = [ + "thiserror 2.0.9", +] + +[[package]] +name = "gix-command" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0378995847773a697f8e157fe2963ecf3462fe64be05b7b3da000b3b472def8" +dependencies = [ + "bstr", + "gix-path", + "gix-quote", + "gix-trace", + "shell-words", +] + +[[package]] +name = "gix-commitgraph" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043cbe49b7a7505150db975f3cb7c15833335ac1e26781f615454d9d640a28fe" +dependencies = [ + "bstr", + "gix-chunk", + "gix-hash 0.17.0", + "memmap2", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-config" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c6f830bf746604940261b49abf7f655d2c19cadc9f4142ae9379e3a316e8cfa" +dependencies = [ + "bstr", + "gix-config-value", + "gix-features 0.41.1", + "gix-glob", + "gix-path", + "gix-ref", + "gix-sec", + "memchr", + "once_cell", + "smallvec", + "thiserror 2.0.9", + "unicode-bom", + "winnow 0.7.7", +] + +[[package]] +name = "gix-config-value" +version = "0.14.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dc2c844c4cf141884678cabef736fd91dd73068b9146e6f004ba1a0457944b6" +dependencies = [ + "bitflags", + "bstr", + "gix-path", + "libc", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-date" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa30058ec7d3511fbc229e4f9e696a35abd07ec5b82e635eff864a2726217e4" +dependencies = [ + "bstr", + "itoa", + "jiff", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-diff" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c975dad2afc85e4e233f444d1efbe436c3cdcf3a07173984509c436d00a3f8" +dependencies = [ + "bstr", + "gix-attributes", + "gix-command", + "gix-filter", + "gix-fs 0.14.0", + "gix-hash 0.17.0", + "gix-index", + "gix-object", + "gix-path", + "gix-pathspec", + "gix-tempfile", + "gix-trace", + "gix-traverse", + "gix-worktree", + "imara-diff", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-dir" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5879497bd3815d8277ed864ec8975290a70de5b62bb92d2d666a4cefc5d4793b" +dependencies = [ + "bstr", + "gix-discover", + "gix-fs 0.14.0", + "gix-ignore", + "gix-index", + "gix-object", + "gix-path", + "gix-pathspec", + "gix-trace", + "gix-utils 0.2.0", + "gix-worktree", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-discover" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fb8a4349b854506a3915de18d3341e5f1daa6b489c8affc9ca0d69efe86781" +dependencies = [ + "bstr", + "dunce", + "gix-fs 0.14.0", + "gix-hash 0.17.0", + "gix-path", + "gix-ref", + "gix-sec", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-features" +version = "0.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016d6050219458d14520fe22bdfdeb9cb71631dec9bc2724767c983f60109634" +dependencies = [ + "crc32fast", + "flate2", + "gix-path", + "gix-trace", + "gix-utils 0.2.0", + "libc", + "once_cell", + "prodash", + "thiserror 2.0.9", + "walkdir", +] + +[[package]] +name = "gix-features" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f4399af6ec4fd9db84dd4cf9656c5c785ab492ab40a7c27ea92b4241923fed" +dependencies = [ + "gix-trace", + "gix-utils 0.3.0", + "libc", + "prodash", +] + +[[package]] +name = "gix-filter" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb2b2bbffdc5cc9b2b82fc82da1b98163c9b423ac2b45348baa83a947ac9ab89" +dependencies = [ + "bstr", + "encoding_rs", + "gix-attributes", + "gix-command", + "gix-hash 0.17.0", + "gix-object", + "gix-packetline-blocking", + "gix-path", + "gix-quote", + "gix-trace", + "gix-utils 0.2.0", + "smallvec", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-fs" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "951e886120dc5fa8cac053e5e5c89443f12368ca36811b2e43d1539081f9c111" +dependencies = [ + "bstr", + "fastrand", + "gix-features 0.41.1", + "gix-path", + "gix-utils 0.2.0", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-fs" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a0637149b4ef24d3ea55f81f77231401c8463fae6da27331c987957eb597c7" +dependencies = [ + "bstr", + "fastrand", + "gix-features 0.42.1", + "gix-path", + "gix-utils 0.3.0", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-glob" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20972499c03473e773a2099e5fd0c695b9b72465837797a51a43391a1635a030" +dependencies = [ + "bitflags", + "bstr", + "gix-features 0.41.1", + "gix-path", +] + +[[package]] +name = "gix-hash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "834e79722063958b03342edaa1e17595cd2939bb2b3306b3225d0815566dcb49" +dependencies = [ + "faster-hex 0.9.0", + "gix-features 0.41.1", + "sha1-checked", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-hash" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d4900562c662852a6b42e2ef03442eccebf24f047d8eab4f23bc12ef0d785d8" +dependencies = [ + "faster-hex 0.10.0", + "gix-features 0.42.1", + "sha1-checked", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-hashtable" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b5cb3c308b4144f2612ff64e32130e641279fcf1a84d8d40dad843b4f64904" +dependencies = [ + "gix-hash 0.18.0", + "hashbrown 0.14.5", + "parking_lot", +] + +[[package]] +name = "gix-ignore" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a27c8380f493a10d1457f756a3f81924d578fc08d6535e304dfcafbf0261d18" +dependencies = [ + "bstr", + "gix-glob", + "gix-path", + "gix-trace", + "unicode-bom", +] + +[[package]] +name = "gix-index" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "855bece2d4153453aa5d0a80d51deea1ce8cd6a3b4cf213da85ac344ccb908a7" +dependencies = [ + "bitflags", + "bstr", + "filetime", + "fnv", + "gix-bitmap", + "gix-features 0.41.1", + "gix-fs 0.14.0", + "gix-hash 0.17.0", + "gix-lock", + "gix-object", + "gix-traverse", + "gix-utils 0.2.0", + "gix-validate 0.9.4", + "hashbrown 0.14.5", + "itoa", + "libc", + "memmap2", + "rustix 0.38.44", + "smallvec", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-lock" +version = "17.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "570f8b034659f256366dc90f1a24924902f20acccd6a15be96d44d1269e7a796" +dependencies = [ + "gix-tempfile", + "gix-utils 0.3.0", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-object" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4943fcdae6ffc135920c9ea71e0362ed539182924ab7a85dd9dac8d89b0dd69a" +dependencies = [ + "bstr", + "gix-actor", + "gix-date", + "gix-features 0.41.1", + "gix-hash 0.17.0", + "gix-hashtable", + "gix-path", + "gix-utils 0.2.0", + "gix-validate 0.9.4", + "itoa", + "smallvec", + "thiserror 2.0.9", + "winnow 0.7.7", +] + +[[package]] +name = "gix-odb" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50306d40dcc982eb6b7593103f066ea6289c7b094cb9db14f3cd2be0b9f5e610" +dependencies = [ + "arc-swap", + "gix-date", + "gix-features 0.41.1", + "gix-fs 0.14.0", + "gix-hash 0.17.0", + "gix-hashtable", + "gix-object", + "gix-pack", + "gix-path", + "gix-quote", + "parking_lot", + "tempfile", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-pack" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b65fffb09393c26624ca408d32cfe8776fb94cd0a5cdf984905e1d2f39779cb" +dependencies = [ + "clru", + "gix-chunk", + "gix-features 0.41.1", + "gix-hash 0.17.0", + "gix-hashtable", + "gix-object", + "gix-path", + "memmap2", + "smallvec", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-packetline" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "123844a70cf4d5352441dc06bab0da8aef61be94ec239cb631e0ba01dc6d3a04" +dependencies = [ + "bstr", + "faster-hex 0.9.0", + "gix-trace", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-packetline-blocking" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ecf3ea2e105c7e45587bac04099824301262a6c43357fad5205da36dbb233b3" +dependencies = [ + "bstr", + "faster-hex 0.9.0", + "gix-trace", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-path" +version = "0.10.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c091d2e887e02c3462f52252c5ea61150270c0f2657b642e8d0d6df56c16e642" +dependencies = [ + "bstr", + "gix-trace", + "gix-validate 0.10.0", + "home", + "once_cell", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-pathspec" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fef8422c3c9066d649074b24025125963f85232bfad32d6d16aea9453b82ec14" +dependencies = [ + "bitflags", + "bstr", + "gix-attributes", + "gix-config-value", + "gix-glob", + "gix-path", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-protocol" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5678ddae1d62880bc30e2200be1b9387af3372e0e88e21f81b4e7f8367355b5a" +dependencies = [ + "bstr", + "gix-date", + "gix-features 0.41.1", + "gix-hash 0.17.0", + "gix-ref", + "gix-shallow", + "gix-transport", + "gix-utils 0.2.0", + "maybe-async", + "thiserror 2.0.9", + "winnow 0.7.7", +] + +[[package]] +name = "gix-quote" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b005c550bf84de3b24aa5e540a23e6146a1c01c7d30470e35d75a12f827f969" +dependencies = [ + "bstr", + "gix-utils 0.2.0", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-ref" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e1f7eb6b7ce82d2d19961f74bd637bab3ea79b1bc7bfb23dbefc67b0415d8b" +dependencies = [ + "gix-actor", + "gix-features 0.41.1", + "gix-fs 0.14.0", + "gix-hash 0.17.0", + "gix-lock", + "gix-object", + "gix-path", + "gix-tempfile", + "gix-utils 0.2.0", + "gix-validate 0.9.4", + "memmap2", + "thiserror 2.0.9", + "winnow 0.7.7", +] + +[[package]] +name = "gix-refspec" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8587b21e2264a6e8938d940c5c99662779c13a10741a5737b15fc85c252ffc" +dependencies = [ + "bstr", + "gix-hash 0.17.0", + "gix-revision", + "gix-validate 0.9.4", + "smallvec", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-revision" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "342caa4e158df3020cadf62f656307c3948fe4eacfdf67171d7212811860c3e9" +dependencies = [ + "bitflags", + "bstr", + "gix-commitgraph", + "gix-date", + "gix-hash 0.17.0", + "gix-hashtable", + "gix-object", + "gix-revwalk", + "gix-trace", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-revwalk" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc7c3d7e5cdc1ab8d35130106e4af0a4f9f9eca0c81f4312b690780e92bde0d" +dependencies = [ + "gix-commitgraph", + "gix-date", + "gix-hash 0.17.0", + "gix-hashtable", + "gix-object", + "smallvec", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-sec" +version = "0.10.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47aeb0f13de9ef2f3033f5ff218de30f44db827ac9f1286f9ef050aacddd5888" +dependencies = [ + "bitflags", + "gix-path", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "gix-shallow" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc0598aacfe1d52575a21c9492fee086edbb21e228ec36c819c42ab923f434c3" +dependencies = [ + "bstr", + "gix-hash 0.17.0", + "gix-lock", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-status" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "605a6d0eb5891680c46e24b2ee7a63ef7bd39cb136dc7c7e55172960cf68b2f5" +dependencies = [ + "bstr", + "filetime", + "gix-diff", + "gix-dir", + "gix-features 0.41.1", + "gix-filter", + "gix-fs 0.14.0", + "gix-hash 0.17.0", + "gix-index", + "gix-object", + "gix-path", + "gix-pathspec", + "gix-worktree", + "portable-atomic", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-submodule" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c7390c2059505c365e9548016d4edc9f35749c6a9112b7b1214400bbc68da2" +dependencies = [ + "bstr", + "gix-config", + "gix-path", + "gix-pathspec", + "gix-refspec", + "gix-url", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-tempfile" +version = "17.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c750e8c008453a2dba67a2b0d928b7716e05da31173a3f5e351d5457ad4470aa" +dependencies = [ + "dashmap 6.1.0", + "gix-fs 0.15.0", + "libc", + "once_cell", + "parking_lot", + "tempfile", +] + +[[package]] +name = "gix-trace" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c396a2036920c69695f760a65e7f2677267ccf483f25046977d87e4cb2665f7" + +[[package]] +name = "gix-transport" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3f68c2870bfca8278389d2484a7f2215b67d0b0cc5277d3c72ad72acf41787e" +dependencies = [ + "bstr", + "gix-command", + "gix-features 0.41.1", + "gix-packetline", + "gix-quote", + "gix-sec", + "gix-url", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-traverse" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c0b049f8bdb61b20016694102f7b507f2e1727e83e9c5e6dad4f7d84ff7384" +dependencies = [ + "bitflags", + "gix-commitgraph", + "gix-date", + "gix-hash 0.17.0", + "gix-hashtable", + "gix-object", + "gix-revwalk", + "smallvec", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-url" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48dfe23f93f1ddb84977d80bb0dd7aa09d1bf5d5afc0c9b6820cccacc25ae860" +dependencies = [ + "bstr", + "gix-features 0.41.1", + "gix-path", + "percent-encoding", + "thiserror 2.0.9", + "url", +] + +[[package]] +name = "gix-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "189f8724cf903e7fd57cfe0b7bc209db255cacdcb22c781a022f52c3a774f8d0" +dependencies = [ + "bstr", + "fastrand", + "unicode-normalization", +] + +[[package]] +name = "gix-utils" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5351af2b172caf41a3728eb4455326d84e0d70fe26fc4de74ab0bd37df4191c5" +dependencies = [ + "fastrand", + "unicode-normalization", +] + +[[package]] +name = "gix-validate" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b5f1253109da6c79ed7cf6e1e38437080bb6d704c76af14c93e2f255234084" +dependencies = [ + "bstr", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-validate" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b9e00cacde5b51388d28ed746c493b18a6add1f19b5e01d686b3b9ece66d4d" +dependencies = [ + "bstr", + "thiserror 2.0.9", +] + +[[package]] +name = "gix-worktree" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7760dbc4b79aa274fed30adc0d41dca6b917641f26e7867c4071b1fb4dc727b" +dependencies = [ + "bstr", + "gix-attributes", + "gix-features 0.41.1", + "gix-fs 0.14.0", + "gix-glob", + "gix-hash 0.17.0", + "gix-ignore", + "gix-index", + "gix-object", + "gix-path", + "gix-validate 0.9.4", +] + +[[package]] +name = "gix-worktree-state" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490eb4d38ec2735b3466840aa3881b44ec1a4c180d6a658abfab03910380e18b" +dependencies = [ + "bstr", + "gix-features 0.41.1", + "gix-filter", + "gix-fs 0.14.0", + "gix-glob", + "gix-hash 0.17.0", + "gix-index", + "gix-object", + "gix-path", + "gix-worktree", + "io-close", + "thiserror 2.0.9", +] + +[[package]] +name = "gloo" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d" +dependencies = [ + "gloo-console 0.2.3", + "gloo-dialogs 0.1.1", + "gloo-events 0.1.2", + "gloo-file 0.2.3", + "gloo-history 0.1.5", + "gloo-net 0.3.1", + "gloo-render 0.1.1", + "gloo-storage 0.2.2", + "gloo-timers 0.2.6", + "gloo-utils 0.1.7", + "gloo-worker 0.2.1", +] + +[[package]] +name = "gloo" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd35526c28cc55c1db77aed6296de58677dbab863b118483a27845631d870249" +dependencies = [ + "gloo-console 0.3.0", + "gloo-dialogs 0.2.0", + "gloo-events 0.2.0", + "gloo-file 0.3.0", + "gloo-history 0.2.2", + "gloo-net 0.4.0", + "gloo-render 0.2.0", + "gloo-storage 0.3.0", + "gloo-timers 0.3.0", + "gloo-utils 0.2.0", + "gloo-worker 0.4.0", +] + +[[package]] +name = "gloo-console" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f" +dependencies = [ + "gloo-utils 0.1.7", + "js-sys", + "serde", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-console" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a17868f56b4a24f677b17c8cb69958385102fa879418052d60b50bc1727e261" +dependencies = [ + "gloo-utils 0.2.0", + "js-sys", + "serde", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-dialogs" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-dialogs" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4748e10122b01435750ff530095b1217cf6546173459448b83913ebe7815df" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-events" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-events" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27c26fb45f7c385ba980f5fa87ac677e363949e065a083722697ef1b2cc91e41" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-file" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7" +dependencies = [ + "gloo-events 0.1.2", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-file" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97563d71863fb2824b2e974e754a81d19c4a7ec47b09ced8a0e6656b6d54bd1f" +dependencies = [ + "gloo-events 0.2.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-history" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f" +dependencies = [ + "gloo-events 0.1.2", + "gloo-utils 0.1.7", + "serde", + "serde-wasm-bindgen 0.5.0", + "serde_urlencoded", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-history" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "903f432be5ba34427eac5e16048ef65604a82061fe93789f2212afc73d8617d6" +dependencies = [ + "getrandom 0.2.15", + "gloo-events 0.2.0", + "gloo-utils 0.2.0", + "serde", + "serde-wasm-bindgen 0.6.5", + "serde_urlencoded", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.1.7", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ac9e8288ae2c632fa9f8657ac70bfe38a1530f345282d7ba66a1f70b72b7dc4" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "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", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-render" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-render" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56008b6744713a8e8d98ac3dcb7d06543d5662358c9c805b4ce2167ad4649833" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-storage" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480" +dependencies = [ + "gloo-utils 0.1.7", + "js-sys", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-storage" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" +dependencies = [ + "gloo-utils 0.2.0", + "js-sys", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "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 = "gloo-worker" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a" +dependencies = [ + "anymap2", + "bincode", + "gloo-console 0.2.3", + "gloo-utils 0.1.7", + "js-sys", + "serde", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-worker" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76495d3dd87de51da268fa3a593da118ab43eb7f8809e17eb38d3319b424e400" +dependencies = [ + "bincode", + "futures", + "gloo-utils 0.2.0", + "gloo-worker-macros", + "js-sys", + "pinned", + "serde", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-worker-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956caa58d4857bc9941749d55e4bd3000032d8212762586fa5705632967140e7" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "guardian" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "493913a18c0d7bebb75127a26a432162c59edbe06f6cf712001e3e769345e8b5" + +[[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 = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", +] + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "html-escape" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" +dependencies = [ + "utf8-width", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "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 = "hydration_context" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d35485b3dcbf7e044b8f28c73f04f13e7b509c2466fd10cb2a8a447e38f8a93a" +dependencies = [ + "futures", + "once_cell", + "or_poisoned", + "pin-project-lite", + "serde", + "throw_error", +] + +[[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 = "imara-diff" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17d34b7d42178945f775e84bc4c36dde7c1c6cdfea656d3354d009056f2bb3d2" +dependencies = [ + "hashbrown 0.15.2", +] + +[[package]] +name = "implicit-clone" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a9aa791c7b5a71b636b7a68207fdebf171ddfc593d9c8506ec4cbc527b6a84" +dependencies = [ + "implicit-clone-derive", + "indexmap", +] + +[[package]] +name = "implicit-clone-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9311685eb9a34808bbb0608ad2fcab9ae216266beca5848613e95553ac914e3b" +dependencies = [ + "quote", + "syn 2.0.91", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "interpolator" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" + +[[package]] +name = "io-close" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cadcf447f06744f8ce713d2d6239bb5bde2c357a452397a9ed90c625da390bc" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3590fea8e9e22d449600c9bbd481a8163bef223e4ff938e5f55899f8cf1adb93" +dependencies = [ + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", + "windows-sys 0.59.0", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1283705eb0a21404d2bfd6eef2a7593d240bc42a0bdb39db0ad6fa2ec026524" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +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 = "kstring" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lazy-js-bundle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e49596223b9d9d4947a14a25c142a6e7d8ab3f27eb3ade269d238bb8b5c267e2" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "leptos" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b8731cb00f3f0894058155410b95c8955b17273181d2bc72600ab84edd24f1" +dependencies = [ + "any_spawner", + "cfg-if", + "either_of", + "futures", + "hydration_context", + "leptos_config", + "leptos_dom", + "leptos_hot_reload", + "leptos_macro", + "leptos_server", + "oco_ref", + "or_poisoned", + "paste", + "reactive_graph", + "rustc-hash 2.1.0", + "send_wrapper", + "serde", + "serde_qs 0.13.0", + "server_fn 0.7.8", + "slotmap", + "tachys", + "thiserror 2.0.9", + "throw_error", + "typed-builder", + "typed-builder-macro", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "leptos_config" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bae3e0ead5a7a814c8340eef7cb8b6cba364125bd8174b15dc9fe1b3cab7e03" +dependencies = [ + "config", + "regex", + "serde", + "thiserror 2.0.9", + "typed-builder", +] + +[[package]] +name = "leptos_dom" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89d4eb263bd5a9e7c49f780f17063f15aca56fd638c90b9dfd5f4739152e87d" +dependencies = [ + "js-sys", + "or_poisoned", + "reactive_graph", + "send_wrapper", + "tachys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "leptos_hot_reload" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e80219388501d99b246f43b6e7d08a28f327cdd34ba630a35654d917f3e1788e" +dependencies = [ + "anyhow", + "camino", + "indexmap", + "parking_lot", + "proc-macro2", + "quote", + "rstml", + "serde", + "syn 2.0.91", + "walkdir", +] + +[[package]] +name = "leptos_macro" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e621f8f5342b9bdc93bb263b839cee7405027a74560425a2dabea9de7952b1fd" +dependencies = [ + "attribute-derive", + "cfg-if", + "convert_case 0.7.1", + "html-escape", + "itertools", + "leptos_hot_reload", + "prettyplease", + "proc-macro-error2", + "proc-macro2", + "quote", + "rstml", + "server_fn_macro 0.7.8", + "syn 2.0.91", + "uuid", +] + +[[package]] +name = "leptos_server" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66985242812ec95e224fb48effe651ba02728beca92c461a9464c811a71aab11" +dependencies = [ + "any_spawner", + "base64", + "codee", + "futures", + "hydration_context", + "or_poisoned", + "reactive_graph", + "send_wrapper", + "serde", + "serde_json", + "server_fn 0.7.8", + "tachys", +] + +[[package]] +name = "libc" +version = "0.2.172" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags", + "libc", + "redox_syscall", +] + +[[package]] +name = "linear-map" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[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.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317af44b15e7605b85f04525449a3bb631753040156c9b318e6cba8a3ea4ef73" +dependencies = [ + "const-serialize", + "manganis-core", + "manganis-macro", +] + +[[package]] +name = "manganis-core" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c38bee65cc725b2bba23b5dbb290f57c8be8fadbe2043fb7e2ce73022ea06519" +dependencies = [ + "const-serialize", + "dioxus-cli-config", + "dioxus-core-types", + "serde", +] + +[[package]] +name = "manganis-macro" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f4f71310913c40174d9f0cfcbcb127dad0329ecdb3945678a120db22d3d065" +dependencies = [ + "dunce", + "manganis-core", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "manyhow" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b33efb3ca6d3b07393750d4030418d594ab1139cee518f0dc88db70fec873587" +dependencies = [ + "manyhow-macros", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "manyhow-macros" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fce34d199b78b6e6073abf984c9cf5fd3e9330145a93ee0738a7443e371495" +dependencies = [ + "proc-macro-utils", + "proc-macro2", + "quote", +] + +[[package]] +name = "maybe-async" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +dependencies = [ + "adler2", +] + +[[package]] +name = "next_tuple" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60993920e071b0c9b66f14e2b32740a4e27ffc82854dcd72035887f336a09a28" + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "oco_ref" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64b94982fe39a861561cf67ff17a7849f2cedadbbad960a797634032b7abb998" +dependencies = [ + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "or_poisoned" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c04f5d74368e4d0dfe06c45c8627c81bd7c317d52762d118fb9b3076f6420fd" + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.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 = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[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 2.0.91", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pinned" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a829027bd95e54cfe13e3e258a1ae7b645960553fb82b75ff852c29688ee595b" +dependencies = [ + "futures", + "rustversion", + "thiserror 1.0.69", +] + +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn 2.0.91", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "proc-macro-utils" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaf08a13de400bc215877b5bdc088f241b12eb42f0a548d3390dc1c56bb7071" +dependencies = [ + "proc-macro2", + "quote", + "smallvec", +] + +[[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 2.0.91", + "version_check", + "yansi", +] + +[[package]] +name = "prodash" +version = "29.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04bb108f648884c23b98a0e940ebc2c93c0c3b89f04dbaf7eb8256ce617d1bc" +dependencies = [ + "log", + "parking_lot", +] + +[[package]] +name = "prokio" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b55e106e5791fa5a13abd13c85d6127312e8e09098059ca2bc9b03ca4cf488" +dependencies = [ + "futures", + "gloo 0.8.1", + "num_cpus", + "once_cell", + "pin-project", + "pinned", + "tokio", + "tokio-stream", + "wasm-bindgen-futures", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "quote-use" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9619db1197b497a36178cfc736dc96b271fe918875fbf1344c436a7e93d0321e" +dependencies = [ + "quote", + "quote-use-macros", +] + +[[package]] +name = "quote-use-macros" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82ebfb7faafadc06a7ab141a6f67bcfb24cb8beb158c6fe933f2f035afa99f35" +dependencies = [ + "proc-macro-utils", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + +[[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 0.2.15", +] + +[[package]] +name = "reactive_graph" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a0ccddbc11a648bd09761801dac9e3f246ef7641130987d6120fced22515e6" +dependencies = [ + "any_spawner", + "async-lock", + "futures", + "guardian", + "hydration_context", + "or_poisoned", + "pin-project-lite", + "rustc-hash 2.1.0", + "send_wrapper", + "serde", + "slotmap", + "thiserror 2.0.9", + "web-sys", +] + +[[package]] +name = "reactive_stores" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aadc7c19e3a360bf19cd595d2dc8b58ce67b9240b95a103fbc1317a8ff194237" +dependencies = [ + "guardian", + "itertools", + "or_poisoned", + "paste", + "reactive_graph", + "reactive_stores_macro", + "rustc-hash 2.1.0", +] + +[[package]] +name = "reactive_stores_macro" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "221095cb028dc51fbc2833743ea8b1a585da1a2af19b440b3528027495bf1f2d" +dependencies = [ + "convert_case 0.7.1", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rstml" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51187e564f12336ef40cd04f6f4d805d6919188001dcf1e0a021898ea0fe28ce" +dependencies = [ + "derive-where", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.91", + "syn_derive", + "thiserror 1.0.69", +] + +[[package]] +name = "rustc-demangle" +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 = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.9.4", + "windows-sys 0.59.0", +] + +[[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 = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +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-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +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 1.0.69", +] + +[[package]] +name = "serde_qs" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd34f36fe4c5ba9654417139a9b3a20d2e1de6012ee678ad14d240c22c78d8d6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "server_fn" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fae7a3038a32e5a34ba32c6c45eb4852f8affaf8b794ebfcd4b1099e2d62ebe" +dependencies = [ + "bytes", + "const_format", + "dashmap 5.5.3", + "futures", + "gloo-net 0.6.0", + "http 1.2.0", + "js-sys", + "once_cell", + "send_wrapper", + "serde", + "serde_json", + "serde_qs 0.12.0", + "server_fn_macro_default 0.6.15", + "thiserror 1.0.69", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", +] + +[[package]] +name = "server_fn" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d05a9e3fd8d7404985418db38c6617cc793a1a27f398d4fbc9dfe8e41b804e6" +dependencies = [ + "bytes", + "const_format", + "dashmap 6.1.0", + "futures", + "gloo-net 0.6.0", + "http 1.2.0", + "js-sys", + "once_cell", + "pin-project-lite", + "send_wrapper", + "serde", + "serde_json", + "serde_qs 0.13.0", + "server_fn_macro_default 0.7.8", + "thiserror 2.0.9", + "throw_error", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1" +dependencies = [ + "const_format", + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.91", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504b35e883267b3206317b46d02952ed7b8bf0e11b2e209e2eb453b609a5e052" +dependencies = [ + "const_format", + "convert_case 0.6.0", + "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 0.6.15", + "syn 2.0.91", +] + +[[package]] +name = "server_fn_macro_default" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb8b274f568c94226a8045668554aace8142a59b8bca5414ac5a79627c825568" +dependencies = [ + "server_fn_macro 0.7.8", + "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 = "sha1-checked" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89f599ac0c323ebb1c6082821a54962b839832b03984598375bff3975b804423" +dependencies = [ + "digest", + "sha1", +] + +[[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 = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "sidebar" +version = "0.0.0" +dependencies = [ + "bump2version", + "dioxus", + "leptos", + "log", + "web-sys", + "yew", +] + +[[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 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 1.1.0", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "serde", + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[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 = "tachys" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d42b7c1545705f77d871228eb52cbb1376b35dc0a237be9fb11e2d9e4e20818" +dependencies = [ + "any_spawner", + "async-trait", + "const_str_slice_concat", + "drain_filter_polyfill", + "dyn-clone", + "either_of", + "futures", + "html-escape", + "indexmap", + "itertools", + "js-sys", + "linear-map", + "next_tuple", + "oco_ref", + "once_cell", + "or_poisoned", + "parking_lot", + "paste", + "reactive_graph", + "reactive_stores", + "rustc-hash 2.1.0", + "send_wrapper", + "slotmap", + "throw_error", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "tempfile" +version = "3.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +dependencies = [ + "fastrand", + "getrandom 0.3.2", + "once_cell", + "rustix 1.0.5", + "windows-sys 0.59.0", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +dependencies = [ + "thiserror-impl 2.0.9", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +dependencies = [ + "proc-macro2", + "quote", + "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 = "throw_error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ef8bf264c6ae02a065a4a16553283f0656bd6266fc1fcb09fd2e6b5e91427b" +dependencies = [ + "pin-project-lite", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +dependencies = [ + "backtrace", + "pin-project-lite", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.22", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.20", +] + +[[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 2.0.91", +] + +[[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 1.2.0", + "httparse", + "log", + "rand", + "sha1", + "thiserror 1.0.69", + "utf-8", +] + +[[package]] +name = "typed-builder" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e14ed59dc8b7b26cacb2a92bad2e8b1f098806063898ab42a3bd121d7d45e75" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "560b82d656506509d43abe30e0ba64c56b1953ab3d4fe7ba5902747a7a3cedd5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bom" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[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-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.91", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.91", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[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.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[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 = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb8234a863ea0e8cd7284fcdd4f145233eb00fee02bbdd9861aec44e6477bc5" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + +[[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 = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yew" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f1a03f255c70c7aa3e9c62e15292f142ede0564123543c1cc0c7a4f31660cac" +dependencies = [ + "console_error_panic_hook", + "futures", + "gloo 0.10.0", + "implicit-clone", + "indexmap", + "js-sys", + "prokio", + "rustversion", + "serde", + "slab", + "thiserror 1.0.69", + "tokio", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "yew-macro", +] + +[[package]] +name = "yew-macro" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fd8ca5166d69e59f796500a2ce432ff751edecbbb308ca59fd3fe4d0343de2" +dependencies = [ + "boolinator", + "once_cell", + "prettyplease", + "proc-macro-error", + "proc-macro2", + "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 8053ded..7c1ca11 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,28 +1,48 @@ [package] -name = "yew-sidebar" -version = "0.1.4" -description = "📁 An ultra-flexible and lightning-fast sidebar component for the Yew framework." +name = "sidebar" +version = "0.0.0" +edition = "2024" +rust-version = "1.85" +description = "🗃️ A highly customizable sidebar component for WASM frameworks like Yew, Dioxus, and Leptos." license = "MIT" -repository = "https://github.com/next-rs/yew-sidebar" -homepage = "https://github.com/next-rs/yew-sidebar" -documentation = "https://docs.rs/yew-sidebar/" +keywords = ["sidebar", "navigation", "yew", "dioxus", "leptos", "wasm"] +categories = ["gui", "web-programming", "wasm"] +repository = "https://github.com/opensass/sidebar" +documentation = "https://docs.rs/sidebar" +homepage = "https://github.com/opensass/sidebar" +readme = "README.md" authors = ["Mahmoud Harmouch "] -edition = "2021" -exclude = ["/examples"] -keywords = ["yew", "rust", "sidebar", "yew-sidebar"] -categories = ["web-programming", "no-std"] +exclude = ["/assets", "/examples"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -yew = "0.21.0" -yew-accordion = "0.1.0" +yew = { version = "0.21.0", default-features = false, optional = true } +dioxus = { version = "0.6.3", optional = true } +leptos = { version = "0.7.7", optional = true } +web-sys = { version = "0.3.77", features = ["Window",]} + +[features] +yew = ["dep:yew"] +dio = ["dioxus"] +lep = ["leptos"] [profile.release] -codegen-units = 1 opt-level = "z" +debug = false lto = "thin" +codegen-units = 1 +panic = "abort" strip = "symbols" +incremental = false [badges] maintenance = { status = "actively-developed" } + +[package.metadata.docs.rs] +all-features = true +rustdoc-args = ["--cfg", "docsrs"] + +[dev-dependencies] +log = "0.4.27" +bump2version = "0.1.6" diff --git a/LICENSE b/LICENSE index 9062ee7..ab7408e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Mahmoud Harmouch +Copyright (c) 2025 Open SASS Core Maintainers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 5cd56b6..a73d3c9 100644 --- a/README.md +++ b/README.md @@ -1,244 +1,66 @@ -# 📁 Yew Sidebar - -[![Crates.io](https://img.shields.io/crates/v/yew-sidebar)](https://crates.io/crates/yew-sidebar) -[![Crates.io Downloads](https://img.shields.io/crates/d/yew-sidebar)](https://crates.io/crates/yew-sidebar) -![Crates.io License](https://img.shields.io/crates/l/yew-sidebar) -![Rust](https://img.shields.io/badge/rust-stable-orange) - ---- - -| Example | Demo | URL | -| --- | --- | --- | -| Basic | ![Demo](https://github.com/next-rs/yew-sidebar/assets/62179149/c25ea59c-530e-416e-94fa-e154fb461fd4) | [![Netlify Status](https://api.netlify.com/api/v1/badges/0f5cbba1-4179-45c7-91e2-5540f3539a12/deploy-status)](https://yew-sidebar.netlify.app/) | -| X Clone | ![Demo](https://github.com/next-rs/yew-sidebar/assets/62179149/da35077c-0969-46b0-8fa6-b296909875b0) | [![Netlify Status](https://api.netlify.com/api/v1/badges/0f5cbba1-4179-45c7-91e2-5540f3539a12/deploy-status)](https://yew-sidebar-x.netlify.app/) | -| Youtube Clone | ![Demo](https://github.com/next-rs/yew-sidebar/assets/62179149/6133ada6-5870-42a8-9afd-a41c3f20f07d) | [![Netlify Status](https://api.netlify.com/api/v1/badges/0f5cbba1-4179-45c7-91e2-5540f3539a12/deploy-status)](https://yew-sidebar-youtube.netlify.app/) | - ---- - -## 📜 Introduction - -Yew Sidebar is a powerful and responsive sidebar component for the Yew framework. It provides a feature-rich sidebar that can be easily integrated into your Yew applications. - -## 🤔 Why is this Component Useful? - -This sidebar component offers several benefits to enhance your web application's navigation experience: - -1. 🌐 Customization: Tailor the appearance and behavior of the sidebar to suit your application's design. - -1. 🚀 Responsive Design: Ensures optimal viewing and navigation across various devices and screen sizes. - -1. 💬 Easy Integration: Seamless integration into Yew projects with minimal setup and configuration. - -## ⚙️ Installation - -Integrating Yew Sidebar into your Yew project is a straightforward process. Follow these steps: - -1. Make sure you have Yew set up in your project. If not, refer to the [Yew documentation](https://yew.rs/docs/getting-started/introduction) for installation instructions. - -1. Install the library using your preferred package manager: - - ```bash - $ cargo add yew-sidebar - ``` - -1. Start using the sidebar component to enhance your application's navigation. - -## 🛠️ Usage - -Incorporating Yew Sidebar into your application is easy. Follow these steps: - -1. Import the sidebar component into your Yew project: - - ```rust - use yew::prelude::*; - use yew_sidebar::{Sidebar, SidebarProps, MenuItem}; - - #[function_component(App)] - pub fn app() -> Html { - // Tailwind css utility classes - let toggle_icon_collapsed = html! { - - - - }; - let toggle_icon_expanded = html! { - - - - }; - let sidebar_props = SidebarProps { - sider_collapsed: true, - title: "Dashboard", - menu_items: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Overview", - link: "#overview", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Analytics", - link: "#analytics", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Reports", - link: "#reports", - class: "", - title: "", - submenus: vec![], - }, - ], - width_collapsed: "w-20", - toggle_icon_expanded: toggle_icon_expanded, - toggle_icon_collapsed: toggle_icon_collapsed, - width_expanded: "w-72", - padding_collapsed: "p-2", - padding_expanded: "p-4", - display_collapsed: "hidden", - display_expanded: "flex", - justify_content: "flex-col", - align_items: "items-start", - height: "h-screen", - background_color: "bg-gray-800", - font: "text-white", - icon_color: "yellow", - button_border_radius: "rounded-md", - button_background_color: "bg-blue-600", - button_width: "w-3/4", - button_height: "h-10", - ..SidebarProps::default() - }; - - html! { - - } - } - ``` - -1. Customize the sidebar appearance and behavior using provided props. - -1. Enjoy an enhanced navigation experience with Yew Sidebar. - -## 🔧 Props - -### Main Props - -| Name | Type | Default Value | Description | -| ---------------------- | --------------- | ------------------- | ------------------------------------------------- | -| `fixed` | `bool` | `false` | Set whether the sidebar is fixed. | -| `sider_collapsed` | `bool` | `false` | Initial collapsed state of the sidebar. | -| `menu_items` | `Vec` | `Vec::new()` | List of navigation menu items. | -| `toggle_icon_collapsed` | `Html` | `Html::default()` | Toggle icon when the sidebar is collapsed. | -| `toggle_icon_expanded` | `Html` | `Html::default()` | Toggle icon when the sidebar is expanded. | - -### Layout Props - -| Name | Type | Default Value | Description | -| ---------------------- | --------------- | ------------------- | ------------------------------------------------- | -| `width_collapsed` | `&'static str` | `"w-16"` | Width of the sidebar in the collapsed state. | -| `width_expanded` | `&'static str` | `"w-64"` | Width of the sidebar in the expanded state. | -| `padding_collapsed` | `&'static str` | `"p-2"` | Padding of the sidebar in the collapsed state. | -| `padding_expanded` | `&'static str` | `"p-4"` | Padding of the sidebar in the expanded state. | -| `display_collapsed` | `&'static str` | `"hidden"` | Display property of the sidebar in the collapsed state. | -| `display_expanded` | `&'static str` | `"flex"` | Display property of the sidebar in the expanded state. | -| `justify_content` | `&'static str` | `"justify-start"` | Justification of the sidebar content. | -| `align_items` | `&'static str` | `"items-center"` | Alignment of items in the sidebar. | -| `height` | `&'static str` | `"h-screen"` | Height of the sidebar. | -| `background_color` | `&'static str` | `"bg-gray-800"` | Background color of the sidebar. | - -### Style Props - -| Name | Type | Default Value | Description | -| ---------------------- | --------------- | ------------------- | ------------------------------------------------- | -| `font` | `&'static str` | `"text-white"` | Font color of the sidebar text. | -| `icon_color` | `&'static str` | `"text-white"` | Color of the icons in the sidebar. | -| `button_border_radius` | `&'static str` | `"rounded"` | Border radius of the sidebar button. | -| `button_background_color` | `&'static str` | `"bg-blue-600"` | Background color of the sidebar button. | -| `button_width` | `&'static str` | `"w-12"` | Width of the sidebar button. | -| `button_height` | `&'static str` | `"h-12"` | Height of the sidebar button. | - -### Title Props - -| Name | Type | Default Value | Description | -| ---------------------- | --------------- | ------------------- | ------------------------------------------------- | -| `title` | `&'static str` | `""` | Title of the sidebar. | - -### Logo Props - -| Name | Type | Default Value | Description | -| ---------------------- | --------------- | ------------------- | ------------------------------------------------- | -| `logo_src` | `&'static str` | `"images/logo.png"` | Source URL for the logo image. | -| `logo_alt` | `&'static str` | `"logo"` | Alternative text for the logo. | -| `logo_img_class` | `&'static str` | `LOGO_IMG_CLASS` | Class for styling the logo image. | -| `logo_link` | `&'static str` | `"/"` | Link for the logo. | -| `logo_class` | `&'static str` | `LOGO_CLASS` | Class for styling the logo. | - -### Bottom Section Props - -| Name | Type | Default Value | Description | -| ---------------------- | --------------- | ------------------- | ------------------------------------------------- | -| `bottom_section` | `Html` | `Html::default()` | Content for the bottom section of the sidebar. | - -### Submenus Props - -| Name | Type | Default Value | Description | -| ---------------------- | --------------- | ------------------- | ------------------------------------------------- | -| `size` | `&'static str` | `""` | Size of the accordion. Possible values: "sm", "md", "lg". | -| `aria_controls` | `&'static str` | `""` | ARIA controls attribute for accessibility. | -| `container_class` | `&'static str` | `""` | Class for the container element. | -| `expanded_element_class` | `&'static str` | `""` | Class for the expanded element. | -| `collapsed_element_class` | `&'static str` | `""` | Class for the collapsed element. | -| `content_container_class` | `&'static str` | `""` | Class for the content container. | - -## 📙 Examples - -If you're curious about how to use it with different styling or additional features, you can check out the [examples folder](examples) for more information. - -## 🤝 Contribution - -We welcome contributions from the community to enhance this Sidebar component. Feel free to open issues, submit pull requests, or provide feedback. Let's collaborate to make navigation in Yew even more stylish and functional! +
+ +# 🗃️ Sidebar + +[![Crates.io](https://img.shields.io/crates/v/sidebar)](https://crates.io/crates/sidebar) +[![Crates.io Downloads](https://img.shields.io/crates/d/sidebar)](https://crates.io/crates/sidebar) +![Crates.io License](https://img.shields.io/crates/l/sidebar) +[![made-with-rust](https://img.shields.io/badge/Made%20with-Rust-1f425f.svg?logo=rust&logoColor=white)](https://www.rust-lang.org/) +[![Rust](https://img.shields.io/badge/Rust-1.85%2B-blue.svg)](https://www.rust-lang.org) +[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/wiseaidev) + +[![Join our Discord](https://dcbadge.limes.pink/api/server/b5JbvHW5nv)](https://discord.gg/b5JbvHW5nv) + + +![logo](https://raw.githubusercontent.com/opensass/sidebar/refs/heads/main/assets/logo.webp) + +
+ +## 🎬 Demo + +| Framework | Live Demo | +| --- | --- | +| Yew | [![Netlify Status](https://api.netlify.com/api/v1/badges/a0efc7e9-f20e-4dd9-93e1-c8f4fde7506f/deploy-status)](https://sidebar-rs.netlify.app) | +| Dioxus | TODO | +| Leptos | TODO | + +## 📜 Intro + +Sidebar is a **highly optimized**, **feature-rich** sidebar component built for **WASM-based frameworks** like **Yew**, **Dioxus**, and **Leptos**. It supports nested menus, user profiles, collapsibility, submenus, badges, and full styling control. + +## 🤔 Why Use Sidebar? + +These standout features make Sidebar the best choice for any WASM UI: + +1. **🎛️ Full Customization**: Every part, menu items, header, logo, profile, layout, is styleable via props. +1. **🧱 Modular Design**: Use only the pieces you need: `Sidebar`, `Menu`, `MenuItem`, `Submenu`, `Profile`, or `Logo`. +1. **🔁 Dynamic Interaction**: Update the selected menu item using `UseStateHandle` or attach `on_logout` handlers. +1. **🧩 Composable**: Nest submenus, inject icons, or toggle visibility based on context. +1. **📐 Accessible UI**: Designed with screen readers in mind. + +## Yew Usage + + +Refer to [our guide](https://github.com/opensass/sidebar/blob/main/YEW.md) to integrate this component into your Yew app. + +## 🧬 Dioxus Usage (TODO) + + +Refer to [our guide](https://github.com/opensass/sidebar/blob/main/DIOXUS.md) to integrate this component into your Dioxus app. + +## 🌱 Leptos Usage (TODO) + + +Refer to [our guide](https://github.com/opensass/sidebar/blob/main/LEPTOS.md) to integrate this component into your Leptos app. + +## 🤝 Contributions + +Contributions are welcome! Whether it's bug fixes, feature requests, or examples, we would love your help to make Sidebar better. + +1. Fork the repository. +1. Create a new branch for your feature/bugfix. +1. Submit a pull request for review. ## 📜 License -Yew Sidebar is licensed under the `MIT` License, allowing you to use, modify, and distribute it freely. Refer to the [`LICENSE`](LICENSE) file for more details. +Sidebar is licensed under the [MIT License](LICENSE). You are free to use, modify, and distribute this library in your projects. diff --git a/YEW.md b/YEW.md new file mode 100644 index 0000000..773fc9b --- /dev/null +++ b/YEW.md @@ -0,0 +1,195 @@ +# Y Sidebar Yew Usage + +Adding Sidebar to your project is simple: + +1. Make sure your project is set up with **Yew**. Follow their [Getting Started Guide](https://yew.rs/docs/getting-started/introduction) for setup instructions. + +1. Add the Sidebar component to your dependencies by including it in your `Cargo.toml` file: + + ```sh + cargo add sidebar --features=yew + ``` + +1. Import the `Sidebar` component into your Yew component and start using it in your app. + +## 🛠️ Usage + +Integrating the **Sidebar** into your Yew application is straightforward. Follow the steps below: + +1. Import the `Sidebar`, `Menu`, `MenuItem`, `Submenu`, and `Profile` components: + + ```rust + use yew::prelude::*; + use sidebar::yew::item::MenuItem; + use sidebar::yew::menu::Menu; + use sidebar::yew::sidebar::Sidebar; + use sidebar::yew::submenu::Submenu; + ``` + +1. Use them in your application: + + ```rust + use yew::prelude::*; + use sidebar::yew::item::MenuItem; + use sidebar::yew::menu::Menu; + use sidebar::yew::sidebar::Sidebar; + use sidebar::yew::submenu::Submenu; + + #[function_component(App)] + pub fn app() -> Html { + let selected = use_state(|| String::from("Dashboard")); + + html! { + + + { "📊" }}} + selected={selected.clone()} + /> + { "⚙️" }}} + selected={selected.clone()} + /> + { "➕" }}}> + { "📁" }}} + selected={selected.clone()} + /> + + + + } + } + ``` + +## 🔧 Props + +```sh ++---------------------------------------------------------------+ +| Sidebar | +| (style: width: 270px; background: white;) | +| | +| +---------------------------------------------------------+ | +| | Header (Logo + Toggle) | | +| | (header_style: display: flex; align-items: center;) | | +| | | | +| | [Logo] [Toggle ◀ or ▶] | | +| +---------------------------------------------------------+ | +| | +| +---------------------------------------------------------+ | +| | Menu | | +| | (sub_heading shown if not collapsed) | | +| | | | +| | +-------------------+ +-------------------+ | | +| | | MenuItem | | MenuItem | | | +| | | [Icon] Label | | [Icon] Label | | | +| | +-------------------+ +-------------------+ | | +| | | | +| | +-------------------+ | | +| | | Submenu | | | +| | | [Icon] Label ▼ |(click to expand ▼ or collapse ▲)| | +| | +-------------------+ | | +| | | | | +| | |--> +-------------------+ | | +| | | MenuItem | | | +| | | [Icon] Label | | | +| | +-------------------+ | | +| +---------------------------------------------------------+ | +| | +| +---------------------------------------------------------+ | +| | Profile | | +| | (shown only if not collapsed) | | +| | | | +| | [Avatar] Username Designation [-] | | +| +---------------------------------------------------------+ | ++---------------------------------------------------------------+ +``` + +### `Sidebar` Component Props + +| Property | Type | Description | Default | +| -------------- | ------------------------- | ----------------------------------------- | ------------------------------------ | +| `children` | `ChildrenWithProps` | The `Menu` components rendered in sidebar | `[]` | +| `show_profile` | `bool` | Whether to show the profile section | `true` | +| `user_name` | `&'static str` | User's name displayed in profile | `""` | +| `designation` | `&'static str` | User role/designation | `""` | +| `user_img` | `&'static str` | Path to user image | `""` | +| `on_logout` | `Callback<()>` | Callback invoked when logout is clicked | `No-op` | +| `style` | `&'static str` | Inline CSS for sidebar container | `"width: 270px; background: white;"` | +| `class` | `&'static str` | CSS class for sidebar container | `""` | +| `header_style` | `&'static str` | CSS for the sidebar header section | `"display: flex; ..."` | +| `header_class` | `&'static str` | Class for the header div | `""` | +| `logo_img_url` | `&'static str` | Logo image path | `""` | +| `logo_href` | `&'static str` | Logo link target | `""` | + +### `Menu` Component Props + +| Property | Type | Description | Default | +| ------------- | -------------- | -------------------------------- | ------------------ | +| `sub_heading` | `&'static str` | Optional section heading | `""` | +| `children` | `Children` | Children `MenuItem` or `Submenu` | `[]` | +| `style` | `&'static str` | Inline styles | `"padding: 1rem;"` | +| `class` | `&'static str` | CSS class | `""` | + +### `MenuItem` Component Props + +| Property | Type | Description | Default | +| ----------------------- | ------------------------ | --------------------------------------- | -------------------------------------------- | +| `label` | `&'static str` | Menu item label | `""` | +| `href` | `&'static str` | Navigation URL | `""` | +| `icon_html` | `Html` | Icon HTML for the item | `html!{}` | +| `badge` | `Option<&'static str>` | Optional badge (e.g., "3", "new") | `None` | +| `selected` | `UseStateHandle` | Currently selected item state | Required | +| `anchor_style` | `&'static str` | Styles for anchor wrapper | `"text-decoration: none;"` | +| `anchor_class` | `&'static str` | Class for anchor wrapper | `""` | +| `item_style` | `&'static str` | Styles when sidebar is expanded | `"display: flex; ..."` | +| `item_class` | `&'static str` | Class for item container | `""` | +| `collapsed_style` | `&'static str` | Styles for collapsed sidebar | `"display: flex; ..."` | +| `collapsed_label_style` | `&'static str` | Styles for label text in collapsed mode | `"font-size: 10px; text-align: center;"` | +| `selected_style` | `&'static str` | Styles for selected item | `"background-color: #1e293b; color: white;"` | +| `badge_style` | `&'static str` | Style for badge | `"background: red; ..."` | + +### `Submenu` Component Props + +| Property | Type | Description | Default | +| ----------- | ----------------------------- | ------------------------------------ | --------------------------------------- | +| `title` | `&'static str` | Submenu title | `""` | +| `icon_html` | `Html` | Optional icon | `html!{}` | +| `children` | `ChildrenWithProps` | Menu items to be shown when expanded | `[]` | +| `class` | `&'static str` | CSS class | `""` | +| `style` | `&'static str` | Inline style | `"padding: 10px; cursor: pointer; ..."` | + +### `Profile` Component Props + +| Property | Type | Description | Default | +| -------------- | -------------- | ---------------------------------- | ------------------------------------------- | +| `user_name` | `&'static str` | Name of the user | `""` | +| `designation` | `&'static str` | User's designation/role | `""` | +| `user_img` | `&'static str` | Profile image path | `""` | +| `is_collapsed` | `bool` | Whether sidebar is collapsed | `false` | +| `on_logout` | `Callback<()>` | Callback triggered on logout click | `No-op` | +| `style` | `&'static str` | Styling for the profile container | `"display: flex; align-items: center; ..."` | +| `class` | `&'static str` | Class for the container | `""` | + +## 💡 Notes + +- `Sidebar` handles responsive behavior based on viewport width (`< 768px` = collapsed). +- `MenuItem` auto-detects and highlights current item using the `selected` state and URL query param `selected`. +- You **must pass a shared `UseStateHandle`** to `selected` in every `MenuItem` to track active selection. +- `Submenu` provides collapsible behavior to group nested items. +- `Profile` is automatically hidden in collapsed mode. +- Customize with `style` and `class` props for full design flexibility. +- `ContextProvider` enables state sharing (collapsed/expanded) across components via `SidebarContext`. diff --git a/assets/favicon.png b/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1eadcf1462bef950249f813db41a5b2342dafbcc GIT binary patch literal 61094 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"] -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -yew-sidebar = { path = "../../" } -yew = { version = "0.21.0", features = ["csr"], default-features = false } -yew-router = { version = "0.18.0", default-features = false } - -[profile.release] -codegen-units = 1 -opt-level = "z" -lto = "thin" -strip = "symbols" diff --git a/examples/tailwind/LICENSE b/examples/tailwind/LICENSE deleted file mode 100644 index 8f1b239..0000000 --- a/examples/tailwind/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 Mahmoud Harmouch - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/examples/tailwind/README.md b/examples/tailwind/README.md deleted file mode 100644 index 9c0da60..0000000 --- a/examples/tailwind/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# 📚 Yew Sidebar Example - -## 🚀 Building and Running - -1. Fork/Clone the GitHub repository. - - ```bash - git clone https://github.com/wiseaidev/yew-sidebar - ``` - -1. Navigate to the application directory. - - ```bash - cd yew-sidebar/examples/tailwind - ``` - -1. Run the client: - - ```sh - trunk serve --port 3000 - ``` -1. Uncomment this line: - - https://github.com/wiseaidev/yew-sidebar/blob/a9ed417300116b705a69ca368222692538a93baa/examples/tailwind/index.html#L5 - -1. Stop and rerun the client: - - ```sh - trunk serve --port 3000 - ``` - -Navigate to http://localhost:3000 to explore the landing page. diff --git a/examples/tailwind/Trunk.toml b/examples/tailwind/Trunk.toml deleted file mode 100644 index 123d93b..0000000 --- a/examples/tailwind/Trunk.toml +++ /dev/null @@ -1,4 +0,0 @@ -[[hooks]] -stage = "post_build" -command = "sh" -command_arguments = ["-c", "npx tailwindcss -i ./css/tailwind.css -o ./dist/.stage/index.css"] \ No newline at end of file diff --git a/examples/tailwind/images/logo.png b/examples/tailwind/images/logo.png deleted file mode 100644 index 738c52f988ee19c38c633732962af8a2764420f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32546 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 diff --git a/examples/tailwind/index.html b/examples/tailwind/index.html deleted file mode 100644 index eae7981..0000000 --- a/examples/tailwind/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - Yew Sidebar with Tailwind CSS - - - - diff --git a/examples/tailwind/src/main.rs b/examples/tailwind/src/main.rs deleted file mode 100644 index 8165795..0000000 --- a/examples/tailwind/src/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod app; -mod pages; -mod router; - -fn main() { - yew::Renderer::::new().render(); -} diff --git a/examples/tailwind/src/pages/landing.rs b/examples/tailwind/src/pages/landing.rs deleted file mode 100644 index 5f70a5e..0000000 --- a/examples/tailwind/src/pages/landing.rs +++ /dev/null @@ -1,691 +0,0 @@ -use yew::prelude::*; -use yew_sidebar::{MenuItem, Sidebar, SidebarProps}; - -#[function_component(LandingPage)] -pub fn landing_page() -> Html { - let toggle_icon_collapsed = html! { - - - - }; - let toggle_icon_expanded = html! { - - - - }; - let sidebar_props = SidebarProps { - logo_src: "images/logo.png", - sider_collapsed: false, - width_collapsed: "w-16", - toggle_icon_expanded: toggle_icon_expanded.clone(), - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - title: "Multi Level Menu", - width_expanded: "w-64", - padding_collapsed: "p-2", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg", - display_collapsed: "hidden", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-12", - menu_items: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Home", - link: "#home", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "About", - link: "#about", - class: "", - title: "", - submenus: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Team", - link: "#team", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "History", - link: "#history", - class: "", - title: "", - submenus: vec![], - }, - ], - }, - MenuItem { - icon: html! { - - - - }, - text: "Services", - link: "#services", - class: "", - title: "", - submenus: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Web Design", - link: "#web-design", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Graphic Design", - link: "#graphic-design", - class: "", - title: "", - submenus: vec![], - }, - ], - }, - MenuItem { - icon: html! { - - - - }, - text: "Contact", - link: "#contact", - class: "", - title: "", - submenus: vec![], - }, - ], - ..SidebarProps::default() - }; - - let sidebar_props1 = SidebarProps { - fixed: false, - logo_src: "", - sider_collapsed: false, - title: "Main Menu", - menu_items: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Home", - link: "#home", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "About", - link: "#about", - class: "", - title: "", - submenus: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Team", - link: "#team", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "History", - link: "#history", - class: "", - title: "", - submenus: vec![], - }, - ], - }, - MenuItem { - icon: html! { - - - - }, - text: "Services", - link: "#services", - class: "", - title: "", - submenus: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Web Design", - link: "#web-design", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Graphic Design", - link: "#graphic-design", - class: "", - title: "", - submenus: vec![], - }, - ], - }, - MenuItem { - icon: html! { - - - - }, - text: "Contact", - link: "#contact", - class: "", - title: "", - submenus: vec![], - }, - ], - width_collapsed: "w-16", - toggle_icon_expanded: toggle_icon_expanded.clone(), - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - width_expanded: "w-64", - padding_collapsed: "p-2", - padding_expanded: "p-4", - display_collapsed: "hidden", - display_expanded: "flex", - justify_content: "flex-col", - align_items: "items-start", - height: "h-screen", - background_color: "bg-gradient-to-r from-yellow-800 to-orange-700", - font: "text-gray-800 text-2xl", - icon_color: "yellow", - button_border_radius: "rounded", - button_background_color: "bg-blue-500", - button_width: "w-full", - button_height: "h-12", - ..SidebarProps::default() - }; - - let sidebar_props2 = SidebarProps { - sider_collapsed: true, - title: "Dashboard", - menu_items: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Overview", - link: "#overview", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Analytics", - link: "#analytics", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Reports", - link: "#reports", - class: "", - title: "", - submenus: vec![], - }, - ], - width_collapsed: "w-20", - toggle_icon_expanded: toggle_icon_expanded.clone(), - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - width_expanded: "w-72", - padding_collapsed: "p-2", - padding_expanded: "p-4", - display_collapsed: "hidden", - display_expanded: "flex", - justify_content: "flex-col", - align_items: "items-start", - height: "h-screen", - background_color: "bg-gray-800", - font: "text-white", - icon_color: "yellow", - button_border_radius: "rounded-md", - button_background_color: "bg-blue-600", - button_width: "w-3/4", - button_height: "h-10", - ..SidebarProps::default() - }; - - let sidebar_props3 = SidebarProps { - sider_collapsed: false, - menu_items: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Users", - link: "#users", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Roles", - link: "#roles", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Settings", - link: "#settings", - class: "", - title: "", - submenus: vec![], - }, - ], - width_collapsed: "w-24", - toggle_icon_expanded: toggle_icon_expanded.clone(), - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - width_expanded: "w-80", - padding_collapsed: "p-3", - padding_expanded: "p-5", - display_collapsed: "hidden", - display_expanded: "flex", - justify_content: "flex-col", - align_items: "items-center", - height: "h-screen", - background_color: "bg-purple-900", - font: "text-gray-200", - icon_color: "green", - button_border_radius: "rounded-full", - button_background_color: "bg-red-500", - button_width: "w-3/4", - button_height: "h-12", - ..SidebarProps::default() - }; - - let sidebar_props4 = SidebarProps { - sider_collapsed: false, - title: "Projects", - menu_items: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Active", - link: "#active-projects", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Completed", - link: "#completed-projects", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Archived", - link: "#archived-projects", - class: "", - title: "", - submenus: vec![], - }, - ], - width_collapsed: "w-16", - toggle_icon_expanded: toggle_icon_expanded.clone(), - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - width_expanded: "w-56", - padding_collapsed: "p-1", - padding_expanded: "p-3", - display_collapsed: "hidden", - display_expanded: "flex", - justify_content: "flex-col", - align_items: "items-start", - height: "h-screen", - background_color: "bg-indigo-800", - font: "text-white", - icon_color: "yellow", - button_border_radius: "rounded-lg", - button_background_color: "bg-green-500", - button_width: "w-full", - button_height: "h-12", - ..SidebarProps::default() - }; - - let sidebar_props5 = SidebarProps { - sider_collapsed: false, - title: "Admin Dashboard", - menu_items: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Dashboard", - link: "#dashboard", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Users", - link: "#users", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Settings", - link: "#settings", - class: "", - title: "", - submenus: vec![], - }, - ], - width_collapsed: "w-20", - width_expanded: "w-72", - toggle_icon_expanded: toggle_icon_expanded.clone(), - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - padding_collapsed: "p-2", - padding_expanded: "p-4", - display_collapsed: "hidden", - display_expanded: "flex", - justify_content: "flex-col", - align_items: "items-center", - height: "h-screen", - background_color: "bg-blue-800", - font: "text-white", - icon_color: "yellow", - button_border_radius: "rounded", - button_background_color: "bg-yellow-500", - button_width: "w-full", - button_height: "h-12", - ..SidebarProps::default() - }; - - let sidebar_props6 = SidebarProps { - sider_collapsed: true, - title: "Product Management", - menu_items: vec![ - MenuItem { - icon: html! { - - - - }, - text: "Products", - link: "#products", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Categories", - link: "#categories", - class: "", - title: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Orders", - link: "#orders", - class: "", - title: "", - submenus: vec![], - }, - ], - width_collapsed: "w-16", - toggle_icon_expanded: toggle_icon_expanded.clone(), - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - width_expanded: "w-60", - padding_collapsed: "p-0", - padding_expanded: "p-3", - display_collapsed: "hidden", - display_expanded: "flex", - justify_content: "flex-col", - align_items: "items-center", - height: "h-screen", - background_color: "bg-gray-900", - font: "text-white", - icon_color: "gray", - button_border_radius: "rounded-none", - button_background_color: "bg-green-500", - button_width: "w-full", - button_height: "h-12", - ..SidebarProps::default() - }; - html! { -

- - - - - - - -
- } -} diff --git a/examples/x-sidebar-clone/.gitignore b/examples/x-sidebar-clone/.gitignore deleted file mode 100644 index e512471..0000000 --- a/examples/x-sidebar-clone/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target/**/* \ No newline at end of file diff --git a/examples/x-sidebar-clone/Cargo.lock b/examples/x-sidebar-clone/Cargo.lock deleted file mode 100644 index f0d2f56..0000000 --- a/examples/x-sidebar-clone/Cargo.lock +++ /dev/null @@ -1,1215 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "anymap2" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "boolinator" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[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 = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[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.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "gloo" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d" -dependencies = [ - "gloo-console 0.2.3", - "gloo-dialogs 0.1.1", - "gloo-events 0.1.2", - "gloo-file 0.2.3", - "gloo-history 0.1.5", - "gloo-net 0.3.1", - "gloo-render 0.1.1", - "gloo-storage 0.2.2", - "gloo-timers 0.2.6", - "gloo-utils 0.1.7", - "gloo-worker 0.2.1", -] - -[[package]] -name = "gloo" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd35526c28cc55c1db77aed6296de58677dbab863b118483a27845631d870249" -dependencies = [ - "gloo-console 0.3.0", - "gloo-dialogs 0.2.0", - "gloo-events 0.2.0", - "gloo-file 0.3.0", - "gloo-history 0.2.2", - "gloo-net 0.4.0", - "gloo-render 0.2.0", - "gloo-storage 0.3.0", - "gloo-timers 0.3.0", - "gloo-utils 0.2.0", - "gloo-worker 0.4.0", -] - -[[package]] -name = "gloo-console" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f" -dependencies = [ - "gloo-utils 0.1.7", - "js-sys", - "serde", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-console" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a17868f56b4a24f677b17c8cb69958385102fa879418052d60b50bc1727e261" -dependencies = [ - "gloo-utils 0.2.0", - "js-sys", - "serde", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-dialogs" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-dialogs" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4748e10122b01435750ff530095b1217cf6546173459448b83913ebe7815df" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-events" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-events" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c26fb45f7c385ba980f5fa87ac677e363949e065a083722697ef1b2cc91e41" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-file" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7" -dependencies = [ - "gloo-events 0.1.2", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-file" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97563d71863fb2824b2e974e754a81d19c4a7ec47b09ced8a0e6656b6d54bd1f" -dependencies = [ - "futures-channel", - "gloo-events 0.2.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-history" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f" -dependencies = [ - "gloo-events 0.1.2", - "gloo-utils 0.1.7", - "serde", - "serde-wasm-bindgen 0.5.0", - "serde_urlencoded", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-history" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "903f432be5ba34427eac5e16048ef65604a82061fe93789f2212afc73d8617d6" -dependencies = [ - "getrandom", - "gloo-events 0.2.0", - "gloo-utils 0.2.0", - "serde", - "serde-wasm-bindgen 0.6.3", - "serde_urlencoded", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-net" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.1.7", - "http", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-net" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ac9e8288ae2c632fa9f8657ac70bfe38a1530f345282d7ba66a1f70b72b7dc4" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.2.0", - "http", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-render" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-render" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56008b6744713a8e8d98ac3dcb7d06543d5662358c9c805b4ce2167ad4649833" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-storage" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480" -dependencies = [ - "gloo-utils 0.1.7", - "js-sys", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-storage" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" -dependencies = [ - "gloo-utils 0.2.0", - "js-sys", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-utils" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "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 = "gloo-worker" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a" -dependencies = [ - "anymap2", - "bincode", - "gloo-console 0.2.3", - "gloo-utils 0.1.7", - "js-sys", - "serde", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-worker" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76495d3dd87de51da268fa3a593da118ab43eb7f8809e17eb38d3319b424e400" -dependencies = [ - "bincode", - "futures", - "gloo-utils 0.2.0", - "gloo-worker-macros", - "js-sys", - "pinned", - "serde", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-worker-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956caa58d4857bc9941749d55e4bd3000032d8212762586fa5705632967140e7" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "hermit-abi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "implicit-clone" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc06a255cbf402a52ae399c05a518c68c569c916ea11423620111df576b9b9bb" -dependencies = [ - "implicit-clone-derive", - "indexmap", -] - -[[package]] -name = "implicit-clone-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9311685eb9a34808bbb0608ad2fcab9ae216266beca5848613e95553ac914e3b" -dependencies = [ - "quote", - "syn 2.0.48", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "js-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "libc" -version = "0.2.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pinned" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a829027bd95e54cfe13e3e258a1ae7b645960553fb82b75ff852c29688ee595b" -dependencies = [ - "futures", - "rustversion", - "thiserror", -] - -[[package]] -name = "prettyplease" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" -dependencies = [ - "proc-macro2", - "syn 2.0.48", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prokio" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b55e106e5791fa5a13abd13c85d6127312e8e09098059ca2bc9b03ca4cf488" -dependencies = [ - "futures", - "gloo 0.8.1", - "num_cpus", - "once_cell", - "pin-project", - "pinned", - "tokio", - "tokio-stream", - "wasm-bindgen-futures", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "route-recognizer" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "serde" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" -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-wasm-bindgen" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b713f70513ae1f8d92665bbbbda5c295c2cf1da5542881ae5eefe20c9af132" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde_derive" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_json" -version = "1.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "pin-project-lite", -] - -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[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.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "winnow" -version = "0.5.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" -dependencies = [ - "memchr", -] - -[[package]] -name = "yew" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f1a03f255c70c7aa3e9c62e15292f142ede0564123543c1cc0c7a4f31660cac" -dependencies = [ - "console_error_panic_hook", - "futures", - "gloo 0.10.0", - "implicit-clone", - "indexmap", - "js-sys", - "prokio", - "rustversion", - "serde", - "slab", - "thiserror", - "tokio", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "yew-macro", -] - -[[package]] -name = "yew-macro" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fd8ca5166d69e59f796500a2ce432ff751edecbbb308ca59fd3fe4d0343de2" -dependencies = [ - "boolinator", - "once_cell", - "prettyplease", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "yew-router" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca1d5052c96e6762b4d6209a8aded597758d442e6c479995faf0c7b5538e0c6" -dependencies = [ - "gloo 0.10.0", - "js-sys", - "route-recognizer", - "serde", - "serde_urlencoded", - "tracing", - "urlencoding", - "wasm-bindgen", - "web-sys", - "yew", - "yew-router-macro", -] - -[[package]] -name = "yew-router-macro" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bfd190a07ca8cfde7cd4c52b3ac463803dc07323db8c34daa697e86365978c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "yew-sidebar" -version = "0.1.0" -dependencies = [ - "yew", -] - -[[package]] -name = "yew-sidebar-example" -version = "0.1.0" -dependencies = [ - "yew", - "yew-router", - "yew-sidebar", -] diff --git a/examples/x-sidebar-clone/Cargo.toml b/examples/x-sidebar-clone/Cargo.toml deleted file mode 100644 index 8c12877..0000000 --- a/examples/x-sidebar-clone/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "x-sidebar-clone" -version = "0.1.0" -authors = ["Mahmoud Harmouch "] -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -yew-sidebar = { path = "../../" } -yew = { version = "0.21.0", features = ["csr"], default-features = false } -yew-router = { version = "0.18.0", default-features = false } - -[profile.release] -codegen-units = 1 -opt-level = "z" -lto = "thin" -strip = "symbols" diff --git a/examples/x-sidebar-clone/LICENSE b/examples/x-sidebar-clone/LICENSE deleted file mode 100644 index 8f1b239..0000000 --- a/examples/x-sidebar-clone/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 Mahmoud Harmouch - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/examples/x-sidebar-clone/README.md b/examples/x-sidebar-clone/README.md deleted file mode 100644 index 1426557..0000000 --- a/examples/x-sidebar-clone/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# 📚 X Sidebar Clone Example - -## 🚀 Building and Running - -1. Fork/Clone the GitHub repository. - - ```bash - git clone https://github.com/wiseaidev/yew-sidebar - ``` - -1. Navigate to the application directory. - - ```bash - cd yew-sidebar/examples/x-sidebar-clone - ``` - -1. Run the client: - - ```sh - trunk serve --port 3000 - ``` -1. Uncomment this line: - - https://github.com/wiseaidev/yew-sidebar/blob/a9ed417300116b705a69ca368222692538a93baa/examples/tailwind/index.html#L5 - -1. Stop and rerun the client: - - ```sh - trunk serve --port 3000 - ``` - -Navigate to http://localhost:3000 to explore the landing page. diff --git a/examples/x-sidebar-clone/Trunk.toml b/examples/x-sidebar-clone/Trunk.toml deleted file mode 100644 index 123d93b..0000000 --- a/examples/x-sidebar-clone/Trunk.toml +++ /dev/null @@ -1,4 +0,0 @@ -[[hooks]] -stage = "post_build" -command = "sh" -command_arguments = ["-c", "npx tailwindcss -i ./css/tailwind.css -o ./dist/.stage/index.css"] \ No newline at end of file diff --git a/examples/x-sidebar-clone/_redirects b/examples/x-sidebar-clone/_redirects deleted file mode 100644 index f824337..0000000 --- a/examples/x-sidebar-clone/_redirects +++ /dev/null @@ -1 +0,0 @@ -/* /index.html 200 \ No newline at end of file diff --git a/examples/x-sidebar-clone/css/tailwind.css b/examples/x-sidebar-clone/css/tailwind.css deleted file mode 100644 index ea0b9fe..0000000 --- a/examples/x-sidebar-clone/css/tailwind.css +++ /dev/null @@ -1,15 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Roboto:300,400&display=swap'); - -@tailwind base; -@tailwind components; -@tailwind utilities; -@tailwind variants; - -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/x-sidebar-clone/images/logo.png b/examples/x-sidebar-clone/images/logo.png deleted file mode 100644 index 87ce9eb5d5eed0c5ce5f4eb17364517039cdedd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108232 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 diff --git a/examples/x-sidebar-clone/images/pic.png b/examples/x-sidebar-clone/images/pic.png deleted file mode 100644 index b443543fa19739cb9e7259b5c7e8dd2b6bcc31c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15104 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 diff --git a/examples/x-sidebar-clone/index.html b/examples/x-sidebar-clone/index.html deleted file mode 100644 index 5d6b681..0000000 --- a/examples/x-sidebar-clone/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - X Sidebar Powered by Yew Sidebar and Tailwind CSS - - - - diff --git a/examples/x-sidebar-clone/postcss.config.js b/examples/x-sidebar-clone/postcss.config.js deleted file mode 100644 index 33ad091..0000000 --- a/examples/x-sidebar-clone/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/examples/x-sidebar-clone/src/app.rs b/examples/x-sidebar-clone/src/app.rs deleted file mode 100644 index 0fc22ea..0000000 --- a/examples/x-sidebar-clone/src/app.rs +++ /dev/null @@ -1,13 +0,0 @@ -use yew::prelude::*; -use yew_router::prelude::*; - -use crate::router::{switch, Route}; - -#[function_component(App)] -pub fn app() -> Html { - html! { - - render={switch} /> - - } -} diff --git a/examples/x-sidebar-clone/src/main.rs b/examples/x-sidebar-clone/src/main.rs deleted file mode 100644 index 8165795..0000000 --- a/examples/x-sidebar-clone/src/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod app; -mod pages; -mod router; - -fn main() { - yew::Renderer::::new().render(); -} diff --git a/examples/x-sidebar-clone/src/pages/landing.rs b/examples/x-sidebar-clone/src/pages/landing.rs deleted file mode 100644 index 729a184..0000000 --- a/examples/x-sidebar-clone/src/pages/landing.rs +++ /dev/null @@ -1,394 +0,0 @@ -use yew::prelude::*; -use yew_sidebar::{MenuItem, Sidebar, SidebarProps}; - -#[function_component(LandingPage)] -pub fn landing_page() -> Html { - let menu_items = vec![ - MenuItem { - icon: html! { - // Twitter Home icon SVG - - - - - }, - text: "Home", - link: "#home", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter Explore icon SVG - - - - - }, - text: "Explore", - link: "#explore", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter Notifications icon SVG - - - - - - }, - text: "Notifications", - link: "#notifications", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter Messages icon SVG - - - }, - text: "Messages", - link: "#messages", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter Lists icon SVG - - - - }, - text: "Lists", - link: "#lists", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter Bookmarks icon SVG - - - - }, - text: "Bookmarks", - link: "#bookmarks", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter Communities icon SVG - - - - - - }, - text: "Communities", - link: "#communities", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter Premium icon SVG - - - - - - }, - text: "Premium", - link: "#premium", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter Profile icon SVG - - - - - - }, - text: "Profile", - link: "#profile", - submenus: vec![], - }, - MenuItem { - icon: html! { - // Twitter More icon SVG - - - - - - }, - text: "More", - link: "#more", - submenus: vec![], - }, - ]; - let toggle_icon_collapsed = html! { - - }; - let toggle_icon_expanded = html! { - - }; - let bottom_section = html! { -
- -
- Mahmoud Harmouch -
-
- }; - let sidebar_props = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "transparent", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-black", - bottom_section: bottom_section.clone(), - ..SidebarProps::default() - }; - - let sidebar_props_1 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "", - sider_collapsed: false, - width_collapsed: "w-24", - title: "", - width_expanded: "w-64", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-blue-800", - bottom_section: bottom_section.clone(), - ..SidebarProps::default() - }; - - let sidebar_props_2 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-gradient-to-r from-blue-500 to-blue-800", - bottom_section: bottom_section.clone(), - ..SidebarProps::default() - }; - - let sidebar_props_3 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-64", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "rounded border-2 bg-gray-900", - bottom_section: bottom_section.clone(), - ..SidebarProps::default() - }; - let sidebar_props_4 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-blue-800 animate-pulse", - bottom_section: bottom_section.clone(), - ..SidebarProps::default() - }; - let sidebar_props_5 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-orange-800", - bottom_section: bottom_section.clone(), - ..SidebarProps::default() - }; - let sidebar_props_6 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "hover:bg-purple-700", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-gradient-to-r from-purple-500 to-purple-800", - bottom_section: bottom_section.clone(), - ..SidebarProps::default() - }; - html! { -
- - - - - - - -
- } -} diff --git a/examples/x-sidebar-clone/src/pages/mod.rs b/examples/x-sidebar-clone/src/pages/mod.rs deleted file mode 100644 index 4383171..0000000 --- a/examples/x-sidebar-clone/src/pages/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod landing; diff --git a/examples/x-sidebar-clone/src/router.rs b/examples/x-sidebar-clone/src/router.rs deleted file mode 100644 index 9d49b4c..0000000 --- a/examples/x-sidebar-clone/src/router.rs +++ /dev/null @@ -1,16 +0,0 @@ -use yew::prelude::*; -use yew_router::prelude::*; - -use crate::pages::landing::LandingPage; - -#[derive(Clone, Routable, PartialEq)] -pub enum Route { - #[at("/")] - LandingPage, -} - -pub fn switch(routes: Route) -> Html { - match routes { - Route::LandingPage => html! { }, - } -} diff --git a/examples/x-sidebar-clone/tailwind.config.js b/examples/x-sidebar-clone/tailwind.config.js deleted file mode 100644 index 88f1dfd..0000000 --- a/examples/x-sidebar-clone/tailwind.config.js +++ /dev/null @@ -1,42 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - "./index.html", - "./src/**/*.{rs,html}" - ], - theme: { - extend: { - colors: { - 'ct-dark-600': '#222', - 'ct-dark-200': '#e5e7eb', - 'ct-dark-100': '#f5f6f7', - 'ct-blue-600': '#2363eb', - 'ct-yellow-600': '#f9d13e', - 'ct-red-500': '#ef4444', - }, - fontFamily: { - sans: ['Roboto', 'sans-serif'], - serif: ['Roboto', 'serif'], - }, - container: { - center: true, - padding: '1rem', - screens: { - sm: '480px', - md: '768px', - lg: '976px', - xl: '1440px', - }, - spacing: { - '128': '32rem', - '144': '36rem', - }, - borderRadius: { - '4xl': '2rem', - } - }, - }, - }, - plugins: [], -} - diff --git a/examples/yew/.gitignore b/examples/yew/.gitignore new file mode 100644 index 0000000..8400db7 --- /dev/null +++ b/examples/yew/.gitignore @@ -0,0 +1,2 @@ +target/**/* +dist/**/* \ No newline at end of file diff --git a/examples/tailwind/Cargo.lock b/examples/yew/Cargo.lock similarity index 95% rename from examples/tailwind/Cargo.lock rename to examples/yew/Cargo.lock index fba26e2..0ee191a 100644 --- a/examples/tailwind/Cargo.lock +++ b/examples/yew/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -624,10 +624,11 @@ checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -639,9 +640,9 @@ checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "log" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" @@ -879,11 +880,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -900,6 +902,26 @@ dependencies = [ "serde", ] +[[package]] +name = "sidebar" +version = "0.0.0" +dependencies = [ + "web-sys", + "yew", +] + +[[package]] +name = "sidebar-yew-example" +version = "0.1.0" +dependencies = [ + "console_error_panic_hook", + "log", + "sidebar", + "wasm-logger", + "yew", + "yew-router", +] + [[package]] name = "slab" version = "0.4.9" @@ -1045,23 +1067,24 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn 2.0.48", @@ -1070,21 +1093,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.40" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1092,9 +1116,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", @@ -1105,15 +1129,29 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-logger" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "074649a66bb306c8f2068c9016395fa65d8e08d2affcbf95acf3c24c3ab19718" +dependencies = [ + "log", + "wasm-bindgen", + "web-sys", +] [[package]] name = "web-sys" -version = "0.3.67" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -1153,15 +1191,6 @@ dependencies = [ "yew-macro", ] -[[package]] -name = "yew-accordion" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2abb6847c6781b4d3fcaf25bdb59d09d0e26537dd8f6363040f61f00982f1" -dependencies = [ - "yew", -] - [[package]] name = "yew-macro" version = "0.21.0" @@ -1206,20 +1235,3 @@ dependencies = [ "quote", "syn 2.0.48", ] - -[[package]] -name = "yew-sidebar" -version = "0.1.2" -dependencies = [ - "yew", - "yew-accordion", -] - -[[package]] -name = "yew-sidebar-example" -version = "0.1.0" -dependencies = [ - "yew", - "yew-router", - "yew-sidebar", -] diff --git a/examples/youtube-sidebar-clone/Cargo.toml b/examples/yew/Cargo.toml similarity index 73% rename from examples/youtube-sidebar-clone/Cargo.toml rename to examples/yew/Cargo.toml index f480271..462c9f1 100644 --- a/examples/youtube-sidebar-clone/Cargo.toml +++ b/examples/yew/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "youtube-sidebar-clone" +name = "sidebar-yew-example" version = "0.1.0" authors = ["Mahmoud Harmouch "] edition = "2021" @@ -7,7 +7,10 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -yew-sidebar = { path = "../../" } +sidebar = { path = "../../", features = ["yew"] } +console_error_panic_hook = "0.1.7" +log = "0.4.22" +wasm-logger = "0.2.0" yew = { version = "0.21.0", features = ["csr"], default-features = false } yew-router = { version = "0.18.0", default-features = false } diff --git a/examples/yew/LICENSE b/examples/yew/LICENSE new file mode 100644 index 0000000..e3b204b --- /dev/null +++ b/examples/yew/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright 2024 Mahmoud Harmouch + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/examples/yew/README.md b/examples/yew/README.md new file mode 100644 index 0000000..4354e8f --- /dev/null +++ b/examples/yew/README.md @@ -0,0 +1,84 @@ +# 📚 Sidebar Yew 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 [`trunk`](https://trunkrs.dev/)**: + + ```sh + cargo install --locked trunk + ``` + +1. **Add the Wasm target**: + + ```sh + rustup target add wasm32-unknown-unknown + ``` + +### 🪟 **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 `trunk`**: + + ```sh + cargo install --locked trunk + ``` + +1. **Add the Wasm target**: + + ```sh + rustup target add wasm32-unknown-unknown + ``` + +## 🚀 Building and Running + +1. Fork/Clone the GitHub repository. + + ```sh + git clone https://github.com/opensass/sidebar + ``` + +1. Navigate to the application directory. + + ```sh + cd sidebar/examples/yew + ``` + +1. Run the client: + + ```sh + trunk serve --port 3000 + ``` + +1. Uncomment this line: + https://github.com/opensass/sidebar/blob/7b63aedd42f9e317d9c3a8c41c2512bf74b9b4ea/examples/yew/index.html#L5 + +Navigate to http://localhost:3000 to explore all available components. diff --git a/examples/yew/Trunk.toml b/examples/yew/Trunk.toml new file mode 100644 index 0000000..c3c275b --- /dev/null +++ b/examples/yew/Trunk.toml @@ -0,0 +1,4 @@ +[[hooks]] +stage = "post_build" +command = "sh" +command_arguments = ["-c", "npx tailwindcss@v3 -i ./css/tailwind.css -o ./dist/.stage/index.css"] \ No newline at end of file diff --git a/examples/tailwind/_redirects b/examples/yew/_redirects similarity index 100% rename from examples/tailwind/_redirects rename to examples/yew/_redirects diff --git a/examples/yew/assets/logo.webp b/examples/yew/assets/logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..2576cb80f48321bca22c14107df57c4dbb4d8b9d GIT binary patch literal 18698 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 literal 0 HcmV?d00001 diff --git a/examples/tailwind/css/tailwind.css b/examples/yew/css/tailwind.css similarity index 100% rename from examples/tailwind/css/tailwind.css rename to examples/yew/css/tailwind.css diff --git a/examples/yew/index.html b/examples/yew/index.html new file mode 100644 index 0000000..9b5ff2f --- /dev/null +++ b/examples/yew/index.html @@ -0,0 +1,12 @@ + + + + + + Sidebar Yew Example + + + + + + diff --git a/examples/tailwind/postcss.config.js b/examples/yew/postcss.config.js similarity index 100% rename from examples/tailwind/postcss.config.js rename to examples/yew/postcss.config.js diff --git a/examples/tailwind/src/app.rs b/examples/yew/src/app.rs similarity index 100% rename from examples/tailwind/src/app.rs rename to examples/yew/src/app.rs diff --git a/examples/yew/src/main.rs b/examples/yew/src/main.rs new file mode 100644 index 0000000..8d912bf --- /dev/null +++ b/examples/yew/src/main.rs @@ -0,0 +1,9 @@ +mod app; +mod pages; +mod router; + +fn main() { + console_error_panic_hook::set_once(); + wasm_logger::init(wasm_logger::Config::default()); + yew::Renderer::::new().render(); +} diff --git a/examples/tailwind/src/pages/mod.rs b/examples/yew/src/pages.rs similarity index 100% rename from examples/tailwind/src/pages/mod.rs rename to examples/yew/src/pages.rs diff --git a/examples/yew/src/pages/landing.rs b/examples/yew/src/pages/landing.rs new file mode 100644 index 0000000..c7faff7 --- /dev/null +++ b/examples/yew/src/pages/landing.rs @@ -0,0 +1,682 @@ +use sidebar::yew::item::MenuItem; +use sidebar::yew::menu::Menu; +use sidebar::yew::sidebar::Sidebar; +use sidebar::yew::submenu::Submenu; +use yew::prelude::*; + +#[function_component(Example1)] +pub fn example1() -> Html { + let selected_label = use_state(|| "Overview".to_string()); + let logout = Callback::from(|_| log::info!("Logging out")); + + html! { + +
+ + } +} + +#[function_component(Example2)] +pub fn example2() -> Html { + let selected_label = use_state(|| "".to_string()); + html! { + + + }} + selected={selected_label.clone()} + /> + }} + selected={selected_label.clone()} + /> + + + } +} + +#[function_component(Example3)] +pub fn example3() -> Html { + let logout_callback = Callback::from(|_| log::info!("Logout clicked")); + let selected_label = use_state(|| "".to_string()); + + html! { + + + }} + badge={Some("New")} + item_class="flex items-center justify-between px-4 py-2 rounded-md" + selected={selected_label.clone()} + /> + }} + item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition" + selected={selected_label.clone()} + /> + }} + item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition" + selected={selected_label.clone()} + /> + + + }} + item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition" + selected={selected_label.clone()} + /> + }} + item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition" + selected={selected_label.clone()} + /> + }}> + }} + item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition" + selected={selected_label.clone()} + /> + }} + item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition" + selected={selected_label.clone()} + /> + + + + }} + badge={Some("v2.3")} + item_class="flex items-center justify-between px-4 py-2 rounded-md hover:bg-gray-100 transition" + selected={selected_label.clone()} + /> + }} + item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition" + selected={selected_label.clone()} + /> + + + } +} + +#[function_component(Example4)] +pub fn example4() -> Html { + let selected_label = use_state(|| "".to_string()); + html! { + + + }} + selected={selected_label.clone()} + /> + }} + selected={selected_label.clone()} + /> + + + } +} + +#[function_component(Example5)] +pub fn example5() -> Html { + let selected_label = use_state(|| "".to_string()); + html! { + + + }} + selected={selected_label.clone()} + badge={Some("Beta")} + /> + }} + selected={selected_label.clone()} + /> + + + }}> + }} + selected={selected_label.clone()} + /> + }} + selected={selected_label.clone()} + /> + + + + } +} + +#[function_component(Example6)] +pub fn example6() -> Html { + let selected_label = use_state(|| "".to_string()); + html! { + + + }} + selected={selected_label.clone()} + /> + }} + selected={selected_label.clone()} + /> + + + } +} + +#[function_component(Example7)] +pub fn example7() -> Html { + let selected_label = use_state(|| "".to_string()); + html! { + + + }} + selected={selected_label.clone()} + /> + }} + selected={selected_label.clone()} + /> + + + } +} + +#[function_component(Example8)] +pub fn example8() -> Html { + let selected_label = use_state(|| "".to_string()); + html! { + + + }} + selected={selected_label.clone()} + badge={Some("On")} + /> + }} + selected={selected_label.clone()} + badge={Some("Test")} + /> + + + } +} + +#[function_component(Example9)] +pub fn example9() -> Html { + let selected_label = use_state(|| "".to_string()); + html! { + + + }} + selected={selected_label.clone()} + /> + }} + selected={selected_label.clone()} + /> + + + } +} + +#[function_component(LandingPage)] +pub fn landing_page() -> Html { + html! { +
+

{ "Sidebar Yew Examples" }

+
+
+

{ "Basic Dashboard" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+#[function_component(Example1)]
+pub fn example1() -> Html {
+    let selected_label = use_state(|| "Overview".to_string());
+    let logout = Callback::from(|_| log::info!("Logging out"));
+    html! {
+        
+            
+                }} selected={selected_label.clone()} />
+                }} selected={selected_label.clone()} />
+            
+        
+    }
+}"# }
+                    
+ +
+
+

{ "Minimal Sidebar" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+#[function_component(Example2)]
+pub fn example2() -> Html {
+    let selected_label = use_state(|| "".to_string());
+    html! {
+        
+            
+                }} selected={selected_label.clone()} />
+                }} selected={selected_label.clone()} />
+            
+        
+    }
+}"# }
+                    
+ +
+
+

{ "Creative Sidebar" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::submenu::Submenu;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+
+#[function_component(Example3)]
+pub fn example3() -> Html {
+    let logout_callback = Callback::from(|_| log::info!("Logout clicked"));
+    let selected_label = use_state(|| "".to_string());
+    
+    html! {
+        
+            
+                }}
+                    badge={Some("New")}
+                    item_class="flex items-center justify-between px-4 py-2 rounded-md"
+                    selected={selected_label.clone()}
+                />
+                }}
+                    item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition"
+                    selected={selected_label.clone()}
+                />
+                }}
+                    item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition"
+                    selected={selected_label.clone()}
+                />
+            
+
+            
+                }}
+                    item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition"
+                    selected={selected_label.clone()}
+                />
+                }}
+                    item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition"
+                    selected={selected_label.clone()}
+                />
+                }}>
+                    }}
+                        item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition"
+                        selected={selected_label.clone()}
+                    />
+                    }}
+                        item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition"
+                        selected={selected_label.clone()}
+                    />
+                
+            
+
+            
+                }}
+                    badge={Some("v2.3")}
+                    item_class="flex items-center justify-between px-4 py-2 rounded-md hover:bg-gray-100 transition"
+                    selected={selected_label.clone()}
+                />
+                }}
+                    item_class="flex items-center px-4 py-2 rounded-md hover:bg-gray-100 transition"
+                    selected={selected_label.clone()}
+                />
+            
+        
+    }
+}"# }
+                    
+ +
+
+

{ "Hover Effects" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+
+#[function_component(Example4)]
+pub fn example4() -> Html {
+    let selected_label = use_state(|| "".to_string());
+    html! {
+        
+            
+                }} selected={selected_label.clone()} />
+                }} selected={selected_label.clone()} />
+            
+        
+    }
+}"# }
+                    
+ +
+
+

{ "Analytics + Admin" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::submenu::Submenu;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+#[function_component(Example5)]
+pub fn example5() -> Html {
+    let selected_label = use_state(|| "".to_string());
+    html! {
+        
+            
+                }} selected={selected_label.clone()} badge={Some("Beta")} />
+                }} selected={selected_label.clone()} />
+            
+            
+                }}>
+                    }} selected={selected_label.clone()} />
+                    }} selected={selected_label.clone()} />
+                
+            
+        
+    }
+}"# }
+                    
+ +
+
+

{ "HR Management" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+
+#[function_component(Example6)]
+pub fn example6() -> Html {
+    let selected_label = use_state(|| "".to_string());
+    html! {
+        
+            
+                }} selected={selected_label.clone()} />
+                }} selected={selected_label.clone()} />
+            
+        
+    }
+}"# }
+                    
+ +
+
+

{ "DevOps Style" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+
+#[function_component(Example7)]
+pub fn example7() -> Html {
+    let selected_label = use_state(|| "".to_string());
+    html! {
+        
+            
+                }} selected={selected_label.clone()} />
+                }} selected={selected_label.clone()} />
+            
+        
+    }
+}"# }
+                    
+ +
+
+

{ "Feature Flags" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+
+#[function_component(Example8)]
+pub fn example8() -> Html {
+    let selected_label = use_state(|| "".to_string());
+    html! {
+        
+            
+                }} selected={selected_label.clone()} badge={Some("On")} />
+                }} selected={selected_label.clone()} badge={Some("Test")} />
+            
+        
+    }
+}"# }
+                    
+ +
+
+

{ "Marketing Panel" }

+
+                        { r#"use yew::prelude::*;
+use sidebar::yew::item::MenuItem;
+use sidebar::yew::sidebar::Sidebar;
+use sidebar::yew::menu::Menu;
+
+#[function_component(Example9)]
+pub fn example9() -> Html {
+    let selected_label = use_state(|| "".to_string());
+    html! {
+        
+            
+                }} selected={selected_label.clone()} />
+                }} selected={selected_label.clone()} />
+            
+        
+    }
+}"# }
+                    
+ +
+
+
+ } +} diff --git a/examples/tailwind/src/router.rs b/examples/yew/src/router.rs similarity index 100% rename from examples/tailwind/src/router.rs rename to examples/yew/src/router.rs diff --git a/examples/tailwind/tailwind.config.js b/examples/yew/tailwind.config.js similarity index 100% rename from examples/tailwind/tailwind.config.js rename to examples/yew/tailwind.config.js diff --git a/examples/youtube-sidebar-clone/.gitignore b/examples/youtube-sidebar-clone/.gitignore deleted file mode 100644 index e512471..0000000 --- a/examples/youtube-sidebar-clone/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target/**/* \ No newline at end of file diff --git a/examples/youtube-sidebar-clone/Cargo.lock b/examples/youtube-sidebar-clone/Cargo.lock deleted file mode 100644 index 7cb7e00..0000000 --- a/examples/youtube-sidebar-clone/Cargo.lock +++ /dev/null @@ -1,1225 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "anymap2" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "boolinator" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[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 = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[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.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "gloo" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d" -dependencies = [ - "gloo-console 0.2.3", - "gloo-dialogs 0.1.1", - "gloo-events 0.1.2", - "gloo-file 0.2.3", - "gloo-history 0.1.5", - "gloo-net 0.3.1", - "gloo-render 0.1.1", - "gloo-storage 0.2.2", - "gloo-timers 0.2.6", - "gloo-utils 0.1.7", - "gloo-worker 0.2.1", -] - -[[package]] -name = "gloo" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd35526c28cc55c1db77aed6296de58677dbab863b118483a27845631d870249" -dependencies = [ - "gloo-console 0.3.0", - "gloo-dialogs 0.2.0", - "gloo-events 0.2.0", - "gloo-file 0.3.0", - "gloo-history 0.2.2", - "gloo-net 0.4.0", - "gloo-render 0.2.0", - "gloo-storage 0.3.0", - "gloo-timers 0.3.0", - "gloo-utils 0.2.0", - "gloo-worker 0.4.0", -] - -[[package]] -name = "gloo-console" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f" -dependencies = [ - "gloo-utils 0.1.7", - "js-sys", - "serde", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-console" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a17868f56b4a24f677b17c8cb69958385102fa879418052d60b50bc1727e261" -dependencies = [ - "gloo-utils 0.2.0", - "js-sys", - "serde", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-dialogs" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-dialogs" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4748e10122b01435750ff530095b1217cf6546173459448b83913ebe7815df" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-events" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-events" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c26fb45f7c385ba980f5fa87ac677e363949e065a083722697ef1b2cc91e41" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-file" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7" -dependencies = [ - "gloo-events 0.1.2", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-file" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97563d71863fb2824b2e974e754a81d19c4a7ec47b09ced8a0e6656b6d54bd1f" -dependencies = [ - "futures-channel", - "gloo-events 0.2.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-history" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f" -dependencies = [ - "gloo-events 0.1.2", - "gloo-utils 0.1.7", - "serde", - "serde-wasm-bindgen 0.5.0", - "serde_urlencoded", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-history" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "903f432be5ba34427eac5e16048ef65604a82061fe93789f2212afc73d8617d6" -dependencies = [ - "getrandom", - "gloo-events 0.2.0", - "gloo-utils 0.2.0", - "serde", - "serde-wasm-bindgen 0.6.3", - "serde_urlencoded", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-net" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.1.7", - "http", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-net" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ac9e8288ae2c632fa9f8657ac70bfe38a1530f345282d7ba66a1f70b72b7dc4" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.2.0", - "http", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-render" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-render" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56008b6744713a8e8d98ac3dcb7d06543d5662358c9c805b4ce2167ad4649833" -dependencies = [ - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-storage" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480" -dependencies = [ - "gloo-utils 0.1.7", - "js-sys", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-storage" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" -dependencies = [ - "gloo-utils 0.2.0", - "js-sys", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-utils" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "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 = "gloo-worker" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a" -dependencies = [ - "anymap2", - "bincode", - "gloo-console 0.2.3", - "gloo-utils 0.1.7", - "js-sys", - "serde", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-worker" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76495d3dd87de51da268fa3a593da118ab43eb7f8809e17eb38d3319b424e400" -dependencies = [ - "bincode", - "futures", - "gloo-utils 0.2.0", - "gloo-worker-macros", - "js-sys", - "pinned", - "serde", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-worker-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956caa58d4857bc9941749d55e4bd3000032d8212762586fa5705632967140e7" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "hermit-abi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "implicit-clone" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc06a255cbf402a52ae399c05a518c68c569c916ea11423620111df576b9b9bb" -dependencies = [ - "implicit-clone-derive", - "indexmap", -] - -[[package]] -name = "implicit-clone-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9311685eb9a34808bbb0608ad2fcab9ae216266beca5848613e95553ac914e3b" -dependencies = [ - "quote", - "syn 2.0.48", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "js-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "libc" -version = "0.2.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pinned" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a829027bd95e54cfe13e3e258a1ae7b645960553fb82b75ff852c29688ee595b" -dependencies = [ - "futures", - "rustversion", - "thiserror", -] - -[[package]] -name = "prettyplease" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" -dependencies = [ - "proc-macro2", - "syn 2.0.48", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prokio" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b55e106e5791fa5a13abd13c85d6127312e8e09098059ca2bc9b03ca4cf488" -dependencies = [ - "futures", - "gloo 0.8.1", - "num_cpus", - "once_cell", - "pin-project", - "pinned", - "tokio", - "tokio-stream", - "wasm-bindgen-futures", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "route-recognizer" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "serde" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" -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-wasm-bindgen" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b713f70513ae1f8d92665bbbbda5c295c2cf1da5542881ae5eefe20c9af132" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "serde_derive" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_json" -version = "1.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "pin-project-lite", -] - -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[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.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "winnow" -version = "0.5.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" -dependencies = [ - "memchr", -] - -[[package]] -name = "x-sidebar-clone" -version = "0.1.0" -dependencies = [ - "yew", - "yew-router", - "yew-sidebar", -] - -[[package]] -name = "yew" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f1a03f255c70c7aa3e9c62e15292f142ede0564123543c1cc0c7a4f31660cac" -dependencies = [ - "console_error_panic_hook", - "futures", - "gloo 0.10.0", - "implicit-clone", - "indexmap", - "js-sys", - "prokio", - "rustversion", - "serde", - "slab", - "thiserror", - "tokio", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "yew-macro", -] - -[[package]] -name = "yew-accordion" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2abb6847c6781b4d3fcaf25bdb59d09d0e26537dd8f6363040f61f00982f1" -dependencies = [ - "yew", -] - -[[package]] -name = "yew-macro" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fd8ca5166d69e59f796500a2ce432ff751edecbbb308ca59fd3fe4d0343de2" -dependencies = [ - "boolinator", - "once_cell", - "prettyplease", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "yew-router" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca1d5052c96e6762b4d6209a8aded597758d442e6c479995faf0c7b5538e0c6" -dependencies = [ - "gloo 0.10.0", - "js-sys", - "route-recognizer", - "serde", - "serde_urlencoded", - "tracing", - "urlencoding", - "wasm-bindgen", - "web-sys", - "yew", - "yew-router-macro", -] - -[[package]] -name = "yew-router-macro" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bfd190a07ca8cfde7cd4c52b3ac463803dc07323db8c34daa697e86365978c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "yew-sidebar" -version = "0.1.2" -dependencies = [ - "yew", - "yew-accordion", -] diff --git a/examples/youtube-sidebar-clone/LICENSE b/examples/youtube-sidebar-clone/LICENSE deleted file mode 100644 index 8f1b239..0000000 --- a/examples/youtube-sidebar-clone/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 Mahmoud Harmouch - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/examples/youtube-sidebar-clone/README.md b/examples/youtube-sidebar-clone/README.md deleted file mode 100644 index 8b332a2..0000000 --- a/examples/youtube-sidebar-clone/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# 📚 Youtube Sidebar Clone Example - -## 🚀 Building and Running - -1. Fork/Clone the GitHub repository. - - ```bash - git clone https://github.com/wiseaidev/yew-sidebar - ``` - -1. Navigate to the application directory. - - ```bash - cd yew-sidebar/examples/youtube-sidebar-clone - ``` - -1. Run the client: - - ```sh - trunk serve --port 3000 - ``` -1. Uncomment this line: - - https://github.com/wiseaidev/yew-sidebar/blob/a9ed417300116b705a69ca368222692538a93baa/examples/tailwind/index.html#L5 - -1. Stop and rerun the client: - - ```sh - trunk serve --port 3000 - ``` - -Navigate to http://localhost:3000 to explore the landing page. diff --git a/examples/youtube-sidebar-clone/Trunk.toml b/examples/youtube-sidebar-clone/Trunk.toml deleted file mode 100644 index 123d93b..0000000 --- a/examples/youtube-sidebar-clone/Trunk.toml +++ /dev/null @@ -1,4 +0,0 @@ -[[hooks]] -stage = "post_build" -command = "sh" -command_arguments = ["-c", "npx tailwindcss -i ./css/tailwind.css -o ./dist/.stage/index.css"] \ No newline at end of file diff --git a/examples/youtube-sidebar-clone/_redirects b/examples/youtube-sidebar-clone/_redirects deleted file mode 100644 index f824337..0000000 --- a/examples/youtube-sidebar-clone/_redirects +++ /dev/null @@ -1 +0,0 @@ -/* /index.html 200 \ No newline at end of file diff --git a/examples/youtube-sidebar-clone/css/tailwind.css b/examples/youtube-sidebar-clone/css/tailwind.css deleted file mode 100644 index ea0b9fe..0000000 --- a/examples/youtube-sidebar-clone/css/tailwind.css +++ /dev/null @@ -1,15 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Roboto:300,400&display=swap'); - -@tailwind base; -@tailwind components; -@tailwind utilities; -@tailwind variants; - -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/youtube-sidebar-clone/images/logo.png b/examples/youtube-sidebar-clone/images/logo.png deleted file mode 100644 index acc0cc6ee71be36e8158dac23608572c93a52d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13763 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

mI8v36>VaKjMERDNvoenNa_fRer>e5C~8|` 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 P7RW%?1X`!<690byUTk)} diff --git a/examples/youtube-sidebar-clone/index.html b/examples/youtube-sidebar-clone/index.html deleted file mode 100644 index 32c666a..0000000 --- a/examples/youtube-sidebar-clone/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - Youtube Sidebar Powered by Yew Sidebar - - - - diff --git a/examples/youtube-sidebar-clone/postcss.config.js b/examples/youtube-sidebar-clone/postcss.config.js deleted file mode 100644 index 33ad091..0000000 --- a/examples/youtube-sidebar-clone/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/examples/youtube-sidebar-clone/src/app.rs b/examples/youtube-sidebar-clone/src/app.rs deleted file mode 100644 index 0fc22ea..0000000 --- a/examples/youtube-sidebar-clone/src/app.rs +++ /dev/null @@ -1,13 +0,0 @@ -use yew::prelude::*; -use yew_router::prelude::*; - -use crate::router::{switch, Route}; - -#[function_component(App)] -pub fn app() -> Html { - html! { - - render={switch} /> - - } -} diff --git a/examples/youtube-sidebar-clone/src/main.rs b/examples/youtube-sidebar-clone/src/main.rs deleted file mode 100644 index 8165795..0000000 --- a/examples/youtube-sidebar-clone/src/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod app; -mod pages; -mod router; - -fn main() { - yew::Renderer::::new().render(); -} diff --git a/examples/youtube-sidebar-clone/src/pages/landing.rs b/examples/youtube-sidebar-clone/src/pages/landing.rs deleted file mode 100644 index ae71de5..0000000 --- a/examples/youtube-sidebar-clone/src/pages/landing.rs +++ /dev/null @@ -1,407 +0,0 @@ -use yew::prelude::*; -use yew_sidebar::{MenuItem, Sidebar, SidebarProps}; - -#[function_component(LandingPage)] -pub fn landing_page() -> Html { - let menu_items = vec![ - MenuItem { - icon: html! { - - - - }, - text: "Home", - link: "#home", - title: "", - class: "", - submenus: vec![], - }, - MenuItem { - icon: html! { - - - - }, - text: "Shorts", - link: "#shorts", - submenus: vec![], - class: "", - title: "", - }, - MenuItem { - icon: html! { - - - - }, - text: "Subscriptions", - link: "#subscriptions", - submenus: vec![], - class: "border-b pb-4 pr-2", - title: "", - }, - MenuItem { - icon: html! { - - - - }, - text: "Your channel", - link: "#channel", - submenus: vec![], - class: "", - title: "You>", - }, - MenuItem { - icon: html! { - - - - }, - text: "History", - link: "#history", - submenus: vec![], - class: "", - title: "", - }, - MenuItem { - icon: html! { - - - - }, - text: "Your Videos", - link: "#videos", - submenus: vec![], - class: "", - title: "", - }, - MenuItem { - icon: html! { - - - - }, - text: "Watch Later", - link: "#watch-later", - submenus: vec![], - class: "", - title: "", - }, - MenuItem { - icon: html! { - - - - }, - text: "Liked videos", - link: "#liked-videos", - submenus: vec![], - class: "border-b pb-4", - title: "", - }, - MenuItem { - icon: html! { - - - - }, - text: "Trending", - link: "#trending", - submenus: vec![], - class: "", - title: "Explore", - }, - MenuItem { - icon: html! { - - - - }, - text: "Music", - link: "#music", - submenus: vec![], - class: "", - title: "", - }, - MenuItem { - icon: html! { - - - - }, - text: "Gaming", - link: "#gaming", - submenus: vec![], - class: "", - title: "", - }, - MenuItem { - icon: html! { - - - - }, - text: "Sports", - link: "#sports", - submenus: vec![], - class: "border-b pb-4", - title: "", - }, - ]; - let toggle_icon_collapsed = html! { - - }; - let toggle_icon_expanded = html! { - - }; - let sidebar_props = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "images/logo.png", - logo_img_class: "w-20", - sider_collapsed: false, - width_collapsed: "w-26", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "transparent pl-1", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-black", - ..SidebarProps::default() - }; - - let sidebar_props_1 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "images/logo.png", - logo_img_class: "w-20 animate-pulse", - sider_collapsed: false, - width_collapsed: "w-24", - title: "", - width_expanded: "w-64", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-blue-800", - ..SidebarProps::default() - }; - - let sidebar_props_2 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "images/logo.png", - logo_img_class: "w-20 animate-spin", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-gradient-to-r from-blue-500 to-blue-800", - ..SidebarProps::default() - }; - - let sidebar_props_3 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "images/logo.png", - logo_img_class: "w-20 animate-bounce", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-64", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "rounded border-2 bg-gray-900", - ..SidebarProps::default() - }; - let sidebar_props_4 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "images/logo.png", - logo_img_class: "w-20 animate-ping", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-blue-800 animate-pulse", - ..SidebarProps::default() - }; - let sidebar_props_5 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "images/logo.png", - logo_img_class: "w-20 animate-heartbeat", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-orange-800", - ..SidebarProps::default() - }; - let sidebar_props_6 = SidebarProps { - toggle_icon_collapsed: toggle_icon_collapsed.clone(), - toggle_icon_expanded: toggle_icon_expanded.clone(), - logo_src: "images/logo.png", - logo_img_class: "w-20", - sider_collapsed: false, - width_collapsed: "w-20", - title: "", - width_expanded: "w-48", - padding_collapsed: "p-5", - justify_content: "flex-col", - padding_expanded: "p-4", - font: "text-lg text-white", - display_collapsed: "hidden", - button_background_color: "hover:bg-purple-700", - display_expanded: "flex", - align_items: "items-start", - height: "h-screen", - button_height: "h-16", - menu_items: menu_items.clone(), - background_color: "bg-gradient-to-r from-purple-500 to-purple-800", - ..SidebarProps::default() - }; - html! { -
- - - - - - - -
- } -} diff --git a/examples/youtube-sidebar-clone/src/pages/mod.rs b/examples/youtube-sidebar-clone/src/pages/mod.rs deleted file mode 100644 index 4383171..0000000 --- a/examples/youtube-sidebar-clone/src/pages/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod landing; diff --git a/examples/youtube-sidebar-clone/src/router.rs b/examples/youtube-sidebar-clone/src/router.rs deleted file mode 100644 index 9d49b4c..0000000 --- a/examples/youtube-sidebar-clone/src/router.rs +++ /dev/null @@ -1,16 +0,0 @@ -use yew::prelude::*; -use yew_router::prelude::*; - -use crate::pages::landing::LandingPage; - -#[derive(Clone, Routable, PartialEq)] -pub enum Route { - #[at("/")] - LandingPage, -} - -pub fn switch(routes: Route) -> Html { - match routes { - Route::LandingPage => html! { }, - } -} diff --git a/examples/youtube-sidebar-clone/tailwind.config.js b/examples/youtube-sidebar-clone/tailwind.config.js deleted file mode 100644 index 88f1dfd..0000000 --- a/examples/youtube-sidebar-clone/tailwind.config.js +++ /dev/null @@ -1,42 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - "./index.html", - "./src/**/*.{rs,html}" - ], - theme: { - extend: { - colors: { - 'ct-dark-600': '#222', - 'ct-dark-200': '#e5e7eb', - 'ct-dark-100': '#f5f6f7', - 'ct-blue-600': '#2363eb', - 'ct-yellow-600': '#f9d13e', - 'ct-red-500': '#ef4444', - }, - fontFamily: { - sans: ['Roboto', 'sans-serif'], - serif: ['Roboto', 'serif'], - }, - container: { - center: true, - padding: '1rem', - screens: { - sm: '480px', - md: '768px', - lg: '976px', - xl: '1440px', - }, - spacing: { - '128': '32rem', - '144': '36rem', - }, - borderRadius: { - '4xl': '2rem', - } - }, - }, - }, - plugins: [], -} - diff --git a/src/dioxus.rs b/src/dioxus.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/dioxus.rs @@ -0,0 +1 @@ + diff --git a/src/leptos.rs b/src/leptos.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/leptos.rs @@ -0,0 +1 @@ + diff --git a/src/lib.rs b/src/lib.rs index 38276bf..66be7a5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,445 +1,15 @@ #![doc( - html_logo_url = "https://github.com/next-rs/yew-sidebar/assets/62179149/94fb2191-884e-4643-a794-d8e5c459f5d6", - html_favicon_url = "https://github.com/next-rs/yew-sidebar/assets/62179149/e0c325e5-16b8-439d-b7c2-48b2ffe8476d" + html_logo_url = "https://raw.githubusercontent.com/opensass/sidebar/refs/heads/main/assets/logo.webp", + html_favicon_url = "https://github.com/opensass/sidebar/blob/main/assets/favicon.png" )] +#![cfg_attr(docsrs, feature(doc_auto_cfg))] +#![doc = include_str!("../README.md")] -//! # Yew Sidebar - Documentation -//! -//! Welcome to the official Yew Sidebar documentation. This library -//! provides a flexible and customizable sidebar component for your Yew applications. -//! -//! ## Usage -//! -//! To use the Yew Sidebar library, add the following dependency to your `Cargo.toml` file: -//! -//! ```sh -//! cargo add yew-sidebar -//! ``` -//! -//! To integrate the library into your Yew application, you can use the `Sidebar` component. -//! Here's a simple example of how to use it: -//! -//! ```rust,no_run -//! use yew::prelude::*; -//! use yew_sidebar::{Sidebar, SidebarProps, MenuItem}; -//! -//! // Your Yew component structure here... -//! -//! #[function_component] -//! pub fn MySidebarComponent() -> Html { -//! // Your component logic here... -//! -//! let menu_items = vec![ -//! MenuItem { -//! icon: html! { /* Your icon HTML here */ }, -//! text: "Home", -//! link: "/home", -//! class: "your-menu-item-class", -//! title: "Your Menu Title", -//! submenus: vec![], // Nested MenuItem structures if needed -//! }, -//! // Add more MenuItem structures as needed... -//! ]; -//! -//! let sidebar_props = SidebarProps { -//! fixed: false, -//! sider_collapsed: false, -//! title: "Your Sidebar Title", -//! menu_items, -//! // Customize other props as needed... -//! // ... -//! ..SidebarProps::default() -//! }; -//! -//! html! { -//! -//! } -//! } -//! ``` -//! -//! For more detailed information, check the [examples] provided in the library. -//! -//! [examples]: https://github.com/next-rs/yew-sidebar/examples -//! -//! ## Configuration -//! -//! Yew Sidebar allows you to configure various aspects of the sidebar through the `SidebarProps` -//! structure. You can customize properties such as width, padding, display, styling, icons, and more. -//! Refer to the `SidebarProps` documentation for detailed configuration options. -//! -//! ```rust,no_run -//! use yew_sidebar::{SidebarProps, MenuItem}; -//! use yew::prelude::*; -//! -//! let menu_items = vec![ -//! MenuItem { -//! icon: html! { /* Your icon HTML here */ }, -//! text: "Home", -//! link: "/home", -//! class: "your-menu-item-class", -//! title: "Your Menu Title", -//! submenus: vec![], // Nested MenuItem structures if needed -//! }, -//! // Add more MenuItem structures as needed... -//! ]; -//! -//! let sidebar_props = SidebarProps { -//! fixed: false, -//! sider_collapsed: false, -//! title: "Your Sidebar Title", -//! menu_items, -//! // Customize other props as needed... -//! // ... -//! ..SidebarProps::default() -//! }; -//! -//! let sidebar_component = html! { -//! -//! }; -//! ``` -//! -//! ## Contribution -//! -//! If you encounter any issues or have suggestions for improvements, feel free to contribute -//! to the [GitHub repository](https://github.com/next-rs/yew-sidebar). We appreciate your feedback -//! and involvement in making Yew Sidebar better! -//! -//! ## Acknowledgments -//! -//! Special thanks to the Yew community and contributors for such an amazing framework. +#[cfg(feature = "yew")] +pub mod yew; -use yew::prelude::*; -use yew_accordion::{Accordion, AccordionButton}; +#[cfg(feature = "dio")] +pub mod dioxus; -const WIDTH_COLLAPSED: &'static str = "w-16"; -const WIDTH_EXPANDED: &'static str = "w-64"; -const PADDING_COLLAPSED: &'static str = "p-2"; -const PADDING_EXPANDED: &'static str = "p-4"; -const DISPLAY_COLLAPSED: &'static str = "hidden"; -const DISPLAY_EXPANDED: &'static str = "flex"; -const JUSTIFY_CONTENT: &'static str = "justify-start"; -const ALIGN_ITEMS: &'static str = "items-center"; -const HEIGHT: &'static str = "h-screen"; -const BACKGROUND_COLOR: &'static str = "bg-gray-800"; -const FONT: &'static str = "text-black"; -const ICON_COLOR: &'static str = "white"; -const BUTTON_BORDER_RADIUS: &'static str = "rounded"; -const BUTTON_BACKGROUND_COLOR: &'static str = "bg-blue-600"; -const BUTTON_WIDTH: &'static str = "w-12"; -const BUTTON_HEIGHT: &'static str = "h-12"; -const MENU_ITEM: &'static str = "\ - text-gray-300 \ - hover:bg-gray-800 \ - hover:text-white \ - flex \ - items-center \ - space-x-2 \ - p-1 \ - rounded \ - transition duration-300 \ -"; -const LOGO_CLASS: &str = "flex items-center"; -const LOGO_IMG_CLASS: &str = "w-32 md:w-40"; - -#[derive(Properties, Clone, PartialEq)] -pub struct SidebarProps { - // General Props - #[prop_or(false)] - pub fixed: bool, - #[prop_or(false)] - pub sider_collapsed: bool, - #[prop_or_default] - pub menu_items: Vec, - // Prop for toggle icon when collapsed - #[prop_or_default] - pub toggle_icon_collapsed: Html, - // Prop for toggle icon when expanded - #[prop_or_default] - pub toggle_icon_expanded: Html, - - // Layout Props - // Prop for width of collapsed state - #[prop_or(WIDTH_COLLAPSED)] - pub width_collapsed: &'static str, - // Prop for width of expanded state - #[prop_or(WIDTH_EXPANDED)] - pub width_expanded: &'static str, - // Prop for padding of collapsed state - #[prop_or(PADDING_COLLAPSED)] - pub padding_collapsed: &'static str, - // Prop for padding of expanded state - #[prop_or(PADDING_EXPANDED)] - pub padding_expanded: &'static str, - // Prop for display of collapsed state - #[prop_or(DISPLAY_COLLAPSED)] - pub display_collapsed: &'static str, - // Prop for display of expanded state - #[prop_or(DISPLAY_EXPANDED)] - pub display_expanded: &'static str, - // Prop for justify-content - #[prop_or(JUSTIFY_CONTENT)] - pub justify_content: &'static str, - // Prop for align-items - #[prop_or(ALIGN_ITEMS)] - pub align_items: &'static str, - // Prop for height - #[prop_or(HEIGHT)] - pub height: &'static str, - - // Style Props - // Prop for background color - #[prop_or(BACKGROUND_COLOR)] - pub background_color: &'static str, - // Prop for font - #[prop_or(FONT)] - pub font: &'static str, - // Prop for icon color - #[prop_or(ICON_COLOR)] - pub icon_color: &'static str, - // Prop for button border-radius - #[prop_or(BUTTON_BORDER_RADIUS)] - pub button_border_radius: &'static str, - // Prop for button background color - #[prop_or(BUTTON_BACKGROUND_COLOR)] - pub button_background_color: &'static str, - // Prop for button width - #[prop_or(BUTTON_WIDTH)] - pub button_width: &'static str, - // Prop for button height - #[prop_or(BUTTON_HEIGHT)] - pub button_height: &'static str, - - // Title Props - // Prop for title - #[prop_or_default] - pub title: &'static str, - - // Logo Props - #[prop_or("images/logo.png")] - pub logo_src: &'static str, - #[prop_or("logo")] - pub logo_alt: &'static str, - #[prop_or(LOGO_IMG_CLASS)] - pub logo_img_class: &'static str, - #[prop_or("/")] - pub logo_link: &'static str, - #[prop_or(LOGO_CLASS)] - pub logo_class: &'static str, - - // Bottom section props - #[prop_or_default] - pub bottom_section: Html, - - /// Properties for the Accordion components, aka submenus. - #[prop_or_default] - /// Size of the accordion. Possible values: "sm", "md", "lg". - pub size: &'static str, - #[prop_or_default] - /// ARIA controls attribute for accessibility. - pub aria_controls: &'static str, - #[prop_or_default] - /// Class for the container element. - pub container_class: &'static str, - #[prop_or_default] - /// Class for the expanded element. - pub expanded_element_class: &'static str, - #[prop_or_default] - /// Class for the collapsed element. - pub collapsed_element_class: &'static str, - #[prop_or_default] - /// Class for the content container. - pub content_container_class: &'static str, -} - -impl Default for SidebarProps { - fn default() -> Self { - Self { - fixed: false, - sider_collapsed: false, - title: "", - menu_items: Vec::new(), - width_collapsed: WIDTH_COLLAPSED, - width_expanded: WIDTH_EXPANDED, - padding_collapsed: PADDING_COLLAPSED, - padding_expanded: PADDING_EXPANDED, - display_collapsed: DISPLAY_COLLAPSED, - display_expanded: DISPLAY_EXPANDED, - justify_content: JUSTIFY_CONTENT, - align_items: ALIGN_ITEMS, - height: HEIGHT, - background_color: BACKGROUND_COLOR, - font: FONT, - icon_color: ICON_COLOR, - button_border_radius: BUTTON_BORDER_RADIUS, - button_background_color: BUTTON_BACKGROUND_COLOR, - button_width: BUTTON_WIDTH, - button_height: BUTTON_HEIGHT, - logo_src: "images/logo.png", - logo_alt: "logo", - logo_img_class: LOGO_CLASS, - logo_link: "/", - logo_class: LOGO_CLASS, - toggle_icon_collapsed: html! {}, - toggle_icon_expanded: html! {}, - bottom_section: html! {}, - size: "md", - aria_controls: "accordion", - container_class: "text-white", - expanded_element_class: "text-white", - collapsed_element_class: "text-white", - content_container_class: "text-white", - } - } -} - -#[function_component(Sidebar)] -pub fn sidebar(props: &SidebarProps) -> Html { - let is_collapsed_handle = use_state(|| props.sider_collapsed); - let is_collapsed = (*is_collapsed_handle).clone(); - - html! { - <> - { if props.fixed { - html! { -
- } - } else { - html! {} - } } -
- { render_logo_and_title(&props, is_collapsed_handle) } - { render_menu(&props, is_collapsed) } - { props.bottom_section.clone() } -
- - } -} - -fn render_logo_and_title(props: &SidebarProps, is_collapsed_handle: UseStateHandle) -> Html { - let on_toggle = { - let is_collapsed_handle = is_collapsed_handle.clone(); - Callback::from(move |_| { - is_collapsed_handle.set(!*is_collapsed_handle); - }) - }; - let props_clone = props.clone(); - html! { -
- - if !*is_collapsed_handle && !props.logo_src.is_empty() { { render_logo(&props) } } - if !*is_collapsed_handle { { props.title } } -
- } -} - -fn render_logo(props: &SidebarProps) -> Html { - html! { - - } -} - -fn render_menu(props: &SidebarProps, is_collapsed: bool) -> Html { - html! { -
    - { for props.menu_items.iter().map(|item| render_menu_item(&props, item, is_collapsed)) } -
- } -} - -fn render_menu_item(props: &SidebarProps, item: &MenuItem, is_collapsed: bool) -> Html { - let submenu_html = if !item.submenus.is_empty() { - html! { - -
- { item.icon.clone() } - if !is_collapsed { { &item.text } } -
- - }} - collapsed_element={html! { - -
- { item.icon.clone() } - if !is_collapsed { { &item.text } } -
-
- }} - size={props.size} - aria_controls={props.aria_controls} - container_class={props.container_class} - expanded_element_class={props.expanded_element_class} - collapsed_element_class={props.collapsed_element_class} - content_container_class={props.content_container_class} - > -
    - { for item.submenus.iter().map(|submenu| render_menu_item(&props, submenu, is_collapsed)) } -
-
- } - } else { - html! { - <>{ item.icon.clone() }if !is_collapsed { { &item.text } } - } - }; - html! { -
  • -
    { item.title }
    - { submenu_html } -
  • - } -} - -#[derive(Clone, Properties, PartialEq)] -pub struct MenuItem { - #[prop_or_default] - pub icon: Html, - #[prop_or_default] - pub text: &'static str, - #[prop_or_default] - pub link: &'static str, - #[prop_or_default] - pub class: &'static str, - #[prop_or_default] - pub title: &'static str, - #[prop_or_default] - pub submenus: Vec, -} +#[cfg(feature = "lep")] +pub mod leptos; diff --git a/src/yew.rs b/src/yew.rs new file mode 100644 index 0000000..fe19ec3 --- /dev/null +++ b/src/yew.rs @@ -0,0 +1,9 @@ +#![doc = include_str!("../YEW.md")] + +pub mod context; +pub mod item; +pub mod logo; +pub mod menu; +pub mod profile; +pub mod sidebar; +pub mod submenu; diff --git a/src/yew/context.rs b/src/yew/context.rs new file mode 100644 index 0000000..1a1d2f4 --- /dev/null +++ b/src/yew/context.rs @@ -0,0 +1,15 @@ +use std::rc::Rc; +use yew::prelude::*; + +#[derive(Clone, PartialEq)] +pub struct SidebarConfig { + pub is_collapsed: bool, +} + +#[derive(Clone, PartialEq)] +pub struct SidebarContext(pub Rc>); + +#[hook] +pub fn use_sidebar() -> SidebarContext { + use_context::().expect("SidebarContext not found") +} diff --git a/src/yew/item.rs b/src/yew/item.rs new file mode 100644 index 0000000..4d88d49 --- /dev/null +++ b/src/yew/item.rs @@ -0,0 +1,138 @@ +use crate::yew::context::SidebarContext; +use crate::yew::context::use_sidebar; +use web_sys::{UrlSearchParams, wasm_bindgen::JsValue, window}; +use yew::prelude::*; + +#[derive(Properties, Clone, PartialEq)] +pub struct MenuItemProps { + #[prop_or_default] + pub label: &'static str, + #[prop_or_default] + pub href: &'static str, + #[prop_or_default] + pub icon_html: Html, + #[prop_or_default] + pub badge: Option<&'static str>, + + // General styling + #[prop_or("text-decoration: none;")] + pub anchor_style: &'static str, + #[prop_or_default] + pub anchor_class: &'static str, + + #[prop_or("display: flex; align-items: center; gap: 10px; padding: 8px; border-radius: 6px;")] + pub item_style: &'static str, + #[prop_or_default] + pub item_class: &'static str, + + // Collapsed layout style + #[prop_or( + "display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 8px; border-radius: 6px;" + )] + pub collapsed_style: &'static str, + #[prop_or("font-size: 10px; text-align: center;")] + pub collapsed_label_style: &'static str, + + // Selected item style + #[prop_or("background-color: #1e293b; color: white;")] + pub selected_style: &'static str, + + // Badge style + #[prop_or( + "background: red; color: white; padding: 2px 6px; border-radius: 12px; font-size: 10px;" + )] + pub badge_style: &'static str, + + pub selected: UseStateHandle, +} + +#[function_component(MenuItem)] +pub fn menu_item(props: &MenuItemProps) -> Html { + let SidebarContext(ctx) = use_sidebar(); + + let location = window().unwrap().location(); + let search = location.search(); + let url_params = UrlSearchParams::new_with_str(&search.unwrap_or_default()).unwrap(); + let selected_from_url = url_params.get("selected").unwrap_or_default(); + + let is_selected = *props.selected == props.label || selected_from_url == props.label; + let final_style = format!( + "{} {}", + if ctx.is_collapsed { + props.collapsed_style + } else { + props.item_style + }, + if is_selected { + props.selected_style + } else { + "" + } + ); + + let on_click = { + let label = props.label.to_string(); + let selected = props.selected.clone(); + Callback::from(move |e: MouseEvent| { + e.prevent_default(); + let label = label.clone(); + if let Some(win) = window() { + if let Ok(url) = web_sys::Url::new(&win.location().href().unwrap()) { + let params = UrlSearchParams::new_with_str(url.search().as_str()).unwrap(); + params.set("selected", &label); + url.set_search(¶ms.to_string().as_string().unwrap()); + win.history() + .unwrap() + .push_state_with_url(&JsValue::NULL, "", Some(&url.href())) + .ok(); + } + } + selected.set(label); + }) + }; + + let item_layout = if ctx.is_collapsed { + html! { +
    + { props.icon_html.clone() } + { props.label } +
    + } + } else { + html! { +
    + { props.icon_html.clone() } + { props.label } + { + if let Some(badge) = props.badge { + html! { + { badge } + } + } else { + html! {} + } + } +
    + } + }; + + html! { + + { item_layout } + + } +} diff --git a/src/yew/logo.rs b/src/yew/logo.rs new file mode 100644 index 0000000..3f01ed3 --- /dev/null +++ b/src/yew/logo.rs @@ -0,0 +1,27 @@ +use yew::prelude::*; + +#[derive(Properties, Clone, PartialEq)] +pub struct LogoProps { + #[prop_or("/")] + pub href: &'static str, + #[prop_or_default] + pub img_url: &'static str, + + #[prop_or("padding: 1rem;")] + pub style: &'static str, + #[prop_or_default] + pub class: &'static str, +} + +#[function_component(Logo)] +pub fn logo(props: &LogoProps) -> Html { + html! { + + if props.img_url.is_empty() { + { "LOGO" } + } else { + Logo + } + + } +} diff --git a/src/yew/menu.rs b/src/yew/menu.rs new file mode 100644 index 0000000..a82972f --- /dev/null +++ b/src/yew/menu.rs @@ -0,0 +1,33 @@ +use crate::yew::context::SidebarContext; +use crate::yew::context::use_sidebar; +use yew::prelude::*; + +#[derive(Properties, Clone, PartialEq)] +pub struct MenuProps { + #[prop_or_default] + pub children: Children, + #[prop_or_default] + pub sub_heading: &'static str, + #[prop_or("padding: 1rem;")] + pub style: &'static str, + #[prop_or_default] + pub class: &'static str, +} + +#[function_component(Menu)] +pub fn menu(props: &MenuProps) -> Html { + let SidebarContext(ctx) = use_sidebar(); + + html! { +
    + if !ctx.is_collapsed { +

    { props.sub_heading }

    + } + { for props.children.iter() } +
    + } +} diff --git a/src/yew/profile.rs b/src/yew/profile.rs new file mode 100644 index 0000000..efb74a9 --- /dev/null +++ b/src/yew/profile.rs @@ -0,0 +1,44 @@ +use yew::prelude::*; + +#[derive(Properties, Clone, PartialEq)] +pub struct ProfileProps { + #[prop_or_default] + pub user_name: &'static str, + #[prop_or_default] + pub designation: &'static str, + #[prop_or_default] + pub user_img: &'static str, + #[prop_or_default] + pub is_collapsed: bool, + #[prop_or_default] + pub on_logout: Callback<()>, + + #[prop_or( + "display: flex; align-items: center; gap: 10px; margin: 1rem; padding: 1rem; background: #f0f0f0; border-radius: 8px;" + )] + pub style: &'static str, + #[prop_or_default] + pub class: &'static str, +} + +#[function_component(Profile)] +pub fn profile(props: &ProfileProps) -> Html { + if props.is_collapsed { + html! {} + } else { + html! { +
    + User +
    + { props.user_name } +
    { props.designation }
    +
    + +
    + } + } +} diff --git a/src/yew/sidebar.rs b/src/yew/sidebar.rs new file mode 100644 index 0000000..f6b4017 --- /dev/null +++ b/src/yew/sidebar.rs @@ -0,0 +1,93 @@ +use crate::yew::logo::Logo; +use crate::yew::menu::Menu; +use crate::yew::{context::*, profile::Profile}; +use web_sys::window; +use yew::prelude::*; + +#[derive(Properties, Clone, PartialEq)] +pub struct SidebarProps { + #[prop_or_default] + pub children: ChildrenWithProps, + + #[prop_or(true)] + pub show_profile: bool, + + #[prop_or_default] + pub user_name: &'static str, + #[prop_or_default] + pub designation: &'static str, + #[prop_or_default] + pub user_img: &'static str, + + #[prop_or_default] + pub on_logout: Callback<()>, + + #[prop_or("width: 270px; background: white;")] + pub style: &'static str, + #[prop_or_default] + pub class: &'static str, + + #[prop_or( + "display: flex; justify-content: space-between; align-items: center; padding: 1rem;" + )] + pub header_style: &'static str, + #[prop_or_default] + pub header_class: &'static str, + + #[prop_or_default] + pub logo_img_url: &'static str, + #[prop_or_default] + pub logo_href: &'static str, +} +#[function_component(Sidebar)] +pub fn sidebar(props: &SidebarProps) -> Html { + let is_mobile = use_state(|| { + let width = window().unwrap().inner_width().unwrap().as_f64().unwrap(); + width < 768.0 + }); + + let config = use_state(|| SidebarConfig { + is_collapsed: *is_mobile, + }); + + let toggle_sidebar = { + let config = config.clone(); + Callback::from(move |_| { + config.set(SidebarConfig { + is_collapsed: !config.is_collapsed, + }); + }) + }; + let sidebar_style = if config.is_collapsed { + "width: 80px; background: white;" + } else { + props.style + }; + + html! { + context={SidebarContext(config.clone().into())}> + + > + } +} diff --git a/src/yew/submenu.rs b/src/yew/submenu.rs new file mode 100644 index 0000000..12d797f --- /dev/null +++ b/src/yew/submenu.rs @@ -0,0 +1,54 @@ +use crate::yew::context::SidebarContext; +use crate::yew::context::use_sidebar; +use crate::yew::item::MenuItem; +use yew::prelude::*; + +#[derive(Properties, Clone, PartialEq)] +pub struct SubmenuProps { + #[prop_or_default] + pub title: &'static str, + #[prop_or_default] + pub icon_html: Html, + #[prop_or_default] + pub children: ChildrenWithProps, + + #[prop_or_default] + pub class: &'static str, + #[prop_or("padding: 10px; cursor: pointer; display: flex; gap: 10px; align-items: center;")] + pub style: &'static str, +} + +#[function_component(Submenu)] +pub fn submenu(props: &SubmenuProps) -> Html { + let SidebarContext(ctx) = use_sidebar(); + let is_open = use_state(|| false); + + let onclick = { + let is_open = is_open.clone(); + Callback::from(move |_| is_open.set(!*is_open)) + }; + + html! { + <> +
    + { props.icon_html.clone() } + if !ctx.is_collapsed { + { props.title } + { if *is_open { "▲" } else { "▼" } } + } +
    + if *is_open { +
    + { for props.children.iter() } +
    + } + + } +}

    + }} + selected={selected_label.clone()} + /> + }} + selected={selected_label.clone()} + /> +