From da8e37c4a1e7ddb0c2d9352eddf291fcbc3697d4 Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Sun, 24 Nov 2024 00:45:36 -0500 Subject: [PATCH] Security with cryptography (#32) * Add some experiment code for crypto crate * feat: add crypto crate with ssl, rsa, ed25519 for https, encryption, signing * Implement aes encryption helper in crypto crate * ci: add dep for CI rust test (protobuf) * fix: try to fix window CI with next * fix: CI * ci: add dep for ubuntu * ci: fix * fix: openssl lib path in CI * fix: CI * update applications-rs, disable some tests * fix: CI * feat: add file transfer grpc proto and server setup * CI: try to fix CI * fix: missing proto in build.rs * ci: add cargo build before cargo test * fix: grpc file descriptor * ci: fix CI by removing a redundant main.rs * fix: disable local windows test in applications-rs which fails CI * ci: run CI rust test only on ubuntu, windows is failing. will be handled in another PR * fix: vue template * fix: allow unused variable * fix: remove node:buffer type from api shell.ts to avoid frontend build error * try to fix test in create-kunkun * upgrade api to 0.0.44, remove node:buffer * upgrade next template to 15 * feat: turn the default server into a https server * feat: make SSL certificate loadable from env * feat: add conditional SSL cert in debug mode, use local default cert, in production generate new self-signed cert every time app starts * chore: add vscode debug config * feat: add server public key * feat: setup sqlite db encryption * fix: settings hotkey * chore: add .gitkeep * ci: add node-fetch to dep for api package --- .github/workflows/ci.yml | 29 +- .github/workflows/desktop-publish.yml | 2 +- .gitignore | 1 + .vscode/launch.json | 32 + .vscode/tasks.json | 18 + Cargo.lock | 320 +++- Cargo.toml | 9 + .../__tests__/create-template.test.ts | 6 +- apps/desktop/src-tauri/Cargo.toml | 4 +- apps/desktop/src-tauri/build.rs | 5 + apps/desktop/src-tauri/src/lib.rs | 42 +- apps/desktop/src/lib/cmds/builtin.ts | 14 + apps/desktop/src/routes/+layout.svelte | 9 +- apps/desktop/src/routes/auth/+page.svelte | 2 + .../src/routes/settings/+layout.svelte | 2 +- .../src/routes/settings/about/+page.svelte | 6 +- packages/api/jsr.json | 2 +- packages/api/package.json | 3 +- packages/api/src/dev/index.ts | 15 +- packages/api/src/ui/api/shell.ts | 5 +- packages/api/src/version.ts | 2 +- packages/ci/scripts/init-env.ts | 2 + packages/crypto/Cargo.toml | 21 + packages/crypto/src/aes.rs | 54 + packages/crypto/src/ed25519.rs | 92 + packages/crypto/src/lib.rs | 17 + packages/crypto/src/main.rs | 37 + packages/crypto/src/rsa.rs | 120 ++ packages/crypto/src/ssl.rs | 89 + packages/crypto/src/types.rs | 5 + packages/db/.gitignore | 1 + packages/db/Cargo.toml | 5 +- .../demo-worker-template-ext/src/index.ts | 348 ++-- packages/mac-security-rs/src/main.rs | 13 - packages/tauri-plugins/jarvis/Cargo.toml | 12 +- packages/tauri-plugins/jarvis/build.rs | 37 +- packages/tauri-plugins/jarvis/keys/.gitkeep | 0 packages/tauri-plugins/jarvis/package.json | 16 + .../jarvis/proto/file-transfer.proto | 25 + packages/tauri-plugins/jarvis/setup.ts | 16 + .../tauri-plugins/jarvis/src/commands/db.rs | 4 +- .../tauri-plugins/jarvis/src/constants.rs | 9 + packages/tauri-plugins/jarvis/src/lib.rs | 5 +- .../jarvis/src/server/grpc/file_transfer.rs | 39 + .../jarvis/src/server/grpc/greeter.rs | 18 +- .../jarvis/src/server/grpc/mod.rs | 1 + .../tauri-plugins/jarvis/src/server/http.rs | 49 +- .../tauri-plugins/jarvis/src/server/model.rs | 1 + .../tauri-plugins/jarvis/src/server/rest.rs | 3 +- .../tauri-plugins/jarvis/src/server/tls.rs | 11 + packages/tauri-plugins/jarvis/src/utils/db.rs | 7 + .../tauri-plugins/jarvis/src/utils/mod.rs | 1 + .../tauri-plugins/jarvis/src/utils/path.rs | 6 +- .../template-ext-next/next.config.mjs | 6 +- .../templates/template-ext-next/package.json | 12 +- .../templates/template-ext-vue/CHANGELOG.md | 15 - .../templates/template-ext-vue/index.html | 20 +- .../templates/template-ext-vue/package.json | 18 +- .../template-ext-vue/postcss.config.js | 10 +- .../templates/template-ext-vue/src/index.css | 80 - .../templates/template-ext-vue/src/main.ts | 2 +- .../templates/template-ext-vue/src/style.css | 80 + .../template-ext-vue/tailwind.config.js | 176 +- .../template-ext-vue/tsconfig.app.json | 11 +- .../templates/template-ext-vue/tsconfig.json | 9 +- .../template-ext-vue/tsconfig.node.json | 21 +- .../templates/template-ext-vue/vite.config.ts | 16 +- pnpm-lock.yaml | 1571 ++++++++++++++--- vendors/applications-rs | 2 +- 69 files changed, 2870 insertions(+), 771 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 packages/crypto/Cargo.toml create mode 100644 packages/crypto/src/aes.rs create mode 100644 packages/crypto/src/ed25519.rs create mode 100644 packages/crypto/src/lib.rs create mode 100644 packages/crypto/src/main.rs create mode 100644 packages/crypto/src/rsa.rs create mode 100644 packages/crypto/src/ssl.rs create mode 100644 packages/crypto/src/types.rs create mode 100644 packages/db/.gitignore delete mode 100644 packages/mac-security-rs/src/main.rs create mode 100644 packages/tauri-plugins/jarvis/keys/.gitkeep create mode 100644 packages/tauri-plugins/jarvis/package.json create mode 100644 packages/tauri-plugins/jarvis/proto/file-transfer.proto create mode 100644 packages/tauri-plugins/jarvis/setup.ts create mode 100644 packages/tauri-plugins/jarvis/src/server/grpc/file_transfer.rs create mode 100644 packages/tauri-plugins/jarvis/src/utils/db.rs delete mode 100644 packages/templates/template-ext-vue/CHANGELOG.md delete mode 100644 packages/templates/template-ext-vue/src/index.css create mode 100644 packages/templates/template-ext-vue/src/style.css diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 35c945a..3ef97ec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,12 +29,39 @@ jobs: - uses: denoland/setup-deno@v2 with: deno-version: v2.x + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable - name: Install Dependencies run: pnpm install - name: Setup run: pnpm prepare - name: Build run: pnpm build - - name: Test + - name: JS Test if: matrix.os == 'ubuntu-24.04' run: pnpm test + - name: Install protobuf (Mac) + if: matrix.os == 'macos-14' + run: | + brew install protobuf + - name: Install Protobuf (Ubuntu) + if: matrix.os == 'ubuntu-24.04' + run: | + sudo apt-get update + sudo apt-get install -y protobuf-compiler libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + - name: Install protoc and openssl for windows + if: matrix.os == 'windows-latest' + run: | + choco install protoc + echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append + vcpkg install openssl:x64-windows-static-md + # choco install openssl -y + # echo OPENSSL_DIR='"C:\\Program Files\\OpenSSL-Win64"' >> $env:GITHUB_ENV + # echo OPENSSL_INCLUDE_DIR='"C:\\Program Files\\OpenSSL-Win64\\include"' >> $env:GITHUB_ENV + # echo OPENSSL_LIB_DIR='"C:\\Program Files\\OpenSSL-Win64\\lib"' >> $env:GITHUB_ENV + # openssl version + - name: Cargo Build and Test + if: matrix.os == 'ubuntu-24.04' + run: | + cargo build + cargo test diff --git a/.github/workflows/desktop-publish.yml b/.github/workflows/desktop-publish.yml index c83d642..5a04155 100644 --- a/.github/workflows/desktop-publish.yml +++ b/.github/workflows/desktop-publish.yml @@ -52,7 +52,7 @@ jobs: choco install openssl echo OPENSSL_DIR='"C:\\Program Files\\OpenSSL-Win64"' >> $env:GITHUB_ENV echo OPENSSL_INCLUDE_DIR='"C:\\Program Files\\OpenSSL-Win64\\include"' >> $env:GITHUB_ENV - echo OPENSSL_LIB_DIR='"C:\\Program Files\\OpenSSL-Win64\\lib"' >> $env:GITHUB_ENV + echo OPENSSL_LIB_DIR='"C:\\Program Files\\OpenSSL-Win64\\lib\\VC\\x64\\MDd"' >> $env:GITHUB_ENV - uses: pnpm/action-setup@v4 - name: setup node uses: actions/setup-node@v4 diff --git a/.gitignore b/.gitignore index e2b56d1..d3d422b 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ yarn-error.log* *.pem stats.html target/ +.idea/ diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b83c43c --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,32 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Tauri Development Debug", + "cargo": { + "args": [ + "build", + "--manifest-path=./apps/desktop/src-tauri/Cargo.toml", + "--no-default-features" + ] + }, + // task for the `beforeDevCommand` if used, must be configured in `.vscode/tasks.json` + "preLaunchTask": "ui:dev" + }, + { + "type": "lldb", + "request": "launch", + "name": "Tauri Production Debug", + "cargo": { + "args": ["build", "--release", "--manifest-path=./apps/desktop/src-tauri/Cargo.toml"] + }, + // task for the `beforeBuildCommand` if used, must be configured in `.vscode/tasks.json` + "preLaunchTask": "ui:build" + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..e831d8f --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,18 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "ui:dev", + "type": "shell", + "isBackground": true, + "command": "pnpm", + "args": ["-F", "desktop", "dev"] + }, + { + "label": "ui:build", + "type": "shell", + "command": "pnpm", + "args": ["-F", "desktop", "build"] + } + ] +} diff --git a/Cargo.lock b/Cargo.lock index d27f3c6..10958e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -468,6 +468,33 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "aws-lc-rs" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe7c2840b66236045acd2607d5866e274380afd87ef99d6226e961e2cb47df45" +dependencies = [ + "aws-lc-sys", + "mirai-annotations", + "paste", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad3a619a9de81e1d7de1f1186dcba4506ed661a0e483d84410fdef0ee87b2f96" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", + "libc", + "paste", +] + [[package]] name = "axum" version = "0.6.20" @@ -585,6 +612,35 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.87", + "which", +] + [[package]] name = "bit_field" version = "0.10.2" @@ -639,6 +695,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "block2" version = "0.5.1" @@ -876,6 +941,15 @@ dependencies = [ "toml 0.8.2", ] +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + [[package]] name = "cc" version = "1.1.33" @@ -893,6 +967,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfb" version = "0.7.3" @@ -957,6 +1040,17 @@ dependencies = [ "inout", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading 0.8.5", +] + [[package]] name = "clap" version = "4.5.20" @@ -1141,6 +1235,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe1d7dcda7d1da79e444bdfba1465f2f849a58b07774e1df473ee77030cb47a7" +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "const-random" version = "0.1.18" @@ -1361,6 +1461,27 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "crypto" +version = "0.1.0" +dependencies = [ + "aes", + "anyhow", + "axum", + "axum-server", + "block-padding", + "cbc", + "hex", + "openssl", + "rand 0.8.5", + "reqwest 0.12.9", + "ring", + "rsa", + "rustls 0.23.16", + "sha2", + "tokio", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -1468,6 +1589,17 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + [[package]] name = "deranged" version = "0.3.11" @@ -1520,6 +1652,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] @@ -1970,6 +2103,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "funty" version = "2.0.0" @@ -2562,6 +2701,15 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "html5ever" version = "0.26.0" @@ -2737,6 +2885,22 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.5.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + [[package]] name = "hyper-util" version = "0.1.10" @@ -2936,6 +3100,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ + "block-padding", "generic-array", ] @@ -3156,6 +3321,7 @@ dependencies = [ "log", "mac-security-rs", "mdns-sd", + "obfstr", "objc", "serde", "serde_json", @@ -3192,6 +3358,9 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "lazycell" @@ -3266,6 +3435,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + [[package]] name = "libredox" version = "0.1.3" @@ -3531,6 +3706,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "mirai-annotations" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + [[package]] name = "muda" version = "0.15.2" @@ -3701,6 +3882,23 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -3738,6 +3936,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.2" @@ -3756,6 +3965,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -3798,6 +4008,12 @@ dependencies = [ "libc", ] +[[package]] +name = "obfstr" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0d354e9a302760d07e025701d40534f17dd1fe4c4db955b4e3bd2907c63bdee" + [[package]] name = "objc" version = "0.2.7" @@ -4252,6 +4468,15 @@ dependencies = [ "hmac", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -4445,6 +4670,27 @@ dependencies = [ "futures-io", ] +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.31" @@ -4758,7 +5004,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", + "rustc-hash 2.0.0", "rustls 0.23.16", "socket2", "thiserror 1.0.66", @@ -4775,7 +5021,7 @@ dependencies = [ "bytes", "rand 0.8.5", "ring", - "rustc-hash", + "rustc-hash 2.0.0", "rustls 0.23.16", "slab", "thiserror 1.0.66", @@ -5052,7 +5298,7 @@ dependencies = [ "http 0.2.12", "http-body 0.4.6", "hyper 0.14.31", - "hyper-tls", + "hyper-tls 0.5.0", "ipnet", "js-sys", "log", @@ -5096,11 +5342,13 @@ dependencies = [ "http-body-util", "hyper 1.5.0", "hyper-rustls", + "hyper-tls 0.6.0", "hyper-util", "ipnet", "js-sys", "log", "mime", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -5114,6 +5362,7 @@ dependencies = [ "sync_wrapper 1.0.1", "system-configuration 0.6.1", "tokio", + "tokio-native-tls", "tokio-rustls 0.26.0", "tokio-util", "tower-service", @@ -5199,6 +5448,27 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "sha2", + "signature", + "spki", + "subtle", + "zeroize", +] + [[package]] name = "rusqlite" version = "0.31.0" @@ -5259,6 +5529,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.0.0" @@ -5305,6 +5581,8 @@ version = "0.23.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" dependencies = [ + "aws-lc-rs", + "log", "once_cell", "ring", "rustls-pki-types", @@ -5353,6 +5631,7 @@ version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -5700,6 +5979,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -5809,6 +6098,16 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -6398,13 +6697,16 @@ dependencies = [ "axum", "axum-extra", "axum-server", + "base64 0.22.1", "chrono", + "crypto", "db", "flate2", "ico", "log", "mac-security-rs", "mdns-sd", + "obfstr", "plist", "prost", "rust_search", @@ -7757,6 +8059,18 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "widestring" version = "0.4.3" diff --git a/Cargo.toml b/Cargo.toml index 0dbdc11..2e165db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ members = [ "packages/db", "packages/mac-security-rs", "packages/tauri-plugins/jarvis", + "packages/crypto", ] [workspace.dependencies] @@ -26,3 +27,11 @@ applications = { path = "./vendors/applications-rs" } tauri-plugin-jarvis = { path = "./packages/tauri-plugins/jarvis" } tauri-plugin-system-info = { path = "./vendors/tauri-plugin-system-info" } db = { path = "./packages/db" } +axum = { version = "0.6.20" } +axum-extra = { version = "0.8.0" } +axum-server = { version = "0.5", features = ["tls-rustls"] } +rustls = { version = "0.23", features = ["ring"] } +reqwest = { version = "0.12", features = ["json", "rustls-tls"] } +crypto = { path = "./packages/crypto" } +base64 = "0.22.1" +obfstr = "0.4.4" diff --git a/apps/create-kunkun/__tests__/create-template.test.ts b/apps/create-kunkun/__tests__/create-template.test.ts index 482d781..7a5839f 100644 --- a/apps/create-kunkun/__tests__/create-template.test.ts +++ b/apps/create-kunkun/__tests__/create-template.test.ts @@ -22,9 +22,9 @@ await Promise.all( const folderName = `${templateName}-ext` await $`node ${indexjsPath} --outdir ${testDir} --name ${folderName} --template ${templateName}` const templateDir = path.join(testDir, folderName) - await $`rm -rf node_modules`.cwd(templateDir).text() // this doesn't work within bun test - await $`pnpm install`.cwd(templateDir).text() // this doesn't work within bun test - await $`pnpm run build`.cwd(templateDir).text() + await $`rm -rf node_modules`.cwd(templateDir) // this doesn't work within bun test + await $`pnpm install`.cwd(templateDir) // this doesn't work within bun test + await $`pnpm run build`.cwd(templateDir) }) ) diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index 3140e3b..ec90199 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -17,7 +17,8 @@ crate-type = ["staticlib", "cdylib", "rlib"] tauri-build = { version = "2.0.2", features = [] } [dependencies] -tauri = { version = "2.0.6", features = [ "macos-private-api", +tauri = { version = "2.0.6", features = [ + "macos-private-api", "image-png", "image-ico", "tray-icon", @@ -50,6 +51,7 @@ tauri-plugin-log = { version = "2.0.1", features = ["colored"] } zip = "2.1.3" uuid = "1.11.0" # tauri-plugin-devtools = "2.0.0" +obfstr = { workspace = true } [target."cfg(target_os = \"macos\")".dependencies] cocoa = "0.24.1" diff --git a/apps/desktop/src-tauri/build.rs b/apps/desktop/src-tauri/build.rs index d860e1e..948727a 100644 --- a/apps/desktop/src-tauri/build.rs +++ b/apps/desktop/src-tauri/build.rs @@ -1,3 +1,8 @@ fn main() { + let db_enc_key = match std::env::var("DB_ENCRYPTION_KEY") { + Ok(key) => key, + Err(_) => String::from("none"), + }; + println!("cargo:rustc-env=DB_ENCRYPTION_KEY={}", db_enc_key); tauri_build::build() } diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index eb57386..ecadf7f 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -23,6 +23,16 @@ pub fn run() { let context = tauri::generate_context!(); let mut builder = tauri::Builder::default(); + let db_key = if cfg!(debug_assertions) { + None + } else { + let db_enc_key_env = obfstr::obfstr!(env!("DB_ENCRYPTION_KEY")).to_string(); + match db_enc_key_env == "none" { + true => None, + false => Some(db_enc_key_env), + } + }; + #[cfg(debug_assertions)] { println!("Install crabnebula devtools"); @@ -91,7 +101,7 @@ pub fn run() { .plugin(tauri_plugin_notification::init()) .plugin(tauri_plugin_fs::init()) .plugin(tauri_plugin_shellx::init(shell_unlocked)) - .plugin(tauri_plugin_jarvis::init()) + .plugin(tauri_plugin_jarvis::init(db_key.clone())) .plugin(tauri_plugin_clipboard::init()) .plugin(tauri_plugin_network::init()) .plugin(tauri_plugin_system_info::init()); @@ -127,7 +137,7 @@ pub fn run() { .unwrap(), } }) - .setup(|app| { + .setup(move |app| { setup::window::setup_window(app.handle()); setup::tray::create_tray(app.handle())?; #[cfg(all(not(target_os = "macos"), debug_assertions))] @@ -145,20 +155,21 @@ pub fn run() { // Err(_) => AppSettings::default(), // }; // let dev_extension_path: Option = app_settings.dev_extension_path.clone(); - let my_port = tauri_plugin_network::network::scan::find_available_port_from_list( - tauri_plugin_jarvis::server::CANDIDATE_PORTS.to_vec(), - ) - .unwrap(); - log::info!("Jarvis Server Port: {}", my_port); + // let my_port = tauri_plugin_network::network::scan::find_available_port_from_list( + // tauri_plugin_jarvis::server::CANDIDATE_PORTS.to_vec(), + // ) + // .unwrap(); + // log::info!("Jarvis Server Port: {}", my_port); // log::info!( // "App Settings Dev Extension Path: {:?}", // app_settings.dev_extension_path.clone(), // ); + let my_port = 9559; app.manage(tauri_plugin_jarvis::server::http::Server::new( app.handle().clone(), my_port, - Protocol::Http, - // Protocol::Https, + // Protocol::Http, + Protocol::Https, )); app.manage(tauri_plugin_jarvis::model::app_state::AppState {}); tauri_plugin_jarvis::setup::server::setup_server(app.handle())?; // start the server @@ -173,13 +184,20 @@ pub fn run() { // setup::db::setup_db(app)?; /* ------------------------- Clipboard History Setup ------------------------ */ let db_path = get_kunkun_db_path(app.app_handle())?; - let db_key: Option = None; - let jarvis_db = JarvisDB::new(db_path.clone(), db_key.clone())?; + + // println!("DB_ENCRYPTION_KEY: {:?}", db_key); + // let jarvis_db = JarvisDB::new(db_path.clone(), db_key.clone())?; // The clipboard extension should be created in setup_db, ext is guaranteed to be Some + // let jarvis_db = app + // .state::() + // .db + // .lock() + // .unwrap(); + + let jarvis_db = tauri_plugin_jarvis::utils::db::get_db(db_path, db_key)?; let ext = jarvis_db.get_unique_extension_by_identifier( tauri_plugin_jarvis::constants::KUNKUN_CLIPBOARD_EXT_IDENTIFIER, )?; - app.manage( tauri_plugin_jarvis::model::clipboard_history::ClipboardHistory::new( jarvis_db, diff --git a/apps/desktop/src/lib/cmds/builtin.ts b/apps/desktop/src/lib/cmds/builtin.ts index 888cefb..f34cddb 100644 --- a/apps/desktop/src/lib/cmds/builtin.ts +++ b/apps/desktop/src/lib/cmds/builtin.ts @@ -3,6 +3,7 @@ import { checkUpdateAndInstall } from "@/utils/updater" import { IconEnum } from "@kksh/api/models" import type { BuiltinCmd } from "@kksh/ui/types" import { getVersion } from "@tauri-apps/api/app" +import { appDataDir } from "@tauri-apps/api/path" import { WebviewWindow } from "@tauri-apps/api/webviewWindow" import { exit } from "@tauri-apps/plugin-process" import { dev } from "$app/environment" @@ -10,6 +11,7 @@ import { goto } from "$app/navigation" import { toast } from "svelte-sonner" import { derived } from "svelte/store" import * as clipboard from "tauri-plugin-clipboard-api" +import { open } from "tauri-plugin-shellx-api" import { v4 as uuidv4 } from "uuid" import { hexColor } from "valibot" @@ -338,6 +340,18 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ return { ...config, developerMode: !config.developerMode } }) } + }, + { + name: "Open App Data Dir", + icon: { + type: IconEnum.Iconify, + value: "mdi:folder-open" + }, + description: "Open App Data Dir", + function: async () => { + console.log(await appDataDir()) + open(await appDataDir()) + } } ].map((cmd) => ({ ...cmd, id: uuidv4() })) diff --git a/apps/desktop/src/routes/+layout.svelte b/apps/desktop/src/routes/+layout.svelte index bdfba4a..02a9236 100644 --- a/apps/desktop/src/routes/+layout.svelte +++ b/apps/desktop/src/routes/+layout.svelte @@ -32,7 +32,6 @@ /* -------------------------------------------------------------------------- */ gsap.registerPlugin(Flip) let flipState: Flip.FlipState - beforeNavigate(() => { flipState = Flip.getState( `.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}` @@ -55,7 +54,9 @@ let { children } = $props() const unlisteners: UnlistenFn[] = [] - + onDestroy(() => { + unlisteners.forEach((unlistener) => unlistener()) + }) onMount(async () => { attachConsole().then((unlistener) => unlisteners.push(unlistener)) initDeeplink().then((unlistener) => unlisteners.push(unlistener)) @@ -103,10 +104,6 @@ } getCurrentWebviewWindow().show() }) - - onDestroy(() => { - unlisteners.forEach((unlistener) => unlistener()) - }) diff --git a/apps/desktop/src/routes/auth/+page.svelte b/apps/desktop/src/routes/auth/+page.svelte index 4a42802..3f58ae2 100644 --- a/apps/desktop/src/routes/auth/+page.svelte +++ b/apps/desktop/src/routes/auth/+page.svelte @@ -27,6 +27,8 @@ if (error) { toast.error("Failed to sign in with OAuth", { description: error.message }) } else { + console.log(data.url); + data.url && open(data.url) } } diff --git a/apps/desktop/src/routes/settings/+layout.svelte b/apps/desktop/src/routes/settings/+layout.svelte index cc52a0c..a00c55b 100644 --- a/apps/desktop/src/routes/settings/+layout.svelte +++ b/apps/desktop/src/routes/settings/+layout.svelte @@ -11,7 +11,7 @@ -
+
{@render children?.()}
diff --git a/apps/desktop/src/routes/settings/about/+page.svelte b/apps/desktop/src/routes/settings/about/+page.svelte index 135bb24..be2f250 100644 --- a/apps/desktop/src/routes/settings/about/+page.svelte +++ b/apps/desktop/src/routes/settings/about/+page.svelte @@ -13,14 +13,14 @@ }) - -
+ +
Logo

