diff --git a/Cargo.lock b/Cargo.lock index e4f9ced..31e6fac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -735,8 +735,8 @@ dependencies = [ [[package]] name = "binary-merkle-tree" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "16.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "hash-db", "log", @@ -902,8 +902,8 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub-router" -version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "scale-info", @@ -1343,8 +1343,8 @@ dependencies = [ [[package]] name = "cumulus-pallet-aura-ext" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.25.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -1360,8 +1360,8 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.25.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "array-bytes", "bytes", @@ -1398,8 +1398,8 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system-proc-macro" -version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.7.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1407,23 +1407,10 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "cumulus-pallet-session-benchmarking" -version = "9.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "sp-runtime", -] - [[package]] name = "cumulus-pallet-weight-reclaim" -version = "1.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.7.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "cumulus-primitives-storage-weight-reclaim", "derive-where", @@ -1441,8 +1428,8 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcm" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.24.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -1456,8 +1443,8 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcmp-queue" -version = "0.7.1" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.25.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "approx", "bounded-collections", @@ -1482,8 +1469,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-aura" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.21.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "sp-api", "sp-consensus-aura", @@ -1491,8 +1478,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.23.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1508,8 +1495,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.23.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1522,8 +1509,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" -version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -1532,8 +1519,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-storage-weight-reclaim" -version = "1.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-proof-size-hostfunction", @@ -1549,8 +1536,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-utility" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.25.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -2372,8 +2359,8 @@ dependencies = [ [[package]] name = "frame-benchmarking" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.3" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-support", "frame-support-procedural", @@ -2412,8 +2399,8 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "16.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2423,8 +2410,8 @@ dependencies = [ [[package]] name = "frame-election-provider-support" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2440,8 +2427,8 @@ dependencies = [ [[package]] name = "frame-executive" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "aquamarine", "frame-support", @@ -2493,8 +2480,8 @@ dependencies = [ [[package]] name = "frame-support" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "aquamarine", "array-bytes", @@ -2534,8 +2521,8 @@ dependencies = [ [[package]] name = "frame-support-procedural" -version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "Inflector", "cfg-expr", @@ -2548,14 +2535,14 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4)", "syn 2.0.117", ] [[package]] name = "frame-support-procedural-tools" -version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "13.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2566,8 +2553,8 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "12.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "proc-macro2", "quote", @@ -2576,8 +2563,8 @@ dependencies = [ [[package]] name = "frame-system" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "cfg-if", "docify", @@ -2595,8 +2582,8 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -2609,8 +2596,8 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "parity-scale-codec", @@ -2619,8 +2606,8 @@ dependencies = [ [[package]] name = "frame-try-runtime" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.51.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-support", "parity-scale-codec", @@ -4448,8 +4435,8 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "pallet-asset-conversion" -version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "27.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -4466,8 +4453,8 @@ dependencies = [ [[package]] name = "pallet-asset-rate" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -4480,8 +4467,8 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -4496,8 +4483,8 @@ dependencies = [ [[package]] name = "pallet-assets" -version = "29.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "48.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -4512,8 +4499,8 @@ dependencies = [ [[package]] name = "pallet-aura" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-support", "frame-system", @@ -4528,8 +4515,8 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-support", "frame-system", @@ -4543,8 +4530,8 @@ dependencies = [ [[package]] name = "pallet-authorship" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-support", "frame-system", @@ -4556,8 +4543,8 @@ dependencies = [ [[package]] name = "pallet-babe" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -4579,8 +4566,8 @@ dependencies = [ [[package]] name = "pallet-balances" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "46.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "frame-benchmarking", @@ -4595,8 +4582,8 @@ dependencies = [ [[package]] name = "pallet-broker" -version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.24.1" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bitvec", "frame-benchmarking", @@ -4613,10 +4600,9 @@ dependencies = [ [[package]] name = "pallet-collator-selection" -version = "9.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ - "cumulus-pallet-session-benchmarking", "frame-benchmarking", "frame-support", "frame-system", @@ -4650,8 +4636,8 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4671,8 +4657,8 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "frame-benchmarking", @@ -4689,8 +4675,8 @@ dependencies = [ [[package]] name = "pallet-identity" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4705,8 +4691,8 @@ dependencies = [ [[package]] name = "pallet-message-queue" -version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "48.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "environmental", "frame-benchmarking", @@ -4724,8 +4710,8 @@ dependencies = [ [[package]] name = "pallet-mmr" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "log", "parity-scale-codec", @@ -4736,8 +4722,8 @@ dependencies = [ [[package]] name = "pallet-multi-asset-bounties" -version = "1.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.2.1" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "frame-benchmarking", @@ -4772,8 +4758,8 @@ dependencies = [ [[package]] name = "pallet-session" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-support", "frame-system", @@ -4792,26 +4778,10 @@ dependencies = [ "sp-trie", ] -[[package]] -name = "pallet-session-benchmarking" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-session", - "pallet-staking", - "parity-scale-codec", - "rand", - "sp-runtime", - "sp-session", -] - [[package]] name = "pallet-staking" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4832,8 +4802,8 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" -version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "log", "sp-arithmetic", @@ -4861,8 +4831,8 @@ dependencies = [ [[package]] name = "pallet-sudo" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "frame-benchmarking", @@ -4876,8 +4846,8 @@ dependencies = [ [[package]] name = "pallet-timestamp" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "frame-benchmarking", @@ -4894,8 +4864,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -4910,8 +4880,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -4922,8 +4892,8 @@ dependencies = [ [[package]] name = "pallet-treasury" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "frame-benchmarking", @@ -4941,8 +4911,8 @@ dependencies = [ [[package]] name = "pallet-vesting" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -4955,8 +4925,8 @@ dependencies = [ [[package]] name = "pallet-xcm" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "25.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bounded-collections", "frame-benchmarking", @@ -4979,8 +4949,8 @@ dependencies = [ [[package]] name = "parachains-common" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "27.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-utility", @@ -4995,7 +4965,6 @@ dependencies = [ "pallet-multi-asset-bounties", "pallet-treasury", "pallet-xcm", - "parachains-common-types", "parity-scale-codec", "polkadot-primitives", "polkadot-runtime-common", @@ -5010,16 +4979,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "parachains-common-types" -version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" -dependencies = [ - "sp-consensus-aura", - "sp-core", - "sp-runtime", -] - [[package]] name = "parity-scale-codec" version = "3.7.5" @@ -5214,8 +5173,8 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "scale-info", @@ -5225,8 +5184,8 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" -version = "6.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "array-bytes", "bounded-collections", @@ -5242,8 +5201,8 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bitvec", "bounded-collections", @@ -5271,8 +5230,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bitvec", "frame-benchmarking", @@ -5321,8 +5280,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "25.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bs58", "frame-benchmarking", @@ -5333,8 +5292,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bitflags 1.3.2", "bitvec", @@ -5352,7 +5311,6 @@ dependencies = [ "pallet-message-queue", "pallet-mmr", "pallet-session", - "pallet-session-benchmarking", "pallet-staking", "pallet-timestamp", "parity-scale-codec", @@ -5382,8 +5340,8 @@ dependencies = [ [[package]] name = "polkadot-sdk-frame" -version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.14.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "frame-benchmarking", @@ -6939,8 +6897,8 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "enumn", "parity-scale-codec", @@ -7204,8 +7162,8 @@ dependencies = [ [[package]] name = "sp-api" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "hash-db", @@ -7226,8 +7184,8 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "Inflector", "blake2", @@ -7240,8 +7198,8 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "scale-info", @@ -7252,8 +7210,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "docify", "integer-sqrt", @@ -7266,8 +7224,8 @@ dependencies = [ [[package]] name = "sp-authority-discovery" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "scale-info", @@ -7278,8 +7236,8 @@ dependencies = [ [[package]] name = "sp-block-builder" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "sp-api", "sp-inherents", @@ -7288,8 +7246,8 @@ dependencies = [ [[package]] name = "sp-consensus-aura" -version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "async-trait", "parity-scale-codec", @@ -7304,8 +7262,8 @@ dependencies = [ [[package]] name = "sp-consensus-babe" -version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "async-trait", "parity-scale-codec", @@ -7322,8 +7280,8 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "27.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "finality-grandpa", "log", @@ -7339,8 +7297,8 @@ dependencies = [ [[package]] name = "sp-consensus-slots" -version = "0.32.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "scale-info", @@ -7350,8 +7308,8 @@ dependencies = [ [[package]] name = "sp-core" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "ark-vrf", "array-bytes", @@ -7382,7 +7340,7 @@ dependencies = [ "secrecy 0.8.0", "serde", "sha2 0.10.9", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4)", "sp-debug-derive", "sp-externalities", "sp-std", @@ -7412,7 +7370,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "blake2b_simd", "byteorder", @@ -7425,19 +7383,18 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4)", "syn 2.0.117", ] [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ - "proc-macro-warning", "proc-macro2", "quote", "syn 2.0.117", @@ -7445,8 +7402,8 @@ dependencies = [ [[package]] name = "sp-externalities" -version = "0.25.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.31.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "environmental", "parity-scale-codec", @@ -7455,8 +7412,8 @@ dependencies = [ [[package]] name = "sp-genesis-builder" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.21.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "scale-info", @@ -7467,8 +7424,8 @@ dependencies = [ [[package]] name = "sp-inherents" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -7480,8 +7437,8 @@ dependencies = [ [[package]] name = "sp-io" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bytes", "docify", @@ -7493,7 +7450,7 @@ dependencies = [ "rustversion", "secp256k1 0.28.2", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4)", "sp-externalities", "sp-keystore", "sp-runtime-interface", @@ -7506,8 +7463,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "sp-core", "sp-runtime", @@ -7516,8 +7473,8 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "parking_lot", @@ -7527,8 +7484,8 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "11.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "thiserror 1.0.69", "zstd", @@ -7536,8 +7493,8 @@ dependencies = [ [[package]] name = "sp-metadata-ir" -version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.12.1" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-metadata 23.0.1", "parity-scale-codec", @@ -7546,8 +7503,8 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "log", "parity-scale-codec", @@ -7563,8 +7520,8 @@ dependencies = [ [[package]] name = "sp-npos-elections" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "scale-info", @@ -7576,8 +7533,8 @@ dependencies = [ [[package]] name = "sp-offchain" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "sp-api", "sp-core", @@ -7586,8 +7543,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "13.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "backtrace", "regex", @@ -7595,8 +7552,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "31.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "binary-merkle-tree", "bytes", @@ -7626,8 +7583,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "33.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -7644,8 +7601,8 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "Inflector", "expander", @@ -7657,8 +7614,8 @@ dependencies = [ [[package]] name = "sp-session" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "42.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "scale-info", @@ -7671,8 +7628,8 @@ dependencies = [ [[package]] name = "sp-staking" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "42.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -7684,8 +7641,8 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "hash-db", "log", @@ -7705,12 +7662,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" [[package]] name = "sp-storage" -version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "impl-serde 0.5.0", "parity-scale-codec", @@ -7721,8 +7678,8 @@ dependencies = [ [[package]] name = "sp-timestamp" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "async-trait", "parity-scale-codec", @@ -7733,8 +7690,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "regex", @@ -7745,8 +7702,8 @@ dependencies = [ [[package]] name = "sp-transaction-pool" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "sp-api", "sp-runtime", @@ -7754,8 +7711,8 @@ dependencies = [ [[package]] name = "sp-trie" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "42.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "ahash", "foldhash 0.1.5", @@ -7779,8 +7736,8 @@ dependencies = [ [[package]] name = "sp-version" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "43.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "impl-serde 0.5.0", "parity-scale-codec", @@ -7796,8 +7753,8 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "15.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "parity-scale-codec", "proc-macro-warning", @@ -7808,8 +7765,8 @@ dependencies = [ [[package]] name = "sp-wasm-interface" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -7819,8 +7776,8 @@ dependencies = [ [[package]] name = "sp-weights" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "33.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -7870,8 +7827,8 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "staging-parachain-info" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.25.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -7883,8 +7840,8 @@ dependencies = [ [[package]] name = "staging-xcm" -version = "7.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "array-bytes", "bounded-collections", @@ -7904,8 +7861,8 @@ dependencies = [ [[package]] name = "staging-xcm-builder" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "25.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "environmental", "frame-support", @@ -7928,8 +7885,8 @@ dependencies = [ [[package]] name = "staging-xcm-executor" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "24.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "environmental", "frame-benchmarking", @@ -8130,8 +8087,8 @@ dependencies = [ [[package]] name = "substrate-bip39" -version = "0.4.7" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.6.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -8142,8 +8099,8 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.17.7" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "http-body-util", "hyper 1.8.1", @@ -8156,8 +8113,8 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "31.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "build-helper", "cargo_metadata", @@ -9036,9 +8993,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.31.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7795f2df2ef744e4ffb2125f09325e60a21d305cc3ecece0adeef03f7a9e560" +checksum = "6c0670ab45a6b7002c7df369fee950a27cf29ae0474343fd3a15aa15f691e7a6" dependencies = [ "hash-db", "log", @@ -10101,8 +10058,8 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "11.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "Inflector", "proc-macro2", @@ -10112,8 +10069,8 @@ dependencies = [ [[package]] name = "xcm-runtime-apis" -version = "0.1.1" -source = "git+https://github.com/paritytech/polkadot-sdk?rev=c7b9c08825acc61f1adde54535a41855c04962a2#c7b9c08825acc61f1adde54535a41855c04962a2" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?rev=00fbc91e415b563fd1b4f839628cdd392adcd0d4#00fbc91e415b563fd1b4f839628cdd392adcd0d4" dependencies = [ "frame-support", "parity-scale-codec", diff --git a/Cargo.toml b/Cargo.toml index caa9fb8..5aa52ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,62 +44,62 @@ s3-client = { path = "storage-interfaces/s3/client" } s3-primitives = { path = "storage-interfaces/s3/primitives", default-features = false } # Substrate frame -frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -frame-support = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -frame-system = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +frame-support = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +frame-system = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } # Substrate pallets -pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } +pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } # Substrate primitives -sp-api = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-session = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-version = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } +sp-api = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-core = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-io = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-session = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-version = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -polkadot-parachain-primitives = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -xcm = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false, package = "staging-xcm" } -xcm-builder = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false, package = "staging-xcm-builder" } -xcm-executor = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false, package = "staging-xcm-executor" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +polkadot-parachain-primitives = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +xcm = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false, package = "staging-xcm" } +xcm-builder = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false, package = "staging-xcm-builder" } +xcm-executor = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false, package = "staging-xcm-executor" } # Cumulus -cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -cumulus-pallet-weight-reclaim = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -cumulus-pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -cumulus-primitives-aura = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -cumulus-primitives-storage-weight-reclaim = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -cumulus-primitives-utility = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -parachain-info = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false, package = "staging-parachain-info" } -parachains-common = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } +cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +cumulus-pallet-weight-reclaim = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +cumulus-pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +cumulus-primitives-aura = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +cumulus-primitives-storage-weight-reclaim = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +cumulus-primitives-utility = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +parachain-info = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false, package = "staging-parachain-info" } +parachains-common = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } # Build dependencies -substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2" } +substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4" } # Codec codec = { version = "3.7", default-features = false, features = ["derive", "max-encoded-len"], package = "parity-scale-codec" } @@ -121,8 +121,8 @@ tower-http = { version = "0.6", features = ["cors", "trace"] } blake2 = { version = "0.10", default-features = false } # Testing -sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } -sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", rev = "c7b9c08825acc61f1adde54535a41855c04962a2", default-features = false } +sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } +sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", rev = "00fbc91e415b563fd1b4f839628cdd392adcd0d4", default-features = false } [profile.release] panic = "unwind" diff --git a/justfile b/justfile index 396a2ce..3a86091 100644 --- a/justfile +++ b/justfile @@ -291,6 +291,7 @@ fs-demo-ci: echo "" cargo run --release -p file-system-client --example ci_integration_test -- "{{ CHAIN_WS }}" "{{ PROVIDER_URL }}" + # Build file system components only fs-build: #!/usr/bin/env bash @@ -385,6 +386,7 @@ s3-demo-ci CHAIN_WS="ws://127.0.0.1:2222" PROVIDER_URL="http://127.0.0.1:3333": cd storage-interfaces/s3/client cargo run --release --example ci_integration_test "{{CHAIN_WS}}" "{{PROVIDER_URL}}" + # Build S3 components only s3-build: #!/usr/bin/env bash diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index c98bc02..b0f4ba4 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -46,6 +46,7 @@ use sp_runtime::{ ApplyExtrinsicResult, MultiSignature, SaturatedConversion, }; use sp_version::RuntimeVersion; +use codec::Encode; #[cfg(feature = "std")] use sp_version::NativeVersion; @@ -663,8 +664,8 @@ impl_runtime_apis! { } impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(owner: Vec, seed: Option>) -> sp_session::OpaqueGeneratedSessionKeys { - SessionKeys::generate(&owner, seed).into() + fn generate_session_keys(seed: Option>) -> Vec { + SessionKeys::generate(seed).encode() } fn decode_session_keys( diff --git a/user-interfaces/console-ui/README.md b/user-interfaces/console-ui/README.md new file mode 100644 index 0000000..00636b1 --- /dev/null +++ b/user-interfaces/console-ui/README.md @@ -0,0 +1,118 @@ +# Web3 Storage Console UI + +A React-based web interface for managing Web3 Storage, providing both File System and S3-compatible storage interfaces. + +## Features + +- **Dashboard**: Overview of storage usage and network status +- **Drives**: Create and manage File System drives +- **S3 Buckets**: Create and manage S3-compatible buckets +- **Upload**: Upload files to drives or buckets +- **Download**: Download files by CID, path, or object key +- **Explorer**: Browse storage contents +- **Accounts**: Manage signing accounts + +## Tech Stack + +- **React 19** - UI framework +- **Vite 7** - Build tool +- **TypeScript** - Type safety +- **Tailwind CSS 4** - Styling +- **Radix UI** - Accessible components +- **polkadot-api** - Blockchain interaction +- **RxJS** - Reactive state management + +## Getting Started + +### Prerequisites + +- Node.js 18+ +- pnpm (recommended) or npm +- Running parachain and storage provider (see main project README) + +### Installation + +```bash +# Install dependencies +pnpm install + +# Generate chain types (requires running chain) +pnpm papi:generate + +# Start development server +pnpm dev +``` + +### Development + +```bash +# Start dev server +pnpm dev + +# Build for production +pnpm build + +# Preview production build +pnpm preview + +# Lint code +pnpm lint +``` + +## Project Structure + +``` +console-ui/ +├── src/ +│ ├── components/ # Reusable UI components +│ │ ├── ui/ # Base components (Button, Card, etc.) +│ │ ├── Layout.tsx # App layout with navigation +│ │ └── ConnectDialog.tsx # Network connection dialog +│ ├── hooks/ # React hooks +│ │ └── useChain.tsx # Chain connection state +│ ├── lib/ # Utilities +│ │ └── utils.ts # Helper functions +│ ├── pages/ # Page components +│ │ ├── Dashboard.tsx +│ │ ├── Drives.tsx +│ │ ├── Buckets.tsx +│ │ ├── Upload.tsx +│ │ ├── Download.tsx +│ │ ├── Explorer.tsx +│ │ └── Accounts.tsx +│ ├── styles/ # Global styles +│ │ └── index.css # Tailwind config +│ ├── App.tsx # Root component +│ └── main.tsx # Entry point +├── public/ # Static assets +├── index.html # HTML template +├── package.json +├── tsconfig.json +└── vite.config.ts +``` + +## Configuration + +### Network Endpoints + +By default, the UI connects to: +- Chain WebSocket: `ws://127.0.0.1:2222` +- Provider HTTP: `http://127.0.0.1:3333` + +These can be configured via the Connect dialog in the UI. + +### Theme + +The UI uses a dark theme by default. Colors can be customized in `src/styles/index.css`. + +## Integration with SDKs + +This UI is designed to work with the TypeScript SDKs: +- `@web3-storage/file-system-sdk` - File System operations +- `@web3-storage/s3-sdk` - S3-compatible operations + +See `../sdk/typescript/` for SDK documentation. + +## License + +MIT diff --git a/user-interfaces/console-ui/index.html b/user-interfaces/console-ui/index.html new file mode 100644 index 0000000..f95101d --- /dev/null +++ b/user-interfaces/console-ui/index.html @@ -0,0 +1,13 @@ + + + + + + + Web3 Storage Console + + +
+ + + diff --git a/user-interfaces/console-ui/package.json b/user-interfaces/console-ui/package.json new file mode 100644 index 0000000..bbd6cb0 --- /dev/null +++ b/user-interfaces/console-ui/package.json @@ -0,0 +1,51 @@ +{ + "name": "@web3-storage/console-ui", + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview", + "lint": "eslint .", + "papi:generate": "papi add -w ws://localhost:2222 parachain && papi" + }, + "dependencies": { + "@polkadot-api/descriptors": "file:.papi/descriptors", + "@polkadot-api/substrate-bindings": "^0.9.3", + "@polkadot/keyring": "^14.0.1", + "@polkadot/util-crypto": "^14.0.1", + "@radix-ui/react-dialog": "^1.1.11", + "@radix-ui/react-dropdown-menu": "^2.1.10", + "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/react-label": "^2.1.4", + "@radix-ui/react-select": "^2.2.2", + "@radix-ui/react-slot": "^1.2.2", + "@radix-ui/react-tabs": "^1.1.9", + "@radix-ui/react-toast": "^1.2.10", + "@radix-ui/react-tooltip": "^1.2.3", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.511.0", + "polkadot-api": "^1.23.3", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-router-dom": "^7.6.1", + "rxjs": "^7.8.2", + "tailwind-merge": "^3.3.0" + }, + "devDependencies": { + "@eslint/js": "^9.25.0", + "@tailwindcss/vite": "^4.0.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.4.1", + "eslint": "^9.25.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^16.0.0", + "tailwindcss": "^4.0.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.30.1", + "vite": "^7.3.1" + } +} diff --git a/user-interfaces/console-ui/pnpm-lock.yaml b/user-interfaces/console-ui/pnpm-lock.yaml new file mode 100644 index 0000000..4190d81 --- /dev/null +++ b/user-interfaces/console-ui/pnpm-lock.yaml @@ -0,0 +1,5109 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@polkadot-api/descriptors': + specifier: file:.papi/descriptors + version: file:.papi/descriptors(polkadot-api@1.23.3(jiti@2.6.1)(postcss@8.5.6)(rxjs@7.8.2)) + '@polkadot-api/substrate-bindings': + specifier: ^0.9.3 + version: 0.9.4 + '@polkadot/keyring': + specifier: ^14.0.1 + version: 14.0.1(@polkadot/util-crypto@14.0.1(@polkadot/util@14.0.1))(@polkadot/util@14.0.1) + '@polkadot/util-crypto': + specifier: ^14.0.1 + version: 14.0.1(@polkadot/util@14.0.1) + '@radix-ui/react-dialog': + specifier: ^1.1.11 + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-dropdown-menu': + specifier: ^2.1.10 + version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-icons': + specifier: ^1.3.2 + version: 1.3.2(react@19.2.4) + '@radix-ui/react-label': + specifier: ^2.1.4 + version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-select': + specifier: ^2.2.2 + version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': + specifier: ^1.2.2 + version: 1.2.4(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-tabs': + specifier: ^1.1.9 + version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toast': + specifier: ^1.2.10 + version: 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-tooltip': + specifier: ^1.2.3 + version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-react: + specifier: ^0.511.0 + version: 0.511.0(react@19.2.4) + polkadot-api: + specifier: ^1.23.3 + version: 1.23.3(jiti@2.6.1)(postcss@8.5.6)(rxjs@7.8.2) + react: + specifier: ^19.0.0 + version: 19.2.4 + react-dom: + specifier: ^19.0.0 + version: 19.2.4(react@19.2.4) + react-router-dom: + specifier: ^7.6.1 + version: 7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + rxjs: + specifier: ^7.8.2 + version: 7.8.2 + tailwind-merge: + specifier: ^3.3.0 + version: 3.5.0 + devDependencies: + '@eslint/js': + specifier: ^9.25.0 + version: 9.39.3 + '@tailwindcss/vite': + specifier: ^4.0.0 + version: 4.2.1(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + '@types/react': + specifier: ^19.0.10 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.0.4 + version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^4.4.1 + version: 4.7.0(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1)) + eslint: + specifier: ^9.25.0 + version: 9.39.3(jiti@2.6.1) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.39.3(jiti@2.6.1)) + eslint-plugin-react-refresh: + specifier: ^0.4.19 + version: 0.4.26(eslint@9.39.3(jiti@2.6.1)) + globals: + specifier: ^16.0.0 + version: 16.5.0 + tailwindcss: + specifier: ^4.0.0 + version: 4.2.1 + typescript: + specifier: ~5.8.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.30.1 + version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + vite: + specifier: ^7.3.1 + version: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + +packages: + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@commander-js/extra-typings@14.0.0': + resolution: {integrity: sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==} + peerDependencies: + commander: ~14.0.0 + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.4': + resolution: {integrity: sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.3': + resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.7.4': + resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + + '@floating-ui/dom@1.7.5': + resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + + '@floating-ui/react-dom@2.1.7': + resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@2.0.1': + resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} + engines: {node: '>= 20.19.0'} + + '@polkadot-api/cli@0.18.1': + resolution: {integrity: sha512-jPa8WSNPZWdy372sBAUnm0nU1XX5mLbmgkOOU39+zpYPSE12mYXyM3r7JuT5IHdAccEJr6qK2DplPFTeNSyq9A==} + hasBin: true + + '@polkadot-api/codegen@0.21.2': + resolution: {integrity: sha512-e1Of2TfB13YndPQ71WrtOIPfRrSlkG6wGprP8/VHC484kkt2JPDOY+io3NdPWkafDblDQ47aG0368sxT+4RSZA==} + + '@polkadot-api/descriptors@file:.papi/descriptors': + resolution: {directory: .papi/descriptors, type: directory} + peerDependencies: + polkadot-api: '>=1.21.0' + + '@polkadot-api/ink-contracts@0.4.6': + resolution: {integrity: sha512-wpFPa8CnGnmq+cFYMzuTEDmtt3ElBM0UWgTz4RpmI9E7knZ1ctWBhO7amXxOWcILqIG6sqWIE95x0cfF1PRcQg==} + + '@polkadot-api/json-rpc-provider-proxy@0.2.8': + resolution: {integrity: sha512-AC5KK4p2IamAQuqR0S3YaiiUDRB2r1pWNrdF0Mntm5XGYEmeiAILBmnFa7gyWwemhkTWPYrK5HCurlGfw2EsDA==} + + '@polkadot-api/json-rpc-provider@0.0.4': + resolution: {integrity: sha512-9cDijLIxzHOBuq6yHqpqjJ9jBmXrctjc1OFqU+tQrS96adQze3mTIH6DTgfb/0LMrqxzxffz1HQGrIlEH00WrA==} + + '@polkadot-api/known-chains@0.9.18': + resolution: {integrity: sha512-zdU4FA01lXcpNXUiFgSmFKIwDKbTw15KT4U6Zlqo6FPUMZgncVEbbS4dSgVrf+TGw9SDOUjGlEdyTHAiOAG5Tw==} + + '@polkadot-api/legacy-provider@0.3.8': + resolution: {integrity: sha512-Q747MN/7IUxxXGLWLQfhmSLqFyOLUsUFqQQytlEBjt66ZAv9VwYiHZ8JMBCnMzFuaUpKEWDT62ESKhgXn/hmEQ==} + peerDependencies: + rxjs: '>=7.8.0' + + '@polkadot-api/logs-provider@0.0.6': + resolution: {integrity: sha512-4WgHlvy+xee1ADaaVf6+MlK/+jGMtsMgAzvbQOJZnP4PfQuagoTqaeayk8HYKxXGphogLlPbD06tANxcb+nvAg==} + + '@polkadot-api/merkleize-metadata@1.1.29': + resolution: {integrity: sha512-z8ivYDdr4xlh50MQ7hLaSVw4VM6EV7gGgd+v/ej09nue0W08NG77zf7pXWeRKgOXe3+hPOSQQRSZT2OlIYRfqA==} + + '@polkadot-api/metadata-builders@0.13.9': + resolution: {integrity: sha512-V2GljT6StuK40pfmO5l53CvgFNgy60Trrv20mOZDCsFU9J82F+a1HYAABDYlRgoZ9d0IDwc+u+vI+RHUJoR4xw==} + + '@polkadot-api/metadata-compatibility@0.4.4': + resolution: {integrity: sha512-V4ye5d2ns32YC45Fdc/IF9Y7CgM8inzJbmHQ2DCPSNd6omTRLJd81gU9zU88QAqPAcH2gKGnS5UF+wLL2VagSQ==} + + '@polkadot-api/observable-client@0.17.3': + resolution: {integrity: sha512-SJhbMKBIzxNgUUy7ZWflYf/TX9soMqiR2WYyggA7U3DLhgdx4wzFjOSbxCk8RuX9Kf/AmJE4dfleu9HBSCZv6g==} + peerDependencies: + rxjs: '>=7.8.0' + + '@polkadot-api/pjs-signer@0.6.19': + resolution: {integrity: sha512-jTHKoanZg9ewupthOczWNb2pici+GK+TBQmp9MwhwGs/3uMD2144aA8VNNBEi8rMxOBZlvKYfGkgjiTEGbBwuQ==} + + '@polkadot-api/polkadot-sdk-compat@2.4.1': + resolution: {integrity: sha512-+sET0N3GpnKkLvsazBZEC5vhqAlamlL1KkJK9STB1tRxHSZcY/yBBa1Udn9DXJfX48kE9cnzfYldl9zsjqpARg==} + + '@polkadot-api/polkadot-signer@0.1.6': + resolution: {integrity: sha512-X7ghAa4r7doETtjAPTb50IpfGtrBmy3BJM5WCfNKa1saK04VFY9w+vDn+hwEcM4p0PcDHt66Ts74hzvHq54d9A==} + + '@polkadot-api/raw-client@0.1.1': + resolution: {integrity: sha512-HxalpNEo8JCYXfxKM5p3TrK8sEasTGMkGjBNLzD4TLye9IK2smdb5oTvp2yfkU1iuVBdmjr69uif4NaukOYo2g==} + + '@polkadot-api/signer@0.2.13': + resolution: {integrity: sha512-XBOtjFsRGETVm/aXeZnsvFcJ1qvtZhRtwUMmpCOBt9s8PWfILaQH/ecOegzda3utNIZGmXXaOoJ5w9Hc/6I3ww==} + + '@polkadot-api/signers-common@0.1.20': + resolution: {integrity: sha512-v1mrTdRjQOV17riZ8172OsOQ/RJbv1QsEpjwnvxzvdCnjuNpYwtYHZaE+cSdDBb4n1p73XIBMvB/uAK/QFC2JA==} + + '@polkadot-api/sm-provider@0.1.16': + resolution: {integrity: sha512-3LEDU7nkgtDx1A6ATHLLm3+nFAY6cdkNA9tGltfDzW0efACrhhfDjNqJdI1qLNY0wDyT1aGdoWr5r+4CckRpXA==} + peerDependencies: + '@polkadot-api/smoldot': '>=0.3' + + '@polkadot-api/smoldot@0.3.15': + resolution: {integrity: sha512-YyV+ytP8FcmKEgLRV7uXepJ5Y6md/7u2F8HKxmkWytmnGXO1z+umg2pHbOxLGifD9V2NhkPY+awpzErtVIzqAA==} + + '@polkadot-api/substrate-bindings@0.17.0': + resolution: {integrity: sha512-YdbkvG/27N5A94AiKE4soVjDy0Nw74Nn+KD29mUnFmIZvL3fsN/DTYkxvMDVsOuanFXyAIXmzDMoi7iky0fyIw==} + + '@polkadot-api/substrate-bindings@0.9.4': + resolution: {integrity: sha512-SUyetILwgUsodSk1qhNu0HflRBdq2VBCbqAqCBNaoCauE3/Q/G6k7xS+1nE6MTcpjZQex+TriJdDz/trLSvwsA==} + + '@polkadot-api/substrate-client@0.5.0': + resolution: {integrity: sha512-J+gyZONCak+n6NxADZWtldH+gatYORqEScMAgI9gGu43pHUe7/xNRCqnin0dgDIzmuL3m1ERglF8LR7YhB0nHQ==} + + '@polkadot-api/utils@0.1.2': + resolution: {integrity: sha512-yhs5k2a8N1SBJcz7EthZoazzLQUkZxbf+0271Xzu42C5AEM9K9uFLbsB+ojzHEM72O5X8lPtSwGKNmS7WQyDyg==} + + '@polkadot-api/utils@0.2.0': + resolution: {integrity: sha512-nY3i5fQJoAxU4n3bD7Fs208/KR2J95SGfVc58kDjbRYN5a84kWaGEqzjBNtP9oqht49POM8Bm9mbIrkvC1Bzuw==} + + '@polkadot-api/wasm-executor@0.2.3': + resolution: {integrity: sha512-B2h1o+Qlo9idpASaHvMSoViB2I5ko5OAfwfhYF8LQDkTADK0B+SeStzNj1Qn+FG34wqTuv7HzBCdjaUgzYINJQ==} + + '@polkadot-api/ws-provider@0.7.5': + resolution: {integrity: sha512-2ZLEo0PAFeuOx2DUDkbex85HZMf9lgnmZ8oGB5+NaButIydkoqXy5SHYJNPc45GcZy2tvwzImMZInNMLa5GJhg==} + + '@polkadot/keyring@14.0.1': + resolution: {integrity: sha512-kHydQPCeTvJrMC9VQO8LPhAhTUxzxfNF1HEknhZDBPPsxP/XpkYsEy/Ln1QzJmQqD5VsgwzLDE6cExbJ2CT9CA==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 14.0.1 + '@polkadot/util-crypto': 14.0.1 + + '@polkadot/networks@14.0.1': + resolution: {integrity: sha512-wGlBtXDkusRAj4P7uxfPz80gLO1+j99MLBaQi3bEym2xrFrFhgIWVHOZlBit/1PfaBjhX2Z8XjRxaM2w1p7w2w==} + engines: {node: '>=18'} + + '@polkadot/util-crypto@14.0.1': + resolution: {integrity: sha512-Cu7AKUzBTsUkbOtyuNzXcTpDjR9QW0fVR56o3gBmzfUCmvO1vlsuGzmmPzqpHymQQ3rrfqV78CPs62EGhw0R+A==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 14.0.1 + + '@polkadot/util@14.0.1': + resolution: {integrity: sha512-764HhxkPV3x5rM0/p6QdynC2dw26n+SaE+jisjx556ViCd4E28Ke4xSPef6C0Spy4aoXf2gt0PuLEcBvd6fVZg==} + engines: {node: '>=18'} + + '@polkadot/wasm-bridge@7.5.4': + resolution: {integrity: sha512-6xaJVvoZbnbgpQYXNw9OHVNWjXmtcoPcWh7hlwx3NpfiLkkjljj99YS+XGZQlq7ks2fVCg7FbfknkNb8PldDaA==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + + '@polkadot/wasm-crypto-asmjs@7.5.4': + resolution: {integrity: sha512-ZYwxQHAJ8pPt6kYk9XFmyuFuSS+yirJLonvP+DYbxOrARRUHfN4nzp4zcZNXUuaFhpbDobDSFn6gYzye6BUotA==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + + '@polkadot/wasm-crypto-init@7.5.4': + resolution: {integrity: sha512-U6s4Eo2rHs2n1iR01vTz/sOQ7eOnRPjaCsGWhPV+ZC/20hkVzwPAhiizu/IqMEol4tO2yiSheD4D6bn0KxUJhg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + + '@polkadot/wasm-crypto-wasm@7.5.4': + resolution: {integrity: sha512-PsHgLsVTu43eprwSvUGnxybtOEuHPES6AbApcs7y5ZbM2PiDMzYbAjNul098xJK/CPtrxZ0ePDFnaQBmIJyTFw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + + '@polkadot/wasm-crypto@7.5.4': + resolution: {integrity: sha512-1seyClxa7Jd7kQjfnCzTTTfYhTa/KUTDUaD3DMHBk5Q4ZUN1D1unJgX+v1aUeXSPxmzocdZETPJJRZjhVOqg9g==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + + '@polkadot/wasm-util@7.5.4': + resolution: {integrity: sha512-hqPpfhCpRAqCIn/CYbBluhh0TXmwkJnDRjxrU9Bnqtw9nMNa97D8JuOjdd2pi0rxm+eeLQ/f1rQMp71RMM9t4w==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + + '@polkadot/x-bigint@14.0.1': + resolution: {integrity: sha512-gfozjGnebr2rqURs31KtaWumbW4rRZpbiluhlmai6luCNrf5u8pB+oLA35kPEntrsLk9PnIG9OsC/n4hEtx4OQ==} + engines: {node: '>=18'} + + '@polkadot/x-global@14.0.1': + resolution: {integrity: sha512-aCI44DJU4fU0XXqrrSGIpi7JrZXK2kpe0jaQ2p6oDVXOOYEnZYXnMhTTmBE1lF/xtxzX50MnZrrU87jziU0qbA==} + engines: {node: '>=18'} + + '@polkadot/x-randomvalues@14.0.1': + resolution: {integrity: sha512-/XkQcvshzJLHITuPrN3zmQKuFIPdKWoaiHhhVLD6rQWV60lTXA3ajw3ocju8ZN7xRxnweMS9Ce0kMPYa0NhRMg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 14.0.1 + '@polkadot/wasm-util': '*' + + '@polkadot/x-textdecoder@14.0.1': + resolution: {integrity: sha512-CcWiPCuPVJsNk4Vq43lgFHqLRBQHb4r9RD7ZIYgmwoebES8TNm4g2ew9ToCzakFKSpzKu6I07Ne9wv/dt5zLuw==} + engines: {node: '>=18'} + + '@polkadot/x-textencoder@14.0.1': + resolution: {integrity: sha512-VY51SpQmF1ccmAGLfxhYnAe95Spfz049WZ/+kK4NfsGF9WejxVdU53Im5C80l45r8qHuYQsCWU3+t0FNunh2Kg==} + engines: {node: '>=18'} + + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} + peerDependencies: + react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.1.8': + resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.4': + resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toast@1.2.15': + resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} + cpu: [x64] + os: [win32] + + '@rx-state/core@0.1.4': + resolution: {integrity: sha512-Z+3hjU2xh1HisLxt+W5hlYX/eGSDaXXP+ns82gq/PLZpkXLu0uwcNUh9RLY3Clq4zT+hSsA3vcpIGt6+UAb8rQ==} + peerDependencies: + rxjs: '>=7' + + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + + '@scure/base@2.0.0': + resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} + + '@scure/sr25519@0.2.0': + resolution: {integrity: sha512-uUuLP7Z126XdSizKtrCGqYyR3b3hYtJ6Fg/XFUXmc2//k2aXHDLqZwFeXxL97gg4XydPROPVnuaHGF2+xriSKg==} + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@substrate/ss58-registry@1.51.0': + resolution: {integrity: sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==} + + '@tailwindcss/node@4.2.1': + resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} + + '@tailwindcss/oxide-android-arm64@4.2.1': + resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.2.1': + resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.1': + resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.2.1': + resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': + resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': + resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.1': + resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.1': + resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.2.1': + resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.2.1': + resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': + resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.1': + resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.2.1': + resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.2.1': + resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@24.11.0': + resolution: {integrity: sha512-fPxQqz4VTgPI/IQ+lj9r0h+fDR66bzoeMGHp8ASee+32OSGIkeASsoZuJixsQoVef1QJbeubcPBxKk22QVoWdw==} + + '@types/node@25.3.2': + resolution: {integrity: sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@typescript-eslint/eslint-plugin@8.56.1': + resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.56.1 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.56.1': + resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.56.1': + resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.56.1': + resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.56.1': + resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.56.1': + resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.56.1': + resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.56.1': + resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.56.1': + resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.56.1': + resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + baseline-browser-mapping@2.10.0: + resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + engines: {node: '>=6.0.0'} + hasBin: true + + bn.js@5.2.3: + resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + engines: {node: 18 || 20 || >=22} + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001774: + resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge-ts@7.1.5: + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} + + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} + engines: {node: '>=12.20'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + electron-to-chromium@1.5.302: + resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} + + enhanced-resolve@5.20.0: + resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} + engines: {node: '>=10.13.0'} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.26: + resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.3: + resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + fs.promises.exists@1.1.4: + resolution: {integrity: sha512-lJzUGWbZn8vhGWBedA+RYjB/BeJ+3458ljUfmplqhIeb6ewzTFWNPCR1HCiYCkXV9zxcHz9zXkJzMsEgDLzh3Q==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hosted-git-info@9.0.2: + resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} + engines: {node: ^20.17.0 || >=22.9.0} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.31.1: + resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.31.1: + resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.31.1: + resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.31.1: + resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.31.1: + resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.31.1: + resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.31.1: + resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.31.1: + resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.31.1: + resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.31.1: + resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.31.1: + resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.31.1: + resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} + engines: {node: '>= 12.0.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.2.6: + resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@0.511.0: + resolution: {integrity: sha512-VK5a2ydJ7xm8GvBeKLS9mu1pVK6ucef9780JVUjw6bAjJL/QXnd4Y0p7SPeOUMC27YhzNCZvm5d/QX0Tp3rc0w==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-package-data@8.0.0: + resolution: {integrity: sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==} + engines: {node: ^20.17.0 || >=22.9.0} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@9.3.0: + resolution: {integrity: sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==} + engines: {node: '>=20'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + polkadot-api@1.23.3: + resolution: {integrity: sha512-wOWli6Cfk3bO1u/W8qmwriCIKxATkNea8Jyg1jj7GzAqafxy295BYPzYHy2mJZCQ0PAVFPR4/JvCXocTLBsp5A==} + hasBin: true + peerDependencies: + rxjs: '>=7.8.0' + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + react-dom@19.2.4: + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + peerDependencies: + react: ^19.2.4 + + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-router-dom@7.13.1: + resolution: {integrity: sha512-UJnV3Rxc5TgUPJt2KJpo1Jpy0OKQr0AjgbZzBFjaPJcFOb2Y8jA5H3LT8HUJAiRLlWrEXWHbF1Z4SCZaQjWDHw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.13.1: + resolution: {integrity: sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + engines: {node: '>=0.10.0'} + + read-pkg@10.1.0: + resolution: {integrity: sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==} + engines: {node: '>=20'} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + scale-ts@1.6.1: + resolution: {integrity: sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + smoldot@2.0.40: + resolution: {integrity: sha512-h6XC/kKDLdZBBTI0X8y4ZxmaZ2KYVVB0+5isCQm6j26ljeNjHZUDOV+hf8VyoE23+jg00wrxNJ2IVcIAURxwtg==} + + sort-keys@5.1.0: + resolution: {integrity: sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==} + engines: {node: '>=12'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + + stdin-discarder@0.3.1: + resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} + engines: {node: '>=18'} + + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + + tailwindcss@4.2.1: + resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsc-prog@2.3.0: + resolution: {integrity: sha512-ycET2d75EgcX7y8EmG4KiZkLAwUzbY4xRhA6NU0uVbHkY4ZjrAAuzTMxXI85kOwATqPnBI5C/7y7rlpY0xdqHA==} + engines: {node: '>=12'} + peerDependencies: + typescript: '>=4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsup@8.5.0: + resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + type-fest@5.4.4: + resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} + engines: {node: '>=20'} + + typescript-eslint@8.56.1: + resolution: {integrity: sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + write-json-file@6.0.0: + resolution: {integrity: sha512-MNHcU3f9WxnNyR6MxsYSj64Jz0+dwIpisWKWq9gqLj/GwmA9INg3BZ3vt70/HB3GEwrnDQWr4RPrywnhNzmUFA==} + engines: {node: '>=18'} + + write-package@7.2.0: + resolution: {integrity: sha512-uMQTubF/vcu+Wd0b5BGtDmiXePd/+44hUWQz2nZPbs92/BnxRo74tqs+hqDo12RLiEd+CXFKUwxvvIZvtt34Jw==} + engines: {node: '>=18'} + + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + +snapshots: + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.0': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@commander-js/extra-typings@14.0.0(commander@14.0.3)': + dependencies: + commander: 14.0.3 + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.3(jiti@2.6.1))': + dependencies: + eslint: 9.39.3(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.4': + dependencies: + ajv: 6.14.0 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.3': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@floating-ui/core@1.7.4': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.5': + dependencies: + '@floating-ui/core': 1.7.4 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/dom': 1.7.5 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@floating-ui/utils@0.2.10': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.8.0': {} + + '@noble/hashes@2.0.1': {} + + '@polkadot-api/cli@0.18.1(jiti@2.6.1)(postcss@8.5.6)': + dependencies: + '@commander-js/extra-typings': 14.0.0(commander@14.0.3) + '@polkadot-api/codegen': 0.21.2 + '@polkadot-api/ink-contracts': 0.4.6 + '@polkadot-api/json-rpc-provider': 0.0.4 + '@polkadot-api/known-chains': 0.9.18 + '@polkadot-api/legacy-provider': 0.3.8(rxjs@7.8.2) + '@polkadot-api/metadata-compatibility': 0.4.4 + '@polkadot-api/observable-client': 0.17.3(rxjs@7.8.2) + '@polkadot-api/polkadot-sdk-compat': 2.4.1 + '@polkadot-api/sm-provider': 0.1.16(@polkadot-api/smoldot@0.3.15) + '@polkadot-api/smoldot': 0.3.15 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/substrate-client': 0.5.0 + '@polkadot-api/utils': 0.2.0 + '@polkadot-api/wasm-executor': 0.2.3 + '@polkadot-api/ws-provider': 0.7.5 + '@types/node': 25.3.2 + commander: 14.0.3 + execa: 9.6.1 + fs.promises.exists: 1.1.4 + ora: 9.3.0 + read-pkg: 10.1.0 + rxjs: 7.8.2 + tsc-prog: 2.3.0(typescript@5.9.3) + tsup: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3) + typescript: 5.9.3 + write-package: 7.2.0 + transitivePeerDependencies: + - '@microsoft/api-extractor' + - '@swc/core' + - bufferutil + - jiti + - postcss + - supports-color + - tsx + - utf-8-validate + - yaml + + '@polkadot-api/codegen@0.21.2': + dependencies: + '@polkadot-api/ink-contracts': 0.4.6 + '@polkadot-api/metadata-builders': 0.13.9 + '@polkadot-api/metadata-compatibility': 0.4.4 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/utils': 0.2.0 + + '@polkadot-api/descriptors@file:.papi/descriptors(polkadot-api@1.23.3(jiti@2.6.1)(postcss@8.5.6)(rxjs@7.8.2))': + dependencies: + polkadot-api: 1.23.3(jiti@2.6.1)(postcss@8.5.6)(rxjs@7.8.2) + + '@polkadot-api/ink-contracts@0.4.6': + dependencies: + '@polkadot-api/metadata-builders': 0.13.9 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/utils': 0.2.0 + + '@polkadot-api/json-rpc-provider-proxy@0.2.8': {} + + '@polkadot-api/json-rpc-provider@0.0.4': {} + + '@polkadot-api/known-chains@0.9.18': {} + + '@polkadot-api/legacy-provider@0.3.8(rxjs@7.8.2)': + dependencies: + '@polkadot-api/json-rpc-provider': 0.0.4 + '@polkadot-api/raw-client': 0.1.1 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/utils': 0.2.0 + rxjs: 7.8.2 + + '@polkadot-api/logs-provider@0.0.6': + dependencies: + '@polkadot-api/json-rpc-provider': 0.0.4 + + '@polkadot-api/merkleize-metadata@1.1.29': + dependencies: + '@polkadot-api/metadata-builders': 0.13.9 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/utils': 0.2.0 + + '@polkadot-api/metadata-builders@0.13.9': + dependencies: + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/utils': 0.2.0 + + '@polkadot-api/metadata-compatibility@0.4.4': + dependencies: + '@polkadot-api/metadata-builders': 0.13.9 + '@polkadot-api/substrate-bindings': 0.17.0 + + '@polkadot-api/observable-client@0.17.3(rxjs@7.8.2)': + dependencies: + '@polkadot-api/metadata-builders': 0.13.9 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/substrate-client': 0.5.0 + '@polkadot-api/utils': 0.2.0 + rxjs: 7.8.2 + + '@polkadot-api/pjs-signer@0.6.19': + dependencies: + '@polkadot-api/metadata-builders': 0.13.9 + '@polkadot-api/polkadot-signer': 0.1.6 + '@polkadot-api/signers-common': 0.1.20 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/utils': 0.2.0 + + '@polkadot-api/polkadot-sdk-compat@2.4.1': + dependencies: + '@polkadot-api/json-rpc-provider': 0.0.4 + + '@polkadot-api/polkadot-signer@0.1.6': {} + + '@polkadot-api/raw-client@0.1.1': + dependencies: + '@polkadot-api/json-rpc-provider': 0.0.4 + + '@polkadot-api/signer@0.2.13': + dependencies: + '@noble/hashes': 2.0.1 + '@polkadot-api/merkleize-metadata': 1.1.29 + '@polkadot-api/polkadot-signer': 0.1.6 + '@polkadot-api/signers-common': 0.1.20 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/utils': 0.2.0 + + '@polkadot-api/signers-common@0.1.20': + dependencies: + '@polkadot-api/metadata-builders': 0.13.9 + '@polkadot-api/polkadot-signer': 0.1.6 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/utils': 0.2.0 + + '@polkadot-api/sm-provider@0.1.16(@polkadot-api/smoldot@0.3.15)': + dependencies: + '@polkadot-api/json-rpc-provider': 0.0.4 + '@polkadot-api/json-rpc-provider-proxy': 0.2.8 + '@polkadot-api/smoldot': 0.3.15 + + '@polkadot-api/smoldot@0.3.15': + dependencies: + '@types/node': 24.11.0 + smoldot: 2.0.40 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@polkadot-api/substrate-bindings@0.17.0': + dependencies: + '@noble/hashes': 2.0.1 + '@polkadot-api/utils': 0.2.0 + '@scure/base': 2.0.0 + scale-ts: 1.6.1 + + '@polkadot-api/substrate-bindings@0.9.4': + dependencies: + '@noble/hashes': 1.8.0 + '@polkadot-api/utils': 0.1.2 + '@scure/base': 1.2.6 + scale-ts: 1.6.1 + + '@polkadot-api/substrate-client@0.5.0': + dependencies: + '@polkadot-api/json-rpc-provider': 0.0.4 + '@polkadot-api/raw-client': 0.1.1 + '@polkadot-api/utils': 0.2.0 + + '@polkadot-api/utils@0.1.2': {} + + '@polkadot-api/utils@0.2.0': {} + + '@polkadot-api/wasm-executor@0.2.3': {} + + '@polkadot-api/ws-provider@0.7.5': + dependencies: + '@polkadot-api/json-rpc-provider': 0.0.4 + '@polkadot-api/json-rpc-provider-proxy': 0.2.8 + '@types/ws': 8.18.1 + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@polkadot/keyring@14.0.1(@polkadot/util-crypto@14.0.1(@polkadot/util@14.0.1))(@polkadot/util@14.0.1)': + dependencies: + '@polkadot/util': 14.0.1 + '@polkadot/util-crypto': 14.0.1(@polkadot/util@14.0.1) + tslib: 2.8.1 + + '@polkadot/networks@14.0.1': + dependencies: + '@polkadot/util': 14.0.1 + '@substrate/ss58-registry': 1.51.0 + tslib: 2.8.1 + + '@polkadot/util-crypto@14.0.1(@polkadot/util@14.0.1)': + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@polkadot/networks': 14.0.1 + '@polkadot/util': 14.0.1 + '@polkadot/wasm-crypto': 7.5.4(@polkadot/util@14.0.1)(@polkadot/x-randomvalues@14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1))) + '@polkadot/wasm-util': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/x-bigint': 14.0.1 + '@polkadot/x-randomvalues': 14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1)) + '@scure/base': 1.2.6 + '@scure/sr25519': 0.2.0 + tslib: 2.8.1 + + '@polkadot/util@14.0.1': + dependencies: + '@polkadot/x-bigint': 14.0.1 + '@polkadot/x-global': 14.0.1 + '@polkadot/x-textdecoder': 14.0.1 + '@polkadot/x-textencoder': 14.0.1 + '@types/bn.js': 5.2.0 + bn.js: 5.2.3 + tslib: 2.8.1 + + '@polkadot/wasm-bridge@7.5.4(@polkadot/util@14.0.1)(@polkadot/x-randomvalues@14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1)))': + dependencies: + '@polkadot/util': 14.0.1 + '@polkadot/wasm-util': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/x-randomvalues': 14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1)) + tslib: 2.8.1 + + '@polkadot/wasm-crypto-asmjs@7.5.4(@polkadot/util@14.0.1)': + dependencies: + '@polkadot/util': 14.0.1 + tslib: 2.8.1 + + '@polkadot/wasm-crypto-init@7.5.4(@polkadot/util@14.0.1)(@polkadot/x-randomvalues@14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1)))': + dependencies: + '@polkadot/util': 14.0.1 + '@polkadot/wasm-bridge': 7.5.4(@polkadot/util@14.0.1)(@polkadot/x-randomvalues@14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1))) + '@polkadot/wasm-crypto-asmjs': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/wasm-crypto-wasm': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/wasm-util': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/x-randomvalues': 14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1)) + tslib: 2.8.1 + + '@polkadot/wasm-crypto-wasm@7.5.4(@polkadot/util@14.0.1)': + dependencies: + '@polkadot/util': 14.0.1 + '@polkadot/wasm-util': 7.5.4(@polkadot/util@14.0.1) + tslib: 2.8.1 + + '@polkadot/wasm-crypto@7.5.4(@polkadot/util@14.0.1)(@polkadot/x-randomvalues@14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1)))': + dependencies: + '@polkadot/util': 14.0.1 + '@polkadot/wasm-bridge': 7.5.4(@polkadot/util@14.0.1)(@polkadot/x-randomvalues@14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1))) + '@polkadot/wasm-crypto-asmjs': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/wasm-crypto-init': 7.5.4(@polkadot/util@14.0.1)(@polkadot/x-randomvalues@14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1))) + '@polkadot/wasm-crypto-wasm': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/wasm-util': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/x-randomvalues': 14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1)) + tslib: 2.8.1 + + '@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1)': + dependencies: + '@polkadot/util': 14.0.1 + tslib: 2.8.1 + + '@polkadot/x-bigint@14.0.1': + dependencies: + '@polkadot/x-global': 14.0.1 + tslib: 2.8.1 + + '@polkadot/x-global@14.0.1': + dependencies: + tslib: 2.8.1 + + '@polkadot/x-randomvalues@14.0.1(@polkadot/util@14.0.1)(@polkadot/wasm-util@7.5.4(@polkadot/util@14.0.1))': + dependencies: + '@polkadot/util': 14.0.1 + '@polkadot/wasm-util': 7.5.4(@polkadot/util@14.0.1) + '@polkadot/x-global': 14.0.1 + tslib: 2.8.1 + + '@polkadot/x-textdecoder@14.0.1': + dependencies: + '@polkadot/x-global': 14.0.1 + tslib: 2.8.1 + + '@polkadot/x-textencoder@14.0.1': + dependencies: + '@polkadot/x-global': 14.0.1 + tslib: 2.8.1 + + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-icons@1.3.2(react@19.2.4)': + dependencies: + react: 19.2.4 + + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/rect': 1.1.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/rect@1.1.1': {} + + '@rolldown/pluginutils@1.0.0-beta.27': {} + + '@rollup/rollup-android-arm-eabi@4.59.0': + optional: true + + '@rollup/rollup-android-arm64@4.59.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.59.0': + optional: true + + '@rollup/rollup-darwin-x64@4.59.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.59.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.59.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.59.0': + optional: true + + '@rollup/rollup-openbsd-x64@4.59.0': + optional: true + + '@rollup/rollup-openharmony-arm64@4.59.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.59.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.59.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.59.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.59.0': + optional: true + + '@rx-state/core@0.1.4(rxjs@7.8.2)': + dependencies: + rxjs: 7.8.2 + + '@scure/base@1.2.6': {} + + '@scure/base@2.0.0': {} + + '@scure/sr25519@0.2.0': + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@substrate/ss58-registry@1.51.0': {} + + '@tailwindcss/node@4.2.1': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.20.0 + jiti: 2.6.1 + lightningcss: 1.31.1 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.1 + + '@tailwindcss/oxide-android-arm64@4.2.1': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.1': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.1': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.1': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.2.1': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.2.1': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.2.1': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.2.1': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.2.1': + optional: true + + '@tailwindcss/oxide@4.2.1': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.1 + '@tailwindcss/oxide-darwin-arm64': 4.2.1 + '@tailwindcss/oxide-darwin-x64': 4.2.1 + '@tailwindcss/oxide-freebsd-x64': 4.2.1 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.1 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.1 + '@tailwindcss/oxide-linux-x64-musl': 4.2.1 + '@tailwindcss/oxide-wasm32-wasi': 4.2.1 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 + + '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1))': + dependencies: + '@tailwindcss/node': 4.2.1 + '@tailwindcss/oxide': 4.2.1 + tailwindcss: 4.2.1 + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/bn.js@5.2.0': + dependencies: + '@types/node': 25.3.2 + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@24.11.0': + dependencies: + undici-types: 7.16.0 + + '@types/node@25.3.2': + dependencies: + undici-types: 7.18.2 + + '@types/normalize-package-data@2.4.4': {} + + '@types/react-dom@19.2.3(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + + '@types/ws@8.18.1': + dependencies: + '@types/node': 25.3.2 + + '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/type-utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.56.1 + eslint: 9.39.3(jiti@2.6.1) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.4.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.56.1 + debug: 4.4.3 + eslint: 9.39.3(jiti@2.6.1) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.56.1(typescript@5.8.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.8.3) + '@typescript-eslint/types': 8.56.1 + debug: 4.4.3 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.56.1': + dependencies: + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/visitor-keys': 8.56.1 + + '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + debug: 4.4.3 + eslint: 9.39.3(jiti@2.6.1) + ts-api-utils: 2.4.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.56.1': {} + + '@typescript-eslint/typescript-estree@8.56.1(typescript@5.8.3)': + dependencies: + '@typescript-eslint/project-service': 8.56.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.8.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/visitor-keys': 8.56.1 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.8.3) + eslint: 9.39.3(jiti@2.6.1) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.56.1': + dependencies: + '@typescript-eslint/types': 8.56.1 + eslint-visitor-keys: 5.0.1 + + '@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1) + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + any-promise@1.3.0: {} + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.10.0: {} + + bn.js@5.2.3: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@5.0.4: + dependencies: + balanced-match: 4.0.4 + + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001774 + electron-to-chromium: 1.5.302 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + + bundle-require@5.1.0(esbuild@0.25.12): + dependencies: + esbuild: 0.25.12 + load-tsconfig: 0.2.5 + + cac@6.7.14: {} + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001774: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@3.4.0: {} + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@14.0.3: {} + + commander@4.1.1: {} + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + consola@3.4.2: {} + + convert-source-map@2.0.0: {} + + cookie@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + deepmerge-ts@7.1.5: {} + + detect-indent@7.0.2: {} + + detect-libc@2.1.2: {} + + detect-node-es@1.1.0: {} + + electron-to-chromium@1.5.302: {} + + enhanced-resolve@5.20.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@5.2.0(eslint@9.39.3(jiti@2.6.1)): + dependencies: + eslint: 9.39.3(jiti@2.6.1) + + eslint-plugin-react-refresh@0.4.26(eslint@9.39.3(jiti@2.6.1)): + dependencies: + eslint: 9.39.3(jiti@2.6.1) + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.3(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.4 + '@eslint/js': 9.39.3 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + execa@9.6.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.21 + mlly: 1.8.0 + rollup: 4.59.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + fs.promises.exists@1.1.4: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + get-east-asian-width@1.5.0: {} + + get-nonce@1.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@16.5.0: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + hosted-git-info@9.0.2: + dependencies: + lru-cache: 11.2.6 + + human-signals@8.0.1: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + index-to-position@1.2.0: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@2.0.0: {} + + is-plain-obj@4.1.0: {} + + is-stream@4.0.1: {} + + is-unicode-supported@2.1.0: {} + + isexe@2.0.0: {} + + jiti@2.6.1: {} + + joycon@3.1.1: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.31.1: + optional: true + + lightningcss-darwin-arm64@1.31.1: + optional: true + + lightningcss-darwin-x64@1.31.1: + optional: true + + lightningcss-freebsd-x64@1.31.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.31.1: + optional: true + + lightningcss-linux-arm64-gnu@1.31.1: + optional: true + + lightningcss-linux-arm64-musl@1.31.1: + optional: true + + lightningcss-linux-x64-gnu@1.31.1: + optional: true + + lightningcss-linux-x64-musl@1.31.1: + optional: true + + lightningcss-win32-arm64-msvc@1.31.1: + optional: true + + lightningcss-win32-x64-msvc@1.31.1: + optional: true + + lightningcss@1.31.1: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-freebsd-x64: 1.31.1 + lightningcss-linux-arm-gnueabihf: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-arm64-msvc: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + load-tsconfig@0.2.5: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash.sortby@4.7.0: {} + + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + + lru-cache@10.4.3: {} + + lru-cache@11.2.6: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lucide-react@0.511.0(react@19.2.4): + dependencies: + react: 19.2.4 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + mimic-function@5.0.1: {} + + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.4 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.12 + + mlly@1.8.0: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.27: {} + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.4 + validate-npm-package-license: 3.0.4 + + normalize-package-data@8.0.0: + dependencies: + hosted-git-info: 9.0.2 + semver: 7.7.4 + validate-npm-package-license: 3.0.4 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + object-assign@4.1.1: {} + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@9.3.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.1 + string-width: 8.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.0 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parse-ms@4.0.0: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + pirates@4.0.7: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + polkadot-api@1.23.3(jiti@2.6.1)(postcss@8.5.6)(rxjs@7.8.2): + dependencies: + '@polkadot-api/cli': 0.18.1(jiti@2.6.1)(postcss@8.5.6) + '@polkadot-api/ink-contracts': 0.4.6 + '@polkadot-api/json-rpc-provider': 0.0.4 + '@polkadot-api/known-chains': 0.9.18 + '@polkadot-api/logs-provider': 0.0.6 + '@polkadot-api/metadata-builders': 0.13.9 + '@polkadot-api/metadata-compatibility': 0.4.4 + '@polkadot-api/observable-client': 0.17.3(rxjs@7.8.2) + '@polkadot-api/pjs-signer': 0.6.19 + '@polkadot-api/polkadot-sdk-compat': 2.4.1 + '@polkadot-api/polkadot-signer': 0.1.6 + '@polkadot-api/signer': 0.2.13 + '@polkadot-api/sm-provider': 0.1.16(@polkadot-api/smoldot@0.3.15) + '@polkadot-api/smoldot': 0.3.15 + '@polkadot-api/substrate-bindings': 0.17.0 + '@polkadot-api/substrate-client': 0.5.0 + '@polkadot-api/utils': 0.2.0 + '@polkadot-api/ws-provider': 0.7.5 + '@rx-state/core': 0.1.4(rxjs@7.8.2) + rxjs: 7.8.2 + transitivePeerDependencies: + - '@microsoft/api-extractor' + - '@swc/core' + - bufferutil + - jiti + - postcss + - supports-color + - tsx + - utf-8-validate + - yaml + + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.6.1 + postcss: 8.5.6 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + + punycode@2.3.1: {} + + react-dom@19.2.4(react@19.2.4): + dependencies: + react: 19.2.4 + scheduler: 0.27.0 + + react-refresh@0.17.0: {} + + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + + react-router-dom@7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-router: 7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + + react-router@7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + cookie: 1.1.1 + react: 19.2.4 + set-cookie-parser: 2.7.2 + optionalDependencies: + react-dom: 19.2.4(react@19.2.4) + + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + get-nonce: 1.0.1 + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + react@19.2.4: {} + + read-pkg@10.1.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 8.0.0 + parse-json: 8.3.0 + type-fest: 5.4.4 + unicorn-magic: 0.4.0 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.0 + + readdirp@4.1.2: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + rollup@4.59.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 + fsevents: 2.3.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + scale-ts@1.6.1: {} + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + semver@7.7.4: {} + + set-cookie-parser@2.7.2: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + + smoldot@2.0.40: + dependencies: + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + sort-keys@5.1.0: + dependencies: + is-plain-obj: 4.1.0 + + source-map-js@1.2.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.23 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 + + spdx-license-ids@3.0.23: {} + + stdin-discarder@0.3.1: {} + + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + strip-final-newline@4.0.0: {} + + strip-json-comments@3.1.1: {} + + sucrase@3.35.1: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + tinyglobby: 0.2.15 + ts-interface-checker: 0.1.13 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tagged-tag@1.0.0: {} + + tailwind-merge@3.5.0: {} + + tailwindcss@4.2.1: {} + + tapable@2.3.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tinyexec@0.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + tree-kill@1.2.2: {} + + ts-api-utils@2.4.0(typescript@5.8.3): + dependencies: + typescript: 5.8.3 + + ts-interface-checker@0.1.13: {} + + tsc-prog@2.3.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tslib@2.8.1: {} + + tsup@8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3): + dependencies: + bundle-require: 5.1.0(esbuild@0.25.12) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.3 + esbuild: 0.25.12 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6) + resolve-from: 5.0.0 + rollup: 4.59.0 + source-map: 0.8.0-beta.0 + sucrase: 3.35.1 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.6 + typescript: 5.9.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@4.41.0: {} + + type-fest@5.4.4: + dependencies: + tagged-tag: 1.0.0 + + typescript-eslint@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.39.3(jiti@2.6.1) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + typescript@5.8.3: {} + + typescript@5.9.3: {} + + ufo@1.6.3: {} + + undici-types@7.16.0: {} + + undici-types@7.18.2: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + unicorn-magic@0.4.0: {} + + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.31.1): + dependencies: + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.59.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.3.2 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.31.1 + + webidl-conversions@4.0.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + write-json-file@6.0.0: + dependencies: + detect-indent: 7.0.2 + is-plain-obj: 4.1.0 + sort-keys: 5.1.0 + write-file-atomic: 5.0.1 + + write-package@7.2.0: + dependencies: + deepmerge-ts: 7.1.5 + read-pkg: 9.0.1 + sort-keys: 5.1.0 + type-fest: 4.41.0 + write-json-file: 6.0.0 + + ws@8.19.0: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} + + yoctocolors@2.1.2: {} diff --git a/user-interfaces/console-ui/public/vite.svg b/user-interfaces/console-ui/public/vite.svg new file mode 100644 index 0000000..6a41099 --- /dev/null +++ b/user-interfaces/console-ui/public/vite.svg @@ -0,0 +1 @@ + diff --git a/user-interfaces/console-ui/src/App.tsx b/user-interfaces/console-ui/src/App.tsx new file mode 100644 index 0000000..f07088a --- /dev/null +++ b/user-interfaces/console-ui/src/App.tsx @@ -0,0 +1,35 @@ +import { Routes, Route } from "react-router-dom"; +import { Toaster } from "@/components/ui/toaster"; +import { ChainProvider } from "@/hooks/useChain"; +import { StorageProvider } from "@/hooks/useStorage"; +import Layout from "@/components/Layout"; +import Dashboard from "@/pages/Dashboard"; +import Drives from "@/pages/Drives"; +import Buckets from "@/pages/Buckets"; +import Upload from "@/pages/Upload"; +import Download from "@/pages/Download"; +import Explorer from "@/pages/Explorer"; +import Accounts from "@/pages/Accounts"; + +function App() { + return ( + + + + }> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + + + + ); +} + +export default App; diff --git a/user-interfaces/console-ui/src/components/ConnectDialog.tsx b/user-interfaces/console-ui/src/components/ConnectDialog.tsx new file mode 100644 index 0000000..a4e1605 --- /dev/null +++ b/user-interfaces/console-ui/src/components/ConnectDialog.tsx @@ -0,0 +1,82 @@ +import { useState } from "react"; +import * as Dialog from "@radix-ui/react-dialog"; +import { X, Plug } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { useChain } from "@/hooks/useChain"; + +export default function ConnectDialog() { + const { connect, connecting, error } = useChain(); + const [chainWs, setChainWs] = useState("ws://127.0.0.1:2222"); + const [providerUrl, setProviderUrl] = useState("http://127.0.0.1:3333"); + const [open, setOpen] = useState(false); + + const handleConnect = async () => { + await connect(chainWs, providerUrl); + setOpen(false); + }; + + return ( + + + + + + + + + Connect to Network + + + Enter the WebSocket endpoint for the parachain and the HTTP endpoint + for the storage provider. + + +
+
+ + setChainWs(e.target.value)} + placeholder="ws://127.0.0.1:2222" + /> +
+ +
+ + setProviderUrl(e.target.value)} + placeholder="http://127.0.0.1:3333" + /> +
+ + {error && ( +

{error}

+ )} + +
+ + + + +
+
+ + + + +
+
+
+ ); +} diff --git a/user-interfaces/console-ui/src/components/Layout.tsx b/user-interfaces/console-ui/src/components/Layout.tsx new file mode 100644 index 0000000..89aae0a --- /dev/null +++ b/user-interfaces/console-ui/src/components/Layout.tsx @@ -0,0 +1,97 @@ +import { Outlet, NavLink } from "react-router-dom"; +import { + LayoutDashboard, + HardDrive, + Archive, + Upload, + Download, + Search, + Users, + Settings, + Wifi, + WifiOff, +} from "lucide-react"; +import { useChain } from "@/hooks/useChain"; +import { Button } from "@/components/ui/button"; +import { cn } from "@/lib/utils"; +import ConnectDialog from "./ConnectDialog"; + +const navigation = [ + { name: "Dashboard", href: "/", icon: LayoutDashboard }, + { name: "Drives", href: "/drives", icon: HardDrive }, + { name: "S3 Buckets", href: "/buckets", icon: Archive }, + { name: "Upload", href: "/upload", icon: Upload }, + { name: "Download", href: "/download", icon: Download }, + { name: "Explorer", href: "/explorer", icon: Search }, + { name: "Accounts", href: "/accounts", icon: Users }, +]; + +export default function Layout() { + const { connected, connecting, blockNumber, disconnect } = useChain(); + + return ( +
+ {/* Sidebar */} +
+
+ + Web3 Storage +
+ + + + {/* Connection status */} +
+
+
+ {connected ? ( + + ) : ( + + )} + + {connecting + ? "Connecting..." + : connected + ? `Block #${blockNumber}` + : "Disconnected"} + +
+ {connected ? ( + + ) : ( + + )} +
+
+
+ + {/* Main content */} +
+
+ +
+
+
+ ); +} diff --git a/user-interfaces/console-ui/src/components/ui/button.tsx b/user-interfaces/console-ui/src/components/ui/button.tsx new file mode 100644 index 0000000..518700b --- /dev/null +++ b/user-interfaces/console-ui/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ( + + ); + } +); +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/user-interfaces/console-ui/src/components/ui/card.tsx b/user-interfaces/console-ui/src/components/ui/card.tsx new file mode 100644 index 0000000..085eb29 --- /dev/null +++ b/user-interfaces/console-ui/src/components/ui/card.tsx @@ -0,0 +1,75 @@ +import * as React from "react"; +import { cn } from "@/lib/utils"; + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }; diff --git a/user-interfaces/console-ui/src/components/ui/input.tsx b/user-interfaces/console-ui/src/components/ui/input.tsx new file mode 100644 index 0000000..08ab9ec --- /dev/null +++ b/user-interfaces/console-ui/src/components/ui/input.tsx @@ -0,0 +1,21 @@ +import * as React from "react"; +import { cn } from "@/lib/utils"; + +const Input = React.forwardRef>( + ({ className, type, ...props }, ref) => { + return ( + + ); + } +); +Input.displayName = "Input"; + +export { Input }; diff --git a/user-interfaces/console-ui/src/components/ui/toaster.tsx b/user-interfaces/console-ui/src/components/ui/toaster.tsx new file mode 100644 index 0000000..037295f --- /dev/null +++ b/user-interfaces/console-ui/src/components/ui/toaster.tsx @@ -0,0 +1,166 @@ +import * as React from "react"; +import * as ToastPrimitives from "@radix-ui/react-toast"; +import { cva, type VariantProps } from "class-variance-authority"; +import { X } from "lucide-react"; +import { cn } from "@/lib/utils"; + +const ToastProvider = ToastPrimitives.Provider; + +const ToastViewport = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +ToastViewport.displayName = ToastPrimitives.Viewport.displayName; + +const toastVariants = cva( + "group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full", + { + variants: { + variant: { + default: "border bg-background text-foreground", + destructive: + "destructive group border-destructive bg-destructive text-destructive-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +); + +const Toast = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, variant, ...props }, ref) => { + return ( + + ); +}); +Toast.displayName = ToastPrimitives.Root.displayName; + +const ToastAction = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +ToastAction.displayName = ToastPrimitives.Action.displayName; + +const ToastClose = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)); +ToastClose.displayName = ToastPrimitives.Close.displayName; + +const ToastTitle = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +ToastTitle.displayName = ToastPrimitives.Title.displayName; + +const ToastDescription = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +ToastDescription.displayName = ToastPrimitives.Description.displayName; + +type ToastProps = React.ComponentPropsWithoutRef; +type ToastActionElement = React.ReactElement; + +// Simple toast store +let toastCount = 0; +const toastListeners: Set<() => void> = new Set(); +let toasts: Array<{ + id: string; + title?: string; + description?: string; + variant?: "default" | "destructive"; +}> = []; + +function addToast(toast: Omit<(typeof toasts)[0], "id">) { + const id = String(toastCount++); + toasts = [...toasts, { ...toast, id }]; + toastListeners.forEach((l) => l()); + setTimeout(() => removeToast(id), 5000); +} + +function removeToast(id: string) { + toasts = toasts.filter((t) => t.id !== id); + toastListeners.forEach((l) => l()); +} + +export function toast(props: { title?: string; description?: string; variant?: "default" | "destructive" }) { + addToast(props); +} + +export function Toaster() { + const [, setUpdate] = React.useState(0); + + React.useEffect(() => { + const listener = () => setUpdate((u) => u + 1); + toastListeners.add(listener); + return () => { toastListeners.delete(listener); }; + }, []); + + return ( + + {toasts.map((t) => ( + +
+ {t.title && {t.title}} + {t.description && {t.description}} +
+ removeToast(t.id)} /> +
+ ))} + +
+ ); +} + +export type { ToastProps, ToastActionElement }; diff --git a/user-interfaces/console-ui/src/hooks/useChain.tsx b/user-interfaces/console-ui/src/hooks/useChain.tsx new file mode 100644 index 0000000..8a9d5ac --- /dev/null +++ b/user-interfaces/console-ui/src/hooks/useChain.tsx @@ -0,0 +1,132 @@ +import { + createContext, + useContext, + useState, + useEffect, + useCallback, + type ReactNode, +} from "react"; +import { createClient, type PolkadotClient } from "polkadot-api"; +import { getWsProvider } from "polkadot-api/ws-provider/web"; +import { BehaviorSubject } from "rxjs"; + +interface ChainState { + client: PolkadotClient | null; + connected: boolean; + connecting: boolean; + error: string | null; + chainEndpoint: string; + providerEndpoint: string; + blockNumber: number; + connect: (chainWs: string, providerUrl: string) => Promise; + disconnect: () => void; +} + +const defaultState: ChainState = { + client: null, + connected: false, + connecting: false, + error: null, + chainEndpoint: "ws://127.0.0.1:2222", + providerEndpoint: "http://127.0.0.1:3333", + blockNumber: 0, + connect: async () => {}, + disconnect: () => {}, +}; + +const ChainContext = createContext(defaultState); + +export const blockNumber$ = new BehaviorSubject(0); + +export function ChainProvider({ children }: { children: ReactNode }) { + const [client, setClient] = useState(null); + const [connected, setConnected] = useState(false); + const [connecting, setConnecting] = useState(false); + const [error, setError] = useState(null); + const [chainEndpoint, setChainEndpoint] = useState("ws://127.0.0.1:2222"); + const [providerEndpoint, setProviderEndpoint] = useState( + "http://127.0.0.1:3333" + ); + const [blockNumber, setBlockNumber] = useState(0); + + const connect = useCallback( + async (chainWs: string, providerUrl: string) => { + if (connecting || connected) return; + + setConnecting(true); + setError(null); + setChainEndpoint(chainWs); + setProviderEndpoint(providerUrl); + + try { + const provider = getWsProvider(chainWs); + const newClient = createClient(provider); + + // Subscribe to finalized blocks + const unsub = newClient.finalizedBlock$.subscribe((block) => { + setBlockNumber(block.number); + blockNumber$.next(block.number); + }); + + setClient(newClient); + setConnected(true); + + // Store cleanup + (newClient as unknown as { _unsub: () => void })._unsub = unsub.unsubscribe.bind(unsub); + } catch (err) { + setError(err instanceof Error ? err.message : "Connection failed"); + setConnected(false); + } finally { + setConnecting(false); + } + }, + [connecting, connected] + ); + + const disconnect = useCallback(() => { + if (client) { + const unsub = (client as unknown as { _unsub?: () => void })._unsub; + if (unsub) unsub(); + client.destroy(); + setClient(null); + setConnected(false); + setBlockNumber(0); + blockNumber$.next(0); + } + }, [client]); + + // Cleanup on unmount + useEffect(() => { + return () => { + if (client) { + client.destroy(); + } + }; + }, [client]); + + return ( + + {children} + + ); +} + +export function useChain() { + const context = useContext(ChainContext); + if (!context) { + throw new Error("useChain must be used within a ChainProvider"); + } + return context; +} diff --git a/user-interfaces/console-ui/src/hooks/useStorage.tsx b/user-interfaces/console-ui/src/hooks/useStorage.tsx new file mode 100644 index 0000000..5c6f87e --- /dev/null +++ b/user-interfaces/console-ui/src/hooks/useStorage.tsx @@ -0,0 +1,305 @@ +import { + createContext, + useContext, + useState, + useCallback, + useEffect, + type ReactNode, +} from "react"; +import { + StorageClient, + type DriveInfo, + type BucketInfo, + type CreateDriveOptions, + type CreateBucketOptions, + type UploadResult, + type PutObjectOptions, +} from "@/lib/storage"; +import { useChain } from "./useChain"; + +interface StorageState { + client: StorageClient | null; + signerAddress: string | null; + drives: DriveInfo[]; + buckets: BucketInfo[]; + loading: boolean; + error: string | null; + + // Account + setSigner: (seed: string) => Promise; + + // Drives (File System) + createDrive: (options: CreateDriveOptions) => Promise; + refreshDrives: () => Promise; + deleteDrive: (driveId: bigint) => Promise; + uploadToDrive: (driveId: bigint, bucketId: bigint, path: string, data: Uint8Array) => Promise; + downloadFromDrive: (bucketId: bigint, cid: string) => Promise; + + // Buckets (S3) + createBucket: (name: string, options: CreateBucketOptions) => Promise; + refreshBuckets: () => Promise; + deleteBucket: (name: string) => Promise; + putObject: (bucketName: string, key: string, data: Uint8Array, bucketId: bigint, options?: PutObjectOptions) => Promise; + getObject: (bucketId: bigint, cid: string) => Promise; + + // Provider + checkProviderHealth: () => Promise; +} + +const StorageContext = createContext(null); + +export function StorageProvider({ children }: { children: ReactNode }) { + const { connected, chainEndpoint, providerEndpoint } = useChain(); + const [client, setClient] = useState(null); + const [signerAddress, setSignerAddress] = useState(null); + const [drives, setDrives] = useState([]); + const [buckets, setBuckets] = useState([]); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + // Initialize client when chain is connected + useEffect(() => { + if (connected && chainEndpoint && providerEndpoint) { + const newClient = new StorageClient(chainEndpoint, providerEndpoint); + newClient.connect().then(() => { + setClient(newClient); + }).catch((err) => { + setError(err instanceof Error ? err.message : "Failed to connect storage client"); + }); + } else { + if (client) { + client.disconnect(); + } + setClient(null); + setSignerAddress(null); + setDrives([]); + setBuckets([]); + } + }, [connected, chainEndpoint, providerEndpoint]); + + const setSigner = useCallback(async (seed: string) => { + if (!client) throw new Error("Client not connected"); + setLoading(true); + setError(null); + try { + const address = await client.setSigner(seed); + setSignerAddress(address); + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to set signer"); + throw err; + } finally { + setLoading(false); + } + }, [client]); + + // --- Drive Operations --- + + const createDrive = useCallback(async (options: CreateDriveOptions): Promise => { + if (!client) throw new Error("Client not connected"); + if (!signerAddress) throw new Error("Signer not set"); + + setLoading(true); + setError(null); + try { + const driveId = await client.createDrive(options); + await refreshDrives(); + return driveId; + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to create drive"); + throw err; + } finally { + setLoading(false); + } + }, [client, signerAddress]); + + const refreshDrives = useCallback(async () => { + if (!client) return; + setLoading(true); + try { + const driveList = await client.listDrives(); + setDrives(driveList); + } catch (err) { + console.error("Failed to refresh drives:", err); + } finally { + setLoading(false); + } + }, [client]); + + const deleteDrive = useCallback(async (driveId: bigint) => { + if (!client) throw new Error("Client not connected"); + + setLoading(true); + setError(null); + try { + await client.deleteDrive(driveId); + await refreshDrives(); + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to delete drive"); + throw err; + } finally { + setLoading(false); + } + }, [client, refreshDrives]); + + const uploadToDrive = useCallback(async ( + driveId: bigint, + bucketId: bigint, + path: string, + data: Uint8Array + ): Promise => { + if (!client) throw new Error("Client not connected"); + + setLoading(true); + setError(null); + try { + return await client.uploadToDrive(driveId, bucketId, path, data); + } catch (err) { + setError(err instanceof Error ? err.message : "Upload failed"); + throw err; + } finally { + setLoading(false); + } + }, [client]); + + const downloadFromDrive = useCallback(async (bucketId: bigint, cid: string): Promise => { + if (!client) throw new Error("Client not connected"); + + setLoading(true); + setError(null); + try { + return await client.downloadByCid(bucketId, cid); + } catch (err) { + setError(err instanceof Error ? err.message : "Download failed"); + throw err; + } finally { + setLoading(false); + } + }, [client]); + + // --- Bucket Operations --- + + const createBucket = useCallback(async (name: string, options: CreateBucketOptions): Promise => { + if (!client) throw new Error("Client not connected"); + if (!signerAddress) throw new Error("Signer not set"); + + setLoading(true); + setError(null); + try { + const bucket = await client.createBucket(name, options); + await refreshBuckets(); + return bucket; + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to create bucket"); + throw err; + } finally { + setLoading(false); + } + }, [client, signerAddress]); + + const refreshBuckets = useCallback(async () => { + if (!client) return; + setLoading(true); + try { + const bucketList = await client.listBuckets(); + setBuckets(bucketList); + } catch (err) { + console.error("Failed to refresh buckets:", err); + } finally { + setLoading(false); + } + }, [client]); + + const deleteBucket = useCallback(async (name: string) => { + if (!client) throw new Error("Client not connected"); + + setLoading(true); + setError(null); + try { + await client.deleteBucket(name); + await refreshBuckets(); + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to delete bucket"); + throw err; + } finally { + setLoading(false); + } + }, [client, refreshBuckets]); + + const putObject = useCallback(async ( + bucketName: string, + key: string, + data: Uint8Array, + bucketId: bigint, + options?: PutObjectOptions + ): Promise => { + if (!client) throw new Error("Client not connected"); + + setLoading(true); + setError(null); + try { + return await client.putObject(bucketName, key, data, bucketId, options); + } catch (err) { + setError(err instanceof Error ? err.message : "Upload failed"); + throw err; + } finally { + setLoading(false); + } + }, [client]); + + const getObject = useCallback(async (bucketId: bigint, cid: string): Promise => { + if (!client) throw new Error("Client not connected"); + + setLoading(true); + setError(null); + try { + return await client.getObject(bucketId, cid); + } catch (err) { + setError(err instanceof Error ? err.message : "Download failed"); + throw err; + } finally { + setLoading(false); + } + }, [client]); + + // --- Provider Health --- + + const checkProviderHealth = useCallback(async (): Promise => { + if (!client) return false; + return client.checkProviderHealth(); + }, [client]); + + return ( + + {children} + + ); +} + +export function useStorage() { + const context = useContext(StorageContext); + if (!context) { + throw new Error("useStorage must be used within a StorageProvider"); + } + return context; +} diff --git a/user-interfaces/console-ui/src/lib/storage.ts b/user-interfaces/console-ui/src/lib/storage.ts new file mode 100644 index 0000000..fac68d1 --- /dev/null +++ b/user-interfaces/console-ui/src/lib/storage.ts @@ -0,0 +1,542 @@ +/** + * Storage SDK - Browser-compatible wrapper for File System and S3 operations + * Uses real chain types via polkadot-api + */ + +import { createClient, type PolkadotClient, type TypedApi } from "polkadot-api"; +import { getWsProvider } from "polkadot-api/ws-provider/web"; +import { getPolkadotSigner } from "polkadot-api/signer"; +import { Keyring } from "@polkadot/keyring"; +import { cryptoWaitReady, blake2AsU8a } from "@polkadot/util-crypto"; +import { parachain } from "@polkadot-api/descriptors"; +import { Binary } from "polkadot-api"; + +// Types +export interface DriveInfo { + driveId: bigint; + owner: string; + name: string | null; + bucketId: bigint; + rootCid: string | null; + createdAt: bigint; + lastCommittedAt: bigint; +} + +export interface BucketInfo { + s3BucketId: bigint; + name: string; + layer0BucketId: bigint; + owner: string; + createdAt: bigint; + objectCount: bigint; + totalSize: bigint; +} + +export interface UploadResult { + cid: string; + size: number; +} + +export interface CreateDriveOptions { + name?: string; + capacity: bigint; + duration: number; + maxPayment: bigint; +} + +export interface CreateBucketOptions { + capacity: bigint; + duration: number; + maxPayment: bigint; +} + +export interface PutObjectOptions { + contentType?: string; + metadata?: Record; +} + +type ParachainApi = TypedApi; + +/** + * Storage Client for browser-based operations + * Uses real chain types for pallet interactions + */ +export class StorageClient { + private chainWs: string; + private providerUrl: string; + private client: PolkadotClient | null = null; + private api: ParachainApi | null = null; + private signer: ReturnType | null = null; + private signerAddress: string | null = null; + + constructor(chainWs: string, providerUrl: string) { + this.chainWs = chainWs; + this.providerUrl = providerUrl; + } + + async connect(): Promise { + await cryptoWaitReady(); + this.client = createClient(getWsProvider(this.chainWs)); + this.api = this.client.getTypedApi(parachain); + } + + async setSigner(seed: string): Promise { + await cryptoWaitReady(); + const keyring = new Keyring({ type: "sr25519" }); + const account = keyring.addFromUri(seed); + this.signer = getPolkadotSigner(account.publicKey, "Sr25519", (input) => + account.sign(input) + ); + this.signerAddress = account.address; + return account.address; + } + + getAddress(): string | null { + return this.signerAddress; + } + + disconnect(): void { + if (this.client) { + this.client.destroy(); + this.client = null; + this.api = null; + } + } + + isConnected(): boolean { + return this.client !== null && this.api !== null; + } + + hasSigner(): boolean { + return this.signer !== null; + } + + private ensureConnected(): void { + if (!this.api) throw new Error("Not connected. Call connect() first."); + if (!this.signer) throw new Error("Signer not set. Call setSigner() first."); + } + + // --- File System (Drive) Operations --- + + async createDrive(options: CreateDriveOptions): Promise { + this.ensureConnected(); + + // Step 1: Create a Layer 0 bucket with storage via StorageProvider pallet + const bucketTx = this.api!.tx.StorageProvider.create_bucket_with_storage({ + max_bytes: options.capacity, + duration: options.duration, + max_price_per_byte: options.maxPayment, + }); + + const bucketResult = await bucketTx.signAndSubmit(this.signer!); + + // Extract bucket ID from events + let bucketId: bigint | null = null; + for (const event of bucketResult.events) { + if (event.type === "StorageProvider" && event.value.type === "BucketCreated") { + bucketId = event.value.value.bucket_id; + break; + } + } + + if (bucketId === null) { + throw new Error("BucketCreated event not found - bucket creation failed"); + } + + // Step 2: Create a drive on that bucket via DriveRegistry pallet + // Using empty root CID (32 zero bytes) for new drive + const emptyRootCid = Binary.fromBytes(new Uint8Array(32)); + + const driveTx = this.api!.tx.DriveRegistry.create_drive_on_bucket({ + bucket_id: bucketId, + root_cid: emptyRootCid, + name: options.name ? Binary.fromText(options.name) : undefined, + }); + + const driveResult = await driveTx.signAndSubmit(this.signer!); + + // Extract drive ID from events + for (const event of driveResult.events) { + if (event.type === "DriveRegistry" && event.value.type === "DriveCreatedOnBucket") { + return event.value.value.drive_id; + } + if (event.type === "DriveRegistry" && event.value.type === "DriveCreated") { + return event.value.value.drive_id; + } + } + + throw new Error("DriveCreated event not found in transaction result"); + } + + async listDrives(): Promise { + this.ensureConnected(); + + const driveIds = await this.api!.query.DriveRegistry.UserDrives.getValue( + this.signerAddress! + ); + + if (!driveIds) return []; + + const drives: DriveInfo[] = []; + for (const driveId of driveIds) { + const drive = await this.getDrive(driveId); + if (drive) drives.push(drive); + } + return drives; + } + + async getDrive(driveId: bigint): Promise { + this.ensureConnected(); + + const drive = await this.api!.query.DriveRegistry.Drives.getValue(driveId); + if (!drive) return null; + + // Handle name - it may be an Option> or Binary + let name: string | null = null; + if (drive.name) { + if (typeof drive.name.asBytes === 'function') { + name = new TextDecoder().decode(drive.name.asBytes()); + } else if (drive.name instanceof Uint8Array) { + name = new TextDecoder().decode(drive.name); + } + } + + // Handle root_cid - it's a FixedSizeBinary<32> in polkadot-api + let rootCid: string | null = null; + if (drive.root_cid) { + // FixedSizeBinary has asBytes() method + const cidBytes = drive.root_cid.asBytes(); + // Check if it's all zeros (empty CID) + const isZero = Array.from(cidBytes).every(b => b === 0); + rootCid = isZero ? null : this.toHex(cidBytes); + } + + return { + driveId, + owner: drive.owner, + name, + bucketId: BigInt(drive.bucket_id), + rootCid, + createdAt: BigInt(drive.created_at), + lastCommittedAt: BigInt(drive.last_committed_at), + }; + } + + async deleteDrive(driveId: bigint): Promise { + this.ensureConnected(); + + await this.api!.tx.DriveRegistry.delete_drive({ + drive_id: driveId, + }).signAndSubmit(this.signer!); + } + + async uploadToDrive( + _driveId: bigint, + bucketId: bigint, + _path: string, + data: Uint8Array + ): Promise { + const hash = blake2AsU8a(data); + const cid = this.toHex(hash); + + // Upload to provider + const response = await fetch(`${this.providerUrl}/node`, { + method: "PUT", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + bucket_id: Number(bucketId), + hash: cid, + data: this.toBase64(data), + children: null, + }), + }); + + if (!response.ok) { + throw new Error(`Upload failed: ${response.status} ${await response.text()}`); + } + + // Commit to MMR + const commitResponse = await fetch(`${this.providerUrl}/commit`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + bucket_id: Number(bucketId), + data_roots: [cid], + }), + }); + + if (!commitResponse.ok) { + throw new Error(`Commit failed: ${commitResponse.status}`); + } + + return { cid, size: data.length }; + } + + async downloadByCid(bucketId: bigint, cid: string): Promise { + const response = await fetch( + `${this.providerUrl}/node?hash=${cid}&bucket_id=${bucketId}` + ); + + if (!response.ok) { + throw new Error(`Download failed: ${response.status}`); + } + + const json = await response.json(); + return this.fromBase64(json.data); + } + + // --- S3 Operations --- + + async createBucket(name: string, _options: CreateBucketOptions): Promise { + this.ensureConnected(); + this.validateBucketName(name); + + // S3 bucket creation only requires name and min_providers + // The pallet creates a Layer 0 bucket internally + const tx = this.api!.tx.S3Registry.create_s3_bucket({ + name: Binary.fromText(name), + min_providers: 1, + }); + + const result = await tx.signAndSubmit(this.signer!); + + // Extract bucket ID from events + let s3BucketId: bigint | null = null; + let layer0BucketId: bigint | null = null; + for (const event of result.events) { + if (event.type === "S3Registry" && event.value.type === "S3BucketCreated") { + s3BucketId = event.value.value.s3_bucket_id; + layer0BucketId = event.value.value.layer0_bucket_id; + break; + } + } + + if (s3BucketId === null) { + throw new Error("S3BucketCreated event not found in transaction result"); + } + + // Return bucket info from the event data + return { + s3BucketId, + name, + layer0BucketId: layer0BucketId ?? 0n, + owner: this.signerAddress!, + createdAt: BigInt(Date.now()), + objectCount: 0n, + totalSize: 0n, + }; + } + + async listBuckets(): Promise { + this.ensureConnected(); + + const bucketIds = await this.api!.query.S3Registry.UserBuckets.getValue( + this.signerAddress! + ); + + if (!bucketIds) return []; + + const buckets: BucketInfo[] = []; + for (const bucketId of bucketIds) { + const bucket = await this.api!.query.S3Registry.S3Buckets.getValue(bucketId); + if (bucket) { + // Handle name - Binary type in polkadot-api + const bucketName = bucket.name.asText(); + + buckets.push({ + s3BucketId: BigInt(bucketId), + name: bucketName, + layer0BucketId: BigInt(bucket.layer0_bucket_id), + owner: bucket.owner, + createdAt: BigInt(bucket.created_at), + objectCount: BigInt(bucket.object_count), + totalSize: BigInt(bucket.total_size), + }); + } + } + return buckets; + } + + async headBucket(name: string): Promise { + this.ensureConnected(); + + const bucketId = await this.api!.query.S3Registry.BucketNameToId.getValue( + Binary.fromText(name) + ); + + if (bucketId === undefined) return null; + + const bucket = await this.api!.query.S3Registry.S3Buckets.getValue(bucketId); + if (!bucket) return null; + + // Handle name - Binary type in polkadot-api + const bucketName = bucket.name.asText(); + + return { + s3BucketId: BigInt(bucketId), + name: bucketName, + layer0BucketId: BigInt(bucket.layer0_bucket_id), + owner: bucket.owner, + createdAt: BigInt(bucket.created_at), + objectCount: BigInt(bucket.object_count), + totalSize: BigInt(bucket.total_size), + }; + } + + async deleteBucket(name: string): Promise { + this.ensureConnected(); + + const bucketId = await this.api!.query.S3Registry.BucketNameToId.getValue( + Binary.fromText(name) + ); + + if (bucketId === undefined) { + throw new Error(`Bucket not found: ${name}`); + } + + await this.api!.tx.S3Registry.delete_s3_bucket({ + s3_bucket_id: bucketId, + }).signAndSubmit(this.signer!); + } + + async putObject( + bucketName: string, + key: string, + data: Uint8Array, + bucketId: bigint, + options?: PutObjectOptions + ): Promise { + this.ensureConnected(); + this.validateObjectKey(key); + + const hash = blake2AsU8a(data); + const cid = this.toHex(hash); + + // Upload to provider + const response = await fetch(`${this.providerUrl}/node`, { + method: "PUT", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + bucket_id: Number(bucketId), + hash: cid, + data: this.toBase64(data), + children: null, + }), + }); + + if (!response.ok) { + throw new Error(`Upload failed: ${response.status} ${await response.text()}`); + } + + // Commit to MMR + await fetch(`${this.providerUrl}/commit`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + bucket_id: Number(bucketId), + data_roots: [cid], + }), + }); + + // Update metadata on-chain + const s3Bucket = await this.headBucket(bucketName); + if (!s3Bucket) { + throw new Error(`S3 bucket not found: ${bucketName}`); + } + + const contentType = options?.contentType || "application/octet-stream"; + const userMetadata: Array<[Binary, Binary]> = []; + if (options?.metadata) { + for (const [k, v] of Object.entries(options.metadata)) { + userMetadata.push([Binary.fromText(k), Binary.fromText(v)]); + } + } + + await this.api!.tx.S3Registry.put_object_metadata({ + s3_bucket_id: s3Bucket.s3BucketId, + key: Binary.fromText(key), + cid: Binary.fromBytes(hash), + size: BigInt(data.length), + content_type: Binary.fromText(contentType), + user_metadata: userMetadata, + }).signAndSubmit(this.signer!); + + return { cid, size: data.length }; + } + + async getObject(bucketId: bigint, cid: string): Promise { + return this.downloadByCid(bucketId, cid); + } + + // --- Provider Health --- + + async checkProviderHealth(): Promise { + try { + const response = await fetch(`${this.providerUrl}/health`); + return response.ok; + } catch { + return false; + } + } + + // --- Helpers --- + + private validateBucketName(name: string): void { + if (name.length < 3 || name.length > 63) { + throw new Error("Bucket name must be 3-63 characters"); + } + if (!/^[a-z0-9]/.test(name)) { + throw new Error("Bucket name must start with lowercase letter or number"); + } + if (!/[a-z0-9]$/.test(name)) { + throw new Error("Bucket name must end with lowercase letter or number"); + } + if (!/^[a-z0-9.-]+$/.test(name)) { + throw new Error("Bucket name can only contain lowercase letters, numbers, hyphens, and dots"); + } + } + + private validateObjectKey(key: string): void { + if (key.length === 0 || key.length > 1024) { + throw new Error("Object key must be 1-1024 characters"); + } + } + + private toHex(bytes: Uint8Array): string { + return ( + "0x" + + Array.from(bytes) + .map((b) => b.toString(16).padStart(2, "0")) + .join("") + ); + } + + private toBase64(bytes: Uint8Array): string { + // Browser-compatible base64 encoding + let binary = ""; + for (let i = 0; i < bytes.length; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary); + } + + private fromBase64(str: string): Uint8Array { + // Browser-compatible base64 decoding + const binary = atob(str); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + return bytes; + } +} + +// Singleton instance +let storageClient: StorageClient | null = null; + +export function getStorageClient(chainWs: string, providerUrl: string): StorageClient { + if (!storageClient || storageClient["chainWs"] !== chainWs || storageClient["providerUrl"] !== providerUrl) { + storageClient = new StorageClient(chainWs, providerUrl); + } + return storageClient; +} diff --git a/user-interfaces/console-ui/src/lib/utils.ts b/user-interfaces/console-ui/src/lib/utils.ts new file mode 100644 index 0000000..776c7a9 --- /dev/null +++ b/user-interfaces/console-ui/src/lib/utils.ts @@ -0,0 +1,24 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +export function formatBytes(bytes: number, decimals = 2): string { + if (bytes === 0) return "0 Bytes"; + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB"]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i]; +} + +export function truncateHash(hash: string, startChars = 6, endChars = 4): string { + if (hash.length <= startChars + endChars) return hash; + return `${hash.slice(0, startChars)}...${hash.slice(-endChars)}`; +} + +export function formatTimestamp(timestamp: number): string { + return new Date(timestamp).toLocaleString(); +} diff --git a/user-interfaces/console-ui/src/main.tsx b/user-interfaces/console-ui/src/main.tsx new file mode 100644 index 0000000..5d076f7 --- /dev/null +++ b/user-interfaces/console-ui/src/main.tsx @@ -0,0 +1,13 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import { BrowserRouter } from "react-router-dom"; +import App from "./App"; +import "./styles/index.css"; + +createRoot(document.getElementById("root")!).render( + + + + + +); diff --git a/user-interfaces/console-ui/src/pages/Accounts.tsx b/user-interfaces/console-ui/src/pages/Accounts.tsx new file mode 100644 index 0000000..7435da1 --- /dev/null +++ b/user-interfaces/console-ui/src/pages/Accounts.tsx @@ -0,0 +1,372 @@ +import { useState } from "react"; +import { + Users, + Plus, + Key, + Copy, + Trash2, + Check, + Loader2, +} from "lucide-react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { toast } from "@/components/ui/toaster"; +import { truncateHash } from "@/lib/utils"; +import { useChain } from "@/hooks/useChain"; +import { useStorage } from "@/hooks/useStorage"; + +interface Account { + name: string; + seed: string; + address: string; + isActive: boolean; +} + +// Pre-configured dev accounts +const DEV_ACCOUNTS: Omit[] = [ + { + name: "Alice", + seed: "//Alice", + address: "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + }, + { + name: "Bob", + seed: "//Bob", + address: "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + }, + { + name: "Charlie", + seed: "//Charlie", + address: "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y", + }, +]; + +export default function Accounts() { + const { connected } = useChain(); + const { setSigner, loading } = useStorage(); + + const [accounts, setAccounts] = useState( + DEV_ACCOUNTS.map((acc) => ({ + ...acc, + isActive: false, + })) + ); + const [customSeed, setCustomSeed] = useState(""); + const [customName, setCustomName] = useState(""); + const [settingAccount, setSettingAccount] = useState(null); + + const copyToClipboard = (text: string, label: string) => { + navigator.clipboard.writeText(text); + toast({ title: "Copied", description: `${label} copied to clipboard` }); + }; + + const handleSetActive = async (account: Account) => { + if (!connected) { + toast({ + title: "Error", + description: "Connect to the network first", + variant: "destructive", + }); + return; + } + + setSettingAccount(account.address); + try { + await setSigner(account.seed); + setAccounts( + accounts.map((a) => ({ + ...a, + isActive: a.address === account.address, + })) + ); + toast({ title: "Success", description: `Active account set to ${account.name}` }); + } catch (err) { + toast({ + title: "Error", + description: err instanceof Error ? err.message : "Failed to set account", + variant: "destructive", + }); + } finally { + setSettingAccount(null); + } + }; + + const handleAddCustomAccount = async () => { + if (!customSeed.trim()) { + toast({ + title: "Error", + description: "Please enter a seed phrase", + variant: "destructive", + }); + return; + } + + // Check if already exists + if (accounts.some((a) => a.seed === customSeed)) { + toast({ + title: "Error", + description: "This account already exists", + variant: "destructive", + }); + return; + } + + try { + // Import keyring to derive address + const { Keyring } = await import("@polkadot/keyring"); + const { cryptoWaitReady } = await import("@polkadot/util-crypto"); + await cryptoWaitReady(); + + const keyring = new Keyring({ type: "sr25519" }); + const account = keyring.addFromUri(customSeed); + + const newAccount: Account = { + name: customName || `Account ${accounts.length + 1}`, + seed: customSeed, + address: account.address, + isActive: false, + }; + + setAccounts([...accounts, newAccount]); + setCustomSeed(""); + setCustomName(""); + toast({ title: "Success", description: `Account "${newAccount.name}" added` }); + } catch (err) { + toast({ + title: "Error", + description: err instanceof Error ? err.message : "Invalid seed phrase", + variant: "destructive", + }); + } + }; + + const handleDeleteAccount = (address: string) => { + // Don't allow deleting dev accounts + if (DEV_ACCOUNTS.some((a) => a.address === address)) { + toast({ + title: "Error", + description: "Cannot delete dev accounts", + variant: "destructive", + }); + return; + } + + setAccounts(accounts.filter((a) => a.address !== address)); + toast({ title: "Success", description: "Account removed" }); + }; + + const activeAccount = accounts.find((a) => a.isActive); + + return ( +
+
+

Accounts

+

+ Manage your signing accounts +

+
+ + {!connected && ( + + +

+ Connect to the network to activate accounts for signing transactions. +

+
+
+ )} + + {/* Active Account */} + {activeAccount && ( + + +
+
+ Active Account +
+ + This account is used for signing transactions + + + +
+
+
+

{activeAccount.name}

+

+ {truncateHash(activeAccount.address, 12, 8)} +

+
+ +
+ +
+
+

Address

+
+ + {activeAccount.address} + + +
+
+
+
+
+ + )} + + {/* Add Custom Account */} + + + + + Add Custom Account + + + Add a custom account using a seed phrase or derivation path + + + +
+
+ + setCustomName(e.target.value)} + /> +
+
+ + setCustomSeed(e.target.value)} + type="password" + /> +
+
+ +
+
+ + {/* All Accounts */} + + + + + Available Accounts ({accounts.length}) + + + Click "Set Active" to use an account for signing + + + +
+ {accounts.map((account) => ( +
+
+
+ {account.name[0].toUpperCase()} +
+
+
+

{account.name}

+ {account.isActive && ( + + Active + + )} + {DEV_ACCOUNTS.some((d) => d.address === account.address) && ( + + Dev + + )} +
+

+ {truncateHash(account.address, 10, 6)} +

+
+
+ +
+ {!account.isActive && connected && ( + + )} + + {!DEV_ACCOUNTS.some((d) => d.address === account.address) && ( + + )} +
+
+ ))} +
+
+
+
+ ); +} diff --git a/user-interfaces/console-ui/src/pages/Buckets.tsx b/user-interfaces/console-ui/src/pages/Buckets.tsx new file mode 100644 index 0000000..a4c01c2 --- /dev/null +++ b/user-interfaces/console-ui/src/pages/Buckets.tsx @@ -0,0 +1,390 @@ +import { useState, useEffect } from "react"; +import { + Archive, + Plus, + File, + RefreshCw, + Trash2, + ChevronRight, + AlertCircle, +} from "lucide-react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { useChain } from "@/hooks/useChain"; +import { useStorage } from "@/hooks/useStorage"; +import { toast } from "@/components/ui/toaster"; +import { formatBytes } from "@/lib/utils"; +import type { BucketInfo } from "@/lib/storage"; + +interface S3Object { + key: string; + size: number; + lastModified: number; + etag: string; + cid: string; +} + +export default function Buckets() { + const { connected } = useChain(); + const { + signerAddress, + buckets: chainBuckets, + loading, + createBucket, + refreshBuckets, + deleteBucket: sdkDeleteBucket, + } = useStorage(); + + const [buckets, setBuckets] = useState([]); + const [newBucketName, setNewBucketName] = useState(""); + const [capacity, setCapacity] = useState("1000000000"); // 1 GB default + const [duration, setDuration] = useState("500"); + const [maxPayment, setMaxPayment] = useState("1000000000000000"); // 1000 tokens + const [creating, setCreating] = useState(false); + const [selectedBucket, setSelectedBucket] = useState(null); + const [objects, setObjects] = useState([]); + const [showAdvanced, setShowAdvanced] = useState(false); + + // Sync chain buckets to local state + useEffect(() => { + if (chainBuckets.length > 0) { + setBuckets(chainBuckets); + } + }, [chainBuckets]); + + // Refresh buckets when signer is set + useEffect(() => { + if (signerAddress && connected) { + refreshBuckets(); + } + }, [signerAddress, connected, refreshBuckets]); + + const validateBucketName = (name: string): boolean => { + if (name.length < 3 || name.length > 63) return false; + if (!/^[a-z0-9]/.test(name)) return false; + if (!/[a-z0-9]$/.test(name)) return false; + if (!/^[a-z0-9.-]+$/.test(name)) return false; + if (/\.\./.test(name)) return false; + return true; + }; + + const handleCreateBucket = async () => { + if (!newBucketName.trim()) { + toast({ title: "Error", description: "Bucket name is required", variant: "destructive" }); + return; + } + + if (!validateBucketName(newBucketName)) { + toast({ + title: "Error", + description: "Invalid bucket name. Must be 3-63 characters, lowercase, and follow S3 naming rules.", + variant: "destructive", + }); + return; + } + + if (!signerAddress) { + toast({ + title: "Error", + description: "Please set a signer in the Accounts page first", + variant: "destructive", + }); + return; + } + + setCreating(true); + try { + const bucket = await createBucket(newBucketName, { + capacity: BigInt(capacity), + duration: parseInt(duration, 10), + maxPayment: BigInt(maxPayment), + }); + + setBuckets([...buckets, bucket]); + setNewBucketName(""); + toast({ title: "Success", description: `Bucket "${newBucketName}" created` }); + } catch (err) { + toast({ + title: "Error", + description: err instanceof Error ? err.message : "Failed to create bucket", + variant: "destructive", + }); + } finally { + setCreating(false); + } + }; + + const handleDeleteBucket = async (bucket: BucketInfo) => { + try { + await sdkDeleteBucket(bucket.name); + setBuckets(buckets.filter((b) => b.s3BucketId !== bucket.s3BucketId)); + if (selectedBucket?.s3BucketId === bucket.s3BucketId) { + setSelectedBucket(null); + setObjects([]); + } + toast({ title: "Success", description: `Bucket "${bucket.name}" deleted` }); + } catch (err) { + toast({ + title: "Error", + description: err instanceof Error ? err.message : "Failed to delete bucket", + variant: "destructive", + }); + } + }; + + const handleSelectBucket = async (bucket: BucketInfo) => { + setSelectedBucket(bucket); + // TODO: Load objects from SDK + setObjects([]); + }; + + if (!connected) { + return ( +
+
+

S3 Buckets

+

Manage your S3-compatible storage buckets

+
+ + + +

+ Connect to the network to manage S3 buckets +

+
+
+
+ ); + } + + if (!signerAddress) { + return ( +
+
+

S3 Buckets

+

Manage your S3-compatible storage buckets

+
+ + + +

+ No signer set +

+

+ Go to the Accounts page to set a signing account first +

+
+
+
+ ); + } + + return ( +
+
+
+

S3 Buckets

+

+ Manage your S3-compatible storage buckets +

+
+ +
+ + {/* Create Bucket */} + + + + + Create New Bucket + + + Create a new S3-compatible bucket. Names must be 3-63 characters, + lowercase, and follow S3 naming rules. + + + +
+ setNewBucketName(e.target.value.toLowerCase())} + className="max-w-sm" + /> + +
+ + + + {showAdvanced && ( +
+
+ + setCapacity(e.target.value)} + placeholder="1000000000" + /> +

+ {formatBytes(parseInt(capacity, 10) || 0)} +

+
+
+ + setDuration(e.target.value)} + placeholder="500" + /> +
+
+ + setMaxPayment(e.target.value)} + placeholder="1000000000000000" + /> +
+
+ )} +
+
+ + {/* Buckets List */} +
+ {buckets.length === 0 ? ( + + + +

No buckets yet

+

+ Create your first S3 bucket to start storing objects +

+
+
+ ) : ( + buckets.map((bucket) => ( + handleSelectBucket(bucket)} + > + +
+ + + {bucket.name} + + +
+
+ +
+
+

Objects

+

{bucket.objectCount.toString()}

+
+
+

Size

+

+ {formatBytes(Number(bucket.totalSize))} +

+
+
+
+

S3 ID: {bucket.s3BucketId.toString()}

+

Layer0 ID: {bucket.layer0BucketId.toString()}

+
+
+
+ )) + )} +
+ + {/* Selected Bucket Objects */} + {selectedBucket && ( + + + + + {selectedBucket.name} + + Objects + + Browse objects in this bucket + + + {objects.length === 0 ? ( +
+ +

This bucket is empty

+

Go to Upload page to add objects

+
+ ) : ( +
+ + + + + + + + + + + {objects.map((obj) => ( + + + + + + + ))} + +
KeySizeLast ModifiedETag
{obj.key} + {formatBytes(obj.size)} + + {new Date(obj.lastModified).toLocaleString()} + + {obj.etag.slice(0, 8)}... +
+
+ )} +
+
+ )} +
+ ); +} diff --git a/user-interfaces/console-ui/src/pages/Dashboard.tsx b/user-interfaces/console-ui/src/pages/Dashboard.tsx new file mode 100644 index 0000000..52ae740 --- /dev/null +++ b/user-interfaces/console-ui/src/pages/Dashboard.tsx @@ -0,0 +1,132 @@ +import { + HardDrive, + Archive, + FileUp, + FileDown, + Activity, + Wifi, + WifiOff, +} from "lucide-react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { useChain } from "@/hooks/useChain"; + +export default function Dashboard() { + const { connected, blockNumber, chainEndpoint, providerEndpoint } = useChain(); + + const stats = [ + { + title: "Drives", + value: "0", + description: "File System drives", + icon: HardDrive, + }, + { + title: "S3 Buckets", + value: "0", + description: "S3-compatible buckets", + icon: Archive, + }, + { + title: "Uploads", + value: "0", + description: "Total files uploaded", + icon: FileUp, + }, + { + title: "Downloads", + value: "0", + description: "Total files downloaded", + icon: FileDown, + }, + ]; + + return ( +
+
+

Dashboard

+

+ Overview of your Web3 Storage usage +

+
+ + {/* Connection Status Card */} + + +
+ {connected ? ( + + ) : ( + + )} + Network Status +
+
+ + {connected ? ( +
+
+

Chain Endpoint

+

{chainEndpoint}

+
+
+

Provider Endpoint

+

{providerEndpoint}

+
+
+

Latest Block

+

#{blockNumber}

+
+
+ ) : ( +

+ Connect to the network to view storage statistics and manage your + files. +

+ )} +
+
+ + {/* Stats Grid */} +
+ {stats.map((stat) => ( + + + {stat.title} + + + +
{stat.value}
+

{stat.description}

+
+
+ ))} +
+ + {/* Recent Activity */} + + +
+ + Recent Activity +
+ Your latest storage operations +
+ +
+ +

No recent activity

+

+ Start by creating a drive or uploading files +

+
+
+
+
+ ); +} diff --git a/user-interfaces/console-ui/src/pages/Download.tsx b/user-interfaces/console-ui/src/pages/Download.tsx new file mode 100644 index 0000000..1ee6350 --- /dev/null +++ b/user-interfaces/console-ui/src/pages/Download.tsx @@ -0,0 +1,386 @@ +import { useState, useEffect } from "react"; +import { + Download as DownloadIcon, + Search, + Loader2, + CheckCircle, + AlertCircle, + Copy, + HardDrive, + Archive, +} from "lucide-react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { useChain } from "@/hooks/useChain"; +import { useStorage } from "@/hooks/useStorage"; +import { toast } from "@/components/ui/toaster"; +import { formatBytes, truncateHash } from "@/lib/utils"; +import type { DriveInfo, BucketInfo } from "@/lib/storage"; + +interface DownloadResult { + cid: string; + size: number; + contentType: string; + data: Uint8Array; +} + +export default function Download() { + const { connected } = useChain(); + const { + signerAddress, + drives, + buckets, + refreshDrives, + refreshBuckets, + downloadFromDrive, + getObject, + } = useStorage(); + + const [cidInput, setCidInput] = useState(""); + const [selectedDrive, setSelectedDrive] = useState(null); + const [selectedBucket, setSelectedBucket] = useState(null); + const [downloadLoading, setDownloadLoading] = useState(false); + const [result, setResult] = useState(null); + const [error, setError] = useState(null); + + // Refresh drives/buckets on mount + useEffect(() => { + if (signerAddress && connected) { + refreshDrives(); + refreshBuckets(); + } + }, [signerAddress, connected, refreshDrives, refreshBuckets]); + + const handleDownloadByCid = async (bucketId: bigint, source: "drive" | "bucket") => { + if (!cidInput.trim()) { + toast({ + title: "Error", + description: "Please enter a CID", + variant: "destructive", + }); + return; + } + + setDownloadLoading(true); + setError(null); + setResult(null); + + try { + let data: Uint8Array; + + if (source === "drive") { + data = await downloadFromDrive(bucketId, cidInput); + } else { + data = await getObject(bucketId, cidInput); + } + + setResult({ + cid: cidInput, + size: data.length, + contentType: "application/octet-stream", + data, + }); + + toast({ title: "Success", description: "File retrieved successfully" }); + } catch (err) { + const message = err instanceof Error ? err.message : "Download failed"; + setError(message); + toast({ + title: "Error", + description: message, + variant: "destructive", + }); + } finally { + setDownloadLoading(false); + } + }; + + const handleDownloadFromDrive = async () => { + if (!selectedDrive) { + toast({ + title: "Error", + description: "Please select a drive", + variant: "destructive", + }); + return; + } + await handleDownloadByCid(selectedDrive.bucketId, "drive"); + }; + + const handleDownloadFromBucket = async () => { + if (!selectedBucket) { + toast({ + title: "Error", + description: "Please select a bucket", + variant: "destructive", + }); + return; + } + await handleDownloadByCid(selectedBucket.layer0BucketId, "bucket"); + }; + + const copyToClipboard = (text: string) => { + navigator.clipboard.writeText(text); + toast({ title: "Copied", description: "CID copied to clipboard" }); + }; + + const saveToDevice = () => { + if (!result) return; + + // Create blob and download + const blob = new Blob([result.data], { type: result.contentType }); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = `download-${result.cid.slice(0, 8)}`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + toast({ title: "Success", description: "File saved to device" }); + }; + + if (!connected) { + return ( +
+
+

Download

+

Download files from storage

+
+ + + +

+ Connect to the network to download files +

+
+
+
+ ); + } + + if (!signerAddress) { + return ( +
+
+

Download

+

Download files from storage

+
+ + + +

No signer set

+

+ Go to the Accounts page to set a signing account first +

+
+
+
+ ); + } + + return ( +
+
+

Download

+

Download files from storage

+
+ + {/* CID Input */} + + + + + Download by CID + + + Enter a content identifier (CID) to download + + + + setCidInput(e.target.value)} + className="font-mono" + /> + + + + {/* Download from Drive */} + + + + + Download from Drive + + + Select a drive and download content by CID + + + +
+ + +
+ {drives.length === 0 && ( +

+ No drives found. Create one in the Drives page. +

+ )} +
+
+ + {/* Download from S3 Bucket */} + + + + + Download from S3 Bucket + + + Select a bucket and download content by CID + + + +
+ + +
+ {buckets.length === 0 && ( +

+ No buckets found. Create one in the Buckets page. +

+ )} +
+
+ + {/* Result */} + {(result || error) && ( + + + + {result ? ( + + ) : ( + + )} + Result + + + + {error ? ( +

{error}

+ ) : result ? ( +
+
+
+
+

CID

+
+

+ {truncateHash(result.cid, 10, 8)} +

+ +
+
+
+

Size

+

{formatBytes(result.size)}

+
+
+

Content Type

+

{result.contentType}

+
+
+
+ + {/* Preview for text files */} + {result.size < 10000 && ( +
+

Preview

+
+                      {new TextDecoder().decode(result.data)}
+                    
+
+ )} + + +
+ ) : null} +
+
+ )} +
+ ); +} diff --git a/user-interfaces/console-ui/src/pages/Drives.tsx b/user-interfaces/console-ui/src/pages/Drives.tsx new file mode 100644 index 0000000..9e56e39 --- /dev/null +++ b/user-interfaces/console-ui/src/pages/Drives.tsx @@ -0,0 +1,349 @@ +import { useState, useEffect } from "react"; +import { + HardDrive, + Plus, + Folder, + File, + RefreshCw, + Trash2, + ChevronRight, + AlertCircle, +} from "lucide-react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { useChain } from "@/hooks/useChain"; +import { useStorage } from "@/hooks/useStorage"; +import { toast } from "@/components/ui/toaster"; +import { formatBytes } from "@/lib/utils"; +import type { DriveInfo } from "@/lib/storage"; + +// Local drive state with additional UI fields +interface LocalDrive extends DriveInfo { + fileCount?: number; + totalSize?: number; +} + +export default function Drives() { + const { connected } = useChain(); + const { + signerAddress, + drives: chainDrives, + loading, + createDrive, + refreshDrives, + deleteDrive: sdkDeleteDrive, + } = useStorage(); + + // Local state for drives (combines chain data with local state) + const [drives, setDrives] = useState([]); + const [newDriveName, setNewDriveName] = useState(""); + const [capacity, setCapacity] = useState("1000000000"); // 1 GB default + const [duration, setDuration] = useState("500"); + const [maxPayment, setMaxPayment] = useState("1000000000000000"); // 1000 tokens + const [creating, setCreating] = useState(false); + const [selectedDrive, setSelectedDrive] = useState(null); + const [showAdvanced, setShowAdvanced] = useState(false); + + // Sync chain drives to local state + useEffect(() => { + if (chainDrives.length > 0) { + setDrives(chainDrives.map(d => ({ + ...d, + fileCount: 0, + totalSize: 0, + }))); + } + }, [chainDrives]); + + // Refresh drives when signer is set + useEffect(() => { + if (signerAddress && connected) { + refreshDrives(); + } + }, [signerAddress, connected, refreshDrives]); + + const handleCreateDrive = async () => { + if (!signerAddress) { + toast({ + title: "Error", + description: "Please set a signer in the Accounts page first", + variant: "destructive", + }); + return; + } + + setCreating(true); + try { + const driveId = await createDrive({ + name: newDriveName || undefined, + capacity: BigInt(capacity), + duration: parseInt(duration, 10), + maxPayment: BigInt(maxPayment), + }); + + // Add to local state immediately + const newDrive: LocalDrive = { + driveId, + owner: signerAddress, + name: newDriveName || null, + bucketId: driveId, // Simulated - would be from chain + rootCid: null, + createdAt: BigInt(Date.now()), + lastCommittedAt: BigInt(Date.now()), + fileCount: 0, + totalSize: 0, + }; + setDrives([...drives, newDrive]); + setNewDriveName(""); + toast({ title: "Success", description: `Drive "${newDriveName || driveId}" created` }); + } catch (err) { + toast({ + title: "Error", + description: err instanceof Error ? err.message : "Failed to create drive", + variant: "destructive", + }); + } finally { + setCreating(false); + } + }; + + const handleDeleteDrive = async (drive: LocalDrive) => { + try { + await sdkDeleteDrive(drive.driveId); + setDrives(drives.filter((d) => d.driveId !== drive.driveId)); + if (selectedDrive?.driveId === drive.driveId) { + setSelectedDrive(null); + } + toast({ title: "Success", description: `Drive "${drive.name || drive.driveId}" deleted` }); + } catch (err) { + toast({ + title: "Error", + description: err instanceof Error ? err.message : "Failed to delete drive", + variant: "destructive", + }); + } + }; + + if (!connected) { + return ( +
+
+

Drives

+

Manage your File System drives

+
+ + + +

+ Connect to the network to manage drives +

+
+
+
+ ); + } + + if (!signerAddress) { + return ( +
+
+

Drives

+

Manage your File System drives

+
+ + + +

+ No signer set +

+

+ Go to the Accounts page to set a signing account first +

+
+
+
+ ); + } + + return ( +
+
+
+

Drives

+

Manage your File System drives

+
+ +
+ + {/* Create Drive */} + + + + + Create New Drive + + + Create a new file system drive for organizing your files + + + +
+ setNewDriveName(e.target.value)} + className="max-w-sm" + /> + +
+ + + + {showAdvanced && ( +
+
+ + setCapacity(e.target.value)} + placeholder="1000000000" + /> +

+ {formatBytes(parseInt(capacity, 10) || 0)} +

+
+
+ + setDuration(e.target.value)} + placeholder="500" + /> +
+
+ + setMaxPayment(e.target.value)} + placeholder="1000000000000000" + /> +
+
+ )} +
+
+ + {/* Drives List */} +
+ {drives.length === 0 ? ( + + + +

No drives yet

+

+ Create your first drive to start organizing files +

+
+
+ ) : ( + drives.map((drive) => ( + setSelectedDrive(drive)} + > + +
+ + + {drive.name || `Drive ${drive.driveId.toString()}`} + + +
+
+ +
+
+

Files

+

{drive.fileCount || 0}

+
+
+

Size

+

+ {formatBytes(drive.totalSize || 0)} +

+
+
+
+

ID: {drive.driveId.toString()}

+

Bucket ID: {drive.bucketId.toString()}

+
+ {drive.rootCid && ( +

+ Root: {drive.rootCid} +

+ )} +
+
+ )) + )} +
+ + {/* Selected Drive Explorer */} + {selectedDrive && ( + + + + + {selectedDrive.name || `Drive ${selectedDrive.driveId.toString()}`} + + / + + Browse files in this drive + + +
+
+ +

This drive is empty

+

Go to Upload page to add files

+
+
+
+
+ )} +
+ ); +} diff --git a/user-interfaces/console-ui/src/pages/Explorer.tsx b/user-interfaces/console-ui/src/pages/Explorer.tsx new file mode 100644 index 0000000..dafa1f5 --- /dev/null +++ b/user-interfaces/console-ui/src/pages/Explorer.tsx @@ -0,0 +1,636 @@ +import { useState, useEffect, useCallback, useRef } from "react"; +import { + Search, + Activity, + Box, + Database, + HardDrive, + Archive, + RefreshCw, + ChevronDown, + ChevronRight, + Filter, + Zap, + Shield, + AlertTriangle, + CheckCircle, + Clock, + User, + Hash, +} from "lucide-react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { useChain } from "@/hooks/useChain"; +import { parachain } from "@polkadot-api/descriptors"; +import { truncateHash } from "@/lib/utils"; + +// Event types we care about +type PalletFilter = "all" | "StorageProvider" | "DriveRegistry" | "S3Registry"; + +interface BlockEvent { + blockNumber: number; + blockHash: string; + timestamp: number; + pallet: string; + eventName: string; + eventData: Record; + extrinsicIndex?: number; +} + +interface BlockInfo { + number: number; + hash: string; + timestamp: number; + eventCount: number; + events: BlockEvent[]; +} + +// Map event types to icons and colors +const eventStyles: Record = { + // StorageProvider events + ProviderRegistered: { icon: User, color: "text-green-500", bg: "bg-green-500/10" }, + ProviderDeregistered: { icon: User, color: "text-red-500", bg: "bg-red-500/10" }, + ProviderStakeAdded: { icon: Database, color: "text-blue-500", bg: "bg-blue-500/10" }, + BucketCreated: { icon: Box, color: "text-purple-500", bg: "bg-purple-500/10" }, + BucketFrozen: { icon: Shield, color: "text-yellow-500", bg: "bg-yellow-500/10" }, + BucketDeleted: { icon: Box, color: "text-red-500", bg: "bg-red-500/10" }, + BucketCheckpointed: { icon: CheckCircle, color: "text-green-500", bg: "bg-green-500/10" }, + AgreementRequested: { icon: Clock, color: "text-blue-500", bg: "bg-blue-500/10" }, + AgreementAccepted: { icon: CheckCircle, color: "text-green-500", bg: "bg-green-500/10" }, + AgreementRejected: { icon: AlertTriangle, color: "text-red-500", bg: "bg-red-500/10" }, + AgreementEnded: { icon: Clock, color: "text-gray-500", bg: "bg-gray-500/10" }, + ChallengeCreated: { icon: AlertTriangle, color: "text-orange-500", bg: "bg-orange-500/10" }, + ChallengeDefended: { icon: Shield, color: "text-green-500", bg: "bg-green-500/10" }, + ChallengeSlashed: { icon: Zap, color: "text-red-500", bg: "bg-red-500/10" }, + ProviderCheckpointSubmitted: { icon: CheckCircle, color: "text-blue-500", bg: "bg-blue-500/10" }, + // DriveRegistry events + DriveCreated: { icon: HardDrive, color: "text-purple-500", bg: "bg-purple-500/10" }, + DriveCreatedOnBucket: { icon: HardDrive, color: "text-purple-500", bg: "bg-purple-500/10" }, + DriveCreatedWithStorage: { icon: HardDrive, color: "text-purple-500", bg: "bg-purple-500/10" }, + DriveDeleted: { icon: HardDrive, color: "text-red-500", bg: "bg-red-500/10" }, + RootCIDUpdated: { icon: Hash, color: "text-blue-500", bg: "bg-blue-500/10" }, + ChangesCommitted: { icon: CheckCircle, color: "text-green-500", bg: "bg-green-500/10" }, + // S3Registry events + S3BucketCreated: { icon: Archive, color: "text-cyan-500", bg: "bg-cyan-500/10" }, + S3BucketDeleted: { icon: Archive, color: "text-red-500", bg: "bg-red-500/10" }, + ObjectPut: { icon: Database, color: "text-blue-500", bg: "bg-blue-500/10" }, + ObjectDeleted: { icon: Database, color: "text-red-500", bg: "bg-red-500/10" }, + ObjectCopied: { icon: Database, color: "text-purple-500", bg: "bg-purple-500/10" }, +}; + +const defaultStyle = { icon: Activity, color: "text-gray-500", bg: "bg-gray-500/10" }; + +export default function Explorer() { + const { client, connected, blockNumber } = useChain(); + const [blocks, setBlocks] = useState([]); + const [events, setEvents] = useState([]); + const [loading, setLoading] = useState(false); + const [palletFilter, setPalletFilter] = useState("all"); + const [searchQuery, setSearchQuery] = useState(""); + const [expandedBlocks, setExpandedBlocks] = useState>(new Set()); + const [autoRefresh, setAutoRefresh] = useState(true); + const [subscriptionActive, setSubscriptionActive] = useState(false); + const subscriptionRef = useRef<{ unsubscribe: () => void } | null>(null); + + // Layer 0 pallets we care about + const layer0Pallets = ["StorageProvider", "DriveRegistry", "S3Registry"]; + + // Parse events from event records + const parseEventRecords = useCallback((eventsAtBlock: unknown[], currentBlockNumber: number, blockHash: string = ""): BlockEvent[] => { + const blockEvents: BlockEvent[] = []; + + for (const eventRecord of eventsAtBlock) { + try { + // Handle the event record structure + const record = eventRecord as { + event?: { type: string; value?: { type?: string; value?: unknown } }; + phase?: { type: string; value?: number }; + }; + + const event = record.event; + const phase = record.phase; + + if (!event) continue; + + const pallet = event.type; + const eventValue = event.value; + const eventName = eventValue?.type || "Unknown"; + const eventData = (eventValue?.value || {}) as Record; + + if (layer0Pallets.includes(pallet)) { + blockEvents.push({ + blockNumber: currentBlockNumber, + blockHash, + timestamp: Date.now(), + pallet, + eventName, + eventData, + extrinsicIndex: phase?.type === "ApplyExtrinsic" + ? phase.value + : undefined, + }); + } + } catch (err) { + console.warn("Error parsing event:", err); + } + } + + return blockEvents; + }, []); + + // Subscribe to finalized events + useEffect(() => { + if (!client || !connected || !autoRefresh) { + if (subscriptionRef.current) { + subscriptionRef.current.unsubscribe(); + subscriptionRef.current = null; + setSubscriptionActive(false); + } + return; + } + + const api = client.getTypedApi(parachain); + + try { + // Subscribe to finalized events + const subscription = api.query.System.Events.watchValue("finalized").subscribe({ + next: (eventsAtBlock) => { + if (!eventsAtBlock || !Array.isArray(eventsAtBlock)) { + console.log("No events in block or invalid format"); + return; + } + + const newEvents = parseEventRecords(eventsAtBlock, blockNumber); + + if (newEvents.length > 0) { + console.log(`Found ${newEvents.length} Layer 0 events in block ${blockNumber}`); + + // Update events list + setEvents(prev => { + const combined = [...newEvents, ...prev]; + // Keep only last 500 events + return combined.slice(0, 500); + }); + + // Update blocks list + setBlocks(prev => { + const newBlock: BlockInfo = { + number: blockNumber, + hash: "", + timestamp: Date.now(), + eventCount: newEvents.length, + events: newEvents, + }; + + // Find existing block or add new one + const existingIdx = prev.findIndex(b => b.number === blockNumber); + if (existingIdx >= 0) { + const updated = [...prev]; + updated[existingIdx] = newBlock; + return updated; + } + + // Add new block and keep only last 50 + return [newBlock, ...prev].slice(0, 50); + }); + } + }, + error: (err) => { + console.error("Event subscription error:", err); + setSubscriptionActive(false); + }, + }); + + subscriptionRef.current = subscription; + setSubscriptionActive(true); + console.log("Event subscription active"); + } catch (err) { + console.error("Failed to subscribe to events:", err); + } + + return () => { + if (subscriptionRef.current) { + subscriptionRef.current.unsubscribe(); + subscriptionRef.current = null; + setSubscriptionActive(false); + } + }; + }, [client, connected, autoRefresh, blockNumber, parseEventRecords]); + + // Manual refresh - fetch current events + const loadCurrentEvents = useCallback(async () => { + if (!client || !connected || loading) return; + + setLoading(true); + try { + const api = client.getTypedApi(parachain); + + // Get current events + const eventsAtBlock = await api.query.System.Events.getValue(); + + if (eventsAtBlock && Array.isArray(eventsAtBlock)) { + const newEvents = parseEventRecords(eventsAtBlock, blockNumber); + console.log(`Manual refresh: Found ${newEvents.length} Layer 0 events`); + + if (newEvents.length > 0) { + setEvents(prev => { + // Add new events, avoiding duplicates by checking block number + const combined = [...newEvents, ...prev.filter(e => e.blockNumber !== blockNumber)]; + return combined.slice(0, 500); + }); + + setBlocks(prev => { + const newBlock: BlockInfo = { + number: blockNumber, + hash: "", + timestamp: Date.now(), + eventCount: newEvents.length, + events: newEvents, + }; + + const existingIdx = prev.findIndex(b => b.number === blockNumber); + if (existingIdx >= 0) { + const updated = [...prev]; + updated[existingIdx] = newBlock; + return updated; + } + + return [newBlock, ...prev].slice(0, 50); + }); + } + } + } catch (err) { + console.error("Error loading events:", err); + } finally { + setLoading(false); + } + }, [client, connected, blockNumber, loading, parseEventRecords]); + + const toggleBlockExpand = (blockNum: number) => { + setExpandedBlocks(prev => { + const newSet = new Set(prev); + if (newSet.has(blockNum)) { + newSet.delete(blockNum); + } else { + newSet.add(blockNum); + } + return newSet; + }); + }; + + // Filter events + const filteredEvents = events.filter(event => { + const matchesPallet = palletFilter === "all" || event.pallet === palletFilter; + const matchesSearch = searchQuery === "" || + event.eventName.toLowerCase().includes(searchQuery.toLowerCase()) || + event.pallet.toLowerCase().includes(searchQuery.toLowerCase()) || + JSON.stringify(event.eventData).toLowerCase().includes(searchQuery.toLowerCase()); + return matchesPallet && matchesSearch; + }); + + // Format event data for display + const formatEventValue = (value: unknown): string => { + if (value === null || value === undefined) return "-"; + if (typeof value === "bigint") return value.toString(); + if (typeof value === "object") { + const obj = value as Record; + if ("asHex" in obj && typeof obj.asHex === "function") { + return (obj.asHex as () => string)(); + } + if ("asText" in obj && typeof obj.asText === "function") { + return (obj.asText as () => string)(); + } + if ("asBytes" in obj && typeof obj.asBytes === "function") { + const bytes = (obj.asBytes as () => Uint8Array)(); + return "0x" + Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join(""); + } + return JSON.stringify(value); + } + return String(value); + }; + + if (!connected) { + return ( +
+
+

Block Explorer

+

+ View Layer 0 blockchain events and transactions +

+
+ + + +

+ Connect to the network to view blockchain activity +

+
+
+
+ ); + } + + return ( +
+
+
+

Block Explorer

+

+ View Layer 0 blockchain events and transactions +

+
+
+
+ + Block #{blockNumber} +
+ {subscriptionActive && ( + + Live + + )} + + +
+
+ + {/* Stats Cards */} +
+ + + + Total Events + + + +
{events.length}
+
+
+ + + + StorageProvider + + + +
+ {events.filter(e => e.pallet === "StorageProvider").length} +
+
+
+ + + + DriveRegistry + + + +
+ {events.filter(e => e.pallet === "DriveRegistry").length} +
+
+
+ + + + S3Registry + + + +
+ {events.filter(e => e.pallet === "S3Registry").length} +
+
+
+
+ + {/* Info message when no events */} + {events.length === 0 && ( + + +
+ +

Waiting for Layer 0 events...

+

+ Events from StorageProvider, DriveRegistry, and S3Registry pallets will appear here. +

+

+ Try creating a drive, bucket, or uploading a file to see events. +

+
+
+
+ )} + + {/* Filters */} + {events.length > 0 && ( + + +
+ + + Events + +
+
+ {(["all", "StorageProvider", "DriveRegistry", "S3Registry"] as PalletFilter[]).map( + (filter) => ( + + ) + )} +
+
+ + setSearchQuery(e.target.value)} + className="pl-8 w-64" + /> +
+
+
+
+ + {filteredEvents.length === 0 ? ( +
+ +

No events found

+

+ {searchQuery + ? "Try adjusting your search" + : "Waiting for new blockchain activity..."} +

+
+ ) : ( +
+ {filteredEvents.slice(0, 50).map((event, idx) => { + const style = eventStyles[event.eventName] || defaultStyle; + const Icon = style.icon; + + return ( +
+
+
+
+ +
+
+
+ {event.eventName} + + {event.pallet} + +
+
+ {Object.entries(event.eventData).map(([key, value]) => ( +
+ {key}: + + {truncateHash(formatEventValue(value), 20, 8)} + +
+ ))} +
+
+
+
+
+ + #{event.blockNumber} +
+ {event.extrinsicIndex !== undefined && ( +
Extrinsic #{event.extrinsicIndex}
+ )} +
+
+
+ ); + })} +
+ )} +
+
+ )} + + {/* Recent Blocks */} + {blocks.length > 0 && ( + + + + + Recent Blocks with Events + + + {blocks.length} blocks with Layer 0 events + + + +
+ {blocks.map((block) => ( +
+ + + {expandedBlocks.has(block.number) && block.events.length > 0 && ( +
+
+ {block.events.map((event, idx) => { + const style = eventStyles[event.eventName] || defaultStyle; + const Icon = style.icon; + + return ( +
+ + {event.eventName} + + {event.pallet} + +
+ ); + })} +
+
+ )} + + {expandedBlocks.has(block.number) && block.events.length === 0 && ( +
+ No Layer 0 events in this block +
+ )} +
+ ))} +
+
+
+ )} +
+ ); +} diff --git a/user-interfaces/console-ui/src/pages/Upload.tsx b/user-interfaces/console-ui/src/pages/Upload.tsx new file mode 100644 index 0000000..1937e1f --- /dev/null +++ b/user-interfaces/console-ui/src/pages/Upload.tsx @@ -0,0 +1,468 @@ +import { useState, useCallback, useEffect } from "react"; +import { + Upload as UploadIcon, + File, + X, + CheckCircle, + AlertCircle, + Loader2, + HardDrive, + Archive, +} from "lucide-react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { useChain } from "@/hooks/useChain"; +import { useStorage } from "@/hooks/useStorage"; +import { toast } from "@/components/ui/toaster"; +import { formatBytes } from "@/lib/utils"; +import type { DriveInfo, BucketInfo } from "@/lib/storage"; + +type UploadTarget = "drive" | "bucket"; + +interface UploadFile { + id: string; + file: File; + progress: number; + status: "pending" | "uploading" | "completed" | "error"; + cid?: string; + error?: string; +} + +export default function Upload() { + const { connected } = useChain(); + const { + signerAddress, + drives, + buckets, + loading, + refreshDrives, + refreshBuckets, + uploadToDrive, + putObject, + } = useStorage(); + + const [uploadTarget, setUploadTarget] = useState("drive"); + const [selectedDrive, setSelectedDrive] = useState(null); + const [selectedBucket, setSelectedBucket] = useState(null); + const [targetPath, setTargetPath] = useState("/"); + const [files, setFiles] = useState([]); + const [uploading, setUploading] = useState(false); + + // Refresh drives/buckets on mount + useEffect(() => { + if (signerAddress && connected) { + refreshDrives(); + refreshBuckets(); + } + }, [signerAddress, connected, refreshDrives, refreshBuckets]); + + const handleDrop = useCallback((e: React.DragEvent) => { + e.preventDefault(); + const droppedFiles = Array.from(e.dataTransfer.files); + addFiles(droppedFiles); + }, []); + + const handleFileSelect = (e: React.ChangeEvent) => { + if (e.target.files) { + addFiles(Array.from(e.target.files)); + } + }; + + const addFiles = (newFiles: File[]) => { + const uploadFiles: UploadFile[] = newFiles.map((file) => ({ + id: `${file.name}-${Date.now()}-${Math.random()}`, + file, + progress: 0, + status: "pending", + })); + setFiles((prev) => [...prev, ...uploadFiles]); + }; + + const removeFile = (id: string) => { + setFiles((prev) => prev.filter((f) => f.id !== id)); + }; + + const readFileAsUint8Array = (file: File): Promise => { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => { + if (reader.result instanceof ArrayBuffer) { + resolve(new Uint8Array(reader.result)); + } else { + reject(new Error("Failed to read file")); + } + }; + reader.onerror = () => reject(reader.error); + reader.readAsArrayBuffer(file); + }); + }; + + const handleUpload = async () => { + if (uploadTarget === "drive" && !selectedDrive) { + toast({ + title: "Error", + description: "Please select a drive", + variant: "destructive", + }); + return; + } + + if (uploadTarget === "bucket" && !selectedBucket) { + toast({ + title: "Error", + description: "Please select a bucket", + variant: "destructive", + }); + return; + } + + if (files.length === 0) { + toast({ + title: "Error", + description: "Please select files to upload", + variant: "destructive", + }); + return; + } + + setUploading(true); + + for (const uploadFile of files) { + if (uploadFile.status !== "pending") continue; + + setFiles((prev) => + prev.map((f) => + f.id === uploadFile.id ? { ...f, status: "uploading" as const, progress: 10 } : f + ) + ); + + try { + // Read file data + const data = await readFileAsUint8Array(uploadFile.file); + + setFiles((prev) => + prev.map((f) => (f.id === uploadFile.id ? { ...f, progress: 30 } : f)) + ); + + let result: { cid: string; size: number } | undefined; + + if (uploadTarget === "drive" && selectedDrive) { + // Upload to drive + const path = targetPath.endsWith("/") + ? `${targetPath}${uploadFile.file.name}` + : `${targetPath}/${uploadFile.file.name}`; + + result = await uploadToDrive( + selectedDrive.driveId, + selectedDrive.bucketId, + path, + data + ); + } else if (uploadTarget === "bucket" && selectedBucket) { + // Upload to S3 bucket + const key = targetPath.startsWith("/") + ? `${targetPath.slice(1)}${uploadFile.file.name}` + : `${targetPath}${uploadFile.file.name}`; + + result = await putObject( + selectedBucket.name, + key, + data, + selectedBucket.layer0BucketId, + { contentType: uploadFile.file.type || "application/octet-stream" } + ); + } + + setFiles((prev) => + prev.map((f) => + f.id === uploadFile.id + ? { ...f, status: "completed" as const, progress: 100, cid: result?.cid } + : f + ) + ); + } catch (err) { + setFiles((prev) => + prev.map((f) => + f.id === uploadFile.id + ? { + ...f, + status: "error" as const, + error: err instanceof Error ? err.message : "Upload failed", + } + : f + ) + ); + } + } + + setUploading(false); + + const successCount = files.filter(f => f.status === "completed" || files.find(uf => uf.id === f.id && uf.status === "pending")).length; + if (successCount > 0) { + toast({ title: "Success", description: "Files uploaded successfully" }); + } + }; + + if (!connected) { + return ( +
+
+

