diff --git a/Cargo.lock b/Cargo.lock index edb385f..d959366 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,6 +90,17 @@ dependencies = [ "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.5", + "wasm-bindgen-futures", +] + [[package]] name = "anyhow" version = "1.0.93" @@ -109,14 +120,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] -name = "async-recursion" -version = "1.1.1" +name = "async-lock" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", + "event-listener", + "event-listener-strategy", + "pin-project-lite", ] [[package]] @@ -132,9 +143,9 @@ dependencies = [ [[package]] name = "attribute-derive" -version = "0.9.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f1ee502851995027b06f99f5ffbeffa1406b38d0b318a1ebfa469332c6cbafd" +checksum = "0053e96dd3bec5b4879c23a138d6ef26f2cb936c9cdc96274ac2b9ed44b5bb54" dependencies = [ "attribute-derive-macro", "derive-where", @@ -146,14 +157,14 @@ dependencies = [ [[package]] name = "attribute-derive-macro" -version = "0.9.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3601467f634cfe36c4780ca9c75dea9a5b34529c1f2810676a337e7e0997f954" +checksum = "463b53ad0fd5b460af4b1915fe045ff4d946d025fb6c4dc3337752eaa980f71b" dependencies = [ "collection_literals", "interpolator", "manyhow", - "proc-macro-utils 0.8.0", + "proc-macro-utils", "proc-macro2", "quote", "quote-use", @@ -263,30 +274,14 @@ dependencies = [ ] [[package]] -name = "ciborium" -version = "0.2.2" +name = "codee" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +checksum = "5d3ad3122b0001c7f140cf4d605ef9a9e2c24d96ab0b4fb4347b76de2425f445" 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", + "serde_json", + "thiserror 1.0.69", ] [[package]] @@ -301,6 +296,15 @@ 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.14.1" @@ -354,6 +358,12 @@ dependencies = [ "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" @@ -380,18 +390,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "crunchy" -version = "0.2.2" +name = "crossbeam-utils" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "dashmap" -version = "5.5.3" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ "cfg-if", + "crossbeam-utils", "hashbrown 0.14.5", "lock_api", "once_cell", @@ -459,6 +470,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "either_of" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d1e2e7b8b6deaf1ae68f1d8796dec8732cff85d27fdbf4bc4460145a067ed0b" +dependencies = [ + "pin-project-lite", +] + [[package]] name = "env_filter" version = "0.1.2" @@ -498,6 +518,27 @@ dependencies = [ "windows-sys 0.52.0", ] +[[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 = "fastrand" version = "2.2.0" @@ -513,7 +554,9 @@ dependencies = [ "convert_case", "floating-ui-leptos", "leptos", + "leptos-node-ref", "log", + "send_wrapper", "tailwind_fuse", ] @@ -557,7 +600,8 @@ dependencies = [ "dyn_std", "floating-ui-dom", "leptos", - "paste", + "leptos-node-ref", + "send_wrapper", "wasm-bindgen-test", "web-sys", ] @@ -570,7 +614,9 @@ dependencies = [ "console_log", "floating-ui-leptos", "leptos", + "leptos-node-ref", "log", + "send_wrapper", "wasm-bindgen", "web-sys", ] @@ -584,8 +630,10 @@ dependencies = [ "convert_case", "floating-ui-leptos", "leptos", + "leptos-node-ref", "leptos_router", "log", + "send_wrapper", "wasm-bindgen", "web-sys", ] @@ -694,6 +742,7 @@ dependencies = [ "futures-core", "futures-task", "futures-util", + "num_cpus", ] [[package]] @@ -902,7 +951,7 @@ dependencies = [ "serde", "serde-wasm-bindgen 0.5.0", "serde_urlencoded", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "web-sys", ] @@ -919,7 +968,7 @@ dependencies = [ "serde", "serde-wasm-bindgen 0.6.5", "serde_urlencoded", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "web-sys", ] @@ -939,7 +988,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -960,7 +1009,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -981,7 +1030,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1017,7 +1066,7 @@ dependencies = [ "js-sys", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "web-sys", ] @@ -1032,7 +1081,7 @@ dependencies = [ "js-sys", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "web-sys", ] @@ -1115,7 +1164,7 @@ dependencies = [ "js-sys", "pinned", "serde", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1134,14 +1183,10 @@ dependencies = [ ] [[package]] -name = "half" -version = "2.4.1" +name = "guardian" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] +checksum = "493913a18c0d7bebb75127a26a432162c59edbe06f6cf712001e3e769345e8b5" [[package]] name = "hashbrown" @@ -1233,6 +1278,20 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "hydration_context" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef13071fe13b55c85fe2b70246d2e3b49d2c6a764fd3e0edaf262cc385ff1854" +dependencies = [ + "futures", + "once_cell", + "or_poisoned", + "pin-project-lite", + "serde", + "throw_error", +] + [[package]] name = "hyper" version = "1.5.0" @@ -1501,12 +1560,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" -[[package]] -name = "inventory" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" - [[package]] name = "iri-string" version = "0.7.7" @@ -1525,9 +1578,9 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -1563,80 +1616,84 @@ dependencies = [ "simple_asn1", ] -[[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.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cbb3237c274dadf00dcc27db96c52601b40375117178fb24a991cda073624f0" +checksum = "ba5046c590aea121f6ad5e71fcb75453a933425d39527b9a3b1b295235afc8df" dependencies = [ + "any_spawner", "cfg-if", + "either_of", + "futures", + "hydration_context", "leptos_config", "leptos_dom", + "leptos_hot_reload", "leptos_macro", - "leptos_reactive", "leptos_server", + "oco_ref", + "or_poisoned", + "paste", + "reactive_graph", + "rustc-hash", + "send_wrapper", + "serde", + "serde_qs", "server_fn", - "tracing", + "slotmap", + "tachys", + "thiserror 2.0.5", + "throw_error", "typed-builder", "typed-builder-macro", "wasm-bindgen", "web-sys", ] +[[package]] +name = "leptos-node-ref" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0497a30ec51e76bdbf9542d29b65399c70d88c0397bc38551d8eff0385847bfc" +dependencies = [ + "leptos", + "send_wrapper", +] + [[package]] name = "leptos_config" -version = "0.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ed778611380ddea47568ac6ad6ec5158d39b5bd59e6c4dcd24efc15dc3dc0d" +checksum = "5e2d64c43e2554108c26da3127f8384d92ca76c6f0b7288d1c09c8cc68152064" dependencies = [ "config", "regex", "serde", - "thiserror", + "thiserror 2.0.5", "typed-builder", ] [[package]] name = "leptos_dom" -version = "0.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8401c46c86c1f4c16dcb7881ed319fcdca9cda9b9e78a6088955cb423afcf119" +checksum = "6c15aca81dc2edd040b51c46734f65c6f36e6ba8a31347c1354c94b958044ae0" dependencies = [ - "async-recursion", - "cfg-if", - "drain_filter_polyfill", - "futures", - "getrandom", - "html-escape", - "indexmap", - "itertools", "js-sys", - "leptos_reactive", - "once_cell", - "pad-adapter", - "paste", - "rustc-hash", - "serde", - "serde_json", - "server_fn", - "smallvec", - "tracing", + "or_poisoned", + "reactive_graph", + "send_wrapper", + "tachys", "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", ] [[package]] name = "leptos_hot_reload" -version = "0.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb53d4794240b684a2f4be224b84bee9e62d2abc498cf2bcd643cd565e01d96" +checksum = "0445f3a62696d2d66bef288911af34405718880b4b8dd6c5cfb7751fd8ffcc6b" dependencies = [ "anyhow", "camino", @@ -1652,9 +1709,9 @@ dependencies = [ [[package]] name = "leptos_macro" -version = "0.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b13bc3db70715cd8218c4535a5af3ae3c0e5fea6f018531fc339377b36bc0e0" +checksum = "92f690c955274f1722ee6c66463ace79301d53a8c2bf7f6e4e61b978ca239e20" dependencies = [ "attribute-derive", "cfg-if", @@ -1669,77 +1726,62 @@ dependencies = [ "rstml", "server_fn_macro", "syn 2.0.87", - "tracing", "uuid", ] [[package]] -name = "leptos_reactive" -version = "0.6.15" +name = "leptos_router" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4161acbf80f59219d8d14182371f57302bc7ff81ee41aba8ba1ff7295727f23" +checksum = "32a4f1784486ebf36805dac22faee21e3e610aa64b6662a7386f065eeec27ae8" dependencies = [ - "base64 0.22.1", - "cfg-if", + "any_spawner", + "either_of", "futures", - "indexmap", + "gloo-net 0.6.0", "js-sys", - "oco_ref", - "paste", - "pin-project", - "rustc-hash", - "self_cell", - "serde", - "serde-wasm-bindgen 0.6.5", - "serde_json", - "slotmap", - "thiserror", - "tracing", + "leptos", + "leptos_router_macro", + "once_cell", + "or_poisoned", + "reactive_graph", + "send_wrapper", + "tachys", + "thiserror 2.0.5", + "url", "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", ] [[package]] -name = "leptos_router" -version = "0.6.15" +name = "leptos_router_macro" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d71dea7d42c0d29c40842750232d3425ed1cf10e313a1f898076d20871dad32" +checksum = "eee7ecef3f1c69b51864190c564e4873d84f200e44efb37934208f9525f02a5f" dependencies = [ - "cfg-if", - "gloo-net 0.6.0", - "itertools", - "js-sys", - "lazy_static", - "leptos", - "linear-map", - "once_cell", - "percent-encoding", - "send_wrapper", - "serde", - "serde_json", - "serde_qs 0.13.0", - "thiserror", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "proc-macro-error2", + "proc-macro2", + "quote", ] [[package]] name = "leptos_server" -version = "0.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a97eb90a13f71500b831c7119ddd3bdd0d7ae0a6b0487cade4fddeed3b8c03f" +checksum = "93450589df3b3e398c7f5ea64d8f1c8369b1ba9b90e1f70f6cb996b8d443ca3e" dependencies = [ - "inventory", - "lazy_static", - "leptos_macro", - "leptos_reactive", + "any_spawner", + "base64 0.22.1", + "codee", + "futures", + "hydration_context", + "or_poisoned", + "reactive_graph", + "send_wrapper", "serde", + "serde_json", "server_fn", - "thiserror", - "tracing", + "tachys", ] [[package]] @@ -1753,10 +1795,6 @@ name = "linear-map" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" -dependencies = [ - "serde", - "serde_test", -] [[package]] name = "linux-raw-sys" @@ -1788,9 +1826,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "manyhow" -version = "0.10.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91ea592d76c0b6471965708ccff7e6a5d277f676b90ab31f4d3f3fc77fade64" +checksum = "b33efb3ca6d3b07393750d4030418d594ab1139cee518f0dc88db70fec873587" dependencies = [ "manyhow-macros", "proc-macro2", @@ -1800,11 +1838,11 @@ dependencies = [ [[package]] name = "manyhow-macros" -version = "0.10.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64621e2c08f2576e4194ea8be11daf24ac01249a4f53cd8befcbb7077120ead" +checksum = "46fce34d199b78b6e6073abf984c9cf5fd3e9330145a93ee0738a7443e371495" dependencies = [ - "proc-macro-utils 0.8.0", + "proc-macro-utils", "proc-macro2", "quote", ] @@ -1852,6 +1890,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "next_tuple" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60993920e071b0c9b66f14e2b32740a4e27ffc82854dcd72035887f336a09a28" + [[package]] name = "nom" version = "7.1.3" @@ -1917,12 +1961,12 @@ dependencies = [ [[package]] name = "oco_ref" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51ebcefb2f0b9a5e0bea115532c8ae4215d1b01eff176d0f4ba4192895c2708" +checksum = "64b94982fe39a861561cf67ff17a7849f2cedadbbad960a797634032b7abb998" dependencies = [ "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1978,10 +2022,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] -name = "pad-adapter" -version = "0.1.1" +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 = "56d80efc4b6721e8be2a10a5df21a30fa0b470f1539e53d8b4e6e75faf938b63" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -2074,7 +2124,7 @@ checksum = "a829027bd95e54cfe13e3e258a1ae7b645960553fb82b75ff852c29688ee595b" dependencies = [ "futures", "rustversion", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2146,17 +2196,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", -] - -[[package]] -name = "proc-macro-utils" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f59e109e2f795a5070e69578c4dc101068139f74616778025ae1011d4cd41a8" -dependencies = [ - "proc-macro2", - "quote", - "smallvec", + "syn 2.0.87", ] [[package]] @@ -2234,7 +2274,56 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82ebfb7faafadc06a7ab141a6f67bcfb24cb8beb158c6fe933f2f035afa99f35" dependencies = [ - "proc-macro-utils 0.10.0", + "proc-macro-utils", + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "reactive_graph" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c27f54685c1416af1f323a0c40e71cbdae281a1ebc623591790d367222d0ac65" +dependencies = [ + "any_spawner", + "async-lock", + "futures", + "guardian", + "hydration_context", + "or_poisoned", + "pin-project-lite", + "rustc-hash", + "send_wrapper", + "serde", + "slotmap", + "thiserror 2.0.5", + "web-sys", +] + +[[package]] +name = "reactive_stores" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efe3f866edc7647e19a68a229a2e5cc9730549836d722eeaa073116f2b07966e" +dependencies = [ + "guardian", + "itertools", + "or_poisoned", + "paste", + "reactive_graph", + "reactive_stores_macro", + "rustc-hash", +] + +[[package]] +name = "reactive_stores_macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d86e4f08f361b05d11422398cef4bc4cf356f2fdd2f06a96646b0e9cd902226" +dependencies = [ + "convert_case", + "proc-macro-error2", "proc-macro2", "quote", "syn 2.0.87", @@ -2301,16 +2390,17 @@ checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] name = "rstml" -version = "0.11.2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe542870b8f59dd45ad11d382e5339c9a1047cde059be136a7016095bbdefa77" +checksum = "51187e564f12336ef40cd04f6f4d805d6919188001dcf1e0a021898ea0fe28ce" dependencies = [ + "derive-where", "proc-macro2", "proc-macro2-diagnostics", "quote", "syn 2.0.87", "syn_derive", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2321,9 +2411,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "1.1.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustix" @@ -2481,12 +2571,6 @@ dependencies = [ "libc", ] -[[package]] -name = "self_cell" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" - [[package]] name = "semver" version = "1.0.23" @@ -2566,17 +2650,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_qs" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" -dependencies = [ - "percent-encoding", - "serde", - "thiserror", -] - [[package]] name = "serde_qs" version = "0.13.0" @@ -2585,7 +2658,7 @@ checksum = "cd34f36fe4c5ba9654417139a9b3a20d2e1de6012ee678ad14d240c22c78d8d6" dependencies = [ "percent-encoding", "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2597,15 +2670,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_test" -version = "1.0.177" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f901ee573cab6b3060453d2d5f0bae4e6d628c23c0a962ff9b5f1d7c8d4f1ed" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2620,12 +2684,11 @@ dependencies = [ [[package]] name = "server_fn" -version = "0.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fae7a3038a32e5a34ba32c6c45eb4852f8affaf8b794ebfcd4b1099e2d62ebe" +checksum = "033cb8014aa86a7ce0c6ee58d23dce1a078b2e320dc6c53bb439663993199b1f" dependencies = [ "bytes", - "ciborium", "const_format", "dashmap", "futures", @@ -2633,12 +2696,14 @@ dependencies = [ "http 1.1.0", "js-sys", "once_cell", + "pin-project-lite", "send_wrapper", "serde", "serde_json", - "serde_qs 0.12.0", + "serde_qs", "server_fn_macro_default", - "thiserror", + "thiserror 2.0.5", + "throw_error", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -2649,9 +2714,9 @@ dependencies = [ [[package]] name = "server_fn_macro" -version = "0.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1" +checksum = "0249e8a55ca464a1e69f02a95d562f2c65e92e301093a02ebf15d21f68f2a99e" dependencies = [ "const_format", "convert_case", @@ -2663,9 +2728,9 @@ dependencies = [ [[package]] name = "server_fn_macro_default" -version = "0.6.15" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2aa8119b558a17992e0ac1fd07f080099564f24532858811ce04f742542440" +checksum = "91c54a6d43cd0f3d2bdf0c85b6119f378b6b89d528159af9cde77f229faeecbc" dependencies = [ "server_fn_macro", "syn 2.0.87", @@ -2694,7 +2759,7 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint", "num-traits", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -2713,7 +2778,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ - "serde", "version_check", ] @@ -2844,6 +2908,38 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "tachys" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be68dfd4abf192e11a1bdd484239daa84ffa6fcd27c25cf4f011b2b0fb27ddb" +dependencies = [ + "any_spawner", + "const_str_slice_concat", + "drain_filter_polyfill", + "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", + "send_wrapper", + "slotmap", + "throw_error", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "tailwind_fuse" version = "0.3.1" @@ -2872,7 +2968,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643caef17e3128658ff44d85923ef2d28af81bb71e0d67bbfe1d76f19a73e053" +dependencies = [ + "thiserror-impl 2.0.5", ] [[package]] @@ -2886,6 +2991,26 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "thiserror-impl" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "995d0bbc9995d1f19d28b7215a9352b0fc3cd3a2d2ec95c2cadc485cdedbcdde" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[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 = "time" version = "0.3.36" @@ -3124,18 +3249,18 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typed-builder" -version = "0.18.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77739c880e00693faef3d65ea3aad725f196da38b22fdc7ea6ded6e1ce4d3add" +checksum = "7e14ed59dc8b7b26cacb2a92bad2e8b1f098806063898ab42a3bd121d7d45e75" dependencies = [ "typed-builder-macro", ] [[package]] name = "typed-builder-macro" -version = "0.18.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f718dfaf347dcb5b983bfc87608144b0bad87970aebcbea5ce44d2a30c08e63" +checksum = "560b82d656506509d43abe30e0ba64c56b1953ab3d4fe7ba5902747a7a3cedd5" dependencies = [ "proc-macro2", "quote", @@ -3534,7 +3659,7 @@ dependencies = [ "rustversion", "serde", "slab", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index 64eb003..a35d8dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,9 +21,11 @@ console_error_panic_hook = "0.1.7" console_log = "1.0.0" dyn_derive = "0.3.4" dyn_std = "0.3.3" -leptos = "0.6.14" -leptos_router = "0.6.14" +leptos = "0.7.0" +leptos_router = "0.7.0" +leptos-node-ref = "0.0.3" log = "0.4.22" +send_wrapper = "0.6.0" serde = { version = "1.0.209", features = ["derive"] } serde_json = "1.0.127" wasm-bindgen = "0.2.93" @@ -49,6 +51,7 @@ features = [ "IntersectionObserverEntry", "IntersectionObserverInit", "Node", + "Range", "ResizeObserver", "ResizeObserverEntry", "Selection", diff --git a/book-examples/Cargo.toml b/book-examples/Cargo.toml index a37e1d9..e17e27f 100644 --- a/book-examples/Cargo.toml +++ b/book-examples/Cargo.toml @@ -15,7 +15,9 @@ console_log.workspace = true convert_case = "0.6.0" floating-ui-leptos = { path = "../packages/leptos" } leptos = { workspace = true, features = ["csr"] } +leptos-node-ref.workspace = true log.workspace = true +send_wrapper.workspace = true tailwind_fuse = "0.3.1" [features] diff --git a/book-examples/src/app.rs b/book-examples/src/app.rs index 91fd1ee..e573bfa 100644 --- a/book-examples/src/app.rs +++ b/book-examples/src/app.rs @@ -1,36 +1,48 @@ -use leptos::*; +use leptos::prelude::*; #[component] pub fn App() -> impl IntoView { - let mut views: Vec = vec![]; + let mut views: Vec = vec![]; #[cfg(feature = "placement")] { use crate::positioning::placement::PlacementDemo; - views.push(view! { - - }); + views.push( + view! { + + } + .into_any(), + ); } #[cfg(feature = "shift")] { use crate::positioning::shift::ShiftDemo; - views.push(view! { - - }); + views.push( + view! { + + } + .into_any(), + ); } #[cfg(feature = "flip")] { use crate::positioning::flip::FlipDemo; - views.push(view! { - - }); + views.push( + view! { + + } + .into_any(), + ); } #[cfg(feature = "size")] { use crate::positioning::size::SizeDemo; - views.push(view! { - - }); + views.push( + view! { + + } + .into_any(), + ); } views.into_view() diff --git a/book-examples/src/components/chrome.rs b/book-examples/src/components/chrome.rs index 3eeb313..9e3a483 100644 --- a/book-examples/src/components/chrome.rs +++ b/book-examples/src/components/chrome.rs @@ -1,7 +1,7 @@ // TODO: remove #![allow(unused)] -use leptos::{html::Div, *}; +use leptos::{context::Provider, html::Div, prelude::*}; use tailwind_fuse::tw_merge; #[derive(Clone, Copy, Debug, PartialEq)] @@ -17,13 +17,13 @@ pub struct ChromeContext(pub NodeRef
); #[component] pub fn Chrome( - #[prop(default = false.into(), into)] center: MaybeSignal, - #[prop(default = Scrollable::None.into(), into)] scrollable: MaybeSignal, - #[prop(default = true.into(), into)] relative: MaybeSignal, + #[prop(default = false.into(), into)] center: Signal, + #[prop(default = Scrollable::None.into(), into)] scrollable: Signal, + #[prop(default = true.into(), into)] relative: Signal, #[prop(into, optional)] label: MaybeProp, - #[prop(default = 305.into(), into)] scroll_height: MaybeSignal, - #[prop(default = true.into(), into)] shadow: MaybeSignal, - #[prop(default = false.into(), into)] tall: MaybeSignal, + #[prop(default = 305.into(), into)] scroll_height: Signal, + #[prop(default = true.into(), into)] shadow: Signal, + #[prop(default = false.into(), into)] tall: Signal, children: Children, ) -> impl IntoView { let scrollable_ref: NodeRef
= NodeRef::new(); @@ -57,11 +57,7 @@ pub fn Chrome( )} >
-
+
format!("{}px", scroll_height.get()), - false => "1px".into(), + style:height={if scrollable_y.get() { + format!("{}px", scroll_height.get()) + } else { + "1px".to_owned() }} /> @@ -106,9 +103,10 @@ pub fn Chrome(
format!("{}px", scroll_height.get()), - false => "1px".into(), + style:height={if scrollable_y.get() { + format!("{}px", scroll_height.get()) + } else { + "1px".to_owned() }} /> diff --git a/book-examples/src/components/floating.rs b/book-examples/src/components/floating.rs index 07bb35d..6a2df7a 100644 --- a/book-examples/src/components/floating.rs +++ b/book-examples/src/components/floating.rs @@ -1,11 +1,9 @@ use floating_ui_leptos::{ - use_floating, IntoReference, MiddlewareVec, Placement, Strategy, UseFloatingOptions, - UseFloatingReturn, -}; -use leptos::{ - html::{AnyElement, Div}, - *, + use_floating, MiddlewareVec, Placement, Strategy, UseFloatingOptions, UseFloatingReturn, }; +use leptos::prelude::*; +use leptos_node_ref::AnyNodeRef; +use send_wrapper::SendWrapper; use tailwind_fuse::tw_merge; #[component] @@ -13,25 +11,25 @@ pub fn Floating( #[prop(into, optional)] class: MaybeProp, #[prop(into, optional)] strategy: MaybeProp, #[prop(into, optional)] placement: MaybeProp, - #[prop(into, optional)] middleware: MaybeProp, - #[prop(default = false.into(), into)] arrow: MaybeSignal, + #[prop(into, optional)] middleware: MaybeProp>, + #[prop(default = false.into(), into)] arrow: Signal, content: CF, reference: RF, ) -> impl IntoView where CF: Fn() -> CIV + 'static, CIV: IntoView + 'static, - RF: Fn(NodeRef) -> RIV + 'static, + RF: Fn(AnyNodeRef) -> RIV + 'static, RIV: IntoView + 'static, { - let floating_ref: NodeRef
= NodeRef::new(); - let reference_ref: NodeRef = NodeRef::new(); - let arrow_ref: NodeRef
= NodeRef::new(); + let floating_ref = AnyNodeRef::new(); + let reference_ref = AnyNodeRef::new(); + let arrow_ref = AnyNodeRef::new(); let UseFloatingReturn { floating_styles, .. } = use_floating( - reference_ref.into_reference(), + reference_ref, floating_ref, UseFloatingOptions::default() .while_elements_mounted_auto_update() @@ -57,8 +55,8 @@ where style:position=move || floating_styles.get().style_position() style:top=move || floating_styles.get().style_top() style:left=move || floating_styles.get().style_left() - style:transform=move || floating_styles.get().style_transform() - style:will-change=move || floating_styles.get().style_will_change() + style:transform=move || floating_styles.get().style_transform().unwrap_or_default() + style:will-change=move || floating_styles.get().style_will_change().unwrap_or_default() >
{content()}
diff --git a/book-examples/src/components/grid_item.rs b/book-examples/src/components/grid_item.rs index 5810659..894946c 100644 --- a/book-examples/src/components/grid_item.rs +++ b/book-examples/src/components/grid_item.rs @@ -1,13 +1,13 @@ -use leptos::*; +use leptos::prelude::*; use tailwind_fuse::tw_merge; #[component] pub fn GridItem( - #[prop(into)] title: MaybeSignal, - #[prop(into)] description: MaybeSignal, + #[prop(into)] title: Signal, + #[prop(into)] description: Signal, chrome: F, - // #[prop(into)] demo_link: MaybeSignal, - #[prop(default = false.into(), into)] hidden: MaybeSignal, + // #[prop(into)] demo_link: Signal, + #[prop(default = false.into(), into)] hidden: Signal, ) -> impl IntoView where F: Fn() -> IV + 'static, diff --git a/book-examples/src/components/reference.rs b/book-examples/src/components/reference.rs index cbaa6d5..5f2f82e 100644 --- a/book-examples/src/components/reference.rs +++ b/book-examples/src/components/reference.rs @@ -1,13 +1,15 @@ -use leptos::{html::AnyElement, *}; +use leptos::prelude::*; +use leptos_node_ref::AnyNodeRef; use tailwind_fuse::tw_merge; #[component] pub fn Reference( #[prop(into, optional)] class: MaybeProp, - #[prop(into, optional)] node_ref: NodeRef, + #[prop(into, optional)] node_ref: AnyNodeRef, ) -> impl IntoView { view! { +
( ElementContext::Reference => ElementContext::Floating, ElementContext::Floating => ElementContext::Reference, }; - let element = match alt_boundary { - true => elements.get_element_context(alt_context), - false => elements.get_element_context(element_context), + let element = if alt_boundary { + elements.get_element_context(alt_context) + } else { + elements.get_element_context(element_context) }; let document_element = platform.get_document_element(elements.floating); diff --git a/packages/core/src/middleware/arrow.rs b/packages/core/src/middleware/arrow.rs index 7d780ce..2556ced 100644 --- a/packages/core/src/middleware/arrow.rs +++ b/packages/core/src/middleware/arrow.rs @@ -170,18 +170,21 @@ impl Middleware min_padding, - false => max_padding, + - (if center < min { + min_padding + } else { + max_padding }) - arrow_dimensions.length(length) / 2.0 < 0.0; - let alignment_offset = match should_add_offset { - true => match center < min { - true => center - min, - false => center - max, - }, - false => 0.0, + let alignment_offset = if should_add_offset { + if center < min { + center - min + } else { + center - max + } + } else { + 0.0 }; MiddlewareReturn { @@ -204,10 +207,7 @@ impl Middleware Some(offset), }, center_offset: center - offset - alignment_offset, - alignment_offset: match should_add_offset { - true => Some(alignment_offset), - false => None, - }, + alignment_offset: should_add_offset.then_some(alignment_offset), }) .expect("Data should be valid JSON."), ), diff --git a/packages/core/src/middleware/auto_placement.rs b/packages/core/src/middleware/auto_placement.rs index 4066d7a..fe55935 100644 --- a/packages/core/src/middleware/auto_placement.rs +++ b/packages/core/src/middleware/auto_placement.rs @@ -50,9 +50,10 @@ fn get_placement_list( .filter(|placement| match alignment { Some(alignment) => { get_alignment(*placement) == Some(alignment) - || (match auto_alignment { - true => get_opposite_alignment_placement(*placement) != *placement, - false => false, + || (if auto_alignment { + get_opposite_alignment_placement(*placement) != *placement + } else { + false }) } None => true, @@ -229,9 +230,10 @@ impl Middleware get_placement_list(alignment, auto_alignment, allowed_placements), - false => allowed_placements, + let placements: Vec = if alignment.is_some() || !has_allowed_placements { + get_placement_list(alignment, auto_alignment, allowed_placements) + } else { + allowed_placements }; let overflow = detect_overflow( @@ -305,11 +307,12 @@ impl Middleware overflow.overflows[0..2].iter().sum(), + overflow.overflows[0..2].iter().sum() + } else { // Check only the main axis. - false => overflow.overflows[0], + overflow.overflows[0] }, overflow.overflows, ) diff --git a/packages/core/src/middleware/flip.rs b/packages/core/src/middleware/flip.rs index 46f76c6..6e8db71 100644 --- a/packages/core/src/middleware/flip.rs +++ b/packages/core/src/middleware/flip.rs @@ -231,9 +231,10 @@ impl Middleware vec![get_opposite_placement(initial_placement)], - false => get_expanded_placements(initial_placement), + specified_fallback_placements.unwrap_or(if is_base_placement || !flip_alignment { + vec![get_opposite_placement(initial_placement)] + } else { + get_expanded_placements(initial_placement) }); let has_fallback_axis_side_direction = fallback_axis_side_direction.is_some(); diff --git a/packages/core/src/middleware/inline.rs b/packages/core/src/middleware/inline.rs index b2436ed..85adb32 100644 --- a/packages/core/src/middleware/inline.rs +++ b/packages/core/src/middleware/inline.rs @@ -212,13 +212,15 @@ impl let top = first_rect.top; let bottom = last_rect.bottom; - let left = match is_top { - true => first_rect.left, - false => last_rect.left, + let left = if is_top { + first_rect.left + } else { + last_rect.left }; - let right = match is_top { - true => first_rect.right, - false => last_rect.right, + let right = if is_top { + first_rect.right + } else { + last_rect.right }; let width = right - left; let height = bottom - top; @@ -248,9 +250,12 @@ impl .expect("Enough elements exist."); let measure_rects: Vec<&ClientRectObject> = client_rects .iter() - .filter(|rect| match is_left_side { - true => rect.left == min_left, - false => rect.right == max_right, + .filter(|rect| { + if is_left_side { + rect.left == min_left + } else { + rect.right == max_right + } }) .collect(); diff --git a/packages/core/src/middleware/offset.rs b/packages/core/src/middleware/offset.rs index 341f895..2dd353e 100644 --- a/packages/core/src/middleware/offset.rs +++ b/packages/core/src/middleware/offset.rs @@ -30,10 +30,7 @@ fn convert_value_to_coords( Side::Left | Side::Top => -1.0, Side::Right | Side::Bottom => 1.0, }; - let cross_axis_multi = match rtl && is_vertical { - true => -1.0, - false => 1.0, - }; + let cross_axis_multi = if rtl && is_vertical { -1.0 } else { 1.0 }; let (main_axis, mut cross_axis, alignment_axis): (f64, f64, Option) = match options { OffsetOptions::Value(value) => (*value, 0.0, None), @@ -53,15 +50,16 @@ fn convert_value_to_coords( } } - match is_vertical { - true => Coords { + if is_vertical { + Coords { x: cross_axis * cross_axis_multi, y: main_axis * main_axis_multi, - }, - false => Coords { + } + } else { + Coords { x: main_axis * main_axis_multi, y: cross_axis * cross_axis_multi, - }, + } } } diff --git a/packages/core/src/middleware/shift.rs b/packages/core/src/middleware/shift.rs index 5fa3b38..f0855ae 100644 --- a/packages/core/src/middleware/shift.rs +++ b/packages/core/src/middleware/shift.rs @@ -435,23 +435,19 @@ impl Limiter data_cross_axis, - false => 0.0, - } - + match is_origin_side { - true => 0.0, - false => computed_cross_axis, + + if is_origin_side { data_cross_axis } else { 0.0 } + + if is_origin_side { + 0.0 + } else { + computed_cross_axis }; let limit_max = rects.reference.axis(cross_axis) + rects.reference.length(len) - + match is_origin_side { - true => 0.0, - false => data_cross_axis, - } - - match is_origin_side { - true => computed_cross_axis, - false => 0.0, + + if is_origin_side { 0.0 } else { data_cross_axis } + - if is_origin_side { + computed_cross_axis + } else { + 0.0 }; cross_axis_coord = clamp(limit_min, cross_axis_coord, limit_max); diff --git a/packages/core/src/middleware/size.rs b/packages/core/src/middleware/size.rs index ecd38a2..25f1c1c 100644 --- a/packages/core/src/middleware/size.rs +++ b/packages/core/src/middleware/size.rs @@ -161,14 +161,18 @@ impl Middleware { height_side = side; width_side = match alignment { - Some(alignment) => match alignment - == match platform.is_rtl(elements.floating) { - Some(true) => Alignment::Start, - _ => Alignment::End, - } { - true => Side::Left, - false => Side::Right, - }, + Some(alignment) => { + if alignment + == match platform.is_rtl(elements.floating) { + Some(true) => Alignment::Start, + _ => Alignment::End, + } + { + Side::Left + } else { + Side::Right + } + } None => Side::Right, }; } @@ -211,16 +215,18 @@ impl Middleware x_min + x_max, - false => overflow.left.max(overflow.right), + * (if x_min != 0.0 || x_max != 0.0 { + x_min + x_max + } else { + overflow.left.max(overflow.right) }); } else { available_height = height - 2.0 - * (match y_min != 0.0 || y_max != 0.0 { - true => y_min + y_max, - false => overflow.top.max(overflow.bottom), + * (if y_min != 0.0 || y_max != 0.0 { + y_min + y_max + } else { + overflow.top.max(overflow.bottom) }); } } diff --git a/packages/dom/src/auto_update.rs b/packages/dom/src/auto_update.rs index af5804a..98be870 100644 --- a/packages/dom/src/auto_update.rs +++ b/packages/dom/src/auto_update.rs @@ -237,19 +237,18 @@ pub fn auto_update( ElementOrVirtual::VirtualElement(ve) => OwnedElementOrVirtual::VirtualElement(ve.clone()), }; - let ancestors = match ancestor_scoll || ancestor_resize { - true => { - let mut ancestors = vec![]; + let ancestors = if ancestor_scoll || ancestor_resize { + let mut ancestors = vec![]; - if let Some(reference) = reference_element.as_ref() { - ancestors = get_overflow_ancestors(reference, ancestors, true); - } + if let Some(reference) = reference_element.as_ref() { + ancestors = get_overflow_ancestors(reference, ancestors, true); + } - ancestors.append(&mut get_overflow_ancestors(floating, vec![], true)); + ancestors.append(&mut get_overflow_ancestors(floating, vec![], true)); - ancestors - } - false => vec![], + ancestors + } else { + vec![] }; let update_closure: Closure = Closure::new({ @@ -286,13 +285,9 @@ pub fn auto_update( } } - let cleanup_observe_move = - reference_element - .as_ref() - .and_then(|reference_element| match layout_shift { - true => Some(observe_move(reference_element.clone(), update.clone())), - false => None, - }); + let cleanup_observe_move = reference_element.as_ref().and_then(|reference_element| { + layout_shift.then(|| observe_move(reference_element.clone(), update.clone())) + }); let reobserve_frame: Rc>> = Rc::new(RefCell::new(None)); let resize_observer: Rc>> = Rc::new(RefCell::new(None)); @@ -359,10 +354,9 @@ pub fn auto_update( let frame_id: Rc>> = Rc::new(RefCell::new(None)); let prev_ref_rect: Rc>> = - Rc::new(RefCell::new(match animation_frame { - true => Some(get_bounding_client_rect(reference, false, false, None)), - false => None, - })); + Rc::new(RefCell::new(animation_frame.then(|| { + get_bounding_client_rect(reference, false, false, None) + }))); let frame_loop_frame_id = frame_id.clone(); let frame_loop_closure = Rc::new(RefCell::new(None)); diff --git a/packages/dom/src/platform/get_clipping_rect.rs b/packages/dom/src/platform/get_clipping_rect.rs index 9a3abb2..1253e79 100644 --- a/packages/dom/src/platform/get_clipping_rect.rs +++ b/packages/dom/src/platform/get_clipping_rect.rs @@ -92,10 +92,7 @@ fn get_clipping_element_ancestors(element: &Element) -> Vec { .into_iter() .filter_map(|ancestor| match ancestor { OverflowAncestor::Element(element) => { - match get_node_name((&element).into()) == "body" { - true => None, - false => Some(element), - } + (get_node_name((&element).into()) != "body").then_some(element) } OverflowAncestor::Window(_) => None, }) @@ -105,9 +102,10 @@ fn get_clipping_element_ancestors(element: &Element) -> Vec { .get_property_value("position") .expect("Computed style should have position.") == "fixed"; - let mut current_node: Node = match element_is_fixed { - true => get_parent_node(element), - false => element.clone().into(), + let mut current_node: Node = if element_is_fixed { + get_parent_node(element) + } else { + element.clone().into() }; // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block @@ -124,26 +122,23 @@ fn get_clipping_element_ancestors(element: &Element) -> Vec { current_containing_block_computed_style = None; } - let should_drop_current_node = match element_is_fixed { - true => { - !current_node_is_containing && current_containing_block_computed_style.is_none() - } - false => { - (!current_node_is_containing - && position == "static" - && current_containing_block_computed_style - .as_ref() - .is_some_and(|style| { - let positon = style - .get_property_value("position") - .expect("Computed style should have position"); - - positon == "absolute" || positon == "fixed" - })) - || (is_overflow_element(current_element) - && !current_node_is_containing - && has_fixed_position_ancestor(element, current_element)) - } + let should_drop_current_node = if element_is_fixed { + !current_node_is_containing && current_containing_block_computed_style.is_none() + } else { + (!current_node_is_containing + && position == "static" + && current_containing_block_computed_style + .as_ref() + .is_some_and(|style| { + let positon = style + .get_property_value("position") + .expect("Computed style should have position"); + + positon == "absolute" || positon == "fixed" + })) + || (is_overflow_element(current_element) + && !current_node_is_containing + && has_fixed_position_ancestor(element, current_element)) }; if should_drop_current_node { @@ -172,10 +167,13 @@ pub fn get_clipping_rect( // TODO: cache let clipping_element_ancestors = match boundary { - floating_ui_core::Boundary::ClippingAncestors => match is_top_layer(element) { - true => vec![], - false => get_clipping_element_ancestors(element), - }, + Boundary::ClippingAncestors => { + if is_top_layer(element) { + vec![] + } else { + get_clipping_element_ancestors(element) + } + } _ => vec![], }; diff --git a/packages/dom/src/platform/get_scale.rs b/packages/dom/src/platform/get_scale.rs index c844098..91ca0bb 100644 --- a/packages/dom/src/platform/get_scale.rs +++ b/packages/dom/src/platform/get_scale.rs @@ -14,13 +14,15 @@ pub fn get_scale(element_or_virtual: ElementOrVirtual) -> Coords { dimensions, should_fallback, } = get_css_dimensions(&dom_element); - let mut x = match should_fallback { - true => rect.width().round(), - false => rect.width(), + let mut x = if should_fallback { + rect.width().round() + } else { + rect.width() } / dimensions.width; - let mut y = match should_fallback { - true => rect.height().round(), - false => rect.height(), + let mut y = if should_fallback { + rect.height().round() + } else { + rect.height() } / dimensions.height; if x == 0.0 || x.is_nan() || x.is_infinite() { diff --git a/packages/dom/src/platform/is_rtl.rs b/packages/dom/src/platform/is_rtl.rs index 2112e9d..7f6d5d2 100644 --- a/packages/dom/src/platform/is_rtl.rs +++ b/packages/dom/src/platform/is_rtl.rs @@ -4,6 +4,6 @@ use web_sys::Element; pub fn is_rtl(element: &Element) -> bool { get_computed_style(element) .get_property_value("direction") - .unwrap_or("".into()) + .unwrap_or_default() == "rtl" } diff --git a/packages/dom/src/utils/get_bounding_client_rect.rs b/packages/dom/src/utils/get_bounding_client_rect.rs index 3240428..b0d0a04 100644 --- a/packages/dom/src/utils/get_bounding_client_rect.rs +++ b/packages/dom/src/utils/get_bounding_client_rect.rs @@ -23,24 +23,26 @@ pub fn get_bounding_client_rect( }; let dom_element = element_or_virtual.clone().resolve(); - let scale = match include_scale { - true => match &offset_parent { + let scale = if include_scale { + match &offset_parent { Some(offset_parent) => match offset_parent { DomElementOrWindow::Element(element) => get_scale((*element).into()), DomElementOrWindow::Window(_) => Coords::new(1.0), }, None => get_scale(element_or_virtual), - }, - false => Coords::new(1.0), + } + } else { + Coords::new(1.0) }; - let visual_offsets = match should_add_visual_offsets( + let visual_offsets = if should_add_visual_offsets( dom_element.as_ref(), is_fixed_strategy, offset_parent.clone(), ) { - true => get_visual_offsets(dom_element.as_ref()), - false => Coords::new(0.0), + get_visual_offsets(dom_element.as_ref()) + } else { + Coords::new(0.0) }; let mut x = (client_rect.left + visual_offsets.x) / scale.x; diff --git a/packages/dom/src/utils/get_css_dimensions.rs b/packages/dom/src/utils/get_css_dimensions.rs index 67458cb..67ff239 100644 --- a/packages/dom/src/utils/get_css_dimensions.rs +++ b/packages/dom/src/utils/get_css_dimensions.rs @@ -39,12 +39,13 @@ pub fn get_css_dimensions(element: &Element) -> CssDimensions { let should_fallback = width.round() != offset_width || height.round() != offset_height; CssDimensions { - dimensions: match should_fallback { - true => Dimensions { + dimensions: if should_fallback { + Dimensions { width: offset_width, height: offset_height, - }, - false => Dimensions { width, height }, + } + } else { + Dimensions { width, height } }, should_fallback, } diff --git a/packages/leptos/Cargo.toml b/packages/leptos/Cargo.toml index c35ea48..ed47fdc 100644 --- a/packages/leptos/Cargo.toml +++ b/packages/leptos/Cargo.toml @@ -10,11 +10,12 @@ repository.workspace = true version.workspace = true [dependencies] -dyn_derive = "0.3.4" -dyn_std = "0.3.3" +dyn_derive.workspace = true +dyn_std.workspace = true floating-ui-dom = { path = "../dom", version = "0.1.3" } leptos.workspace = true -paste = "1.0.0" +leptos-node-ref.workspace = true +send_wrapper.workspace = true web-sys.workspace = true [dev-dependencies] diff --git a/packages/leptos/example/Cargo.toml b/packages/leptos/example/Cargo.toml index 8023ac3..97d4e86 100644 --- a/packages/leptos/example/Cargo.toml +++ b/packages/leptos/example/Cargo.toml @@ -14,6 +14,8 @@ console_error_panic_hook.workspace = true console_log.workspace = true floating-ui-leptos = { path = ".." } leptos = { workspace = true, features = ["csr"] } +leptos-node-ref.workspace = true log.workspace = true +send_wrapper.workspace = true wasm-bindgen.workspace = true web-sys.workspace = true diff --git a/packages/leptos/example/src/app.rs b/packages/leptos/example/src/app.rs index 028544b..fde80e3 100644 --- a/packages/leptos/example/src/app.rs +++ b/packages/leptos/example/src/app.rs @@ -1,20 +1,19 @@ use floating_ui_leptos::{ use_floating, Arrow, ArrowData, ArrowOptions, DetectOverflowOptions, Flip, FlipOptions, - IntoReference, MiddlewareVec, Offset, OffsetOptions, Padding, Placement, Shift, ShiftOptions, - Side, UseFloatingOptions, UseFloatingReturn, ARROW_NAME, -}; -use leptos::{ - html::{Button, Div}, - *, + MiddlewareVec, Offset, OffsetOptions, Padding, Placement, Shift, ShiftOptions, Side, + UseFloatingOptions, UseFloatingReturn, ARROW_NAME, }; +use leptos::prelude::*; +use leptos_node_ref::AnyNodeRef; +use send_wrapper::SendWrapper; #[component] pub fn App() -> impl IntoView { - let reference_ref = create_node_ref::