KunKun Shell

Version: {appVersion}

-

+

Author: { - return fetch(`http://localhost:${port}/info`) + return fetch(`https://localhost:${port}/info`, { agent: httpsAgent }) .then((res) => { if (!res.ok) { return false } return res.json() }) - .then((data) => { + .then((data: any) => { return data["service_name"].toLowerCase() === DESKTOP_SERVICE_NAME.toLowerCase() }) .catch((err) => { @@ -45,8 +51,9 @@ export async function refreshTemplateWorkerExtensionViaServer() { console.warn("Will Refresh Every Instance") } for (const port of ports) { - fetch(`http://localhost:${port}/refresh-worker-extension`, { - method: "POST" + fetch(`https://localhost:${port}/refresh-worker-extension`, { + method: "POST", + agent: httpsAgent }).catch((err) => { console.error("Failed to send refresh worker extension request", err) }) diff --git a/packages/api/src/ui/api/shell.ts b/packages/api/src/ui/api/shell.ts index ee0fd9c..e680503 100644 --- a/packages/api/src/ui/api/shell.ts +++ b/packages/api/src/ui/api/shell.ts @@ -1,7 +1,4 @@ -import { type Buffer } from "node:buffer" -import { Channel, invoke } from "@tauri-apps/api/core" import { RPCChannel, type IoInterface } from "kkrpc/browser" -import { constructShellAPI as constructShellAPI1 } from "tauri-api-adapter/client" import { // Child, EventEmitter, @@ -244,7 +241,7 @@ export class TauriShellStdio implements IoInterface { private childProcess: Child ) {} - read(): Promise { + read(): Promise { return new Promise((resolve, reject) => { this.readStream.on("data", (chunk) => { resolve(chunk) diff --git a/packages/api/src/version.ts b/packages/api/src/version.ts index 4bd3670..6d6d6ae 100644 --- a/packages/api/src/version.ts +++ b/packages/api/src/version.ts @@ -17,7 +17,7 @@ export const breakingChangesVersionCheckpoints = [ const checkpointVersions = breakingChangesVersionCheckpoints.map((c) => c.version) const sortedCheckpointVersions = sort(checkpointVersions) -export const version = "0.0.43" +export const version = "0.0.44" export function isVersionBetween(v: string, start: string, end: string) { const vCleaned = clean(v) diff --git a/packages/ci/scripts/init-env.ts b/packages/ci/scripts/init-env.ts index 5cffc12..3b4338c 100644 --- a/packages/ci/scripts/init-env.ts +++ b/packages/ci/scripts/init-env.ts @@ -52,3 +52,5 @@ PUBLIC_SUPABASE_PROJECT_ID=${process.env.SUPABASE_PROJECT_ID} ) // writeFileSync(join(__dirname, "../packages/gql/.env"), envContent) writeFileSync(join(REPO_ROOT, "packages/schema/.env"), envContent) + +writeFileSync(join(REPO_ROOT, "packages/tauri-plugins/jarvis/.env"), envContent) diff --git a/packages/crypto/Cargo.toml b/packages/crypto/Cargo.toml new file mode 100644 index 0000000..b619b65 --- /dev/null +++ b/packages/crypto/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "crypto" +version = "0.1.0" +edition = "2021" + +[dependencies] +openssl = "0.10.68" +rand = "0.8.5" +ring = "0.17.8" +rsa = { version = "0.9.6", features = ["sha2"] } +sha2 = "0.10.8" +anyhow = { workspace = true } +hex = "0.4.3" +axum = { workspace = true } +tokio = { workspace = true } +rustls = { workspace = true } +axum-server = { workspace = true } +reqwest = { workspace = true } +aes = "0.8.4" +block-padding = "0.3.3" +cbc = { version = "0.1.2", features = ["alloc"] } diff --git a/packages/crypto/src/aes.rs b/packages/crypto/src/aes.rs new file mode 100644 index 0000000..a8ecd78 --- /dev/null +++ b/packages/crypto/src/aes.rs @@ -0,0 +1,54 @@ +use aes::cipher::{BlockDecryptMut, BlockEncryptMut, KeyIvInit}; +use block_padding::Pkcs7; +use cbc::Decryptor as CbcDec; +use cbc::Encryptor as CbcEnc; +type Aes256CbcEnc = CbcEnc; +type Aes256CbcDec = CbcDec; + +pub struct Aes256Cbc { + encryptor: Aes256CbcEnc, + decryptor: Aes256CbcDec, +} + +impl Aes256Cbc { + pub fn new(key: [u8; 32], iv: [u8; 16]) -> Self { + Self { + encryptor: Aes256CbcEnc::new(&key.into(), &iv.into()), + decryptor: Aes256CbcDec::new(&key.into(), &iv.into()), + } + } + + pub fn encrypt(&self, data: &[u8]) -> Vec { + self.encryptor.clone().encrypt_padded_vec_mut::(data) + } + + pub fn decrypt(&self, data: &[u8]) -> Vec { + // let mut buf = data.to_vec(); + self.decryptor + .clone() + .decrypt_padded_vec_mut::(data) + .unwrap() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_encrypt_decrypt() { + let aes = Aes256Cbc::new([0; 32], [0; 16]); + let encrypted = aes.encrypt(b"kunkun"); + let decrypted = aes.decrypt(&encrypted); + assert_eq!(decrypted, b"kunkun"); + } + + #[test] + fn test_encrypt_huge_chunk_data() { + let aes = Aes256Cbc::new([0; 32], [0; 16]); + let data = vec![0; 1024 * 1024]; + let encrypted = aes.encrypt(&data); + let decrypted = aes.decrypt(&encrypted); + assert_eq!(decrypted, data); + } +} diff --git a/packages/crypto/src/ed25519.rs b/packages/crypto/src/ed25519.rs new file mode 100644 index 0000000..4ffb2b3 --- /dev/null +++ b/packages/crypto/src/ed25519.rs @@ -0,0 +1,92 @@ +//! ed25519 is a cryptographic signature algorithm. +//! It cannot be used for encryption, only for signing and verifying. +//! +//! For example, ed25519 is commonly used as SSH key. +//! When ssh login starts, the private key is used to sign a challenge message. +//! The server verifies the signature of the public key. + +use openssl::{ + pkey::{PKey, Private, Public}, + sign::{Signer, Verifier}, +}; + +use crate::types::Signature; + +pub struct Ed25519Crypto {} + +impl Ed25519Crypto { + pub fn generate_key() -> anyhow::Result> { + PKey::generate_ed25519().map_err(anyhow::Error::from) + } + + pub fn generate_key_pair_pem() -> anyhow::Result<(Vec, Vec)> { + let private_key = PKey::generate_ed25519()?; + let private_pem = private_key.private_key_to_pem_pkcs8()?; + let public_pem = private_key.public_key_to_pem()?; + Ok((private_pem, public_pem)) + } + + pub fn private_key_from_pem(pem: &[u8]) -> anyhow::Result> { + PKey::private_key_from_pem(pem).map_err(anyhow::Error::from) + } + + pub fn public_key_from_pem(pem: &[u8]) -> anyhow::Result> { + PKey::public_key_from_pem(pem).map_err(anyhow::Error::from) + } + + pub fn sign(private_key: &PKey, message: &[u8]) -> anyhow::Result> { + let mut signer = Signer::new_without_digest(&private_key)?; + Ok(signer.sign_oneshot_to_vec(message)?) + } + + pub fn verify( + public_key: &PKey, + message: &[u8], + signature: &[u8], + ) -> anyhow::Result { + let mut verifier = Verifier::new_without_digest(public_key)?; + Ok(verifier.verify_oneshot(&signature, message)?) + } +} + +impl Signature for Ed25519Crypto { + fn sign_with_pem(private_pem: &[u8], message: &[u8]) -> anyhow::Result> { + let private_key = Ed25519Crypto::private_key_from_pem(private_pem)?; + Ed25519Crypto::sign(&private_key, message) + } + + fn verify_with_pem( + public_pem: &[u8], + message: &[u8], + signature: &[u8], + ) -> anyhow::Result { + let public_key = Ed25519Crypto::public_key_from_pem(public_pem)?; + Ed25519Crypto::verify(&public_key, message, signature) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_ed25519_sign_verify() { + let (private_pem, public_pem) = Ed25519Crypto::generate_key_pair_pem().unwrap(); + let message = b"hello world"; + let private_key = Ed25519Crypto::private_key_from_pem(&private_pem).unwrap(); + let public_key = Ed25519Crypto::public_key_from_pem(&public_pem).unwrap(); + let signature = Ed25519Crypto::sign(&private_key, message).unwrap(); + let verified = Ed25519Crypto::verify(&public_key, message, &signature).unwrap(); + assert!(verified); + assert!(!Ed25519Crypto::verify(&public_key, b"hello world2", &signature).unwrap()); + } + + #[test] + fn test_ed25519_sign_verify_with_pem() { + let (private_pem, public_pem) = Ed25519Crypto::generate_key_pair_pem().unwrap(); + let message = b"hello world"; + let signature = Ed25519Crypto::sign_with_pem(&private_pem, message).unwrap(); + let verified = Ed25519Crypto::verify_with_pem(&public_pem, message, &signature).unwrap(); + assert!(verified); + } +} diff --git a/packages/crypto/src/lib.rs b/packages/crypto/src/lib.rs new file mode 100644 index 0000000..477fbb9 --- /dev/null +++ b/packages/crypto/src/lib.rs @@ -0,0 +1,17 @@ +//! This module provides simplified cryptographic interface for Kunkun. +//! +//! Features include +//! - RSA (generation/sign/verify/encrypt/decrypt) +//! - Ed25519 (generation/sign/verify). +//! - SSL/TLS (self-signed certificate generation). + +pub mod aes; +pub mod ed25519; +pub mod rsa; +pub mod ssl; +pub mod types; + +pub use ed25519::Ed25519Crypto; +pub use rsa::RsaCrypto; +pub use ssl::generate_self_signed_certificate; +pub use types::Signature; diff --git a/packages/crypto/src/main.rs b/packages/crypto/src/main.rs new file mode 100644 index 0000000..7a00ccb --- /dev/null +++ b/packages/crypto/src/main.rs @@ -0,0 +1,37 @@ +// use crypto::{Ed25519Crypto, Signature}; +// use openssl::pkey::PKey; +// use openssl::rsa::{Padding, Rsa}; +// use std::str; + +// fn main() { +// let (private_pem, public_pem) = Ed25519Crypto::generate_key_pair_pem().unwrap(); +// let message = b"hello world"; +// let signature = Ed25519Crypto::sign(&private_pem, message); +// println!("Signature: {:?}", signature); +// } + +use openssl::pkey::PKey; +use openssl::sign::{Signer, Verifier}; + +fn main() -> Result<(), Box> { + // Generate an Ed25519 private key + let private_key = PKey::generate_ed25519()?; + + // The message to sign + let message = b"Hello, this is a test message!"; + + // Create a signer using the private key + let mut signer = Signer::new_without_digest(&private_key)?; + + // Sign the message directly (no need to call update) + let signature = signer.sign_oneshot_to_vec(message)?; + + println!("Message: {:?}", String::from_utf8_lossy(message)); + println!("Signature: {:?}", signature); + // verify the signature + let mut verifier = Verifier::new_without_digest(&private_key)?; + verifier.update(message)?; + verifier.verify(&signature)?; + println!("Signature verified successfully!"); + Ok(()) +} diff --git a/packages/crypto/src/rsa.rs b/packages/crypto/src/rsa.rs new file mode 100644 index 0000000..2c96aa0 --- /dev/null +++ b/packages/crypto/src/rsa.rs @@ -0,0 +1,120 @@ +use openssl::{ + hash::MessageDigest, + pkey::{PKey, Private, Public}, + rsa::Rsa, + sign::{Signer, Verifier}, +}; + +use crate::types::Signature; + +pub struct RsaCrypto {} + +impl RsaCrypto { + pub fn generate_rsa() -> anyhow::Result> { + Rsa::generate(2048).map_err(anyhow::Error::from) + } + + pub fn generate_rsa_key_pair_pem() -> anyhow::Result<(Vec, Vec)> { + let rsa = Rsa::generate(2048)?; + let private_pem = rsa.private_key_to_pem()?; + let public_pem = rsa.public_key_to_pem()?; + Ok((private_pem, public_pem)) + } + + pub fn private_key_from_pem(pem: &[u8]) -> anyhow::Result> { + Rsa::private_key_from_pem(pem).map_err(anyhow::Error::from) + } + + pub fn public_key_from_pem(pem: &[u8]) -> anyhow::Result> { + Rsa::public_key_from_pem(pem).map_err(anyhow::Error::from) + } + + pub fn encrypt_message(public_key: &Rsa, message: &[u8]) -> anyhow::Result> { + let mut encrypted = vec![0; public_key.size() as usize]; + public_key.public_encrypt(message, &mut encrypted, openssl::rsa::Padding::PKCS1)?; + Ok(encrypted) + } + + pub fn decrypt_message( + private_key: &Rsa, + encrypted: &[u8], + ) -> anyhow::Result> { + let mut decrypted = vec![0; private_key.size() as usize]; + private_key.private_decrypt(encrypted, &mut decrypted, openssl::rsa::Padding::PKCS1)?; + Ok(decrypted) + } + pub fn sign(private_key: &Rsa, message: &[u8]) -> anyhow::Result> { + let pkey = PKey::from_rsa(private_key.clone())?; + let mut signer = Signer::new(MessageDigest::sha256(), &pkey)?; + signer.update(message)?; + let signature = signer.sign_to_vec()?; + Ok(signature) + } + + pub fn verify( + public_key: &Rsa, + message: &[u8], + signature: &[u8], + ) -> anyhow::Result { + let pkey = PKey::from_rsa(public_key.clone())?; + let mut verifier = Verifier::new(MessageDigest::sha256(), &pkey)?; + verifier.update(message)?; + Ok(verifier.verify(&signature)?) + } +} + +impl Signature for RsaCrypto { + fn sign_with_pem(private_pem: &[u8], message: &[u8]) -> anyhow::Result> { + let private_key = RsaCrypto::private_key_from_pem(private_pem)?; + RsaCrypto::sign(&private_key, message) + } + + fn verify_with_pem( + public_pem: &[u8], + message: &[u8], + signature: &[u8], + ) -> anyhow::Result { + let public_key = RsaCrypto::public_key_from_pem(public_pem)?; + RsaCrypto::verify(&public_key, message, signature) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_encrypt_decrypt() { + let rsa = RsaCrypto::generate_rsa().unwrap(); + + let public_key = rsa.public_key_to_pem().unwrap(); + let private_key = rsa.private_key_to_pem().unwrap(); + let public_rsa = RsaCrypto::public_key_from_pem(&public_key).unwrap(); + let private_rsa = RsaCrypto::private_key_from_pem(&private_key).unwrap(); + + let encrypted = RsaCrypto::encrypt_message(&public_rsa, b"hello world").unwrap(); + let decrypted = RsaCrypto::decrypt_message(&private_rsa, &encrypted).unwrap(); + assert_eq!(b"hello world", &decrypted[..11]); + } + + #[test] + fn test_rsa_sign_verify() { + let (private_pem, public_pem) = RsaCrypto::generate_rsa_key_pair_pem().unwrap(); + let message = b"hello world"; + let private_key = RsaCrypto::private_key_from_pem(&private_pem).unwrap(); + let public_key = RsaCrypto::public_key_from_pem(&public_pem).unwrap(); + let signature = RsaCrypto::sign(&private_key, message).unwrap(); + let verified = RsaCrypto::verify(&public_key, message, &signature).unwrap(); + assert!(verified); + assert!(!RsaCrypto::verify(&public_key, b"hello world2", &signature).unwrap()); + } + + #[test] + fn test_rsa_sign_verify_with_pem() { + let (private_pem, public_pem) = RsaCrypto::generate_rsa_key_pair_pem().unwrap(); + let message = b"hello world"; + let signature = RsaCrypto::sign_with_pem(&private_pem, message).unwrap(); + let verified = RsaCrypto::verify_with_pem(&public_pem, message, &signature).unwrap(); + assert!(verified); + } +} diff --git a/packages/crypto/src/ssl.rs b/packages/crypto/src/ssl.rs new file mode 100644 index 0000000..34d684e --- /dev/null +++ b/packages/crypto/src/ssl.rs @@ -0,0 +1,89 @@ +use openssl::{ + hash::MessageDigest, + pkey::{PKey, Private}, + rsa::Rsa, + x509::{extension::SubjectAlternativeName, X509NameBuilder, X509}, +}; + +pub fn generate_self_signed_certificate( + rsa: &Rsa, + days: u32, +) -> anyhow::Result<(Vec, Vec)> { + let private_key = PKey::from_rsa(rsa.to_owned())?; + let mut x509_name_builder = X509NameBuilder::new()?; + x509_name_builder.append_entry_by_text("C", "US")?; // Country + x509_name_builder.append_entry_by_text("ST", "Localhost")?; // State/Province + x509_name_builder.append_entry_by_text("L", "Localhost")?; // Locality + x509_name_builder.append_entry_by_text("O", "Localhost Development")?; // Organization + x509_name_builder.append_entry_by_text("CN", "localhost")?; // Common Name + let x509_name = x509_name_builder.build(); + let mut builder = X509::builder()?; + builder.set_version(2)?; // X.509 v3 + builder.set_subject_name(&x509_name)?; + builder.set_issuer_name(&x509_name)?; // Self-signed + builder.set_pubkey(&private_key)?; + + // Set certificate validity + let not_before = openssl::asn1::Asn1Time::days_from_now(0)?; // Start now + let not_after = openssl::asn1::Asn1Time::days_from_now(days)?; // Valid for 1 year + builder.set_not_before(¬_before)?; + builder.set_not_after(¬_after)?; + + // Add Subject Alternative Name (SAN) for localhost + let subject_alt_name = SubjectAlternativeName::new() + .dns("localhost") // Ensures the certificate is valid for "localhost" + .build(&builder.x509v3_context(None, None))?; + builder.append_extension(subject_alt_name)?; + builder.sign(&private_key, MessageDigest::sha256())?; + let x509 = builder.build(); + let private_key_pem = private_key.private_key_to_pem_pkcs8()?; + let certificate_pem = x509.to_pem()?; + Ok((private_key_pem, certificate_pem)) +} + +#[cfg(test)] +mod tests { + use axum::{routing::get, Router}; + use axum_server::tls_rustls::RustlsConfig; + use reqwest; + use std::{net::SocketAddr, time::Duration}; + + use super::*; + + #[tokio::test] + async fn test_generate_self_signed_certificate() -> anyhow::Result<()> { + let rsa = Rsa::generate(2048)?; + let (private_key_pem, certificate_pem) = generate_self_signed_certificate(&rsa, 365)?; + let config = RustlsConfig::from_pem(certificate_pem, private_key_pem) + .await + .unwrap(); + async fn handler() -> &'static str { + "Hello, World!" + } + + let handle = axum_server::Handle::new(); + let app = Router::new().route("/", get(handler)); + + // run https server + let addr = SocketAddr::from(([127, 0, 0, 1], 8080)); + let server = axum_server::bind_rustls(addr, config) + .handle(handle.clone()) + .serve(app.into_make_service()); + + let server_handle = tokio::spawn(server); + // send a request to server, trust the certificate + let client = reqwest::Client::builder() + .danger_accept_invalid_certs(true) + .build()?; + let response = client.get("https://localhost:8080").send().await?; + assert_eq!(response.status().is_success(), true); + // read the response body + let body = response.text().await?; + assert_eq!(body, "Hello, World!"); + println!("shutting down server"); + handle.graceful_shutdown(Some(Duration::from_secs(10))); + println!("server shutdown"); + server_handle.abort(); + Ok(()) + } +} diff --git a/packages/crypto/src/types.rs b/packages/crypto/src/types.rs new file mode 100644 index 0000000..22cae6a --- /dev/null +++ b/packages/crypto/src/types.rs @@ -0,0 +1,5 @@ +pub trait Signature { + fn sign_with_pem(private_pem: &[u8], message: &[u8]) -> anyhow::Result>; + fn verify_with_pem(public_pem: &[u8], message: &[u8], signature: &[u8]) + -> anyhow::Result; +} diff --git a/packages/db/.gitignore b/packages/db/.gitignore new file mode 100644 index 0000000..98e6ef6 --- /dev/null +++ b/packages/db/.gitignore @@ -0,0 +1 @@ +*.db diff --git a/packages/db/Cargo.toml b/packages/db/Cargo.toml index 580ec6a..b1828a0 100644 --- a/packages/db/Cargo.toml +++ b/packages/db/Cargo.toml @@ -4,10 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -rusqlite = { version = "0.31.0", features = [ - "bundled", - # "bundled-sqlcipher" -] } +rusqlite = { version = "0.31.0", features = ["bundled", "bundled-sqlcipher"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } tempfile = "3.10.1" diff --git a/packages/extensions/demo-worker-template-ext/src/index.ts b/packages/extensions/demo-worker-template-ext/src/index.ts index ac64a73..bd43861 100644 --- a/packages/extensions/demo-worker-template-ext/src/index.ts +++ b/packages/extensions/demo-worker-template-ext/src/index.ts @@ -32,15 +32,33 @@ const allItems: List.Item[] = itemsTitle.map( }) ) -const files = [ - "/Users/hacker/Dev/projects/photographer-lib-deno/data/DSC03635.JPG", - "/Users/hacker/Dev/projects/photographer-lib-deno/data/IMG_3181.HEIC", - "/Users/hacker/Dev/projects/photographer-lib-deno/data/DJI_20241002175820_0054_D.JPG", - "/Users/hacker/Dev/projects/photographer-lib-deno/data/DJI_20241002175651_0051_D.DNG", - "/Users/hacker/Dev/projects/photographer-lib-deno/data/DSC03635.ARW" -] class ExtensionTemplate extends WorkerExtension { + async onBeforeGoBack() { + console.log("onBeforeGoBack") + // console.log(`Try killing pid: ${this.apiProcess?.pid}`) + // await this.apiProcess?.kill() + // console.log("apiProcess killed") + } + async onFormSubmit(value: Record): Promise { + console.log("Form submitted", value) + } + + async onEnterPressedOnSearchBar(): Promise { + console.log("Enter pressed on search bar") + } + async load() { + clipboard.readText().then((text) => { + console.log("Clipboard text:", text) + }) + // console.log("Check screen capture permission:", await security.mac.checkScreenCapturePermission()) + // await security.mac.revealSecurityPane("AllFiles") + // console.log(await security.mac.verifyFingerprint()) + ui.setSearchBarPlaceholder("Search for items") + ui.showLoadingBar(true) + setTimeout(() => { + ui.showLoadingBar(false) + }, 2000) const { rpcChannel, process, command } = await shell.createDenoRpcChannel< {}, { @@ -64,196 +82,134 @@ class ExtensionTemplate extends WorkerExtension { }, {} ) - const api = rpcChannel.getAPI() - const metadata = await api.batchReadImageMetadata(files) - console.log(metadata) + // const child = new Child(process.pid) + command.stdout.on("data", (data) => { + console.log("stdout", data.toString()) + }) + command.stderr.on("data", (data) => { + console.log("stderr", data.toString()) + }) + // await api + // .readImageMetadata("/Users/hacker/Pictures/3D-Image/pics/IMG_0767.jpeg") + // .then((data) => { + // console.log("metadata", data) + // }) + // .catch((err) => { + // console.error("error", err) + // }) + // await api.add(1, 2).then(console.log) + // await api.subtract(1, 2).then(console.log) + + await process.kill() + const extPath = await path.extensionDir() + // console.log("Extension path:", extPath) + const tagList = new List.ItemDetailMetadataTagList({ + title: "Tag List Title", + tags: [ + new List.ItemDetailMetadataTagListItem({ + text: "red", + color: "#ff0000" + }), + new List.ItemDetailMetadataTagListItem({ + text: "yellow", + color: "#ffff00" + }) + ] + }) + const list = new List.List({ + items: allItems, + defaultAction: "Top Default Action", + detail: new List.ItemDetail({ + children: [ + new List.ItemDetailMetadata([ + new List.ItemDetailMetadataLabel({ + title: "Label Title", + text: "Label Text" + }), + new List.ItemDetailMetadataLabel({ + title: "Label Title", + text: "Label Text", + icon: new Icon({ + type: IconType.enum.Iconify, + value: "mingcute:appstore-fill" + }) + }), + new List.ItemDetailMetadataSeparator(), + new List.ItemDetailMetadataLabel({ + title: "Label Title", + text: "Label Text" + }), + new List.ItemDetailMetadataLink({ + title: "Link Title", + text: "Link Text", + url: "https://github.com/huakunshen" + }), + new List.ItemDetailMetadataLabel({ + title: "Label Title", + text: "Label Text" + }), + tagList + ]), + new Markdown(` +# Hello World + + + + `) + ], + width: 50 + }), + actions: new Action.ActionPanel({ + items: [ + new Action.Action({ + title: "Action 1", + value: "action 1", + icon: new Icon({ type: IconType.enum.Iconify, value: "material-symbols:add-reaction" }) + }), + new Action.Action({ title: "Action 2", value: "action 2" }), + new Action.Action({ title: "Action 3", value: "action 3" }), + new Action.Action({ title: "Action 4", value: "action 4" }) + ] + }) + }) + + return ui.render(list) + } + + async onSearchTermChange(term: string): Promise { + return ui.render( + new List.List({ + // items: allItems.filter((item) => item.title.toLowerCase().includes(term.toLowerCase())), + inherits: ["items", "sections"], + defaultAction: "Top Default Action", + detail: new List.ItemDetail({ + children: [ + new List.ItemDetailMetadata([ + new List.ItemDetailMetadataLabel({ + title: "Label Title", + text: "Label Text" + }) + ]) + // new Markdown(` + // ## Search results for "${term}" + // + // + // + // `) + ], + width: term.length > 3 ? 70 : 30 + }) + }) + ) + } + + async onListItemSelected(value: string): Promise { + console.log("Item selected:", value) + } + + async onActionSelected(value: string): Promise { + console.log("Action selected:", value) } } -// class ExtensionTemplate extends WorkerExtension { -// async onBeforeGoBack() { -// console.log("onBeforeGoBack") -// // console.log(`Try killing pid: ${this.apiProcess?.pid}`) -// // await this.apiProcess?.kill() -// // console.log("apiProcess killed") -// } -// async onFormSubmit(value: Record): Promise { -// console.log("Form submitted", value) -// } - -// async onEnterPressedOnSearchBar(): Promise { -// console.log("Enter pressed on search bar") -// } - -// async load() { -// clipboard.readText().then((text) => { -// console.log("Clipboard text:", text) -// }) -// // console.log("Check screen capture permission:", await security.mac.checkScreenCapturePermission()) -// // await security.mac.revealSecurityPane("AllFiles") -// // console.log(await security.mac.verifyFingerprint()) -// ui.setSearchBarPlaceholder("Search for items") -// ui.showLoadingBar(true) -// setTimeout(() => { -// ui.showLoadingBar(false) -// }, 2000) -// const { rpcChannel, process, command } = await shell.createDenoRpcChannel< -// {}, -// { -// add(a: number, b: number): Promise -// subtract(a: number, b: number): Promise -// readImageMetadata(path: string): Promise -// batchReadImageMetadata: (paths: string[]) => Promise -// } -// >( -// "$EXTENSION/deno-src/rpc.ts", -// [], -// { -// // allowEnv: ["npm_package_config_libvips"], -// allowAllEnv: true, -// // allowFfi: ["*sharp-darwin-arm64.node"], -// allowAllFfi: true, -// allowAllRead: true, -// allowAllSys: true, -// // allowRun: ["*exiftool"] -// allowAllRun: true -// }, -// {} -// ) -// // const child = new Child(process.pid) -// command.stdout.on("data", (data) => { -// console.log("stdout", data.toString()) -// }) -// command.stderr.on("data", (data) => { -// console.log("stderr", data.toString()) -// }) -// const api = rpcChannel.getAPI() -// await api -// .batchReadImageMetadata(files) -// .then((metadata) => { -// console.log("metadata", metadata) -// }) -// .catch(console.error) -// // await api -// // .readImageMetadata("/Users/hacker/Pictures/3D-Image/pics/IMG_0767.jpeg") -// // .then((data) => { -// // console.log("metadata", data) -// // }) -// // .catch((err) => { -// // console.error("error", err) -// // }) -// // await api.add(1, 2).then(console.log) -// // await api.subtract(1, 2).then(console.log) - -// await process.kill() -// const extPath = await path.extensionDir() -// // console.log("Extension path:", extPath) -// const tagList = new List.ItemDetailMetadataTagList({ -// title: "Tag List Title", -// tags: [ -// new List.ItemDetailMetadataTagListItem({ -// text: "red", -// color: "#ff0000" -// }), -// new List.ItemDetailMetadataTagListItem({ -// text: "yellow", -// color: "#ffff00" -// }) -// ] -// }) -// const list = new List.List({ -// items: allItems, -// defaultAction: "Top Default Action", -// detail: new List.ItemDetail({ -// children: [ -// new List.ItemDetailMetadata([ -// new List.ItemDetailMetadataLabel({ -// title: "Label Title", -// text: "Label Text" -// }), -// new List.ItemDetailMetadataLabel({ -// title: "Label Title", -// text: "Label Text", -// icon: new Icon({ -// type: IconType.enum.Iconify, -// value: "mingcute:appstore-fill" -// }) -// }), -// new List.ItemDetailMetadataSeparator(), -// new List.ItemDetailMetadataLabel({ -// title: "Label Title", -// text: "Label Text" -// }), -// new List.ItemDetailMetadataLink({ -// title: "Link Title", -// text: "Link Text", -// url: "https://github.com/huakunshen" -// }), -// new List.ItemDetailMetadataLabel({ -// title: "Label Title", -// text: "Label Text" -// }), -// tagList -// ]), -// new Markdown(` -// # Hello World -// -// -// -// `) -// ], -// width: 50 -// }), -// actions: new Action.ActionPanel({ -// items: [ -// new Action.Action({ -// title: "Action 1", -// value: "action 1", -// icon: new Icon({ type: IconType.enum.Iconify, value: "material-symbols:add-reaction" }) -// }), -// new Action.Action({ title: "Action 2", value: "action 2" }), -// new Action.Action({ title: "Action 3", value: "action 3" }), -// new Action.Action({ title: "Action 4", value: "action 4" }) -// ] -// }) -// }) - -// return ui.render(list) -// } - -// async onSearchTermChange(term: string): Promise { -// return ui.render( -// new List.List({ -// // items: allItems.filter((item) => item.title.toLowerCase().includes(term.toLowerCase())), -// inherits: ["items", "sections"], -// defaultAction: "Top Default Action", -// detail: new List.ItemDetail({ -// children: [ -// new List.ItemDetailMetadata([ -// new List.ItemDetailMetadataLabel({ -// title: "Label Title", -// text: "Label Text" -// }) -// ]) -// // new Markdown(` -// // ## Search results for "${term}" -// // -// // -// // -// // `) -// ], -// width: term.length > 3 ? 70 : 30 -// }) -// }) -// ) -// } - -// async onListItemSelected(value: string): Promise { -// console.log("Item selected:", value) -// } - -// async onActionSelected(value: string): Promise { -// console.log("Action selected:", value) -// } -// } expose(new ExtensionTemplate()) diff --git a/packages/mac-security-rs/src/main.rs b/packages/mac-security-rs/src/main.rs deleted file mode 100644 index 00a2083..0000000 --- a/packages/mac-security-rs/src/main.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![cfg(target_os = "macos")] -use mac_security_rs::{ - preflight_screen_capture_access, request_screen_capture_access, verify_auth, AuthPolicy, -}; - -fn main() { - #[cfg(target_os = "macos")] - // println!("{}", request_screen_capture_access()); - println!("{}", verify_auth(AuthPolicy::Biometrics)); -} - -#[cfg(not(target_os = "macos"))] -fn main() {} diff --git a/packages/tauri-plugins/jarvis/Cargo.toml b/packages/tauri-plugins/jarvis/Cargo.toml index 20aa4bb..0b86c15 100644 --- a/packages/tauri-plugins/jarvis/Cargo.toml +++ b/packages/tauri-plugins/jarvis/Cargo.toml @@ -19,9 +19,9 @@ tar = "0.4.40" flate2 = "1.0.30" window-vibrancy = "0.5.0" tauri-plugin-store = "2.0.1" -axum = { version = "0.6.20" } -axum-extra = { version = "0.8.0" } -axum-server = { version = "0.5", features = ["tls-rustls"] } +axum = { workspace = true } +axum-extra = { workspace = true } +axum-server = { workspace = true } tower = { version = "0.4", features = ["util"] } tower-http = { version = "0.4.0", features = ["fs", "trace", "cors"] } tonic = "0.11" @@ -41,6 +41,9 @@ mac-security-rs = { workspace = true } zip = "1.1.4" rust_search = "2.1.0" plist = "1.7.0" +crypto = { workspace = true } +base64 = { workspace = true } +obfstr = { workspace = true } [target.'cfg(target_os = "macos")'.dependencies] tauri-icns = "0.1.0" @@ -50,5 +53,6 @@ tauri-winres = "0.1.1" ico = "0.3.0" [build-dependencies] -tauri-plugin = { version = "2.0.1", features = ["build"] } +tauri-plugin = { version = "2.0.3", features = ["build"] } tonic-build = "0.11" +base64 = { workspace = true } diff --git a/packages/tauri-plugins/jarvis/build.rs b/packages/tauri-plugins/jarvis/build.rs index 812db0a..cb01149 100644 --- a/packages/tauri-plugins/jarvis/build.rs +++ b/packages/tauri-plugins/jarvis/build.rs @@ -1,3 +1,5 @@ +use base64::prelude::*; + const COMMANDS: &[&str] = &[ "open_devtools", "close_devtools", @@ -115,11 +117,42 @@ const COMMANDS: &[&str] = &[ ]; fn main() { + // SSL Cert + let cert_pem = match std::env::var("CERT_PEM") { + Ok(cert) => cert.into_bytes(), + Err(_) => include_bytes!("./self_signed_certs/cert.pem").to_vec(), + }; + let key_pem = match std::env::var("KEY_PEM") { + Ok(key) => key.into_bytes(), + Err(_) => include_bytes!("./self_signed_certs/key.pem").to_vec(), + }; + + println!( + "cargo:rustc-env=BASE64_CERT_PEM={}", + BASE64_STANDARD.encode(cert_pem) + ); + println!( + "cargo:rustc-env=BASE64_KEY_PEM={}", + BASE64_STANDARD.encode(key_pem) + ); + + // GRPC let out_dir = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); tonic_build::configure() - .file_descriptor_set_path(out_dir.join("helloworld_descriptor.bin")) - .compile(&["proto/helloworld.proto"], &["proto"]) + .file_descriptor_set_path(out_dir.join("kk_grpc.bin")) + .compile( + &["proto/helloworld.proto", "proto/file-transfer.proto"], + &["proto"], + ) .expect("Failed to compile protos"); + + // Server Public Key + let raw_server_public_key = include_bytes!("./keys/server_public_key.pem").to_vec(); + println!( + "cargo:rustc-env=BASE64_SERVER_PUBLIC_KEY={}", + BASE64_STANDARD.encode(raw_server_public_key) + ); + tauri_plugin::Builder::new(COMMANDS) .android_path("android") .ios_path("ios") diff --git a/packages/tauri-plugins/jarvis/keys/.gitkeep b/packages/tauri-plugins/jarvis/keys/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/packages/tauri-plugins/jarvis/package.json b/packages/tauri-plugins/jarvis/package.json new file mode 100644 index 0000000..b297fa5 --- /dev/null +++ b/packages/tauri-plugins/jarvis/package.json @@ -0,0 +1,16 @@ +{ + "name": "jarvis", + "module": "index.ts", + "type": "module", + "scripts": { + "prepare": "bun setup.ts" + }, + "devDependencies": { + "@kksh/supabase": "workspace:*", + "@kksh/ci": "workspace:*", + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } +} diff --git a/packages/tauri-plugins/jarvis/proto/file-transfer.proto b/packages/tauri-plugins/jarvis/proto/file-transfer.proto new file mode 100644 index 0000000..a4e3677 --- /dev/null +++ b/packages/tauri-plugins/jarvis/proto/file-transfer.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package file_transfer; + + +service FileTransfer { + rpc StartTransfer (StartTransferRequest) returns (StartTransferResponse); + rpc SendTransferInfo(TransferInfo) returns (SendTransferInfoResponse); +} + +message StartTransferRequest { + string ssl_cert = 1; +} + +message StartTransferResponse { + string port = 1; +} + +message TransferInfo { + string filename = 1; + string code = 2; + int32 port = 3; +} + +message SendTransferInfoResponse {} + diff --git a/packages/tauri-plugins/jarvis/setup.ts b/packages/tauri-plugins/jarvis/setup.ts new file mode 100644 index 0000000..83fd076 --- /dev/null +++ b/packages/tauri-plugins/jarvis/setup.ts @@ -0,0 +1,16 @@ +import { writeFileSync } from "fs" +import { createSB } from "@kksh/supabase" + +if (!process.env.SUPABASE_URL || !process.env.SUPABASE_ANON_KEY) { + throw new Error("SUPABASE_URL and SUPABASE_ANON_KEY must be set") +} + +const supabase = createSB(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY) + +const { data, error } = await supabase.storage.from("pub").download("server_public_key.pem") +if (error) { + console.error(error) + throw error +} + +writeFileSync("./keys/server_public_key.pem", await data.text()) diff --git a/packages/tauri-plugins/jarvis/src/commands/db.rs b/packages/tauri-plugins/jarvis/src/commands/db.rs index cc3aa0d..baa0ca3 100644 --- a/packages/tauri-plugins/jarvis/src/commands/db.rs +++ b/packages/tauri-plugins/jarvis/src/commands/db.rs @@ -5,6 +5,8 @@ use db::{ use std::{path::PathBuf, sync::Mutex}; use tauri::{utils::acl::identifier, State}; +use crate::utils::db::get_db; + #[derive(Debug)] pub struct DBState { pub db: Mutex, @@ -13,7 +15,7 @@ pub struct DBState { impl DBState { pub fn new(path: PathBuf, key: Option) -> anyhow::Result { - let db = JarvisDB::new(path, key)?; + let db = get_db(path, key)?; db.init()?; Ok(Self { db: Mutex::new(db) }) } diff --git a/packages/tauri-plugins/jarvis/src/constants.rs b/packages/tauri-plugins/jarvis/src/constants.rs index ca927c5..288febe 100644 --- a/packages/tauri-plugins/jarvis/src/constants.rs +++ b/packages/tauri-plugins/jarvis/src/constants.rs @@ -1,3 +1,5 @@ +use base64::prelude::*; + /* -------------------------------------------------------------------------- */ /* Buildin Extension Identifiers */ /* -------------------------------------------------------------------------- */ @@ -11,3 +13,10 @@ pub const KUNKUN_DEV_EXT_IDENTIFIER: &str = "sh.kunkun.ext.dev"; /* Kunkun Builtin Events */ /* -------------------------------------------------------------------------- */ pub const KUNKUN_REFRESH_WORKER_EXTENSION: &str = "kunkun://refresh-dev-extension"; + +pub static BASE64_SERVER_PUBLIC_KEY: &str = env!("BASE64_SERVER_PUBLIC_KEY"); +pub static SERVER_PUBLIC_KEY: std::sync::LazyLock> = std::sync::LazyLock::new(|| { + BASE64_STANDARD + .decode(BASE64_SERVER_PUBLIC_KEY) + .expect("Failed to decode base64 encoded server public key") +}); diff --git a/packages/tauri-plugins/jarvis/src/lib.rs b/packages/tauri-plugins/jarvis/src/lib.rs index e52b2cc..8d42288 100644 --- a/packages/tauri-plugins/jarvis/src/lib.rs +++ b/packages/tauri-plugins/jarvis/src/lib.rs @@ -54,7 +54,7 @@ impl> crate::JarvisExt for T { } /// Initializes the plugin. -pub fn init() -> TauriPlugin { +pub fn init(db_key: Option) -> TauriPlugin { Builder::new("jarvis") .invoke_handler(tauri::generate_handler![ /* ------------------------------ dev commands ------------------------------ */ @@ -169,7 +169,7 @@ pub fn init() -> TauriPlugin { /* -------------------------------------------------------------------------- */ commands::discovery::get_peers ]) - .setup(|app, api| { + .setup(move |app, api| { // #[cfg(mobile)] // let jarvis = mobile::init(app, api)?; #[cfg(desktop)] @@ -182,7 +182,6 @@ pub fn init() -> TauriPlugin { app.manage(JarvisState::default()); app.manage(commands::apps::ApplicationsState::default()); let db_path = get_kunkun_db_path(app)?; - let db_key: Option = None; app.manage(commands::db::DBState::new(db_path.clone(), db_key.clone())?); setup::db::setup_db(app)?; println!("Jarvis Plugin Initialized"); diff --git a/packages/tauri-plugins/jarvis/src/server/grpc/file_transfer.rs b/packages/tauri-plugins/jarvis/src/server/grpc/file_transfer.rs new file mode 100644 index 0000000..aaa28b0 --- /dev/null +++ b/packages/tauri-plugins/jarvis/src/server/grpc/file_transfer.rs @@ -0,0 +1,39 @@ +use file_transfer::file_transfer_server::FileTransfer; +use file_transfer::{ + SendTransferInfoResponse, StartTransferRequest, StartTransferResponse, TransferInfo, +}; +use tauri::AppHandle; +use tonic::{Request, Response, Status}; + +pub mod file_transfer { + tonic::include_proto!("file_transfer"); // The string specified here must match the proto package name + pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("kk_grpc"); +} + +#[derive(Debug)] +pub struct MyFileTransfer { + pub app_handle: AppHandle, +} + +#[tonic::async_trait] +impl FileTransfer for MyFileTransfer { + async fn start_transfer( + &self, + request: Request, // Accept request of type StartTransferRequest + ) -> Result, Status> { + println!("Got a request: {:?}", request); + let reply = StartTransferResponse { + port: "8080".to_string(), + }; + + Ok(Response::new(reply)) // Send back our formatted greeting + } + + async fn send_transfer_info( + &self, + request: Request, + ) -> Result, Status> { + println!("Got a request: {:?}", request); + Ok(Response::new(SendTransferInfoResponse {})) + } +} diff --git a/packages/tauri-plugins/jarvis/src/server/grpc/greeter.rs b/packages/tauri-plugins/jarvis/src/server/grpc/greeter.rs index 6037a6d..4b8eb6e 100644 --- a/packages/tauri-plugins/jarvis/src/server/grpc/greeter.rs +++ b/packages/tauri-plugins/jarvis/src/server/grpc/greeter.rs @@ -1,15 +1,18 @@ use hello_world::greeter_server::Greeter; use hello_world::{HelloReply, HelloRequest}; +use tauri::AppHandle; use tonic::{Request, Response, Status}; pub mod hello_world { tonic::include_proto!("helloworld"); // The string specified here must match the proto package name - pub const FILE_DESCRIPTOR_SET: &[u8] = - tonic::include_file_descriptor_set!("helloworld_descriptor"); + pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("kk_grpc"); } -#[derive(Debug, Default)] -pub struct MyGreeter {} +#[derive(Debug)] +pub struct MyGreeter { + pub app_handle: AppHandle, + pub name: String, +} #[tonic::async_trait] impl Greeter for MyGreeter { @@ -19,7 +22,12 @@ impl Greeter for MyGreeter { ) -> Result, Status> { println!("Got a request: {:?}", request); let reply = HelloReply { - message: format!("Hello {}!", request.into_inner().name), // We must use .into_inner() as the fields of gRPC requests and responses are private + message: format!( + "Hello {} from {} by Kunkun {}!", + request.into_inner().name, + self.name, + self.app_handle.package_info().version + ), // We must use .into_inner() as the fields of gRPC requests and responses are private }; Ok(Response::new(reply)) // Send back our formatted greeting diff --git a/packages/tauri-plugins/jarvis/src/server/grpc/mod.rs b/packages/tauri-plugins/jarvis/src/server/grpc/mod.rs index 44969c6..96ac922 100644 --- a/packages/tauri-plugins/jarvis/src/server/grpc/mod.rs +++ b/packages/tauri-plugins/jarvis/src/server/grpc/mod.rs @@ -1 +1,2 @@ +pub mod file_transfer; pub mod greeter; diff --git a/packages/tauri-plugins/jarvis/src/server/http.rs b/packages/tauri-plugins/jarvis/src/server/http.rs index 5b38c55..08323a5 100644 --- a/packages/tauri-plugins/jarvis/src/server/http.rs +++ b/packages/tauri-plugins/jarvis/src/server/http.rs @@ -1,13 +1,19 @@ -use super::grpc::greeter::hello_world::greeter_server::GreeterServer; use super::grpc::greeter::MyGreeter; -/// This module is responsible for controlling the main server +use super::grpc::{ + file_transfer::file_transfer::file_transfer_server::FileTransferServer, + greeter::hello_world::greeter_server::GreeterServer, +}; use super::model::ServerState; use super::Protocol; +use crate::server::grpc::file_transfer::MyFileTransfer; use crate::server::tls::{CERT_PEM, KEY_PEM}; use crate::utils::path::get_default_extensions_dir; use axum::http::{HeaderValue, Method, StatusCode, Uri}; use axum::routing::{get, get_service, post}; use axum_server::tls_rustls::RustlsConfig; +use base64::prelude::*; +/// This module is responsible for controlling the main server +use obfstr::obfstr as s; use std::sync::Mutex; use std::{net::SocketAddr, path::PathBuf, sync::Arc}; use tauri::AppHandle; @@ -23,7 +29,6 @@ async fn start_server( shtdown_handle: axum_server::Handle, options: ServerOptions, ) -> Result<(), Box> { - let greeter = MyGreeter::default(); let server_state = ServerState { app_handle: app_handle.clone(), }; @@ -31,13 +36,24 @@ async fn start_server( .register_encoded_file_descriptor_set( super::grpc::greeter::hello_world::FILE_DESCRIPTOR_SET, ) + .register_encoded_file_descriptor_set( + super::grpc::file_transfer::file_transfer::FILE_DESCRIPTOR_SET, + ) .build() .unwrap(); + let greeter = MyGreeter { + app_handle: app_handle.clone(), + name: "jarvis".to_string(), + }; + let file_transfer = MyFileTransfer { + app_handle: app_handle.clone(), + }; let grpc_router = TonicServer::builder() .add_service(reflection_service) .add_service(GreeterServer::new(greeter)) + .add_service(FileTransferServer::new(file_transfer)) .into_router(); - let mut rest_router = axum::Router::new() + let rest_router = axum::Router::new() .route( "/refresh-worker-extension", post(super::rest::refresh_worker_extension), @@ -64,12 +80,25 @@ async fn start_server( Protocol::Https => { let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); println!("manifest_dir: {}", manifest_dir.display()); - let tls_config = RustlsConfig::from_pem(CERT_PEM.to_vec(), KEY_PEM.to_vec()).await?; - // let tls_config = RustlsConfig::from_pem_file( - // manifest_dir.join("self_signed_certs").join("server.crt"), - // manifest_dir.join("self_signed_certs").join("server.key"), - // ) - // .await?; + + let (key_pem, cert_pem) = if cfg!(debug_assertions) { + // In debug mode, use the base64 encoded certs from env + let cert_pem = BASE64_STANDARD + .decode(s!(env!("BASE64_CERT_PEM")).to_string()) + .expect("Failed to decode cert_pem"); + let key_pem = BASE64_STANDARD + .decode(s!(env!("BASE64_KEY_PEM")).to_string()) + .expect("Failed to decode key_pem"); + (key_pem, cert_pem) + } else { + // In release mode, generate new self-signed certs every time app starts for safety + let rsa = + crypto::RsaCrypto::generate_rsa().expect("Failed to generate RSA key pair"); + crypto::ssl::generate_self_signed_certificate(&rsa, 365) + .expect("Failed to generate self-signed certificate") + }; + + let tls_config = RustlsConfig::from_pem(cert_pem, key_pem).await?; axum_server::bind_rustls(server_addr, tls_config) .handle(shtdown_handle) .serve(combined_router.into_make_service()) diff --git a/packages/tauri-plugins/jarvis/src/server/model.rs b/packages/tauri-plugins/jarvis/src/server/model.rs index 9820355..0d17839 100644 --- a/packages/tauri-plugins/jarvis/src/server/model.rs +++ b/packages/tauri-plugins/jarvis/src/server/model.rs @@ -5,6 +5,7 @@ use tauri::{AppHandle, Runtime}; pub struct ServerInfo { pub service_name: String, pub service_version: String, + pub public_key: String, } #[derive(Clone)] diff --git a/packages/tauri-plugins/jarvis/src/server/rest.rs b/packages/tauri-plugins/jarvis/src/server/rest.rs index 12019d1..d1e6776 100644 --- a/packages/tauri-plugins/jarvis/src/server/rest.rs +++ b/packages/tauri-plugins/jarvis/src/server/rest.rs @@ -1,5 +1,5 @@ use super::model::{ServerInfo, ServerState}; -use crate::constants::KUNKUN_REFRESH_WORKER_EXTENSION; +use crate::constants::{KUNKUN_REFRESH_WORKER_EXTENSION, SERVER_PUBLIC_KEY}; use axum::extract::State; use tauri::Emitter; @@ -16,6 +16,7 @@ pub async fn get_server_info(State(state): State) -> axum::Json) -> anyhow::Result { + JarvisDB::new(path, key).map_err(|e| anyhow::anyhow!("Failed to get db: {}", e)) +} diff --git a/packages/tauri-plugins/jarvis/src/utils/mod.rs b/packages/tauri-plugins/jarvis/src/utils/mod.rs index dc3eccb..2bda7e8 100644 --- a/packages/tauri-plugins/jarvis/src/utils/mod.rs +++ b/packages/tauri-plugins/jarvis/src/utils/mod.rs @@ -1,3 +1,4 @@ +pub mod db; pub mod fs; pub mod icns; pub mod manifest; diff --git a/packages/tauri-plugins/jarvis/src/utils/path.rs b/packages/tauri-plugins/jarvis/src/utils/path.rs index e57ad03..1d9b0d6 100644 --- a/packages/tauri-plugins/jarvis/src/utils/path.rs +++ b/packages/tauri-plugins/jarvis/src/utils/path.rs @@ -16,5 +16,9 @@ pub fn get_default_extensions_storage_dir( } pub fn get_kunkun_db_path(app: &AppHandle) -> anyhow::Result { - Ok(app.path().app_data_dir()?.join("kk.db")) + Ok(app.path().app_data_dir()?.join(if cfg!(debug_assertions) { + "kk.dev.db" + } else { + "kk.db" + })) } diff --git a/packages/templates/template-ext-next/next.config.mjs b/packages/templates/template-ext-next/next.config.mjs index b6c0f56..716bf08 100644 --- a/packages/templates/template-ext-next/next.config.mjs +++ b/packages/templates/template-ext-next/next.config.mjs @@ -1,11 +1,7 @@ /** @type {import('next').NextConfig} */ const nextConfig = { output: "export", - transpilePackages: ["@kksh/api"], - experimental: { - workerThreads: false, - cpus: 1 // Limit to 1 CPU - } + transpilePackages: ["@kksh/api"] } export default nextConfig diff --git a/packages/templates/template-ext-next/package.json b/packages/templates/template-ext-next/package.json index 0b2f3f2..714cac1 100644 --- a/packages/templates/template-ext-next/package.json +++ b/packages/templates/template-ext-next/package.json @@ -42,19 +42,19 @@ "@kksh/api": "workspace:*", "@kksh/react": "0.1.1", "@radix-ui/react-icons": "^1.3.2", - "next": "14.2.18", - "react": "^18", - "react-dom": "^18" + "react": "19.0.0-rc-66855b96-20241106", + "react-dom": "19.0.0-rc-66855b96-20241106", + "next": "15.0.3" }, "devDependencies": { + "typescript": "^5", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.2.7", "postcss": "^8", "tailwindcss": "^3.4.1", - "typescript": "^5" + "eslint": "^8", + "eslint-config-next": "15.0.3" }, "files": [ "out" diff --git a/packages/templates/template-ext-vue/CHANGELOG.md b/packages/templates/template-ext-vue/CHANGELOG.md deleted file mode 100644 index a70e7c1..0000000 --- a/packages/templates/template-ext-vue/CHANGELOG.md +++ /dev/null @@ -1,15 +0,0 @@ -# template-ext-vue - -## 0.0.2 - -### Patch Changes - -- Updated dependencies - - @kksh/api@0.0.4 - -## 0.0.1 - -### Patch Changes - -- Updated dependencies [fba6a49] - - @kksh/vue@0.0.1 diff --git a/packages/templates/template-ext-vue/index.html b/packages/templates/template-ext-vue/index.html index dde16aa..9428b81 100644 --- a/packages/templates/template-ext-vue/index.html +++ b/packages/templates/template-ext-vue/index.html @@ -1,13 +1,13 @@ - - - - - Vite + Vue + TS - - -

- - + + + + + Vite + Vue + TS + + +
+ + diff --git a/packages/templates/template-ext-vue/package.json b/packages/templates/template-ext-vue/package.json index c2ba7b3..d0622fc 100644 --- a/packages/templates/template-ext-vue/package.json +++ b/packages/templates/template-ext-vue/package.json @@ -1,8 +1,7 @@ { - "$schema": "./node_modules/@kksh/api/dist/schema.json", "name": "template-ext-vue", "private": true, - "version": "0.0.2", + "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", @@ -18,17 +17,16 @@ "radix-vue": "^1.9.5", "tailwind-merge": "^2.4.0", "tailwindcss-animate": "^1.0.7", - "vue": "^3.4.31" + "vue": "^3.5.12" }, "devDependencies": { - "@types/node": "^20.14.12", - "@vitejs/plugin-vue": "^5.0.5", + "@vitejs/plugin-vue": "^5.1.4", "autoprefixer": "^10.4.20", - "postcss": "^8.4.47", - "tailwindcss": "^3.4.9", - "typescript": "^5.2.2", - "vite": "^5.4.9", - "vue-tsc": "^2.0.24" + "postcss": "^8.4.49", + "tailwindcss": "^3.4.15", + "typescript": "~5.6.2", + "vite": "^5.4.10", + "vue-tsc": "^2.1.8" }, "kunkun": { "name": "TODO: Change Display Name", diff --git a/packages/templates/template-ext-vue/postcss.config.js b/packages/templates/template-ext-vue/postcss.config.js index 2aa7205..35237eb 100644 --- a/packages/templates/template-ext-vue/postcss.config.js +++ b/packages/templates/template-ext-vue/postcss.config.js @@ -1,6 +1,6 @@ export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +} diff --git a/packages/templates/template-ext-vue/src/index.css b/packages/templates/template-ext-vue/src/index.css deleted file mode 100644 index 3287b53..0000000 --- a/packages/templates/template-ext-vue/src/index.css +++ /dev/null @@ -1,80 +0,0 @@ -@import url("@kksh/vue/css"); -@import url("@kksh/vue/themes"); -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 0 0% 3.9%; - - --muted: 0 0% 96.1%; - --muted-foreground: 0 0% 45.1%; - - --popover: 0 0% 100%; - --popover-foreground: 0 0% 3.9%; - - --card: 0 0% 100%; - --card-foreground: 0 0% 3.9%; - - --border: 0 0% 89.8%; - --input: 0 0% 89.8%; - - --primary: 0 0% 9%; - --primary-foreground: 0 0% 98%; - - --secondary: 0 0% 96.1%; - --secondary-foreground: 0 0% 9%; - - --accent: 0 0% 96.1%; - --accent-foreground: 0 0% 9%; - - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; - - --ring: 0 0% 3.9%; - - --radius: 0.5rem; - } - - .dark { - --background: 0 0% 3.9%; - --foreground: 0 0% 98%; - - --muted: 0 0% 14.9%; - --muted-foreground: 0 0% 63.9%; - - --popover: 0 0% 3.9%; - --popover-foreground: 0 0% 98%; - - --card: 0 0% 3.9%; - --card-foreground: 0 0% 98%; - - --border: 0 0% 14.9%; - --input: 0 0% 14.9%; - - --primary: 0 0% 98%; - --primary-foreground: 0 0% 9%; - - --secondary: 0 0% 14.9%; - --secondary-foreground: 0 0% 98%; - - --accent: 0 0% 14.9%; - --accent-foreground: 0 0% 98%; - - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 0% 98%; - - --ring: 0 0% 83.1%; - } -} - -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } -} \ No newline at end of file diff --git a/packages/templates/template-ext-vue/src/main.ts b/packages/templates/template-ext-vue/src/main.ts index 44e1656..8a1724e 100644 --- a/packages/templates/template-ext-vue/src/main.ts +++ b/packages/templates/template-ext-vue/src/main.ts @@ -1,5 +1,5 @@ import { createApp } from "vue" -import "./index.css" +import "./style.css" import App from "./App.vue" createApp(App).mount("#app") diff --git a/packages/templates/template-ext-vue/src/style.css b/packages/templates/template-ext-vue/src/style.css new file mode 100644 index 0000000..052d4e9 --- /dev/null +++ b/packages/templates/template-ext-vue/src/style.css @@ -0,0 +1,80 @@ +@import url("@kksh/vue/css"); +@import url("@kksh/vue/themes"); +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + + --ring: 0 0% 3.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + + --ring: 0 0% 83.1%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/packages/templates/template-ext-vue/tailwind.config.js b/packages/templates/template-ext-vue/tailwind.config.js index d803171..0cf8cd6 100644 --- a/packages/templates/template-ext-vue/tailwind.config.js +++ b/packages/templates/template-ext-vue/tailwind.config.js @@ -2,92 +2,92 @@ const animate = require("tailwindcss-animate") /** @type {import('tailwindcss').Config} */ module.exports = { - darkMode: ["class"], - safelist: ["dark"], - prefix: "", - - content: [ - './pages/**/*.{ts,tsx,vue}', - './components/**/*.{ts,tsx,vue}', - './app/**/*.{ts,tsx,vue}', - './src/**/*.{ts,tsx,vue}', + darkMode: ["class"], + safelist: ["dark"], + prefix: "", + + content: [ + "./pages/**/*.{ts,tsx,vue}", + "./components/**/*.{ts,tsx,vue}", + "./app/**/*.{ts,tsx,vue}", + "./src/**/*.{ts,tsx,vue}" ], - - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - extend: { - colors: { - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - }, - borderRadius: { - xl: "calc(var(--radius) + 4px)", - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - keyframes: { - "accordion-down": { - from: { height: 0 }, - to: { height: "var(--radix-accordion-content-height)" }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, - to: { height: 0 }, - }, - "collapsible-down": { - from: { height: 0 }, - to: { height: 'var(--radix-collapsible-content-height)' }, - }, - "collapsible-up": { - from: { height: 'var(--radix-collapsible-content-height)' }, - to: { height: 0 }, - }, - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - "collapsible-down": "collapsible-down 0.2s ease-in-out", - "collapsible-up": "collapsible-up 0.2s ease-in-out", - }, - }, - }, - plugins: [animate], -} \ No newline at end of file + + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px" + } + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))" + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))" + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))" + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))" + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))" + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))" + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))" + } + }, + borderRadius: { + xl: "calc(var(--radius) + 4px)", + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)" + }, + keyframes: { + "accordion-down": { + from: { height: 0 }, + to: { height: "var(--radix-accordion-content-height)" } + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: 0 } + }, + "collapsible-down": { + from: { height: 0 }, + to: { height: "var(--radix-collapsible-content-height)" } + }, + "collapsible-up": { + from: { height: "var(--radix-collapsible-content-height)" }, + to: { height: 0 } + } + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + "collapsible-down": "collapsible-down 0.2s ease-in-out", + "collapsible-up": "collapsible-up 0.2s ease-in-out" + } + } + }, + plugins: [animate] +} diff --git a/packages/templates/template-ext-vue/tsconfig.app.json b/packages/templates/template-ext-vue/tsconfig.app.json index 48446d9..b904861 100644 --- a/packages/templates/template-ext-vue/tsconfig.app.json +++ b/packages/templates/template-ext-vue/tsconfig.app.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "composite": true, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", "target": "ES2020", "useDefineForClassFields": true, @@ -9,23 +8,19 @@ "skipLibCheck": true, /* Bundler mode */ - "moduleResolution": "bundler", + "moduleResolution": "Bundler", "allowImportingTsExtensions": true, - "resolveJsonModule": true, "isolatedModules": true, "moduleDetection": "force", "noEmit": true, "jsx": "preserve", - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - }, /* Linting */ "strict": true, "noUnusedLocals": false, "noUnusedParameters": false, - "noFallthroughCasesInSwitch": true + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true }, "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] } diff --git a/packages/templates/template-ext-vue/tsconfig.json b/packages/templates/template-ext-vue/tsconfig.json index a5b06bf..88a659f 100644 --- a/packages/templates/template-ext-vue/tsconfig.json +++ b/packages/templates/template-ext-vue/tsconfig.json @@ -1,11 +1,4 @@ { "files": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.node.json" - } - ] + "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] } diff --git a/packages/templates/template-ext-vue/tsconfig.node.json b/packages/templates/template-ext-vue/tsconfig.node.json index e19b72a..ee66045 100644 --- a/packages/templates/template-ext-vue/tsconfig.node.json +++ b/packages/templates/template-ext-vue/tsconfig.node.json @@ -1,13 +1,24 @@ { "compilerOptions": { - "composite": true, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - "skipLibCheck": true, + "target": "ES2022", + "lib": ["ES2023"], "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ "strict": true, - "noEmit": true + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true }, "include": ["vite.config.ts"] } diff --git a/packages/templates/template-ext-vue/vite.config.ts b/packages/templates/template-ext-vue/vite.config.ts index 1937701..2e0207d 100644 --- a/packages/templates/template-ext-vue/vite.config.ts +++ b/packages/templates/template-ext-vue/vite.config.ts @@ -1,19 +1,7 @@ -import path from "node:path" import vue from "@vitejs/plugin-vue" -import autoprefixer from "autoprefixer" import { defineConfig } from "vite" -// https://vitejs.dev/config/ +// https://vite.dev/config/ export default defineConfig({ - css: { - postcss: { - plugins: [autoprefixer()] - } - }, - plugins: [vue()], - resolve: { - alias: { - "@": path.resolve(__dirname, "./src") - } - } + plugins: [vue()] }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2fd8c2d..f2685c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -381,6 +381,9 @@ importers: minimatch: specifier: ^10.0.1 version: 10.0.1 + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 semver: specifier: ^7.6.3 version: 7.6.3 @@ -657,6 +660,22 @@ importers: specifier: latest version: 1.1.13 + packages/tauri-plugins/jarvis: + dependencies: + typescript: + specifier: ^5.0.0 + version: 5.6.3 + devDependencies: + '@kksh/ci': + specifier: workspace:* + version: link:../../ci + '@kksh/supabase': + specifier: workspace:* + version: link:../../supabase + '@types/bun': + specifier: latest + version: 1.1.13 + packages/templates/template-ext-next: dependencies: '@kksh/api': @@ -664,19 +683,19 @@ importers: version: link:../../api '@kksh/react': specifier: 0.1.1 - version: 0.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.15) + version: 0.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(tailwindcss@3.4.15) '@radix-ui/react-icons': specifier: ^1.3.2 - version: 1.3.2(react@18.3.1) + version: 1.3.2(react@19.0.0-rc-66855b96-20241106) next: - specifier: 14.2.18 - version: 14.2.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 15.0.3 + version: 15.0.3(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) react: - specifier: ^18 - version: 18.3.1 + specifier: 19.0.0-rc-66855b96-20241106 + version: 19.0.0-rc-66855b96-20241106 react-dom: - specifier: ^18 - version: 18.3.1(react@18.3.1) + specifier: 19.0.0-rc-66855b96-20241106 + version: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) devDependencies: '@types/node': specifier: ^20 @@ -691,8 +710,8 @@ importers: specifier: ^8 version: 8.57.1 eslint-config-next: - specifier: 14.2.7 - version: 14.2.7(eslint@8.57.1)(typescript@5.6.3) + specifier: 15.0.3 + version: 15.0.3(eslint@8.57.1)(typescript@5.6.3) postcss: specifier: ^8 version: 8.4.49 @@ -962,32 +981,29 @@ importers: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.15) vue: - specifier: ^3.4.31 + specifier: ^3.5.12 version: 3.5.13(typescript@5.6.3) devDependencies: - '@types/node': - specifier: ^20.14.12 - version: 20.17.6 '@vitejs/plugin-vue': - specifier: ^5.0.5 - version: 5.2.0(vite@5.4.11(@types/node@20.17.6)(terser@5.36.0))(vue@3.5.13(typescript@5.6.3)) + specifier: ^5.1.4 + version: 5.2.0(vite@5.4.11(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.13(typescript@5.6.3)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) postcss: - specifier: ^8.4.47 + specifier: ^8.4.49 version: 8.4.49 tailwindcss: - specifier: ^3.4.9 + specifier: ^3.4.15 version: 3.4.15 typescript: - specifier: ^5.2.2 + specifier: ~5.6.2 version: 5.6.3 vite: - specifier: ^5.4.9 - version: 5.4.11(@types/node@20.17.6)(terser@5.36.0) + specifier: ^5.4.10 + version: 5.4.11(@types/node@22.8.7)(terser@5.36.0) vue-tsc: - specifier: ^2.0.24 + specifier: ^2.1.8 version: 2.1.10(typescript@5.6.3) packages/templates/template-ext-worker: @@ -1578,6 +1594,9 @@ packages: peerDependencies: effect: ^3.9.2 + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emotion/babel-plugin@11.12.0': resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} @@ -2020,6 +2039,111 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/checkbox@2.5.0': resolution: {integrity: sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==} engines: {node: '>=18'} @@ -2237,62 +2361,56 @@ packages: resolution: {integrity: sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw==} engines: {node: '>=18.0.0'} - '@next/env@14.2.18': - resolution: {integrity: sha512-2vWLOUwIPgoqMJKG6dt35fVXVhgM09tw4tK3/Q34GFXDrfiHlG7iS33VA4ggnjWxjiz9KV5xzfsQzJX6vGAekA==} + '@next/env@15.0.3': + resolution: {integrity: sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==} - '@next/eslint-plugin-next@14.2.7': - resolution: {integrity: sha512-+7xh142AdhZGjY9/L0iFo7mqRBMJHe+q+uOL+hto1Lfo9DeWCGcR6no4StlFbVSVcA6fQLKEX6y6qhMsSKbgNQ==} + '@next/eslint-plugin-next@15.0.3': + resolution: {integrity: sha512-3Ln/nHq2V+v8uIaxCR6YfYo7ceRgZNXfTd3yW1ukTaFbO+/I8jNakrjYWODvG9BuR2v5kgVtH/C8r0i11quOgw==} - '@next/swc-darwin-arm64@14.2.18': - resolution: {integrity: sha512-tOBlDHCjGdyLf0ube/rDUs6VtwNOajaWV+5FV/ajPgrvHeisllEdymY/oDgv2cx561+gJksfMUtqf8crug7sbA==} + '@next/swc-darwin-arm64@15.0.3': + resolution: {integrity: sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.18': - resolution: {integrity: sha512-uJCEjutt5VeJ30jjrHV1VIHCsbMYnEqytQgvREx+DjURd/fmKy15NaVK4aR/u98S1LGTnjq35lRTnRyygglxoA==} + '@next/swc-darwin-x64@15.0.3': + resolution: {integrity: sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.18': - resolution: {integrity: sha512-IL6rU8vnBB+BAm6YSWZewc+qvdL1EaA+VhLQ6tlUc0xp+kkdxQrVqAnh8Zek1ccKHlTDFRyAft0e60gteYmQ4A==} + '@next/swc-linux-arm64-gnu@15.0.3': + resolution: {integrity: sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.18': - resolution: {integrity: sha512-RCaENbIZqKKqTlL8KNd+AZV/yAdCsovblOpYFp0OJ7ZxgLNbV5w23CUU1G5On+0fgafrsGcW+GdMKdFjaRwyYA==} + '@next/swc-linux-arm64-musl@15.0.3': + resolution: {integrity: sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.18': - resolution: {integrity: sha512-3kmv8DlyhPRCEBM1Vavn8NjyXtMeQ49ID0Olr/Sut7pgzaQTo4h01S7Z8YNE0VtbowyuAL26ibcz0ka6xCTH5g==} + '@next/swc-linux-x64-gnu@15.0.3': + resolution: {integrity: sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.18': - resolution: {integrity: sha512-mliTfa8seVSpTbVEcKEXGjC18+TDII8ykW4a36au97spm9XMPqQTpdGPNBJ9RySSFw9/hLuaCMByluQIAnkzlw==} + '@next/swc-linux-x64-musl@15.0.3': + resolution: {integrity: sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.18': - resolution: {integrity: sha512-J5g0UFPbAjKYmqS3Cy7l2fetFmWMY9Oao32eUsBPYohts26BdrMUyfCJnZFQkX9npYaHNDOWqZ6uV9hSDPw9NA==} + '@next/swc-win32-arm64-msvc@15.0.3': + resolution: {integrity: sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.18': - resolution: {integrity: sha512-Ynxuk4ZgIpdcN7d16ivJdjsDG1+3hTvK24Pp8DiDmIa2+A4CfhJSEHHVndCHok6rnLUzAZD+/UOKESQgTsAZGg==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@next/swc-win32-x64-msvc@14.2.18': - resolution: {integrity: sha512-dtRGMhiU9TN5nyhwzce+7c/4CCeykYS+ipY/4mIrGzJ71+7zNo55ZxCB7cAVuNqdwtYniFNR2c9OFQ6UdFIMcg==} + '@next/swc-win32-x64-msvc@15.0.3': + resolution: {integrity: sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3689,9 +3807,6 @@ packages: '@swc/helpers@0.5.13': resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} - '@swc/helpers@0.5.5': - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - '@tailwindcss/aspect-ratio@0.4.2': resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} peerDependencies: @@ -4192,16 +4307,6 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.2.0': - resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/parser@8.14.0': resolution: {integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4226,10 +4331,6 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@7.2.0': - resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@8.14.0': resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4271,10 +4372,6 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.2.0': - resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@8.14.0': resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4292,15 +4389,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.2.0': - resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@8.14.0': resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4345,10 +4433,6 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@7.2.0': - resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@8.14.0': resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5035,10 +5119,17 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} @@ -5820,10 +5911,10 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-config-next@14.2.7: - resolution: {integrity: sha512-ppmy+QdQ7qkuCHGDlPjWaoSbJvjGpWSBD4zEW8f1eWlxYXYpZK7QzBOer1EcHKT3uKhlY1JjUus9g7Kvv712rw==} + eslint-config-next@15.0.3: + resolution: {integrity: sha512-IGP2DdQQrgjcr4mwFPve4DrCqo7CVVez1WoYY47XwKSrYO4hC0Dlb+iJA60i0YfICOzgNADIb8r28BpQ5Zs0wg==} peerDependencies: - eslint: ^7.23.0 || ^8.0.0 + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' peerDependenciesMeta: typescript: @@ -5899,6 +5990,12 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@5.0.0: + resolution: {integrity: sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + eslint-plugin-react-refresh@0.4.14: resolution: {integrity: sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==} peerDependencies: @@ -6049,6 +6146,10 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -6278,11 +6379,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -6566,6 +6662,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} @@ -6780,10 +6879,6 @@ packages: resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} engines: {node: '>= 0.4'} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -7209,10 +7304,6 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -7344,21 +7435,24 @@ packages: react: ^16.8 || ^17 || ^18 react-dom: ^16.8 || ^17 || ^18 - next@14.2.18: - resolution: {integrity: sha512-H9qbjDuGivUDEnK6wa+p2XKO+iMzgVgyr9Zp/4Iv29lKa+DYaxJGjOeEA+5VOvJh/M7HLiskehInSa0cWxVXUw==} - engines: {node: '>=18.17.0'} + next@15.0.3: + resolution: {integrity: sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-66855b96-20241106 + react-dom: ^18.2.0 || 19.0.0-rc-66855b96-20241106 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': optional: true '@playwright/test': optional: true + babel-plugin-react-compiler: + optional: true sass: optional: true @@ -8242,6 +8336,11 @@ packages: peerDependencies: react: ^18.3.1 + react-dom@19.0.0-rc-66855b96-20241106: + resolution: {integrity: sha512-D25vdaytZ1wFIRiwNU98NPQ/upS2P8Co4/oNoa02PzHbh8deWdepjm5qwZM/46OdSiGv4WSWwxP55RO9obqJEQ==} + peerDependencies: + react: 19.0.0-rc-66855b96-20241106 + react-hook-form@7.53.2: resolution: {integrity: sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw==} engines: {node: '>=18.0.0'} @@ -8310,6 +8409,10 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + react@19.0.0-rc-66855b96-20241106: + resolution: {integrity: sha512-klH7xkT71SxRCx4hb1hly5FJB21Hz0ACyxbXYAECEqssUjtJeFUAaI2U1DgJAzkGEnvEm3DkxuBchMC/9K4ipg==} + engines: {node: '>=0.10.0'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -8536,6 +8639,9 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.25.0-rc-66855b96-20241106: + resolution: {integrity: sha512-HQXp/Mnp/MMRSXMQF7urNFla+gmtXW/Gr1KliuR0iboTit4KvZRY8KYaq5ccCTAOJiUqQh2rE2F3wgUekmgdlA==} + scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} @@ -8582,6 +8688,10 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -8631,6 +8741,9 @@ packages: simple-git@3.27.0: resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-wcswidth@1.0.1: resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} @@ -8800,13 +8913,13 @@ packages: style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} - styled-jsx@5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' peerDependenciesMeta: '@babel/core': optional: true @@ -10827,6 +10940,11 @@ snapshots: fast-check: 3.23.0 optional: true + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.12.0': dependencies: '@babel/helper-module-imports': 7.25.9 @@ -11100,6 +11218,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@floating-ui/dom': 1.6.12 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + '@floating-ui/utils@0.2.8': {} '@floating-ui/vue@1.1.5(vue@3.5.13(typescript@5.6.3))': @@ -11134,6 +11258,10 @@ snapshots: dependencies: react-hook-form: 7.53.2(react@18.3.1) + '@hookform/resolvers@3.9.1(react-hook-form@7.53.2(react@19.0.0-rc-66855b96-20241106))': + dependencies: + react-hook-form: 7.53.2(react@19.0.0-rc-66855b96-20241106) + '@huakunshen/comlink@4.4.1': {} '@humanfs/core@0.19.1': {} @@ -11184,6 +11312,81 @@ snapshots: '@iconify/types@2.0.0': {} + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@inquirer/checkbox@2.5.0': dependencies: '@inquirer/core': 9.2.1 @@ -11409,6 +11612,62 @@ snapshots: - '@types/react-dom' - tailwindcss + '@kksh/react@0.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(tailwindcss@3.4.15)': + dependencies: + '@hookform/resolvers': 3.9.1(react-hook-form@7.53.2(react@19.0.0-rc-66855b96-20241106)) + '@radix-ui/react-accordion': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-alert-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-aspect-ratio': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-avatar': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-checkbox': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-collapsible': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context-menu': 2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dropdown-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-hover-card': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-icons': 1.3.2(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-label': 2.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-menubar': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-navigation-menu': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-popover': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-progress': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-radio-group': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-scroll-area': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-select': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-separator': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slider': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-switch': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-tabs': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-toast': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-tooltip': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + class-variance-authority: 0.7.0 + clsx: 2.1.1 + cmdk: 1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + date-fns: 3.6.0 + embla-carousel-react: 8.4.0(react@19.0.0-rc-66855b96-20241106) + input-otp: 1.4.1(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + jotai: 2.10.2(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + lucide-react: 0.414.0(react@19.0.0-rc-66855b96-20241106) + next-themes: 0.3.0(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-day-picker: 8.10.1(date-fns@3.6.0)(react@19.0.0-rc-66855b96-20241106) + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react-hook-form: 7.53.2(react@19.0.0-rc-66855b96-20241106) + react-resizable-panels: 2.1.7(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + recharts: 2.13.3(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + sonner: 1.7.0(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + tailwind-merge: 2.5.4 + tailwindcss-animate: 1.0.7(tailwindcss@3.4.15) + vaul: 0.9.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + zod: 3.23.8 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - tailwindcss + '@kksh/svelte5@0.1.10(lucide-svelte@0.460.1(svelte@5.2.3))(svelte-sonner@0.3.28(svelte@5.2.3))(svelte@5.2.3)(sveltekit-superforms@2.20.1(@sveltejs/kit@2.8.1(@sveltejs/vite-plugin-svelte@4.0.1(svelte@5.2.3)(vite@5.4.11(@types/node@22.8.7)(terser@5.36.0)))(svelte@5.2.3)(vite@5.4.11(@types/node@22.8.7)(terser@5.36.0)))(@types/json-schema@7.0.15)(svelte@5.2.3)(typescript@5.6.3))': dependencies: '@tanstack/table-core': 8.20.5 @@ -11603,37 +11862,34 @@ snapshots: '@netlify/node-cookies': 0.1.0 urlpattern-polyfill: 8.0.2 - '@next/env@14.2.18': {} + '@next/env@15.0.3': {} - '@next/eslint-plugin-next@14.2.7': + '@next/eslint-plugin-next@15.0.3': dependencies: - glob: 10.3.10 + fast-glob: 3.3.1 - '@next/swc-darwin-arm64@14.2.18': + '@next/swc-darwin-arm64@15.0.3': optional: true - '@next/swc-darwin-x64@14.2.18': + '@next/swc-darwin-x64@15.0.3': optional: true - '@next/swc-linux-arm64-gnu@14.2.18': + '@next/swc-linux-arm64-gnu@15.0.3': optional: true - '@next/swc-linux-arm64-musl@14.2.18': + '@next/swc-linux-arm64-musl@15.0.3': optional: true - '@next/swc-linux-x64-gnu@14.2.18': + '@next/swc-linux-x64-gnu@15.0.3': optional: true - '@next/swc-linux-x64-musl@14.2.18': + '@next/swc-linux-x64-musl@15.0.3': optional: true - '@next/swc-win32-arm64-msvc@14.2.18': + '@next/swc-win32-arm64-msvc@15.0.3': optional: true - '@next/swc-win32-ia32-msvc@14.2.18': - optional: true - - '@next/swc-win32-x64-msvc@14.2.18': + '@next/swc-win32-x64-msvc@15.0.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -11975,6 +12231,23 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-accordion@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collapsible': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-alert-dialog@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -11989,6 +12262,20 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-alert-dialog@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -11998,6 +12285,15 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-aspect-ratio@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12007,6 +12303,15 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-aspect-ratio@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-avatar@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) @@ -12019,6 +12324,18 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-avatar@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-checkbox@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12035,6 +12352,22 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-checkbox@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-collapsible@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12051,6 +12384,22 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-collapsible@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12063,12 +12412,30 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-context-menu@2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12083,18 +12450,44 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-context-menu@2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-context@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-context@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-context@1.1.1(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-context@1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-dialog@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12117,12 +12510,40 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-dialog@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + aria-hidden: 1.2.4 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-direction@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-direction@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12136,6 +12557,19 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-dropdown-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12151,12 +12585,33 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-dropdown-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12168,6 +12623,17 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-hover-card@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12185,10 +12651,31 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-hover-card@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-icons@1.3.2(react@18.3.1)': dependencies: react: 18.3.1 + '@radix-ui/react-icons@1.3.2(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + '@radix-ui/react-id@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12196,6 +12683,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-id@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-label@2.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12205,6 +12699,15 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-label@2.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12231,6 +12734,32 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + aria-hidden: 1.2.4 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-menubar@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12249,6 +12778,24 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-menubar@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-navigation-menu@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12271,6 +12818,28 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-navigation-menu@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-popover@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12294,6 +12863,29 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-popover@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + aria-hidden: 1.2.4 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12312,6 +12904,24 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/rect': 1.1.0 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12322,6 +12932,16 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12332,6 +12952,16 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12341,6 +12971,15 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-progress@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12351,6 +12990,16 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-progress@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-radio-group@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12369,6 +13018,24 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-radio-group@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12386,6 +13053,23 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-scroll-area@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 @@ -12403,6 +13087,23 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-scroll-area@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-select@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 @@ -12432,6 +13133,35 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-select@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + aria-hidden: 1.2.4 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12441,6 +13171,15 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-slider@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 @@ -12460,6 +13199,25 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-slider@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-slot@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12467,6 +13225,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-slot@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-switch@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12482,6 +13247,21 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-switch@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-tabs@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12498,6 +13278,22 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-tabs@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-toast@1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12518,6 +13314,26 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-toast@1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-toggle-group@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12533,6 +13349,21 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-toggle-group@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-toggle@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12544,6 +13375,17 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-toggle@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -12564,12 +13406,38 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12577,6 +13445,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12584,18 +13459,37 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 @@ -12603,6 +13497,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/rect': 1.1.0 + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -12610,6 +13511,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + optionalDependencies: + '@types/react': 18.3.12 + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12619,6 +13527,15 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/rect@1.1.0': {} '@redocly/ajv@8.11.2': @@ -13432,11 +14349,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.5': - dependencies: - '@swc/counter': 0.1.3 - tslib: 2.8.1 - '@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.15)': dependencies: tailwindcss: 3.4.15 @@ -13966,6 +14878,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.15.0 + '@typescript-eslint/type-utils': 8.15.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/utils': 8.15.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.15.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -13997,19 +14927,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@typescript-eslint/scope-manager': 7.2.0 - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.7(supports-color@9.4.0) - eslint: 8.57.1 - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.14.0 @@ -14023,6 +14940,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.15.0 + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.15.0 + debug: 4.3.7(supports-color@9.4.0) + eslint: 8.57.1 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.15.0 @@ -14041,11 +14971,6 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@7.2.0': - dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - '@typescript-eslint/scope-manager@8.14.0': dependencies: '@typescript-eslint/types': 8.14.0 @@ -14080,6 +15005,18 @@ snapshots: - eslint - supports-color + '@typescript-eslint/type-utils@8.15.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.15.0(eslint@8.57.1)(typescript@5.6.3) + debug: 4.3.7(supports-color@9.4.0) + eslint: 8.57.1 + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) @@ -14094,8 +15031,6 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@7.2.0': {} - '@typescript-eslint/types@8.14.0': {} '@typescript-eslint/types@8.15.0': {} @@ -14115,21 +15050,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.2.0(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.7(supports-color@9.4.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.14.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.14.0 @@ -14182,6 +15102,18 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@8.15.0(eslint@8.57.1)(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.15.0 + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) + eslint: 8.57.1 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) @@ -14199,11 +15131,6 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.2.0': - dependencies: - '@typescript-eslint/types': 7.2.0 - eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.14.0': dependencies: '@typescript-eslint/types': 8.14.0 @@ -14361,11 +15288,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.0(vite@5.4.11(@types/node@20.17.6)(terser@5.36.0))(vue@3.5.13(typescript@5.6.3))': - dependencies: - vite: 5.4.11(@types/node@20.17.6)(terser@5.36.0) - vue: 3.5.13(typescript@5.6.3) - '@vitejs/plugin-vue@5.2.0(vite@5.4.11(@types/node@22.8.7)(terser@5.36.0))(vue@3.5.13(typescript@5.6.3))': dependencies: vite: 5.4.11(@types/node@22.8.7)(terser@5.36.0) @@ -14822,7 +15744,7 @@ snapshots: caniuse-lite: 1.0.30001676 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.1.0 + picocolors: 1.1.1 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -14832,7 +15754,7 @@ snapshots: caniuse-lite: 1.0.30001676 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.1.0 + picocolors: 1.1.1 postcss: 8.4.49 postcss-value-parser: 4.2.0 @@ -15129,6 +16051,18 @@ snapshots: - '@types/react' - '@types/react-dom' + cmdk@1.0.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + use-sync-external-store: 1.2.2(react@19.0.0-rc-66855b96-20241106) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + co@4.6.0: {} color-convert@2.0.1: @@ -15137,8 +16071,20 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true + color-support@1.1.3: {} + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + colord@2.9.3: {} colorette@1.4.0: {} @@ -15773,6 +16719,12 @@ snapshots: embla-carousel-reactive-utils: 8.4.0(embla-carousel@8.4.0) react: 18.3.1 + embla-carousel-react@8.4.0(react@19.0.0-rc-66855b96-20241106): + dependencies: + embla-carousel: 8.4.0 + embla-carousel-reactive-utils: 8.4.0(embla-carousel@8.4.0) + react: 19.0.0-rc-66855b96-20241106 + embla-carousel-reactive-utils@8.4.0(embla-carousel@8.4.0): dependencies: embla-carousel: 8.4.0 @@ -16009,18 +16961,19 @@ snapshots: eslint: 9.15.0(jiti@2.4.0) semver: 7.6.3 - eslint-config-next@14.2.7(eslint@8.57.1)(typescript@5.6.3): + eslint-config-next@15.0.3(eslint@8.57.1)(typescript@5.6.3): dependencies: - '@next/eslint-plugin-next': 14.2.7 + '@next/eslint-plugin-next': 15.0.3 '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.15.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.2(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint-plugin-react-hooks: 5.0.0(eslint@8.57.1) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -16045,37 +16998,37 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7(supports-color@9.4.0) enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -16086,7 +17039,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -16098,7 +17051,7 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -16127,6 +17080,10 @@ snapshots: dependencies: eslint: 8.57.1 + eslint-plugin-react-hooks@5.0.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-plugin-react-refresh@0.4.14(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -16393,6 +17350,14 @@ snapshots: fast-fifo@1.3.2: {} + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -16648,14 +17613,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.10: - dependencies: - foreground-child: 3.3.0 - jackspeak: 2.3.6 - minimatch: 9.0.5 - minipass: 7.1.2 - path-scurry: 1.11.1 - glob@10.4.5: dependencies: foreground-child: 3.3.0 @@ -16933,6 +17890,11 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + input-otp@1.4.1(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + inquirer@10.2.2: dependencies: '@inquirer/core': 9.2.1 @@ -16983,6 +17945,9 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: + optional: true + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 @@ -17163,12 +18128,6 @@ snapshots: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -17197,6 +18156,11 @@ snapshots: '@types/react': 18.3.12 react: 18.3.1 + jotai@2.10.2(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106): + optionalDependencies: + '@types/react': 18.3.12 + react: 19.0.0-rc-66855b96-20241106 + js-levenshtein@1.1.6: {} js-tokens@4.0.0: {} @@ -17458,6 +18422,10 @@ snapshots: dependencies: react: 18.3.1 + lucide-react@0.414.0(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + lucide-svelte@0.416.0(svelte@5.1.9): dependencies: svelte: 5.1.9 @@ -17633,10 +18601,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -17743,27 +18707,32 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-themes@0.3.0(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): dependencies: - '@next/env': 14.2.18 - '@swc/helpers': 0.5.5 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + + next@15.0.3(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + '@next/env': 15.0.3 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.13 busboy: 1.6.0 caniuse-lite: 1.0.30001676 - graceful-fs: 4.2.11 postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(react@18.3.1) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + styled-jsx: 5.1.6(react@19.0.0-rc-66855b96-20241106) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.18 - '@next/swc-darwin-x64': 14.2.18 - '@next/swc-linux-arm64-gnu': 14.2.18 - '@next/swc-linux-arm64-musl': 14.2.18 - '@next/swc-linux-x64-gnu': 14.2.18 - '@next/swc-linux-x64-musl': 14.2.18 - '@next/swc-win32-arm64-msvc': 14.2.18 - '@next/swc-win32-ia32-msvc': 14.2.18 - '@next/swc-win32-x64-msvc': 14.2.18 + '@next/swc-darwin-arm64': 15.0.3 + '@next/swc-darwin-x64': 15.0.3 + '@next/swc-linux-arm64-gnu': 15.0.3 + '@next/swc-linux-arm64-musl': 15.0.3 + '@next/swc-linux-x64-gnu': 15.0.3 + '@next/swc-linux-x64-musl': 15.0.3 + '@next/swc-win32-arm64-msvc': 15.0.3 + '@next/swc-win32-x64-msvc': 15.0.3 + sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -18717,16 +19686,30 @@ snapshots: date-fns: 3.6.0 react: 18.3.1 + react-day-picker@8.10.1(date-fns@3.6.0)(react@19.0.0-rc-66855b96-20241106): + dependencies: + date-fns: 3.6.0 + react: 19.0.0-rc-66855b96-20241106 + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 + react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + scheduler: 0.25.0-rc-66855b96-20241106 + react-hook-form@7.53.2(react@18.3.1): dependencies: react: 18.3.1 + react-hook-form@7.53.2(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + react-is@16.13.1: {} react-is@18.3.1: {} @@ -18741,6 +19724,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + react-remove-scroll-bar@2.3.6(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + react-remove-scroll@2.6.0(@types/react@18.3.12)(react@18.3.1): dependencies: react: 18.3.1 @@ -18752,11 +19743,27 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + react-remove-scroll@2.6.0(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + tslib: 2.8.1 + use-callback-ref: 1.3.2(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + use-sidecar: 1.1.2(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106) + optionalDependencies: + '@types/react': 18.3.12 + react-resizable-panels@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-resizable-panels@2.1.7(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react-smooth@4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: fast-equals: 5.0.1 @@ -18765,6 +19772,14 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-smooth@4.0.1(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + fast-equals: 5.0.1 + prop-types: 15.8.1 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react-style-singleton@2.2.1(@types/react@18.3.12)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -18774,6 +19789,15 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + react-style-singleton@2.2.1(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106): + dependencies: + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 19.0.0-rc-66855b96-20241106 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.0 @@ -18783,10 +19807,21 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-transition-group@4.4.5(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + '@babel/runtime': 7.26.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react@18.3.1: dependencies: loose-envify: 1.4.0 + react@19.0.0-rc-66855b96-20241106: {} + read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -18851,6 +19886,19 @@ snapshots: tiny-invariant: 1.3.3 victory-vendor: 36.9.2 + recharts@2.13.3(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + clsx: 2.1.1 + eventemitter3: 4.0.7 + lodash: 4.17.21 + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react-is: 18.3.1 + react-smooth: 4.0.1(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + recharts-scale: 0.4.5 + tiny-invariant: 1.3.3 + victory-vendor: 36.9.2 + rechoir@0.6.2: dependencies: resolve: 1.22.8 @@ -19072,6 +20120,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + scheduler@0.25.0-rc-66855b96-20241106: {} + scule@1.3.0: {} semver@6.3.1: {} @@ -19137,6 +20187,33 @@ snapshots: setprototypeof@1.2.0: {} + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + optional: true + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 @@ -19192,6 +20269,11 @@ snapshots: transitivePeerDependencies: - supports-color + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true + simple-wcswidth@1.0.1: {} sirv@2.0.4: @@ -19219,6 +20301,11 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + sonner@1.7.0(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -19371,10 +20458,10 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.1(react@18.3.1): + styled-jsx@5.1.6(react@19.0.0-rc-66855b96-20241106): dependencies: client-only: 0.0.1 - react: 18.3.1 + react: 19.0.0-rc-66855b96-20241106 stylehacks@7.0.4(postcss@8.4.49): dependencies: @@ -20308,6 +21395,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + use-callback-ref@1.3.2(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + use-sidecar@1.1.2(@types/react@18.3.12)(react@18.3.1): dependencies: detect-node-es: 1.1.0 @@ -20316,10 +21410,22 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + use-sidecar@1.1.2(@types/react@18.3.12)(react@19.0.0-rc-66855b96-20241106): + dependencies: + detect-node-es: 1.1.0 + react: 19.0.0-rc-66855b96-20241106 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + use-sync-external-store@1.2.2(react@18.3.1): dependencies: react: 18.3.1 + use-sync-external-store@1.2.2(react@19.0.0-rc-66855b96-20241106): + dependencies: + react: 19.0.0-rc-66855b96-20241106 + util-deprecate@1.0.2: {} uuid@11.0.2: {} @@ -20394,6 +21500,15 @@ snapshots: - '@types/react' - '@types/react-dom' + vaul@0.9.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + dependencies: + '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + vee-validate@4.14.7(vue@3.5.13(typescript@5.6.3)): dependencies: '@vue/devtools-api': 7.6.4 @@ -20515,16 +21630,6 @@ snapshots: fsevents: 2.3.3 terser: 5.36.0 - vite@5.4.11(@types/node@20.17.6)(terser@5.36.0): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.49 - rollup: 4.24.3 - optionalDependencies: - '@types/node': 20.17.6 - fsevents: 2.3.3 - terser: 5.36.0 - vite@5.4.11(@types/node@22.8.7)(terser@5.36.0): dependencies: esbuild: 0.21.5 diff --git a/vendors/applications-rs b/vendors/applications-rs index 6b38505..ac41b05 160000 --- a/vendors/applications-rs +++ b/vendors/applications-rs @@ -1 +1 @@ -Subproject commit 6b38505d8534d81d826d613527eb75fd8da4ede4 +Subproject commit ac41b051f0ebeac96213c6c32621b098634219ac