From 072b0220479e6c5676c0a57b766789f6bdb9018e Mon Sep 17 00:00:00 2001 From: Hizkia Felix Date: Tue, 2 Aug 2022 19:45:47 +0800 Subject: [PATCH] Web UI (#4) * tidy up * webserver: move to module * basic web ui * webserver: improve web ui * webserver: React Web UI * ci: add Dockerfile * doc: add web UI * Bump version * feat(web): configuration page * web: lazy load config page --- .dockerignore | 5 + .github/screenshot.png | Bin 0 -> 163349 bytes .github/workflows/ci.yml | 47 ++ Cargo.lock | 389 ++++++------ Cargo.toml | 7 +- Dockerfile | 44 ++ README.md | 57 +- build.sh | 6 + config.example.toml | 4 +- src/config.rs | 20 +- src/main.rs | 34 +- src/module/mod.rs | 3 +- src/module/notifier.rs | 119 ++-- src/module/recorder.rs | 146 +++-- src/module/web/handler.rs | 70 ++ src/module/web/mod.rs | 116 ++++ src/msgbus.rs | 7 +- src/web/mod.rs | 10 - web/.gitignore | 24 + web/.prettierrc.json | 8 + web/index.html | 13 + web/package.json | 26 + web/src/App.tsx | 43 ++ web/src/api/config.ts | 4 + web/src/api/tasks.ts | 59 ++ web/src/index.css | 5 + web/src/main.tsx | 22 + web/src/pages/ConfigPage.tsx | 15 + web/src/pages/TasksPage.tsx | 142 +++++ web/src/vite-env.d.ts | 1 + web/tsconfig.json | 21 + web/tsconfig.node.json | 9 + web/vite.config.ts | 12 + web/yarn.lock | 1163 ++++++++++++++++++++++++++++++++++ 34 files changed, 2271 insertions(+), 380 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/screenshot.png create mode 100644 .github/workflows/ci.yml create mode 100644 Dockerfile create mode 100644 src/module/web/handler.rs create mode 100644 src/module/web/mod.rs delete mode 100644 src/web/mod.rs create mode 100644 web/.gitignore create mode 100644 web/.prettierrc.json create mode 100644 web/index.html create mode 100644 web/package.json create mode 100644 web/src/App.tsx create mode 100644 web/src/api/config.ts create mode 100644 web/src/api/tasks.ts create mode 100644 web/src/index.css create mode 100644 web/src/main.tsx create mode 100644 web/src/pages/ConfigPage.tsx create mode 100644 web/src/pages/TasksPage.tsx create mode 100644 web/src/vite-env.d.ts create mode 100644 web/tsconfig.json create mode 100644 web/tsconfig.node.json create mode 100644 web/vite.config.ts create mode 100644 web/yarn.lock diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8008351 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +target +temp +videos +web/node_modules +Dockerfile diff --git a/.github/screenshot.png b/.github/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2f5a6b3f8f14cb3f3bf156feeadc26955aec23 GIT binary patch literal 163349 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 V_J#2m`Nl`61FWb4tWbCz^dG(uJ$?WH literal 0 HcmV?d00001 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f37f9a8 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,47 @@ +name: ci + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + images: | + ghcr.io/holoarchivists/hoshinova + tags: | + type=ref,event=branch + type=ref,event=pr + type=sha + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to GHCR + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/Cargo.lock b/Cargo.lock index d0042d6..7bf4334 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -281,6 +281,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + [[package]] name = "block-buffer" version = "0.10.2" @@ -417,22 +426,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - [[package]] name = "cpufeatures" version = "0.2.2" @@ -474,13 +467,22 @@ dependencies = [ "syn", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ - "block-buffer", + "block-buffer 0.10.2", "crypto-common", ] @@ -506,15 +508,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "fastrand" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" -dependencies = [ - "instant", -] - [[package]] name = "firestorm" version = "0.5.1" @@ -537,21 +530,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.0.1" @@ -714,7 +692,7 @@ dependencies = [ [[package]] name = "hoshinova" -version = "0.1.0" +version = "0.2.0" dependencies = [ "actix-web", "anyhow", @@ -727,10 +705,11 @@ dependencies = [ "humantime-serde", "lazy_static", "log", - "openssl-sys", + "mime_guess", "quick-xml", "regex", "reqwest", + "rust-embed", "serde", "serde_regex", "tokio", @@ -812,16 +791,16 @@ dependencies = [ ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "hyper-rustls" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" dependencies = [ - "bytes", + "http", "hyper", - "native-tls", + "rustls", "tokio", - "tokio-native-tls", + "tokio-rustls", ] [[package]] @@ -845,15 +824,6 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - [[package]] name = "ipnet" version = "2.5.0" @@ -957,6 +927,16 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "miniz_oxide" version = "0.5.3" @@ -978,24 +958,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "native-tls" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "num-integer" version = "0.1.45" @@ -1041,59 +1003,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" [[package]] -name = "openssl" -version = "0.10.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-src" -version = "111.22.0+1.1.1q" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.75" +name = "opaque-debug" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" -dependencies = [ - "autocfg", - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "os_str_bytes" @@ -1148,12 +1061,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" - [[package]] name = "ppv-lite86" version = "0.2.16" @@ -1268,15 +1175,6 @@ version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - [[package]] name = "reqwest" version = "0.11.11" @@ -1293,29 +1191,80 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-tls", + "hyper-rustls", "ipnet", "js-sys", "lazy_static", "log", "mime", - "native-tls", "percent-encoding", "pin-project-lite", + "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", - "tokio-native-tls", + "tokio-rustls", "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "webpki-roots", "winreg", ] +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rust-embed" +version = "6.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a17e5ac65b318f397182ae94e532da0ba56b88dd1200b774715d36c4943b1c3" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94e763e24ba2bf0c72bc6be883f967f794a019fafd1b86ba1daff9c91a7edd30" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "7.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "756feca3afcbb1487a1d01f4ecd94cf8ec98ea074c55a69e7136d29fb6166029" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "rustc_version" version = "0.4.0" @@ -1325,6 +1274,27 @@ dependencies = [ "semver", ] +[[package]] +name = "rustls" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +dependencies = [ + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" +dependencies = [ + "base64", +] + [[package]] name = "ryu" version = "1.0.10" @@ -1332,13 +1302,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] -name = "schannel" -version = "0.1.20" +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "lazy_static", - "windows-sys", + "winapi-util", ] [[package]] @@ -1348,26 +1317,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] -name = "security-framework" -version = "2.6.1" +name = "sct" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" -dependencies = [ - "core-foundation-sys", - "libc", + "ring", + "untrusted", ] [[package]] @@ -1437,7 +1393,20 @@ checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.3", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", ] [[package]] @@ -1471,6 +1440,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "strsim" version = "0.10.0" @@ -1488,20 +1463,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - [[package]] name = "termcolor" version = "1.1.3" @@ -1594,13 +1555,14 @@ dependencies = [ ] [[package]] -name = "tokio-native-tls" -version = "0.3.0" +name = "tokio-rustls" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "native-tls", + "rustls", "tokio", + "webpki", ] [[package]] @@ -1665,6 +1627,15 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.8" @@ -1686,6 +1657,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "url" version = "2.2.2" @@ -1698,18 +1675,23 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" @@ -1808,6 +1790,25 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf" +dependencies = [ + "webpki", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 40fb5de..4f9365f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hoshinova" -version = "0.1.0" +version = "0.2.0" edition = "2021" repository = "https://github.com/HoloArchivists/hoshinova" homepage = "https://github.com/HoloArchivists/hoshinova" @@ -13,12 +13,13 @@ tokio = { version = "1.20.0", features = ["full"] } # Web actix-web = "4" -reqwest = { version = "0.11", features = ["gzip", "json"] } -openssl-sys = { version = "0.9", features = ["vendored"] } +reqwest = { version = "0.11", default-features = false, features = ["gzip", "json", "rustls-tls"] } +mime_guess = "2" # Utilities anyhow = "1.0" lazy_static = "1.4.0" +rust-embed = "6.4.0" # Serde humantime = "2.1.0" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2d4a195 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +FROM node:16 AS web-builder + +# Cache dependencies +WORKDIR /src +COPY web/package.json web/yarn.lock ./ +RUN yarn install + +# Build +COPY web . +RUN yarn build + +FROM rust:1.62-alpine AS rust-builder +RUN apk add --no-cache musl-dev + +# Cache dependencies +WORKDIR /src +COPY Cargo.toml Cargo.lock ./ +RUN set -ex; \ + mkdir src; \ + echo 'fn main() {}' > src/main.rs; \ + cargo build --release --target x86_64-unknown-linux-musl; \ + rm -rf src; + +# Build +COPY . . +COPY --from=web-builder /src /src/web +RUN touch src/main.rs && \ + cargo build --release --target x86_64-unknown-linux-musl + +FROM alpine AS runner +WORKDIR /app +RUN set -ex; \ + apk add --no-cache ffmpeg wget unzip; \ + wget -O /app/ytarchive.zip https://github.com/Kethsar/ytarchive/releases/download/latest/ytarchive_linux_amd64.zip; \ + unzip /app/ytarchive.zip -d /usr/local/bin/; \ + rm /app/ytarchive.zip; \ + apk del wget unzip; + +USER 1000 +COPY --from=rust-builder --chown=1000:1000 \ + /src/target/x86_64-unknown-linux-musl/release/hoshinova \ + /app/hoshinova + +CMD ["/app/hoshinova"] diff --git a/README.md b/README.md index 29ff956..d0d82cd 100644 --- a/README.md +++ b/README.md @@ -6,23 +6,51 @@ **⚠️ Unstable Software**: This program is under heavy development. It works, but will still undergo a lot of breaking changes. Upgrade with caution. +![Screenshot of Web UI](.github/screenshot.png) + ## Install +You can get hoshinova using either one of the following methods. + +### Get the latest release + +You can download the latest binaries +[from the releases page](https://github.com/HoloArchivists/hoshinova/releases). + Make sure you have [ytarchive](https://github.com/Kethsar/ytarchive) and [ffmpeg](https://ffmpeg.org/) installed and executable in your PATH ([guide](https://github.com/HoloArchivists/hollow_memories)). -You can -[download the latest release](https://github.com/HoloArchivists/hoshinova/releases), -or build it yourself. You'll need to have [Rust](https://www.rust-lang.org/) -installed. +### Run from source ```bash # Clone the repository git clone https://github.com/HoloArchivists/hoshinova -# Build and run -cd hoshinova && cargo run --release +# Build the web UI +cd hoshinova/web +yarn install && yarn build + +# Build and run hoshinova +cd .. +cargo run +``` + +### Get the docker image + +``` +docker pull ghcr.io/holoarchivists/hoshinova +``` + +Run with Docker: + +``` +docker run -d \ + -p 1104:1104 \ + -v $(pwd)/config.toml:/app/config.toml:ro \ + -v $(pwd)/videos:/app/videos \ + -v $(pwd)/temp:/app/temp + ghcr.io/holoarchivists/hoshinova ``` ## Configure @@ -89,6 +117,23 @@ about. Right now there are only 4 events: | `done` | The stream is over | | `failed` | Something went wrong while recording the stream | +### webserver + +A webserver is available for you to view and monitor your tasks. If you don't +want this, you can remove this section. + +```toml +[webserver] +bind_address = "0.0.0.0:1104" +``` + +`bind_address` is the address the webserver will listen to. Setting the address +to `0.0.0.0:1104` will let anyone access the web interface. If you only want to +access it from the computer you're running `hoshinova` from, set the address to +`127.0.0.1:1104`. + +Feel free to adjust the port `:1104` to any number up to `65535`. + ### channel configuration ```toml diff --git a/build.sh b/build.sh index e5d2df4..f0db381 100755 --- a/build.sh +++ b/build.sh @@ -9,6 +9,12 @@ set -e # See: https://github.com/cross-rs/cross/issues/724 # +# Pre-build: build the web UI +pushd web + yarn install + yarn build +popd + # Install cross cargo install cross --git https://github.com/cross-rs/cross diff --git a/config.example.toml b/config.example.toml index 914f391..49fd9ce 100644 --- a/config.example.toml +++ b/config.example.toml @@ -17,10 +17,10 @@ poll_interval = "30s" webhook_url = "https://discordapp.com/api/webhooks/123456789012345678/abcdefghijklmnopqrstuvwxyz" notify_on = ["waiting", "recording", "done", "failed"] -# Coming soon, a web interface to view and manage tasks. +# A web interface to view and manage tasks. # Optional, remove this section to disable. [webserver] -bind_address = "127.0.0.1:1104" +bind_address = "0.0.0.0:1104" [[channel]] id = "UCP0BspO_AMEe3aQqqpo89Dg" diff --git a/src/config.rs b/src/config.rs index 0854b64..6292465 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,17 +1,17 @@ use crate::module::TaskStatus; use anyhow::Result; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; -#[derive(Clone, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct Config { pub ytarchive: YtarchiveConfig, pub scraper: ScraperConfig, - pub notifier: NotifierConfig, + pub notifier: Option, pub webserver: Option, pub channel: Vec, } -#[derive(Clone, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct YtarchiveConfig { pub executable_path: String, pub working_directory: String, @@ -19,34 +19,34 @@ pub struct YtarchiveConfig { pub quality: String, } -#[derive(Clone, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct ScraperConfig { pub rss: ScraperRSSConfig, } -#[derive(Clone, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct ScraperRSSConfig { #[serde(with = "humantime_serde")] pub poll_interval: std::time::Duration, } -#[derive(Clone, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct NotifierConfig { pub discord: Option, } -#[derive(Clone, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct NotifierDiscordConfig { pub webhook_url: String, pub notify_on: Vec, } -#[derive(Clone, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct WebserverConfig { pub bind_address: String, } -#[derive(Clone, Deserialize, Debug)] +#[derive(Clone, Serialize, Deserialize, Debug)] pub struct ChannelConfig { pub id: String, pub name: String, diff --git a/src/main.rs b/src/main.rs index 63b1bd2..b03f07e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,6 @@ extern crate log; use crate::module::Module; use crate::msgbus::MessageBus; -use actix_web::{App, HttpServer}; use anyhow::{anyhow, Result}; use clap::Parser; use std::{process::Command, sync::Arc}; @@ -11,7 +10,6 @@ use tokio::sync::RwLock; mod config; mod module; mod msgbus; -mod web; pub static APP_NAME: &str = concat!(env!("CARGO_PKG_NAME"), " v", env!("CARGO_PKG_VERSION")); pub static APP_USER_AGENT: &str = concat!( @@ -109,24 +107,7 @@ async fn main() -> Result<()> { let h_scraper = run_module!(bus, module::scraper::RSS::new(config.clone())); let h_recorder = run_module!(bus, module::recorder::YTArchive::new(config.clone())); let h_notifier = run_module!(bus, module::notifier::Discord::new(config.clone())); - - // Start webserver - let h_server = tokio::spawn(async move { - let config = config.clone(); - let config = &*config.read().await; - if let Some(webserver) = &config.webserver { - let ws = HttpServer::new(|| App::new().configure(web::configure)) - .bind(webserver.bind_address.clone()) - .map_err(|e| anyhow!("Failed to bind to address: {}", e))? - .run(); - info!("Starting webserver on {}", webserver.bind_address); - return ws - .await - .map_err(|e| anyhow!("Failed to start webserver: {}", e)); - }; - debug!("No webserver configured"); - Ok::<(), anyhow::Error>(()) - }); + let h_webserver = run_module!(bus, module::web::WebServer::new(config.clone())); // Listen for signals let closer = bus.add_tx(); @@ -143,7 +124,14 @@ async fn main() -> Result<()> { let h_bus = tokio::task::spawn(async move { bus.start().await }); // Wait for all tasks to finish - futures::try_join!(h_scraper, h_recorder, h_notifier, h_signal, h_bus, h_server) - .map(|_| ()) - .map_err(|e| anyhow!("Task errored: {}", e)) + futures::try_join!( + h_scraper, + h_recorder, + h_notifier, + h_signal, + h_bus, + h_webserver, + ) + .map(|_| ()) + .map_err(|e| anyhow!("Task errored: {}", e)) } diff --git a/src/module/mod.rs b/src/module/mod.rs index 6edccb7..d9521c1 100644 --- a/src/module/mod.rs +++ b/src/module/mod.rs @@ -9,6 +9,7 @@ use tokio::sync::{mpsc, RwLock}; pub mod notifier; pub mod recorder; pub mod scraper; +pub mod web; #[derive(Debug, Clone)] pub enum Message { @@ -17,7 +18,7 @@ pub enum Message { RecordingStatus(RecordingStatus), } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize)] pub struct Task { pub title: String, pub video_id: String, diff --git a/src/module/notifier.rs b/src/module/notifier.rs index 27ebee0..55011cc 100644 --- a/src/module/notifier.rs +++ b/src/module/notifier.rs @@ -60,74 +60,73 @@ impl Module for Discord { async fn run(&self, _tx: &BusTx, rx: &mut mpsc::Receiver) -> Result<()> { // Listen for messages while let Some(message) = rx.recv().await { - match message { - Message::ToNotify(notification) => { - let Notification { task, status } = notification; + // Wait for notifications + let Notification { task, status } = match message { + Message::ToNotify(notification) => notification, + _ => continue, + }; - // Get configuration - let cfg: &Config = &*self.config.read().await; - let cfg = match &cfg.notifier.discord { - Some(discord) => discord, - None => { - debug!("No Discord webhook configured"); - continue; - } - }; + // Get configuration + let cfg: &Config = &*self.config.read().await; + let cfg = match (|| cfg.clone().notifier?.discord)() { + Some(cfg) => cfg, + None => continue, + }; - // Check if we should notify - if !cfg.notify_on.contains(&status) { - debug!("Not notifying on status {:?}", status); - continue; - } + // Check if we should notify + if !cfg.notify_on.contains(&status) { + debug!("Not notifying on status {:?}", status); + continue; + } - let (title, color) = match status { - TaskStatus::Waiting => ("Waiting for Live", 0xebd045), - TaskStatus::Recording => ("Recording", 0x58b9ff), - TaskStatus::Done => ("Done", 0x45eb45), - TaskStatus::Failed => ("Failed", 0xeb4545), - }; - let timestamp = chrono::Utc::now().to_rfc3339(); + let (title, color) = match status { + TaskStatus::Waiting => ("Waiting for Live", 0xebd045), + TaskStatus::Recording => ("Recording", 0x58b9ff), + TaskStatus::Done => ("Done", 0x45eb45), + TaskStatus::Failed => ("Failed", 0xeb4545), + }; + let timestamp = chrono::Utc::now().to_rfc3339(); - // Construct the payload - let message = WebhookMessage { - content: "".into(), - embeds: vec![DiscordEmbed { - title: title.into(), - description: format!( - "[{}](https://youtu.be/{})", - task.title, task.video_id, - ), - color, - author: DiscordEmbedAuthor { - name: task.channel_name, - url: format!("https://www.youtube.com/channel/{}", task.channel_id), - icon_url: task.channel_picture, - }, - footer: DiscordEmbedFooter { - text: APP_NAME.into(), - }, - timestamp: timestamp, - thumbnail: DiscordEmbedThumbnail { - url: task.video_picture, - }, - }], - }; + // Construct the payload + let message = WebhookMessage { + content: "".into(), + embeds: vec![DiscordEmbed { + title: title.into(), + description: format!("[{}](https://youtu.be/{})", task.title, task.video_id), + color, + author: DiscordEmbedAuthor { + name: task.channel_name, + url: format!("https://www.youtube.com/channel/{}", task.channel_id), + icon_url: task.channel_picture, + }, + footer: DiscordEmbedFooter { + text: APP_NAME.into(), + }, + timestamp: timestamp, + thumbnail: DiscordEmbedThumbnail { + url: task.video_picture, + }, + }], + }; - // Send the webhook - let res = self - .client - .post(&cfg.webhook_url) - .header("Content-Type", "application/json") - .json(&message) - .send() - .await; + // Send the webhook + let res = self + .client + .post(&cfg.webhook_url) + .header("Content-Type", "application/json") + .json(&message) + .send() + .await; - match res { - Ok(_) => info!("Sent Discord webhook"), - Err(e) => warn!("Failed to send Discord webhook: {}", e), + match res { + Ok(res) => { + if res.status().is_success() { + info!("Sent Discord webhook"); + } else { + error!("Failed to send Discord webhook: {}", res.status()); } } - _ => (), + Err(e) => error!("Failed to send Discord webhook: {}", e), } } diff --git a/src/module/recorder.rs b/src/module/recorder.rs index f253502..4a22eae 100644 --- a/src/module/recorder.rs +++ b/src/module/recorder.rs @@ -6,6 +6,7 @@ use async_trait::async_trait; use chrono::{DateTime, Utc}; use lazy_static::lazy_static; use regex::Regex; +use serde::Serialize; use std::{ fs, path::Path, @@ -189,48 +190,50 @@ impl YTArchive { } // Check if status changed - if old.state != status.state { - let message = match status.state { - YTAState::Waiting(_) => { - info!("{} Waiting for stream to go live", task_name); - Some(Message::ToNotify(Notification { - task: task.clone(), - status: TaskStatus::Waiting, - })) - } - YTAState::Recording => { - info!("{} Recording started", task_name); - Some(Message::ToNotify(Notification { - task: task.clone(), - status: TaskStatus::Recording, - })) - } - YTAState::Finished => { - info!("{} Recording finished", task_name); - Some(Message::ToNotify(Notification { - task: task.clone(), - status: TaskStatus::Done, - })) - } - YTAState::AlreadyProcessed => { - info!("{} Video already processed, skipping", task_name); - None - } - YTAState::Interrupted => { - info!("{} Recording failed: interrupted", task_name); - Some(Message::ToNotify(Notification { - task: task.clone(), - status: TaskStatus::Failed, - })) - } - _ => None, - }; + if old.state == status.state { + continue; + } - if let Some(message) = message { - // Exit the loop if message failed to send - if let Err(_) = bus.send(message).await { - break; - } + let message = match status.state { + YTAState::Waiting(_) => { + info!("{} Waiting for stream to go live", task_name); + Some(Message::ToNotify(Notification { + task: task.clone(), + status: TaskStatus::Waiting, + })) + } + YTAState::Recording => { + info!("{} Recording started", task_name); + Some(Message::ToNotify(Notification { + task: task.clone(), + status: TaskStatus::Recording, + })) + } + YTAState::Finished => { + info!("{} Recording finished", task_name); + Some(Message::ToNotify(Notification { + task: task.clone(), + status: TaskStatus::Done, + })) + } + YTAState::AlreadyProcessed => { + info!("{} Video already processed, skipping", task_name); + None + } + YTAState::Interrupted => { + info!("{} Recording failed: interrupted", task_name); + Some(Message::ToNotify(Notification { + task: task.clone(), + status: TaskStatus::Failed, + })) + } + _ => None, + }; + + if let Some(message) = message { + // Exit the loop if message failed to send + if let Err(_) = bus.send(message).await { + break; } } } @@ -243,6 +246,7 @@ impl YTArchive { trace!("{} Stdout monitor quit: {:?}", task_name, r_stdout); trace!("{} Stderr monitor quit: {:?}", task_name, r_stderr); + // Skip moving files if it didn't finish if status.state != YTAState::Finished { return Ok(()); } @@ -258,29 +262,26 @@ impl YTArchive { let destpath = Path::new(&task.output_directory).join(filename); // Try to rename the file into the output directory - match fs::rename(frompath, &destpath) { - Ok(()) => { - info!("{} Moved output file to {}", task_name, destpath.display(),); - Ok(()) - } - Err(_) => { - debug!( - "{} Failed to rename file to output, trying to copy", - task_name, - ); - - // Copy the file into the output directory - fs::copy(frompath, &destpath) - .map_err(|e| anyhow!("Failed to copy file to output: {:?}", e))?; - info!( - "{} Copied output file to {}, removing original", - task_name, - destpath.display(), - ); - fs::remove_file(frompath) - .map_err(|e| anyhow!("Failed to remove original file: {:?}", e)) - } + if let Err(_) = fs::rename(frompath, &destpath) { + debug!( + "{} Failed to rename file to output, trying to copy", + task_name, + ); + + // Copy the file into the output directory + fs::copy(frompath, &destpath) + .map_err(|e| anyhow!("Failed to copy file to output: {:?}", e))?; + info!( + "{} Copied output file to {}, removing original", + task_name, + destpath.display(), + ); + fs::remove_file(frompath) + .map_err(|e| anyhow!("Failed to remove original file: {:?}", e))?; } + + info!("{} Moved output file to {}", task_name, destpath.display()); + Ok(()) } } @@ -315,11 +316,12 @@ impl Module for YTArchive { } /// The current state of ytarchive. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize)] pub struct YTAStatus { version: Option, state: YTAState, last_output: Option, + last_update: chrono::DateTime, video_fragments: Option, audio_fragments: Option, total_size: Option, @@ -327,7 +329,7 @@ pub struct YTAStatus { output_file: Option, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Serialize)] pub enum YTAState { Idle, Waiting(Option>), @@ -343,11 +345,15 @@ fn strip_ansi(s: &str) -> String { static ref RE: Regex = Regex::new(concat!( r"[\u001B\u009B][[\\]()#;?]*", r"(?:(?:(?:[a-zA-Z\\d]*(?:;[a-zA-Z\\d]*)*)?\u0007)|", - r"(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))" + r"(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))", )) .expect("Failed to compile ANSI stripping regex"); } - RE.replace_all(s, "").to_string() + let stripped = RE.replace_all(s, "").to_string(); + stripped + .strip_suffix("\u{001b}[K") + .unwrap_or(&stripped) + .to_string() } impl YTAStatus { @@ -356,6 +362,7 @@ impl YTAStatus { version: None, state: YTAState::Idle, last_output: None, + last_update: chrono::Utc::now(), video_fragments: None, audio_fragments: None, total_size: None, @@ -378,15 +385,16 @@ impl YTAStatus { /// Final file: /path/to/output.mp4 pub fn parse_line(&mut self, line: &str) { self.last_output = Some(line.to_string()); + self.last_update = chrono::Utc::now(); if line.starts_with("Video Fragments: ") { self.state = YTAState::Recording; let mut parts = line.split(';').map(|s| s.split(':').nth(1).unwrap_or("")); if let Some(x) = parts.next() { - self.video_fragments = x.parse().ok(); + self.video_fragments = x.trim().parse().ok(); }; if let Some(x) = parts.next() { - self.audio_fragments = x.parse().ok(); + self.audio_fragments = x.trim().parse().ok(); }; if let Some(x) = parts.next() { self.total_size = Some(strip_ansi(x)); diff --git a/src/module/web/handler.rs b/src/module/web/handler.rs new file mode 100644 index 0000000..48a7ea8 --- /dev/null +++ b/src/module/web/handler.rs @@ -0,0 +1,70 @@ +use super::TaskMap; +use crate::config::Config; +use actix_web::{ + get, + web::{self, Data}, + HttpResponse, Responder, +}; +use std::sync::Arc; +use tokio::sync::RwLock; + +#[derive(rust_embed::RustEmbed)] +#[folder = "web/dist"] +struct StaticFiles; + +/// Configure routes for the webserver +pub fn configure(cfg: &mut actix_web::web::ServiceConfig) { + cfg.service(get_tasks); + cfg.service(get_version); + cfg.service(get_config); + cfg.service(serve_static); +} + +#[get("/api/tasks")] +async fn get_tasks(data: TaskMap) -> actix_web::Result { + Ok(HttpResponse::Ok().json( + data.read() + .await + .iter() + .map(|(_, v)| v.to_owned()) + .collect::>(), + )) +} + +#[get("/api/version")] +async fn get_version() -> actix_web::Result { + Ok(HttpResponse::Ok().body(crate::APP_NAME.to_owned())) +} + +#[get("/api/config")] +async fn get_config(config: Data>>) -> actix_web::Result { + Ok(HttpResponse::Ok().json(config.read().await.to_owned())) +} + +#[get("/{_:.*}")] +async fn serve_static(path: web::Path) -> impl Responder { + let mut path = path.into_inner(); + if path.is_empty() { + path = "index.html".to_string(); + } + + // If debug mode, serve the files from the static folder + #[cfg(debug_assertions)] + return tokio::fs::read(format!("web/dist/{}", path)) + .await + .map(|bytes| { + HttpResponse::Ok() + .content_type(mime_guess::from_path(path).first_or_octet_stream().as_ref()) + .body(bytes) + }) + .unwrap_or_else(|_| HttpResponse::NotFound().body("404")); + + // Otherwise serve the files from the embedded folder + #[cfg(not(debug_assertions))] + return match StaticFiles::get(&path) { + Some(content) => HttpResponse::Ok() + .content_type(mime_guess::from_path(path).first_or_octet_stream().as_ref()) + .body(content.data.into_owned()), + None => HttpResponse::NotFound().body("404 Not Found"), + }; +} diff --git a/src/module/web/mod.rs b/src/module/web/mod.rs new file mode 100644 index 0000000..822dd9a --- /dev/null +++ b/src/module/web/mod.rs @@ -0,0 +1,116 @@ +use super::{recorder::YTAStatus, Message, Module, Task}; +use crate::{ + config::{Config, WebserverConfig}, + msgbus::BusTx, +}; +use actix_web::{web::Data, App, HttpServer}; +use anyhow::{anyhow, Result}; +use async_trait::async_trait; +use serde::Serialize; +use std::collections::HashMap; +use std::sync::Arc; +use tokio::{ + select, + sync::{mpsc, RwLock}, +}; + +mod handler; + +pub struct WebServer { + config: Arc>, +} + +#[derive(Debug, Clone, Serialize)] +pub struct TaskWithStatus { + pub task: Task, + pub status: YTAStatus, +} + +type TaskMap = Data>>; + +impl WebServer { + /// Return the webserver configuration + async fn get_wsconfig(&self) -> Option { + let config = &*self.config.read().await; + config.webserver.to_owned() + } + + async fn bus_listen_loop( + &self, + rx: &mut mpsc::Receiver, + tasks: TaskMap, + ) -> Result<()> { + while let Some(msg) = rx.recv().await { + match msg { + Message::RecordingStatus(recstat) => { + let id = recstat.task.video_id.clone(); + let mut tasks = tasks.write().await; + tasks.insert( + id, + TaskWithStatus { + task: recstat.task, + status: recstat.status, + }, + ); + } + _ => (), + } + } + Ok(()) + } +} + +#[async_trait] +impl Module for WebServer { + fn new(config: Arc>) -> Self { + Self { config } + } + + async fn run(&self, tx: &BusTx, rx: &mut mpsc::Receiver) -> Result<()> { + // Get the configuration + let ws_cfg = match self.get_wsconfig().await { + Some(cfg) => cfg, + None => { + debug!("No webserver configured"); + return Ok(()); + } + }; + + // Create a HashMap to hold the tasks + let tasks = Data::new(RwLock::new(HashMap::new())); + + // Listen to the bus + let busll = self.bus_listen_loop(rx, tasks.clone()); + + // Set up webserver + info!("Starting webserver on {}", ws_cfg.bind_address); + let config = Data::new(self.config.clone()); + let tx = Data::new(tx.clone()); + let ws = HttpServer::new(move || { + App::new() + .app_data(config.clone()) + .app_data(tx.clone()) + .app_data(tasks.clone()) + .configure(handler::configure) + }) + .disable_signals() + .bind(ws_cfg.bind_address) + .map_err(|e| anyhow!("Failed to bind to address: {}", e))? + .run(); + + let handle = ws.handle(); + + select! { + ret = ws => { + // Close the receiver if the webserver stops + rx.close(); + ret.map_err(|e| anyhow!("Failed to start webserver: {}", e)) + }, + ret = busll => { + // Stop the webserver if the bus loop stops + handle.stop(true).await; + ret.map_err(|e| anyhow!("Bus loop crashed: {}", e)) + } + } + } +} diff --git a/src/msgbus.rs b/src/msgbus.rs index 454a90b..c169131 100644 --- a/src/msgbus.rs +++ b/src/msgbus.rs @@ -44,10 +44,13 @@ impl MessageBus { /// Starts the message bus. This will continue running until the bus is /// closed. pub async fn start(&mut self) { - while let Some(BusMessage::Message(msg)) = self.mix_rx.recv().await { + 'out: while let Some(BusMessage::Message(msg)) = self.mix_rx.recv().await { for tx in &mut self.mix_tx { match tx.try_send(msg.clone()) { - Err(e) => error!("Failed to send message: {}", e), + Err(e) => { + error!("Failed to send message: {}", e); + break 'out; + } _ => (), } } diff --git a/src/web/mod.rs b/src/web/mod.rs deleted file mode 100644 index 4a39238..0000000 --- a/src/web/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -use actix_web::{get, web::ServiceConfig, HttpResponse, Responder}; - -pub fn configure(app: &mut ServiceConfig) { - app.service(hello); -} - -#[get("/")] -async fn hello() -> impl Responder { - HttpResponse::Ok().body("Hello world!") -} diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web/.prettierrc.json b/web/.prettierrc.json new file mode 100644 index 0000000..ea23990 --- /dev/null +++ b/web/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "useTabs": false, + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "trailingComma": "es5", + "proseWrap": "always" +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..c240572 --- /dev/null +++ b/web/index.html @@ -0,0 +1,13 @@ + + + + + + + hoshinova + + +
+ + + diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..b3fe51f --- /dev/null +++ b/web/package.json @@ -0,0 +1,26 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.10.0", + "@mantine/core": "^5.0.2", + "@mantine/hooks": "^5.0.2", + "@tanstack/react-query": "^4.0.10", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.15", + "@types/react-dom": "^18.0.6", + "@vitejs/plugin-react": "^2.0.0", + "typescript": "^4.6.4", + "vite": "^3.0.0" + } +} diff --git a/web/src/App.tsx b/web/src/App.tsx new file mode 100644 index 0000000..a769ac6 --- /dev/null +++ b/web/src/App.tsx @@ -0,0 +1,43 @@ +import { Container, Loader, Tabs } from '@mantine/core'; +import React, { Suspense } from 'react'; + +const TasksPage = React.lazy(() => import('./pages/TasksPage')); +const ConfigPage = React.lazy(() => import('./pages/ConfigPage')); + +const LoadingContainer = () => ( + ({ + display: 'flex', + justifyContent: 'center', + })} + > + + +); + +function App() { + return ( + <> + + + Tasks + Configuration + + + + }> + + + + + }> + + + + + + ); +} + +export default App; diff --git a/web/src/api/config.ts b/web/src/api/config.ts new file mode 100644 index 0000000..51b4a5c --- /dev/null +++ b/web/src/api/config.ts @@ -0,0 +1,4 @@ +import { useQuery } from '@tanstack/react-query'; + +export const useQueryConfig = () => + useQuery(['config'], () => fetch('/api/config').then((res) => res.json())); diff --git a/web/src/api/tasks.ts b/web/src/api/tasks.ts new file mode 100644 index 0000000..6184840 --- /dev/null +++ b/web/src/api/tasks.ts @@ -0,0 +1,59 @@ +import { useQuery } from '@tanstack/react-query'; + +export type TaskWithStatus = { + task: Task; + status: Status; +}; + +export type Task = { + title: string; + video_id: string; + video_picture: string; + channel_name: string; + channel_id: string; + channel_picture: string; + output_directory: string; +}; + +export type Status = { + version: string; + state: State; + last_output: string; + last_update: string; + video_fragments: number | null; + audio_fragments: number | null; + total_size: string | null; + video_quality: string | null; + output_file: string | null; +}; + +export type State = + | { Waiting: string } + | 'Recording' + | 'Muxing' + | 'Finished' + | 'Idle' + | 'AlreadyProcessed' + | 'Interrupted'; + +export const stateString = (state: State) => { + if (typeof state === 'object' && 'Waiting' in state) + return 'Waiting (' + state.Waiting + ')'; + else if (state === 'AlreadyProcessed') return 'Already Processed'; + return state; +}; +export const stateKey = (state: State) => + typeof state === 'object' ? Object.keys(state)[0] : state; + +export const useQueryTasks = () => + useQuery( + ['tasks'], + () => + fetch('/api/tasks') + .then((res) => res.json()) + .then((res) => res as TaskWithStatus[]), + { + refetchInterval: 1000, + keepPreviousData: true, + } + ); diff --git a/web/src/index.css b/web/src/index.css new file mode 100644 index 0000000..f4c3eaf --- /dev/null +++ b/web/src/index.css @@ -0,0 +1,5 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, + helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, + sans-serif; +} diff --git a/web/src/main.tsx b/web/src/main.tsx new file mode 100644 index 0000000..fbea4c1 --- /dev/null +++ b/web/src/main.tsx @@ -0,0 +1,22 @@ +import { MantineProvider } from '@mantine/core'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import './index.css'; + +const queryClient = new QueryClient(); + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + + + + + +); diff --git a/web/src/pages/ConfigPage.tsx b/web/src/pages/ConfigPage.tsx new file mode 100644 index 0000000..84e421f --- /dev/null +++ b/web/src/pages/ConfigPage.tsx @@ -0,0 +1,15 @@ +import { Code, Container, Text } from '@mantine/core'; +import { useQueryConfig } from '../api/config'; + +const ConfigPage = () => { + const qConfig = useQueryConfig(); + + return ( + + {JSON.stringify(qConfig.data, null, 2)} + Configuration editing coming soon(tm) + + ); +}; + +export default ConfigPage; diff --git a/web/src/pages/TasksPage.tsx b/web/src/pages/TasksPage.tsx new file mode 100644 index 0000000..faaca0c --- /dev/null +++ b/web/src/pages/TasksPage.tsx @@ -0,0 +1,142 @@ +import { + Anchor, + AspectRatio, + Badge, + Card, + Image, + MediaQuery, + Stack, + Table, + Text, +} from '@mantine/core'; +import { + State, + stateKey, + stateString, + TaskWithStatus, + useQueryTasks, +} from '../api/tasks'; + +const TaskStateBadge = ({ state }: { state: State }) => ( + + {stateString(state)} + +); + +const rowElements = ({ task, status }: TaskWithStatus) => [ + , + <> + + {task.title} + + + {task.channel_name} + + , + , + <> + {status.total_size === null ? ( + 'None' + ) : ( + <> + V: {status.video_fragments || '?'} / A: {status.audio_fragments || '?'}{' '} + / DL: {status.total_size || '?'} + + )} + , +]; + +const TasksPage = () => { + const qTasks = useQueryTasks(); + + const stateSort = [ + 'Recording', + 'Muxing', + 'Waiting', + 'Finished', + 'Idle', + 'AlreadyProcessed', + 'Interrupted', + ]; + const tasks = !qTasks.data + ? [] + : qTasks.data.sort( + (a, b) => + stateSort.indexOf(stateKey(a.status.state)) - + stateSort.indexOf(stateKey(b.status.state)) + ); + + return ( + <> + + + + + + + + + + + + {tasks.map(({ task, status }) => ( + + {rowElements({ task, status }).map((row, idx) => ( + + ))} + + ))} + +
ThumbnailVideoStatusProgress
{row}
+
+ + + {tasks.map(({ task, status }) => { + const [_, title, state, progres] = rowElements({ task, status }); + return ( + + + + + + + +
{title}
+ {state} +
+ Progress + {progres} +
+
+
+ ); + })} +
+
+ + ); +}; + +export default TasksPage; diff --git a/web/src/vite-env.d.ts b/web/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/web/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..3d0a51a --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/web/tsconfig.node.json b/web/tsconfig.node.json new file mode 100644 index 0000000..9d31e2a --- /dev/null +++ b/web/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/web/vite.config.ts b/web/vite.config.ts new file mode 100644 index 0000000..ea15457 --- /dev/null +++ b/web/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + server: { + proxy: { + '/api': 'http://localhost:1104/', + }, + }, +}); diff --git a/web/yarn.lock b/web/yarn.lock new file mode 100644 index 0000000..2f082b1 --- /dev/null +++ b/web/yarn.lock @@ -0,0 +1,1163 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + dependencies: + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-plugin-utils@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.18.6", "@babel/parser@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + +"@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx-self@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" + integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-source@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz#06e9ae8a14d2bc19ce6e3c447d842032a50598fc" + integrity sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz#2721e96d31df96e3b7ad48ff446995d26bc028ff" + integrity sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.6", "@babel/types@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@emotion/babel-plugin@^11.10.0": + version "11.10.0" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.0.tgz#ae545b8faa6b42d3a50ec86b70b758296f3c4467" + integrity sha512-xVnpDAAbtxL1dsuSelU5A7BnY/lftws0wUexNJZTPsvX/1tM4GZJbclgODhvW4E+NH7E5VFcH0bBn30NvniPJA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/serialize" "^1.1.0" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.0.13" + +"@emotion/cache@^11.10.0": + version "11.10.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.0.tgz#9eb9d3245c2c25ae31028d5ff0929987824c77da" + integrity sha512-3FoUWnDbHWg/pXGCvL46jvpOSJP0xvRZLY8khUcUHGOBcp0S/MCIk+osp84/dby2Ctahw/Ev4KTHWkY3i0g39g== + dependencies: + "@emotion/memoize" "^0.8.0" + "@emotion/sheet" "^1.2.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + stylis "4.0.13" + +"@emotion/hash@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" + integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== + +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + +"@emotion/react@^11.10.0": + version "11.10.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.0.tgz#53c577f063f26493f68a05188fb87528d912ff2e" + integrity sha512-K6z9zlHxxBXwN8TcpwBKcEsBsOw4JWCCmR+BeeOWgqp8GIU1yA2Odd41bwdAAr0ssbQrbJbVnndvv7oiv1bZeQ== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.0" + "@emotion/cache" "^11.10.0" + "@emotion/serialize" "^1.1.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.0.tgz#b1f97b1011b09346a40e9796c37a3397b4ea8ea8" + integrity sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA== + dependencies: + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/unitless" "^0.8.0" + "@emotion/utils" "^1.2.0" + csstype "^3.0.2" + +"@emotion/sheet@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" + integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== + +"@emotion/unitless@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== + +"@emotion/utils@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" + integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== + +"@emotion/weak-memoize@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" + integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== + +"@floating-ui/core@^0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-0.7.3.tgz#d274116678ffae87f6b60e90f88cc4083eefab86" + integrity sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg== + +"@floating-ui/dom@^0.5.3": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-0.5.4.tgz#4eae73f78bcd4bd553ae2ade30e6f1f9c73fe3f1" + integrity sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg== + dependencies: + "@floating-ui/core" "^0.7.3" + +"@floating-ui/react-dom-interactions@0.6.6": + version "0.6.6" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.6.6.tgz#8542e8c4bcbee2cd0d512de676c6a493e0a2d168" + integrity sha512-qnao6UPjSZNHnXrF+u4/n92qVroQkx0Umlhy3Avk1oIebm/5ee6yvDm4xbHob0OjY7ya8WmUnV3rQlPwX3Atwg== + dependencies: + "@floating-ui/react-dom" "^0.7.2" + aria-hidden "^1.1.3" + use-isomorphic-layout-effect "^1.1.1" + +"@floating-ui/react-dom@^0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-0.7.2.tgz#0bf4ceccb777a140fc535c87eb5d6241c8e89864" + integrity sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg== + dependencies: + "@floating-ui/dom" "^0.5.3" + use-isomorphic-layout-effect "^1.1.1" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@mantine/core@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@mantine/core/-/core-5.0.2.tgz#d5b866295bfd046d0d234ed53dc4909374a82e74" + integrity sha512-E4yXTVcoQByIeAp9Mlvh91jcR1UuzgwtvRC5CC5X7gkqyRWwdRQTwgGpZoYDE188SR4oIgfL2jXlC0vo0lhGrQ== + dependencies: + "@floating-ui/react-dom-interactions" "0.6.6" + "@mantine/styles" "5.0.2" + "@mantine/utils" "5.0.2" + "@radix-ui/react-scroll-area" "1.0.0" + react-textarea-autosize "8.3.4" + +"@mantine/hooks@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-5.0.2.tgz#78fc9e2289fa5f176c23ec6a3a00012e55a0e2ae" + integrity sha512-TZsHUmsuPnl+hX6Jt5z8aPU0TWCUC2kuvr1CUBMUbQ2ff0UldcYeuOYmgb7pHlX79BXsGaRKIThLTcLHToYxbA== + +"@mantine/styles@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@mantine/styles/-/styles-5.0.2.tgz#9c5e0afc046c77bc1390582b3ced640b3b6dcc66" + integrity sha512-0brNmE+skz7CEOXnTzW6mVH7fLn40oDvqGxh72LfQj0RS0sQOav4ZFq8sulhOcpM3nYjcF+930DMY+GKKxIsCw== + dependencies: + clsx "1.1.1" + csstype "3.0.9" + +"@mantine/utils@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@mantine/utils/-/utils-5.0.2.tgz#311746843158a9fefd6945ad3e8c43f0df736ea0" + integrity sha512-WCuUL+mJ0+8n3anMYb5no93ohyuMilIG49ZJ7XNZUN3g/ZxoKnKF3dEUpXqIUxKgUIwzAsiS9AFFpZSStgAPvw== + +"@radix-ui/number@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.0.0.tgz#4c536161d0de750b3f5d55860fc3de46264f897b" + integrity sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/primitive@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.0.tgz#e1d8ef30b10ea10e69c76e896f608d9276352253" + integrity sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-compose-refs@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz#37595b1f16ec7f228d698590e78eeed18ff218ae" + integrity sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-context@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.0.tgz#f38e30c5859a9fb5e9aa9a9da452ee3ed9e0aee0" + integrity sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-direction@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.0.0.tgz#a2e0b552352459ecf96342c79949dd833c1e6e45" + integrity sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-presence@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.0.0.tgz#814fe46df11f9a468808a6010e3f3ca7e0b2e84a" + integrity sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.0" + "@radix-ui/react-use-layout-effect" "1.0.0" + +"@radix-ui/react-primitive@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz#376cd72b0fcd5e0e04d252ed33eb1b1f025af2b0" + integrity sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "1.0.0" + +"@radix-ui/react-scroll-area@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.0.tgz#10d0262a52266af528798f36947145f7e3a3a52c" + integrity sha512-3SNFukAjS5remgtpAVR9m3Zgo23ZojBZ8V3TCyR3A+56x2mtVqKlPV4+e8rScZUFMuvtbjIdQCmsJBFBazKZig== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/number" "1.0.0" + "@radix-ui/primitive" "1.0.0" + "@radix-ui/react-compose-refs" "1.0.0" + "@radix-ui/react-context" "1.0.0" + "@radix-ui/react-direction" "1.0.0" + "@radix-ui/react-presence" "1.0.0" + "@radix-ui/react-primitive" "1.0.0" + "@radix-ui/react-use-callback-ref" "1.0.0" + "@radix-ui/react-use-layout-effect" "1.0.0" + +"@radix-ui/react-slot@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.0.tgz#7fa805b99891dea1e862d8f8fbe07f4d6d0fd698" + integrity sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.0" + +"@radix-ui/react-use-callback-ref@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz#9e7b8b6b4946fe3cbe8f748c82a2cce54e7b6a90" + integrity sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-layout-effect@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz#2fc19e97223a81de64cd3ba1dc42ceffd82374dc" + integrity sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@tanstack/query-core@^4.0.0-beta.1": + version "4.0.10" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.0.10.tgz#cae6f818006616dc72c95c863592f5f68b47548a" + integrity sha512-9LsABpZXkWZHi4P1ozRETEDXQocLAxVzQaIhganxbNuz/uA3PsCAJxJTiQrknG5htLMzOF5MqM9G10e6DCxV1A== + +"@tanstack/react-query@^4.0.10": + version "4.0.10" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.0.10.tgz#92c71a2632c06450d848d4964959bd216cde03c0" + integrity sha512-Wn5QhZUE5wvr6rGClV7KeQIUsdTmYR9mgmMZen7DSRWauHW2UTynFg3Kkf6pw+XlxxOLsyLWwz/Q6q1lSpM3TQ== + dependencies: + "@tanstack/query-core" "^4.0.0-beta.1" + "@types/use-sync-external-store" "^0.0.3" + use-sync-external-store "^1.2.0" + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react-dom@^18.0.6": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" + integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^18.0.15": + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + +"@vitejs/plugin-react@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-2.0.0.tgz#12decd097773a00620e44b780b1d2c00df101449" + integrity sha512-zHkRR+X4zqEPNBbKV2FvWSxK7Q6crjMBVIAYroSU8Nbb4M3E5x4qOiLoqJBHtXgr27kfednXjkwr3lr8jS6Wrw== + dependencies: + "@babel/core" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-jsx-self" "^7.18.6" + "@babel/plugin-transform-react-jsx-source" "^7.18.6" + magic-string "^0.26.2" + react-refresh "^0.14.0" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +aria-hidden@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.1.3.tgz#bb48de18dc84787a3c6eee113709c473c64ec254" + integrity sha512-RhVWFtKH5BiGMycI72q2RAFMLQi8JP9bLuQXgR5a8Znp7P5KOIADSJeyfI8PCVxLEp067B2HbP5JIiI/PXIZeA== + dependencies: + tslib "^1.0.0" + +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +browserslist@^4.20.2: + version "4.21.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001370: + version "1.0.30001373" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz#2dc3bc3bfcb5d5a929bec11300883040d7b4b4be" + integrity sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +clsx@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +convert-source-map@^1.5.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +csstype@3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.9.tgz#6410af31b26bd0520933d02cbc64fce9ce3fbf0b" + integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== + +csstype@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== + +debug@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +electron-to-chromium@^1.4.202: + version "1.4.206" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.206.tgz#580ff85b54d7ec0c05f20b1e37ea0becdd7b0ee4" + integrity sha512-h+Fadt1gIaQ06JaIiyqPsBjJ08fV5Q7md+V8bUvQW/9OvXfL2LRICTz2EcnnCP7QzrFTS6/27MRV6Bl9Yn97zA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +esbuild-android-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" + integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== + +esbuild-android-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" + integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== + +esbuild-darwin-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" + integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== + +esbuild-darwin-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" + integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== + +esbuild-freebsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" + integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== + +esbuild-freebsd-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" + integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== + +esbuild-linux-32@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" + integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== + +esbuild-linux-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" + integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== + +esbuild-linux-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" + integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== + +esbuild-linux-arm@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" + integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== + +esbuild-linux-mips64le@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" + integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== + +esbuild-linux-ppc64le@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" + integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== + +esbuild-linux-riscv64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" + integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== + +esbuild-linux-s390x@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" + integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== + +esbuild-netbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" + integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== + +esbuild-openbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" + integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== + +esbuild-sunos-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" + integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== + +esbuild-windows-32@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" + integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== + +esbuild-windows-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz#7d3c09c8652d222925625637bdc7e6c223e0085d" + integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== + +esbuild-windows-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" + integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== + +esbuild@^0.14.47: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.51.tgz#1c8ecbc8db3710da03776211dc3ee3448f7aa51e" + integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== + optionalDependencies: + esbuild-android-64 "0.14.51" + esbuild-android-arm64 "0.14.51" + esbuild-darwin-64 "0.14.51" + esbuild-darwin-arm64 "0.14.51" + esbuild-freebsd-64 "0.14.51" + esbuild-freebsd-arm64 "0.14.51" + esbuild-linux-32 "0.14.51" + esbuild-linux-64 "0.14.51" + esbuild-linux-arm "0.14.51" + esbuild-linux-arm64 "0.14.51" + esbuild-linux-mips64le "0.14.51" + esbuild-linux-ppc64le "0.14.51" + esbuild-linux-riscv64 "0.14.51" + esbuild-linux-s390x "0.14.51" + esbuild-netbsd-64 "0.14.51" + esbuild-openbsd-64 "0.14.51" + esbuild-sunos-64 "0.14.51" + esbuild-windows-32 "0.14.51" + esbuild-windows-64 "0.14.51" + esbuild-windows-arm64 "0.14.51" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hoist-non-react-statics@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +magic-string@^0.26.2: + version "0.26.2" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.2.tgz#5331700e4158cd6befda738bb6b0c7b93c0d4432" + integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== + dependencies: + sourcemap-codec "^1.4.8" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +postcss@^8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + +react-textarea-autosize@8.3.4: + version "8.3.4" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" + integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ== + dependencies: + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.19.0, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rollup@^2.75.6: + version "2.77.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" + integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== + optionalDependencies: + fsevents "~2.3.2" + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +stylis@4.0.13: + version "4.0.13" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" + integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +tslib@^1.0.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +typescript@^4.6.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +use-sync-external-store@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +vite@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.4.tgz#c61688d6b97573e96cf5ac25f2d68597b5ce68e8" + integrity sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA== + dependencies: + esbuild "^0.14.47" + postcss "^8.4.14" + resolve "^1.22.1" + rollup "^2.75.6" + optionalDependencies: + fsevents "~2.3.2" + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==