Upload

+

Upload files to storage

+
+ + + +

+ Connect to the network to upload files +

+
+
+
+ ); + } + + if (!signerAddress) { + return ( +
+
+

Upload

+

Upload files to storage

+
+ + + +

No signer set

+

+ Go to the Accounts page to set a signing account first +

+
+
+
+ ); + } + + return ( +
+
+

Upload

+

Upload files to storage

+
+ + {/* Upload Target */} + + + Upload Destination + + Choose where to upload your files + + + +
+ + +
+ +
+
+ + {uploadTarget === "drive" ? ( + + ) : ( + + )} + {uploadTarget === "drive" && drives.length === 0 && ( +

+ No drives found. Create one in the Drives page. +

+ )} + {uploadTarget === "bucket" && buckets.length === 0 && ( +

+ No buckets found. Create one in the Buckets page. +

+ )} +
+
+ + setTargetPath(e.target.value)} + /> +
+
+
+
+ + {/* Drop Zone */} + + + Select Files + + Drag and drop files or click to select + + + +
e.preventDefault()} + onDrop={handleDrop} + > + +

Drag and drop files here

+

or

+ +
+
+
+ + {/* File List */} + {files.length > 0 && ( + + +
+ Files ({files.length}) + +
+
+ +
+ {files.map((uploadFile) => ( +
+ +
+

{uploadFile.file.name}

+

+ {formatBytes(uploadFile.file.size)} +

+ {uploadFile.status === "uploading" && ( +
+
+
+ )} + {uploadFile.cid && ( +

+ CID: {uploadFile.cid} +

+ )} + {uploadFile.error && ( +

+ {uploadFile.error} +

+ )} +
+
+ {uploadFile.status === "completed" && ( + + )} + {uploadFile.status === "error" && ( + + )} + {uploadFile.status === "uploading" && ( + + )} + {uploadFile.status === "pending" && ( + + )} +
+
+ ))} +
+ + + )} +
+ ); +} diff --git a/user-interfaces/console-ui/src/styles/index.css b/user-interfaces/console-ui/src/styles/index.css new file mode 100644 index 0000000..5bcd83f --- /dev/null +++ b/user-interfaces/console-ui/src/styles/index.css @@ -0,0 +1,34 @@ +@import "tailwindcss"; + +@theme { + --color-background: #0a0a0a; + --color-foreground: #fafafa; + --color-card: #171717; + --color-card-foreground: #fafafa; + --color-popover: #171717; + --color-popover-foreground: #fafafa; + --color-primary: #e11d48; + --color-primary-foreground: #fafafa; + --color-secondary: #262626; + --color-secondary-foreground: #fafafa; + --color-muted: #262626; + --color-muted-foreground: #a1a1aa; + --color-accent: #262626; + --color-accent-foreground: #fafafa; + --color-destructive: #dc2626; + --color-destructive-foreground: #fafafa; + --color-border: #27272a; + --color-input: #27272a; + --color-ring: #e11d48; + --radius: 0.5rem; +} + +body { + @apply bg-background text-foreground; + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, sans-serif; +} + +* { + @apply border-border; +} diff --git a/user-interfaces/console-ui/src/vite-env.d.ts b/user-interfaces/console-ui/src/vite-env.d.ts new file mode 100644 index 0000000..a8e86d8 --- /dev/null +++ b/user-interfaces/console-ui/src/vite-env.d.ts @@ -0,0 +1,6 @@ +/// + +declare module "*.css" { + const content: string; + export default content; +} diff --git a/user-interfaces/console-ui/tsconfig.json b/user-interfaces/console-ui/tsconfig.json new file mode 100644 index 0000000..66eca84 --- /dev/null +++ b/user-interfaces/console-ui/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"] +} diff --git a/user-interfaces/console-ui/vite.config.ts b/user-interfaces/console-ui/vite.config.ts new file mode 100644 index 0000000..90dac2e --- /dev/null +++ b/user-interfaces/console-ui/vite.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import tailwindcss from "@tailwindcss/vite"; +import path from "path"; + +export default defineConfig({ + plugins: [react(), tailwindcss()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}); diff --git a/user-interfaces/provider/dist/assets/index-3JPK18r1.js b/user-interfaces/provider/dist/assets/index-3JPK18r1.js new file mode 100644 index 0000000..11cb027 --- /dev/null +++ b/user-interfaces/provider/dist/assets/index-3JPK18r1.js @@ -0,0 +1,203 @@ +var NZ=Object.defineProperty;var VC=e=>{throw TypeError(e)};var VZ=(e,t,n)=>t in e?NZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var F=(e,t,n)=>VZ(e,typeof t!="symbol"?t+"":t,n),G9=(e,t,n)=>t.has(e)||VC("Cannot "+n);var V=(e,t,n)=>(G9(e,t,"read from private field"),n?n.call(e):t.get(e)),ee=(e,t,n)=>t.has(e)?VC("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),ae=(e,t,n,r)=>(G9(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),We=(e,t,n)=>(G9(e,t,"access private method"),n);var K9=(e,t,n,r)=>({set _(a){ae(e,t,a,n)},get _(){return V(e,t,r)}});function MZ(e,t){for(var n=0;nr[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(a){if(a.ep)return;a.ep=!0;const s=n(a);fetch(a.href,s)}})();function $7(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function BZ(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if(typeof t=="function"){var n=function r(){return this instanceof r?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}),n}var _9={exports:{}},Jp={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var MC;function OZ(){if(MC)return Jp;MC=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(r,a,s){var o=null;if(s!==void 0&&(o=""+s),a.key!==void 0&&(o=""+a.key),"key"in a){s={};for(var l in a)l!=="key"&&(s[l]=a[l])}else s=a;return a=s.ref,{$$typeof:e,type:r,key:o,ref:a!==void 0?a:null,props:s}}return Jp.Fragment=t,Jp.jsx=n,Jp.jsxs=n,Jp}var BC;function RZ(){return BC||(BC=1,_9.exports=OZ()),_9.exports}var E=RZ(),Y9={exports:{}},Je={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var OC;function IZ(){if(OC)return Je;OC=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),o=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),m=Symbol.for("react.activity"),b=Symbol.iterator;function y(B){return B===null||typeof B!="object"?null:(B=b&&B[b]||B["@@iterator"],typeof B=="function"?B:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,T={};function N(B,k,L){this.props=B,this.context=k,this.refs=T,this.updater=L||w}N.prototype.isReactComponent={},N.prototype.setState=function(B,k){if(typeof B!="object"&&typeof B!="function"&&B!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,B,k,"setState")},N.prototype.forceUpdate=function(B){this.updater.enqueueForceUpdate(this,B,"forceUpdate")};function R(){}R.prototype=N.prototype;function M(B,k,L){this.props=B,this.context=k,this.refs=T,this.updater=L||w}var j=M.prototype=new R;j.constructor=M,S(j,N.prototype),j.isPureReactComponent=!0;var X=Array.isArray;function _(){}var G={H:null,A:null,T:null,S:null},Z=Object.prototype.hasOwnProperty;function U(B,k,L){var se=L.ref;return{$$typeof:e,type:B,key:k,ref:se!==void 0?se:null,props:L}}function K(B,k){return U(B.type,k,B.props)}function Y(B){return typeof B=="object"&&B!==null&&B.$$typeof===e}function W(B){var k={"=":"=0",":":"=2"};return"$"+B.replace(/[=:]/g,function(L){return k[L]})}var O=/\/+/g;function x(B,k){return typeof B=="object"&&B!==null&&B.key!=null?W(""+B.key):k.toString(36)}function A(B){switch(B.status){case"fulfilled":return B.value;case"rejected":throw B.reason;default:switch(typeof B.status=="string"?B.then(_,_):(B.status="pending",B.then(function(k){B.status==="pending"&&(B.status="fulfilled",B.value=k)},function(k){B.status==="pending"&&(B.status="rejected",B.reason=k)})),B.status){case"fulfilled":return B.value;case"rejected":throw B.reason}}throw B}function C(B,k,L,se,ce){var pe=typeof B;(pe==="undefined"||pe==="boolean")&&(B=null);var Ae=!1;if(B===null)Ae=!0;else switch(pe){case"bigint":case"string":case"number":Ae=!0;break;case"object":switch(B.$$typeof){case e:case t:Ae=!0;break;case p:return Ae=B._init,C(Ae(B._payload),k,L,se,ce)}}if(Ae)return ce=ce(B),Ae=se===""?"."+x(B,0):se,X(ce)?(L="",Ae!=null&&(L=Ae.replace(O,"$&/")+"/"),C(ce,k,L,"",function(Ye){return Ye})):ce!=null&&(Y(ce)&&(ce=K(ce,L+(ce.key==null||B&&B.key===ce.key?"":(""+ce.key).replace(O,"$&/")+"/")+Ae)),k.push(ce)),1;Ae=0;var Me=se===""?".":se+":";if(X(B))for(var Se=0;Se>>1,q=C[z];if(0>>1;za(L,P))sea(ce,L)?(C[z]=ce,C[se]=P,z=se):(C[z]=L,C[k]=P,z=k);else if(sea(ce,P))C[z]=ce,C[se]=P,z=se;else break e}}return H}function a(C,H){var P=C.sortIndex-H.sortIndex;return P!==0?P:C.id-H.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var s=performance;e.unstable_now=function(){return s.now()}}else{var o=Date,l=o.now();e.unstable_now=function(){return o.now()-l}}var u=[],d=[],p=1,m=null,b=3,y=!1,w=!1,S=!1,T=!1,N=typeof setTimeout=="function"?setTimeout:null,R=typeof clearTimeout=="function"?clearTimeout:null,M=typeof setImmediate<"u"?setImmediate:null;function j(C){for(var H=n(d);H!==null;){if(H.callback===null)r(d);else if(H.startTime<=C)r(d),H.sortIndex=H.expirationTime,t(u,H);else break;H=n(d)}}function X(C){if(S=!1,j(C),!w)if(n(u)!==null)w=!0,_||(_=!0,W());else{var H=n(d);H!==null&&A(X,H.startTime-C)}}var _=!1,G=-1,Z=5,U=-1;function K(){return T?!0:!(e.unstable_now()-UC&&K());){var z=m.callback;if(typeof z=="function"){m.callback=null,b=m.priorityLevel;var q=z(m.expirationTime<=C);if(C=e.unstable_now(),typeof q=="function"){m.callback=q,j(C),H=!0;break t}m===n(u)&&r(u),j(C)}else r(u);m=n(u)}if(m!==null)H=!0;else{var B=n(d);B!==null&&A(X,B.startTime-C),H=!1}}break e}finally{m=null,b=P,y=!1}H=void 0}}finally{H?W():_=!1}}}var W;if(typeof M=="function")W=function(){M(Y)};else if(typeof MessageChannel<"u"){var O=new MessageChannel,x=O.port2;O.port1.onmessage=Y,W=function(){x.postMessage(null)}}else W=function(){N(Y,0)};function A(C,H){G=N(function(){C(e.unstable_now())},H)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(C){C.callback=null},e.unstable_forceFrameRate=function(C){0>C||125z?(C.sortIndex=P,t(d,C),n(u)===null&&C===n(d)&&(S?(R(G),G=-1):S=!0,A(X,P-z))):(C.sortIndex=q,t(u,C),w||y||(w=!0,_||(_=!0,W()))),C},e.unstable_shouldYield=K,e.unstable_wrapCallback=function(C){var H=b;return function(){var P=b;b=H;try{return C.apply(this,arguments)}finally{b=P}}}})($9)),$9}var HC;function UZ(){return HC||(HC=1,Q9.exports=PZ()),Q9.exports}var e4={exports:{}},Dr={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var PC;function jZ(){if(PC)return Dr;PC=1;var e=N3();function t(u){var d="https://react.dev/errors/"+u;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),e4.exports=jZ(),e4.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var jC;function zZ(){if(jC)return Qp;jC=1;var e=UZ(),t=N3(),n=LZ();function r(i){var c="https://react.dev/errors/"+i;if(1q||(i.current=z[q],z[q]=null,q--)}function L(i,c){q++,z[q]=i.current,i.current=c}var se=B(null),ce=B(null),pe=B(null),Ae=B(null);function Me(i,c){switch(L(pe,c),L(ce,i),L(se,null),c.nodeType){case 9:case 11:i=(i=c.documentElement)&&(i=i.namespaceURI)?Qk(i):0;break;default:if(i=c.tagName,c=c.namespaceURI)c=Qk(c),i=$k(c,i);else switch(i){case"svg":i=1;break;case"math":i=2;break;default:i=0}}k(se),L(se,i)}function Se(){k(se),k(ce),k(pe)}function Ye(i){i.memoizedState!==null&&L(Ae,i);var c=se.current,f=$k(c,i.type);c!==f&&(L(ce,i),L(se,f))}function st(i){ce.current===i&&(k(se),k(ce)),Ae.current===i&&(k(Ae),Gp._currentValue=P)}var xe,Ve;function Ne(i){if(xe===void 0)try{throw Error()}catch(f){var c=f.stack.trim().match(/\n( *(at )?)/);xe=c&&c[1]||"",Ve=-1)":-1g||J[h]!==le[g]){var me=` +`+J[h].replace(" at new "," at ");return i.displayName&&me.includes("")&&(me=me.replace("",i.displayName)),me}while(1<=h&&0<=g);break}}}finally{je=!1,Error.prepareStackTrace=f}return(f=i?i.displayName||i.name:"")?Ne(f):""}function Tt(i,c){switch(i.tag){case 26:case 27:case 5:return Ne(i.type);case 16:return Ne("Lazy");case 13:return i.child!==c&&c!==null?Ne("Suspense Fallback"):Ne("Suspense");case 19:return Ne("SuspenseList");case 0:case 15:return cn(i.type,!1);case 11:return cn(i.type.render,!1);case 1:return cn(i.type,!0);case 31:return Ne("Activity");default:return""}}function gt(i){try{var c="",f=null;do c+=Tt(i,f),f=i,i=i.return;while(i);return c}catch(h){return` +Error generating stack: `+h.message+` +`+h.stack}}var ar=Object.prototype.hasOwnProperty,Ft=e.unstable_scheduleCallback,ln=e.unstable_cancelCallback,i2=e.unstable_shouldYield,kn=e.unstable_requestPaint,bt=e.unstable_now,o2=e.unstable_getCurrentPriorityLevel,mn=e.unstable_ImmediatePriority,bn=e.unstable_UserBlockingPriority,Vu=e.unstable_NormalPriority,Cn=e.unstable_LowPriority,yn=e.unstable_IdlePriority,c2=e.log,Nn=e.unstable_setDisableYieldValue,Gt=null,zr=null;function Nt(i){if(typeof c2=="function"&&Nn(i),zr&&typeof zr.setStrictMode=="function")try{zr.setStrictMode(Gt,i)}catch{}}var yt=Math.clz32?Math.clz32:Mn,l2=Math.log,Vn=Math.LN2;function Mn(i){return i>>>=0,i===0?32:31-(l2(i)/Vn|0)|0}var Mu=256,$t=262144,en=4194304;function gi(i){var c=i&42;if(c!==0)return c;switch(i&-i){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return i&261888;case 262144:case 524288:case 1048576:case 2097152:return i&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return i&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return i}}function tn(i,c,f){var h=i.pendingLanes;if(h===0)return 0;var g=0,v=i.suspendedLanes,I=i.pingedLanes;i=i.warmLanes;var D=h&134217727;return D!==0?(h=D&~v,h!==0?g=gi(h):(I&=D,I!==0?g=gi(I):f||(f=D&~i,f!==0&&(g=gi(f))))):(D=h&~v,D!==0?g=gi(D):I!==0?g=gi(I):f||(f=h&~i,f!==0&&(g=gi(f)))),g===0?0:c!==0&&c!==g&&(c&v)===0&&(v=g&-g,f=c&-c,v>=f||v===32&&(f&4194048)!==0)?c:g}function Kt(i,c){return(i.pendingLanes&~(i.suspendedLanes&~i.pingedLanes)&c)===0}function u2(i,c){switch(i){case 1:case 2:case 4:case 8:case 64:return c+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return c+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function gn(){var i=en;return en<<=1,(en&62914560)===0&&(en=4194304),i}function un(i){for(var c=[],f=0;31>f;f++)c.push(i);return c}function Pc(i,c){i.pendingLanes|=c,c!==268435456&&(i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0)}function Bn(i,c,f,h,g,v){var I=i.pendingLanes;i.pendingLanes=f,i.suspendedLanes=0,i.pingedLanes=0,i.warmLanes=0,i.expiredLanes&=f,i.entangledLanes&=f,i.errorRecoveryDisabledLanes&=f,i.shellSuspendCounter=0;var D=i.entanglements,J=i.expirationTimes,le=i.hiddenUpdates;for(f=I&~f;0"u")return null;try{return i.activeElement||i.body}catch{return i.body}}var SF=/[\n"\\]/g;function ds(i){return i.replace(SF,function(c){return"\\"+c.charCodeAt(0).toString(16)+" "})}function D5(i,c,f,h,g,v,I,D){i.name="",I!=null&&typeof I!="function"&&typeof I!="symbol"&&typeof I!="boolean"?i.type=I:i.removeAttribute("type"),c!=null?I==="number"?(c===0&&i.value===""||i.value!=c)&&(i.value=""+fs(c)):i.value!==""+fs(c)&&(i.value=""+fs(c)):I!=="submit"&&I!=="reset"||i.removeAttribute("value"),c!=null?q5(i,I,fs(c)):f!=null?q5(i,I,fs(f)):h!=null&&i.removeAttribute("value"),g==null&&v!=null&&(i.defaultChecked=!!v),g!=null&&(i.checked=g&&typeof g!="function"&&typeof g!="symbol"),D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"?i.name=""+fs(D):i.removeAttribute("name")}function ZE(i,c,f,h,g,v,I,D){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(i.type=v),c!=null||f!=null){if(!(v!=="submit"&&v!=="reset"||c!=null)){z5(i);return}f=f!=null?""+fs(f):"",c=c!=null?""+fs(c):f,D||c===i.value||(i.value=c),i.defaultValue=c}h=h??g,h=typeof h!="function"&&typeof h!="symbol"&&!!h,i.checked=D?i.checked:!!h,i.defaultChecked=!!h,I!=null&&typeof I!="function"&&typeof I!="symbol"&&typeof I!="boolean"&&(i.name=I),z5(i)}function q5(i,c,f){c==="number"&&f2(i.ownerDocument)===i||i.defaultValue===""+f||(i.defaultValue=""+f)}function Ad(i,c,f,h){if(i=i.options,c){c={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),G5=!1;if(wo)try{var fp={};Object.defineProperty(fp,"passive",{get:function(){G5=!0}}),window.addEventListener("test",fp,fp),window.removeEventListener("test",fp,fp)}catch{G5=!1}var Lc=null,K5=null,h2=null;function $E(){if(h2)return h2;var i,c=K5,f=c.length,h,g="value"in Lc?Lc.value:Lc.textContent,v=g.length;for(i=0;i=pp),sA=" ",iA=!1;function oA(i,c){switch(i){case"keyup":return YF.indexOf(c.keyCode)!==-1;case"keydown":return c.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function cA(i){return i=i.detail,typeof i=="object"&&"data"in i?i.data:null}var Nd=!1;function QF(i,c){switch(i){case"compositionend":return cA(c);case"keypress":return c.which!==32?null:(iA=!0,sA);case"textInput":return i=c.data,i===sA&&iA?null:i;default:return null}}function $F(i,c){if(Nd)return i==="compositionend"||!$5&&oA(i,c)?(i=$E(),h2=K5=Lc=null,Nd=!1,i):null;switch(i){case"paste":return null;case"keypress":if(!(c.ctrlKey||c.altKey||c.metaKey)||c.ctrlKey&&c.altKey){if(c.char&&1=c)return{node:f,offset:c-i};i=h}e:{for(;f;){if(f.nextSibling){f=f.nextSibling;break e}f=f.parentNode}f=void 0}f=bA(f)}}function gA(i,c){return i&&c?i===c?!0:i&&i.nodeType===3?!1:c&&c.nodeType===3?gA(i,c.parentNode):"contains"in i?i.contains(c):i.compareDocumentPosition?!!(i.compareDocumentPosition(c)&16):!1:!1}function xA(i){i=i!=null&&i.ownerDocument!=null&&i.ownerDocument.defaultView!=null?i.ownerDocument.defaultView:window;for(var c=f2(i.document);c instanceof i.HTMLIFrameElement;){try{var f=typeof c.contentWindow.location.href=="string"}catch{f=!1}if(f)i=c.contentWindow;else break;c=f2(i.document)}return c}function n8(i){var c=i&&i.nodeName&&i.nodeName.toLowerCase();return c&&(c==="input"&&(i.type==="text"||i.type==="search"||i.type==="tel"||i.type==="url"||i.type==="password")||c==="textarea"||i.contentEditable==="true")}var oW=wo&&"documentMode"in document&&11>=document.documentMode,Vd=null,r8=null,gp=null,a8=!1;function wA(i,c,f){var h=f.window===f?f.document:f.nodeType===9?f:f.ownerDocument;a8||Vd==null||Vd!==f2(h)||(h=Vd,"selectionStart"in h&&n8(h)?h={start:h.selectionStart,end:h.selectionEnd}:(h=(h.ownerDocument&&h.ownerDocument.defaultView||window).getSelection(),h={anchorNode:h.anchorNode,anchorOffset:h.anchorOffset,focusNode:h.focusNode,focusOffset:h.focusOffset}),gp&&yp(gp,h)||(gp=h,h=iy(r8,"onSelect"),0>=I,g-=I,Ei=1<<32-yt(c)+g|f<$e?(lt=Ue,Ue=null):lt=Ue.sibling;var St=ue(ne,Ue,oe[$e],be);if(St===null){Ue===null&&(Ue=lt);break}i&&Ue&&St.alternate===null&&c(ne,Ue),$=v(St,$,$e),vt===null?Le=St:vt.sibling=St,vt=St,Ue=lt}if($e===oe.length)return f(ne,Ue),pt&&So(ne,$e),Le;if(Ue===null){for(;$e$e?(lt=Ue,Ue=null):lt=Ue.sibling;var ol=ue(ne,Ue,St.value,be);if(ol===null){Ue===null&&(Ue=lt);break}i&&Ue&&ol.alternate===null&&c(ne,Ue),$=v(ol,$,$e),vt===null?Le=ol:vt.sibling=ol,vt=ol,Ue=lt}if(St.done)return f(ne,Ue),pt&&So(ne,$e),Le;if(Ue===null){for(;!St.done;$e++,St=oe.next())St=ye(ne,St.value,be),St!==null&&($=v(St,$,$e),vt===null?Le=St:vt.sibling=St,vt=St);return pt&&So(ne,$e),Le}for(Ue=h(Ue);!St.done;$e++,St=oe.next())St=de(Ue,ne,$e,St.value,be),St!==null&&(i&&St.alternate!==null&&Ue.delete(St.key===null?$e:St.key),$=v(St,$,$e),vt===null?Le=St:vt.sibling=St,vt=St);return i&&Ue.forEach(function(CZ){return c(ne,CZ)}),pt&&So(ne,$e),Le}function jt(ne,$,oe,be){if(typeof oe=="object"&&oe!==null&&oe.type===S&&oe.key===null&&(oe=oe.props.children),typeof oe=="object"&&oe!==null){switch(oe.$$typeof){case y:e:{for(var Le=oe.key;$!==null;){if($.key===Le){if(Le=oe.type,Le===S){if($.tag===7){f(ne,$.sibling),be=g($,oe.props.children),be.return=ne,ne=be;break e}}else if($.elementType===Le||typeof Le=="object"&&Le!==null&&Le.$$typeof===Z&&Du(Le)===$.type){f(ne,$.sibling),be=g($,oe.props),Ap(be,oe),be.return=ne,ne=be;break e}f(ne,$);break}else c(ne,$);$=$.sibling}oe.type===S?(be=Pu(oe.props.children,ne.mode,be,oe.key),be.return=ne,ne=be):(be=E2(oe.type,oe.key,oe.props,null,ne.mode,be),Ap(be,oe),be.return=ne,ne=be)}return I(ne);case w:e:{for(Le=oe.key;$!==null;){if($.key===Le)if($.tag===4&&$.stateNode.containerInfo===oe.containerInfo&&$.stateNode.implementation===oe.implementation){f(ne,$.sibling),be=g($,oe.children||[]),be.return=ne,ne=be;break e}else{f(ne,$);break}else c(ne,$);$=$.sibling}be=f8(oe,ne.mode,be),be.return=ne,ne=be}return I(ne);case Z:return oe=Du(oe),jt(ne,$,oe,be)}if(A(oe))return Pe(ne,$,oe,be);if(W(oe)){if(Le=W(oe),typeof Le!="function")throw Error(r(150));return oe=Le.call(oe),qe(ne,$,oe,be)}if(typeof oe.then=="function")return jt(ne,$,M2(oe),be);if(oe.$$typeof===M)return jt(ne,$,k2(ne,oe),be);B2(ne,oe)}return typeof oe=="string"&&oe!==""||typeof oe=="number"||typeof oe=="bigint"?(oe=""+oe,$!==null&&$.tag===6?(f(ne,$.sibling),be=g($,oe),be.return=ne,ne=be):(f(ne,$),be=u8(oe,ne.mode,be),be.return=ne,ne=be),I(ne)):f(ne,$)}return function(ne,$,oe,be){try{Ep=0;var Le=jt(ne,$,oe,be);return zd=null,Le}catch(Ue){if(Ue===Ld||Ue===N2)throw Ue;var vt=Da(29,Ue,null,ne.mode);return vt.lanes=be,vt.return=ne,vt}finally{}}}var Xu=XA(!0),FA=XA(!1),Fc=!1;function E8(i){i.updateQueue={baseState:i.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function A8(i,c){i=i.updateQueue,c.updateQueue===i&&(c.updateQueue={baseState:i.baseState,firstBaseUpdate:i.firstBaseUpdate,lastBaseUpdate:i.lastBaseUpdate,shared:i.shared,callbacks:null})}function Wc(i){return{lane:i,tag:0,payload:null,callback:null,next:null}}function Zc(i,c,f){var h=i.updateQueue;if(h===null)return null;if(h=h.shared,(kt&2)!==0){var g=h.pending;return g===null?c.next=c:(c.next=g.next,g.next=c),h.pending=c,c=S2(i),CA(i,null,f),c}return v2(i,h,c,f),S2(i)}function Tp(i,c,f){if(c=c.updateQueue,c!==null&&(c=c.shared,(f&4194048)!==0)){var h=c.lanes;h&=i.pendingLanes,f|=h,c.lanes=f,ip(i,f)}}function T8(i,c){var f=i.updateQueue,h=i.alternate;if(h!==null&&(h=h.updateQueue,f===h)){var g=null,v=null;if(f=f.firstBaseUpdate,f!==null){do{var I={lane:f.lane,tag:f.tag,payload:f.payload,callback:null,next:null};v===null?g=v=I:v=v.next=I,f=f.next}while(f!==null);v===null?g=v=c:v=v.next=c}else g=v=c;f={baseState:h.baseState,firstBaseUpdate:g,lastBaseUpdate:v,shared:h.shared,callbacks:h.callbacks},i.updateQueue=f;return}i=f.lastBaseUpdate,i===null?f.firstBaseUpdate=c:i.next=c,f.lastBaseUpdate=c}var k8=!1;function kp(){if(k8){var i=jd;if(i!==null)throw i}}function Cp(i,c,f,h){k8=!1;var g=i.updateQueue;Fc=!1;var v=g.firstBaseUpdate,I=g.lastBaseUpdate,D=g.shared.pending;if(D!==null){g.shared.pending=null;var J=D,le=J.next;J.next=null,I===null?v=le:I.next=le,I=J;var me=i.alternate;me!==null&&(me=me.updateQueue,D=me.lastBaseUpdate,D!==I&&(D===null?me.firstBaseUpdate=le:D.next=le,me.lastBaseUpdate=J))}if(v!==null){var ye=g.baseState;I=0,me=le=J=null,D=v;do{var ue=D.lane&-536870913,de=ue!==D.lane;if(de?(ct&ue)===ue:(h&ue)===ue){ue!==0&&ue===Ud&&(k8=!0),me!==null&&(me=me.next={lane:0,tag:D.tag,payload:D.payload,callback:null,next:null});e:{var Pe=i,qe=D;ue=c;var jt=f;switch(qe.tag){case 1:if(Pe=qe.payload,typeof Pe=="function"){ye=Pe.call(jt,ye,ue);break e}ye=Pe;break e;case 3:Pe.flags=Pe.flags&-65537|128;case 0:if(Pe=qe.payload,ue=typeof Pe=="function"?Pe.call(jt,ye,ue):Pe,ue==null)break e;ye=m({},ye,ue);break e;case 2:Fc=!0}}ue=D.callback,ue!==null&&(i.flags|=64,de&&(i.flags|=8192),de=g.callbacks,de===null?g.callbacks=[ue]:de.push(ue))}else de={lane:ue,tag:D.tag,payload:D.payload,callback:D.callback,next:null},me===null?(le=me=de,J=ye):me=me.next=de,I|=ue;if(D=D.next,D===null){if(D=g.shared.pending,D===null)break;de=D,D=de.next,de.next=null,g.lastBaseUpdate=de,g.shared.pending=null}}while(!0);me===null&&(J=ye),g.baseState=J,g.firstBaseUpdate=le,g.lastBaseUpdate=me,v===null&&(g.shared.lanes=0),Jc|=I,i.lanes=I,i.memoizedState=ye}}function WA(i,c){if(typeof i!="function")throw Error(r(191,i));i.call(c)}function ZA(i,c){var f=i.callbacks;if(f!==null)for(i.callbacks=null,i=0;iv?v:8;var I=C.T,D={};C.T=D,W8(i,!1,c,f);try{var J=g(),le=C.S;if(le!==null&&le(D,J),J!==null&&typeof J=="object"&&typeof J.then=="function"){var me=bW(J,h);Mp(i,c,me,Za(i))}else Mp(i,c,h,Za(i))}catch(ye){Mp(i,c,{then:function(){},status:"rejected",reason:ye},Za())}finally{H.p=v,I!==null&&D.types!==null&&(I.types=D.types),C.T=I}}function SW(){}function X8(i,c,f,h){if(i.tag!==5)throw Error(r(476));var g=AT(i).queue;ET(i,g,c,P,f===null?SW:function(){return TT(i),f(h)})}function AT(i){var c=i.memoizedState;if(c!==null)return c;c={memoizedState:P,baseState:P,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ko,lastRenderedState:P},next:null};var f={};return c.next={memoizedState:f,baseState:f,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ko,lastRenderedState:f},next:null},i.memoizedState=c,i=i.alternate,i!==null&&(i.memoizedState=c),c}function TT(i){var c=AT(i);c.next===null&&(c=i.alternate.memoizedState),Mp(i,c.next.queue,{},Za())}function F8(){return kr(Gp)}function kT(){return Fn().memoizedState}function CT(){return Fn().memoizedState}function EW(i){for(var c=i.return;c!==null;){switch(c.tag){case 24:case 3:var f=Za();i=Wc(f);var h=Zc(c,i,f);h!==null&&(ba(h,c,f),Tp(h,c,f)),c={cache:x8()},i.payload=c;return}c=c.return}}function AW(i,c,f){var h=Za();f={lane:h,revertLane:0,gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null},D2(i)?VT(c,f):(f=c8(i,c,f,h),f!==null&&(ba(f,i,h),MT(f,c,h)))}function NT(i,c,f){var h=Za();Mp(i,c,f,h)}function Mp(i,c,f,h){var g={lane:h,revertLane:0,gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null};if(D2(i))VT(c,g);else{var v=i.alternate;if(i.lanes===0&&(v===null||v.lanes===0)&&(v=c.lastRenderedReducer,v!==null))try{var I=c.lastRenderedState,D=v(I,f);if(g.hasEagerState=!0,g.eagerState=D,za(D,I))return v2(i,c,g,0),Wt===null&&w2(),!1}catch{}finally{}if(f=c8(i,c,g,h),f!==null)return ba(f,i,h),MT(f,c,h),!0}return!1}function W8(i,c,f,h){if(h={lane:2,revertLane:E9(),gesture:null,action:h,hasEagerState:!1,eagerState:null,next:null},D2(i)){if(c)throw Error(r(479))}else c=c8(i,f,h,2),c!==null&&ba(c,i,2)}function D2(i){var c=i.alternate;return i===Qe||c!==null&&c===Qe}function VT(i,c){qd=I2=!0;var f=i.pending;f===null?c.next=c:(c.next=f.next,f.next=c),i.pending=c}function MT(i,c,f){if((f&4194048)!==0){var h=c.lanes;h&=i.pendingLanes,f|=h,c.lanes=f,ip(i,f)}}var Bp={readContext:kr,use:U2,useCallback:In,useContext:In,useEffect:In,useImperativeHandle:In,useLayoutEffect:In,useInsertionEffect:In,useMemo:In,useReducer:In,useRef:In,useState:In,useDebugValue:In,useDeferredValue:In,useTransition:In,useSyncExternalStore:In,useId:In,useHostTransitionStatus:In,useFormState:In,useActionState:In,useOptimistic:In,useMemoCache:In,useCacheRefresh:In};Bp.useEffectEvent=In;var BT={readContext:kr,use:U2,useCallback:function(i,c){return Yr().memoizedState=[i,c===void 0?null:c],i},useContext:kr,useEffect:pT,useImperativeHandle:function(i,c,f){f=f!=null?f.concat([i]):null,L2(4194308,4,gT.bind(null,c,i),f)},useLayoutEffect:function(i,c){return L2(4194308,4,i,c)},useInsertionEffect:function(i,c){L2(4,2,i,c)},useMemo:function(i,c){var f=Yr();c=c===void 0?null:c;var h=i();if(Fu){Nt(!0);try{i()}finally{Nt(!1)}}return f.memoizedState=[h,c],h},useReducer:function(i,c,f){var h=Yr();if(f!==void 0){var g=f(c);if(Fu){Nt(!0);try{f(c)}finally{Nt(!1)}}}else g=c;return h.memoizedState=h.baseState=g,i={pending:null,lanes:0,dispatch:null,lastRenderedReducer:i,lastRenderedState:g},h.queue=i,i=i.dispatch=AW.bind(null,Qe,i),[h.memoizedState,i]},useRef:function(i){var c=Yr();return i={current:i},c.memoizedState=i},useState:function(i){i=j8(i);var c=i.queue,f=NT.bind(null,Qe,c);return c.dispatch=f,[i.memoizedState,f]},useDebugValue:D8,useDeferredValue:function(i,c){var f=Yr();return q8(f,i,c)},useTransition:function(){var i=j8(!1);return i=ET.bind(null,Qe,i.queue,!0,!1),Yr().memoizedState=i,[!1,i]},useSyncExternalStore:function(i,c,f){var h=Qe,g=Yr();if(pt){if(f===void 0)throw Error(r(407));f=f()}else{if(f=c(),Wt===null)throw Error(r(349));(ct&127)!==0||QA(h,c,f)}g.memoizedState=f;var v={value:f,getSnapshot:c};return g.queue=v,pT(eT.bind(null,h,v,i),[i]),h.flags|=2048,Fd(9,{destroy:void 0},$A.bind(null,h,v,f,c),null),f},useId:function(){var i=Yr(),c=Wt.identifierPrefix;if(pt){var f=Ai,h=Ei;f=(h&~(1<<32-yt(h)-1)).toString(32)+f,c="_"+c+"R_"+f,f=H2++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof h.is=="string"?I.createElement("select",{is:h.is}):I.createElement("select"),h.multiple?v.multiple=!0:h.size&&(v.size=h.size);break;default:v=typeof h.is=="string"?I.createElement(g,{is:h.is}):I.createElement(g)}}v[nt]=c,v[ht]=h;e:for(I=c.child;I!==null;){if(I.tag===5||I.tag===6)v.appendChild(I.stateNode);else if(I.tag!==4&&I.tag!==27&&I.child!==null){I.child.return=I,I=I.child;continue}if(I===c)break e;for(;I.sibling===null;){if(I.return===null||I.return===c)break e;I=I.return}I.sibling.return=I.return,I=I.sibling}c.stateNode=v;e:switch(Nr(v,g,h),g){case"button":case"input":case"select":case"textarea":h=!!h.autoFocus;break e;case"img":h=!0;break e;default:h=!1}h&&No(c)}}return rn(c),s9(c,c.type,i===null?null:i.memoizedProps,c.pendingProps,f),null;case 6:if(i&&c.stateNode!=null)i.memoizedProps!==h&&No(c);else{if(typeof h!="string"&&c.stateNode===null)throw Error(r(166));if(i=pe.current,Hd(c)){if(i=c.stateNode,f=c.memoizedProps,h=null,g=Tr,g!==null)switch(g.tag){case 27:case 5:h=g.memoizedProps}i[nt]=c,i=!!(i.nodeValue===f||h!==null&&h.suppressHydrationWarning===!0||Yk(i.nodeValue,f)),i||qc(c,!0)}else i=oy(i).createTextNode(h),i[nt]=c,c.stateNode=i}return rn(c),null;case 31:if(f=c.memoizedState,i===null||i.memoizedState!==null){if(h=Hd(c),f!==null){if(i===null){if(!h)throw Error(r(318));if(i=c.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(r(557));i[nt]=c}else Uu(),(c.flags&128)===0&&(c.memoizedState=null),c.flags|=4;rn(c),i=!1}else f=m8(),i!==null&&i.memoizedState!==null&&(i.memoizedState.hydrationErrors=f),i=!0;if(!i)return c.flags&256?(Xa(c),c):(Xa(c),null);if((c.flags&128)!==0)throw Error(r(558))}return rn(c),null;case 13:if(h=c.memoizedState,i===null||i.memoizedState!==null&&i.memoizedState.dehydrated!==null){if(g=Hd(c),h!==null&&h.dehydrated!==null){if(i===null){if(!g)throw Error(r(318));if(g=c.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(r(317));g[nt]=c}else Uu(),(c.flags&128)===0&&(c.memoizedState=null),c.flags|=4;rn(c),g=!1}else g=m8(),i!==null&&i.memoizedState!==null&&(i.memoizedState.hydrationErrors=g),g=!0;if(!g)return c.flags&256?(Xa(c),c):(Xa(c),null)}return Xa(c),(c.flags&128)!==0?(c.lanes=f,c):(f=h!==null,i=i!==null&&i.memoizedState!==null,f&&(h=c.child,g=null,h.alternate!==null&&h.alternate.memoizedState!==null&&h.alternate.memoizedState.cachePool!==null&&(g=h.alternate.memoizedState.cachePool.pool),v=null,h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(v=h.memoizedState.cachePool.pool),v!==g&&(h.flags|=2048)),f!==i&&f&&(c.child.flags|=8192),Z2(c,c.updateQueue),rn(c),null);case 4:return Se(),i===null&&C9(c.stateNode.containerInfo),rn(c),null;case 10:return Ao(c.type),rn(c),null;case 19:if(k(Xn),h=c.memoizedState,h===null)return rn(c),null;if(g=(c.flags&128)!==0,v=h.rendering,v===null)if(g)Rp(h,!1);else{if(Hn!==0||i!==null&&(i.flags&128)!==0)for(i=c.child;i!==null;){if(v=R2(i),v!==null){for(c.flags|=128,Rp(h,!1),i=v.updateQueue,c.updateQueue=i,Z2(c,i),c.subtreeFlags=0,i=f,f=c.child;f!==null;)NA(f,i),f=f.sibling;return L(Xn,Xn.current&1|2),pt&&So(c,h.treeForkCount),c.child}i=i.sibling}h.tail!==null&&bt()>J2&&(c.flags|=128,g=!0,Rp(h,!1),c.lanes=4194304)}else{if(!g)if(i=R2(v),i!==null){if(c.flags|=128,g=!0,i=i.updateQueue,c.updateQueue=i,Z2(c,i),Rp(h,!0),h.tail===null&&h.tailMode==="hidden"&&!v.alternate&&!pt)return rn(c),null}else 2*bt()-h.renderingStartTime>J2&&f!==536870912&&(c.flags|=128,g=!0,Rp(h,!1),c.lanes=4194304);h.isBackwards?(v.sibling=c.child,c.child=v):(i=h.last,i!==null?i.sibling=v:c.child=v,h.last=v)}return h.tail!==null?(i=h.tail,h.rendering=i,h.tail=i.sibling,h.renderingStartTime=bt(),i.sibling=null,f=Xn.current,L(Xn,g?f&1|2:f&1),pt&&So(c,h.treeForkCount),i):(rn(c),null);case 22:case 23:return Xa(c),N8(),h=c.memoizedState!==null,i!==null?i.memoizedState!==null!==h&&(c.flags|=8192):h&&(c.flags|=8192),h?(f&536870912)!==0&&(c.flags&128)===0&&(rn(c),c.subtreeFlags&6&&(c.flags|=8192)):rn(c),f=c.updateQueue,f!==null&&Z2(c,f.retryQueue),f=null,i!==null&&i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(f=i.memoizedState.cachePool.pool),h=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(h=c.memoizedState.cachePool.pool),h!==f&&(c.flags|=2048),i!==null&&k(zu),null;case 24:return f=null,i!==null&&(f=i.memoizedState.cache),c.memoizedState.cache!==f&&(c.flags|=2048),Ao(_n),rn(c),null;case 25:return null;case 30:return null}throw Error(r(156,c.tag))}function VW(i,c){switch(h8(c),c.tag){case 1:return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 3:return Ao(_n),Se(),i=c.flags,(i&65536)!==0&&(i&128)===0?(c.flags=i&-65537|128,c):null;case 26:case 27:case 5:return st(c),null;case 31:if(c.memoizedState!==null){if(Xa(c),c.alternate===null)throw Error(r(340));Uu()}return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 13:if(Xa(c),i=c.memoizedState,i!==null&&i.dehydrated!==null){if(c.alternate===null)throw Error(r(340));Uu()}return i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 19:return k(Xn),null;case 4:return Se(),null;case 10:return Ao(c.type),null;case 22:case 23:return Xa(c),N8(),i!==null&&k(zu),i=c.flags,i&65536?(c.flags=i&-65537|128,c):null;case 24:return Ao(_n),null;case 25:return null;default:return null}}function tk(i,c){switch(h8(c),c.tag){case 3:Ao(_n),Se();break;case 26:case 27:case 5:st(c);break;case 4:Se();break;case 31:c.memoizedState!==null&&Xa(c);break;case 13:Xa(c);break;case 19:k(Xn);break;case 10:Ao(c.type);break;case 22:case 23:Xa(c),N8(),i!==null&&k(zu);break;case 24:Ao(_n)}}function Ip(i,c){try{var f=c.updateQueue,h=f!==null?f.lastEffect:null;if(h!==null){var g=h.next;f=g;do{if((f.tag&i)===i){h=void 0;var v=f.create,I=f.inst;h=v(),I.destroy=h}f=f.next}while(f!==g)}}catch(D){Mt(c,c.return,D)}}function _c(i,c,f){try{var h=c.updateQueue,g=h!==null?h.lastEffect:null;if(g!==null){var v=g.next;h=v;do{if((h.tag&i)===i){var I=h.inst,D=I.destroy;if(D!==void 0){I.destroy=void 0,g=c;var J=f,le=D;try{le()}catch(me){Mt(g,J,me)}}}h=h.next}while(h!==v)}}catch(me){Mt(c,c.return,me)}}function nk(i){var c=i.updateQueue;if(c!==null){var f=i.stateNode;try{ZA(c,f)}catch(h){Mt(i,i.return,h)}}}function rk(i,c,f){f.props=Wu(i.type,i.memoizedProps),f.state=i.memoizedState;try{f.componentWillUnmount()}catch(h){Mt(i,c,h)}}function Hp(i,c){try{var f=i.ref;if(f!==null){switch(i.tag){case 26:case 27:case 5:var h=i.stateNode;break;case 30:h=i.stateNode;break;default:h=i.stateNode}typeof f=="function"?i.refCleanup=f(h):f.current=h}}catch(g){Mt(i,c,g)}}function Ti(i,c){var f=i.ref,h=i.refCleanup;if(f!==null)if(typeof h=="function")try{h()}catch(g){Mt(i,c,g)}finally{i.refCleanup=null,i=i.alternate,i!=null&&(i.refCleanup=null)}else if(typeof f=="function")try{f(null)}catch(g){Mt(i,c,g)}else f.current=null}function ak(i){var c=i.type,f=i.memoizedProps,h=i.stateNode;try{e:switch(c){case"button":case"input":case"select":case"textarea":f.autoFocus&&h.focus();break e;case"img":f.src?h.src=f.src:f.srcSet&&(h.srcset=f.srcSet)}}catch(g){Mt(i,i.return,g)}}function i9(i,c,f){try{var h=i.stateNode;JW(h,i.type,f,c),h[ht]=c}catch(g){Mt(i,i.return,g)}}function sk(i){return i.tag===5||i.tag===3||i.tag===26||i.tag===27&&nl(i.type)||i.tag===4}function o9(i){e:for(;;){for(;i.sibling===null;){if(i.return===null||sk(i.return))return null;i=i.return}for(i.sibling.return=i.return,i=i.sibling;i.tag!==5&&i.tag!==6&&i.tag!==18;){if(i.tag===27&&nl(i.type)||i.flags&2||i.child===null||i.tag===4)continue e;i.child.return=i,i=i.child}if(!(i.flags&2))return i.stateNode}}function c9(i,c,f){var h=i.tag;if(h===5||h===6)i=i.stateNode,c?(f.nodeType===9?f.body:f.nodeName==="HTML"?f.ownerDocument.body:f).insertBefore(i,c):(c=f.nodeType===9?f.body:f.nodeName==="HTML"?f.ownerDocument.body:f,c.appendChild(i),f=f._reactRootContainer,f!=null||c.onclick!==null||(c.onclick=xo));else if(h!==4&&(h===27&&nl(i.type)&&(f=i.stateNode,c=null),i=i.child,i!==null))for(c9(i,c,f),i=i.sibling;i!==null;)c9(i,c,f),i=i.sibling}function G2(i,c,f){var h=i.tag;if(h===5||h===6)i=i.stateNode,c?f.insertBefore(i,c):f.appendChild(i);else if(h!==4&&(h===27&&nl(i.type)&&(f=i.stateNode),i=i.child,i!==null))for(G2(i,c,f),i=i.sibling;i!==null;)G2(i,c,f),i=i.sibling}function ik(i){var c=i.stateNode,f=i.memoizedProps;try{for(var h=i.type,g=c.attributes;g.length;)c.removeAttributeNode(g[0]);Nr(c,h,f),c[nt]=i,c[ht]=f}catch(v){Mt(i,i.return,v)}}var Vo=!1,Qn=!1,l9=!1,ok=typeof WeakSet=="function"?WeakSet:Set,yr=null;function MW(i,c){if(i=i.containerInfo,M9=py,i=xA(i),n8(i)){if("selectionStart"in i)var f={start:i.selectionStart,end:i.selectionEnd};else e:{f=(f=i.ownerDocument)&&f.defaultView||window;var h=f.getSelection&&f.getSelection();if(h&&h.rangeCount!==0){f=h.anchorNode;var g=h.anchorOffset,v=h.focusNode;h=h.focusOffset;try{f.nodeType,v.nodeType}catch{f=null;break e}var I=0,D=-1,J=-1,le=0,me=0,ye=i,ue=null;t:for(;;){for(var de;ye!==f||g!==0&&ye.nodeType!==3||(D=I+g),ye!==v||h!==0&&ye.nodeType!==3||(J=I+h),ye.nodeType===3&&(I+=ye.nodeValue.length),(de=ye.firstChild)!==null;)ue=ye,ye=de;for(;;){if(ye===i)break t;if(ue===f&&++le===g&&(D=I),ue===v&&++me===h&&(J=I),(de=ye.nextSibling)!==null)break;ye=ue,ue=ye.parentNode}ye=de}f=D===-1||J===-1?null:{start:D,end:J}}else f=null}f=f||{start:0,end:0}}else f=null;for(B9={focusedElem:i,selectionRange:f},py=!1,yr=c;yr!==null;)if(c=yr,i=c.child,(c.subtreeFlags&1028)!==0&&i!==null)i.return=c,yr=i;else for(;yr!==null;){switch(c=yr,v=c.alternate,i=c.flags,c.tag){case 0:if((i&4)!==0&&(i=c.updateQueue,i=i!==null?i.events:null,i!==null))for(f=0;f title"))),Nr(v,h,f),v[nt]=i,Rn(v),h=v;break e;case"link":var I=hC("link","href",g).get(h+(f.href||""));if(I){for(var D=0;Djt&&(I=jt,jt=qe,qe=I);var ne=yA(D,qe),$=yA(D,jt);if(ne&&$&&(de.rangeCount!==1||de.anchorNode!==ne.node||de.anchorOffset!==ne.offset||de.focusNode!==$.node||de.focusOffset!==$.offset)){var oe=ye.createRange();oe.setStart(ne.node,ne.offset),de.removeAllRanges(),qe>jt?(de.addRange(oe),de.extend($.node,$.offset)):(oe.setEnd($.node,$.offset),de.addRange(oe))}}}}for(ye=[],de=D;de=de.parentNode;)de.nodeType===1&&ye.push({element:de,left:de.scrollLeft,top:de.scrollTop});for(typeof D.focus=="function"&&D.focus(),D=0;Df?32:f,C.T=null,f=b9,b9=null;var v=$c,I=Io;if(sr=0,_d=$c=null,Io=0,(kt&6)!==0)throw Error(r(331));var D=kt;if(kt|=4,gk(v.current),mk(v,v.current,I,f),kt=D,Dp(0,!1),zr&&typeof zr.onPostCommitFiberRoot=="function")try{zr.onPostCommitFiberRoot(Gt,v)}catch{}return!0}finally{H.p=g,C.T=h,Pk(i,c)}}function jk(i,c,f){c=ps(f,c),c=_8(i.stateNode,c,2),i=Zc(i,c,2),i!==null&&(Pc(i,2),ki(i))}function Mt(i,c,f){if(i.tag===3)jk(i,i,f);else for(;c!==null;){if(c.tag===3){jk(c,i,f);break}else if(c.tag===1){var h=c.stateNode;if(typeof c.type.getDerivedStateFromError=="function"||typeof h.componentDidCatch=="function"&&(Qc===null||!Qc.has(h))){i=ps(f,i),f=LT(2),h=Zc(c,f,2),h!==null&&(zT(f,h,c,i),Pc(h,2),ki(h));break}}c=c.return}}function w9(i,c,f){var h=i.pingCache;if(h===null){h=i.pingCache=new RW;var g=new Set;h.set(c,g)}else g=h.get(c),g===void 0&&(g=new Set,h.set(c,g));g.has(f)||(d9=!0,g.add(f),i=jW.bind(null,i,c,f),c.then(i,i))}function jW(i,c,f){var h=i.pingCache;h!==null&&h.delete(c),i.pingedLanes|=i.suspendedLanes&f,i.warmLanes&=~f,Wt===i&&(ct&f)===f&&(Hn===4||Hn===3&&(ct&62914560)===ct&&300>bt()-Y2?(kt&2)===0&&Yd(i,0):h9|=f,Kd===ct&&(Kd=0)),ki(i)}function Lk(i,c){c===0&&(c=gn()),i=Hu(i,c),i!==null&&(Pc(i,c),ki(i))}function LW(i){var c=i.memoizedState,f=0;c!==null&&(f=c.retryLane),Lk(i,f)}function zW(i,c){var f=0;switch(i.tag){case 31:case 13:var h=i.stateNode,g=i.memoizedState;g!==null&&(f=g.retryLane);break;case 19:h=i.stateNode;break;case 22:h=i.stateNode._retryCache;break;default:throw Error(r(314))}h!==null&&h.delete(c),Lk(i,f)}function DW(i,c){return Ft(i,c)}var ry=null,Qd=null,v9=!1,ay=!1,S9=!1,tl=0;function ki(i){i!==Qd&&i.next===null&&(Qd===null?ry=Qd=i:Qd=Qd.next=i),ay=!0,v9||(v9=!0,XW())}function Dp(i,c){if(!S9&&ay){S9=!0;do for(var f=!1,h=ry;h!==null;){if(i!==0){var g=h.pendingLanes;if(g===0)var v=0;else{var I=h.suspendedLanes,D=h.pingedLanes;v=(1<<31-yt(42|i)+1)-1,v&=g&~(I&~D),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(f=!0,Xk(h,v))}else v=ct,v=tn(h,h===Wt?v:0,h.cancelPendingCommit!==null||h.timeoutHandle!==-1),(v&3)===0||Kt(h,v)||(f=!0,Xk(h,v));h=h.next}while(f);S9=!1}}function qW(){zk()}function zk(){ay=v9=!1;var i=0;tl!==0&&$W()&&(i=tl);for(var c=bt(),f=null,h=ry;h!==null;){var g=h.next,v=Dk(h,c);v===0?(h.next=null,f===null?ry=g:f.next=g,g===null&&(Qd=f)):(f=h,(i!==0||(v&3)!==0)&&(ay=!0)),h=g}sr!==0&&sr!==5||Dp(i),tl!==0&&(tl=0)}function Dk(i,c){for(var f=i.suspendedLanes,h=i.pingedLanes,g=i.expirationTimes,v=i.pendingLanes&-62914561;0D)break;var me=J.transferSize,ye=J.initiatorType;me&&Jk(ye)&&(J=J.responseEnd,I+=me*(J"u"?null:document;function lC(i,c,f){var h=$d;if(h&&typeof c=="string"&&c){var g=ds(c);g='link[rel="'+i+'"][href="'+g+'"]',typeof f=="string"&&(g+='[crossorigin="'+f+'"]'),cC.has(g)||(cC.add(g),i={rel:i,crossOrigin:f,href:c},h.querySelector(g)===null&&(c=h.createElement("link"),Nr(c,"link",i),Rn(c),h.head.appendChild(c)))}}function cZ(i){Ho.D(i),lC("dns-prefetch",i,null)}function lZ(i,c){Ho.C(i,c),lC("preconnect",i,c)}function uZ(i,c,f){Ho.L(i,c,f);var h=$d;if(h&&i&&c){var g='link[rel="preload"][as="'+ds(c)+'"]';c==="image"&&f&&f.imageSrcSet?(g+='[imagesrcset="'+ds(f.imageSrcSet)+'"]',typeof f.imageSizes=="string"&&(g+='[imagesizes="'+ds(f.imageSizes)+'"]')):g+='[href="'+ds(i)+'"]';var v=g;switch(c){case"style":v=e0(i);break;case"script":v=t0(i)}ws.has(v)||(i=m({rel:"preload",href:c==="image"&&f&&f.imageSrcSet?void 0:i,as:c},f),ws.set(v,i),h.querySelector(g)!==null||c==="style"&&h.querySelector(Wp(v))||c==="script"&&h.querySelector(Zp(v))||(c=h.createElement("link"),Nr(c,"link",i),Rn(c),h.head.appendChild(c)))}}function fZ(i,c){Ho.m(i,c);var f=$d;if(f&&i){var h=c&&typeof c.as=="string"?c.as:"script",g='link[rel="modulepreload"][as="'+ds(h)+'"][href="'+ds(i)+'"]',v=g;switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=t0(i)}if(!ws.has(v)&&(i=m({rel:"modulepreload",href:i},c),ws.set(v,i),f.querySelector(g)===null)){switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(f.querySelector(Zp(v)))return}h=f.createElement("link"),Nr(h,"link",i),Rn(h),f.head.appendChild(h)}}}function dZ(i,c,f){Ho.S(i,c,f);var h=$d;if(h&&i){var g=vi(h).hoistableStyles,v=e0(i);c=c||"default";var I=g.get(v);if(!I){var D={loading:0,preload:null};if(I=h.querySelector(Wp(v)))D.loading=5;else{i=m({rel:"stylesheet",href:i,"data-precedence":c},f),(f=ws.get(v))&&j9(i,f);var J=I=h.createElement("link");Rn(J),Nr(J,"link",i),J._p=new Promise(function(le,me){J.onload=le,J.onerror=me}),J.addEventListener("load",function(){D.loading|=1}),J.addEventListener("error",function(){D.loading|=2}),D.loading|=4,ly(I,c,h)}I={type:"stylesheet",instance:I,count:1,state:D},g.set(v,I)}}}function hZ(i,c){Ho.X(i,c);var f=$d;if(f&&i){var h=vi(f).hoistableScripts,g=t0(i),v=h.get(g);v||(v=f.querySelector(Zp(g)),v||(i=m({src:i,async:!0},c),(c=ws.get(g))&&L9(i,c),v=f.createElement("script"),Rn(v),Nr(v,"link",i),f.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},h.set(g,v))}}function pZ(i,c){Ho.M(i,c);var f=$d;if(f&&i){var h=vi(f).hoistableScripts,g=t0(i),v=h.get(g);v||(v=f.querySelector(Zp(g)),v||(i=m({src:i,async:!0,type:"module"},c),(c=ws.get(g))&&L9(i,c),v=f.createElement("script"),Rn(v),Nr(v,"link",i),f.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},h.set(g,v))}}function uC(i,c,f,h){var g=(g=pe.current)?cy(g):null;if(!g)throw Error(r(446));switch(i){case"meta":case"title":return null;case"style":return typeof f.precedence=="string"&&typeof f.href=="string"?(c=e0(f.href),f=vi(g).hoistableStyles,h=f.get(c),h||(h={type:"style",instance:null,count:0,state:null},f.set(c,h)),h):{type:"void",instance:null,count:0,state:null};case"link":if(f.rel==="stylesheet"&&typeof f.href=="string"&&typeof f.precedence=="string"){i=e0(f.href);var v=vi(g).hoistableStyles,I=v.get(i);if(I||(g=g.ownerDocument||g,I={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(i,I),(v=g.querySelector(Wp(i)))&&!v._p&&(I.instance=v,I.state.loading=5),ws.has(i)||(f={rel:"preload",as:"style",href:f.href,crossOrigin:f.crossOrigin,integrity:f.integrity,media:f.media,hrefLang:f.hrefLang,referrerPolicy:f.referrerPolicy},ws.set(i,f),v||mZ(g,i,f,I.state))),c&&h===null)throw Error(r(528,""));return I}if(c&&h!==null)throw Error(r(529,""));return null;case"script":return c=f.async,f=f.src,typeof f=="string"&&c&&typeof c!="function"&&typeof c!="symbol"?(c=t0(f),f=vi(g).hoistableScripts,h=f.get(c),h||(h={type:"script",instance:null,count:0,state:null},f.set(c,h)),h):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,i))}}function e0(i){return'href="'+ds(i)+'"'}function Wp(i){return'link[rel="stylesheet"]['+i+"]"}function fC(i){return m({},i,{"data-precedence":i.precedence,precedence:null})}function mZ(i,c,f,h){i.querySelector('link[rel="preload"][as="style"]['+c+"]")?h.loading=1:(c=i.createElement("link"),h.preload=c,c.addEventListener("load",function(){return h.loading|=1}),c.addEventListener("error",function(){return h.loading|=2}),Nr(c,"link",f),Rn(c),i.head.appendChild(c))}function t0(i){return'[src="'+ds(i)+'"]'}function Zp(i){return"script[async]"+i}function dC(i,c,f){if(c.count++,c.instance===null)switch(c.type){case"style":var h=i.querySelector('style[data-href~="'+ds(f.href)+'"]');if(h)return c.instance=h,Rn(h),h;var g=m({},f,{"data-href":f.href,"data-precedence":f.precedence,href:null,precedence:null});return h=(i.ownerDocument||i).createElement("style"),Rn(h),Nr(h,"style",g),ly(h,f.precedence,i),c.instance=h;case"stylesheet":g=e0(f.href);var v=i.querySelector(Wp(g));if(v)return c.state.loading|=4,c.instance=v,Rn(v),v;h=fC(f),(g=ws.get(g))&&j9(h,g),v=(i.ownerDocument||i).createElement("link"),Rn(v);var I=v;return I._p=new Promise(function(D,J){I.onload=D,I.onerror=J}),Nr(v,"link",h),c.state.loading|=4,ly(v,f.precedence,i),c.instance=v;case"script":return v=t0(f.src),(g=i.querySelector(Zp(v)))?(c.instance=g,Rn(g),g):(h=f,(g=ws.get(v))&&(h=m({},f),L9(h,g)),i=i.ownerDocument||i,g=i.createElement("script"),Rn(g),Nr(g,"link",h),i.head.appendChild(g),c.instance=g);case"void":return null;default:throw Error(r(443,c.type))}else c.type==="stylesheet"&&(c.state.loading&4)===0&&(h=c.instance,c.state.loading|=4,ly(h,f.precedence,i));return c.instance}function ly(i,c,f){for(var h=f.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=h.length?h[h.length-1]:null,v=g,I=0;I title"):null)}function bZ(i,c,f){if(f===1||c.itemProp!=null)return!1;switch(i){case"meta":case"title":return!0;case"style":if(typeof c.precedence!="string"||typeof c.href!="string"||c.href==="")break;return!0;case"link":if(typeof c.rel!="string"||typeof c.href!="string"||c.href===""||c.onLoad||c.onError)break;switch(c.rel){case"stylesheet":return i=c.disabled,typeof c.precedence=="string"&&i==null;default:return!0}case"script":if(c.async&&typeof c.async!="function"&&typeof c.async!="symbol"&&!c.onLoad&&!c.onError&&c.src&&typeof c.src=="string")return!0}return!1}function mC(i){return!(i.type==="stylesheet"&&(i.state.loading&3)===0)}function yZ(i,c,f,h){if(f.type==="stylesheet"&&(typeof h.media!="string"||matchMedia(h.media).matches!==!1)&&(f.state.loading&4)===0){if(f.instance===null){var g=e0(h.href),v=c.querySelector(Wp(g));if(v){c=v._p,c!==null&&typeof c=="object"&&typeof c.then=="function"&&(i.count++,i=fy.bind(i),c.then(i,i)),f.state.loading|=4,f.instance=v,Rn(v);return}v=c.ownerDocument||c,h=fC(h),(g=ws.get(g))&&j9(h,g),v=v.createElement("link"),Rn(v);var I=v;I._p=new Promise(function(D,J){I.onload=D,I.onerror=J}),Nr(v,"link",h),f.instance=v}i.stylesheets===null&&(i.stylesheets=new Map),i.stylesheets.set(f,c),(c=f.state.preload)&&(f.state.loading&3)===0&&(i.count++,f=fy.bind(i),c.addEventListener("load",f),c.addEventListener("error",f))}}var z9=0;function gZ(i,c){return i.stylesheets&&i.count===0&&hy(i,i.stylesheets),0z9?50:800)+c);return i.unsuspend=f,function(){i.unsuspend=null,clearTimeout(h),clearTimeout(g)}}:null}function fy(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)hy(this,this.stylesheets);else if(this.unsuspend){var i=this.unsuspend;this.unsuspend=null,i()}}}var dy=null;function hy(i,c){i.stylesheets=null,i.unsuspend!==null&&(i.count++,dy=new Map,c.forEach(xZ,i),dy=null,fy.call(i))}function xZ(i,c){if(!(c.state.loading&4)){var f=dy.get(i);if(f)var h=f.get(null);else{f=new Map,dy.set(i,f);for(var g=i.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),J9.exports=zZ(),J9.exports}var qZ=DZ();/** + * react-router v7.13.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */var zC="popstate";function DC(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function XZ(e={}){function t(r,a){var d;let s=(d=a.state)==null?void 0:d.masked,{pathname:o,search:l,hash:u}=s||r.location;return pv("",{pathname:o,search:l,hash:u},a.state&&a.state.usr||null,a.state&&a.state.key||"default",s?{pathname:r.location.pathname,search:r.location.search,hash:r.location.hash}:void 0)}function n(r,a){return typeof a=="string"?a:s1(a)}return WZ(t,n,null,e)}function An(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function eo(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function FZ(){return Math.random().toString(36).substring(2,10)}function qC(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.unstable_mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function pv(e,t,n=null,r,a){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?Dh(t):t,state:n,key:t&&t.key||r||FZ(),unstable_mask:a}}function s1({pathname:e="/",search:t="",hash:n=""}){return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function Dh(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function WZ(e,t,n,r={}){let{window:a=document.defaultView,v5Compat:s=!1}=r,o=a.history,l="POP",u=null,d=p();d==null&&(d=0,o.replaceState({...o.state,idx:d},""));function p(){return(o.state||{idx:null}).idx}function m(){l="POP";let T=p(),N=T==null?null:T-d;d=T,u&&u({action:l,location:S.location,delta:N})}function b(T,N){l="PUSH";let R=DC(T)?T:pv(S.location,T,N);d=p()+1;let M=qC(R,d),j=S.createHref(R.unstable_mask||R);try{o.pushState(M,"",j)}catch(X){if(X instanceof DOMException&&X.name==="DataCloneError")throw X;a.location.assign(j)}s&&u&&u({action:l,location:S.location,delta:1})}function y(T,N){l="REPLACE";let R=DC(T)?T:pv(S.location,T,N);d=p();let M=qC(R,d),j=S.createHref(R.unstable_mask||R);o.replaceState(M,"",j),s&&u&&u({action:l,location:S.location,delta:0})}function w(T){return ZZ(T)}let S={get action(){return l},get location(){return e(a,o)},listen(T){if(u)throw new Error("A history only accepts one active listener");return a.addEventListener(zC,m),u=T,()=>{a.removeEventListener(zC,m),u=null}},createHref(T){return t(a,T)},createURL:w,encodeLocation(T){let N=w(T);return{pathname:N.pathname,search:N.search,hash:N.hash}},push:b,replace:y,go(T){return o.go(T)}};return S}function ZZ(e,t=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),An(n,"No window.location.(origin|href) available to create URL");let r=typeof e=="string"?e:s1(e);return r=r.replace(/ $/,"%20"),!t&&r.startsWith("//")&&(r=n+r),new URL(r,n)}function NR(e,t,n="/"){return GZ(e,t,n,!1)}function GZ(e,t,n,r){let a=typeof t=="string"?Dh(t):t,s=yc(a.pathname||"/",n);if(s==null)return null;let o=VR(e);KZ(o);let l=null;for(let u=0;l==null&&u{let p={relativePath:d===void 0?o.path||"":d,caseSensitive:o.caseSensitive===!0,childrenIndex:l,route:o};if(p.relativePath.startsWith("/")){if(!p.relativePath.startsWith(r)&&u)return;An(p.relativePath.startsWith(r),`Absolute route path "${p.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),p.relativePath=p.relativePath.slice(r.length)}let m=Gi([r,p.relativePath]),b=n.concat(p);o.children&&o.children.length>0&&(An(o.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${m}".`),VR(o.children,t,b,m,u)),!(o.path==null&&!o.index)&&t.push({path:m,score:tG(m,o.index),routesMeta:b})};return e.forEach((o,l)=>{var u;if(o.path===""||!((u=o.path)!=null&&u.includes("?")))s(o,l);else for(let d of MR(o.path))s(o,l,!0,d)}),t}function MR(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,a=n.endsWith("?"),s=n.replace(/\?$/,"");if(r.length===0)return a?[s,""]:[s];let o=MR(r.join("/")),l=[];return l.push(...o.map(u=>u===""?s:[s,u].join("/"))),a&&l.push(...o),l.map(u=>e.startsWith("/")&&u===""?"/":u)}function KZ(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:nG(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var _Z=/^:[\w-]+$/,YZ=3,JZ=2,QZ=1,$Z=10,eG=-2,XC=e=>e==="*";function tG(e,t){let n=e.split("/"),r=n.length;return n.some(XC)&&(r+=eG),t&&(r+=JZ),n.filter(a=>!XC(a)).reduce((a,s)=>a+(_Z.test(s)?YZ:s===""?QZ:$Z),r)}function nG(e,t){return e.length===t.length&&e.slice(0,-1).every((r,a)=>r===t[a])?e[e.length-1]-t[t.length-1]:0}function rG(e,t,n=!1){let{routesMeta:r}=e,a={},s="/",o=[];for(let l=0;l{if(p==="*"){let w=l[b]||"";o=s.slice(0,s.length-w.length).replace(/(.)\/+$/,"$1")}const y=l[b];return m&&!y?d[p]=void 0:d[p]=(y||"").replace(/%2F/g,"/"),d},{}),pathname:s,pathnameBase:o,pattern:e}}function aG(e,t=!1,n=!0){eo(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let r=[],a="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,l,u,d,p)=>{if(r.push({paramName:l,isOptional:u!=null}),u){let m=p.charAt(d+o.length);return m&&m!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(r.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),r]}function sG(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return eo(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function yc(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}var iG=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function oG(e,t="/"){let{pathname:n,search:r="",hash:a=""}=typeof e=="string"?Dh(e):e,s;return n?(n=n.replace(/\/\/+/g,"/"),n.startsWith("/")?s=FC(n.substring(1),"/"):s=FC(n,t)):s=t,{pathname:s,search:uG(r),hash:fG(a)}}function FC(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(a=>{a===".."?n.length>1&&n.pop():a!=="."&&n.push(a)}),n.length>1?n.join("/"):"/"}function t4(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function cG(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function BR(e){let t=cG(e);return t.map((n,r)=>r===t.length-1?n.pathname:n.pathnameBase)}function e6(e,t,n,r=!1){let a;typeof e=="string"?a=Dh(e):(a={...e},An(!a.pathname||!a.pathname.includes("?"),t4("?","pathname","search",a)),An(!a.pathname||!a.pathname.includes("#"),t4("#","pathname","hash",a)),An(!a.search||!a.search.includes("#"),t4("#","search","hash",a)));let s=e===""||a.pathname==="",o=s?"/":a.pathname,l;if(o==null)l=n;else{let m=t.length-1;if(!r&&o.startsWith("..")){let b=o.split("/");for(;b[0]==="..";)b.shift(),m-=1;a.pathname=b.join("/")}l=m>=0?t[m]:"/"}let u=oG(a,l),d=o&&o!=="/"&&o.endsWith("/"),p=(s||o===".")&&n.endsWith("/");return!u.pathname.endsWith("/")&&(d||p)&&(u.pathname+="/"),u}var Gi=e=>e.join("/").replace(/\/\/+/g,"/"),lG=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),uG=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,fG=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,dG=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function hG(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function pG(e){return e.map(t=>t.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var OR=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function RR(e,t){let n=e;if(typeof n!="string"||!iG.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,a=!1;if(OR)try{let s=new URL(window.location.href),o=n.startsWith("//")?new URL(s.protocol+n):new URL(n),l=yc(o.pathname,t);o.origin===s.origin&&l!=null?n=l+o.search+o.hash:a=!0}catch{eo(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:a,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var IR=["POST","PUT","PATCH","DELETE"];new Set(IR);var mG=["GET",...IR];new Set(mG);var qh=re.createContext(null);qh.displayName="DataRouter";var V3=re.createContext(null);V3.displayName="DataRouterState";var bG=re.createContext(!1),HR=re.createContext({isTransitioning:!1});HR.displayName="ViewTransition";var yG=re.createContext(new Map);yG.displayName="Fetchers";var gG=re.createContext(null);gG.displayName="Await";var Ls=re.createContext(null);Ls.displayName="Navigation";var vb=re.createContext(null);vb.displayName="Location";var Vc=re.createContext({outlet:null,matches:[],isDataRoute:!1});Vc.displayName="Route";var t6=re.createContext(null);t6.displayName="RouteError";var PR="REACT_ROUTER_ERROR",xG="REDIRECT",wG="ROUTE_ERROR_RESPONSE";function vG(e){if(e.startsWith(`${PR}:${xG}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.location=="string"&&typeof t.reloadDocument=="boolean"&&typeof t.replace=="boolean")return t}catch{}}function SG(e){if(e.startsWith(`${PR}:${wG}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string")return new dG(t.status,t.statusText,t.data)}catch{}}function EG(e,{relative:t}={}){An(Sb(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=re.useContext(Ls),{hash:a,pathname:s,search:o}=Eb(e,{relative:t}),l=s;return n!=="/"&&(l=s==="/"?n:Gi([n,s])),r.createHref({pathname:l,search:o,hash:a})}function Sb(){return re.useContext(vb)!=null}function Mc(){return An(Sb(),"useLocation() may be used only in the context of a component."),re.useContext(vb).location}var UR="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function jR(e){re.useContext(Ls).static||re.useLayoutEffect(e)}function AG(){let{isDataRoute:e}=re.useContext(Vc);return e?UG():TG()}function TG(){An(Sb(),"useNavigate() may be used only in the context of a component.");let e=re.useContext(qh),{basename:t,navigator:n}=re.useContext(Ls),{matches:r}=re.useContext(Vc),{pathname:a}=Mc(),s=JSON.stringify(BR(r)),o=re.useRef(!1);return jR(()=>{o.current=!0}),re.useCallback((u,d={})=>{if(eo(o.current,UR),!o.current)return;if(typeof u=="number"){n.go(u);return}let p=e6(u,JSON.parse(s),a,d.relative==="path");e==null&&t!=="/"&&(p.pathname=p.pathname==="/"?t:Gi([t,p.pathname])),(d.replace?n.replace:n.push)(p,d.state,d)},[t,n,s,a,e])}re.createContext(null);function Eb(e,{relative:t}={}){let{matches:n}=re.useContext(Vc),{pathname:r}=Mc(),a=JSON.stringify(BR(n));return re.useMemo(()=>e6(e,JSON.parse(a),r,t==="path"),[e,a,r,t])}function kG(e,t){return LR(e,t)}function LR(e,t,n){var T;An(Sb(),"useRoutes() may be used only in the context of a component.");let{navigator:r}=re.useContext(Ls),{matches:a}=re.useContext(Vc),s=a[a.length-1],o=s?s.params:{},l=s?s.pathname:"/",u=s?s.pathnameBase:"/",d=s&&s.route;{let N=d&&d.path||"";DR(l,!d||N.endsWith("*")||N.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${l}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let p=Mc(),m;if(t){let N=typeof t=="string"?Dh(t):t;An(u==="/"||((T=N.pathname)==null?void 0:T.startsWith(u)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${u}" but pathname "${N.pathname}" was given in the \`location\` prop.`),m=N}else m=p;let b=m.pathname||"/",y=b;if(u!=="/"){let N=u.replace(/^\//,"").split("/");y="/"+b.replace(/^\//,"").split("/").slice(N.length).join("/")}let w=NR(e,{pathname:y});eo(d||w!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),eo(w==null||w[w.length-1].route.element!==void 0||w[w.length-1].route.Component!==void 0||w[w.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let S=BG(w&&w.map(N=>Object.assign({},N,{params:Object.assign({},o,N.params),pathname:Gi([u,r.encodeLocation?r.encodeLocation(N.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?u:Gi([u,r.encodeLocation?r.encodeLocation(N.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),a,n);return t&&S?re.createElement(vb.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",unstable_mask:void 0,...m},navigationType:"POP"}},S):S}function CG(){let e=PG(),t=hG(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:r},s={padding:"2px 4px",backgroundColor:r},o=null;return console.error("Error handled by React Router default ErrorBoundary:",e),o=re.createElement(re.Fragment,null,re.createElement("p",null,"💿 Hey developer 👋"),re.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",re.createElement("code",{style:s},"ErrorBoundary")," or"," ",re.createElement("code",{style:s},"errorElement")," prop on your route.")),re.createElement(re.Fragment,null,re.createElement("h2",null,"Unexpected Application Error!"),re.createElement("h3",{style:{fontStyle:"italic"}},t),n?re.createElement("pre",{style:a},n):null,o)}var NG=re.createElement(CG,null),zR=class extends re.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const n=SG(e.digest);n&&(e=n)}let t=e!==void 0?re.createElement(Vc.Provider,{value:this.props.routeContext},re.createElement(t6.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?re.createElement(VG,{error:e},t):t}};zR.contextType=bG;var n4=new WeakMap;function VG({children:e,error:t}){let{basename:n}=re.useContext(Ls);if(typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){let r=vG(t.digest);if(r){let a=n4.get(t);if(a)throw a;let s=RR(r.location,n);if(OR&&!n4.get(t))if(s.isExternal||r.reloadDocument)window.location.href=s.absoluteURL||s.to;else{const o=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(s.to,{replace:r.replace}));throw n4.set(t,o),o}return re.createElement("meta",{httpEquiv:"refresh",content:`0;url=${s.absoluteURL||s.to}`})}}return e}function MG({routeContext:e,match:t,children:n}){let r=re.useContext(qh);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),re.createElement(Vc.Provider,{value:e},n)}function BG(e,t=[],n){let r=n==null?void 0:n.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let a=e,s=r==null?void 0:r.errors;if(s!=null){let p=a.findIndex(m=>m.route.id&&(s==null?void 0:s[m.route.id])!==void 0);An(p>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(s).join(",")}`),a=a.slice(0,Math.min(a.length,p+1))}let o=!1,l=-1;if(n&&r){o=r.renderFallback;for(let p=0;p=0?a=a.slice(0,l+1):a=[a[0]];break}}}}let u=n==null?void 0:n.onError,d=r&&u?(p,m)=>{var b,y;u(p,{location:r.location,params:((y=(b=r.matches)==null?void 0:b[0])==null?void 0:y.params)??{},unstable_pattern:pG(r.matches),errorInfo:m})}:void 0;return a.reduceRight((p,m,b)=>{let y,w=!1,S=null,T=null;r&&(y=s&&m.route.id?s[m.route.id]:void 0,S=m.route.errorElement||NG,o&&(l<0&&b===0?(DR("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),w=!0,T=null):l===b&&(w=!0,T=m.route.hydrateFallbackElement||null)));let N=t.concat(a.slice(0,b+1)),R=()=>{let M;return y?M=S:w?M=T:m.route.Component?M=re.createElement(m.route.Component,null):m.route.element?M=m.route.element:M=p,re.createElement(MG,{match:m,routeContext:{outlet:p,matches:N,isDataRoute:r!=null},children:M})};return r&&(m.route.ErrorBoundary||m.route.errorElement||b===0)?re.createElement(zR,{location:r.location,revalidation:r.revalidation,component:S,error:y,children:R(),routeContext:{outlet:null,matches:N,isDataRoute:!0},onError:d}):R()},null)}function n6(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function OG(e){let t=re.useContext(qh);return An(t,n6(e)),t}function RG(e){let t=re.useContext(V3);return An(t,n6(e)),t}function IG(e){let t=re.useContext(Vc);return An(t,n6(e)),t}function r6(e){let t=IG(e),n=t.matches[t.matches.length-1];return An(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function HG(){return r6("useRouteId")}function PG(){var r;let e=re.useContext(t6),t=RG("useRouteError"),n=r6("useRouteError");return e!==void 0?e:(r=t.errors)==null?void 0:r[n]}function UG(){let{router:e}=OG("useNavigate"),t=r6("useNavigate"),n=re.useRef(!1);return jR(()=>{n.current=!0}),re.useCallback(async(a,s={})=>{eo(n.current,UR),n.current&&(typeof a=="number"?await e.navigate(a):await e.navigate(a,{fromRouteId:t,...s}))},[e,t])}var WC={};function DR(e,t,n){!t&&!WC[e]&&(WC[e]=!0,eo(!1,n))}re.memo(jG);function jG({routes:e,future:t,state:n,isStatic:r,onError:a}){return LR(e,void 0,{state:n,isStatic:r,onError:a})}function cf(e){An(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function LG({basename:e="/",children:t=null,location:n,navigationType:r="POP",navigator:a,static:s=!1,unstable_useTransitions:o}){An(!Sb(),"You cannot render a inside another . You should never have more than one in your app.");let l=e.replace(/^\/*/,"/"),u=re.useMemo(()=>({basename:l,navigator:a,static:s,unstable_useTransitions:o,future:{}}),[l,a,s,o]);typeof n=="string"&&(n=Dh(n));let{pathname:d="/",search:p="",hash:m="",state:b=null,key:y="default",unstable_mask:w}=n,S=re.useMemo(()=>{let T=yc(d,l);return T==null?null:{location:{pathname:T,search:p,hash:m,state:b,key:y,unstable_mask:w},navigationType:r}},[l,d,p,m,b,y,r,w]);return eo(S!=null,` is not able to match the URL "${d}${p}${m}" because it does not start with the basename, so the won't render anything.`),S==null?null:re.createElement(Ls.Provider,{value:u},re.createElement(vb.Provider,{children:t,value:S}))}function zG({children:e,location:t}){return kG(mv(e),t)}function mv(e,t=[]){let n=[];return re.Children.forEach(e,(r,a)=>{if(!re.isValidElement(r))return;let s=[...t,a];if(r.type===re.Fragment){n.push.apply(n,mv(r.props.children,s));return}An(r.type===cf,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),An(!r.props.index||!r.props.children,"An index route cannot have child routes.");let o={id:r.props.id||s.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,middleware:r.props.middleware,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(o.children=mv(r.props.children,s)),n.push(o)}),n}var Jy="get",Qy="application/x-www-form-urlencoded";function M3(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function DG(e){return M3(e)&&e.tagName.toLowerCase()==="button"}function qG(e){return M3(e)&&e.tagName.toLowerCase()==="form"}function XG(e){return M3(e)&&e.tagName.toLowerCase()==="input"}function FG(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function WG(e,t){return e.button===0&&(!t||t==="_self")&&!FG(e)}var vy=null;function ZG(){if(vy===null)try{new FormData(document.createElement("form"),0),vy=!1}catch{vy=!0}return vy}var GG=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function r4(e){return e!=null&&!GG.has(e)?(eo(!1,`"${e}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Qy}"`),null):e}function KG(e,t){let n,r,a,s,o;if(qG(e)){let l=e.getAttribute("action");r=l?yc(l,t):null,n=e.getAttribute("method")||Jy,a=r4(e.getAttribute("enctype"))||Qy,s=new FormData(e)}else if(DG(e)||XG(e)&&(e.type==="submit"||e.type==="image")){let l=e.form;if(l==null)throw new Error('Cannot submit a