├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── example ├── Cargo.lock ├── Cargo.toml ├── index.html └── src │ └── main.rs ├── preview.gif └── src └── lib.rs /.gitignore: -------------------------------------------------------------------------------- 1 | **/target 2 | **/dist 3 | .direnv 4 | .envrc 5 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "aho-corasick" 7 | version = "1.1.3" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 10 | dependencies = [ 11 | "memchr", 12 | ] 13 | 14 | [[package]] 15 | name = "any_spawner" 16 | version = "0.2.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "41058deaa38c9d9dd933d6d238d825227cffa668e2839b52879f6619c63eee3b" 19 | dependencies = [ 20 | "futures", 21 | "thiserror 2.0.12", 22 | "wasm-bindgen-futures", 23 | ] 24 | 25 | [[package]] 26 | name = "anyhow" 27 | version = "1.0.97" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" 30 | 31 | [[package]] 32 | name = "async-lock" 33 | version = "3.4.0" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 36 | dependencies = [ 37 | "event-listener", 38 | "event-listener-strategy", 39 | "pin-project-lite", 40 | ] 41 | 42 | [[package]] 43 | name = "async-trait" 44 | version = "0.1.88" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 47 | dependencies = [ 48 | "proc-macro2", 49 | "quote", 50 | "syn", 51 | ] 52 | 53 | [[package]] 54 | name = "attribute-derive" 55 | version = "0.10.3" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "0053e96dd3bec5b4879c23a138d6ef26f2cb936c9cdc96274ac2b9ed44b5bb54" 58 | dependencies = [ 59 | "attribute-derive-macro", 60 | "derive-where", 61 | "manyhow", 62 | "proc-macro2", 63 | "quote", 64 | "syn", 65 | ] 66 | 67 | [[package]] 68 | name = "attribute-derive-macro" 69 | version = "0.10.3" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "463b53ad0fd5b460af4b1915fe045ff4d946d025fb6c4dc3337752eaa980f71b" 72 | dependencies = [ 73 | "collection_literals", 74 | "interpolator", 75 | "manyhow", 76 | "proc-macro-utils", 77 | "proc-macro2", 78 | "quote", 79 | "quote-use", 80 | "syn", 81 | ] 82 | 83 | [[package]] 84 | name = "autocfg" 85 | version = "1.4.0" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 88 | 89 | [[package]] 90 | name = "base64" 91 | version = "0.22.1" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 94 | 95 | [[package]] 96 | name = "bitflags" 97 | version = "2.9.0" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 100 | 101 | [[package]] 102 | name = "bumpalo" 103 | version = "3.17.0" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 106 | 107 | [[package]] 108 | name = "bytes" 109 | version = "1.10.1" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 112 | 113 | [[package]] 114 | name = "camino" 115 | version = "1.1.9" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" 118 | 119 | [[package]] 120 | name = "cfg-if" 121 | version = "1.0.0" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 124 | 125 | [[package]] 126 | name = "codee" 127 | version = "0.3.0" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "0f18d705321923b1a9358e3fc3c57c3b50171196827fc7f5f10b053242aca627" 130 | dependencies = [ 131 | "serde", 132 | "serde_json", 133 | "thiserror 2.0.12", 134 | ] 135 | 136 | [[package]] 137 | name = "collection_literals" 138 | version = "1.0.1" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "186dce98367766de751c42c4f03970fc60fc012296e706ccbb9d5df9b6c1e271" 141 | 142 | [[package]] 143 | name = "concurrent-queue" 144 | version = "2.5.0" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 147 | dependencies = [ 148 | "crossbeam-utils", 149 | ] 150 | 151 | [[package]] 152 | name = "config" 153 | version = "0.15.11" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "595aae20e65c3be792d05818e8c63025294ac3cb7e200f11459063a352a6ef80" 156 | dependencies = [ 157 | "convert_case 0.6.0", 158 | "pathdiff", 159 | "serde", 160 | "toml", 161 | "winnow", 162 | ] 163 | 164 | [[package]] 165 | name = "const-str" 166 | version = "0.5.7" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" 169 | 170 | [[package]] 171 | name = "const_format" 172 | version = "0.2.34" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" 175 | dependencies = [ 176 | "const_format_proc_macros", 177 | ] 178 | 179 | [[package]] 180 | name = "const_format_proc_macros" 181 | version = "0.2.34" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" 184 | dependencies = [ 185 | "proc-macro2", 186 | "quote", 187 | "unicode-xid", 188 | ] 189 | 190 | [[package]] 191 | name = "const_str_slice_concat" 192 | version = "0.1.0" 193 | source = "registry+https://github.com/rust-lang/crates.io-index" 194 | checksum = "f67855af358fcb20fac58f9d714c94e2b228fe5694c1c9b4ead4a366343eda1b" 195 | 196 | [[package]] 197 | name = "convert_case" 198 | version = "0.6.0" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" 201 | dependencies = [ 202 | "unicode-segmentation", 203 | ] 204 | 205 | [[package]] 206 | name = "convert_case" 207 | version = "0.7.1" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" 210 | dependencies = [ 211 | "unicode-segmentation", 212 | ] 213 | 214 | [[package]] 215 | name = "crossbeam-utils" 216 | version = "0.8.21" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 219 | 220 | [[package]] 221 | name = "dashmap" 222 | version = "6.1.0" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 225 | dependencies = [ 226 | "cfg-if", 227 | "crossbeam-utils", 228 | "hashbrown 0.14.5", 229 | "lock_api", 230 | "once_cell", 231 | "parking_lot_core", 232 | ] 233 | 234 | [[package]] 235 | name = "derive-where" 236 | version = "1.2.7" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" 239 | dependencies = [ 240 | "proc-macro2", 241 | "quote", 242 | "syn", 243 | ] 244 | 245 | [[package]] 246 | name = "displaydoc" 247 | version = "0.2.5" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 250 | dependencies = [ 251 | "proc-macro2", 252 | "quote", 253 | "syn", 254 | ] 255 | 256 | [[package]] 257 | name = "drain_filter_polyfill" 258 | version = "0.1.3" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "669a445ee724c5c69b1b06fe0b63e70a1c84bc9bb7d9696cd4f4e3ec45050408" 261 | 262 | [[package]] 263 | name = "either" 264 | version = "1.15.0" 265 | source = "registry+https://github.com/rust-lang/crates.io-index" 266 | checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 267 | 268 | [[package]] 269 | name = "either_of" 270 | version = "0.1.5" 271 | source = "registry+https://github.com/rust-lang/crates.io-index" 272 | checksum = "169ae1dd00fb612cf27fd069b3b10f325ea60ac551f08e5b931b4413972a847d" 273 | dependencies = [ 274 | "paste", 275 | "pin-project-lite", 276 | ] 277 | 278 | [[package]] 279 | name = "equivalent" 280 | version = "1.0.2" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 283 | 284 | [[package]] 285 | name = "erased" 286 | version = "0.1.2" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "a1731451909bde27714eacba19c2566362a7f35224f52b153d3f42cf60f72472" 289 | 290 | [[package]] 291 | name = "event-listener" 292 | version = "5.4.0" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 295 | dependencies = [ 296 | "concurrent-queue", 297 | "parking", 298 | "pin-project-lite", 299 | ] 300 | 301 | [[package]] 302 | name = "event-listener-strategy" 303 | version = "0.5.4" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 306 | dependencies = [ 307 | "event-listener", 308 | "pin-project-lite", 309 | ] 310 | 311 | [[package]] 312 | name = "fnv" 313 | version = "1.0.7" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 316 | 317 | [[package]] 318 | name = "form_urlencoded" 319 | version = "1.2.1" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 322 | dependencies = [ 323 | "percent-encoding", 324 | ] 325 | 326 | [[package]] 327 | name = "futures" 328 | version = "0.3.31" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 331 | dependencies = [ 332 | "futures-channel", 333 | "futures-core", 334 | "futures-executor", 335 | "futures-io", 336 | "futures-sink", 337 | "futures-task", 338 | "futures-util", 339 | ] 340 | 341 | [[package]] 342 | name = "futures-channel" 343 | version = "0.3.31" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 346 | dependencies = [ 347 | "futures-core", 348 | "futures-sink", 349 | ] 350 | 351 | [[package]] 352 | name = "futures-core" 353 | version = "0.3.31" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 356 | 357 | [[package]] 358 | name = "futures-executor" 359 | version = "0.3.31" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 362 | dependencies = [ 363 | "futures-core", 364 | "futures-task", 365 | "futures-util", 366 | "num_cpus", 367 | ] 368 | 369 | [[package]] 370 | name = "futures-io" 371 | version = "0.3.31" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 374 | 375 | [[package]] 376 | name = "futures-macro" 377 | version = "0.3.31" 378 | source = "registry+https://github.com/rust-lang/crates.io-index" 379 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 380 | dependencies = [ 381 | "proc-macro2", 382 | "quote", 383 | "syn", 384 | ] 385 | 386 | [[package]] 387 | name = "futures-sink" 388 | version = "0.3.31" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 391 | 392 | [[package]] 393 | name = "futures-task" 394 | version = "0.3.31" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 397 | 398 | [[package]] 399 | name = "futures-util" 400 | version = "0.3.31" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 403 | dependencies = [ 404 | "futures-channel", 405 | "futures-core", 406 | "futures-io", 407 | "futures-macro", 408 | "futures-sink", 409 | "futures-task", 410 | "memchr", 411 | "pin-project-lite", 412 | "pin-utils", 413 | "slab", 414 | ] 415 | 416 | [[package]] 417 | name = "getrandom" 418 | version = "0.3.2" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" 421 | dependencies = [ 422 | "cfg-if", 423 | "libc", 424 | "r-efi", 425 | "wasi", 426 | ] 427 | 428 | [[package]] 429 | name = "gloo-net" 430 | version = "0.6.0" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" 433 | dependencies = [ 434 | "futures-channel", 435 | "futures-core", 436 | "futures-sink", 437 | "gloo-utils", 438 | "http", 439 | "js-sys", 440 | "pin-project", 441 | "serde", 442 | "serde_json", 443 | "thiserror 1.0.69", 444 | "wasm-bindgen", 445 | "wasm-bindgen-futures", 446 | "web-sys", 447 | ] 448 | 449 | [[package]] 450 | name = "gloo-utils" 451 | version = "0.2.0" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" 454 | dependencies = [ 455 | "js-sys", 456 | "serde", 457 | "serde_json", 458 | "wasm-bindgen", 459 | "web-sys", 460 | ] 461 | 462 | [[package]] 463 | name = "guardian" 464 | version = "1.3.0" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "17e2ac29387b1aa07a1e448f7bb4f35b500787971e965b02842b900afa5c8f6f" 467 | 468 | [[package]] 469 | name = "hashbrown" 470 | version = "0.14.5" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 473 | 474 | [[package]] 475 | name = "hashbrown" 476 | version = "0.15.2" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 479 | 480 | [[package]] 481 | name = "hermit-abi" 482 | version = "0.3.9" 483 | source = "registry+https://github.com/rust-lang/crates.io-index" 484 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 485 | 486 | [[package]] 487 | name = "html-escape" 488 | version = "0.2.13" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" 491 | dependencies = [ 492 | "utf8-width", 493 | ] 494 | 495 | [[package]] 496 | name = "http" 497 | version = "1.3.1" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 500 | dependencies = [ 501 | "bytes", 502 | "fnv", 503 | "itoa", 504 | ] 505 | 506 | [[package]] 507 | name = "hydration_context" 508 | version = "0.3.0" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "e8714ae4adeaa846d838f380fbd72f049197de629948f91bf045329e0cf0a283" 511 | dependencies = [ 512 | "futures", 513 | "once_cell", 514 | "or_poisoned", 515 | "pin-project-lite", 516 | "serde", 517 | "throw_error", 518 | ] 519 | 520 | [[package]] 521 | name = "icu_collections" 522 | version = "1.5.0" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 525 | dependencies = [ 526 | "displaydoc", 527 | "yoke", 528 | "zerofrom", 529 | "zerovec", 530 | ] 531 | 532 | [[package]] 533 | name = "icu_locid" 534 | version = "1.5.0" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 537 | dependencies = [ 538 | "displaydoc", 539 | "litemap", 540 | "tinystr", 541 | "writeable", 542 | "zerovec", 543 | ] 544 | 545 | [[package]] 546 | name = "icu_locid_transform" 547 | version = "1.5.0" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 550 | dependencies = [ 551 | "displaydoc", 552 | "icu_locid", 553 | "icu_locid_transform_data", 554 | "icu_provider", 555 | "tinystr", 556 | "zerovec", 557 | ] 558 | 559 | [[package]] 560 | name = "icu_locid_transform_data" 561 | version = "1.5.1" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" 564 | 565 | [[package]] 566 | name = "icu_normalizer" 567 | version = "1.5.0" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 570 | dependencies = [ 571 | "displaydoc", 572 | "icu_collections", 573 | "icu_normalizer_data", 574 | "icu_properties", 575 | "icu_provider", 576 | "smallvec", 577 | "utf16_iter", 578 | "utf8_iter", 579 | "write16", 580 | "zerovec", 581 | ] 582 | 583 | [[package]] 584 | name = "icu_normalizer_data" 585 | version = "1.5.1" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" 588 | 589 | [[package]] 590 | name = "icu_properties" 591 | version = "1.5.1" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 594 | dependencies = [ 595 | "displaydoc", 596 | "icu_collections", 597 | "icu_locid_transform", 598 | "icu_properties_data", 599 | "icu_provider", 600 | "tinystr", 601 | "zerovec", 602 | ] 603 | 604 | [[package]] 605 | name = "icu_properties_data" 606 | version = "1.5.1" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" 609 | 610 | [[package]] 611 | name = "icu_provider" 612 | version = "1.5.0" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 615 | dependencies = [ 616 | "displaydoc", 617 | "icu_locid", 618 | "icu_provider_macros", 619 | "stable_deref_trait", 620 | "tinystr", 621 | "writeable", 622 | "yoke", 623 | "zerofrom", 624 | "zerovec", 625 | ] 626 | 627 | [[package]] 628 | name = "icu_provider_macros" 629 | version = "1.5.0" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 632 | dependencies = [ 633 | "proc-macro2", 634 | "quote", 635 | "syn", 636 | ] 637 | 638 | [[package]] 639 | name = "idna" 640 | version = "1.0.3" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 643 | dependencies = [ 644 | "idna_adapter", 645 | "smallvec", 646 | "utf8_iter", 647 | ] 648 | 649 | [[package]] 650 | name = "idna_adapter" 651 | version = "1.2.0" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 654 | dependencies = [ 655 | "icu_normalizer", 656 | "icu_properties", 657 | ] 658 | 659 | [[package]] 660 | name = "indexmap" 661 | version = "2.8.0" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" 664 | dependencies = [ 665 | "equivalent", 666 | "hashbrown 0.15.2", 667 | ] 668 | 669 | [[package]] 670 | name = "interpolator" 671 | version = "0.5.0" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" 674 | 675 | [[package]] 676 | name = "itertools" 677 | version = "0.14.0" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 680 | dependencies = [ 681 | "either", 682 | ] 683 | 684 | [[package]] 685 | name = "itoa" 686 | version = "1.0.15" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 689 | 690 | [[package]] 691 | name = "js-sys" 692 | version = "0.3.77" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 695 | dependencies = [ 696 | "once_cell", 697 | "wasm-bindgen", 698 | ] 699 | 700 | [[package]] 701 | name = "leptos" 702 | version = "0.8.0-beta" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "52ce9bd03a04fb96fc9840c8e77c4c988180facb53b465c494be80a05c816ab7" 705 | dependencies = [ 706 | "any_spawner", 707 | "cfg-if", 708 | "either_of", 709 | "futures", 710 | "hydration_context", 711 | "leptos_config", 712 | "leptos_dom", 713 | "leptos_hot_reload", 714 | "leptos_macro", 715 | "leptos_server", 716 | "oco_ref", 717 | "or_poisoned", 718 | "paste", 719 | "reactive_graph", 720 | "rustc-hash", 721 | "send_wrapper", 722 | "serde", 723 | "serde_qs", 724 | "server_fn", 725 | "slotmap", 726 | "tachys", 727 | "thiserror 2.0.12", 728 | "throw_error", 729 | "typed-builder", 730 | "typed-builder-macro", 731 | "wasm-bindgen", 732 | "web-sys", 733 | ] 734 | 735 | [[package]] 736 | name = "leptos_config" 737 | version = "0.8.0-beta" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "1cfd1daba84873ae380630958bf4525601840896ec697c6ee65beb69a12bf59a" 740 | dependencies = [ 741 | "config", 742 | "regex", 743 | "serde", 744 | "thiserror 2.0.12", 745 | "typed-builder", 746 | ] 747 | 748 | [[package]] 749 | name = "leptos_dom" 750 | version = "0.8.0-beta" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "88e60f167a3abac2804f069413fc075d2125469696edc6cad1018b0e1ad63348" 753 | dependencies = [ 754 | "js-sys", 755 | "or_poisoned", 756 | "reactive_graph", 757 | "send_wrapper", 758 | "tachys", 759 | "wasm-bindgen", 760 | "web-sys", 761 | ] 762 | 763 | [[package]] 764 | name = "leptos_drag_reorder" 765 | version = "0.1.0" 766 | dependencies = [ 767 | "js-sys", 768 | "leptos", 769 | "send_wrapper", 770 | "wasm-bindgen", 771 | "web-sys", 772 | ] 773 | 774 | [[package]] 775 | name = "leptos_hot_reload" 776 | version = "0.8.0-beta" 777 | source = "registry+https://github.com/rust-lang/crates.io-index" 778 | checksum = "14674d5aa860afa6a008ab5e8289f432c46bcd8df296e0a3ffa36753ddf4d2be" 779 | dependencies = [ 780 | "anyhow", 781 | "camino", 782 | "indexmap", 783 | "parking_lot", 784 | "proc-macro2", 785 | "quote", 786 | "rstml", 787 | "serde", 788 | "syn", 789 | "walkdir", 790 | ] 791 | 792 | [[package]] 793 | name = "leptos_macro" 794 | version = "0.8.0-beta" 795 | source = "registry+https://github.com/rust-lang/crates.io-index" 796 | checksum = "cd3b663838c7a745159cbe64218036634c997dcbafabca8daa0854d3162d324d" 797 | dependencies = [ 798 | "attribute-derive", 799 | "cfg-if", 800 | "convert_case 0.7.1", 801 | "html-escape", 802 | "itertools", 803 | "leptos_hot_reload", 804 | "prettyplease", 805 | "proc-macro-error2", 806 | "proc-macro2", 807 | "quote", 808 | "rstml", 809 | "server_fn_macro", 810 | "syn", 811 | "uuid", 812 | ] 813 | 814 | [[package]] 815 | name = "leptos_server" 816 | version = "0.8.0-beta" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "e59be72c057dfff57b20150160593619b148a475078701797a0c89bf0e55ca67" 819 | dependencies = [ 820 | "any_spawner", 821 | "base64", 822 | "codee", 823 | "futures", 824 | "hydration_context", 825 | "or_poisoned", 826 | "reactive_graph", 827 | "send_wrapper", 828 | "serde", 829 | "serde_json", 830 | "server_fn", 831 | "tachys", 832 | ] 833 | 834 | [[package]] 835 | name = "libc" 836 | version = "0.2.171" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" 839 | 840 | [[package]] 841 | name = "linear-map" 842 | version = "1.2.0" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" 845 | 846 | [[package]] 847 | name = "litemap" 848 | version = "0.7.5" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" 851 | 852 | [[package]] 853 | name = "lock_api" 854 | version = "0.4.12" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 857 | dependencies = [ 858 | "autocfg", 859 | "scopeguard", 860 | ] 861 | 862 | [[package]] 863 | name = "log" 864 | version = "0.4.27" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 867 | 868 | [[package]] 869 | name = "manyhow" 870 | version = "0.11.4" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | checksum = "b33efb3ca6d3b07393750d4030418d594ab1139cee518f0dc88db70fec873587" 873 | dependencies = [ 874 | "manyhow-macros", 875 | "proc-macro2", 876 | "quote", 877 | "syn", 878 | ] 879 | 880 | [[package]] 881 | name = "manyhow-macros" 882 | version = "0.11.4" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "46fce34d199b78b6e6073abf984c9cf5fd3e9330145a93ee0738a7443e371495" 885 | dependencies = [ 886 | "proc-macro-utils", 887 | "proc-macro2", 888 | "quote", 889 | ] 890 | 891 | [[package]] 892 | name = "memchr" 893 | version = "2.7.4" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 896 | 897 | [[package]] 898 | name = "next_tuple" 899 | version = "0.1.0" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "60993920e071b0c9b66f14e2b32740a4e27ffc82854dcd72035887f336a09a28" 902 | 903 | [[package]] 904 | name = "num_cpus" 905 | version = "1.16.0" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 908 | dependencies = [ 909 | "hermit-abi", 910 | "libc", 911 | ] 912 | 913 | [[package]] 914 | name = "oco_ref" 915 | version = "0.2.0" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "64b94982fe39a861561cf67ff17a7849f2cedadbbad960a797634032b7abb998" 918 | dependencies = [ 919 | "serde", 920 | "thiserror 1.0.69", 921 | ] 922 | 923 | [[package]] 924 | name = "once_cell" 925 | version = "1.21.3" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 928 | 929 | [[package]] 930 | name = "or_poisoned" 931 | version = "0.1.0" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | checksum = "8c04f5d74368e4d0dfe06c45c8627c81bd7c317d52762d118fb9b3076f6420fd" 934 | 935 | [[package]] 936 | name = "parking" 937 | version = "2.2.1" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 940 | 941 | [[package]] 942 | name = "parking_lot" 943 | version = "0.12.3" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 946 | dependencies = [ 947 | "lock_api", 948 | "parking_lot_core", 949 | ] 950 | 951 | [[package]] 952 | name = "parking_lot_core" 953 | version = "0.9.10" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 956 | dependencies = [ 957 | "cfg-if", 958 | "libc", 959 | "redox_syscall", 960 | "smallvec", 961 | "windows-targets", 962 | ] 963 | 964 | [[package]] 965 | name = "paste" 966 | version = "1.0.15" 967 | source = "registry+https://github.com/rust-lang/crates.io-index" 968 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 969 | 970 | [[package]] 971 | name = "pathdiff" 972 | version = "0.2.3" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" 975 | 976 | [[package]] 977 | name = "percent-encoding" 978 | version = "2.3.1" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 981 | 982 | [[package]] 983 | name = "pin-project" 984 | version = "1.1.10" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 987 | dependencies = [ 988 | "pin-project-internal", 989 | ] 990 | 991 | [[package]] 992 | name = "pin-project-internal" 993 | version = "1.1.10" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 996 | dependencies = [ 997 | "proc-macro2", 998 | "quote", 999 | "syn", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "pin-project-lite" 1004 | version = "0.2.16" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1007 | 1008 | [[package]] 1009 | name = "pin-utils" 1010 | version = "0.1.0" 1011 | source = "registry+https://github.com/rust-lang/crates.io-index" 1012 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1013 | 1014 | [[package]] 1015 | name = "prettyplease" 1016 | version = "0.2.31" 1017 | source = "registry+https://github.com/rust-lang/crates.io-index" 1018 | checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" 1019 | dependencies = [ 1020 | "proc-macro2", 1021 | "syn", 1022 | ] 1023 | 1024 | [[package]] 1025 | name = "proc-macro-error-attr2" 1026 | version = "2.0.0" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" 1029 | dependencies = [ 1030 | "proc-macro2", 1031 | "quote", 1032 | ] 1033 | 1034 | [[package]] 1035 | name = "proc-macro-error2" 1036 | version = "2.0.1" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" 1039 | dependencies = [ 1040 | "proc-macro-error-attr2", 1041 | "proc-macro2", 1042 | "quote", 1043 | "syn", 1044 | ] 1045 | 1046 | [[package]] 1047 | name = "proc-macro-utils" 1048 | version = "0.10.0" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | checksum = "eeaf08a13de400bc215877b5bdc088f241b12eb42f0a548d3390dc1c56bb7071" 1051 | dependencies = [ 1052 | "proc-macro2", 1053 | "quote", 1054 | "smallvec", 1055 | ] 1056 | 1057 | [[package]] 1058 | name = "proc-macro2" 1059 | version = "1.0.94" 1060 | source = "registry+https://github.com/rust-lang/crates.io-index" 1061 | checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" 1062 | dependencies = [ 1063 | "unicode-ident", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "proc-macro2-diagnostics" 1068 | version = "0.10.1" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" 1071 | dependencies = [ 1072 | "proc-macro2", 1073 | "quote", 1074 | "syn", 1075 | "version_check", 1076 | "yansi", 1077 | ] 1078 | 1079 | [[package]] 1080 | name = "quote" 1081 | version = "1.0.40" 1082 | source = "registry+https://github.com/rust-lang/crates.io-index" 1083 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1084 | dependencies = [ 1085 | "proc-macro2", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "quote-use" 1090 | version = "0.8.4" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "9619db1197b497a36178cfc736dc96b271fe918875fbf1344c436a7e93d0321e" 1093 | dependencies = [ 1094 | "quote", 1095 | "quote-use-macros", 1096 | ] 1097 | 1098 | [[package]] 1099 | name = "quote-use-macros" 1100 | version = "0.8.4" 1101 | source = "registry+https://github.com/rust-lang/crates.io-index" 1102 | checksum = "82ebfb7faafadc06a7ab141a6f67bcfb24cb8beb158c6fe933f2f035afa99f35" 1103 | dependencies = [ 1104 | "proc-macro-utils", 1105 | "proc-macro2", 1106 | "quote", 1107 | "syn", 1108 | ] 1109 | 1110 | [[package]] 1111 | name = "r-efi" 1112 | version = "5.2.0" 1113 | source = "registry+https://github.com/rust-lang/crates.io-index" 1114 | checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 1115 | 1116 | [[package]] 1117 | name = "reactive_graph" 1118 | version = "0.2.0-beta" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | checksum = "3f7381d64e86a5ef9f5be26821c4be2111420a49e786163b0efbdfc399f2d7c3" 1121 | dependencies = [ 1122 | "any_spawner", 1123 | "async-lock", 1124 | "futures", 1125 | "guardian", 1126 | "hydration_context", 1127 | "or_poisoned", 1128 | "pin-project-lite", 1129 | "rustc-hash", 1130 | "send_wrapper", 1131 | "serde", 1132 | "slotmap", 1133 | "thiserror 2.0.12", 1134 | "web-sys", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "reactive_stores" 1139 | version = "0.2.0-beta" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "0a3121eef8f715c57adcc3469a8af511d7db4f533406f91a599fca4f761214af" 1142 | dependencies = [ 1143 | "guardian", 1144 | "itertools", 1145 | "or_poisoned", 1146 | "paste", 1147 | "reactive_graph", 1148 | "reactive_stores_macro", 1149 | "rustc-hash", 1150 | ] 1151 | 1152 | [[package]] 1153 | name = "reactive_stores_macro" 1154 | version = "0.2.0-beta" 1155 | source = "registry+https://github.com/rust-lang/crates.io-index" 1156 | checksum = "4a7417cb8fa7a49425bc1a0942b4bd7bbba4161c46e53099968e6fcb9d9c8a0b" 1157 | dependencies = [ 1158 | "convert_case 0.7.1", 1159 | "proc-macro-error2", 1160 | "proc-macro2", 1161 | "quote", 1162 | "syn", 1163 | ] 1164 | 1165 | [[package]] 1166 | name = "redox_syscall" 1167 | version = "0.5.10" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" 1170 | dependencies = [ 1171 | "bitflags", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "regex" 1176 | version = "1.11.1" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1179 | dependencies = [ 1180 | "aho-corasick", 1181 | "memchr", 1182 | "regex-automata", 1183 | "regex-syntax", 1184 | ] 1185 | 1186 | [[package]] 1187 | name = "regex-automata" 1188 | version = "0.4.9" 1189 | source = "registry+https://github.com/rust-lang/crates.io-index" 1190 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1191 | dependencies = [ 1192 | "aho-corasick", 1193 | "memchr", 1194 | "regex-syntax", 1195 | ] 1196 | 1197 | [[package]] 1198 | name = "regex-syntax" 1199 | version = "0.8.5" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1202 | 1203 | [[package]] 1204 | name = "rstml" 1205 | version = "0.12.1" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "61cf4616de7499fc5164570d40ca4e1b24d231c6833a88bff0fe00725080fd56" 1208 | dependencies = [ 1209 | "derive-where", 1210 | "proc-macro2", 1211 | "proc-macro2-diagnostics", 1212 | "quote", 1213 | "syn", 1214 | "syn_derive", 1215 | "thiserror 2.0.12", 1216 | ] 1217 | 1218 | [[package]] 1219 | name = "rustc-hash" 1220 | version = "2.1.1" 1221 | source = "registry+https://github.com/rust-lang/crates.io-index" 1222 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 1223 | 1224 | [[package]] 1225 | name = "rustversion" 1226 | version = "1.0.20" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 1229 | 1230 | [[package]] 1231 | name = "ryu" 1232 | version = "1.0.20" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1235 | 1236 | [[package]] 1237 | name = "same-file" 1238 | version = "1.0.6" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1241 | dependencies = [ 1242 | "winapi-util", 1243 | ] 1244 | 1245 | [[package]] 1246 | name = "scopeguard" 1247 | version = "1.2.0" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1250 | 1251 | [[package]] 1252 | name = "send_wrapper" 1253 | version = "0.6.0" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 1256 | dependencies = [ 1257 | "futures-core", 1258 | ] 1259 | 1260 | [[package]] 1261 | name = "serde" 1262 | version = "1.0.219" 1263 | source = "registry+https://github.com/rust-lang/crates.io-index" 1264 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1265 | dependencies = [ 1266 | "serde_derive", 1267 | ] 1268 | 1269 | [[package]] 1270 | name = "serde_derive" 1271 | version = "1.0.219" 1272 | source = "registry+https://github.com/rust-lang/crates.io-index" 1273 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 1274 | dependencies = [ 1275 | "proc-macro2", 1276 | "quote", 1277 | "syn", 1278 | ] 1279 | 1280 | [[package]] 1281 | name = "serde_json" 1282 | version = "1.0.140" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 1285 | dependencies = [ 1286 | "itoa", 1287 | "memchr", 1288 | "ryu", 1289 | "serde", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "serde_qs" 1294 | version = "0.13.0" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "cd34f36fe4c5ba9654417139a9b3a20d2e1de6012ee678ad14d240c22c78d8d6" 1297 | dependencies = [ 1298 | "percent-encoding", 1299 | "serde", 1300 | "thiserror 1.0.69", 1301 | ] 1302 | 1303 | [[package]] 1304 | name = "serde_spanned" 1305 | version = "0.6.8" 1306 | source = "registry+https://github.com/rust-lang/crates.io-index" 1307 | checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" 1308 | dependencies = [ 1309 | "serde", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "server_fn" 1314 | version = "0.8.0-beta" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "a3a6794e429718b09d4c79b667330b0a7c7412a70d64f9300e31447fd9210caa" 1317 | dependencies = [ 1318 | "base64", 1319 | "bytes", 1320 | "const-str", 1321 | "const_format", 1322 | "dashmap", 1323 | "futures", 1324 | "gloo-net", 1325 | "http", 1326 | "js-sys", 1327 | "once_cell", 1328 | "pin-project-lite", 1329 | "send_wrapper", 1330 | "serde", 1331 | "serde_json", 1332 | "serde_qs", 1333 | "server_fn_macro_default", 1334 | "thiserror 2.0.12", 1335 | "throw_error", 1336 | "url", 1337 | "wasm-bindgen", 1338 | "wasm-bindgen-futures", 1339 | "wasm-streams", 1340 | "web-sys", 1341 | "xxhash-rust", 1342 | ] 1343 | 1344 | [[package]] 1345 | name = "server_fn_macro" 1346 | version = "0.8.0-beta" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "0d13c6a6d935eafd25c9e6732e8728ea1a4a7d699b40b7d8eec58f1fde05c2b2" 1349 | dependencies = [ 1350 | "const_format", 1351 | "convert_case 0.6.0", 1352 | "proc-macro2", 1353 | "quote", 1354 | "syn", 1355 | "xxhash-rust", 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "server_fn_macro_default" 1360 | version = "0.8.0-beta" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "b6df77237d3bd48227f9c48e6ff18f3bde7eb92e30bc9f75c890bfb6d0b6a70a" 1363 | dependencies = [ 1364 | "server_fn_macro", 1365 | "syn", 1366 | ] 1367 | 1368 | [[package]] 1369 | name = "slab" 1370 | version = "0.4.9" 1371 | source = "registry+https://github.com/rust-lang/crates.io-index" 1372 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1373 | dependencies = [ 1374 | "autocfg", 1375 | ] 1376 | 1377 | [[package]] 1378 | name = "slotmap" 1379 | version = "1.0.7" 1380 | source = "registry+https://github.com/rust-lang/crates.io-index" 1381 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 1382 | dependencies = [ 1383 | "version_check", 1384 | ] 1385 | 1386 | [[package]] 1387 | name = "smallvec" 1388 | version = "1.14.0" 1389 | source = "registry+https://github.com/rust-lang/crates.io-index" 1390 | checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" 1391 | 1392 | [[package]] 1393 | name = "stable_deref_trait" 1394 | version = "1.2.0" 1395 | source = "registry+https://github.com/rust-lang/crates.io-index" 1396 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1397 | 1398 | [[package]] 1399 | name = "syn" 1400 | version = "2.0.100" 1401 | source = "registry+https://github.com/rust-lang/crates.io-index" 1402 | checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" 1403 | dependencies = [ 1404 | "proc-macro2", 1405 | "quote", 1406 | "unicode-ident", 1407 | ] 1408 | 1409 | [[package]] 1410 | name = "syn_derive" 1411 | version = "0.2.0" 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" 1413 | checksum = "cdb066a04799e45f5d582e8fc6ec8e6d6896040d00898eb4e6a835196815b219" 1414 | dependencies = [ 1415 | "proc-macro-error2", 1416 | "proc-macro2", 1417 | "quote", 1418 | "syn", 1419 | ] 1420 | 1421 | [[package]] 1422 | name = "synstructure" 1423 | version = "0.13.1" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 1426 | dependencies = [ 1427 | "proc-macro2", 1428 | "quote", 1429 | "syn", 1430 | ] 1431 | 1432 | [[package]] 1433 | name = "tachys" 1434 | version = "0.2.0-beta" 1435 | source = "registry+https://github.com/rust-lang/crates.io-index" 1436 | checksum = "61294b3f019afe959ff0604a4227f003c02fba1abeb39b9e4490e6dd44b385e7" 1437 | dependencies = [ 1438 | "any_spawner", 1439 | "async-trait", 1440 | "const_str_slice_concat", 1441 | "drain_filter_polyfill", 1442 | "either_of", 1443 | "erased", 1444 | "futures", 1445 | "html-escape", 1446 | "indexmap", 1447 | "itertools", 1448 | "js-sys", 1449 | "linear-map", 1450 | "next_tuple", 1451 | "oco_ref", 1452 | "once_cell", 1453 | "or_poisoned", 1454 | "parking_lot", 1455 | "paste", 1456 | "reactive_graph", 1457 | "reactive_stores", 1458 | "rustc-hash", 1459 | "send_wrapper", 1460 | "slotmap", 1461 | "throw_error", 1462 | "wasm-bindgen", 1463 | "web-sys", 1464 | ] 1465 | 1466 | [[package]] 1467 | name = "thiserror" 1468 | version = "1.0.69" 1469 | source = "registry+https://github.com/rust-lang/crates.io-index" 1470 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 1471 | dependencies = [ 1472 | "thiserror-impl 1.0.69", 1473 | ] 1474 | 1475 | [[package]] 1476 | name = "thiserror" 1477 | version = "2.0.12" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 1480 | dependencies = [ 1481 | "thiserror-impl 2.0.12", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "thiserror-impl" 1486 | version = "1.0.69" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 1489 | dependencies = [ 1490 | "proc-macro2", 1491 | "quote", 1492 | "syn", 1493 | ] 1494 | 1495 | [[package]] 1496 | name = "thiserror-impl" 1497 | version = "2.0.12" 1498 | source = "registry+https://github.com/rust-lang/crates.io-index" 1499 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 1500 | dependencies = [ 1501 | "proc-macro2", 1502 | "quote", 1503 | "syn", 1504 | ] 1505 | 1506 | [[package]] 1507 | name = "throw_error" 1508 | version = "0.3.0" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | checksum = "41e42a6afdde94f3e656fae18f837cb9bbe500a5ac5de325b09f3ec05b9c28e3" 1511 | dependencies = [ 1512 | "pin-project-lite", 1513 | ] 1514 | 1515 | [[package]] 1516 | name = "tinystr" 1517 | version = "0.7.6" 1518 | source = "registry+https://github.com/rust-lang/crates.io-index" 1519 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 1520 | dependencies = [ 1521 | "displaydoc", 1522 | "zerovec", 1523 | ] 1524 | 1525 | [[package]] 1526 | name = "toml" 1527 | version = "0.8.20" 1528 | source = "registry+https://github.com/rust-lang/crates.io-index" 1529 | checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" 1530 | dependencies = [ 1531 | "serde", 1532 | "serde_spanned", 1533 | "toml_datetime", 1534 | "toml_edit", 1535 | ] 1536 | 1537 | [[package]] 1538 | name = "toml_datetime" 1539 | version = "0.6.8" 1540 | source = "registry+https://github.com/rust-lang/crates.io-index" 1541 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 1542 | dependencies = [ 1543 | "serde", 1544 | ] 1545 | 1546 | [[package]] 1547 | name = "toml_edit" 1548 | version = "0.22.24" 1549 | source = "registry+https://github.com/rust-lang/crates.io-index" 1550 | checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" 1551 | dependencies = [ 1552 | "indexmap", 1553 | "serde", 1554 | "serde_spanned", 1555 | "toml_datetime", 1556 | "winnow", 1557 | ] 1558 | 1559 | [[package]] 1560 | name = "typed-builder" 1561 | version = "0.20.1" 1562 | source = "registry+https://github.com/rust-lang/crates.io-index" 1563 | checksum = "cd9d30e3a08026c78f246b173243cf07b3696d274debd26680773b6773c2afc7" 1564 | dependencies = [ 1565 | "typed-builder-macro", 1566 | ] 1567 | 1568 | [[package]] 1569 | name = "typed-builder-macro" 1570 | version = "0.20.1" 1571 | source = "registry+https://github.com/rust-lang/crates.io-index" 1572 | checksum = "3c36781cc0e46a83726d9879608e4cf6c2505237e263a8eb8c24502989cfdb28" 1573 | dependencies = [ 1574 | "proc-macro2", 1575 | "quote", 1576 | "syn", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "unicode-ident" 1581 | version = "1.0.18" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 1584 | 1585 | [[package]] 1586 | name = "unicode-segmentation" 1587 | version = "1.12.0" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 1590 | 1591 | [[package]] 1592 | name = "unicode-xid" 1593 | version = "0.2.6" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 1596 | 1597 | [[package]] 1598 | name = "url" 1599 | version = "2.5.4" 1600 | source = "registry+https://github.com/rust-lang/crates.io-index" 1601 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 1602 | dependencies = [ 1603 | "form_urlencoded", 1604 | "idna", 1605 | "percent-encoding", 1606 | ] 1607 | 1608 | [[package]] 1609 | name = "utf16_iter" 1610 | version = "1.0.5" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 1613 | 1614 | [[package]] 1615 | name = "utf8-width" 1616 | version = "0.1.7" 1617 | source = "registry+https://github.com/rust-lang/crates.io-index" 1618 | checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" 1619 | 1620 | [[package]] 1621 | name = "utf8_iter" 1622 | version = "1.0.4" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1625 | 1626 | [[package]] 1627 | name = "uuid" 1628 | version = "1.16.0" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" 1631 | dependencies = [ 1632 | "getrandom", 1633 | ] 1634 | 1635 | [[package]] 1636 | name = "version_check" 1637 | version = "0.9.5" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1640 | 1641 | [[package]] 1642 | name = "walkdir" 1643 | version = "2.5.0" 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" 1645 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 1646 | dependencies = [ 1647 | "same-file", 1648 | "winapi-util", 1649 | ] 1650 | 1651 | [[package]] 1652 | name = "wasi" 1653 | version = "0.14.2+wasi-0.2.4" 1654 | source = "registry+https://github.com/rust-lang/crates.io-index" 1655 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 1656 | dependencies = [ 1657 | "wit-bindgen-rt", 1658 | ] 1659 | 1660 | [[package]] 1661 | name = "wasm-bindgen" 1662 | version = "0.2.100" 1663 | source = "registry+https://github.com/rust-lang/crates.io-index" 1664 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 1665 | dependencies = [ 1666 | "cfg-if", 1667 | "once_cell", 1668 | "rustversion", 1669 | "wasm-bindgen-macro", 1670 | ] 1671 | 1672 | [[package]] 1673 | name = "wasm-bindgen-backend" 1674 | version = "0.2.100" 1675 | source = "registry+https://github.com/rust-lang/crates.io-index" 1676 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 1677 | dependencies = [ 1678 | "bumpalo", 1679 | "log", 1680 | "proc-macro2", 1681 | "quote", 1682 | "syn", 1683 | "wasm-bindgen-shared", 1684 | ] 1685 | 1686 | [[package]] 1687 | name = "wasm-bindgen-futures" 1688 | version = "0.4.50" 1689 | source = "registry+https://github.com/rust-lang/crates.io-index" 1690 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 1691 | dependencies = [ 1692 | "cfg-if", 1693 | "js-sys", 1694 | "once_cell", 1695 | "wasm-bindgen", 1696 | "web-sys", 1697 | ] 1698 | 1699 | [[package]] 1700 | name = "wasm-bindgen-macro" 1701 | version = "0.2.100" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 1704 | dependencies = [ 1705 | "quote", 1706 | "wasm-bindgen-macro-support", 1707 | ] 1708 | 1709 | [[package]] 1710 | name = "wasm-bindgen-macro-support" 1711 | version = "0.2.100" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 1714 | dependencies = [ 1715 | "proc-macro2", 1716 | "quote", 1717 | "syn", 1718 | "wasm-bindgen-backend", 1719 | "wasm-bindgen-shared", 1720 | ] 1721 | 1722 | [[package]] 1723 | name = "wasm-bindgen-shared" 1724 | version = "0.2.100" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 1727 | dependencies = [ 1728 | "unicode-ident", 1729 | ] 1730 | 1731 | [[package]] 1732 | name = "wasm-streams" 1733 | version = "0.4.2" 1734 | source = "registry+https://github.com/rust-lang/crates.io-index" 1735 | checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 1736 | dependencies = [ 1737 | "futures-util", 1738 | "js-sys", 1739 | "wasm-bindgen", 1740 | "wasm-bindgen-futures", 1741 | "web-sys", 1742 | ] 1743 | 1744 | [[package]] 1745 | name = "web-sys" 1746 | version = "0.3.77" 1747 | source = "registry+https://github.com/rust-lang/crates.io-index" 1748 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 1749 | dependencies = [ 1750 | "js-sys", 1751 | "wasm-bindgen", 1752 | ] 1753 | 1754 | [[package]] 1755 | name = "winapi-util" 1756 | version = "0.1.9" 1757 | source = "registry+https://github.com/rust-lang/crates.io-index" 1758 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 1759 | dependencies = [ 1760 | "windows-sys", 1761 | ] 1762 | 1763 | [[package]] 1764 | name = "windows-sys" 1765 | version = "0.59.0" 1766 | source = "registry+https://github.com/rust-lang/crates.io-index" 1767 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1768 | dependencies = [ 1769 | "windows-targets", 1770 | ] 1771 | 1772 | [[package]] 1773 | name = "windows-targets" 1774 | version = "0.52.6" 1775 | source = "registry+https://github.com/rust-lang/crates.io-index" 1776 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1777 | dependencies = [ 1778 | "windows_aarch64_gnullvm", 1779 | "windows_aarch64_msvc", 1780 | "windows_i686_gnu", 1781 | "windows_i686_gnullvm", 1782 | "windows_i686_msvc", 1783 | "windows_x86_64_gnu", 1784 | "windows_x86_64_gnullvm", 1785 | "windows_x86_64_msvc", 1786 | ] 1787 | 1788 | [[package]] 1789 | name = "windows_aarch64_gnullvm" 1790 | version = "0.52.6" 1791 | source = "registry+https://github.com/rust-lang/crates.io-index" 1792 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1793 | 1794 | [[package]] 1795 | name = "windows_aarch64_msvc" 1796 | version = "0.52.6" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1799 | 1800 | [[package]] 1801 | name = "windows_i686_gnu" 1802 | version = "0.52.6" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1805 | 1806 | [[package]] 1807 | name = "windows_i686_gnullvm" 1808 | version = "0.52.6" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1811 | 1812 | [[package]] 1813 | name = "windows_i686_msvc" 1814 | version = "0.52.6" 1815 | source = "registry+https://github.com/rust-lang/crates.io-index" 1816 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1817 | 1818 | [[package]] 1819 | name = "windows_x86_64_gnu" 1820 | version = "0.52.6" 1821 | source = "registry+https://github.com/rust-lang/crates.io-index" 1822 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1823 | 1824 | [[package]] 1825 | name = "windows_x86_64_gnullvm" 1826 | version = "0.52.6" 1827 | source = "registry+https://github.com/rust-lang/crates.io-index" 1828 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1829 | 1830 | [[package]] 1831 | name = "windows_x86_64_msvc" 1832 | version = "0.52.6" 1833 | source = "registry+https://github.com/rust-lang/crates.io-index" 1834 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1835 | 1836 | [[package]] 1837 | name = "winnow" 1838 | version = "0.7.4" 1839 | source = "registry+https://github.com/rust-lang/crates.io-index" 1840 | checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" 1841 | dependencies = [ 1842 | "memchr", 1843 | ] 1844 | 1845 | [[package]] 1846 | name = "wit-bindgen-rt" 1847 | version = "0.39.0" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 1850 | dependencies = [ 1851 | "bitflags", 1852 | ] 1853 | 1854 | [[package]] 1855 | name = "write16" 1856 | version = "1.0.0" 1857 | source = "registry+https://github.com/rust-lang/crates.io-index" 1858 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 1859 | 1860 | [[package]] 1861 | name = "writeable" 1862 | version = "0.5.5" 1863 | source = "registry+https://github.com/rust-lang/crates.io-index" 1864 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 1865 | 1866 | [[package]] 1867 | name = "xxhash-rust" 1868 | version = "0.8.15" 1869 | source = "registry+https://github.com/rust-lang/crates.io-index" 1870 | checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" 1871 | 1872 | [[package]] 1873 | name = "yansi" 1874 | version = "1.0.1" 1875 | source = "registry+https://github.com/rust-lang/crates.io-index" 1876 | checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" 1877 | 1878 | [[package]] 1879 | name = "yoke" 1880 | version = "0.7.5" 1881 | source = "registry+https://github.com/rust-lang/crates.io-index" 1882 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 1883 | dependencies = [ 1884 | "serde", 1885 | "stable_deref_trait", 1886 | "yoke-derive", 1887 | "zerofrom", 1888 | ] 1889 | 1890 | [[package]] 1891 | name = "yoke-derive" 1892 | version = "0.7.5" 1893 | source = "registry+https://github.com/rust-lang/crates.io-index" 1894 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 1895 | dependencies = [ 1896 | "proc-macro2", 1897 | "quote", 1898 | "syn", 1899 | "synstructure", 1900 | ] 1901 | 1902 | [[package]] 1903 | name = "zerofrom" 1904 | version = "0.1.6" 1905 | source = "registry+https://github.com/rust-lang/crates.io-index" 1906 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 1907 | dependencies = [ 1908 | "zerofrom-derive", 1909 | ] 1910 | 1911 | [[package]] 1912 | name = "zerofrom-derive" 1913 | version = "0.1.6" 1914 | source = "registry+https://github.com/rust-lang/crates.io-index" 1915 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 1916 | dependencies = [ 1917 | "proc-macro2", 1918 | "quote", 1919 | "syn", 1920 | "synstructure", 1921 | ] 1922 | 1923 | [[package]] 1924 | name = "zerovec" 1925 | version = "0.10.4" 1926 | source = "registry+https://github.com/rust-lang/crates.io-index" 1927 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 1928 | dependencies = [ 1929 | "yoke", 1930 | "zerofrom", 1931 | "zerovec-derive", 1932 | ] 1933 | 1934 | [[package]] 1935 | name = "zerovec-derive" 1936 | version = "0.10.3" 1937 | source = "registry+https://github.com/rust-lang/crates.io-index" 1938 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 1939 | dependencies = [ 1940 | "proc-macro2", 1941 | "quote", 1942 | "syn", 1943 | ] 1944 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "leptos_drag_reorder" 3 | version = "0.1.0" 4 | authors = ["Ari Seyhun "] 5 | edition = "2021" 6 | description = "Leptos hook for draggable panels which can be rearranged." 7 | repository = "https://github.com/tqwewe/leptos_drag_reorder" 8 | license = "MIT OR Apache-2.0" 9 | keywords = ["leptos", "drag", "panel", "hook"] 10 | categories = ["wasm", "web-programming"] 11 | include = ["/src", "README.md"] 12 | 13 | [dependencies] 14 | js-sys = "0.3.70" 15 | leptos = "0.8.0-beta" 16 | send_wrapper = "0.6.0" 17 | wasm-bindgen = "0.2.95" 18 | web-sys = { version = "0.3.70", features = ["DataTransfer", "Document", "DomRect", "Element", "NodeList"] } 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Leptos Drag Reorder 2 | 3 | Leptos hook for draggable panels which can be rearranged. 4 | 5 | This library uses the browsers drag APIs, so it should be very stable. 6 | 7 | **Only supports Leptos 0.7** 8 | 9 | ![Preview GIF](https://github.com/tqwewe/leptos_drag_reorder/blob/main/preview.gif?raw=true) 10 | 11 | ### Example 12 | 13 | Provide drag order context. 14 | 15 | ```rust 16 | let panel_order = [ 17 | // Column 1 18 | RwSignal::new(vec!["1".into(), "3".into()]), 19 | // Column 2 20 | RwSignal::new(vec!["2".into()]), 21 | ]; 22 | let column_refs = provide_drag_reorder(panel_order); 23 | ``` 24 | 25 | Use drag reorder in panel component. 26 | 27 | ```rust 28 | let UseDragReorderReturn { 29 | node_ref, 30 | draggable, 31 | set_draggable, 32 | hover_position, 33 | on_dragstart, 34 | on_dragend, 35 | .. 36 | } = use_drag_reorder(id.to_string()); 37 | 38 | // apply node ref, on_dragstart/end, etc. 39 | ``` 40 | 41 | A full example is available in the example directory. 42 | -------------------------------------------------------------------------------- /example/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "aho-corasick" 7 | version = "1.1.3" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 10 | dependencies = [ 11 | "memchr", 12 | ] 13 | 14 | [[package]] 15 | name = "any_spawner" 16 | version = "0.2.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "41058deaa38c9d9dd933d6d238d825227cffa668e2839b52879f6619c63eee3b" 19 | dependencies = [ 20 | "futures", 21 | "thiserror 2.0.12", 22 | "wasm-bindgen-futures", 23 | ] 24 | 25 | [[package]] 26 | name = "anyhow" 27 | version = "1.0.93" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" 30 | 31 | [[package]] 32 | name = "async-lock" 33 | version = "3.4.0" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 36 | dependencies = [ 37 | "event-listener", 38 | "event-listener-strategy", 39 | "pin-project-lite", 40 | ] 41 | 42 | [[package]] 43 | name = "async-trait" 44 | version = "0.1.88" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 47 | dependencies = [ 48 | "proc-macro2", 49 | "quote", 50 | "syn", 51 | ] 52 | 53 | [[package]] 54 | name = "attribute-derive" 55 | version = "0.10.3" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "0053e96dd3bec5b4879c23a138d6ef26f2cb936c9cdc96274ac2b9ed44b5bb54" 58 | dependencies = [ 59 | "attribute-derive-macro", 60 | "derive-where", 61 | "manyhow", 62 | "proc-macro2", 63 | "quote", 64 | "syn", 65 | ] 66 | 67 | [[package]] 68 | name = "attribute-derive-macro" 69 | version = "0.10.3" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "463b53ad0fd5b460af4b1915fe045ff4d946d025fb6c4dc3337752eaa980f71b" 72 | dependencies = [ 73 | "collection_literals", 74 | "interpolator", 75 | "manyhow", 76 | "proc-macro-utils", 77 | "proc-macro2", 78 | "quote", 79 | "quote-use", 80 | "syn", 81 | ] 82 | 83 | [[package]] 84 | name = "autocfg" 85 | version = "1.4.0" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 88 | 89 | [[package]] 90 | name = "base64" 91 | version = "0.22.1" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 94 | 95 | [[package]] 96 | name = "bitflags" 97 | version = "2.6.0" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 100 | 101 | [[package]] 102 | name = "bumpalo" 103 | version = "3.16.0" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 106 | 107 | [[package]] 108 | name = "bytes" 109 | version = "1.10.1" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 112 | 113 | [[package]] 114 | name = "camino" 115 | version = "1.1.9" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" 118 | 119 | [[package]] 120 | name = "cfg-if" 121 | version = "1.0.0" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 124 | 125 | [[package]] 126 | name = "codee" 127 | version = "0.3.0" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "0f18d705321923b1a9358e3fc3c57c3b50171196827fc7f5f10b053242aca627" 130 | dependencies = [ 131 | "serde", 132 | "serde_json", 133 | "thiserror 2.0.12", 134 | ] 135 | 136 | [[package]] 137 | name = "collection_literals" 138 | version = "1.0.1" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "186dce98367766de751c42c4f03970fc60fc012296e706ccbb9d5df9b6c1e271" 141 | 142 | [[package]] 143 | name = "concurrent-queue" 144 | version = "2.5.0" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 147 | dependencies = [ 148 | "crossbeam-utils", 149 | ] 150 | 151 | [[package]] 152 | name = "config" 153 | version = "0.15.11" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "595aae20e65c3be792d05818e8c63025294ac3cb7e200f11459063a352a6ef80" 156 | dependencies = [ 157 | "convert_case 0.6.0", 158 | "pathdiff", 159 | "serde", 160 | "toml", 161 | "winnow 0.7.4", 162 | ] 163 | 164 | [[package]] 165 | name = "const-str" 166 | version = "0.5.7" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" 169 | 170 | [[package]] 171 | name = "const_format" 172 | version = "0.2.33" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" 175 | dependencies = [ 176 | "const_format_proc_macros", 177 | ] 178 | 179 | [[package]] 180 | name = "const_format_proc_macros" 181 | version = "0.2.33" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" 184 | dependencies = [ 185 | "proc-macro2", 186 | "quote", 187 | "unicode-xid", 188 | ] 189 | 190 | [[package]] 191 | name = "const_str_slice_concat" 192 | version = "0.1.0" 193 | source = "registry+https://github.com/rust-lang/crates.io-index" 194 | checksum = "f67855af358fcb20fac58f9d714c94e2b228fe5694c1c9b4ead4a366343eda1b" 195 | 196 | [[package]] 197 | name = "convert_case" 198 | version = "0.6.0" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" 201 | dependencies = [ 202 | "unicode-segmentation", 203 | ] 204 | 205 | [[package]] 206 | name = "convert_case" 207 | version = "0.7.1" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" 210 | dependencies = [ 211 | "unicode-segmentation", 212 | ] 213 | 214 | [[package]] 215 | name = "crossbeam-utils" 216 | version = "0.8.20" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 219 | 220 | [[package]] 221 | name = "dashmap" 222 | version = "6.1.0" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 225 | dependencies = [ 226 | "cfg-if", 227 | "crossbeam-utils", 228 | "hashbrown 0.14.5", 229 | "lock_api", 230 | "once_cell", 231 | "parking_lot_core", 232 | ] 233 | 234 | [[package]] 235 | name = "derive-where" 236 | version = "1.2.7" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" 239 | dependencies = [ 240 | "proc-macro2", 241 | "quote", 242 | "syn", 243 | ] 244 | 245 | [[package]] 246 | name = "displaydoc" 247 | version = "0.2.5" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 250 | dependencies = [ 251 | "proc-macro2", 252 | "quote", 253 | "syn", 254 | ] 255 | 256 | [[package]] 257 | name = "drain_filter_polyfill" 258 | version = "0.1.3" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "669a445ee724c5c69b1b06fe0b63e70a1c84bc9bb7d9696cd4f4e3ec45050408" 261 | 262 | [[package]] 263 | name = "either" 264 | version = "1.13.0" 265 | source = "registry+https://github.com/rust-lang/crates.io-index" 266 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 267 | 268 | [[package]] 269 | name = "either_of" 270 | version = "0.1.5" 271 | source = "registry+https://github.com/rust-lang/crates.io-index" 272 | checksum = "169ae1dd00fb612cf27fd069b3b10f325ea60ac551f08e5b931b4413972a847d" 273 | dependencies = [ 274 | "paste", 275 | "pin-project-lite", 276 | ] 277 | 278 | [[package]] 279 | name = "equivalent" 280 | version = "1.0.1" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 283 | 284 | [[package]] 285 | name = "erased" 286 | version = "0.1.2" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "a1731451909bde27714eacba19c2566362a7f35224f52b153d3f42cf60f72472" 289 | 290 | [[package]] 291 | name = "event-listener" 292 | version = "5.3.1" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" 295 | dependencies = [ 296 | "concurrent-queue", 297 | "parking", 298 | "pin-project-lite", 299 | ] 300 | 301 | [[package]] 302 | name = "event-listener-strategy" 303 | version = "0.5.2" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" 306 | dependencies = [ 307 | "event-listener", 308 | "pin-project-lite", 309 | ] 310 | 311 | [[package]] 312 | name = "fnv" 313 | version = "1.0.7" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 316 | 317 | [[package]] 318 | name = "form_urlencoded" 319 | version = "1.2.1" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 322 | dependencies = [ 323 | "percent-encoding", 324 | ] 325 | 326 | [[package]] 327 | name = "futures" 328 | version = "0.3.31" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 331 | dependencies = [ 332 | "futures-channel", 333 | "futures-core", 334 | "futures-executor", 335 | "futures-io", 336 | "futures-sink", 337 | "futures-task", 338 | "futures-util", 339 | ] 340 | 341 | [[package]] 342 | name = "futures-channel" 343 | version = "0.3.31" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 346 | dependencies = [ 347 | "futures-core", 348 | "futures-sink", 349 | ] 350 | 351 | [[package]] 352 | name = "futures-core" 353 | version = "0.3.31" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 356 | 357 | [[package]] 358 | name = "futures-executor" 359 | version = "0.3.31" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 362 | dependencies = [ 363 | "futures-core", 364 | "futures-task", 365 | "futures-util", 366 | "num_cpus", 367 | ] 368 | 369 | [[package]] 370 | name = "futures-io" 371 | version = "0.3.31" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 374 | 375 | [[package]] 376 | name = "futures-macro" 377 | version = "0.3.31" 378 | source = "registry+https://github.com/rust-lang/crates.io-index" 379 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 380 | dependencies = [ 381 | "proc-macro2", 382 | "quote", 383 | "syn", 384 | ] 385 | 386 | [[package]] 387 | name = "futures-sink" 388 | version = "0.3.31" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 391 | 392 | [[package]] 393 | name = "futures-task" 394 | version = "0.3.31" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 397 | 398 | [[package]] 399 | name = "futures-util" 400 | version = "0.3.31" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 403 | dependencies = [ 404 | "futures-channel", 405 | "futures-core", 406 | "futures-io", 407 | "futures-macro", 408 | "futures-sink", 409 | "futures-task", 410 | "memchr", 411 | "pin-project-lite", 412 | "pin-utils", 413 | "slab", 414 | ] 415 | 416 | [[package]] 417 | name = "getrandom" 418 | version = "0.2.15" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 421 | dependencies = [ 422 | "cfg-if", 423 | "libc", 424 | "wasi", 425 | ] 426 | 427 | [[package]] 428 | name = "gloo-net" 429 | version = "0.6.0" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" 432 | dependencies = [ 433 | "futures-channel", 434 | "futures-core", 435 | "futures-sink", 436 | "gloo-utils", 437 | "http", 438 | "js-sys", 439 | "pin-project", 440 | "serde", 441 | "serde_json", 442 | "thiserror 1.0.68", 443 | "wasm-bindgen", 444 | "wasm-bindgen-futures", 445 | "web-sys", 446 | ] 447 | 448 | [[package]] 449 | name = "gloo-utils" 450 | version = "0.2.0" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" 453 | dependencies = [ 454 | "js-sys", 455 | "serde", 456 | "serde_json", 457 | "wasm-bindgen", 458 | "web-sys", 459 | ] 460 | 461 | [[package]] 462 | name = "guardian" 463 | version = "1.2.0" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "493913a18c0d7bebb75127a26a432162c59edbe06f6cf712001e3e769345e8b5" 466 | 467 | [[package]] 468 | name = "hashbrown" 469 | version = "0.14.5" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 472 | 473 | [[package]] 474 | name = "hashbrown" 475 | version = "0.15.1" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" 478 | 479 | [[package]] 480 | name = "hermit-abi" 481 | version = "0.3.9" 482 | source = "registry+https://github.com/rust-lang/crates.io-index" 483 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 484 | 485 | [[package]] 486 | name = "html-escape" 487 | version = "0.2.13" 488 | source = "registry+https://github.com/rust-lang/crates.io-index" 489 | checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" 490 | dependencies = [ 491 | "utf8-width", 492 | ] 493 | 494 | [[package]] 495 | name = "http" 496 | version = "1.1.0" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 499 | dependencies = [ 500 | "bytes", 501 | "fnv", 502 | "itoa", 503 | ] 504 | 505 | [[package]] 506 | name = "hydration_context" 507 | version = "0.3.0" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "e8714ae4adeaa846d838f380fbd72f049197de629948f91bf045329e0cf0a283" 510 | dependencies = [ 511 | "futures", 512 | "once_cell", 513 | "or_poisoned", 514 | "pin-project-lite", 515 | "serde", 516 | "throw_error", 517 | ] 518 | 519 | [[package]] 520 | name = "icu_collections" 521 | version = "1.5.0" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 524 | dependencies = [ 525 | "displaydoc", 526 | "yoke", 527 | "zerofrom", 528 | "zerovec", 529 | ] 530 | 531 | [[package]] 532 | name = "icu_locid" 533 | version = "1.5.0" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 536 | dependencies = [ 537 | "displaydoc", 538 | "litemap", 539 | "tinystr", 540 | "writeable", 541 | "zerovec", 542 | ] 543 | 544 | [[package]] 545 | name = "icu_locid_transform" 546 | version = "1.5.0" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 549 | dependencies = [ 550 | "displaydoc", 551 | "icu_locid", 552 | "icu_locid_transform_data", 553 | "icu_provider", 554 | "tinystr", 555 | "zerovec", 556 | ] 557 | 558 | [[package]] 559 | name = "icu_locid_transform_data" 560 | version = "1.5.0" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 563 | 564 | [[package]] 565 | name = "icu_normalizer" 566 | version = "1.5.0" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 569 | dependencies = [ 570 | "displaydoc", 571 | "icu_collections", 572 | "icu_normalizer_data", 573 | "icu_properties", 574 | "icu_provider", 575 | "smallvec", 576 | "utf16_iter", 577 | "utf8_iter", 578 | "write16", 579 | "zerovec", 580 | ] 581 | 582 | [[package]] 583 | name = "icu_normalizer_data" 584 | version = "1.5.0" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 587 | 588 | [[package]] 589 | name = "icu_properties" 590 | version = "1.5.1" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 593 | dependencies = [ 594 | "displaydoc", 595 | "icu_collections", 596 | "icu_locid_transform", 597 | "icu_properties_data", 598 | "icu_provider", 599 | "tinystr", 600 | "zerovec", 601 | ] 602 | 603 | [[package]] 604 | name = "icu_properties_data" 605 | version = "1.5.0" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 608 | 609 | [[package]] 610 | name = "icu_provider" 611 | version = "1.5.0" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 614 | dependencies = [ 615 | "displaydoc", 616 | "icu_locid", 617 | "icu_provider_macros", 618 | "stable_deref_trait", 619 | "tinystr", 620 | "writeable", 621 | "yoke", 622 | "zerofrom", 623 | "zerovec", 624 | ] 625 | 626 | [[package]] 627 | name = "icu_provider_macros" 628 | version = "1.5.0" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 631 | dependencies = [ 632 | "proc-macro2", 633 | "quote", 634 | "syn", 635 | ] 636 | 637 | [[package]] 638 | name = "idna" 639 | version = "1.0.3" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 642 | dependencies = [ 643 | "idna_adapter", 644 | "smallvec", 645 | "utf8_iter", 646 | ] 647 | 648 | [[package]] 649 | name = "idna_adapter" 650 | version = "1.2.0" 651 | source = "registry+https://github.com/rust-lang/crates.io-index" 652 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 653 | dependencies = [ 654 | "icu_normalizer", 655 | "icu_properties", 656 | ] 657 | 658 | [[package]] 659 | name = "indexmap" 660 | version = "2.6.0" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" 663 | dependencies = [ 664 | "equivalent", 665 | "hashbrown 0.15.1", 666 | ] 667 | 668 | [[package]] 669 | name = "interpolator" 670 | version = "0.5.0" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" 673 | 674 | [[package]] 675 | name = "itertools" 676 | version = "0.14.0" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 679 | dependencies = [ 680 | "either", 681 | ] 682 | 683 | [[package]] 684 | name = "itoa" 685 | version = "1.0.11" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 688 | 689 | [[package]] 690 | name = "js-sys" 691 | version = "0.3.77" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 694 | dependencies = [ 695 | "once_cell", 696 | "wasm-bindgen", 697 | ] 698 | 699 | [[package]] 700 | name = "leptos" 701 | version = "0.8.0-beta" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "52ce9bd03a04fb96fc9840c8e77c4c988180facb53b465c494be80a05c816ab7" 704 | dependencies = [ 705 | "any_spawner", 706 | "cfg-if", 707 | "either_of", 708 | "futures", 709 | "hydration_context", 710 | "leptos_config", 711 | "leptos_dom", 712 | "leptos_hot_reload", 713 | "leptos_macro", 714 | "leptos_server", 715 | "oco_ref", 716 | "or_poisoned", 717 | "paste", 718 | "reactive_graph", 719 | "rustc-hash", 720 | "send_wrapper", 721 | "serde", 722 | "serde_qs", 723 | "server_fn", 724 | "slotmap", 725 | "tachys", 726 | "thiserror 2.0.12", 727 | "throw_error", 728 | "typed-builder", 729 | "typed-builder-macro", 730 | "wasm-bindgen", 731 | "web-sys", 732 | ] 733 | 734 | [[package]] 735 | name = "leptos_config" 736 | version = "0.8.0-beta" 737 | source = "registry+https://github.com/rust-lang/crates.io-index" 738 | checksum = "1cfd1daba84873ae380630958bf4525601840896ec697c6ee65beb69a12bf59a" 739 | dependencies = [ 740 | "config", 741 | "regex", 742 | "serde", 743 | "thiserror 2.0.12", 744 | "typed-builder", 745 | ] 746 | 747 | [[package]] 748 | name = "leptos_dom" 749 | version = "0.8.0-beta" 750 | source = "registry+https://github.com/rust-lang/crates.io-index" 751 | checksum = "88e60f167a3abac2804f069413fc075d2125469696edc6cad1018b0e1ad63348" 752 | dependencies = [ 753 | "js-sys", 754 | "or_poisoned", 755 | "reactive_graph", 756 | "send_wrapper", 757 | "tachys", 758 | "wasm-bindgen", 759 | "web-sys", 760 | ] 761 | 762 | [[package]] 763 | name = "leptos_drag_reorder" 764 | version = "0.1.1" 765 | dependencies = [ 766 | "js-sys", 767 | "leptos", 768 | "send_wrapper", 769 | "wasm-bindgen", 770 | "web-sys", 771 | ] 772 | 773 | [[package]] 774 | name = "leptos_drag_reorder_example" 775 | version = "0.1.0" 776 | dependencies = [ 777 | "leptos", 778 | "leptos_drag_reorder", 779 | ] 780 | 781 | [[package]] 782 | name = "leptos_hot_reload" 783 | version = "0.8.0-beta" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | checksum = "14674d5aa860afa6a008ab5e8289f432c46bcd8df296e0a3ffa36753ddf4d2be" 786 | dependencies = [ 787 | "anyhow", 788 | "camino", 789 | "indexmap", 790 | "parking_lot", 791 | "proc-macro2", 792 | "quote", 793 | "rstml", 794 | "serde", 795 | "syn", 796 | "walkdir", 797 | ] 798 | 799 | [[package]] 800 | name = "leptos_macro" 801 | version = "0.8.0-beta" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "cd3b663838c7a745159cbe64218036634c997dcbafabca8daa0854d3162d324d" 804 | dependencies = [ 805 | "attribute-derive", 806 | "cfg-if", 807 | "convert_case 0.7.1", 808 | "html-escape", 809 | "itertools", 810 | "leptos_hot_reload", 811 | "prettyplease", 812 | "proc-macro-error2", 813 | "proc-macro2", 814 | "quote", 815 | "rstml", 816 | "server_fn_macro", 817 | "syn", 818 | "uuid", 819 | ] 820 | 821 | [[package]] 822 | name = "leptos_server" 823 | version = "0.8.0-beta" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "e59be72c057dfff57b20150160593619b148a475078701797a0c89bf0e55ca67" 826 | dependencies = [ 827 | "any_spawner", 828 | "base64", 829 | "codee", 830 | "futures", 831 | "hydration_context", 832 | "or_poisoned", 833 | "reactive_graph", 834 | "send_wrapper", 835 | "serde", 836 | "serde_json", 837 | "server_fn", 838 | "tachys", 839 | ] 840 | 841 | [[package]] 842 | name = "libc" 843 | version = "0.2.162" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" 846 | 847 | [[package]] 848 | name = "linear-map" 849 | version = "1.2.0" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" 852 | 853 | [[package]] 854 | name = "litemap" 855 | version = "0.7.3" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" 858 | 859 | [[package]] 860 | name = "lock_api" 861 | version = "0.4.12" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 864 | dependencies = [ 865 | "autocfg", 866 | "scopeguard", 867 | ] 868 | 869 | [[package]] 870 | name = "log" 871 | version = "0.4.22" 872 | source = "registry+https://github.com/rust-lang/crates.io-index" 873 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 874 | 875 | [[package]] 876 | name = "manyhow" 877 | version = "0.11.4" 878 | source = "registry+https://github.com/rust-lang/crates.io-index" 879 | checksum = "b33efb3ca6d3b07393750d4030418d594ab1139cee518f0dc88db70fec873587" 880 | dependencies = [ 881 | "manyhow-macros", 882 | "proc-macro2", 883 | "quote", 884 | "syn", 885 | ] 886 | 887 | [[package]] 888 | name = "manyhow-macros" 889 | version = "0.11.4" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "46fce34d199b78b6e6073abf984c9cf5fd3e9330145a93ee0738a7443e371495" 892 | dependencies = [ 893 | "proc-macro-utils", 894 | "proc-macro2", 895 | "quote", 896 | ] 897 | 898 | [[package]] 899 | name = "memchr" 900 | version = "2.7.4" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 903 | 904 | [[package]] 905 | name = "next_tuple" 906 | version = "0.1.0" 907 | source = "registry+https://github.com/rust-lang/crates.io-index" 908 | checksum = "60993920e071b0c9b66f14e2b32740a4e27ffc82854dcd72035887f336a09a28" 909 | 910 | [[package]] 911 | name = "num_cpus" 912 | version = "1.16.0" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 915 | dependencies = [ 916 | "hermit-abi", 917 | "libc", 918 | ] 919 | 920 | [[package]] 921 | name = "oco_ref" 922 | version = "0.2.0" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "64b94982fe39a861561cf67ff17a7849f2cedadbbad960a797634032b7abb998" 925 | dependencies = [ 926 | "serde", 927 | "thiserror 1.0.68", 928 | ] 929 | 930 | [[package]] 931 | name = "once_cell" 932 | version = "1.20.2" 933 | source = "registry+https://github.com/rust-lang/crates.io-index" 934 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 935 | 936 | [[package]] 937 | name = "or_poisoned" 938 | version = "0.1.0" 939 | source = "registry+https://github.com/rust-lang/crates.io-index" 940 | checksum = "8c04f5d74368e4d0dfe06c45c8627c81bd7c317d52762d118fb9b3076f6420fd" 941 | 942 | [[package]] 943 | name = "parking" 944 | version = "2.2.1" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 947 | 948 | [[package]] 949 | name = "parking_lot" 950 | version = "0.12.3" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 953 | dependencies = [ 954 | "lock_api", 955 | "parking_lot_core", 956 | ] 957 | 958 | [[package]] 959 | name = "parking_lot_core" 960 | version = "0.9.10" 961 | source = "registry+https://github.com/rust-lang/crates.io-index" 962 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 963 | dependencies = [ 964 | "cfg-if", 965 | "libc", 966 | "redox_syscall", 967 | "smallvec", 968 | "windows-targets", 969 | ] 970 | 971 | [[package]] 972 | name = "paste" 973 | version = "1.0.15" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 976 | 977 | [[package]] 978 | name = "pathdiff" 979 | version = "0.2.2" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" 982 | 983 | [[package]] 984 | name = "percent-encoding" 985 | version = "2.3.1" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 988 | 989 | [[package]] 990 | name = "pin-project" 991 | version = "1.1.7" 992 | source = "registry+https://github.com/rust-lang/crates.io-index" 993 | checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" 994 | dependencies = [ 995 | "pin-project-internal", 996 | ] 997 | 998 | [[package]] 999 | name = "pin-project-internal" 1000 | version = "1.1.7" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" 1003 | dependencies = [ 1004 | "proc-macro2", 1005 | "quote", 1006 | "syn", 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "pin-project-lite" 1011 | version = "0.2.16" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1014 | 1015 | [[package]] 1016 | name = "pin-utils" 1017 | version = "0.1.0" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1020 | 1021 | [[package]] 1022 | name = "prettyplease" 1023 | version = "0.2.25" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" 1026 | dependencies = [ 1027 | "proc-macro2", 1028 | "syn", 1029 | ] 1030 | 1031 | [[package]] 1032 | name = "proc-macro-error" 1033 | version = "1.0.4" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1036 | dependencies = [ 1037 | "proc-macro-error-attr", 1038 | "proc-macro2", 1039 | "quote", 1040 | "version_check", 1041 | ] 1042 | 1043 | [[package]] 1044 | name = "proc-macro-error-attr" 1045 | version = "1.0.4" 1046 | source = "registry+https://github.com/rust-lang/crates.io-index" 1047 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1048 | dependencies = [ 1049 | "proc-macro2", 1050 | "quote", 1051 | "version_check", 1052 | ] 1053 | 1054 | [[package]] 1055 | name = "proc-macro-error-attr2" 1056 | version = "2.0.0" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" 1059 | dependencies = [ 1060 | "proc-macro2", 1061 | "quote", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "proc-macro-error2" 1066 | version = "2.0.1" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" 1069 | dependencies = [ 1070 | "proc-macro-error-attr2", 1071 | "proc-macro2", 1072 | "quote", 1073 | "syn", 1074 | ] 1075 | 1076 | [[package]] 1077 | name = "proc-macro-utils" 1078 | version = "0.10.0" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "eeaf08a13de400bc215877b5bdc088f241b12eb42f0a548d3390dc1c56bb7071" 1081 | dependencies = [ 1082 | "proc-macro2", 1083 | "quote", 1084 | "smallvec", 1085 | ] 1086 | 1087 | [[package]] 1088 | name = "proc-macro2" 1089 | version = "1.0.89" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" 1092 | dependencies = [ 1093 | "unicode-ident", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "proc-macro2-diagnostics" 1098 | version = "0.10.1" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" 1101 | dependencies = [ 1102 | "proc-macro2", 1103 | "quote", 1104 | "syn", 1105 | "version_check", 1106 | "yansi", 1107 | ] 1108 | 1109 | [[package]] 1110 | name = "quote" 1111 | version = "1.0.37" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 1114 | dependencies = [ 1115 | "proc-macro2", 1116 | ] 1117 | 1118 | [[package]] 1119 | name = "quote-use" 1120 | version = "0.8.4" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "9619db1197b497a36178cfc736dc96b271fe918875fbf1344c436a7e93d0321e" 1123 | dependencies = [ 1124 | "quote", 1125 | "quote-use-macros", 1126 | ] 1127 | 1128 | [[package]] 1129 | name = "quote-use-macros" 1130 | version = "0.8.4" 1131 | source = "registry+https://github.com/rust-lang/crates.io-index" 1132 | checksum = "82ebfb7faafadc06a7ab141a6f67bcfb24cb8beb158c6fe933f2f035afa99f35" 1133 | dependencies = [ 1134 | "proc-macro-utils", 1135 | "proc-macro2", 1136 | "quote", 1137 | "syn", 1138 | ] 1139 | 1140 | [[package]] 1141 | name = "reactive_graph" 1142 | version = "0.2.0-beta" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "3f7381d64e86a5ef9f5be26821c4be2111420a49e786163b0efbdfc399f2d7c3" 1145 | dependencies = [ 1146 | "any_spawner", 1147 | "async-lock", 1148 | "futures", 1149 | "guardian", 1150 | "hydration_context", 1151 | "or_poisoned", 1152 | "pin-project-lite", 1153 | "rustc-hash", 1154 | "send_wrapper", 1155 | "serde", 1156 | "slotmap", 1157 | "thiserror 2.0.12", 1158 | "web-sys", 1159 | ] 1160 | 1161 | [[package]] 1162 | name = "reactive_stores" 1163 | version = "0.2.0-beta" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | checksum = "0a3121eef8f715c57adcc3469a8af511d7db4f533406f91a599fca4f761214af" 1166 | dependencies = [ 1167 | "guardian", 1168 | "itertools", 1169 | "or_poisoned", 1170 | "paste", 1171 | "reactive_graph", 1172 | "reactive_stores_macro", 1173 | "rustc-hash", 1174 | ] 1175 | 1176 | [[package]] 1177 | name = "reactive_stores_macro" 1178 | version = "0.2.0-beta" 1179 | source = "registry+https://github.com/rust-lang/crates.io-index" 1180 | checksum = "4a7417cb8fa7a49425bc1a0942b4bd7bbba4161c46e53099968e6fcb9d9c8a0b" 1181 | dependencies = [ 1182 | "convert_case 0.7.1", 1183 | "proc-macro-error2", 1184 | "proc-macro2", 1185 | "quote", 1186 | "syn", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "redox_syscall" 1191 | version = "0.5.7" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" 1194 | dependencies = [ 1195 | "bitflags", 1196 | ] 1197 | 1198 | [[package]] 1199 | name = "regex" 1200 | version = "1.11.1" 1201 | source = "registry+https://github.com/rust-lang/crates.io-index" 1202 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1203 | dependencies = [ 1204 | "aho-corasick", 1205 | "memchr", 1206 | "regex-automata", 1207 | "regex-syntax", 1208 | ] 1209 | 1210 | [[package]] 1211 | name = "regex-automata" 1212 | version = "0.4.8" 1213 | source = "registry+https://github.com/rust-lang/crates.io-index" 1214 | checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" 1215 | dependencies = [ 1216 | "aho-corasick", 1217 | "memchr", 1218 | "regex-syntax", 1219 | ] 1220 | 1221 | [[package]] 1222 | name = "regex-syntax" 1223 | version = "0.8.5" 1224 | source = "registry+https://github.com/rust-lang/crates.io-index" 1225 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1226 | 1227 | [[package]] 1228 | name = "rstml" 1229 | version = "0.12.0" 1230 | source = "registry+https://github.com/rust-lang/crates.io-index" 1231 | checksum = "51187e564f12336ef40cd04f6f4d805d6919188001dcf1e0a021898ea0fe28ce" 1232 | dependencies = [ 1233 | "derive-where", 1234 | "proc-macro2", 1235 | "proc-macro2-diagnostics", 1236 | "quote", 1237 | "syn", 1238 | "syn_derive", 1239 | "thiserror 1.0.68", 1240 | ] 1241 | 1242 | [[package]] 1243 | name = "rustc-hash" 1244 | version = "2.0.0" 1245 | source = "registry+https://github.com/rust-lang/crates.io-index" 1246 | checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" 1247 | 1248 | [[package]] 1249 | name = "rustversion" 1250 | version = "1.0.20" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 1253 | 1254 | [[package]] 1255 | name = "ryu" 1256 | version = "1.0.18" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1259 | 1260 | [[package]] 1261 | name = "same-file" 1262 | version = "1.0.6" 1263 | source = "registry+https://github.com/rust-lang/crates.io-index" 1264 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1265 | dependencies = [ 1266 | "winapi-util", 1267 | ] 1268 | 1269 | [[package]] 1270 | name = "scopeguard" 1271 | version = "1.2.0" 1272 | source = "registry+https://github.com/rust-lang/crates.io-index" 1273 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1274 | 1275 | [[package]] 1276 | name = "send_wrapper" 1277 | version = "0.6.0" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 1280 | dependencies = [ 1281 | "futures-core", 1282 | ] 1283 | 1284 | [[package]] 1285 | name = "serde" 1286 | version = "1.0.214" 1287 | source = "registry+https://github.com/rust-lang/crates.io-index" 1288 | checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" 1289 | dependencies = [ 1290 | "serde_derive", 1291 | ] 1292 | 1293 | [[package]] 1294 | name = "serde_derive" 1295 | version = "1.0.214" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" 1298 | dependencies = [ 1299 | "proc-macro2", 1300 | "quote", 1301 | "syn", 1302 | ] 1303 | 1304 | [[package]] 1305 | name = "serde_json" 1306 | version = "1.0.132" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" 1309 | dependencies = [ 1310 | "itoa", 1311 | "memchr", 1312 | "ryu", 1313 | "serde", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "serde_qs" 1318 | version = "0.13.0" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "cd34f36fe4c5ba9654417139a9b3a20d2e1de6012ee678ad14d240c22c78d8d6" 1321 | dependencies = [ 1322 | "percent-encoding", 1323 | "serde", 1324 | "thiserror 1.0.68", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "serde_spanned" 1329 | version = "0.6.8" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" 1332 | dependencies = [ 1333 | "serde", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "server_fn" 1338 | version = "0.8.0-beta" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "a3a6794e429718b09d4c79b667330b0a7c7412a70d64f9300e31447fd9210caa" 1341 | dependencies = [ 1342 | "base64", 1343 | "bytes", 1344 | "const-str", 1345 | "const_format", 1346 | "dashmap", 1347 | "futures", 1348 | "gloo-net", 1349 | "http", 1350 | "js-sys", 1351 | "once_cell", 1352 | "pin-project-lite", 1353 | "send_wrapper", 1354 | "serde", 1355 | "serde_json", 1356 | "serde_qs", 1357 | "server_fn_macro_default", 1358 | "thiserror 2.0.12", 1359 | "throw_error", 1360 | "url", 1361 | "wasm-bindgen", 1362 | "wasm-bindgen-futures", 1363 | "wasm-streams", 1364 | "web-sys", 1365 | "xxhash-rust", 1366 | ] 1367 | 1368 | [[package]] 1369 | name = "server_fn_macro" 1370 | version = "0.8.0-beta" 1371 | source = "registry+https://github.com/rust-lang/crates.io-index" 1372 | checksum = "0d13c6a6d935eafd25c9e6732e8728ea1a4a7d699b40b7d8eec58f1fde05c2b2" 1373 | dependencies = [ 1374 | "const_format", 1375 | "convert_case 0.6.0", 1376 | "proc-macro2", 1377 | "quote", 1378 | "syn", 1379 | "xxhash-rust", 1380 | ] 1381 | 1382 | [[package]] 1383 | name = "server_fn_macro_default" 1384 | version = "0.8.0-beta" 1385 | source = "registry+https://github.com/rust-lang/crates.io-index" 1386 | checksum = "b6df77237d3bd48227f9c48e6ff18f3bde7eb92e30bc9f75c890bfb6d0b6a70a" 1387 | dependencies = [ 1388 | "server_fn_macro", 1389 | "syn", 1390 | ] 1391 | 1392 | [[package]] 1393 | name = "slab" 1394 | version = "0.4.9" 1395 | source = "registry+https://github.com/rust-lang/crates.io-index" 1396 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1397 | dependencies = [ 1398 | "autocfg", 1399 | ] 1400 | 1401 | [[package]] 1402 | name = "slotmap" 1403 | version = "1.0.7" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 1406 | dependencies = [ 1407 | "version_check", 1408 | ] 1409 | 1410 | [[package]] 1411 | name = "smallvec" 1412 | version = "1.13.2" 1413 | source = "registry+https://github.com/rust-lang/crates.io-index" 1414 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1415 | 1416 | [[package]] 1417 | name = "stable_deref_trait" 1418 | version = "1.2.0" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1421 | 1422 | [[package]] 1423 | name = "syn" 1424 | version = "2.0.87" 1425 | source = "registry+https://github.com/rust-lang/crates.io-index" 1426 | checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" 1427 | dependencies = [ 1428 | "proc-macro2", 1429 | "quote", 1430 | "unicode-ident", 1431 | ] 1432 | 1433 | [[package]] 1434 | name = "syn_derive" 1435 | version = "0.1.8" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" 1438 | dependencies = [ 1439 | "proc-macro-error", 1440 | "proc-macro2", 1441 | "quote", 1442 | "syn", 1443 | ] 1444 | 1445 | [[package]] 1446 | name = "synstructure" 1447 | version = "0.13.1" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 1450 | dependencies = [ 1451 | "proc-macro2", 1452 | "quote", 1453 | "syn", 1454 | ] 1455 | 1456 | [[package]] 1457 | name = "tachys" 1458 | version = "0.2.0-beta" 1459 | source = "registry+https://github.com/rust-lang/crates.io-index" 1460 | checksum = "61294b3f019afe959ff0604a4227f003c02fba1abeb39b9e4490e6dd44b385e7" 1461 | dependencies = [ 1462 | "any_spawner", 1463 | "async-trait", 1464 | "const_str_slice_concat", 1465 | "drain_filter_polyfill", 1466 | "either_of", 1467 | "erased", 1468 | "futures", 1469 | "html-escape", 1470 | "indexmap", 1471 | "itertools", 1472 | "js-sys", 1473 | "linear-map", 1474 | "next_tuple", 1475 | "oco_ref", 1476 | "once_cell", 1477 | "or_poisoned", 1478 | "parking_lot", 1479 | "paste", 1480 | "reactive_graph", 1481 | "reactive_stores", 1482 | "rustc-hash", 1483 | "send_wrapper", 1484 | "slotmap", 1485 | "throw_error", 1486 | "wasm-bindgen", 1487 | "web-sys", 1488 | ] 1489 | 1490 | [[package]] 1491 | name = "thiserror" 1492 | version = "1.0.68" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" 1495 | dependencies = [ 1496 | "thiserror-impl 1.0.68", 1497 | ] 1498 | 1499 | [[package]] 1500 | name = "thiserror" 1501 | version = "2.0.12" 1502 | source = "registry+https://github.com/rust-lang/crates.io-index" 1503 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 1504 | dependencies = [ 1505 | "thiserror-impl 2.0.12", 1506 | ] 1507 | 1508 | [[package]] 1509 | name = "thiserror-impl" 1510 | version = "1.0.68" 1511 | source = "registry+https://github.com/rust-lang/crates.io-index" 1512 | checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" 1513 | dependencies = [ 1514 | "proc-macro2", 1515 | "quote", 1516 | "syn", 1517 | ] 1518 | 1519 | [[package]] 1520 | name = "thiserror-impl" 1521 | version = "2.0.12" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 1524 | dependencies = [ 1525 | "proc-macro2", 1526 | "quote", 1527 | "syn", 1528 | ] 1529 | 1530 | [[package]] 1531 | name = "throw_error" 1532 | version = "0.3.0" 1533 | source = "registry+https://github.com/rust-lang/crates.io-index" 1534 | checksum = "41e42a6afdde94f3e656fae18f837cb9bbe500a5ac5de325b09f3ec05b9c28e3" 1535 | dependencies = [ 1536 | "pin-project-lite", 1537 | ] 1538 | 1539 | [[package]] 1540 | name = "tinystr" 1541 | version = "0.7.6" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 1544 | dependencies = [ 1545 | "displaydoc", 1546 | "zerovec", 1547 | ] 1548 | 1549 | [[package]] 1550 | name = "toml" 1551 | version = "0.8.19" 1552 | source = "registry+https://github.com/rust-lang/crates.io-index" 1553 | checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" 1554 | dependencies = [ 1555 | "serde", 1556 | "serde_spanned", 1557 | "toml_datetime", 1558 | "toml_edit", 1559 | ] 1560 | 1561 | [[package]] 1562 | name = "toml_datetime" 1563 | version = "0.6.8" 1564 | source = "registry+https://github.com/rust-lang/crates.io-index" 1565 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 1566 | dependencies = [ 1567 | "serde", 1568 | ] 1569 | 1570 | [[package]] 1571 | name = "toml_edit" 1572 | version = "0.22.22" 1573 | source = "registry+https://github.com/rust-lang/crates.io-index" 1574 | checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" 1575 | dependencies = [ 1576 | "indexmap", 1577 | "serde", 1578 | "serde_spanned", 1579 | "toml_datetime", 1580 | "winnow 0.6.20", 1581 | ] 1582 | 1583 | [[package]] 1584 | name = "typed-builder" 1585 | version = "0.20.1" 1586 | source = "registry+https://github.com/rust-lang/crates.io-index" 1587 | checksum = "cd9d30e3a08026c78f246b173243cf07b3696d274debd26680773b6773c2afc7" 1588 | dependencies = [ 1589 | "typed-builder-macro", 1590 | ] 1591 | 1592 | [[package]] 1593 | name = "typed-builder-macro" 1594 | version = "0.20.1" 1595 | source = "registry+https://github.com/rust-lang/crates.io-index" 1596 | checksum = "3c36781cc0e46a83726d9879608e4cf6c2505237e263a8eb8c24502989cfdb28" 1597 | dependencies = [ 1598 | "proc-macro2", 1599 | "quote", 1600 | "syn", 1601 | ] 1602 | 1603 | [[package]] 1604 | name = "unicode-ident" 1605 | version = "1.0.13" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 1608 | 1609 | [[package]] 1610 | name = "unicode-segmentation" 1611 | version = "1.12.0" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 1614 | 1615 | [[package]] 1616 | name = "unicode-xid" 1617 | version = "0.2.6" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 1620 | 1621 | [[package]] 1622 | name = "url" 1623 | version = "2.5.3" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" 1626 | dependencies = [ 1627 | "form_urlencoded", 1628 | "idna", 1629 | "percent-encoding", 1630 | ] 1631 | 1632 | [[package]] 1633 | name = "utf16_iter" 1634 | version = "1.0.5" 1635 | source = "registry+https://github.com/rust-lang/crates.io-index" 1636 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 1637 | 1638 | [[package]] 1639 | name = "utf8-width" 1640 | version = "0.1.7" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" 1643 | 1644 | [[package]] 1645 | name = "utf8_iter" 1646 | version = "1.0.4" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1649 | 1650 | [[package]] 1651 | name = "uuid" 1652 | version = "1.11.0" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" 1655 | dependencies = [ 1656 | "getrandom", 1657 | ] 1658 | 1659 | [[package]] 1660 | name = "version_check" 1661 | version = "0.9.5" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1664 | 1665 | [[package]] 1666 | name = "walkdir" 1667 | version = "2.5.0" 1668 | source = "registry+https://github.com/rust-lang/crates.io-index" 1669 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 1670 | dependencies = [ 1671 | "same-file", 1672 | "winapi-util", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "wasi" 1677 | version = "0.11.0+wasi-snapshot-preview1" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1680 | 1681 | [[package]] 1682 | name = "wasm-bindgen" 1683 | version = "0.2.100" 1684 | source = "registry+https://github.com/rust-lang/crates.io-index" 1685 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 1686 | dependencies = [ 1687 | "cfg-if", 1688 | "once_cell", 1689 | "rustversion", 1690 | "wasm-bindgen-macro", 1691 | ] 1692 | 1693 | [[package]] 1694 | name = "wasm-bindgen-backend" 1695 | version = "0.2.100" 1696 | source = "registry+https://github.com/rust-lang/crates.io-index" 1697 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 1698 | dependencies = [ 1699 | "bumpalo", 1700 | "log", 1701 | "proc-macro2", 1702 | "quote", 1703 | "syn", 1704 | "wasm-bindgen-shared", 1705 | ] 1706 | 1707 | [[package]] 1708 | name = "wasm-bindgen-futures" 1709 | version = "0.4.50" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 1712 | dependencies = [ 1713 | "cfg-if", 1714 | "js-sys", 1715 | "once_cell", 1716 | "wasm-bindgen", 1717 | "web-sys", 1718 | ] 1719 | 1720 | [[package]] 1721 | name = "wasm-bindgen-macro" 1722 | version = "0.2.100" 1723 | source = "registry+https://github.com/rust-lang/crates.io-index" 1724 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 1725 | dependencies = [ 1726 | "quote", 1727 | "wasm-bindgen-macro-support", 1728 | ] 1729 | 1730 | [[package]] 1731 | name = "wasm-bindgen-macro-support" 1732 | version = "0.2.100" 1733 | source = "registry+https://github.com/rust-lang/crates.io-index" 1734 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 1735 | dependencies = [ 1736 | "proc-macro2", 1737 | "quote", 1738 | "syn", 1739 | "wasm-bindgen-backend", 1740 | "wasm-bindgen-shared", 1741 | ] 1742 | 1743 | [[package]] 1744 | name = "wasm-bindgen-shared" 1745 | version = "0.2.100" 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" 1747 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 1748 | dependencies = [ 1749 | "unicode-ident", 1750 | ] 1751 | 1752 | [[package]] 1753 | name = "wasm-streams" 1754 | version = "0.4.2" 1755 | source = "registry+https://github.com/rust-lang/crates.io-index" 1756 | checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 1757 | dependencies = [ 1758 | "futures-util", 1759 | "js-sys", 1760 | "wasm-bindgen", 1761 | "wasm-bindgen-futures", 1762 | "web-sys", 1763 | ] 1764 | 1765 | [[package]] 1766 | name = "web-sys" 1767 | version = "0.3.77" 1768 | source = "registry+https://github.com/rust-lang/crates.io-index" 1769 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 1770 | dependencies = [ 1771 | "js-sys", 1772 | "wasm-bindgen", 1773 | ] 1774 | 1775 | [[package]] 1776 | name = "winapi-util" 1777 | version = "0.1.9" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 1780 | dependencies = [ 1781 | "windows-sys", 1782 | ] 1783 | 1784 | [[package]] 1785 | name = "windows-sys" 1786 | version = "0.59.0" 1787 | source = "registry+https://github.com/rust-lang/crates.io-index" 1788 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1789 | dependencies = [ 1790 | "windows-targets", 1791 | ] 1792 | 1793 | [[package]] 1794 | name = "windows-targets" 1795 | version = "0.52.6" 1796 | source = "registry+https://github.com/rust-lang/crates.io-index" 1797 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1798 | dependencies = [ 1799 | "windows_aarch64_gnullvm", 1800 | "windows_aarch64_msvc", 1801 | "windows_i686_gnu", 1802 | "windows_i686_gnullvm", 1803 | "windows_i686_msvc", 1804 | "windows_x86_64_gnu", 1805 | "windows_x86_64_gnullvm", 1806 | "windows_x86_64_msvc", 1807 | ] 1808 | 1809 | [[package]] 1810 | name = "windows_aarch64_gnullvm" 1811 | version = "0.52.6" 1812 | source = "registry+https://github.com/rust-lang/crates.io-index" 1813 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1814 | 1815 | [[package]] 1816 | name = "windows_aarch64_msvc" 1817 | version = "0.52.6" 1818 | source = "registry+https://github.com/rust-lang/crates.io-index" 1819 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1820 | 1821 | [[package]] 1822 | name = "windows_i686_gnu" 1823 | version = "0.52.6" 1824 | source = "registry+https://github.com/rust-lang/crates.io-index" 1825 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1826 | 1827 | [[package]] 1828 | name = "windows_i686_gnullvm" 1829 | version = "0.52.6" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1832 | 1833 | [[package]] 1834 | name = "windows_i686_msvc" 1835 | version = "0.52.6" 1836 | source = "registry+https://github.com/rust-lang/crates.io-index" 1837 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1838 | 1839 | [[package]] 1840 | name = "windows_x86_64_gnu" 1841 | version = "0.52.6" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1844 | 1845 | [[package]] 1846 | name = "windows_x86_64_gnullvm" 1847 | version = "0.52.6" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1850 | 1851 | [[package]] 1852 | name = "windows_x86_64_msvc" 1853 | version = "0.52.6" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1856 | 1857 | [[package]] 1858 | name = "winnow" 1859 | version = "0.6.20" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" 1862 | dependencies = [ 1863 | "memchr", 1864 | ] 1865 | 1866 | [[package]] 1867 | name = "winnow" 1868 | version = "0.7.4" 1869 | source = "registry+https://github.com/rust-lang/crates.io-index" 1870 | checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" 1871 | dependencies = [ 1872 | "memchr", 1873 | ] 1874 | 1875 | [[package]] 1876 | name = "write16" 1877 | version = "1.0.0" 1878 | source = "registry+https://github.com/rust-lang/crates.io-index" 1879 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 1880 | 1881 | [[package]] 1882 | name = "writeable" 1883 | version = "0.5.5" 1884 | source = "registry+https://github.com/rust-lang/crates.io-index" 1885 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 1886 | 1887 | [[package]] 1888 | name = "xxhash-rust" 1889 | version = "0.8.12" 1890 | source = "registry+https://github.com/rust-lang/crates.io-index" 1891 | checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" 1892 | 1893 | [[package]] 1894 | name = "yansi" 1895 | version = "1.0.1" 1896 | source = "registry+https://github.com/rust-lang/crates.io-index" 1897 | checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" 1898 | 1899 | [[package]] 1900 | name = "yoke" 1901 | version = "0.7.4" 1902 | source = "registry+https://github.com/rust-lang/crates.io-index" 1903 | checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" 1904 | dependencies = [ 1905 | "serde", 1906 | "stable_deref_trait", 1907 | "yoke-derive", 1908 | "zerofrom", 1909 | ] 1910 | 1911 | [[package]] 1912 | name = "yoke-derive" 1913 | version = "0.7.4" 1914 | source = "registry+https://github.com/rust-lang/crates.io-index" 1915 | checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" 1916 | dependencies = [ 1917 | "proc-macro2", 1918 | "quote", 1919 | "syn", 1920 | "synstructure", 1921 | ] 1922 | 1923 | [[package]] 1924 | name = "zerofrom" 1925 | version = "0.1.4" 1926 | source = "registry+https://github.com/rust-lang/crates.io-index" 1927 | checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" 1928 | dependencies = [ 1929 | "zerofrom-derive", 1930 | ] 1931 | 1932 | [[package]] 1933 | name = "zerofrom-derive" 1934 | version = "0.1.4" 1935 | source = "registry+https://github.com/rust-lang/crates.io-index" 1936 | checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" 1937 | dependencies = [ 1938 | "proc-macro2", 1939 | "quote", 1940 | "syn", 1941 | "synstructure", 1942 | ] 1943 | 1944 | [[package]] 1945 | name = "zerovec" 1946 | version = "0.10.4" 1947 | source = "registry+https://github.com/rust-lang/crates.io-index" 1948 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 1949 | dependencies = [ 1950 | "yoke", 1951 | "zerofrom", 1952 | "zerovec-derive", 1953 | ] 1954 | 1955 | [[package]] 1956 | name = "zerovec-derive" 1957 | version = "0.10.3" 1958 | source = "registry+https://github.com/rust-lang/crates.io-index" 1959 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 1960 | dependencies = [ 1961 | "proc-macro2", 1962 | "quote", 1963 | "syn", 1964 | ] 1965 | -------------------------------------------------------------------------------- /example/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "leptos_drag_reorder_example" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | leptos = { version = "0.8.0-beta", features = ["csr"] } 8 | leptos_drag_reorder = { path = ".." } 9 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /example/src/main.rs: -------------------------------------------------------------------------------- 1 | use leptos::{ev, prelude::*}; 2 | use leptos_drag_reorder::{ 3 | provide_drag_reorder, use_drag_reorder, HoverPosition, UseDragReorderReturn, 4 | }; 5 | 6 | fn main() { 7 | mount_to_body(App) 8 | } 9 | 10 | #[derive(Clone, Debug, PartialEq, Eq)] 11 | struct Panel { 12 | id: u32, 13 | title: String, 14 | } 15 | 16 | #[component] 17 | fn App() -> impl IntoView { 18 | let panels = RwSignal::new(vec![ 19 | Panel { 20 | id: 1, 21 | title: "Panel #1".to_string(), 22 | }, 23 | Panel { 24 | id: 2, 25 | title: "Panel #2".to_string(), 26 | }, 27 | Panel { 28 | id: 3, 29 | title: "Panel #3".to_string(), 30 | }, 31 | ]); 32 | let panel_order = [ 33 | // Column 1 34 | RwSignal::new(vec!["1".into(), "3".into()]), 35 | // Column 2 36 | RwSignal::new(vec!["2".into()]), 37 | ]; 38 | let column_refs = provide_drag_reorder(panel_order); 39 | 40 | let columns = panel_order 41 | .into_iter() 42 | .zip(column_refs) 43 | .map(|(ordering, column_ref)| { 44 | let column_items = move || { 45 | ordering 46 | .read() 47 | .iter() 48 | .filter_map(|id| { 49 | panels 50 | .read() 51 | .iter() 52 | .find(|panel| &panel.id.to_string() == id) 53 | .cloned() 54 | }) 55 | .collect::>() 56 | }; 57 | 58 | view! { 59 |
60 | 65 | 66 | 67 |
68 | } 69 | }) 70 | .collect_view(); 71 | 72 | let add_panel = { 73 | move |_: ev::MouseEvent| { 74 | let mut panels = panels.write(); 75 | let next_id = panels.last().map(|item| item.id).unwrap_or(0) + 1; 76 | panels.push(Panel { 77 | id: next_id, 78 | title: format!("Panel #{next_id}"), 79 | }); 80 | panel_order[0].update(|order| { 81 | order.insert(0, next_id.to_string().into()); 82 | }); 83 | } 84 | }; 85 | 86 | view! { 87 |
88 | 89 | 90 |
91 | {columns} 92 |
93 |
94 | } 95 | } 96 | 97 | #[component] 98 | fn Panel(id: u32, title: String) -> impl IntoView { 99 | let UseDragReorderReturn { 100 | node_ref, 101 | draggable, 102 | set_draggable, 103 | hover_position, 104 | on_dragstart, 105 | on_dragend, 106 | .. 107 | } = use_drag_reorder(id.to_string()); 108 | 109 | view! { 110 |
120 | {title} 121 |
122 | } 123 | } 124 | -------------------------------------------------------------------------------- /preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tqwewe/leptos_drag_reorder/2b87f00ef84484be4a2974a4d0f0192ee05c0de9/preview.gif -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![doc = include_str!("../README.md")] 2 | 3 | use std::collections::HashMap; 4 | 5 | use js_sys::Function; 6 | use leptos::{ev, html::ElementType, prelude::*, tachys::dom::event_target}; 7 | use send_wrapper::SendWrapper; 8 | use wasm_bindgen::{prelude::Closure, JsCast}; 9 | 10 | /// Return value for [`use_drag_reorder`]. 11 | pub struct UseDragReorderReturn 12 | where 13 | E: ElementType, 14 | E::Output: 'static, 15 | SetDraggable: Fn(bool) + Copy, 16 | OnDragStart: Fn(ev::DragEvent) + Clone, 17 | OnDragEnd: Fn(ev::DragEvent) + Clone, 18 | { 19 | /// Node ref which should be assigned to the panel element. 20 | pub node_ref: NodeRef, 21 | /// Is this panel being dragged. 22 | pub is_dragging: Signal, 23 | /// The current position this panel is being hovered over. 24 | /// 25 | /// This is useful for styling. Typically you would have a line above or below this panel to indicate 26 | /// the dragged panel can be dropped. 27 | pub hover_position: Signal>, 28 | /// Is the panel draggable. 29 | pub draggable: Signal, 30 | /// Enables/disables the panel to be draggable. 31 | pub set_draggable: SetDraggable, 32 | /// Callback which should be assigned to the `on:dragstart` event. 33 | pub on_dragstart: OnDragStart, 34 | /// Callback which should be assigned to the `on:dragend` event. 35 | pub on_dragend: OnDragEnd, 36 | } 37 | 38 | /// A hovering panels position either above or below. 39 | #[derive(Clone, Copy, Debug, PartialEq, Eq)] 40 | pub enum HoverPosition { 41 | Above, 42 | Below, 43 | } 44 | 45 | /// Registers a panel with drag reordering for a given ID. 46 | pub fn use_drag_reorder( 47 | id: impl Into>, 48 | ) -> UseDragReorderReturn< 49 | E, 50 | impl Fn(bool) + Copy, 51 | impl Fn(ev::DragEvent) + Clone, 52 | impl Fn(ev::DragEvent) + Clone, 53 | > 54 | where 55 | E: ElementType + 'static, 56 | E::Output: JsCast + Into + Clone + 'static, 57 | { 58 | let DragReorderContext { 59 | column_refs, 60 | panel_order, 61 | currently_dragged_panel, 62 | hover_info, 63 | panels, 64 | } = expect_context(); 65 | let mut id: Oco<'static, str> = id.into(); 66 | id.upgrade_inplace(); 67 | let node_ref = NodeRef::::new(); 68 | 69 | Effect::new({ 70 | let id = id.clone(); 71 | move |_| match node_ref.get() { 72 | Some(node_ref) => { 73 | panels 74 | .write() 75 | .insert(id.clone(), SendWrapper::new(node_ref.into())); 76 | } 77 | None => { 78 | panels.write().remove(&id); 79 | } 80 | } 81 | }); 82 | 83 | on_cleanup({ 84 | let id = id.clone(); 85 | move || { 86 | panels.write().remove(&id); 87 | } 88 | }); 89 | 90 | let is_dragging = Signal::derive({ 91 | let id = id.clone(); 92 | move || currently_dragged_panel.read().as_deref() == Some(id.as_str()) 93 | }); 94 | let hover_position = Signal::derive({ 95 | let id = id.clone(); 96 | let panel_order = panel_order.clone(); 97 | move || match &*hover_info.read() { 98 | Some(HoverInfo { 99 | panel: Some(panel), .. 100 | }) => { 101 | let currently_dragged_panel = currently_dragged_panel.read(); 102 | let Some(currently_dragged_panel) = &*currently_dragged_panel else { 103 | return None; 104 | }; 105 | 106 | let hovering_this_panel = panel.id == id.as_str(); 107 | let is_currently_dragged_panel = currently_dragged_panel == id.as_str(); 108 | 109 | let currently_dragged_panel_index = 110 | panel_order 111 | .iter() 112 | .enumerate() 113 | .find_map(|(column_index, column)| { 114 | column 115 | .read() 116 | .iter() 117 | .position(|panel_id| panel_id == currently_dragged_panel) 118 | .map(|pos| (column_index, pos)) 119 | }); 120 | let hovering_neighbour_panel = match (currently_dragged_panel_index, panel.position) 121 | { 122 | (Some((column_index, panel_index)), HoverPosition::Above) => panel_order 123 | .get(column_index) 124 | .and_then(|column| { 125 | column 126 | .read() 127 | .get(panel_index + 1) 128 | .map(|below_id| below_id.as_str() == id) 129 | }) 130 | .unwrap_or(false), 131 | (Some((column_index, panel_index)), HoverPosition::Below) 132 | if panel_index > 0 => 133 | { 134 | panel_order 135 | .get(column_index) 136 | .and_then(|column| { 137 | column 138 | .read() 139 | .get(panel_index - 1) 140 | .map(|below_id| below_id.as_str() == id) 141 | }) 142 | .unwrap_or(false) 143 | } 144 | _ => false, 145 | }; 146 | if hovering_this_panel && !is_currently_dragged_panel && !hovering_neighbour_panel { 147 | Some(panel.position) 148 | } else { 149 | None 150 | } 151 | } 152 | _ => None, 153 | } 154 | }); 155 | 156 | let draggable = RwSignal::new(false); 157 | let set_draggable = move |can_drag: bool| { 158 | draggable.set(can_drag); 159 | }; 160 | 161 | let on_dragover_cb: RwSignal, LocalStorage> = RwSignal::new_local(None); 162 | 163 | let on_drag_start = { 164 | let id = id.clone(); 165 | move |ev: ev::DragEvent| { 166 | currently_dragged_panel.set(Some(id.clone())); 167 | 168 | let dragged_el = event_target::(&ev); 169 | let mouse_x = ev.client_x() as f64; 170 | let mouse_y = ev.client_y() as f64; 171 | let rect = dragged_el.get_bounding_client_rect(); 172 | 173 | // Calculate the center of the element 174 | let center_x = rect.x() + rect.width() / 2.0; 175 | let center_y = rect.y() + rect.height() / 2.0; 176 | 177 | // Calculate the offset from the mouse position to the center of the element 178 | let offset_x = mouse_x - center_x; 179 | let offset_y = mouse_y - center_y; 180 | 181 | // Necessary for firefox to emit drag events 182 | if let Some(data_transfer) = ev.data_transfer() { 183 | let _ = data_transfer.set_data("text/plain", &id); 184 | } 185 | 186 | let column_refs = column_refs.clone(); 187 | let panel_order = panel_order.clone(); 188 | let on_dragover: Function = Closure::wrap(Box::new(move |ev: web_sys::DragEvent| { 189 | ev.prevent_default(); 190 | 191 | let mouse_x = ev.client_x() as f64 - offset_x; 192 | let mouse_y = ev.client_y() as f64 - offset_y; 193 | 194 | let (closest_column, _) = column_refs.iter().enumerate().fold( 195 | (None, f64::INFINITY), 196 | |(column, closest_dist), (i, column_ref)| { 197 | let Some(column_ref) = &*column_ref.read_untracked() else { 198 | return (column, closest_dist); 199 | }; 200 | let rect = column_ref.get_bounding_client_rect(); 201 | let center_x = rect.left() + rect.width() / 2.0; 202 | let dist = (mouse_x - center_x).abs(); 203 | if dist < closest_dist { 204 | (Some((i, column_ref.clone())), dist) 205 | } else { 206 | (column, closest_dist) 207 | } 208 | }, 209 | ); 210 | 211 | if let Some((column_index, _)) = closest_column { 212 | let (closest_panel, _) = panels.read_untracked().iter().fold( 213 | (None, f64::INFINITY), 214 | |(closest_panel, closest_dist), (panel_id, panel_ref)| { 215 | let is_in_column = panel_order 216 | .get(column_index) 217 | .map(|column_panels| { 218 | column_panels.read_untracked().contains(panel_id) 219 | }) 220 | .unwrap_or(false); 221 | if !is_in_column { 222 | return (closest_panel, closest_dist); 223 | } 224 | 225 | let rect = panel_ref.get_bounding_client_rect(); 226 | let center_y = rect.top() + rect.height() / 2.0; 227 | let dist = (mouse_y - center_y).abs(); 228 | if dist < closest_dist { 229 | (Some((panel_id.clone(), panel_ref.clone(), center_y)), dist) 230 | } else { 231 | (closest_panel, closest_dist) 232 | } 233 | }, 234 | ); 235 | 236 | let new_hover_info = if let Some((panel_id, _, center_y)) = closest_panel { 237 | if mouse_y < center_y { 238 | Some(HoverInfo { 239 | column_index, 240 | panel: Some(HoveredPanel { 241 | id: panel_id, 242 | position: HoverPosition::Above, 243 | }), 244 | }) 245 | } else { 246 | Some(HoverInfo { 247 | column_index, 248 | panel: Some(HoveredPanel { 249 | id: panel_id, 250 | position: HoverPosition::Below, 251 | }), 252 | }) 253 | } 254 | } else { 255 | Some(HoverInfo { 256 | column_index, 257 | panel: None, 258 | }) 259 | }; 260 | 261 | hover_info.maybe_update(move |hovered| { 262 | if hovered != &new_hover_info { 263 | *hovered = new_hover_info; 264 | true 265 | } else { 266 | false 267 | } 268 | }); 269 | } 270 | }) as Box) 271 | .into_js_value() 272 | .dyn_into() 273 | .unwrap(); 274 | 275 | document() 276 | .add_event_listener_with_callback_and_bool("dragover", &on_dragover, false) 277 | .unwrap(); 278 | 279 | on_dragover_cb.set(Some(on_dragover)); 280 | } 281 | }; 282 | 283 | let on_drag_end = { 284 | let id = id.clone(); 285 | move |_ev: ev::DragEvent| { 286 | if let Some(on_dragover) = on_dragover_cb.write().take() { 287 | document() 288 | .remove_event_listener_with_callback("dragover", &on_dragover) 289 | .unwrap(); 290 | } 291 | 292 | let id = id.clone(); 293 | request_animation_frame(move || { 294 | let mut current = currently_dragged_panel.write(); 295 | if current.as_deref() == Some(&id) { 296 | hover_info.set(None); 297 | draggable.set(false); 298 | *current = None; 299 | } 300 | }); 301 | } 302 | }; 303 | 304 | UseDragReorderReturn { 305 | node_ref, 306 | is_dragging, 307 | hover_position, 308 | draggable: draggable.into(), 309 | set_draggable, 310 | on_dragstart: on_drag_start, 311 | on_dragend: on_drag_end, 312 | } 313 | } 314 | 315 | #[derive(Clone)] 316 | struct DragReorderContext { 317 | column_refs: Vec>>>, 318 | panel_order: Vec>>>, 319 | currently_dragged_panel: RwSignal>>, 320 | hover_info: RwSignal>, 321 | panels: RwSignal, SendWrapper>>, 322 | } 323 | 324 | #[derive(Clone, Debug, PartialEq, Eq)] 325 | struct HoverInfo { 326 | column_index: usize, 327 | panel: Option, 328 | } 329 | 330 | #[derive(Clone, Debug, PartialEq, Eq)] 331 | struct HoveredPanel { 332 | id: Oco<'static, str>, 333 | position: HoverPosition, 334 | } 335 | 336 | pub fn provide_drag_reorder( 337 | panel_order: [RwSignal>>; COLUMNS], 338 | ) -> [NodeRef; COLUMNS] 339 | where 340 | E: ElementType + 'static, 341 | E::Output: JsCast + Into + Clone + 'static, 342 | { 343 | let column_refs: Vec> = panel_order 344 | .iter() 345 | .map(|_| NodeRef::new()) 346 | .collect::>(); 347 | let ctx = DragReorderContext { 348 | panel_order: panel_order.to_vec(), 349 | column_refs: column_refs 350 | .clone() 351 | .into_iter() 352 | .map(|column_ref| { 353 | Signal::derive(move || { 354 | column_ref 355 | .get() 356 | .map(|column_ref| SendWrapper::new(column_ref.into())) 357 | }) 358 | }) 359 | .collect(), 360 | currently_dragged_panel: RwSignal::new(None), 361 | hover_info: RwSignal::new(None), 362 | panels: RwSignal::new(HashMap::new()), 363 | }; 364 | 365 | Effect::new({ 366 | move |mut last_on_dragend: Option| { 367 | if let Some(last_on_dragend) = last_on_dragend.take() { 368 | let _ = document().remove_event_listener_with_callback("dragend", &last_on_dragend); 369 | } 370 | 371 | let on_dragend: Function = Closure::wrap(Box::new(move |_ev: web_sys::MouseEvent| { 372 | if let Some((currently_dragged_panel, hover_info)) = ctx 373 | .currently_dragged_panel 374 | .read_untracked() 375 | .as_ref() 376 | .zip(ctx.hover_info.get_untracked()) 377 | { 378 | reorder_panel_order(&panel_order, ¤tly_dragged_panel, hover_info); 379 | } 380 | }) as Box) 381 | .into_js_value() 382 | .dyn_into() 383 | .unwrap(); 384 | 385 | document() 386 | .add_event_listener_with_callback("dragend", &on_dragend) 387 | .unwrap(); 388 | 389 | on_cleanup({ 390 | let on_dragend = SendWrapper::new(on_dragend.clone()); 391 | move || { 392 | let _ = document() 393 | .remove_event_listener_with_callback("dragend", &on_dragend.take()); 394 | } 395 | }); 396 | 397 | on_dragend 398 | } 399 | }); 400 | 401 | provide_context(ctx); 402 | 403 | column_refs 404 | .try_into() 405 | .ok() 406 | .expect("vec should be same size as array") 407 | } 408 | 409 | fn reorder_panel_order( 410 | panel_order: &[RwSignal>>], 411 | currently_dragged_panel: &str, 412 | hover_info: HoverInfo, 413 | ) { 414 | // Extract hover information 415 | let HoverInfo { 416 | column_index: to_col_index, 417 | panel: maybe_hovered_panel, 418 | } = hover_info; 419 | 420 | // Initialize variables to store the original position of the dragged panel 421 | let mut from_col_index = None; 422 | let mut from_row_index = None; 423 | 424 | // Find the column and row index of the currently dragged panel 425 | for (col_idx, col_signal) in panel_order.iter().enumerate() { 426 | let col_panels = col_signal.get_untracked(); 427 | if let Some(row_idx) = col_panels 428 | .iter() 429 | .position(|panel_id| panel_id.as_str() == currently_dragged_panel) 430 | { 431 | from_col_index = Some(col_idx); 432 | from_row_index = Some(row_idx); 433 | break; 434 | } 435 | } 436 | 437 | // Proceed only if the dragged panel was found 438 | if let (Some(from_col_index), Some(from_row_index)) = (from_col_index, from_row_index) { 439 | // Get the target column's panels 440 | let to_col_signal = &panel_order[to_col_index]; 441 | let mut to_col_panels = to_col_signal.get_untracked(); 442 | 443 | // Determine the insertion index 444 | let insert_row_index = match maybe_hovered_panel { 445 | Some(HoveredPanel { 446 | id: hovered_panel_id, 447 | position: hover_position, 448 | }) => { 449 | // Find the index of the hovered panel in the target column 450 | if let Some(hovered_row_index) = to_col_panels 451 | .iter() 452 | .position(|panel_id| panel_id.as_str() == hovered_panel_id) 453 | { 454 | // Determine the insertion index based on the hover position 455 | let mut idx = match hover_position { 456 | HoverPosition::Above => hovered_row_index, 457 | HoverPosition::Below => hovered_row_index + 1, 458 | }; 459 | 460 | // Adjust the insertion index if moving within the same column 461 | if from_col_index == to_col_index && from_row_index < idx { 462 | idx -= 1; 463 | } 464 | idx 465 | } else { 466 | // If hovered panel is not found, insert at the end 467 | to_col_panels.len() 468 | } 469 | } 470 | None => { 471 | // No hovered panel; insert at the end of the column 472 | to_col_panels.len() 473 | } 474 | }; 475 | 476 | // Remove the dragged panel from its original position 477 | let from_col_signal = &panel_order[from_col_index]; 478 | let mut from_col_panels = from_col_signal.get_untracked(); 479 | from_col_panels.remove(from_row_index); 480 | 481 | if from_col_index == to_col_index { 482 | // Insert the panel into the same column at the new position 483 | from_col_panels.insert( 484 | insert_row_index, 485 | Oco::from(currently_dragged_panel.to_string()), 486 | ); 487 | from_col_signal.set(from_col_panels); 488 | } else { 489 | // Write back the modified original column 490 | from_col_signal.set(from_col_panels); 491 | 492 | // Insert the panel into the new column 493 | to_col_panels.insert( 494 | insert_row_index, 495 | Oco::from(currently_dragged_panel.to_string()), 496 | ); 497 | to_col_signal.set(to_col_panels); 498 | } 499 | } 500 | } 501 | --------------------------------------------------------------------------------