diff --git a/.cursorrules b/.cursorrules
new file mode 100644
index 00000000..0b0c009c
--- /dev/null
+++ b/.cursorrules
@@ -0,0 +1,29 @@
+# Hydra Project Rules
+
+## Logging
+
+- **Always use `logger` instead of `console` for logging** in both main and renderer processes
+- In main process: `import { logger } from "@main/services";`
+- In renderer process: `import { logger } from "@renderer/logger";`
+- Replace all instances of:
+ - `console.log()` → `logger.log()`
+ - `console.error()` → `logger.error()`
+ - `console.warn()` → `logger.warn()`
+ - `console.info()` → `logger.info()`
+ - `console.debug()` → `logger.debug()`
+- Do not use `console` for any logging purposes
+
+## Internationalization (i18n)
+
+- All user-facing strings must be translated using i18next
+- Use the `useTranslation` hook in React components: `const { t } = useTranslation("namespace");`
+- Add new translation keys to `src/locales/en/translation.json`
+- Never hardcode English strings in the UI code
+- Placeholder text in form fields must also be translated
+
+## Code Style
+
+- Use ESLint and Prettier for code formatting
+- Follow TypeScript strict mode conventions
+- Use async/await instead of promises when possible
+- Prefer named exports over default exports for utilities and services
diff --git a/.env.example b/.env.example
index 3f914eb3..051d8aa3 100644
--- a/.env.example
+++ b/.env.example
@@ -3,3 +3,4 @@ MAIN_VITE_AUTH_URL=
MAIN_VITE_WS_URL=
RENDERER_VITE_REAL_DEBRID_REFERRAL_ID=
RENDERER_VITE_TORBOX_REFERRAL_CODE=
+MAIN_VITE_LAUNCHER_SUBDOMAIN=
diff --git a/.github/workflows/build-renderer.yml b/.github/workflows/build-renderer.yml
new file mode 100644
index 00000000..34f7d303
--- /dev/null
+++ b/.github/workflows/build-renderer.yml
@@ -0,0 +1,54 @@
+name: Build Renderer
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+on:
+ push:
+ branches:
+ - release/**
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ permissions:
+ contents: read
+
+ env:
+ NODE_OPTIONS: --max-old-space-size=4096
+ BRANCH_NAME: ${{ github.ref_name }}
+
+ steps:
+ - name: Check out Git repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 22.21.0
+ cache: "yarn"
+
+ - name: Enable Corepack (Yarn)
+ run: corepack enable
+
+ - name: Install dependencies
+ run: yarn install --frozen-lockfile --ignore-scripts
+
+ - name: Build Renderer
+ run: yarn build
+ env:
+ RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.EXTERNAL_RESOURCES_URL }}
+
+ - name: Deploy to Cloudflare Pages
+ env:
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ run: |
+ npx --yes wrangler@3 pages deploy out/renderer \
+ --project-name="hydra" \
+ --branch "$BRANCH_NAME" \
+ --commit-dirty
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 0f3e0a66..92fcebc3 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,11 +1,12 @@
name: Build
+on:
+ pull_request:
+
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
-on: pull_request
-
jobs:
build:
strategy:
@@ -22,7 +23,7 @@ jobs:
- name: Install Node.js
uses: actions/setup-node@v4
with:
- node-version: 20.18.0
+ node-version: 22.21.0
- name: Install dependencies
run: yarn --frozen-lockfile
@@ -38,11 +39,15 @@ jobs:
- name: Build with cx_Freeze
run: python python_rpc/setup.py build
+ - name: Copy OpenSSL DLLs
+ if: matrix.os == 'windows-2022'
+ run: |
+ cp hydra-python-rpc/lib/libcrypto-1_1.dll hydra-python-rpc/lib/libcrypto-1_1-x64.dll
+ cp hydra-python-rpc/lib/libssl-1_1.dll hydra-python-rpc/lib/libssl-1_1-x64.dll
+
- name: Build Linux
if: matrix.os == 'ubuntu-latest'
run: |
- sudo apt-get update
- sudo apt-get install -y libarchive-tools
yarn build:linux
env:
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_STAGING_API_URL }}
@@ -98,5 +103,4 @@ jobs:
dist/*.tar.gz
dist/*.yml
dist/*.blockmap
- dist/*.pacman
dist/*.AppImage
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 0a20e469..89e8b59f 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -17,7 +17,7 @@ jobs:
- name: Install Node.js
uses: actions/setup-node@v4
with:
- node-version: 20.18.0
+ node-version: 22.21.0
- name: Install dependencies
run: yarn --frozen-lockfile
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index babfb565..df01b358 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -6,7 +6,8 @@ concurrency:
on:
push:
- branches: main
+ branches:
+ - release/**
jobs:
build:
@@ -23,7 +24,7 @@ jobs:
- name: Install Node.js
uses: actions/setup-node@v4
with:
- node-version: 20.18.0
+ node-version: 22.21.0
- name: Install dependencies
run: yarn --frozen-lockfile
@@ -39,11 +40,15 @@ jobs:
- name: Build with cx_Freeze
run: python python_rpc/setup.py build
+ - name: Copy OpenSSL DLLs
+ if: matrix.os == 'windows-2022'
+ run: |
+ cp hydra-python-rpc/lib/libcrypto-1_1.dll hydra-python-rpc/lib/libcrypto-1_1-x64.dll
+ cp hydra-python-rpc/lib/libssl-1_1.dll hydra-python-rpc/lib/libssl-1_1-x64.dll
+
- name: Build Linux
if: matrix.os == 'ubuntu-latest'
run: |
- sudo apt-get update
- sudo apt-get install -y libarchive-tools
yarn build:linux
env:
MAIN_VITE_API_URL: ${{ vars.MAIN_VITE_API_URL }}
@@ -57,6 +62,7 @@ jobs:
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
RENDERER_VITE_REAL_DEBRID_REFERRAL_ID: ${{ vars.RENDERER_VITE_REAL_DEBRID_REFERRAL_ID }}
RENDERER_VITE_TORBOX_REFERRAL_CODE: ${{ vars.RENDERER_VITE_TORBOX_REFERRAL_CODE }}
+ MAIN_VITE_LAUNCHER_SUBDOMAIN: ${{ vars.MAIN_VITE_LAUNCHER_SUBDOMAIN }}
- name: Build Windows
if: matrix.os == 'windows-2022'
@@ -73,6 +79,7 @@ jobs:
RENDERER_VITE_SENTRY_DSN: ${{ vars.SENTRY_DSN }}
RENDERER_VITE_REAL_DEBRID_REFERRAL_ID: ${{ vars.RENDERER_VITE_REAL_DEBRID_REFERRAL_ID }}
RENDERER_VITE_TORBOX_REFERRAL_CODE: ${{ vars.RENDERER_VITE_TORBOX_REFERRAL_CODE }}
+ MAIN_VITE_LAUNCHER_SUBDOMAIN: ${{ vars.MAIN_VITE_LAUNCHER_SUBDOMAIN }}
- name: Create artifact
uses: actions/upload-artifact@v4
@@ -88,7 +95,6 @@ jobs:
dist/*.tar.gz
dist/*.yml
dist/*.blockmap
- dist/*.pacman
- name: Upload build
env:
@@ -117,6 +123,5 @@ jobs:
dist/*.tar.gz
dist/*.yml
dist/*.blockmap
- dist/*.pacman
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/update-aur.yml b/.github/workflows/update-aur.yml
new file mode 100644
index 00000000..52fe907e
--- /dev/null
+++ b/.github/workflows/update-aur.yml
@@ -0,0 +1,159 @@
+name: Update AUR Package
+
+on:
+ workflow_dispatch:
+ release:
+ types: [published]
+
+jobs:
+ update-aur:
+ runs-on: ubuntu-latest
+ container:
+ image: archlinux:latest
+
+ steps:
+ - name: Install dependencies
+ run: |
+ pacman -Syu --noconfirm
+ pacman -S --noconfirm nodejs npm git base-devel openssh jq pacman-contrib
+
+ - name: Create builder user
+ run: |
+ # Create builder user with home directory
+ useradd -m -s /bin/bash builder
+
+ # Add builder to wheel group for sudo access
+ usermod -aG wheel builder
+
+ # Configure sudo for builder user (no password required)
+ echo 'builder ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
+
+ - name: Setup SSH for AUR
+ run: |
+ mkdir -p ~/.ssh
+ echo "${{ secrets.AUR_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
+ chmod 600 ~/.ssh/id_rsa
+ chmod 700 ~/.ssh
+
+ # Add AUR host key to known_hosts
+ ssh-keyscan aur.archlinux.org >> ~/.ssh/known_hosts
+
+ # Configure SSH to use the key
+ cat > ~/.ssh/config << EOF
+ Host aur.archlinux.org
+ IdentityFile ~/.ssh/id_rsa
+ IdentitiesOnly yes
+ User aur
+ UserKnownHostsFile ~/.ssh/known_hosts
+ StrictHostKeyChecking no
+ EOF
+
+ # Start SSH agent and add key
+ eval "$(ssh-agent -s)"
+ ssh-add ~/.ssh/id_rsa
+
+ export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa -F ~/.ssh/config -o UserKnownHostsFile=$SSH_PATH/known_hosts"
+
+ git clone ssh://aur@aur.archlinux.org/hydra-launcher-bin.git
+
+ # Give builder user ownership of the repository
+ chown -R builder:builder hydra-launcher-bin
+
+ - name: Get version to update
+ id: get-version
+ run: |
+ if [ "${{ github.event_name }}" = "release" ]; then
+ VERSION="${{ github.event.release.tag_name }}"
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
+ echo "source=release" >> $GITHUB_OUTPUT
+ else
+ echo "Getting latest release version"
+ VERSION=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r '.tag_name' | sed 's/^v//')
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
+ echo "source=latest" >> $GITHUB_OUTPUT
+ fi
+
+ echo "Version to update: $VERSION"
+
+ - name: Check if update is needed
+ id: check-update
+ run: |
+ CURRENT_VERSION=$(grep '^pkgver=' hydra-launcher-bin/PKGBUILD | cut -d'=' -f2)
+ NEW_VERSION="${{ steps.get-version.outputs.version }}"
+
+ echo "Current AUR version: $CURRENT_VERSION"
+ echo "New version: $NEW_VERSION"
+
+ if [ "$CURRENT_VERSION" = "$NEW_VERSION" ]; then
+ echo "update_needed=false" >> $GITHUB_OUTPUT
+ echo "No update needed - versions are the same"
+ else
+ echo "update_needed=true" >> $GITHUB_OUTPUT
+ echo "Update needed"
+ fi
+
+ - name: Update PKGBUILD and .SRCINFO
+ if: steps.check-update.outputs.update_needed == 'true'
+ run: |
+ # Update pkgver in PKGBUILD
+ cd hydra-launcher-bin
+ NEW_VERSION="${{ steps.get-version.outputs.version }}"
+ NEW_VERSION="${NEW_VERSION#v}"
+
+ echo "Updating PKGBUILD pkgver to $NEW_VERSION"
+
+ # Read PKGBUILD and update pkgver line
+ sed -i "s/^pkgver=.*/pkgver=$NEW_VERSION/" ./PKGBUILD
+
+ # Reset pkgrel to 1 when version changes
+ sed -i "s/^pkgrel=.*/pkgrel=1/" ./PKGBUILD
+
+ echo "✅ Successfully updated pkgver to $NEW_VERSION in ./PKGBUILD"
+
+ # Update package checksums and generate .SRCINFO as builder user
+ sudo -u builder updpkgsums
+ sudo -u builder makepkg --printsrcinfo > .SRCINFO
+
+ - name: Commit and push changes
+ if: steps.check-update.outputs.update_needed == 'true'
+ run: |
+ cd hydra-launcher-bin
+ git config --global --add safe.directory .
+ git config --global user.name "github-actions[bot]"
+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
+
+ git add PKGBUILD .SRCINFO
+
+ echo "## Git Diff Preview"
+ echo "Changes that would be made:"
+ git diff PKGBUILD .SRCINFO || echo "No changes to show"
+ echo ""
+ echo "Staged changes:"
+ git add PKGBUILD .SRCINFO
+ git diff --staged || echo "No staged changes"
+
+ if git diff --staged --quiet; then
+ echo "No changes to commit"
+ else
+ COMMIT_MSG="v${{ steps.get-version.outputs.version }}"
+
+ git commit -m "$COMMIT_MSG"
+
+ export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa -F ~/.ssh/config -o UserKnownHostsFile=$SSH_PATH/known_hosts"
+
+ git push origin master
+ echo "Successfully updated AUR package to version ${{ steps.get-version.outputs.version }}"
+ fi
+
+ - name: Create summary
+ if: always()
+ run: |
+ echo "## AUR Update Summary" >> $GITHUB_STEP_SUMMARY
+ echo "- **Version**: ${{ steps.get-version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
+ echo "- **Source**: ${{ steps.get-version.outputs.source }}" >> $GITHUB_STEP_SUMMARY
+ echo "- **Update needed**: ${{ steps.check-update.outputs.update_needed }}" >> $GITHUB_STEP_SUMMARY
+ if [ "${{ steps.check-update.outputs.update_needed }}" = "true" ]; then
+ echo "- **Status**: ✅ AUR package updated successfully" >> $GITHUB_STEP_SUMMARY
+ else
+ echo "- **Status**: ⏭️ No update needed" >> $GITHUB_STEP_SUMMARY
+ fi
diff --git a/electron-builder.yml b/electron-builder.yml
index 50fe8139..ec162530 100644
--- a/electron-builder.yml
+++ b/electron-builder.yml
@@ -56,7 +56,6 @@ linux:
- AppImage
- snap
- deb
- - pacman
- rpm
maintainer: electronjs.org
category: Game
diff --git a/package.json b/package.json
index e21c962a..5d84e763 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "hydralauncher",
- "version": "3.6.8",
+ "version": "3.7.2",
"description": "Hydra",
"main": "./out/main/index.js",
"author": "Los Broxas",
@@ -32,17 +32,24 @@
"protoc": "npx protoc --ts_out src/main/generated --proto_path proto proto/*.proto"
},
"dependencies": {
- "@electron-toolkit/preload": "^3.0.0",
- "@electron-toolkit/utils": "^3.0.0",
- "@fontsource/noto-sans": "^5.1.0",
- "@hookform/resolvers": "^3.9.1",
+ "@electron-toolkit/preload": "^3.0.2",
+ "@electron-toolkit/utils": "^4.0.0",
+ "@fontsource/noto-sans": "^5.2.10",
+ "@hookform/resolvers": "^5.2.2",
"@monaco-editor/react": "^4.6.0",
"@primer/octicons-react": "^19.9.0",
- "@radix-ui/react-dropdown-menu": "^2.1.2",
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
"@reduxjs/toolkit": "^2.2.3",
+ "@tiptap/extension-bold": "^3.6.2",
+ "@tiptap/extension-italic": "^3.6.2",
+ "@tiptap/extension-link": "^3.6.2",
+ "@tiptap/extension-underline": "^3.6.2",
+ "@tiptap/react": "^3.6.2",
+ "@tiptap/starter-kit": "^3.6.2",
"auto-launch": "^5.0.6",
- "axios": "^1.7.9",
+ "axios": "^1.12.2",
"axios-cookiejar-support": "^5.0.5",
+ "check-disk-space": "^3.4.0",
"classic-level": "^2.0.0",
"classnames": "^2.5.1",
"color": "^4.2.3",
@@ -50,9 +57,7 @@
"crc": "^4.3.2",
"create-desktop-shortcuts": "^1.11.1",
"date-fns": "^3.6.0",
- "dexie": "^4.0.10",
- "diskusage": "^1.2.0",
- "electron-log": "^5.2.4",
+ "electron-log": "^5.4.3",
"electron-updater": "^6.6.2",
"embla-carousel-autoplay": "^8.6.0",
"embla-carousel-react": "^8.6.0",
@@ -63,6 +68,7 @@
"jsdom": "^24.0.0",
"jsonwebtoken": "^9.0.2",
"lodash-es": "^4.17.21",
+ "lucide-react": "^0.544.0",
"parse-torrent": "^11.0.18",
"rc-virtual-list": "^3.18.3",
"react-dnd": "^16.0.1",
@@ -80,11 +86,11 @@
"tar": "^7.4.3",
"tough-cookie": "^5.1.1",
"user-agents": "^1.1.387",
+ "uuid": "^13.0.0",
"winreg": "^1.2.5",
"ws": "^8.18.1",
"yaml": "^2.6.1",
- "yup": "^1.5.0",
- "zod": "^3.24.1"
+ "yup": "^1.5.0"
},
"devDependencies": {
"@aws-sdk/client-s3": "^3.705.0",
@@ -109,9 +115,9 @@
"@types/winreg": "^1.2.36",
"@types/ws": "^8.18.1",
"@vitejs/plugin-react": "^4.2.1",
- "electron": "^32.3.3",
+ "electron": "^37.7.1",
"electron-builder": "^26.0.12",
- "electron-vite": "^3.0.0",
+ "electron-vite": "^4.0.1",
"eslint": "^8.56.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.4",
@@ -123,8 +129,8 @@
"sass-embedded": "^1.80.6",
"ts-node": "^10.9.2",
"typescript": "^5.3.3",
- "vite": "^5.0.12",
- "vite-plugin-svgr": "^4.2.0"
+ "vite": "5.4.21",
+ "vite-plugin-svgr": "^4.5.0"
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
diff --git a/scripts/upload-build.cjs b/scripts/upload-build.cjs
index fe475163..15e3a5b4 100644
--- a/scripts/upload-build.cjs
+++ b/scripts/upload-build.cjs
@@ -20,7 +20,7 @@ const s3 = new S3Client({
const dist = path.resolve(__dirname, "..", "dist");
-const extensionsToUpload = [".deb", ".exe", ".pacman", ".AppImage"];
+const extensionsToUpload = [".deb", ".exe", ".AppImage"];
fs.readdir(dist, async (err, files) => {
if (err) throw err;
diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json
index 0c1ed914..668f1547 100755
--- a/src/locales/en/translation.json
+++ b/src/locales/en/translation.json
@@ -76,7 +76,19 @@
"edit_game_modal_drop_hero_image_here": "Drop hero image here",
"edit_game_modal_drop_to_replace_icon": "Drop to replace icon",
"edit_game_modal_drop_to_replace_logo": "Drop to replace logo",
- "edit_game_modal_drop_to_replace_hero": "Drop to replace hero"
+ "edit_game_modal_drop_to_replace_hero": "Drop to replace hero",
+ "install_decky_plugin": "Install Decky Plugin",
+ "update_decky_plugin": "Update Decky Plugin",
+ "decky_plugin_installed_version": "Decky Plugin (v{{version}})",
+ "install_decky_plugin_title": "Install Hydra Decky Plugin",
+ "install_decky_plugin_message": "This will download and install the Hydra plugin for Decky Loader. This may require elevated permissions. Continue?",
+ "update_decky_plugin_title": "Update Hydra Decky Plugin",
+ "update_decky_plugin_message": "A new version of the Hydra Decky plugin is available. Would you like to update it now?",
+ "decky_plugin_installed": "Decky plugin v{{version}} installed successfully",
+ "decky_plugin_installation_failed": "Failed to install Decky plugin: {{error}}",
+ "decky_plugin_installation_error": "Error installing Decky plugin: {{error}}",
+ "confirm": "Confirm",
+ "cancel": "Cancel"
},
"header": {
"search": "Search games",
@@ -200,6 +212,7 @@
"stats": "Stats",
"download_count": "Downloads",
"player_count": "Active players",
+ "rating_count": "Rating",
"download_error": "This download option is not available",
"download": "Download",
"executable_path_in_use": "Executable already in use by \"{{game}}\"",
@@ -207,6 +220,39 @@
"hydra_needs_to_remain_open": "for this download, Hydra needs to remain open util it's completed. If Hydra closes before completing, you will lose your progress.",
"achievements": "Achievements",
"achievements_count": "Achievements {{unlockedCount}}/{{achievementsCount}}",
+ "show_more": "Show more",
+ "show_less": "Show less",
+ "reviews": "Reviews",
+ "leave_a_review": "Leave a Review",
+ "write_review_placeholder": "Share your thoughts about this game...",
+ "sort_newest": "Newest",
+ "no_reviews_yet": "No reviews yet",
+ "be_first_to_review": "Be the first to share your thoughts about this game!",
+ "sort_oldest": "Oldest",
+ "sort_highest_score": "Highest Score",
+ "sort_lowest_score": "Lowest Score",
+ "sort_most_voted": "Most Voted",
+ "rating": "Rating",
+ "rating_stats": "Rating",
+ "rating_very_negative": "Very Negative",
+ "rating_negative": "Negative",
+ "rating_neutral": "Neutral",
+ "rating_positive": "Positive",
+ "rating_very_positive": "Very Positive",
+ "submit_review": "Submit",
+ "submitting": "Submitting...",
+ "review_submitted_successfully": "Review submitted successfully!",
+ "review_submission_failed": "Failed to submit review. Please try again.",
+ "review_cannot_be_empty": "Review text field cannot be empty.",
+ "review_deleted_successfully": "Review deleted successfully.",
+ "review_deletion_failed": "Failed to delete review. Please try again.",
+ "loading_reviews": "Loading reviews...",
+ "loading_more_reviews": "Loading more reviews...",
+ "load_more_reviews": "Load more reviews",
+ "you_seemed_to_enjoy_this_game": "You've seemed to enjoy this game",
+ "would_you_recommend_this_game": "Would you like to leave a review to this game?",
+ "yes": "Yes",
+ "maybe_later": "Maybe later",
"cloud_save": "Cloud save",
"cloud_save_description": "Save your progress in the cloud and continue playing on any device",
"backups": "Backups",
@@ -219,6 +265,7 @@
"uploading_backup": "Uploading backup…",
"no_backups": "You haven't created any backups for this game yet",
"backup_uploaded": "Backup uploaded",
+ "backup_failed": "Backup failed",
"backup_deleted": "Backup deleted",
"backup_restored": "Backup restored",
"see_all_achievements": "See all achievements",
@@ -303,7 +350,18 @@
"caption": "Caption",
"audio": "Audio",
"filter_by_source": "Filter by source",
- "no_repacks_found": "No sources found for this game"
+ "no_repacks_found": "No sources found for this game",
+ "delete_review": "Delete review",
+ "remove_review": "Remove Review",
+ "delete_review_modal_title": "Are you sure you want to delete your review?",
+ "delete_review_modal_description": "This action cannot be undone.",
+ "delete_review_modal_delete_button": "Delete",
+ "delete_review_modal_cancel_button": "Cancel",
+ "vote_failed": "Failed to register your vote. Please try again.",
+ "show_original": "Show original",
+ "show_translation": "Show translation",
+ "show_original_translated_from": "Show original (translated from {{language}})",
+ "hide_original": "Hide original"
},
"activation": {
"title": "Activate Hydra",
@@ -341,7 +399,6 @@
"stop_seeding": "Stop seeding",
"resume_seeding": "Resume seeding",
"options": "Manage",
- "alldebrid_size_not_supported": "Download info for AllDebrid is not supported yet",
"extract": "Extract files",
"extracting": "Extracting files…"
},
@@ -371,6 +428,9 @@
"validate_download_source": "Validate",
"remove_download_source": "Remove",
"add_download_source": "Add source",
+ "adding": "Adding…",
+ "failed_add_download_source": "Failed to add download source. Please try again.",
+ "download_source_already_exists": "This download source URL already exists.",
"download_count_zero": "No download options",
"download_count_one": "{{countFormatted}} download option",
"download_count_other": "{{countFormatted}} download options",
@@ -378,9 +438,16 @@
"add_download_source_description": "Insert the URL of the .json file",
"download_source_up_to_date": "Up-to-date",
"download_source_errored": "Errored",
+ "download_source_pending_matching": "Updating soon",
+ "download_source_matched": "Up to date",
+ "download_source_matching": "Updating",
+ "download_source_failed": "Error",
+ "download_source_no_information": "No information available",
"sync_download_sources": "Sync sources",
"removed_download_source": "Download source removed",
"removed_download_sources": "Download sources removed",
+ "removed_all_download_sources": "All download sources removed",
+ "download_sources_synced_successfully": "All download sources are synced",
"cancel_button_confirmation_delete_all_sources": "No",
"confirm_button_confirmation_delete_all_sources": "Yes, delete everything",
"title_confirmation_delete_all_sources": "Delete all download sources",
@@ -393,6 +460,7 @@
"found_download_option_one": "Found {{countFormatted}} download option",
"found_download_option_other": "Found {{countFormatted}} download options",
"import": "Import",
+ "importing": "Importing...",
"public": "Public",
"private": "Private",
"friends_only": "Friends only",
@@ -410,6 +478,7 @@
"seed_after_download_complete": "Seed after download complete",
"show_hidden_achievement_description": "Show hidden achievements description before unlocking them",
"account": "Account",
+ "hydra_cloud": "Hydra Cloud",
"no_users_blocked": "You have no blocked users",
"subscription_active_until": "Your Hydra Cloud is active until {{date}}",
"manage_subscription": "Manage subscription",
@@ -445,23 +514,14 @@
"delete_theme_description": "This will delete the theme {{theme}}",
"cancel": "Cancel",
"appearance": "Appearance",
+ "debrid": "Debrid",
+ "debrid_description": "Debrid services are premium unrestricted downloaders that allow you to quickly download files hosted on various file hosting services, only limited by your internet speed.",
"enable_torbox": "Enable TorBox",
"torbox_description": "TorBox is your premium seedbox service rivaling even the best servers on the market.",
"torbox_account_linked": "TorBox account linked",
"create_real_debrid_account": "Click here if you don't have a Real-Debrid account yet",
"create_torbox_account": "Click here if you don't have a TorBox account yet",
"real_debrid_account_linked": "Real-Debrid account linked",
- "enable_all_debrid": "Enable All-Debrid",
- "all_debrid_description": "All-Debrid is an unrestricted downloader that allows you to quickly download files from various sources.",
- "all_debrid_free_account_error": "The account \"{{username}}\" is a free account. Please subscribe to All-Debrid",
- "all_debrid_account_linked": "All-Debrid account linked successfully",
- "alldebrid_missing_key": "Please provide an API key",
- "alldebrid_invalid_key": "Invalid API key",
- "alldebrid_blocked": "Your API key is geo-blocked or IP-blocked",
- "alldebrid_banned": "This account has been banned",
- "alldebrid_unknown_error": "An unknown error occurred",
- "alldebrid_invalid_response": "Invalid response from All-Debrid",
- "alldebrid_network_error": "Network error. Please check your connection",
"name_min_length": "Theme name must be at least 3 characters long",
"import_theme": "Import theme",
"import_theme_description": "You will import {{theme}} from the theme store",
@@ -492,7 +552,9 @@
"hidden": "Hidden",
"test_notification": "Test notification",
"notification_preview": "Achievement Notification Preview",
- "enable_friend_start_game_notifications": "When a friend starts playing a game"
+ "enable_friend_start_game_notifications": "When a friend starts playing a game",
+ "autoplay_trailers_on_game_page": "Automatically start playing trailers on game page",
+ "hide_to_tray_on_game_start": "Hide Hydra to tray on game startup"
},
"notifications": {
"download_complete": "Download complete",
@@ -519,7 +581,8 @@
"game_card": {
"available_one": "Available",
"available_other": "Available",
- "no_downloads": "No downloads available"
+ "no_downloads": "No downloads available",
+ "calculating": "Calculating"
},
"binary_not_found_modal": {
"title": "Programs not installed",
@@ -541,6 +604,7 @@
"activity": "Recent Activity",
"library": "Library",
"pinned": "Pinned",
+ "sort_by": "Sort by:",
"achievements_earned": "Achievements earned",
"played_recently": "Played recently",
"playtime": "Playtime",
@@ -622,7 +686,10 @@
"error_adding_friend": "Could not send friend request. Please check friend code",
"friend_code_length_error": "Friend code must have 8 characters",
"game_removed_from_pinned": "Game removed from pinned",
- "game_added_to_pinned": "Game added to pinned"
+ "game_added_to_pinned": "Game added to pinned",
+ "karma": "Karma",
+ "karma_count": "karma",
+ "karma_description": "Earned from positive likes on reviews"
},
"achievement": {
"achievement_unlocked": "Achievement unlocked",
diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json
index 6f0fc9f1..863b8332 100644
--- a/src/locales/es/translation.json
+++ b/src/locales/es/translation.json
@@ -70,6 +70,24 @@
"edit_game_modal_icon_resolution": "Resolución recomendada: 256x256px",
"edit_game_modal_logo_resolution": "Resolución recomendada: 640x360px",
"edit_game_modal_hero_resolution": "Resolución recomendada: 1920x620px",
+ "cancel": "Cancelar",
+ "confirm": "Confirmar",
+ "decky_plugin_installation_error": "Error instalando plugin Decky: {{error}}",
+ "decky_plugin_installation_failed": "Falló instalar plugin Decky: {{error}}",
+ "decky_plugin_installed": "Plugin Decky v{{version}} instalanda exitosamente",
+ "decky_plugin_installed_version": "Plugin Decky (v{{version}})",
+ "edit_game_modal_drop_hero_image_here": "Soltá la imagen hero acá",
+ "edit_game_modal_drop_icon_image_here": "Soltá la imagen de ícono hero acá",
+ "edit_game_modal_drop_logo_image_here": "Soltá la imagen de logo hero acá",
+ "edit_game_modal_drop_to_replace_hero": "Soltá para reemplazar hero",
+ "edit_game_modal_drop_to_replace_icon": "Soltá para reemplazar el ícono",
+ "edit_game_modal_drop_to_replace_logo": "Soltá para reemplazar el logo",
+ "install_decky_plugin": "Instalar plugin Decky",
+ "install_decky_plugin_message": "Esto va a descargar e instalar el plugin de Decky Loader para Hydra. Esto quizás requierea permisos elevados, ¿querés continuar?",
+ "install_decky_plugin_title": "Instarlar el plugin Decky Hydra",
+ "update_decky_plugin": "Actualizar plugin Decky",
+ "update_decky_plugin_message": "Una nueva versión del plugin Decky para Hydra está disponible. ¿Querés actualizarlo ahora?",
+ "update_decky_plugin_title": "Actualizar plugin Decky para Hydra",
"edit_game_modal_assets": "Recursos"
},
"header": {
@@ -204,6 +222,7 @@
"uploading_backup": "Subiendo copia de seguridad…",
"no_backups": "No has creado ninguna copia de seguridad para este juego todavía",
"backup_uploaded": "Copia de seguridad subida",
+ "backup_failed": "Copia de seguridad fallida",
"backup_deleted": "Copia de seguridad eliminada",
"backup_restored": "Copia de seguridad restaurada",
"see_all_achievements": "Ver todos los logros",
@@ -284,6 +303,62 @@
"keyshop_price": "Precio de tiendas de terceros",
"historical_retail": "Precio de tiendas",
"historical_keyshop": "Precio de tiendas de terceros",
+ "add_to_favorites": "Añadir a favoritos",
+ "be_first_to_review": "¡Sé la primera persona en compartir lo que pensas de este juego!",
+ "create_shortcut_simple": "Crear atajo",
+ "delete_review": "Eliminar reseña",
+ "delete_review_modal_cancel_button": "Cancelar",
+ "delete_review_modal_delete_button": "Eliminar",
+ "delete_review_modal_description": "Esta acción no se puede deshacer.",
+ "delete_review_modal_title": "¿De verdad querés eliminar esta reseña?",
+ "failed_remove_files": "Error al eliminar los archivos",
+ "failed_remove_from_library": "Error al eliminar de la librería",
+ "failed_update_favorites": "Error al actualizar favoritos",
+ "files_removed_success": "Archivos eliminados correctamente",
+ "filter_by_source": "Filtrar por fuente",
+ "game_removed_from_library": "Juego eliminado de la librería",
+ "hide_original": "Ocultar original",
+ "leave_a_review": "Crear una reseña",
+ "load_more_reviews": "Cargar más reseñas",
+ "loading_more_reviews": "Cargando más reseñas...",
+ "loading_reviews": "Cargando reseñas...",
+ "maybe_later": "Tal vez después",
+ "no_repacks_found": "Sin fuentes encontradas para este juego",
+ "no_reviews_yet": "Sin reseñas aún",
+ "properties": "Propiedades",
+ "rating": "Calificación",
+ "rating_count": "Calificación",
+ "rating_negative": "Negativa",
+ "rating_neutral": "Neutral",
+ "rating_positive": "Positiva",
+ "rating_stats": "Calificación",
+ "rating_very_negative": "Muy Negativa",
+ "rating_very_positive": "Muy Positiva",
+ "remove_from_favorites": "Eliminar de favoritos",
+ "remove_review": "Eliminar reseña",
+ "review_cannot_be_empty": "El campo de la reseña no puede estar vacío.",
+ "review_deleted_successfully": "Reseña eliminada exitosamente.",
+ "review_deletion_failed": "Error al eliminar reseña. Por favor intentá de nuevo.",
+ "review_submission_failed": "Error al subir reseña. Por favor intentá de nuevo.",
+ "review_submitted_successfully": "¡Reseña eliminada exitosamente!",
+ "reviews": "Reseñas",
+ "show_less": "Ver menos",
+ "show_more": "Ver más",
+ "show_original": "Ver original",
+ "show_original_translated_from": "Ver original (traducido del {{language}})",
+ "show_translation": "Ver traducción",
+ "sort_highest_score": "Puntuación más alta",
+ "sort_lowest_score": "Puntuación más baja",
+ "sort_most_voted": "Más votads",
+ "sort_newest": "Más nuevos",
+ "sort_oldest": "Más viejos",
+ "submit_review": "Enviar",
+ "submitting": "Subiendo...",
+ "vote_failed": "Error al registrar tu voto. Por favor intentá de nuevo.",
+ "would_you_recommend_this_game": "¿Querés escribir una reseña para este juego?",
+ "write_review_placeholder": "Compartí tus pensamientos sobre este juego...",
+ "yes": "Si",
+ "you_seemed_to_enjoy_this_game": "Parece que has disfrutado de este juego",
"language": "Idioma",
"caption": "Subtítulo",
"audio": "Audio"
@@ -344,7 +419,7 @@
"enable_real_debrid": "Habilitar Real-Debrid",
"real_debrid_description": "Real-Debrid es un descargador que te permite descargar archivos más rápidos, solo límitado por la velocidad de tu internet.",
"debrid_invalid_token": "Token API inválido",
- "debrid_api_token_hint": "Podés obtener la el token de tu API <0>acá0>",
+ "debrid_api_token_hint": "Podés obtener el token de tu API <0>acá0>",
"real_debrid_free_account_error": "La cuenta \"{{username}}\" es una cuenta gratis. Por favor suscribíte a Real-Debrid",
"debrid_linked_message": "Cuenta \"{{username}}\" vinculada",
"save_changes": "Guardar cambios",
@@ -356,7 +431,7 @@
"download_count_zero": "Sin opciones de descarga",
"download_count_one": "{{countFormatted}} opción de descarga",
"download_count_other": "{{countFormatted}} opciones de descarga",
- "download_source_url": "Descargar fuente URL",
+ "download_source_url": "Añadir URL de una fuente",
"add_download_source_description": "Introducí la URL del archivo .json",
"download_source_up_to_date": "Actualizado",
"download_source_errored": "Error",
@@ -375,6 +450,7 @@
"found_download_option_one": "Encontrada {{countFormatted}} fuente de descarga",
"found_download_option_other": "Encontradas {{countFormatted}} opciones de descargas",
"import": "Importar",
+ "importing": "Importando...",
"public": "Público",
"private": "Privado",
"friends_only": "Sólo amigos",
@@ -407,7 +483,7 @@
"subscription_renew_cancelled": "Renovación automática desactivada",
"subscription_renews_on": "Tu suscripción se renueva el {{date}}",
"bill_sent_until": "Tu próxima factura se enviará este día",
- "no_themes": "Parece que no tenés ningún tema aún, pero no te preocupés, presiona acá para hacer tu primera obra maestra.",
+ "no_themes": "Parece que no tenés ningún tema aún, pero no te preocupes, presiona acá para hacer tu primera obra maestra.",
"editor_tab_code": "Código",
"editor_tab_info": "Info",
"editor_tab_save": "Guardar",
@@ -441,7 +517,7 @@
"enable_friend_request_notifications": "Cuando recibís una solicitud de amistad",
"enable_auto_install": "Descargar actualizaciones automáticamente",
"common_redist": "Common redistributables",
- "common_redist_description": "Common redistributables son requeridos para algunos juegos. Es recomendable instalarlos para evitar algunos problemas.",
+ "common_redist_description": "Los common redistributables son requeridos para algunos juegos. Es recomendable instalarlos para evitar algunos problemas.",
"install_common_redist": "Instalar",
"installing_common_redist": "Instalando…",
"show_download_speed_in_megabytes": "Mostrar velocidad de descarga en megabytes por segundo",
@@ -463,7 +539,11 @@
"hidden": "Oculto",
"test_notification": "Probar notificación",
"notification_preview": "Probar notificación de logro",
- "enable_friend_start_game_notifications": "Cuando un amigo está jugando un juego"
+ "debrid": "Debrid",
+ "debrid_description": "Los servicios Debrid son descargadores premium sin restricciones que te dejan descargar más rápido archivos alojados en servicios de alojamiento siendo que la única limitación es tu velocidad de internet.",
+ "enable_friend_start_game_notifications": "Cuando un amigo está jugando un juego",
+ "autoplay_trailers_on_game_page": "Reproducir trailers automáticamente en la página del juego",
+ "hide_to_tray_on_game_start": "Ocultar Hydra en la bandeja al iniciar un juego"
},
"notifications": {
"download_complete": "Descarga completada",
@@ -490,6 +570,7 @@
"game_card": {
"available_one": "Disponible",
"available_other": "Disponibles",
+ "calculating": "Calculando",
"no_downloads": "Sin descargas disponibles"
},
"binary_not_found_modal": {
@@ -591,6 +672,12 @@
"error_adding_friend": "No se pudo enviar la solicitud de amistad. Por favor revisá el código",
"friend_code_length_error": "El código de amistad debe tener mínimo 8 caracteres",
"game_removed_from_pinned": "Juego removido de fijados",
+ "amount_hours_short": "{{amount}}h",
+ "amount_minutes_short": "{{amount}}m",
+ "karma": "Karma",
+ "karma_count": "karma",
+ "karma_description": "Conseguido por me gustas positivos en reseñas",
+ "sort_by": "Filtrar por:",
"game_added_to_pinned": "Juego añadido a fijados"
},
"achievement": {
diff --git a/src/locales/fi/translation.json b/src/locales/fi/translation.json
new file mode 100644
index 00000000..fee3ff22
--- /dev/null
+++ b/src/locales/fi/translation.json
@@ -0,0 +1,708 @@
+{
+ "language_name": "Suomi",
+ "app": {
+ "successfully_signed_in": "Kirjautuminen onnistui"
+ },
+ "home": {
+ "surprise_me": "Yllätä minut",
+ "no_results": "Ei tuloksia",
+ "start_typing": "Aloitan kirjoittamisen...",
+ "hot": "Suosittua nyt",
+ "weekly": "📅 Viikon parhaat pelit",
+ "achievements": "🏆 Pelit saavutuksilla"
+ },
+ "sidebar": {
+ "catalogue": "Katalogi",
+ "downloads": "Lataukset",
+ "settings": "Asetukset",
+ "my_library": "Kirjasto",
+ "downloading_metadata": "{{title}} (Metatietojen lataus…)",
+ "paused": "{{title}} (Keskeytetty)",
+ "downloading": "{{title}} ({{percentage}} - Lataa…)",
+ "filter": "Hae",
+ "home": "Koti",
+ "queued": "{{title}} (Jonossa)",
+ "game_has_no_executable": "Pelin käynnistystiedostoa ei ole valittu",
+ "sign_in": "Kirjaudu sisään",
+ "friends": "Kaverit",
+ "need_help": "Tarvitsetko apua?",
+ "favorites": "Suosikit",
+ "playable_button_title": "Näytä vain asennetut pelit.",
+ "add_custom_game_tooltip": "Lisää mukautettu peli",
+ "show_playable_only_tooltip": "Näytä vain pelattavissa olevat",
+ "custom_game_modal": "Lisää mukautettu peli",
+ "custom_game_modal_description": "Lisää mukautettu peli kirjastoon valitsemalla suoritettava tiedosto",
+ "custom_game_modal_executable_path": "Suoritettavan tiedoston polku",
+ "custom_game_modal_select_executable": "Valitse suoritettava tiedosto",
+ "custom_game_modal_title": "Pelin nimi",
+ "custom_game_modal_enter_title": "Syötä pelin nimi",
+ "custom_game_modal_browse": "Selaa",
+ "custom_game_modal_cancel": "Peruuta",
+ "custom_game_modal_add": "Lisää peli",
+ "custom_game_modal_adding": "Lisätään peliä...",
+ "custom_game_modal_success": "Mukautettu peli lisätty onnistuneesti",
+ "custom_game_modal_failed": "Mukautetun pelin lisääminen epäonnistui",
+ "custom_game_modal_executable": "Suoritettava tiedosto",
+ "edit_game_modal": "Mukauta resursseja",
+ "edit_game_modal_description": "Mukauta pelin resursseja ja tietoja",
+ "edit_game_modal_title": "Nimi",
+ "edit_game_modal_enter_title": "Syötä nimi",
+ "edit_game_modal_image": "Kuva",
+ "edit_game_modal_select_image": "Valitse kuva",
+ "edit_game_modal_browse": "Selaa",
+ "edit_game_modal_image_preview": "Kuvan esikatselu",
+ "edit_game_modal_icon": "Kuvake",
+ "edit_game_modal_select_icon": "Valitse kuvake",
+ "edit_game_modal_icon_preview": "Kuvakkeen esikatselu",
+ "edit_game_modal_logo": "Logo",
+ "edit_game_modal_select_logo": "Valitse logo",
+ "edit_game_modal_logo_preview": "Logon esikatselu",
+ "edit_game_modal_hero": "Pelin kansikuva",
+ "edit_game_modal_select_hero": "Valitse pelin kansikuva",
+ "edit_game_modal_hero_preview": "Kansikuvan esikatselu",
+ "edit_game_modal_cancel": "Peruuta",
+ "edit_game_modal_update": "Päivitä",
+ "edit_game_modal_updating": "Päivitetään...",
+ "edit_game_modal_fill_required": "Täytä kaikki pakolliset kentät",
+ "edit_game_modal_success": "Resurssit päivitetty onnistuneesti",
+ "edit_game_modal_failed": "Resurssien päivitys epäonnistui",
+ "edit_game_modal_image_filter": "Kuva",
+ "edit_game_modal_icon_resolution": "Suositeltu resoluutio: 256x256px",
+ "edit_game_modal_logo_resolution": "Suositeltu resoluutio: 640x360px",
+ "edit_game_modal_hero_resolution": "Suositeltu resoluutio: 1920x620px",
+ "edit_game_modal_assets": "Resurssit",
+ "edit_game_modal_drop_icon_image_here": "Pudota kuvakkeen kuva tähän",
+ "edit_game_modal_drop_logo_image_here": "Pudota logon kuva tähän",
+ "edit_game_modal_drop_hero_image_here": "Pudota kansikuvan kuva tähän",
+ "edit_game_modal_drop_to_replace_icon": "Pudota korvataksesi kuvake",
+ "edit_game_modal_drop_to_replace_logo": "Pudota korvataksesi logo",
+ "edit_game_modal_drop_to_replace_hero": "Pudota korvataksesi kansikuva",
+ "install_decky_plugin": "Asenna Decky-lisäosa",
+ "update_decky_plugin": "Päivitä Decky-lisäosa",
+ "decky_plugin_installed_version": "Decky-lisäosa (v{{version}})",
+ "install_decky_plugin_title": "Asenna Hydra Decky -lisäosa",
+ "install_decky_plugin_message": "Tämä lataa ja asentaa Hydra-lisäosan Decky Loaderiin. Saattaa vaatia korotetut oikeudet. Jatketaanko?",
+ "update_decky_plugin_title": "Päivitä Hydra Decky -lisäosa",
+ "update_decky_plugin_message": "Uusi Hydra Decky -lisäosan versio on saatavilla. Haluatko päivittää sen nyt?",
+ "decky_plugin_installed": "Decky-lisäosa v{{version}} asennettu onnistuneesti",
+ "decky_plugin_installation_failed": "Decky-lisäosan asennus epäonnistui: {{error}}",
+ "decky_plugin_installation_error": "Decky-lisäosan asennusvirhe: {{error}}",
+ "confirm": "Vahvista",
+ "cancel": "Peruuta"
+ },
+ "header": {
+ "search": "Hae",
+ "home": "Koti",
+ "catalogue": "Katalogi",
+ "downloads": "Lataukset",
+ "search_results": "Hakutulokset",
+ "settings": "Asetukset",
+ "version_available_install": "Versio {{version}} saatavilla. Asentaaksesi napsauta tästä.",
+ "version_available_download": "Versio {{version}} saatavilla. Ladataaksesi napsauta tästä."
+ },
+ "bottom_panel": {
+ "no_downloads_in_progress": "Ei meneillään olevia latauksia",
+ "downloading_metadata": "Ladataan metatietoja {{title}}…",
+ "downloading": "Ladataan {{title}}… ({{percentage}} valmis) - Lopetus {{eta}} - {{speed}}",
+ "calculating_eta": "Ladataan {{title}}… ({{percentage}} valmis) - Lasketaan jäljellä olevaa aikaa…",
+ "checking_files": "Tarkistetaan tiedostoja {{title}}… ({{percentage}} valmis)",
+ "installing_common_redist": "{{log}}…",
+ "installation_complete": "Asennus valmis",
+ "installation_complete_message": "Kirjastot asennettu onnistuneesti"
+ },
+ "catalogue": {
+ "search": "Suodatin…",
+ "developers": "Kehittäjät",
+ "genres": "Genret",
+ "tags": "Tagit",
+ "publishers": "Julkaisijat",
+ "download_sources": "Latauslähteet",
+ "result_count": "{{resultCount}} tulosta",
+ "filter_count": "{{filterCount}} saatavilla",
+ "clear_filters": "Tyhjennä {{filterCount}} valittua"
+ },
+ "game_details": {
+ "open_download_options": "Avaa lähteet",
+ "download_options_zero": "Ei lähteitä",
+ "download_options_one": "{{count}} lähde",
+ "download_options_other": "{{count}} lähdettä",
+ "updated_at": "Päivitetty {{updated_at}}",
+ "install": "Asenna",
+ "resume": "Jatka",
+ "pause": "Keskeytä",
+ "cancel": "Peruuta",
+ "remove": "Poista",
+ "space_left_on_disk": "{{space}} vapaana levyltä",
+ "eta": "Lopetus {{eta}}",
+ "calculating_eta": "Lasketaan jäljellä olevaa aikaa…",
+ "downloading_metadata": "Ladataan metatietoja…",
+ "filter": "Hae repackeja",
+ "requirements": "Järjestelmävaatimukset",
+ "minimum": "Minimi",
+ "recommended": "Suositeltu",
+ "paused": "Keskeytetty",
+ "release_date": "Julkaistu {{date}}",
+ "publisher": "Julkaisija {{publisher}}",
+ "hours": "tuntia",
+ "minutes": "minuuttia",
+ "amount_hours": "{{amount}} tuntia",
+ "amount_minutes": "{{amount}} minuuttia",
+ "accuracy": "tarkkuus {{accuracy}}%",
+ "add_to_library": "Lisää kirjastoon",
+ "already_in_library": "Jo kirjastossa",
+ "remove_from_library": "Poista kirjastosta",
+ "no_downloads": "Ei saatavilla olevia lähteitä",
+ "play_time": "Pelattu {{amount}}",
+ "last_time_played": "Viimeksi pelattu {{period}}",
+ "not_played_yet": "Et ole vielä pelannut {{title}}",
+ "next_suggestion": "Seuraava ehdotus",
+ "play": "Pelaa",
+ "deleting": "Poistetaan asennustiedostoa…",
+ "close": "Sulje",
+ "playing_now": "Käynnissä",
+ "change": "Vaihda",
+ "repacks_modal_description": "Valitse repack ladattavaksi",
+ "select_folder_hint": "Vaihtaaksesi oletuslatauskansiota, avaa <0>Asetukset0>",
+ "download_now": "Lataa nyt",
+ "no_shop_details": "Kuvausta ei saatu",
+ "download_options": "Lähteet",
+ "download_path": "Latauspolku",
+ "previous_screenshot": "Edellinen kuvakaappaus",
+ "next_screenshot": "Seuraava kuvakaappaus",
+ "screenshot": "Kuvakaappaus {{number}}",
+ "open_screenshot": "Avaa kuvakaappaus {{number}}",
+ "download_settings": "Latausasetukset",
+ "downloader": "Lataaja",
+ "select_executable": "Valitse",
+ "no_executable_selected": "Tiedostoa ei valittu",
+ "open_folder": "Avaa kansio",
+ "open_download_location": "Selaa latauskansio",
+ "create_shortcut": "Luo työpöydän pikakuvake",
+ "create_shortcut_simple": "Luo pikakuvake",
+ "clear": "Tyhjennä",
+ "remove_files": "Poista tiedostot",
+ "remove_from_library_title": "Oletko varma?",
+ "remove_from_library_description": "{{game}} poistetaan kirjastostasi.",
+ "options": "Asetukset",
+ "properties": "Ominaisuudet",
+ "executable_section_title": "Tiedosto",
+ "executable_section_description": "Polku tiedostoon, joka käynnistetään kun painat \"Pelaa\"",
+ "downloads_section_title": "Lataukset",
+ "downloads_section_description": "Tarkista päivitysten tai muiden peliversioiden saatavuus",
+ "danger_zone_section_title": "Vaaravyöhyke",
+ "danger_zone_section_description": "Voit poistaa tämän pelin kirjastostasi tai Hydrasta ladatut tiedostot",
+ "download_in_progress": "Lataus käynnissä",
+ "download_paused": "Lataus keskeytetty",
+ "last_downloaded_option": "Viimeisin latausvaihtoehto",
+ "create_steam_shortcut": "Luo Steam-pikakuvake",
+ "create_shortcut_success": "Pikakuvake luotu",
+ "you_might_need_to_restart_steam": "Saattaa olla, että sinun on käynnistettävä Steam uudelleen nähdäksesi muutokset",
+ "create_shortcut_error": "Pikakuvakkeen luonti epäonnistui",
+ "add_to_favorites": "Lisää suosikkeihin",
+ "remove_from_favorites": "Poista suosikeista",
+ "failed_update_favorites": "Suosikkien päivitys epäonnistui",
+ "game_removed_from_library": "Peli poistettu kirjastosta",
+ "failed_remove_from_library": "Poistaminen kirjastosta epäonnistui",
+ "files_removed_success": "Tiedostot poistettu onnistuneesti",
+ "failed_remove_files": "Tiedostojen poisto epäonnistui",
+ "nsfw_content_title": "Tämä peli sisältää sopimatonta sisältöä",
+ "nsfw_content_description": "{{title}} sisältää sisältöä, joka ei välttämättä sovellu kaikenikäisille. \nOletko varma, että haluat jatkaa?",
+ "allow_nsfw_content": "Jatka",
+ "refuse_nsfw_content": "Takaisin",
+ "stats": "Tilastot",
+ "download_count": "Lataukset",
+ "player_count": "Aktiiviset pelaajat",
+ "download_error": "Tämä latausvaihtoehto ei ole saatavilla",
+ "download": "Lataa",
+ "executable_path_in_use": "Suoritettavaa tiedostoa käyttää jo \"{{game}}\"",
+ "warning": "Varoitus:",
+ "hydra_needs_to_remain_open": "Tämän latauksen aikana Hydran on pysyttävä auki, kunnes se on valmis. Jos Hydra sulkeutuu ennen valmistumista, menetät edistymisen.",
+ "achievements": "Saavutukset",
+ "achievements_count": "Saavutukset {{unlockedCount}}/{{achievementsCount}}",
+ "show_more": "Näytä enemmän",
+ "show_less": "Näytä vähemmän",
+ "reviews": "Arvostelut",
+ "leave_a_review": "Jätä arvostelu",
+ "write_review_placeholder": "Jaa ajatuksesi tästä pelistä...",
+ "sort_newest": "Uusimmat ensin",
+ "no_reviews_yet": "Ei vielä arvosteluja",
+ "be_first_to_review": "Ole ensimmäinen, joka jakaa ajatuksensa tästä pelistä!",
+ "sort_oldest": "Vanhimmat ensin",
+ "sort_highest_score": "Korkein pistemäärä",
+ "sort_lowest_score": "Matalin pistemäärä",
+ "sort_most_voted": "Eniten äänestetyt",
+ "rating": "Arvio",
+ "rating_stats": "Arvio",
+ "rating_very_negative": "Erittäin negatiivinen",
+ "rating_negative": "Negatiivinen",
+ "rating_neutral": "Neutraali",
+ "rating_positive": "Positiivinen",
+ "rating_very_positive": "Erittäin positiivinen",
+ "submit_review": "Lähetä",
+ "submitting": "Lähetetään...",
+ "review_submitted_successfully": "Arvostelu lähetetty onnistuneesti!",
+ "review_submission_failed": "Arvostelun lähettäminen epäonnistui. Yritä uudelleen.",
+ "review_cannot_be_empty": "Arvostelun tekstikenttä ei voi olla tyhjä.",
+ "review_deleted_successfully": "Arvostelu poistettu onnistuneesti.",
+ "review_deletion_failed": "Arvostelun poisto epäonnistui. Yritä uudelleen.",
+ "loading_reviews": "Ladataan arvosteluja...",
+ "loading_more_reviews": "Ladataan lisää arvosteluja...",
+ "load_more_reviews": "Lataa lisää arvosteluja",
+ "you_seemed_to_enjoy_this_game": "Näyttää siltä, että nautit tästä pelistä",
+ "would_you_recommend_this_game": "Haluatko jättää arvion tästä pelistä?",
+ "yes": "Kyllä",
+ "maybe_later": "Ehkä myöhemmin",
+ "rating_count": "Arvio",
+ "delete_review": "Poista arvostelu",
+ "remove_review": "Poista arvostelu",
+ "delete_review_modal_title": "Haluatko varmasti poistaa arvostelusi?",
+ "delete_review_modal_description": "Tätä toimintoa ei voi peruuttaa.",
+ "delete_review_modal_delete_button": "Poista",
+ "delete_review_modal_cancel_button": "Peruuta",
+ "show_original": "Näytä alkuperäinen",
+ "show_translation": "Näytä käännös",
+ "show_original_translated_from": "Näytä alkuperäinen (käännös kielestä {{language}})",
+ "hide_original": "Piilota alkuperäinen",
+ "cloud_save": "Pilvitallennus",
+ "cloud_save_description": "Tallenna edistymisesi pilveen ja jatka pelaamista millä tahansa laitteella",
+ "backups": "Varmuuskopiot",
+ "install_backup": "Asenna",
+ "delete_backup": "Poista",
+ "create_backup": "Luo uusi varmuuskopio",
+ "last_backup_date": "Viimeisin varmuuskopio {{date}}",
+ "no_backup_preview": "Tallennuksia ei löytynyt tälle otsikolle",
+ "restoring_backup": "Palautetaan varmuuskopiota ({{progress}} valmis)…",
+ "uploading_backup": "Ladataan varmuuskopiota…",
+ "no_backups": "Et ole vielä luonut varmuuskopioita tästä pelistä",
+ "backup_uploaded": "Varmuuskopio ladattu",
+ "backup_failed": "Varmuuskopiointi epäonnistui",
+ "backup_deleted": "Varmuuskopio poistettu",
+ "backup_restored": "Varmuuskopio palautettu",
+ "see_all_achievements": "Näytä kaikki saavutukset",
+ "sign_in_to_see_achievements": "Kirjaudu sisään nähdäksesi saavutukset",
+ "mapping_method_automatic": "Automaattinen",
+ "mapping_method_manual": "Manuaalinen",
+ "mapping_method_label": "Kartoitusmenetelmä",
+ "files_automatically_mapped": "Tiedostot kartoitetu automaattisesti",
+ "no_backups_created": "Tälle pelille ei ole luotu varmuuskopioita",
+ "manage_files": "Hallitse tiedostoja",
+ "loading_save_preview": "Etsitään tallennuksia…",
+ "wine_prefix": "Wine-etuliite",
+ "wine_prefix_description": "Tässä pelissä käytettävä Wine-etuliite",
+ "launch_options": "Käynnistysvalinnat",
+ "launch_options_description": "Edistyneet käyttäjät voivat tehdä muutoksia käynnistysvalintoihin",
+ "launch_options_placeholder": "Valintaa ei määritetty",
+ "no_download_option_info": "Tietoja ei saatavilla",
+ "backup_deletion_failed": "Varmuuskopion poisto epäonnistui",
+ "max_number_of_artifacts_reached": "Tämän pelin enimmäismäärä varmuuskopioita saavutettu",
+ "achievements_not_sync": "Saavutuksesi eivät ole synkronoidut",
+ "manage_files_description": "Hallitse tallennettavia ja palautettavia tiedostoja",
+ "select_folder": "Valitse kansio",
+ "backup_from": "Varmuuskopio {{date}}",
+ "automatic_backup_from": "Automaattinen varmuuskopio {{date}}",
+ "enable_automatic_cloud_sync": "Ota automaattinen pilvisynkronointi käyttöön",
+ "custom_backup_location_set": "Mukautettu varmuuskopiosijainti asetettu",
+ "no_directory_selected": "Hakemistoa ei valittu",
+ "no_write_permission": "Ei voi ladata tähän hakemistoon. Napsauta tästä saadaksesi lisätietoja.",
+ "reset_achievements": "Nollaa saavutukset",
+ "reset_achievements_description": "Tämä nollaa kaikki saavutukset pelille {{game}}",
+ "reset_achievements_title": "Oletko varma?",
+ "reset_achievements_success": "Saavutukset nollattu onnistuneesti",
+ "reset_achievements_error": "Saavutusten nollaus epäonnistui",
+ "download_error_gofile_quota_exceeded": "Olet ylittänyt Gofilen kuukausikiintiön. Odota, kunnes kiintiö palautuu.",
+ "download_error_real_debrid_account_not_authorized": "Real-Debrid -tilisi ei ole valtuutettu suorittamaan uusia latauksia. Tarkista tilin asetukset ja yritä uudelleen.",
+ "download_error_not_cached_on_real_debrid": "Tämä lataus ei ole saatavilla Real-Debridissä, eikä lataustilan hakeminen Real-Debridistä ole toistaiseksi mahdollista.",
+ "update_playtime_title": "Päivitä peliaika",
+ "update_playtime_description": "Päivitä pelin {{game}} peliaika manuaalisesti",
+ "update_playtime": "Päivitä peliaika",
+ "update_playtime_success": "Peliaika päivitetty onnistuneesti",
+ "update_playtime_error": "Peliajan päivitys epäonnistui",
+ "update_game_playtime": "Päivitä peliaika",
+ "manual_playtime_warning": "Pelituntisi merkitään manuaalisesti päivitetyiksi. Tätä toimintoa ei voi peruuttaa.",
+ "manual_playtime_tooltip": "Tämä peliaika on päivitetty manuaalisesti",
+ "download_error_not_cached_on_torbox": "Tämä lataus ei ole saatavilla TorBoxissa, eikä lataustilan hakeminen TorBoxista ole toistaiseksi mahdollista.",
+ "download_error_not_cached_on_hydra": "Tämä lataus ei ole saatavilla Nimbuksessa.",
+ "game_removed_from_favorites": "Peli poistettu suosikeista",
+ "game_added_to_favorites": "Peli lisätty suosikkeihin",
+ "game_removed_from_pinned": "Peli poistettu kiinnitetyistä",
+ "game_added_to_pinned": "Peli lisätty kiinnitettyihin",
+ "automatically_extract_downloaded_files": "Pura ladatut tiedostot automaattisesti",
+ "create_start_menu_shortcut": "Luo Käynnistä-valikon pikakuvake",
+ "invalid_wine_prefix_path": "Virheellinen Wine-etuliitteen polku",
+ "invalid_wine_prefix_path_description": "Wine-etuliitteen polku on virheellinen. Tarkista polku ja yritä uudelleen.",
+ "missing_wine_prefix": "Wine-etuliite vaaditaan varmuuskopiointiin Linuxissa",
+ "artifact_renamed": "Varmuuskopio nimettiin uudelleen onnistuneesti",
+ "rename_artifact": "Nimeä varmuuskopio uudelleen",
+ "rename_artifact_description": "Anna varmuuskopiolle kuvaavampi nimi.",
+ "artifact_name_label": "Varmuuskopion nimi",
+ "artifact_name_placeholder": "Syötä nimi varmuuskopiolle",
+ "save_changes": "Tallenna muutokset",
+ "required_field": "Tämä kenttä on pakollinen",
+ "max_length_field": "Tämän kentän on oltava alle {{length}} merkkiä",
+ "freeze_backup": "Kiinnitä, jotta sitä ei ylikirjoiteta automaattisilla varmuuskopioilla",
+ "unfreeze_backup": "Poista kiinnitys",
+ "backup_frozen": "Varmuuskopio kiinnitetty",
+ "backup_unfrozen": "Varmuuskopion kiinnitys poistettu",
+ "backup_freeze_failed": "Varmuuskopion kiinnitys epäonnistui",
+ "backup_freeze_failed_description": "Sinun on jätettävä vähintään yksi paikka vapaaksi automaattisille varmuuskopioille",
+ "edit_game_modal_button": "Muokkaa pelin tietoja",
+ "game_details": "Pelin tiedot",
+ "currency_symbol": "€",
+ "currency_country": "fi",
+ "prices": "Hinnat",
+ "no_prices_found": "Hintoja ei löytynyt",
+ "view_all_prices": "Napsauta nähdäksesi kaikki hinnat",
+ "retail_price": "Vähittäishinta",
+ "keyshop_price": "Keyshop-hinta",
+ "historical_retail": "Historialliset vähittäishinnat",
+ "historical_keyshop": "Historialliset keyshop-hinnat",
+ "language": "Kieli",
+ "caption": "Tekstitys",
+ "audio": "Ääni",
+ "filter_by_source": "Suodata lähteen mukaan",
+ "no_repacks_found": "Tämän pelin lähteitä ei löytynyt"
+ },
+ "activation": {
+ "title": "Aktivoi Hydra",
+ "installation_id": "Asennustunnus:",
+ "enter_activation_code": "Syötä aktivointikoodisi",
+ "message": "Jos et tiedä mistä sitä pyytää, sinun ei pitäisi sitä olla.",
+ "activate": "Aktivoi",
+ "loading": "Ladataan…"
+ },
+ "downloads": {
+ "resume": "Jatka",
+ "pause": "Keskeytä",
+ "eta": "Lopetus {{eta}}",
+ "paused": "Keskeytetty",
+ "verifying": "Tarkistetaan…",
+ "completed": "Valmis",
+ "removed": "Ei ladattu",
+ "cancel": "Peruuta",
+ "filter": "Hae ladattuja pelejä",
+ "remove": "Poista",
+ "downloading_metadata": "Ladataan metatietoja…",
+ "deleting": "Poistetaan asennustiedostoa…",
+ "delete": "Poista asennustiedosto",
+ "delete_modal_title": "Oletko varma?",
+ "delete_modal_description": "Tämä poistaa kaikki asennustiedostot tietokoneeltasi",
+ "install": "Asenna",
+ "download_in_progress": "Käynnissä",
+ "queued_downloads": "Jonossa olevat lataukset",
+ "downloads_completed": "Valmiit",
+ "queued": "Jonossa",
+ "no_downloads_title": "Täällä on niin tyhjää...",
+ "no_downloads_description": "Et ole vielä ladannut mitään Hydran kautta, mutta ei ole koskaan liian myöhäistä aloittaa.",
+ "checking_files": "Tarkistetaan tiedostoja…",
+ "seeding": "Jakaminen",
+ "stop_seeding": "Lopeta jakaminen",
+ "resume_seeding": "Jatka jakamista",
+ "options": "Hallinnoi",
+ "extract": "Pura tiedostot",
+ "extracting": "Puretaan tiedostoja…"
+ },
+ "settings": {
+ "downloads_path": "Latausten polku",
+ "change": "Vaihda",
+ "notifications": "Ilmoitukset",
+ "enable_download_notifications": "Latauksen valmistuessa",
+ "enable_repack_list_notifications": "Kun uusi repack lisätään",
+ "real_debrid_api_token_label": "Real-Debrid API-tunnus",
+ "quit_app_instead_hiding": "Sovellus sulkeutuu system tray -alueelle sijasta",
+ "launch_with_system": "Käynnistä Hydra järjestelmän mukana",
+ "general": "Yleiset",
+ "behavior": "Käyttäytyminen",
+ "download_sources": "Latauslähteet",
+ "language": "Kieli",
+ "api_token": "API-avain",
+ "enable_real_debrid": "Ota Real-Debrid käyttöön",
+ "real_debrid_description": "Real-Debrid on rajoittamaton lataaja, jonka avulla voit ladata nopeasti verkossa olevia tiedostoja tai striimata ne välittömästi soittimeen yksityisen verkon kautta, joka kiertää kaikki estot.",
+ "debrid_invalid_token": "Virheellinen API-avain",
+ "debrid_api_token_hint": "API-avain voidaan hankkia <0>täältä0>",
+ "real_debrid_free_account_error": "Tili \"{{username}}\" - ei ole tilaus. Ota Real-Debrid-tilaus",
+ "debrid_linked_message": "Tili \"{{username}}\" linkitetty",
+ "save_changes": "Tallenna muutokset",
+ "changes_saved": "Muutokset tallennettu onnistuneesti",
+ "download_sources_description": "Hydra hakee latauslinkit näistä lähteistä. URL-osoitteen on sisällettävä suora linkki .json-tiedostoon, joka sisältää latauslinkit.",
+ "validate_download_source": "Vahvista",
+ "remove_download_source": "Poista",
+ "add_download_source": "Lisää lähde",
+ "download_count_zero": "Ei latauksia listassa",
+ "download_count_one": "{{countFormatted}} lataus listassa",
+ "download_count_other": "{{countFormatted}} latausta listassa",
+ "download_source_url": "Lähteen URL-osoite",
+ "add_download_source_description": "Liitä linkki .json-tiedostoon",
+ "download_source_up_to_date": "Ajan tasalla",
+ "download_source_errored": "Virhe",
+ "sync_download_sources": "Päivitä lähteet",
+ "removed_download_source": "Lähde poistettu",
+ "removed_download_sources": "Lähteet poistettu",
+ "cancel_button_confirmation_delete_all_sources": "Ei",
+ "confirm_button_confirmation_delete_all_sources": "Kyllä, poista kaikki",
+ "title_confirmation_delete_all_sources": "Poista kaikki lähteet",
+ "description_confirmation_delete_all_sources": "Poistat kaikki lähteet",
+ "button_delete_all_sources": "Poista kaikki lähteet",
+ "added_download_source": "Lähde lisätty",
+ "download_sources_synced": "Kaikki lähteet päivitetty",
+ "insert_valid_json_url": "Liitä kelvollinen JSON-tiedoston URL-osoite",
+ "found_download_option_zero": "Ei latausvaihtoehtoja löytynyt",
+ "found_download_option_one": "Löytyi {{countFormatted}} latausvaihtoehto",
+ "found_download_option_other": "Löytyi {{countFormatted}} latausvaihtoehtoa",
+ "import": "Tuo",
+ "importing": "Tuodaan...",
+ "public": "Julkinen",
+ "private": "Yksityinen",
+ "friends_only": "Vain kavereille",
+ "privacy": "Yksityisyys",
+ "profile_visibility": "Profiilin näkyvyys",
+ "profile_visibility_description": "Valitse, kuka voi nähdä profiilisi ja kirjastosi",
+ "required_field": "Tämä kenttä on pakollinen",
+ "source_already_exists": "Tämä lähde on jo lisätty",
+ "must_be_valid_url": "Lähteen on oltava kelvollinen URL-osoite",
+ "blocked_users": "Estetyt käyttäjät",
+ "user_unblocked": "Käyttäjä estäminen poistettu",
+ "enable_achievement_notifications": "Kun saavutus avataan",
+ "launch_minimized": "Käynnistä Hydra pienennettynä",
+ "disable_nsfw_alert": "Poista sopimattoman sisällön varoitus käytöstä",
+ "seed_after_download_complete": "Jaa latauksen valmistumisen jälkeen",
+ "show_hidden_achievement_description": "Näytä piilotettujen saavutusten kuvaukset ennen niiden ansaitsemista",
+ "account": "Tili",
+ "no_users_blocked": "Sinulla ei ole estettyjä käyttäjiä",
+ "subscription_active_until": "Hydra Cloud -tilisi on voimassa {{date}} asti",
+ "manage_subscription": "Hallinnoi tilausta",
+ "update_email": "Päivitä sähköposti",
+ "update_password": "Päivitä salasana",
+ "current_email": "Nykyinen sähköposti:",
+ "no_email_account": "Et ole vielä asettanut sähköpostiosoitetta",
+ "account_data_updated_successfully": "Tilitiedot päivitetty onnistuneesti",
+ "renew_subscription": "Uusi Hydra Cloud -tilaus",
+ "subscription_expired_at": "Tilauksesi vanheni {{date}}",
+ "no_subscription": "Nauti Hydrasta täysin rinnoin",
+ "become_subscriber": "Tule Hydra Cloud -tilaajaksi",
+ "subscription_renew_cancelled": "Automaattinen uusinta peruutettu",
+ "subscription_renews_on": "Tilauksesi uusiutuu {{date}}",
+ "bill_sent_until": "Seuraava laskusi lähetetään ennen tätä päivää",
+ "no_themes": "Näyttää siltä, että sinulla ei vielä ole teemoja, mutta älä huoli, napsauta tästä luodaksesi ensimmäisen mestariteoksesi",
+ "editor_tab_code": "Koodi",
+ "editor_tab_info": "Tiedot",
+ "editor_tab_save": "Tallenna",
+ "web_store": "Verkkokauppa",
+ "clear_themes": "Tyhjennä",
+ "create_theme": "Luo",
+ "create_theme_modal_title": "Luo mukautettu teema",
+ "create_theme_modal_description": "Luo uusi teema Hydran ulkoasun mukauttamiseksi",
+ "theme_name": "Nimi",
+ "insert_theme_name": "Syötä teeman nimi",
+ "set_theme": "Aseta teema",
+ "unset_theme": "Poista teema",
+ "delete_theme": "Poista teema",
+ "edit_theme": "Muokkaa teemaa",
+ "delete_all_themes": "Poista kaikki teemat",
+ "delete_all_themes_description": "Tämä poistaa kaikki mukautetut teemasi",
+ "delete_theme_description": "Tämä poistaa teeman {{theme}}",
+ "cancel": "Peruuta",
+ "appearance": "Ulkoasu",
+ "debrid": "Debrid",
+ "debrid_description": "Debrid-palvelut ovat premium-lataajia ilman rajoituksia, joiden avulla voit ladata tiedostoja nopeasti useista tiedostonjakopalveluista, vain internet-yhteytesi nopeuden rajoittamina.",
+ "enable_torbox": "Ota TorBox käyttöön",
+ "torbox_description": "TorBox on premium-palvelusi, joka kilpailee jopa parhaimpien markkinoiden palvelimien kanssa.",
+ "torbox_account_linked": "TorBox-tili linkitetty",
+ "create_real_debrid_account": "Napsauta tästä, jos sinulla ei vielä ole Real-Debrid-tiliä",
+ "create_torbox_account": "Napsauta tästä, jos sinulla ei vielä ole TorBox-tiliä",
+ "real_debrid_account_linked": "Real-Debrid-tili linkitetty",
+ "name_min_length": "Teeman nimen on oltava vähintään 3 merkkiä",
+ "import_theme": "Tuo teema",
+ "import_theme_description": "Tuot teeman {{theme}} teemakaupasta",
+ "error_importing_theme": "Virhe teemaa tuotaessa",
+ "theme_imported": "Teema tuotu onnistuneesti",
+ "enable_friend_request_notifications": "Kun kaveripyyntö vastaanotetaan",
+ "enable_auto_install": "Lataa päivitykset automaattisesti",
+ "common_redist": "Kirjastot",
+ "common_redist_description": "Joidenkin pelien käyttö vaatii kirjastoja. Ongelmien välttämiseksi on suositeltavaa asentaa ne.",
+ "install_common_redist": "Asenna",
+ "installing_common_redist": "Asennetaan…",
+ "show_download_speed_in_megabytes": "Näytä latausnopeus megatavuina sekunnissa",
+ "extract_files_by_default": "Pura tiedostot oletusarvoisesti latauksen jälkeen",
+ "enable_steam_achievements": "Ota Steam-saavutusten haku käyttöön",
+ "achievement_custom_notification_position": "Saavutusilmoitusten sijainti",
+ "top-left": "Vasemmalla ylhäällä",
+ "top-center": "Yläkeskellä",
+ "top-right": "Oikealla ylhäällä",
+ "bottom-left": "Vasemmalla alhaalla",
+ "bottom-center": "Alakeskellä",
+ "bottom-right": "Oikealla alhaalla",
+ "enable_achievement_custom_notifications": "Ota saavutusilmoitukset käyttöön",
+ "alignment": "Tasaus",
+ "variation": "Muunnelma",
+ "default": "Oletus",
+ "rare": "Harvinainen",
+ "platinum": "Platina",
+ "hidden": "Piilotettu",
+ "test_notification": "Testi-ilmoitus",
+ "notification_preview": "Saavutusilmoituksen esikatselu",
+ "enable_friend_start_game_notifications": "Kun kaveri aloittaa pelin pelaamisen"
+ },
+ "notifications": {
+ "download_complete": "Lataus valmis",
+ "game_ready_to_install": "{{title}} valmis asennettavaksi",
+ "repack_list_updated": "Repack-lista päivitetty",
+ "repack_count_one": "{{count}} repack lisätty",
+ "repack_count_other": "{{count}} repackia lisätty",
+ "new_update_available": "Uusi versio {{version}} saatavilla",
+ "restart_to_install_update": "Käynnistä Hydra uudelleen asentaaksesi päivityksen",
+ "notification_achievement_unlocked_title": "Saavutus avattu pelille {{game}}",
+ "notification_achievement_unlocked_body": "{{achievement}} ja muut {{count}} avattiin",
+ "new_friend_request_description": "{{displayName}} lähetti sinulle kaveripyynnön",
+ "new_friend_request_title": "Uusi kaveripyyntö",
+ "extraction_complete": "Purkaminen valmis",
+ "game_extracted": "{{title}} purettu onnistuneesti",
+ "friend_started_playing_game": "{{displayName}} aloitti pelin pelaamisen",
+ "test_achievement_notification_title": "Tämä on testi-ilmoitus",
+ "test_achievement_notification_description": "Aika siistiä, eikö?"
+ },
+ "system_tray": {
+ "open": "Avaa Hydra",
+ "quit": "Lopeta"
+ },
+ "game_card": {
+ "available_one": "Saatavilla",
+ "available_other": "Saatavilla",
+ "no_downloads": "Ei saatavilla olevia lähteitä",
+ "calculating": "Lasketaan"
+ },
+ "binary_not_found_modal": {
+ "title": "Ohjelmia ei asennettu",
+ "description": "Wine tai Lutris ei löytynyt",
+ "instructions": "Opi oikea tapa asentaa kumpi tahansa Linux-jakelullesi, jotta peli toimii kunnolla"
+ },
+ "modal": {
+ "close": "Sulje"
+ },
+ "forms": {
+ "toggle_password_visibility": "Näytä salasana"
+ },
+ "user_profile": {
+ "amount_hours": "{{amount}} tuntia",
+ "amount_minutes": "{{amount}} minuuttia",
+ "amount_hours_short": "{{amount}}t",
+ "amount_minutes_short": "{{amount}}min",
+ "last_time_played": "Viimeisin peli {{period}}",
+ "activity": "Viimeisin toiminta",
+ "library": "Kirjasto",
+ "pinned": "Kiinnitetyt",
+ "achievements_earned": "Ansaittu saavutukset",
+ "played_recently": "Äskettäin pelatut",
+ "playtime": "Peliaika",
+ "total_play_time": "Yhteensä pelattu",
+ "manual_playtime_tooltip": "Peliaika on päivitetty manuaalisesti",
+ "no_recent_activity_title": "Hmm... Täällä ei ole mitään",
+ "no_recent_activity_description": "Et ole pelannut mitään vähään aikaan. On aika muuttaa se!",
+ "display_name": "Näyttönimi",
+ "saving": "Tallennetaan",
+ "save": "Tallenna",
+ "edit_profile": "Muokkaa profiilia",
+ "saved_successfully": "Tallennettu onnistuneesti",
+ "try_again": "Yritä uudelleen",
+ "sign_out_modal_title": "Oletko varma?",
+ "cancel": "Peruuta",
+ "successfully_signed_out": "Kirjauduttu ulos onnistuneesti",
+ "sign_out": "Kirjaudu ulos",
+ "playing_for": "Pelattu {{amount}}",
+ "sign_out_modal_text": "Kirjastosi on linkitetty nykyiseen tiliisi. Kirjautumalla ulos kirjastosi ei ole käytettävissä, eikä edistymistä tallenneta. Kirjaudu ulos?",
+ "add_friends": "Lisää kavereita",
+ "add": "Lisää",
+ "friend_code": "Kaverikoodi",
+ "see_profile": "Näytä profiili",
+ "sending": "Lähetetään",
+ "friend_request_sent": "Kaveripyyntö lähetetty",
+ "friends": "Kaverit",
+ "friends_list": "Kaverilista",
+ "user_not_found": "Käyttäjää ei löytynyt",
+ "block_user": "Estä käyttäjä",
+ "add_friend": "Lisää kaveriksi",
+ "request_sent": "Pyyntö lähetetty",
+ "request_received": "Pyyntö vastaanotettu",
+ "accept_request": "Hyväksy pyyntö",
+ "ignore_request": "Ohita pyyntö",
+ "cancel_request": "Peruuta pyyntö",
+ "undo_friendship": "Poista kaveri",
+ "request_accepted": "Pyyntö hyväksytty",
+ "user_blocked_successfully": "Käyttäjä estetty onnistuneesti",
+ "user_block_modal_text": "{{displayName}} estetään",
+ "blocked_users": "Estetyt käyttäjät",
+ "unblock": "Poista esto",
+ "no_friends_added": "Et ole vielä lisännyt yhtään kaveria",
+ "pending": "Odottaa",
+ "no_pending_invites": "Sinulla ei ole vasteita odottavia pyyntöjä",
+ "no_blocked_users": "Et ole estänyt yhtään käyttäjää",
+ "friend_code_copied": "Kaverikoodi kopioitu",
+ "undo_friendship_modal_text": "Tämä purkaa kaverisuhteen käyttäjän {{displayName}} kanssa.",
+ "privacy_hint": "Määrittääksesi kuka voi nähdä tämän, siirry <0>Asetuksiin0>.",
+ "locked_profile": "Tämä profiili on yksityinen",
+ "image_process_failure": "Kuvan käsittely epäonnistui",
+ "required_field": "Tämä kenttä on pakollinen",
+ "displayname_min_length": "Näyttönimen on oltava vähintään 3 merkkiä.",
+ "displayname_max_length": "Näyttönimen on oltava enintään 50 merkkiä.",
+ "report_profile": "Ilmianna tämä profiili",
+ "report_reason": "Miksi ilmiannat tämän profiilin?",
+ "report_description": "Lisätietoja",
+ "report_description_placeholder": "Lisätietoja",
+ "report": "Ilmianna",
+ "report_reason_hate": "Vihapuhe",
+ "report_reason_sexual_content": "Seksuaalinen sisältö",
+ "report_reason_violence": "Väkivalta",
+ "report_reason_spam": "Roskaposti",
+ "report_reason_other": "Muu",
+ "profile_reported": "Profiili-ilmoitus lähetetty",
+ "your_friend_code": "Kaverikoodisi:",
+ "upload_banner": "Lataa banneri",
+ "uploading_banner": "Ladataan banneria...",
+ "background_image_updated": "Taustakuva päivitetty",
+ "stats": "Tilastot",
+ "achievements": "Saavutukset",
+ "games": "Pelit",
+ "top_percentile": "Top {{percentile}}%",
+ "ranking_updated_weekly": "Sijoitus päivitetään viikoittain",
+ "playing": "Pelaamassa {{game}}",
+ "achievements_unlocked": "Saavutukset avattu",
+ "earned_points": "Ansaitut pisteet:",
+ "show_achievements_on_profile": "Näytä saavutuksesi profiilissasi",
+ "show_points_on_profile": "Näytä ansaitut pisteet profiilissasi",
+ "error_adding_friend": "Kaveripyynnön lähettäminen epäonnistui. Tarkista kaverikoodi",
+ "friend_code_length_error": "Kaverikoodin on oltava 8 merkkiä",
+ "game_removed_from_pinned": "Peli poistettu kiinnitetyistä",
+ "game_added_to_pinned": "Peli lisätty kiinnitettyihin",
+ "karma": "Karma",
+ "karma_count": "karmaa",
+ "karma_description": "Ansittu positiivisilla arvosteluäänillä"
+ },
+ "achievement": {
+ "achievement_unlocked": "Saavutus avattu",
+ "user_achievements": "Käyttäjän {{displayName}} saavutukset",
+ "your_achievements": "Sinun saavutuksesi",
+ "unlocked_at": "Avattu: {{date}}",
+ "subscription_needed": "Hydra Cloud -tilaus tarvitaan tämän sisällön katsomiseen",
+ "new_achievements_unlocked": "{{achievementCount}} uutta saavutusta avattu {{gameCount}} pelistä",
+ "achievement_progress": "{{unlockedCount}}/{{totalCount}} saavutusta",
+ "achievements_unlocked_for_game": "{{achievementCount}} uutta saavutusta avattu pelille {{gameTitle}}",
+ "hidden_achievement_tooltip": "Tämä on piilotettu saavutus",
+ "achievement_earn_points": "Ansaitse {{points}} pistettä tällä saavutuksella",
+ "earned_points": "Ansaitut pisteet:",
+ "available_points": "Saatavilla olevat pisteet:",
+ "how_to_earn_achievements_points": "Kuinka ansaita saavutuspisteitä?"
+ },
+ "hydra_cloud": {
+ "subscription_tour_title": "Hydra Cloud -tilaus",
+ "subscribe_now": "Tilaa nyt",
+ "cloud_saving": "Pilvitallennus",
+ "cloud_achievements": "Tallenna saavutuksesi pilveen",
+ "animated_profile_picture": "Animaoidut profiilikuvat",
+ "premium_support": "Premium-tuki",
+ "show_and_compare_achievements": "Näytä ja vertaile saavutuksiasi muiden käyttäjien saavutuksiin",
+ "animated_profile_banner": "Animoitu profiilin banneri",
+ "hydra_cloud": "Hydra Cloud",
+ "hydra_cloud_feature_found": "Olet juuri löytänyt Hydra Cloud -toiminnon!",
+ "learn_more": "Lue lisää",
+ "debrid_description": "Lataa 4 kertaa nopeammin Nimbuksella"
+ }
+}
diff --git a/src/locales/hu/translation.json b/src/locales/hu/translation.json
index a91902dc..88039aee 100644
--- a/src/locales/hu/translation.json
+++ b/src/locales/hu/translation.json
@@ -183,7 +183,11 @@
"remove_files": "Fájlok eltávolítása",
"remove_from_library_title": "Biztos vagy ebben?",
"remove_from_library_description": "Ezzel eltávolítod a játékot {{game}} a könyvtáradból",
+<<<<<<< HEAD
"options": "Beállítások",ä
+=======
+ "options": "Beállítások",
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
"properties": "További beállítások",
"executable_section_title": "Futtatható fájl",
"executable_section_description": "A fájl amely futtatásra fog kerülni amikor a \"Játék\" lenyomásra kerül",
@@ -224,7 +228,11 @@
"show_less": "Mutass kevesebbet",
"reviews": "Vélemények",
"leave_a_review": "Hagyd itt a véleményed",
+<<<<<<< HEAD
"write_review_placeholder": "Oszd meg gondolatod a játékról...",
+=======
+ "write_review_placeholder": "Oszd meg a gondolataid a játékról...",
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
"sort_newest": "Legújabb",
"no_reviews_yet": "Még nem lett vélemény megosztva",
"be_first_to_review": "Légy az első, aki megossza a véleményét a játékról!",
@@ -252,7 +260,11 @@
"you_seemed_to_enjoy_this_game": "Úgy látszik élvezted ezt a játékot",
"would_you_recommend_this_game": "Szeretnél véleményt írni erről a játékról?",
"yes": "Igen",
+<<<<<<< HEAD
"maybe_later": "Talán később",
+=======
+ "maybe_later": "Talán Később",
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
"cloud_save": "Mentés felhőben",
"cloud_save_description": "Mentsd el az előrehaladásod a felhőben, majd folytasd egy másik eszközön",
"backups": "Biztonsági másolatok",
@@ -356,12 +368,16 @@
"delete_review_modal_title": "Biztos vagy abban hogy törölni szeretnéd a véleményed?",
"delete_review_modal_description": "Ez a lépés nem vonható vissza.",
"delete_review_modal_delete_button": "Törlés",
+<<<<<<< HEAD
"delete_review_modal_cancel_button": "Mégse",
"vote_failed": "A szavazatod nem regisztrálódott. Kérlek próbáld újra.",
"show_original": "Eredeti megjelenítése",
"show_translation": "Fordítás megjelenítése",
"show_original_translated_from": "Eredeti megjelenítése (fordítva: {{language}})",
"hide_original": "Eredeti elrejtése"
+=======
+ "delete_review_modal_cancel_button": "Mégse"
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
},
"activation": {
"title": "Hydra Aktiválása",
@@ -515,14 +531,22 @@
"cancel": "Mégsem",
"appearance": "Megjelenés",
"debrid": "Debrid",
+<<<<<<< HEAD
"debrid_description": "A Debrid szolgáltatások prémium szolgáltatások amelyek lehetővé teszik, hogy gyorsan letölts különböző fájltároló szolgáltatásokon tárolt fájlokat, és csak az internet sebességed szab határt.",
+=======
+ "debrid_description": "A Debrid szolgáltatások prémium szolgáltatások amelyek lehetővé teszik, hogy gyorsan letölts különböző fájltároló szolgáltatásokon tárolt fájlokat, csak az internet sebességed szab határt.",
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
"enable_torbox": "TorBox bekapcsolása",
"torbox_description": "A TorBox egy olyan premium seedbox szolgáltatás, amely még a piacon elérhető legjobb szerverekkel is felveszi a versenyt.",
"torbox_account_linked": "TorBox fiók összekapcsolva",
"create_real_debrid_account": "Kattints ide ha még nincs Real-Debrid fiókod",
"create_torbox_account": "Kattints ide ha még nincs TorBox fiókod",
"real_debrid_account_linked": "Real-Debrid fiók összekapcsolva",
+<<<<<<< HEAD
"name_min_length": "A téma neve legalább 3 karakter hosszú kell legyen",
+=======
+ "name_min_length": "A téma neve legalább 3 karakter hosszú legyen",
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
"import_theme": "Téma importálása",
"import_theme_description": "Ezt a témát fogod importálni a Témaáruház-ból: {{theme}}",
"error_importing_theme": "Hiba lépett fel a téma importálása közben",
@@ -582,7 +606,11 @@
"available_one": "Elérhető",
"available_other": "Elérhető",
"no_downloads": "Nincs elérhető letöltés",
+<<<<<<< HEAD
"calculating": "Számítás alatt.."
+=======
+ "calculating": "Feldolgozás"
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
},
"binary_not_found_modal": {
"title": "Hiányzó programok",
@@ -689,7 +717,11 @@
"game_added_to_pinned": "Játék hozzáadva a kitűzöttekhez",
"karma": "Karma",
"karma_count": "karma",
+<<<<<<< HEAD
"karma_description": "Pozitív értékelésekkel szerzett pontok"
+=======
+ "karma_description": "Pozitív értékelésekre kapott pontok alapján"
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
},
"achievement": {
"achievement_unlocked": "Achievement feloldva",
@@ -698,7 +730,11 @@
"unlocked_at": "Feloldva: {{date}}",
"subscription_needed": "A tartalom megtekintéséhez Hydra Cloud előfizetés szükséges",
"new_achievements_unlocked": "{{achievementCount}} új achievement feloldva {{gameCount}} játékban",
+<<<<<<< HEAD
"achievement_progress": "{{unlockedCount}}/{{totalCount}} achievement",
+=======
+ "achievement_progress": "{{unlockedCount}}/{{totalCount}} achievementek",
+>>>>>>> 21074322fa5ef3a1d6168a2b841ec2505db8f0de
"achievements_unlocked_for_game": "{{achievementCount}} új achievement feloldva itt: {{gameTitle}}",
"hidden_achievement_tooltip": "Ez egy rejtett achievement",
"achievement_earn_points": "Szerezz be {{points}} pontot ezzel az achievement-el",
diff --git a/src/locales/index.ts b/src/locales/index.ts
index f71e8f0e..ca9ec757 100644
--- a/src/locales/index.ts
+++ b/src/locales/index.ts
@@ -26,7 +26,9 @@ import nb from "./nb/translation.json";
import et from "./et/translation.json";
import bg from "./bg/translation.json";
import uz from "./uz/translation.json";
+import fi from "./fi/translation.json";
import sv from "./sv/translation.json";
+import lv from "./lv/translation.json";
export default {
"pt-BR": ptBR,
@@ -49,6 +51,7 @@ export default {
da,
ar,
fa,
+ fi,
ro,
ca,
bg,
@@ -58,4 +61,5 @@ export default {
et,
uz,
sv,
+ lv,
};
diff --git a/src/locales/lv/translation.json b/src/locales/lv/translation.json
new file mode 100644
index 00000000..26aacb74
--- /dev/null
+++ b/src/locales/lv/translation.json
@@ -0,0 +1,708 @@
+{
+ "language_name": "Latviešu",
+ "app": {
+ "successfully_signed_in": "Veiksmīga pieteikšanās"
+ },
+ "home": {
+ "surprise_me": "Pārsteidz mani",
+ "no_results": "Nekas nav atrasts",
+ "start_typing": "Sākt rakstīt...",
+ "hot": "Šobrīd populārs",
+ "weekly": "📅 Nedēļas labākās spēles",
+ "achievements": "🏆 Spēles ar sasniegumiem"
+ },
+ "sidebar": {
+ "catalogue": "Katalogs",
+ "downloads": "Lejupielādes",
+ "settings": "Iestatījumi",
+ "my_library": "Bibliotēka",
+ "downloading_metadata": "{{title}} (Lejupielādē metadatus…)",
+ "paused": "{{title}} (Apturēts)",
+ "downloading": "{{title}} ({{percentage}} - Lejupielādē…)",
+ "filter": "Meklēt",
+ "home": "Sākums",
+ "queued": "{{title}} (Rindā)",
+ "game_has_no_executable": "Spēles palaišanas fails nav izvēlēts",
+ "sign_in": "Pieteikties",
+ "friends": "Draugi",
+ "need_help": "Nepieciešama palīdzība?",
+ "favorites": "Izlase",
+ "playable_button_title": "Rādīt tikai instalētās spēles.",
+ "add_custom_game_tooltip": "Pievienot pielāgotu spēli",
+ "show_playable_only_tooltip": "Rādīt tikai spēlēšanai pieejamās",
+ "custom_game_modal": "Pievienot pielāgotu spēli",
+ "custom_game_modal_description": "Pievienojiet pielāgotu spēli bibliotēkai, izvēloties izpildāmo failu",
+ "custom_game_modal_executable_path": "Ceļš uz izpildāmo failu",
+ "custom_game_modal_select_executable": "Izvēlieties izpildāmo failu",
+ "custom_game_modal_title": "Spēles nosaukums",
+ "custom_game_modal_enter_title": "Ievadiet spēles nosaukumu",
+ "custom_game_modal_browse": "Pārlūkot",
+ "custom_game_modal_cancel": "Atcelt",
+ "custom_game_modal_add": "Pievienot spēli",
+ "custom_game_modal_adding": "Pievieno spēli...",
+ "custom_game_modal_success": "Pielāgota spēle veiksmīgi pievienota",
+ "custom_game_modal_failed": "Neizdevās pievienot pielāgotu spēli",
+ "custom_game_modal_executable": "Izpildāmais fails",
+ "edit_game_modal": "Konfigurēt resursus",
+ "edit_game_modal_description": "Konfigurējiet spēles resursus un detaļas",
+ "edit_game_modal_title": "Nosaukums",
+ "edit_game_modal_enter_title": "Ievadiet nosaukumu",
+ "edit_game_modal_image": "Attēls",
+ "edit_game_modal_select_image": "Izvēlieties attēlu",
+ "edit_game_modal_browse": "Pārlūkot",
+ "edit_game_modal_image_preview": "Attēla priekšskatījums",
+ "edit_game_modal_icon": "Ikona",
+ "edit_game_modal_select_icon": "Izvēlieties ikonu",
+ "edit_game_modal_icon_preview": "Ikona priekšskatījums",
+ "edit_game_modal_logo": "Logotips",
+ "edit_game_modal_select_logo": "Izvēlieties logotipu",
+ "edit_game_modal_logo_preview": "Logotipa priekšskatījums",
+ "edit_game_modal_hero": "Vāka attēls",
+ "edit_game_modal_select_hero": "Izvēlieties spēles vāka attēlu",
+ "edit_game_modal_hero_preview": "Spēles vāka attēla priekšskatījums",
+ "edit_game_modal_cancel": "Atcelt",
+ "edit_game_modal_update": "Atjaunināt",
+ "edit_game_modal_updating": "Atjaunina...",
+ "edit_game_modal_fill_required": "Lūdzu, aizpildiet visus obligātos laukus",
+ "edit_game_modal_success": "Resursi veiksmīgi atjaunināti",
+ "edit_game_modal_failed": "Neizdevās atjaunināt resursus",
+ "edit_game_modal_image_filter": "Attēls",
+ "edit_game_modal_icon_resolution": "Ieteicamā izšķirtspēja: 256x256px",
+ "edit_game_modal_logo_resolution": "Ieteicamā izšķirtspēja: 640x360px",
+ "edit_game_modal_hero_resolution": "Ieteicamā izšķirtspēja: 1920x620px",
+ "edit_game_modal_assets": "Resursi",
+ "edit_game_modal_drop_icon_image_here": "Ievelciet ikonas attēlu šeit",
+ "edit_game_modal_drop_logo_image_here": "Ievelciet logotipa attēlu šeit",
+ "edit_game_modal_drop_hero_image_here": "Ievelciet vāka attēlu šeit",
+ "edit_game_modal_drop_to_replace_icon": "Ievelciet, lai aizstātu ikonu",
+ "edit_game_modal_drop_to_replace_logo": "Ievelciet, lai aizstātu logotipu",
+ "edit_game_modal_drop_to_replace_hero": "Ievelciet, lai aizstātu vāku",
+ "install_decky_plugin": "Instalēt Decky spraudni",
+ "update_decky_plugin": "Atjaunināt Decky spraudni",
+ "decky_plugin_installed_version": "Decky spraudnis (v{{version}})",
+ "install_decky_plugin_title": "Instalēt Hydra Decky spraudni",
+ "install_decky_plugin_message": "Tas lejupielādēs un instalēs Hydra spraudni Decky Loader. Var būt nepieciešamas paaugstinātas atļaujas. Turpināt?",
+ "update_decky_plugin_title": "Atjaunināt Hydra Decky spraudni",
+ "update_decky_plugin_message": "Ir pieejama jauna Hydra Decky spraudņa versija. Vai vēlaties to atjaunināt tagad?",
+ "decky_plugin_installed": "Decky spraudnis v{{version}} veiksmīgi instalēts",
+ "decky_plugin_installation_failed": "Neizdevās instalēt Decky spraudni: {{error}}",
+ "decky_plugin_installation_error": "Decky spraudņa instalēšanas kļūda: {{error}}",
+ "confirm": "Apstiprināt",
+ "cancel": "Atcelt"
+ },
+ "header": {
+ "search": "Meklēt",
+ "home": "Sākums",
+ "catalogue": "Katalogs",
+ "downloads": "Lejupielādes",
+ "search_results": "Meklēšanas rezultāti",
+ "settings": "Iestatījumi",
+ "version_available_install": "Pieejama versija {{version}}. Noklikšķiniet šeit, lai instalētu.",
+ "version_available_download": "Pieejama versija {{version}}. Noklikšķiniet šeit, lai lejupielādētu."
+ },
+ "bottom_panel": {
+ "no_downloads_in_progress": "Nav aktīvu lejupielāžu",
+ "downloading_metadata": "Lejupielādē metadatus {{title}}…",
+ "downloading": "Lejupielādē {{title}}… ({{percentage}} pabeigts) - Beigsies {{eta}} - {{speed}}",
+ "calculating_eta": "Lejupielādē {{title}}… ({{percentage}} pabeigts) - Aprēķina atlikušo laiku…",
+ "checking_files": "Pārbauda failus {{title}}… ({{percentage}} pabeigts)",
+ "installing_common_redist": "{{log}}…",
+ "installation_complete": "Instalēšana pabeigta",
+ "installation_complete_message": "Bibliotēkas veiksmīgi instalētas"
+ },
+ "catalogue": {
+ "search": "Filtrs…",
+ "developers": "Izstrādātāji",
+ "genres": "Žanri",
+ "tags": "Atzīmes",
+ "publishers": "Izdevēji",
+ "download_sources": "Lejupielādes avoti",
+ "result_count": "{{resultCount}} rezultāti",
+ "filter_count": "{{filterCount}} pieejami",
+ "clear_filters": "Notīrīt {{filterCount}} atlasītos"
+ },
+ "game_details": {
+ "open_download_options": "Atvērt avotus",
+ "download_options_zero": "Nav avotu",
+ "download_options_one": "{{count}} avots",
+ "download_options_other": "{{count}} avoti",
+ "updated_at": "Atjaunināts {{updated_at}}",
+ "install": "Instalēt",
+ "resume": "Atsākt",
+ "pause": "Apturēt",
+ "cancel": "Atcelt",
+ "remove": "Dzēst",
+ "space_left_on_disk": "{{space}} brīvs diskā",
+ "eta": "Beigsies {{eta}}",
+ "calculating_eta": "Aprēķina atlikušo laiku…",
+ "downloading_metadata": "Lejupielādē metadatus…",
+ "filter": "Meklēt repakus",
+ "requirements": "Sistēmas prasības",
+ "minimum": "Minimālās",
+ "recommended": "Ieteicamās",
+ "paused": "Apturēts",
+ "release_date": "Izdots {{date}}",
+ "publisher": "Izdevējs {{publisher}}",
+ "hours": "stundas",
+ "minutes": "minūtes",
+ "amount_hours": "{{amount}} stundas",
+ "amount_minutes": "{{amount}} minūtes",
+ "accuracy": "precizitāte {{accuracy}}%",
+ "add_to_library": "Pievienot bibliotēkai",
+ "already_in_library": "Jau bibliotēkā",
+ "remove_from_library": "Dzēst no bibliotēkas",
+ "no_downloads": "Nav pieejamu avotu",
+ "play_time": "Spēlēts {{amount}}",
+ "last_time_played": "Pēdējo reizi spēlēts {{period}}",
+ "not_played_yet": "Jūs vēl neesat spēlējis {{title}}",
+ "next_suggestion": "Nākamais ieteikums",
+ "play": "Spēlēt",
+ "deleting": "Dzēš instalētāju…",
+ "close": "Aizvērt",
+ "playing_now": "Palaists",
+ "change": "Mainīt",
+ "repacks_modal_description": "Izvēlieties repaku lejupielādei",
+ "select_folder_hint": "Lai mainītu noklusējuma lejupielāžu mapi, atveriet <0>Iestatījumus0>",
+ "download_now": "Lejupielādēt tagad",
+ "no_shop_details": "Neizdevās iegūt aprakstu",
+ "download_options": "Avoti",
+ "download_path": "Ceļš lejupielādēm",
+ "previous_screenshot": "Iepriekšējais ekrānuzņēmums",
+ "next_screenshot": "Nākamais ekrānuzņēmums",
+ "screenshot": "Ekrānuzņēmums {{number}}",
+ "open_screenshot": "Atvērt ekrānuzņēmumu {{number}}",
+ "download_settings": "Lejupielādes parametri",
+ "downloader": "Lejupielādētājs",
+ "select_executable": "Izvēlēties",
+ "no_executable_selected": "Fails nav izvēlēts",
+ "open_folder": "Atvērt mapi",
+ "open_download_location": "Pārlūkot lejupielādes mapi",
+ "create_shortcut": "Izveidot īsceļu uz darbvirsmas",
+ "create_shortcut_simple": "Izveidot īsceļu",
+ "clear": "Notīrīt",
+ "remove_files": "Dzēst failus",
+ "remove_from_library_title": "Vai esat pārliecināts?",
+ "remove_from_library_description": "{{game}} tiks dzēsta no jūsu bibliotēkas.",
+ "options": "Iestatījumi",
+ "properties": "Īpašības",
+ "executable_section_title": "Fails",
+ "executable_section_description": "Ceļš uz failu, kas tiks palaists, nospiežot \"Spēlēt\"",
+ "downloads_section_title": "Lejupielādes",
+ "downloads_section_description": "Pārbaudīt atjauninājumu vai citu spēles versiju pieejamību",
+ "danger_zone_section_title": "Bīstamā zona",
+ "danger_zone_section_description": "Jūs varat dzēst šo spēli no savas bibliotēkas vai failus, kas lejupielādēti no Hydra",
+ "download_in_progress": "Notiek lejupielāde",
+ "download_paused": "Lejupielāde apturēta",
+ "last_downloaded_option": "Pēdējais lejupielādes variants",
+ "create_steam_shortcut": "Izveidot Steam īsceļu",
+ "create_shortcut_success": "Īsceļš izveidots",
+ "you_might_need_to_restart_steam": "Iespējams, jums būs jāpārstartē Steam, lai redzētu izmaiņas",
+ "create_shortcut_error": "Neizdevās izveidot īsceļu",
+ "add_to_favorites": "Pievienot izlasei",
+ "remove_from_favorites": "Dzēst no izlases",
+ "failed_update_favorites": "Neizdevās atjaunināt izlasi",
+ "game_removed_from_library": "Spēle dzēsta no bibliotēkas",
+ "failed_remove_from_library": "Neizdevās dzēst no bibliotēkas",
+ "files_removed_success": "Faili veiksmīgi dzēsti",
+ "failed_remove_files": "Neizdevās dzēst failus",
+ "nsfw_content_title": "Šajā spēlē ir nepiemērots saturs",
+ "nsfw_content_description": "{{title}} satur saturu, kas var nebūt piemērots visiem vecumiem. \nVai esat pārliecināts, ka vēlaties turpināt?",
+ "allow_nsfw_content": "Turpināt",
+ "refuse_nsfw_content": "Atpakaļ",
+ "stats": "Statistika",
+ "download_count": "Lejupielādes",
+ "player_count": "Aktīvie spēlētāji",
+ "download_error": "Šis lejupielādes variants nav pieejams",
+ "download": "Lejupielādēt",
+ "executable_path_in_use": "Izpildāmais fails jau tiek izmantots \"{{game}}\"",
+ "warning": "Uzmanību:",
+ "hydra_needs_to_remain_open": "Lai veiktu šo lejupielādi, Hydra jāpaliek atvērtai līdz beigām. Ja Hydra aizvērsies pirms pabeigšanas, jūs zaudēsiet progresu.",
+ "achievements": "Sasniegumi",
+ "achievements_count": "Sasniegumi {{unlockedCount}}/{{achievementsCount}}",
+ "show_more": "Rādīt vairāk",
+ "show_less": "Rādīt mazāk",
+ "reviews": "Atsauksmes",
+ "leave_a_review": "Atstāt atsauksmi",
+ "write_review_placeholder": "Dalieties savās domās par šo spēli...",
+ "sort_newest": "Vispirms jaunākās",
+ "no_reviews_yet": "Pagaidām nav atsauksmju",
+ "be_first_to_review": "Esiet pirmais, kurš dalīsies savās domās par šo spēli!",
+ "sort_oldest": "Vispirms vecākās",
+ "sort_highest_score": "Augstākais vērtējums",
+ "sort_lowest_score": "Zemākais vērtējums",
+ "sort_most_voted": "Vispopulārākās",
+ "rating": "Vērtējums",
+ "rating_stats": "Vērtējums",
+ "rating_very_negative": "Ļoti negatīvs",
+ "rating_negative": "Negatīvs",
+ "rating_neutral": "Neitrāls",
+ "rating_positive": "Pozitīvs",
+ "rating_very_positive": "Ļoti pozitīvs",
+ "submit_review": "Iesniegt",
+ "submitting": "Iesniegšana...",
+ "review_submitted_successfully": "Atsauksme veiksmīgi iesniegta!",
+ "review_submission_failed": "Neizdevās iesniegt atsauksmi. Lūdzu, mēģiniet vēlreiz.",
+ "review_cannot_be_empty": "Atsauksmes teksta lauks nevar būt tukšs.",
+ "review_deleted_successfully": "Atsauksme veiksmīgi dzēsta.",
+ "review_deletion_failed": "Neizdevās dzēst atsauksmi. Lūdzu, mēģiniet vēlreiz.",
+ "loading_reviews": "Ielādē atsauksmes...",
+ "loading_more_reviews": "Ielādē papildu atsauksmes...",
+ "load_more_reviews": "Ielādēt vairāk atsauksmju",
+ "you_seemed_to_enjoy_this_game": "Šķiet, jums patika šī spēle",
+ "would_you_recommend_this_game": "Vai vēlaties atstāt atsauksmi par šo spēli?",
+ "yes": "Jā",
+ "maybe_later": "Varbūt vēlāk",
+ "rating_count": "Vērtējums",
+ "delete_review": "Dzēst atsauksmi",
+ "remove_review": "Dzēst atsauksmi",
+ "delete_review_modal_title": "Vai esat pārliecināts, ka vēlaties dzēst savu atsauksmi?",
+ "delete_review_modal_description": "Šo darbību nevar atsaukt.",
+ "delete_review_modal_delete_button": "Dzēst",
+ "delete_review_modal_cancel_button": "Atcelt",
+ "show_original": "Rādīt oriģinālu",
+ "show_translation": "Rādīt tulkojumu",
+ "show_original_translated_from": "Rādīt oriģinālu (tulkot no {{language}})",
+ "hide_original": "Slēpt oriģinālu",
+ "cloud_save": "Mākoņglabāšana",
+ "cloud_save_description": "Glabājiet savu progresu mākonī un turpiniet spēlēt jebkurā ierīcē",
+ "backups": "Rezerves kopijas",
+ "install_backup": "Instalēt",
+ "delete_backup": "Dzēst",
+ "create_backup": "Izveidot jaunu rezerves kopiju",
+ "last_backup_date": "Pēdējā rezerves kopija no {{date}}",
+ "no_backup_preview": "Šim nosaukumam saglabājumi nav atrasti",
+ "restoring_backup": "Atjauno rezerves kopiju ({{progress}} pabeigts)…",
+ "uploading_backup": "Augšupielādē rezerves kopiju…",
+ "no_backups": "Jūs vēl neesat izveidojis rezerves kopijas šai spēlei",
+ "backup_uploaded": "Rezerves kopija augšupielādēta",
+ "backup_failed": "Rezerves kopēšanas kļūda",
+ "backup_deleted": "Rezerves kopija dzēsta",
+ "backup_restored": "Rezerves kopija atjaunota",
+ "see_all_achievements": "Skatīt visus sasniegumus",
+ "sign_in_to_see_achievements": "Piesakieties, lai redzētu sasniegumus",
+ "mapping_method_automatic": "Automātiska",
+ "mapping_method_manual": "Manuāla",
+ "mapping_method_label": "Kartēšanas metode",
+ "files_automatically_mapped": "Faili automātiski kartēti",
+ "no_backups_created": "Šai spēlei nav izveidotas rezerves kopijas",
+ "manage_files": "Failu pārvaldība",
+ "loading_save_preview": "Meklē saglabājumus…",
+ "wine_prefix": "Wine prefikss",
+ "wine_prefix_description": "Wine prefikss, ko izmanto šīs spēles palaišanai",
+ "launch_options": "Palaišanas parametri",
+ "launch_options_description": "Pieredzējuši lietotāji var veikt izmaiņas palaišanas parametros",
+ "launch_options_placeholder": "Parametrs nav norādīts",
+ "no_download_option_info": "Informācija nav pieejama",
+ "backup_deletion_failed": "Neizdevās dzēst rezerves kopiju",
+ "max_number_of_artifacts_reached": "Sasniegts maksimālais rezerves kopiju skaits šai spēlei",
+ "achievements_not_sync": "Jūsu sasniegumi nav sinhronizēti",
+ "manage_files_description": "Pārvaldiet failus, kas tiks saglabāti un atjaunoti",
+ "select_folder": "Izvēlēties mapi",
+ "backup_from": "Rezerves kopija no {{date}}",
+ "automatic_backup_from": "Automātiska rezerves kopija no {{date}}",
+ "enable_automatic_cloud_sync": "Iespējot automātisku sinhronizāciju mākonī",
+ "custom_backup_location_set": "Iestatīta pielāgota rezerves kopēšanas vieta",
+ "no_directory_selected": "Nav izvēlēts katalogs",
+ "no_write_permission": "Nevar augšupielādēt šajā direktorijā. Noklikšķiniet šeit, lai uzzinātu vairāk.",
+ "reset_achievements": "Atiestatīt sasniegumus",
+ "reset_achievements_description": "Tas atiestatīs visus sasniegumus {{game}} spēlei",
+ "reset_achievements_title": "Vai esat pārliecināts?",
+ "reset_achievements_success": "Sasniegumi veiksmīgi atiestatīti",
+ "reset_achievements_error": "Neizdevās atiestatīt sasniegumus",
+ "download_error_gofile_quota_exceeded": "Jūs pārsniedzāt Gofile mēneša kvotu. Lūdzu, uzgaidiet, kamēr kvota tiks atjaunota.",
+ "download_error_real_debrid_account_not_authorized": "Jūsu Real-Debrid konts nav autorizēts jaunām lejupielādēm. Lūdzu, pārbaudiet konta iestatījumus un mēģiniet vēlreiz.",
+ "download_error_not_cached_on_real_debrid": "Šī lejupielāde nav pieejama Real-Debrid, un Real-Debrid lejupielādes statusu pagaidām nav iespējams iegūt.",
+ "update_playtime_title": "Atjaunināt spēles laiku",
+ "update_playtime_description": "Manuāli atjauniniet spēles laiku {{game}} spēlei",
+ "update_playtime": "Atjaunināt spēles laiku",
+ "update_playtime_success": "Spēles laiks veiksmīgi atjaunināts",
+ "update_playtime_error": "Neizdevās atjaunināt spēles laiku",
+ "update_game_playtime": "Atjaunināt spēles laiku",
+ "manual_playtime_warning": "Jūsu stundas tiks atzīmētas kā manuāli atjauninātas. Šo darbību nevar atcelt.",
+ "manual_playtime_tooltip": "Šis spēles laiks tika atjaunināts manuāli",
+ "download_error_not_cached_on_torbox": "Šī lejupielāde nav pieejama TorBox, un TorBox lejupielādes statusu pagaidām nav iespējams iegūt.",
+ "download_error_not_cached_on_hydra": "Šī lejupielāde nav pieejama Nimbus.",
+ "game_removed_from_favorites": "Spēle dzēsta no izlases",
+ "game_added_to_favorites": "Spēle pievienota izlasei",
+ "game_removed_from_pinned": "Spēle dzēsta no piespraustajiem",
+ "game_added_to_pinned": "Spēle pievienota piespraustajiem",
+ "automatically_extract_downloaded_files": "Automātiska lejupielādēto failu izpakošana",
+ "create_start_menu_shortcut": "Izveidot saīsni sākuma izvēlnē",
+ "invalid_wine_prefix_path": "Nederīgs Wine prefiksa ceļš",
+ "invalid_wine_prefix_path_description": "Wine prefiksa ceļš nav derīgs. Lūdzu, pārbaudiet ceļu un mēģiniet vēlreiz.",
+ "missing_wine_prefix": "Wine prefikss ir nepieciešams, lai izveidotu rezerves kopiju Linux vidē",
+ "artifact_renamed": "Rezerves kopija veiksmīgi pārsaukta",
+ "rename_artifact": "Pārsaukt rezerves kopiju",
+ "rename_artifact_description": "Pārsauciet rezerves kopiju, piešķirot tai aprakstošāku nosaukumu.",
+ "artifact_name_label": "Rezerves kopijas nosaukums",
+ "artifact_name_placeholder": "Ievadiet nosaukumu rezerves kopijai",
+ "save_changes": "Saglabāt izmaiņas",
+ "required_field": "Šis lauks ir obligāts",
+ "max_length_field": "Šim laukam jābūt mazāk par {{length}} simboliem",
+ "freeze_backup": "Piespraust, lai to nepārrakstītu automātiskās rezerves kopijas",
+ "unfreeze_backup": "Atspraust",
+ "backup_frozen": "Rezerves kopija piesprausta",
+ "backup_unfrozen": "Rezerves kopija atsprausta",
+ "backup_freeze_failed": "Neizdevās piespraust rezerves kopiju",
+ "backup_freeze_failed_description": "Jums jāatstāj vismaz viens brīvs slots automātiskajām rezerves kopijām",
+ "edit_game_modal_button": "Rediģēt spēles detaļas",
+ "game_details": "Spēles detaļas",
+ "currency_symbol": "₽",
+ "currency_country": "ru",
+ "prices": "Cenas",
+ "no_prices_found": "Cenas nav atrastas",
+ "view_all_prices": "Noklikšķiniet, lai skatītu visas cenas",
+ "retail_price": "Mazumtirdzniecības cena",
+ "keyshop_price": "Atslēgu veikala cena",
+ "historical_retail": "Vēsturiskās mazumtirdzniecības cenas",
+ "historical_keyshop": "Vēsturiskās atslēgu veikalu cenas",
+ "language": "Valoda",
+ "caption": "Subtitri",
+ "audio": "Audio",
+ "filter_by_source": "Filtrēt pēc avota",
+ "no_repacks_found": "Avoti šai spēlei nav atrasti"
+ },
+ "activation": {
+ "title": "Aktivizēt Hydra",
+ "installation_id": "Instalācijas ID:",
+ "enter_activation_code": "Ievadiet savu aktivizācijas kodu",
+ "message": "Ja nezināt, kur to pieprasīt, jums to nevajadzētu būt.",
+ "activate": "Aktivizēt",
+ "loading": "Ielādēšana…"
+ },
+ "downloads": {
+ "resume": "Atsākt",
+ "pause": "Apturēt",
+ "eta": "Beigsies {{eta}}",
+ "paused": "Apturēts",
+ "verifying": "Pārbauda…",
+ "completed": "Pabeigts",
+ "removed": "Nav lejupielādēts",
+ "cancel": "Atcelt",
+ "filter": "Meklēt lejupielādētās spēles",
+ "remove": "Dzēst",
+ "downloading_metadata": "Lejupielādē metadatus…",
+ "deleting": "Dzēš instalētāju…",
+ "delete": "Dzēst instalētāju",
+ "delete_modal_title": "Vai esat pārliecināts?",
+ "delete_modal_description": "Tas dzēsīs visus instalētājus no jūsu datora",
+ "install": "Instalēt",
+ "download_in_progress": "Procesā",
+ "queued_downloads": "Lejupielādes rindā",
+ "downloads_completed": "Pabeigts",
+ "queued": "Rindā",
+ "no_downloads_title": "Šeit ir tik tukšs...",
+ "no_downloads_description": "Jūs vēl neko neesat lejupielādējis, izmantojot Hydra, bet nekad nav par vēlu sākt.",
+ "checking_files": "Pārbauda failus…",
+ "seeding": "Sēdēšana",
+ "stop_seeding": "Apturēt sēdēšanu",
+ "resume_seeding": "Turpināt sēdēšanu",
+ "options": "Pārvaldīt",
+ "extract": "Izpakot failus",
+ "extracting": "Izpako failus…"
+ },
+ "settings": {
+ "downloads_path": "Lejupielāžu ceļš",
+ "change": "Mainīt",
+ "notifications": "Paziņojumi",
+ "enable_download_notifications": "Pēc lejupielādes pabeigšanas",
+ "enable_repack_list_notifications": "Pievienojot jaunu repaku",
+ "real_debrid_api_token_label": "Real-Debrid API-atslēga",
+ "quit_app_instead_hiding": "Aizvērt lietotni, nevis minimizēt uz paplātes",
+ "launch_with_system": "Palaist Hydra kopā ar sistēmu",
+ "general": "Vispārīgi",
+ "behavior": "Uzvedība",
+ "download_sources": "Lejupielādes avoti",
+ "language": "Valoda",
+ "api_token": "API atslēga",
+ "enable_real_debrid": "Iespējot Real-Debrid",
+ "real_debrid_description": "Real-Debrid ir neierobežots lejupielādētājs, kas ļauj ātri lejupielādēt failus, kas izvietoti internetā, vai uzreiz pārsūtīt tos uz atskaņotāju, izmantojot privātu tīklu, kas ļauj apiet jebkādus bloķējumus.",
+ "debrid_invalid_token": "Nederīga API atslēga",
+ "debrid_api_token_hint": "API atslēgu var iegūt <0>šeit0>",
+ "real_debrid_free_account_error": "Kontam \"{{username}}\" nav abonementa. Lūdzu, iegādājieties Real-Debrid abonementu",
+ "debrid_linked_message": "Piesaistīts konts \"{{username}}\"",
+ "save_changes": "Saglabāt izmaiņas",
+ "changes_saved": "Izmaiņas veiksmīgi saglabātas",
+ "download_sources_description": "Hydra saņems lejupielādes saites no šiem avotiem. URL jāietver tieša saite uz .json failu ar lejupielādes saitēm.",
+ "validate_download_source": "Pārbaudīt",
+ "remove_download_source": "Dzēst",
+ "add_download_source": "Pievienot avotu",
+ "download_count_zero": "Sarakstā nav lejupielāžu",
+ "download_count_one": "{{countFormatted}} lejupielāde sarakstā",
+ "download_count_other": "{{countFormatted}} lejupielādes sarakstā",
+ "download_source_url": "Saite uz avotu",
+ "add_download_source_description": "Ievietojiet saiti uz .json failu",
+ "download_source_up_to_date": "Atjaunināts",
+ "download_source_errored": "Kļūda",
+ "sync_download_sources": "Atjaunināt avotus",
+ "removed_download_source": "Avots dzēsts",
+ "removed_download_sources": "Avoti dzēsti",
+ "cancel_button_confirmation_delete_all_sources": "Nē",
+ "confirm_button_confirmation_delete_all_sources": "Jā, dzēst visus",
+ "title_confirmation_delete_all_sources": "Dzēst visus avotus",
+ "description_confirmation_delete_all_sources": "Jūs dzēsīsiet visus avotus",
+ "button_delete_all_sources": "Dzēst visus avotus",
+ "added_download_source": "Avots pievienots",
+ "download_sources_synced": "Visi avoti atjaunināti",
+ "insert_valid_json_url": "Ievietojiet derīgu JSON faila URL",
+ "found_download_option_zero": "Nav atrasts lejupielādes variantu",
+ "found_download_option_one": "Atrasts {{countFormatted}} lejupielādes variants",
+ "found_download_option_other": "Atrasti {{countFormatted}} lejupielādes varianti",
+ "import": "Importēt",
+ "importing": "Importē...",
+ "public": "Publisks",
+ "private": "Privāts",
+ "friends_only": "Tikai draugiem",
+ "privacy": "Konfidencialitāte",
+ "profile_visibility": "Profila redzamība",
+ "profile_visibility_description": "Izvēlieties, kurš var redzēt jūsu profilu un bibliotēku",
+ "required_field": "Šis lauks ir obligāts",
+ "source_already_exists": "Šis avots jau ir pievienots",
+ "must_be_valid_url": "Avotam jābūt pareizam URL",
+ "blocked_users": "Bloķētie lietotāji",
+ "user_unblocked": "Lietotājs atbloķēts",
+ "enable_achievement_notifications": "Kad sasniegums ir atbloķēts",
+ "launch_minimized": "Palaist Hydra minimizētā veidā",
+ "disable_nsfw_alert": "Atspējot brīdinājumu par neķītru saturu",
+ "seed_after_download_complete": "Sēdēt pēc lejupielādes pabeigšanas",
+ "show_hidden_achievement_description": "Rādīt slēpto sasniegumu aprakstu pirms to iegūšanas",
+ "account": "Konts",
+ "no_users_blocked": "Jums nav bloķētu lietotāju",
+ "subscription_active_until": "Jūsu Hydra Cloud abonements ir aktīvs līdz {{date}}",
+ "manage_subscription": "Pārvaldīt abonementu",
+ "update_email": "Atjaunināt e-pastu",
+ "update_password": "Atjaunināt paroli",
+ "current_email": "Pašreizējais e-pasts:",
+ "no_email_account": "Jūs vēl neesat iestatījis e-pastu",
+ "account_data_updated_successfully": "Konta dati veiksmīgi atjaunināti",
+ "renew_subscription": "Atjaunot Hydra Cloud abonementu",
+ "subscription_expired_at": "Jūsu abonementa termiņš beidzās {{date}}",
+ "no_subscription": "Izbaudiet Hydra pilnībā",
+ "become_subscriber": "Kļūstiet par Hydra Cloud īpašnieku",
+ "subscription_renew_cancelled": "Automātiskā atjaunošana atspējota",
+ "subscription_renews_on": "Jūsu abonements tiek atjaunots {{date}}",
+ "bill_sent_until": "Jūsu nākamais rēķins tiks nosūtīts līdz šai dienai",
+ "no_themes": "Šķiet, ka jums vēl nav tēmu, bet neuztraucieties, noklikšķiniet šeit, lai izveidotu savu pirmo šedevru",
+ "editor_tab_code": "Kods",
+ "editor_tab_info": "Informācija",
+ "editor_tab_save": "Saglabāt",
+ "web_store": "Tīmekļa veikals",
+ "clear_themes": "Notīrīt",
+ "create_theme": "Izveidot",
+ "create_theme_modal_title": "Izveidot pielāgotu tēmu",
+ "create_theme_modal_description": "Izveidot jaunu tēmu, lai pielāgotu Hydra izskatu",
+ "theme_name": "Nosaukums",
+ "insert_theme_name": "Ievietot tēmas nosaukumu",
+ "set_theme": "Iestatīt tēmu",
+ "unset_theme": "Noņemt tēmu",
+ "delete_theme": "Dzēst tēmu",
+ "edit_theme": "Rediģēt tēmu",
+ "delete_all_themes": "Dzēst visas tēmas",
+ "delete_all_themes_description": "Tas dzēsīs visas jūsu pielāgotās tēmas",
+ "delete_theme_description": "Tas dzēsīs tēmu {{theme}}",
+ "cancel": "Atcelt",
+ "appearance": "Izskats",
+ "debrid": "Debrid",
+ "debrid_description": "Debrid servisi ir premium lejupielādētāji bez ierobežojumiem, kas ļauj ātri lejupielādēt failus no dažādiem failu apmaiņas servisiem, ierobežojoties tikai ar jūsu interneta ātrumu.",
+ "enable_torbox": "Iespējot TorBox",
+ "torbox_description": "TorBox ir jūsu premium serviss, kas konkurē pat ar labākajiem serveriem tirgū.",
+ "torbox_account_linked": "TorBox konts piesaistīts",
+ "create_real_debrid_account": "Noklikšķiniet šeit, ja jums vēl nav Real-Debrid konta",
+ "create_torbox_account": "Noklikšķiniet šeit, ja jums vēl nav TorBox konta",
+ "real_debrid_account_linked": "Real-Debrid konts piesaistīts",
+ "name_min_length": "Tēmas nosaukumam jābūt vismaz 3 simbolus garam",
+ "import_theme": "Importēt tēmu",
+ "import_theme_description": "Jūs importēsiet {{theme}} no tēmu veikala",
+ "error_importing_theme": "Kļūda importējot tēmu",
+ "theme_imported": "Tēma veiksmīgi importēta",
+ "enable_friend_request_notifications": "Saņemot draudzības pieprasījumu",
+ "enable_auto_install": "Automātiski lejupielādēt atjauninājumus",
+ "common_redist": "Bibliotēkas",
+ "common_redist_description": "Dažu spēļu palaišanai ir nepieciešamas bibliotēkas. Lai izvairītos no problēmām, ieteicams tās instalēt.",
+ "install_common_redist": "Instalēt",
+ "installing_common_redist": "Instalēšana…",
+ "show_download_speed_in_megabytes": "Rādīt lejupielādes ātrumu megabaitos sekundē",
+ "extract_files_by_default": "Izpakot failus pēc noklusējuma pēc lejupielādes",
+ "enable_steam_achievements": "Iespējot Steam sasniegumu meklēšanu",
+ "achievement_custom_notification_position": "Sasniegumu paziņojumu pozīcija",
+ "top-left": "Augšējais kreisais stūris",
+ "top-center": "Augšējais centrs",
+ "top-right": "Augšējais labais stūris",
+ "bottom-left": "Apakšējais kreisais stūris",
+ "bottom-center": "Apakšējais centrs",
+ "bottom-right": "Apakšējais labais stūris",
+ "enable_achievement_custom_notifications": "Iespējot sasniegumu paziņojumus",
+ "alignment": "Izlīdzināšana",
+ "variation": "Variācija",
+ "default": "Pēc noklusējuma",
+ "rare": "Retais",
+ "platinum": "Platīna",
+ "hidden": "Slēpts",
+ "test_notification": "Testa paziņojums",
+ "notification_preview": "Sasnieguma paziņojuma priekšskatījums",
+ "enable_friend_start_game_notifications": "Kad draugs sāk spēlēt spēli"
+ },
+ "notifications": {
+ "download_complete": "Lejupielāde pabeigta",
+ "game_ready_to_install": "{{title}} ir gatava instalēšanai",
+ "repack_list_updated": "Repaku saraksts atjaunināts",
+ "repack_count_one": "{{count}} repaks pievienots",
+ "repack_count_other": "{{count}} repaki pievienoti",
+ "new_update_available": "Pieejama jauna versija {{version}}",
+ "restart_to_install_update": "Pārstartējiet Hydra, lai instalētu atjauninājumu",
+ "notification_achievement_unlocked_title": "Sasniegums atbloķēts spēlei {{game}}",
+ "notification_achievement_unlocked_body": "tika atbloķēti {{achievement}} un citi {{count}}",
+ "new_friend_request_description": "{{displayName}} nosūtīja jums draudzības pieprasījumu",
+ "new_friend_request_title": "Jauns draudzības pieprasījums",
+ "extraction_complete": "Izpakošana pabeigta",
+ "game_extracted": "{{title}} veiksmīgi izpakots",
+ "friend_started_playing_game": "{{displayName}} sāka spēlēt spēli",
+ "test_achievement_notification_title": "Šis ir testa paziņojums",
+ "test_achievement_notification_description": "Diezgan forši, vai ne?"
+ },
+ "system_tray": {
+ "open": "Atvērt Hydra",
+ "quit": "Iziet"
+ },
+ "game_card": {
+ "available_one": "Pieejams",
+ "available_other": "Pieejams",
+ "no_downloads": "Nav pieejamu avotu",
+ "calculating": "Aprēķina"
+ },
+ "binary_not_found_modal": {
+ "title": "Programmas nav instalētas",
+ "description": "Wine vai Lutris nav atrasti",
+ "instructions": "Uzziniet pareizo veidu, kā instalēt kādu no tiem jūsu Linux distribūcijā, lai spēle varētu normāli darboties"
+ },
+ "modal": {
+ "close": "Aizvērt"
+ },
+ "forms": {
+ "toggle_password_visibility": "Rādīt paroli"
+ },
+ "user_profile": {
+ "amount_hours": "{{amount}} stundas",
+ "amount_minutes": "{{amount}} minūtes",
+ "amount_hours_short": "{{amount}}h",
+ "amount_minutes_short": "{{amount}}m",
+ "last_time_played": "Pēdējā spēle {{period}}",
+ "activity": "Nesenā aktivitāte",
+ "library": "Bibliotēka",
+ "pinned": "Piespraustās",
+ "achievements_earned": "Nopelnītie sasniegumi",
+ "played_recently": "Nesen spēlētās",
+ "playtime": "Spēles laiks",
+ "total_play_time": "Kopējais spēles laiks",
+ "manual_playtime_tooltip": "Spēles laiks tika atjaunināts manuāli",
+ "no_recent_activity_title": "Hmmmm... Šeit nav nekā",
+ "no_recent_activity_description": "Jūs sen neesat neko spēlējis. Ir laiks to mainīt!",
+ "display_name": "Parādāmais vārds",
+ "saving": "Saglabāšana",
+ "save": "Saglabāt",
+ "edit_profile": "Rediģēt profilu",
+ "saved_successfully": "Veiksmīgi saglabāts",
+ "try_again": "Lūdzu, mēģiniet vēlreiz",
+ "sign_out_modal_title": "Vai esat pārliecināts?",
+ "cancel": "Atcelt",
+ "successfully_signed_out": "Veiksmīga izrakstīšanās no konta",
+ "sign_out": "Iziet",
+ "playing_for": "Spēlēts {{amount}}",
+ "sign_out_modal_text": "Jūsu bibliotēka ir saistīta ar pašreizējo kontu. Izejot no sistēmas, jūsu bibliotēka kļūs nepieejama, un progress netiks saglabāts. Iziet?",
+ "add_friends": "Pievienot draugus",
+ "add": "Pievienot",
+ "friend_code": "Drauga kods",
+ "see_profile": "Skatīt profilu",
+ "sending": "Sūtīšana",
+ "friend_request_sent": "Draudzības pieprasījums nosūtīts",
+ "friends": "Draugi",
+ "friends_list": "Draugu saraksts",
+ "user_not_found": "Lietotājs nav atrasts",
+ "block_user": "Bloķēt lietotāju",
+ "add_friend": "Pievienot draugu",
+ "request_sent": "Pieprasījums nosūtīts",
+ "request_received": "Pieprasījums saņemts",
+ "accept_request": "Pieņemt pieprasījumu",
+ "ignore_request": "Ignorēt pieprasījumu",
+ "cancel_request": "Atcelt pieprasījumu",
+ "undo_friendship": "Dzēst draugu",
+ "request_accepted": "Pieprasījums pieņemts",
+ "user_blocked_successfully": "Lietotājs veiksmīgi bloķēts",
+ "user_block_modal_text": "{{displayName}} tiks bloķēts",
+ "blocked_users": "Bloķētie lietotāji",
+ "unblock": "Atbloķēt",
+ "no_friends_added": "Jūs vēl neesat pievienojis nevienu draugu",
+ "pending": "Gaida",
+ "no_pending_invites": "Jums nav pieprasījumu, kas gaida atbildi",
+ "no_blocked_users": "Jūs neesat bloķējis nevienu lietotāju",
+ "friend_code_copied": "Drauga kods kopēts",
+ "undo_friendship_modal_text": "Tas atcels jūsu draudzību ar {{displayName}}.",
+ "privacy_hint": "Lai norādītu, kurš to var redzēt, dodieties uz <0>Iestatījumiem0>.",
+ "locked_profile": "Šis profils ir privāts",
+ "image_process_failure": "Attēlu apstrādes kļūme",
+ "required_field": "Šis lauks ir obligāts",
+ "displayname_min_length": "Parādāmam vārdam jābūt vismaz 3 simbolus garam.",
+ "displayname_max_length": "Parādāmam vārdam jābūt ne vairāk kā 50 simboliem.",
+ "report_profile": "Ziņot par šo profilu",
+ "report_reason": "Kāpēc jūs ziņojat par šo profilu?",
+ "report_description": "Papildu informācija",
+ "report_description_placeholder": "Papildu informācija",
+ "report": "Ziņot",
+ "report_reason_hate": "Naida runa",
+ "report_reason_sexual_content": "Seksuāls saturs",
+ "report_reason_violence": "Vardarbība",
+ "report_reason_spam": "Surogātpasts",
+ "report_reason_other": "Cits",
+ "profile_reported": "Ziņojums par profilu nosūtīts",
+ "your_friend_code": "Jūsu drauga kods:",
+ "upload_banner": "Augšupielādēt reklāmkarogu",
+ "uploading_banner": "Augšupielādē reklāmkarogu...",
+ "background_image_updated": "Fona attēls atjaunināts",
+ "stats": "Statistika",
+ "achievements": "Sasniegumi",
+ "games": "Spēles",
+ "top_percentile": "Top {{percentile}}%",
+ "ranking_updated_weekly": "Reitings tiek atjaunināts katru nedēļu",
+ "playing": "Spēlē {{game}}",
+ "achievements_unlocked": "Sasniegumi atbloķēti",
+ "earned_points": "Nopelnītie punkti:",
+ "show_achievements_on_profile": "Rādīt savus sasniegumus profilā",
+ "show_points_on_profile": "Rādīt nopelnītos punktus savā profilā",
+ "error_adding_friend": "Neizdevās nosūtīt draudzības pieprasījumu. Lūdzu, pārbaudiet drauga kodu",
+ "friend_code_length_error": "Drauga kodam jāsatur 8 simboli",
+ "game_removed_from_pinned": "Spēle dzēsta no piespraustajiem",
+ "game_added_to_pinned": "Spēle pievienota piespraustajiem",
+ "karma": "Karma",
+ "karma_count": "karma",
+ "karma_description": "Nopelnīta ar pozitīviem atsauksmju vērtējumiem"
+ },
+ "achievement": {
+ "achievement_unlocked": "Sasniegums atbloķēts",
+ "user_achievements": "{{displayName}} sasniegumi",
+ "your_achievements": "Jūsu sasniegumi",
+ "unlocked_at": "Atbloķēts: {{date}}",
+ "subscription_needed": "Šī satura apskatīšanai nepieciešams Hydra Cloud abonements",
+ "new_achievements_unlocked": "Atbloķēti {{achievementCount}} jauni sasniegumi no {{gameCount}} spēlēm",
+ "achievement_progress": "{{unlockedCount}}/{{totalCount}} sasniegumi",
+ "achievements_unlocked_for_game": "Atbloķēti {{achievementCount}} jauni sasniegumi spēlei {{gameTitle}}",
+ "hidden_achievement_tooltip": "Šis ir slēpts sasniegums",
+ "achievement_earn_points": "Nopelniet {{points}} punktus ar šo sasniegumu",
+ "earned_points": "Nopelnītie punkti:",
+ "available_points": "Pieejamie punkti:",
+ "how_to_earn_achievements_points": "Kā nopelnīt sasniegumu punktus?"
+ },
+ "hydra_cloud": {
+ "subscription_tour_title": "Hydra Cloud abonements",
+ "subscribe_now": "Abonējiet tūlīt",
+ "cloud_saving": "Saglabāšana mākonī",
+ "cloud_achievements": "Saglabājiet savus sasniegumus mākonī",
+ "animated_profile_picture": "Animētas profila bildes",
+ "premium_support": "Premium atbalsts",
+ "show_and_compare_achievements": "Rādiet un salīdziniet savus sasniegumus ar citu lietotāju sasniegumiem",
+ "animated_profile_banner": "Animēts profila reklāmkarogs",
+ "hydra_cloud": "Hydra Cloud",
+ "hydra_cloud_feature_found": "Jūs tikko atklājāt Hydra Cloud funkciju!",
+ "learn_more": "Uzzināt vairāk",
+ "debrid_description": "Lejupielādējiet 4 reizes ātrāk ar Nimbus"
+ }
+}
diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json
index 37569701..5bfc2af3 100755
--- a/src/locales/pt-BR/translation.json
+++ b/src/locales/pt-BR/translation.json
@@ -27,21 +27,68 @@
"friends": "Amigos",
"need_help": "Precisa de ajuda?",
"favorites": "Favoritos",
+ "playable_button_title": "Mostrar apenas jogos que você pode jogar agora",
"add_custom_game_tooltip": "Adicionar jogo personalizado",
+ "show_playable_only_tooltip": "Mostrar Apenas Jogáveis",
"custom_game_modal": "Adicionar jogo personalizado",
+ "custom_game_modal_description": "Adicione um jogo personalizado à sua biblioteca selecionando um arquivo executável",
+ "custom_game_modal_executable_path": "Caminho do Executável",
+ "custom_game_modal_select_executable": "Selecionar arquivo executável",
+ "custom_game_modal_title": "Título",
+ "custom_game_modal_enter_title": "Insira o título",
"edit_game_modal_title": "Título",
- "playable_button_title": "",
- "custom_game_modal_add": "Adicionar Jogo",
- "custom_game_modal_adding": "Adicionando...",
"custom_game_modal_browse": "Buscar",
"custom_game_modal_cancel": "Cancelar",
- "edit_game_modal_assets": "Imagens",
- "edit_game_modal_icon": "Ícone",
- "edit_game_modal_browse": "Buscar",
- "edit_game_modal_cancel": "Cancelar",
+ "custom_game_modal_add": "Adicionar Jogo",
+ "custom_game_modal_adding": "Adicionando...",
+ "custom_game_modal_success": "Jogo personalizado adicionado com sucesso",
+ "custom_game_modal_failed": "Falha ao adicionar jogo personalizado",
+ "custom_game_modal_executable": "Executável",
+ "edit_game_modal": "Personalizar detalhes",
+ "edit_game_modal_description": "Personalize os recursos e detalhes do jogo",
"edit_game_modal_enter_title": "Insira o título",
+ "edit_game_modal_image": "Imagem",
+ "edit_game_modal_select_image": "Selecionar imagem",
+ "edit_game_modal_browse": "Buscar",
+ "edit_game_modal_image_preview": "Visualização da imagem",
+ "edit_game_modal_icon": "Ícone",
+ "edit_game_modal_select_icon": "Selecionar ícone",
+ "edit_game_modal_icon_preview": "Visualização do ícone",
"edit_game_modal_logo": "Logo",
- "edit_game_modal": "Personalizar detalhes"
+ "edit_game_modal_select_logo": "Selecionar logo",
+ "edit_game_modal_logo_preview": "Visualização do logo",
+ "edit_game_modal_hero": "Hero da Biblioteca",
+ "edit_game_modal_select_hero": "Selecionar imagem hero da biblioteca",
+ "edit_game_modal_hero_preview": "Visualização da imagem hero da biblioteca",
+ "edit_game_modal_cancel": "Cancelar",
+ "edit_game_modal_update": "Atualizar",
+ "edit_game_modal_updating": "Atualizando...",
+ "edit_game_modal_fill_required": "Por favor, preencha todos os campos obrigatórios",
+ "edit_game_modal_success": "Recursos atualizados com sucesso",
+ "edit_game_modal_failed": "Falha ao atualizar recursos",
+ "edit_game_modal_image_filter": "Imagem",
+ "edit_game_modal_icon_resolution": "Resolução recomendada: 256x256px",
+ "edit_game_modal_logo_resolution": "Resolução recomendada: 640x360px",
+ "edit_game_modal_hero_resolution": "Resolução recomendada: 1920x620px",
+ "edit_game_modal_assets": "Imagens",
+ "edit_game_modal_drop_icon_image_here": "Solte a imagem do ícone aqui",
+ "edit_game_modal_drop_logo_image_here": "Solte a imagem do logo aqui",
+ "edit_game_modal_drop_hero_image_here": "Solte a imagem hero aqui",
+ "edit_game_modal_drop_to_replace_icon": "Solte para substituir o ícone",
+ "edit_game_modal_drop_to_replace_logo": "Solte para substituir o logo",
+ "edit_game_modal_drop_to_replace_hero": "Solte para substituir o hero",
+ "install_decky_plugin": "Instalar Plugin Decky",
+ "update_decky_plugin": "Atualizar Plugin Decky",
+ "decky_plugin_installed_version": "Plugin Decky (v{{version}})",
+ "install_decky_plugin_title": "Instalar Plugin Hydra Decky",
+ "install_decky_plugin_message": "Isso irá baixar e instalar o plugin Hydra para Decky Loader. Pode ser necessário permissões elevadas. Continuar?",
+ "update_decky_plugin_title": "Atualizar Plugin Hydra Decky",
+ "update_decky_plugin_message": "Uma nova versão do plugin Hydra Decky está disponível. Gostaria de atualizar agora?",
+ "decky_plugin_installed": "Plugin Decky v{{version}} instalado com sucesso",
+ "decky_plugin_installation_failed": "Falha ao instalar plugin Decky: {{error}}",
+ "decky_plugin_installation_error": "Erro ao instalar plugin Decky: {{error}}",
+ "confirm": "Confirmar",
+ "cancel": "Cancelar"
},
"header": {
"search": "Buscar jogos",
@@ -165,6 +212,7 @@
"uploading_backup": "Criando backup…",
"no_backups": "Você ainda não fez nenhum backup deste jogo",
"backup_uploaded": "Backup criado",
+ "backup_failed": "Falha no backup",
"backup_deleted": "Backup apagado",
"backup_restored": "Backup restaurado",
"see_all_achievements": "Ver todas as conquistas",
@@ -256,7 +304,52 @@
"update_playtime": "Modificar tempo de jogo",
"update_playtime_description": "Atualizar manualmente o tempo de jogo de {{game}}",
"update_playtime_error": "Falha ao atualizar tempo de jogo",
- "update_playtime_title": "Atualizar tempo de jogo"
+ "update_playtime_title": "Atualizar tempo de jogo",
+ "update_playtime_success": "Tempo de jogo atualizado com sucesso",
+ "show_more": "Mostrar mais",
+ "show_less": "Mostrar menos",
+ "reviews": "Avaliações",
+ "leave_a_review": "Deixar uma Avaliação",
+ "write_review_placeholder": "Compartilhe seus pensamentos sobre este jogo...",
+ "sort_newest": "Mais Recentes",
+ "sort_oldest": "Mais Antigas",
+ "sort_highest_score": "Maior Nota",
+ "sort_lowest_score": "Menor Nota",
+ "sort_most_voted": "Mais Votadas",
+ "no_reviews_yet": "Ainda não há avaliações",
+ "be_first_to_review": "Seja o primeiro a compartilhar seus pensamentos sobre este jogo!",
+ "rating": "Avaliação",
+ "rating_stats": "Avaliação",
+ "rating_very_negative": "Muito Negativo",
+ "rating_negative": "Negativo",
+ "rating_neutral": "Neutro",
+ "rating_positive": "Positivo",
+ "rating_very_positive": "Muito Positivo",
+ "submit_review": "Enviar",
+ "submitting": "Enviando...",
+ "review_submitted_successfully": "Avaliação enviada com sucesso!",
+ "review_submission_failed": "Falha ao enviar avaliação. Por favor, tente novamente.",
+ "review_cannot_be_empty": "O campo de texto da avaliação não pode estar vazio.",
+ "review_deleted_successfully": "Avaliação excluída com sucesso.",
+ "review_deletion_failed": "Falha ao excluir avaliação. Por favor, tente novamente.",
+ "loading_reviews": "Carregando avaliações...",
+ "loading_more_reviews": "Carregando mais avaliações...",
+ "load_more_reviews": "Carregar mais avaliações",
+ "you_seemed_to_enjoy_this_game": "Parece que você gostou deste jogo",
+ "would_you_recommend_this_game": "Gostaria de deixar uma avaliação para este jogo?",
+ "yes": "Sim",
+ "maybe_later": "Talvez mais tarde",
+ "delete_review": "Excluir avaliação",
+ "remove_review": "Remover Avaliação",
+ "delete_review_modal_title": "Tem certeza de que deseja excluir sua avaliação?",
+ "delete_review_modal_description": "Esta ação não pode ser desfeita.",
+ "delete_review_modal_delete_button": "Excluir",
+ "delete_review_modal_cancel_button": "Cancelar",
+ "show_original": "Mostrar original",
+ "show_translation": "Mostrar tradução",
+ "show_original_translated_from": "Mostrar original (traduzido do {{language}})",
+ "hide_original": "Ocultar original",
+ "rating_count": "Avaliação"
},
"activation": {
"title": "Ativação",
@@ -323,6 +416,9 @@
"validate_download_source": "Validar",
"remove_download_source": "Remover",
"add_download_source": "Adicionar fonte",
+ "adding": "Adicionando…",
+ "failed_add_download_source": "Falha ao adicionar fonte de download. Tente novamente.",
+ "download_source_already_exists": "Esta URL de fonte de download já existe.",
"download_count_zero": "Sem downloads na lista",
"download_count_one": "{{countFormatted}} download na lista",
"download_count_other": "{{countFormatted}} downloads na lista",
@@ -330,7 +426,13 @@
"add_download_source_description": "Insira a URL contendo o arquivo .json",
"download_source_up_to_date": "Sincronizada",
"download_source_errored": "Falhou",
+ "download_source_pending_matching": "Importando em breve",
+ "download_source_matched": "Sincronizada",
+ "download_source_matching": "Sincronizando",
+ "download_source_failed": "Erro",
+ "download_source_no_information": "Sem informações",
"sync_download_sources": "Sincronizar",
+ "download_sources_synced_successfully": "Fontes de download sincronizadas",
"removed_download_source": "Fonte removida",
"removed_download_sources": "Fontes removidas",
"cancel_button_confirmation_delete_all_sources": "Não",
@@ -345,6 +447,7 @@
"found_download_option_one": "{{countFormatted}} opção de download encontrada",
"found_download_option_other": "{{countFormatted}} opções de download encontradas",
"import": "Importar",
+ "importing": "Importando...",
"privacy": "Privacidade",
"private": "Privado",
"friends_only": "Apenas amigos",
@@ -378,6 +481,8 @@
"subscription_renews_on": "Sua assinatura renova dia {{date}}",
"bill_sent_until": "Sua próxima cobrança será enviada até esse dia",
"no_themes": "Parece que você ainda não tem nenhum tema. Não se preocupe, clique aqui para criar sua primeira obra de arte.",
+ "editor_tab_code": "Código",
+ "editor_tab_info": "Info",
"editor_tab_save": "Salvar",
"web_store": "Loja de temas",
"clear_themes": "Limpar",
@@ -395,6 +500,8 @@
"delete_theme_description": "Isso irá deletar o tema {{theme}}",
"cancel": "Cancelar",
"appearance": "Aparência",
+ "debrid": "Debrid",
+ "debrid_description": "Serviços Debrid são downloaders premium sem restrições que permitem baixar rapidamente arquivos hospedados em vários serviços de hospedagem de arquivos, limitados apenas pela sua velocidade de internet.",
"enable_torbox": "Habilitar TorBox",
"torbox_description": "TorBox é o seu serviço de seedbox premium que rivaliza até com os melhores servidores do mercado.",
"torbox_account_linked": "Conta do TorBox vinculada",
@@ -432,7 +539,8 @@
"test_notification": "Testar notificação",
"notification_preview": "Prévia da Notificação de Conquistas",
"enable_friend_start_game_notifications": "Quando um amigo iniciar um jogo",
- "editor_tab_code": "Código"
+ "autoplay_trailers_on_game_page": "Reproduzir trailers automaticamente na página do jogo",
+ "hide_to_tray_on_game_start": "Ocultar o Hydra na bandeja ao iniciar um jogo"
},
"notifications": {
"download_complete": "Download concluído",
@@ -448,7 +556,9 @@
"game_extracted": "{{title}} extraído com sucesso",
"friend_started_playing_game": "{{displayName}} começou a jogar",
"test_achievement_notification_title": "Esta é uma notificação de teste",
- "test_achievement_notification_description": "Bem legal, né?"
+ "test_achievement_notification_description": "Bem legal, né?",
+ "notification_achievement_unlocked_title": "Conquista desbloqueada para {{game}}",
+ "notification_achievement_unlocked_body": "{{achievement}} e outras {{count}} foram desbloqueadas"
},
"system_tray": {
"open": "Abrir Hydra",
@@ -457,7 +567,8 @@
"game_card": {
"available_one": "Disponível",
"available_other": "Disponíveis",
- "no_downloads": "Sem downloads disponíveis"
+ "no_downloads": "Sem downloads disponíveis",
+ "calculating": "Calculando"
},
"binary_not_found_modal": {
"title": "Programas não instalados",
@@ -484,10 +595,18 @@
"user_profile": {
"amount_hours": "{{amount}} horas",
"amount_minutes": "{{amount}} minutos",
+ "amount_hours_short": "{{amount}}h",
+ "amount_minutes_short": "{{amount}}m",
"last_time_played": "Última sessão {{period}}",
"activity": "Atividades recentes",
"library": "Biblioteca",
+ "pinned": "Fixados",
+ "sort_by": "Ordenar por:",
+ "achievements_earned": "Conquistas obtidas",
+ "played_recently": "Jogados recentemente",
+ "playtime": "Tempo de jogo",
"total_play_time": "Tempo total de jogo",
+ "manual_playtime_tooltip": "Este tempo de jogo foi atualizado manualmente",
"no_recent_activity_title": "Hmmm… nada por aqui",
"no_recent_activity_description": "Parece que você não jogou nada recentemente. Que tal começar agora?",
"display_name": "Nome de exibição",
@@ -569,7 +688,12 @@
"amount_minutes_short": "{{amount}}m",
"amount_hours_short": "{{amount}}h",
"game_added_to_pinned": "Jogo adicionado aos fixados",
- "achievements_earned": "Conquistas recebidas"
+ "game_removed_from_pinned": "Jogo removido dos fixados",
+ "achievements_earned": "Conquistas recebidas",
+ "karma": "Karma",
+ "karma_count": "karma",
+ "karma_description": "Ganho a partir de curtidas positivas em avaliações",
+ "manual_playtime_tooltip": "Este tempo de jogo foi atualizado manualmente"
},
"achievement": {
"achievement_unlocked": "Conquista desbloqueada",
diff --git a/src/locales/pt-PT/translation.json b/src/locales/pt-PT/translation.json
index 654e94ec..2894cf65 100644
--- a/src/locales/pt-PT/translation.json
+++ b/src/locales/pt-PT/translation.json
@@ -142,6 +142,7 @@
"uploading_backup": "A criar backup…",
"no_backups": "Ainda não fizeste nenhum backup deste jogo",
"backup_uploaded": "Backup criado",
+ "backup_failed": "Falha ao criar backup",
"backup_deleted": "Backup apagado",
"backup_restored": "Backup restaurado",
"see_all_achievements": "Ver todas as conquistas",
@@ -251,7 +252,13 @@
"add_download_source_description": "Insere o URL que contém o ficheiro .json",
"download_source_up_to_date": "Sincronizada",
"download_source_errored": "Falhou",
+ "download_source_pending_matching": "A atualizar em breve",
+ "download_source_matched": "Atualizado",
+ "download_source_matching": "A atualizar",
+ "download_source_failed": "Erro",
+ "download_source_no_information": "Sem informações",
"sync_download_sources": "Sincronizar",
+ "download_sources_synced_successfully": "Fontes de download sincronizadas",
"removed_download_source": "Fonte removida",
"cancel_button_confirmation_delete_all_sources": "Não",
"confirm_button_confirmation_delete_all_sources": "Sim, apague tudo",
@@ -266,6 +273,7 @@
"found_download_option_one": "{{countFormatted}} opção de transferência encontrada",
"found_download_option_other": "{{countFormatted}} opções de transferência encontradas",
"import": "Importar",
+ "importing": "A importar...",
"privacy": "Privacidade",
"private": "Privado",
"friends_only": "Apenas amigos",
@@ -375,10 +383,18 @@
"user_profile": {
"amount_hours": "{{amount}} horas",
"amount_minutes": "{{amount}} minutos",
+ "amount_hours_short": "{{amount}}h",
+ "amount_minutes_short": "{{amount}}m",
"last_time_played": "Última sessão {{period}}",
"activity": "Atividade recente",
"library": "Biblioteca",
+ "pinned": "Fixados",
+ "sort_by": "Ordenar por:",
+ "achievements_earned": "Conquistas obtidas",
+ "played_recently": "Jogados recentemente",
+ "playtime": "Tempo de jogo",
"total_play_time": "Tempo total de jogo",
+ "manual_playtime_tooltip": "Este tempo de jogo foi atualizado manualmente",
"no_recent_activity_title": "Hmmm… não há nada por aqui",
"no_recent_activity_description": "Parece que não jogaste nada recentemente. Que tal começar agora?",
"display_name": "Nome de apresentação",
diff --git a/src/locales/ro/translation.json b/src/locales/ro/translation.json
index be02c7b4..8ed6fd39 100644
--- a/src/locales/ro/translation.json
+++ b/src/locales/ro/translation.json
@@ -135,11 +135,7 @@
"real_debrid_free_account_error": "Contul \"{{username}}\" este un cont gratuit. Te rugăm să te abonezi la Real-Debrid",
"debrid_linked_message": "Contul \"{{username}}\" a fost legat",
"save_changes": "Salvează modificările",
- "changes_saved": "Modificările au fost salvate cu succes",
- "enable_all_debrid": "Activează All-Debrid",
- "all_debrid_description": "All-Debrid este un descărcător fără restricții care îți permite să descarci fișiere din diverse surse.",
- "all_debrid_free_account_error": "Contul \"{{username}}\" este un cont gratuit. Te rugăm să te abonezi la All-Debrid",
- "all_debrid_account_linked": "Contul All-Debrid a fost conectat cu succes"
+ "changes_saved": "Modificările au fost salvate cu succes"
},
"notifications": {
"download_complete": "Descărcare completă",
diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json
index 8992a4a0..15a9c9cb 100644
--- a/src/locales/ru/translation.json
+++ b/src/locales/ru/translation.json
@@ -6,8 +6,8 @@
"home": {
"surprise_me": "Удиви меня",
"no_results": "Ничего не найдено",
- "hot": "Сейчас популярно",
"start_typing": "Начинаю вводить текст...",
+ "hot": "Сейчас популярно",
"weekly": "📅 Лучшие игры недели",
"achievements": "🏆 Игры с достижениями"
},
@@ -28,6 +28,8 @@
"need_help": "Нужна помощь?",
"favorites": "Избранное",
"playable_button_title": "Показать только установленные игры.",
+ "add_custom_game_tooltip": "Добавить пользовательскую игру",
+ "show_playable_only_tooltip": "Показать только доступные для игры",
"custom_game_modal": "Добавить пользовательскую игру",
"custom_game_modal_description": "Добавьте пользовательскую игру в библиотеку, выбрав исполняемый файл",
"custom_game_modal_executable_path": "Путь к исполняемому файлу",
@@ -74,7 +76,19 @@
"edit_game_modal_drop_hero_image_here": "Перетащите изображение обложки сюда",
"edit_game_modal_drop_to_replace_icon": "Перетащите для замены иконки",
"edit_game_modal_drop_to_replace_logo": "Перетащите для замены логотипа",
- "edit_game_modal_drop_to_replace_hero": "Перетащите для замены обложки"
+ "edit_game_modal_drop_to_replace_hero": "Перетащите для замены обложки",
+ "install_decky_plugin": "Установить плагин Decky",
+ "update_decky_plugin": "Обновить плагин Decky",
+ "decky_plugin_installed_version": "Плагин Decky (v{{version}})",
+ "install_decky_plugin_title": "Установить плагин Hydra Decky",
+ "install_decky_plugin_message": "Это загрузит и установит плагин Hydra для Decky Loader. Может потребоваться повышенные разрешения. Продолжить?",
+ "update_decky_plugin_title": "Обновить плагин Hydra Decky",
+ "update_decky_plugin_message": "Доступна новая версия плагина Hydra Decky. Хотите обновить его сейчас?",
+ "decky_plugin_installed": "Плагин Decky v{{version}} успешно установлен",
+ "decky_plugin_installation_failed": "Не удалось установить плагин Decky: {{error}}",
+ "decky_plugin_installation_error": "Ошибка установки плагина Decky: {{error}}",
+ "confirm": "Подтвердить",
+ "cancel": "Отмена"
},
"header": {
"search": "Поиск",
@@ -135,6 +149,7 @@
"amount_minutes": "{{amount}} минут",
"accuracy": "точность {{accuracy}}%",
"add_to_library": "Добавить в библиотеку",
+ "already_in_library": "Уже в библиотеке",
"remove_from_library": "Удалить из библиотеки",
"no_downloads": "Нет доступных источников",
"play_time": "Сыграно {{amount}}",
@@ -163,11 +178,13 @@
"open_folder": "Открыть папку",
"open_download_location": "Просмотреть папку загрузок",
"create_shortcut": "Создать ярлык на рабочем столе",
+ "create_shortcut_simple": "Создать ярлык",
"clear": "Очистить",
"remove_files": "Удалить файлы",
"remove_from_library_title": "Вы уверены?",
"remove_from_library_description": "{{game}} будет удалена из вашей библиотеки.",
"options": "Настройки",
+ "properties": "Свойства",
"executable_section_title": "Файл",
"executable_section_description": "Путь к файлу, который будет запущен при нажатии на \"Play\"",
"downloads_section_title": "Загрузки",
@@ -177,22 +194,65 @@
"download_in_progress": "Идёт загрузка",
"download_paused": "Загрузка приостановлена",
"last_downloaded_option": "Последний вариант загрузки",
+ "create_steam_shortcut": "Создать ярлык Steam",
"create_shortcut_success": "Ярлык создан",
+ "you_might_need_to_restart_steam": "Возможно, вам потребуется перезапустить Steam, чтобы увидеть изменения",
"create_shortcut_error": "Не удалось создать ярлык",
- "allow_nsfw_content": "Продолжить",
- "download": "Скачать",
- "download_count": "Загрузки",
- "download_error": "Этот вариант загрузки недоступен",
- "executable_path_in_use": "Исполняемый файл уже используется \"{{game}}\"",
- "nsfw_content_description": "{{title}} содержит контент, который может не подходить для всех возрастов. \nВы уверены, что хотите продолжить?",
+ "add_to_favorites": "Добавить в избранное",
+ "remove_from_favorites": "Удалить из избранного",
+ "failed_update_favorites": "Не удалось обновить избранное",
+ "game_removed_from_library": "Игра удалена из библиотеки",
+ "failed_remove_from_library": "Не удалось удалить из библиотеки",
+ "files_removed_success": "Файлы успешно удалены",
+ "failed_remove_files": "Не удалось удалить файлы",
"nsfw_content_title": "Эта игра содержит неприемлемый контент",
+ "nsfw_content_description": "{{title}} содержит контент, который может не подходить для всех возрастов. \nВы уверены, что хотите продолжить?",
+ "allow_nsfw_content": "Продолжить",
"refuse_nsfw_content": "Назад",
"stats": "Статистика",
+ "download_count": "Загрузки",
"player_count": "Активные игроки",
+ "rating_count": "Оценка",
+ "download_error": "Этот вариант загрузки недоступен",
+ "download": "Скачать",
+ "executable_path_in_use": "Исполняемый файл уже используется \"{{game}}\"",
"warning": "Внимание:",
"hydra_needs_to_remain_open": "Для этой загрузки Hydra должна оставаться открытой до завершения. Если Hydra закроется до завершения, вы потеряете прогресс.",
"achievements": "Достижения",
"achievements_count": "Достижения {{unlockedCount}}/{{achievementsCount}}",
+ "show_more": "Показать больше",
+ "show_less": "Показать меньше",
+ "reviews": "Отзывы",
+ "leave_a_review": "Оставить отзыв",
+ "write_review_placeholder": "Поделитесь своими мыслями об этой игре...",
+ "sort_newest": "Сначала новые",
+ "no_reviews_yet": "Пока нет отзывов",
+ "be_first_to_review": "Станьте первым, кто поделится своими мыслями об этой игре!",
+ "sort_oldest": "Сначала старые",
+ "sort_highest_score": "Высший балл",
+ "sort_lowest_score": "Низший балл",
+ "sort_most_voted": "Самые популярные",
+ "rating": "Оценка",
+ "rating_stats": "Оценка",
+ "rating_very_negative": "Очень негативно",
+ "rating_negative": "Негативно",
+ "rating_neutral": "Нейтрально",
+ "rating_positive": "Позитивно",
+ "rating_very_positive": "Очень позитивно",
+ "submit_review": "Отправить",
+ "submitting": "Отправка...",
+ "review_submitted_successfully": "Отзыв успешно отправлен!",
+ "review_submission_failed": "Не удалось отправить отзыв. Пожалуйста, попробуйте снова.",
+ "review_cannot_be_empty": "Текстовое поле отзыва не может быть пустым.",
+ "review_deleted_successfully": "Отзыв успешно удален.",
+ "review_deletion_failed": "Не удалось удалить отзыв. Пожалуйста, попробуйте снова.",
+ "loading_reviews": "Загрузка отзывов...",
+ "loading_more_reviews": "Загрузка дополнительных отзывов...",
+ "load_more_reviews": "Загрузить больше отзывов",
+ "you_seemed_to_enjoy_this_game": "Похоже, вам понравилась эта игра",
+ "would_you_recommend_this_game": "Хотите оставить отзыв об этой игре?",
+ "yes": "Да",
+ "maybe_later": "Возможно позже",
"cloud_save": "Облачное сохранение",
"cloud_save_description": "Сохраняйте ваш прогресс в облаке и продолжайте играть на любом устройстве",
"backups": "Резервные копии",
@@ -205,6 +265,7 @@
"uploading_backup": "Загрузка резервной копии…",
"no_backups": "Вы еще не создали резервных копий для этой игры",
"backup_uploaded": "Резервная копия загружена",
+ "backup_failed": "Ошибка резервного копирования",
"backup_deleted": "Резервная копия удалена",
"backup_restored": "Резервная копия восстановлена",
"see_all_achievements": "Просмотреть все достижения",
@@ -244,26 +305,29 @@
"update_playtime_title": "Обновить время игры",
"update_playtime_description": "Вручную обновите время игры для {{game}}",
"update_playtime": "Обновить время игры",
+ "update_playtime_success": "Время игры успешно обновлено",
+ "update_playtime_error": "Не удалось обновить время игры",
"update_game_playtime": "Обновить время игры",
+ "manual_playtime_warning": "Ваши часы будут отмечены как обновленные вручную. Это действие нельзя отменить.",
+ "manual_playtime_tooltip": "Это время игры было обновлено вручную",
"download_error_not_cached_on_torbox": "Эта загрузка недоступна на TorBox, и получить статус загрузки с TorBox пока невозможно.",
- "game_added_to_favorites": "Игра добавлена в избранное",
+ "download_error_not_cached_on_hydra": "Эта загрузка недоступна на Nimbus.",
"game_removed_from_favorites": "Игра удалена из избранного",
+ "game_added_to_favorites": "Игра добавлена в избранное",
+ "game_removed_from_pinned": "Игра удалена из закрепленных",
+ "game_added_to_pinned": "Игра добавлена в закрепленные",
"automatically_extract_downloaded_files": "Автоматическая распаковка загруженных файлов",
- "create_steam_shortcut": "Создать ярлык Steam",
- "you_might_need_to_restart_steam": "Возможно, вам потребуется перезапустить Steam, чтобы увидеть изменения",
"create_start_menu_shortcut": "Создать ярлык в меню «Пуск»",
"invalid_wine_prefix_path": "Недопустимый путь префикса Wine",
"invalid_wine_prefix_path_description": "Путь к префиксу Wine недействителен. Пожалуйста, проверьте путь и попробуйте снова.",
"missing_wine_prefix": "Префикс Wine необходим для создания резервной копии в Linux",
- "download_error_not_cached_on_hydra": "Эта загрузка недоступна на Nimbus.",
- "update_playtime_success": "Время игры успешно обновлено",
- "update_playtime_error": "Не удалось обновить время игры",
- "manual_playtime_warning": "Ваши часы будут отмечены как обновленные вручную. Это действие нельзя отменить.",
"artifact_renamed": "Резервная копия успешно переименована",
"rename_artifact": "Переименовать резервную копию",
"rename_artifact_description": "Переименуйте резервную копию, присвоив ей более описательное имя.",
"artifact_name_label": "Название резервной копии",
"artifact_name_placeholder": "Введите название для резервной копии",
+ "save_changes": "Сохранить изменения",
+ "required_field": "Это поле обязательно к заполнению",
"max_length_field": "Это поле должно содержать менее {{length}} символов",
"freeze_backup": "Закрепить, чтобы она не была перезаписана автоматическими резервными копиями",
"unfreeze_backup": "Открепить",
@@ -271,7 +335,33 @@
"backup_unfrozen": "Резервная копия откреплена",
"backup_freeze_failed": "Не удалось закрепить резервную копию",
"backup_freeze_failed_description": "Вы должны оставить как минимум один свободный слот для автоматических резервных копий",
- "manual_playtime_tooltip": "Это время игры было обновлено вручную"
+ "edit_game_modal_button": "Изменить детали игры",
+ "game_details": "Детали игры",
+ "currency_symbol": "₽",
+ "currency_country": "ru",
+ "prices": "Цены",
+ "no_prices_found": "Цены не найдены",
+ "view_all_prices": "Нажмите, чтобы посмотреть все цены",
+ "retail_price": "Розничная цена",
+ "keyshop_price": "Цена в магазине ключей",
+ "historical_retail": "Исторические розничные цены",
+ "historical_keyshop": "Исторические цены в магазинах ключей",
+ "language": "Язык",
+ "caption": "Субтитры",
+ "audio": "Аудио",
+ "filter_by_source": "Фильтр по источнику",
+ "no_repacks_found": "Источники для этой игры не найдены",
+ "delete_review": "Удалить отзыв",
+ "remove_review": "Удалить отзыв",
+ "delete_review_modal_title": "Вы уверены, что хотите удалить свой отзыв?",
+ "delete_review_modal_description": "Это действие нельзя отменить.",
+ "delete_review_modal_delete_button": "Удалить",
+ "delete_review_modal_cancel_button": "Отмена",
+ "vote_failed": "Не удалось зарегистрировать ваш голос. Пожалуйста, попробуйте снова.",
+ "show_original": "Показать оригинал",
+ "show_translation": "Показать перевод",
+ "show_original_translated_from": "Показать оригинал (переведено с {{language}})",
+ "hide_original": "Скрыть оригинал"
},
"activation": {
"title": "Активировать Hydra",
@@ -317,13 +407,10 @@
"change": "Изменить",
"notifications": "Уведомления",
"enable_download_notifications": "По завершении загрузки",
- "enable_achievement_notifications": "Когда достижение разблокировано",
"enable_repack_list_notifications": "При добавлении нового репака",
"real_debrid_api_token_label": "Real-Debrid API-токен",
"quit_app_instead_hiding": "Закрывать приложение вместо сворачивания в трей",
"launch_with_system": "Запускать Hydra вместе с системой",
- "launch_minimized": "Запустить Hydra в свернутом виде",
- "disable_nsfw_alert": "Отключить предупреждение о непристойном контенте",
"general": "Основные",
"behavior": "Поведение",
"download_sources": "Источники загрузки",
@@ -341,6 +428,9 @@
"validate_download_source": "Проверить",
"remove_download_source": "Удалить",
"add_download_source": "Добавить источник",
+ "adding": "Добавление…",
+ "failed_add_download_source": "Не удалось добавить источник. Пожалуйста, попробуйте снова.",
+ "download_source_already_exists": "Этот URL источника уже существует.",
"download_count_zero": "В списке нет загрузок",
"download_count_one": "{{countFormatted}} загрузка в списке",
"download_count_other": "{{countFormatted}} загрузок в списке",
@@ -348,13 +438,20 @@
"add_download_source_description": "Вставьте ссылку на .json-файл",
"download_source_up_to_date": "Обновлён",
"download_source_errored": "Ошибка",
+ "download_source_pending_matching": "Скоро обновится",
+ "download_source_matched": "Обновлен",
+ "download_source_matching": "Обновление",
+ "download_source_failed": "Ошибка",
+ "download_source_no_information": "Информация отсутствует",
"sync_download_sources": "Обновить источники",
"removed_download_source": "Источник удален",
+ "removed_download_sources": "Источники удалены",
+ "removed_all_download_sources": "Все источники удалены",
+ "download_sources_synced_successfully": "Все источники синхронизированы",
"cancel_button_confirmation_delete_all_sources": "Нет",
"confirm_button_confirmation_delete_all_sources": "Да, удалить все",
- "description_confirmation_delete_all_sources": "Вы удалите все источники",
"title_confirmation_delete_all_sources": "Удалить все источники",
- "removed_download_sources": "Источники удалены",
+ "description_confirmation_delete_all_sources": "Вы удалите все источники",
"button_delete_all_sources": "Удалить все источники",
"added_download_source": "Источник добавлен",
"download_sources_synced": "Все источники обновлены",
@@ -363,20 +460,25 @@
"found_download_option_one": "Найден {{countFormatted}} вариант загрузки",
"found_download_option_other": "Найдено {{countFormatted}} вариантов загрузки",
"import": "Импортировать",
- "blocked_users": "Заблокированные пользователи",
- "friends_only": "Только для друзей",
- "must_be_valid_url": "У источника должен быть правильный URL",
- "privacy": "Конфиденциальность",
+ "importing": "Импортируется...",
+ "public": "Публичный",
"private": "Частный",
+ "friends_only": "Только для друзей",
+ "privacy": "Конфиденциальность",
"profile_visibility": "Видимость профиля",
"profile_visibility_description": "Выберите, кто может видеть ваш профиль и библиотеку",
- "public": "Публичный",
"required_field": "Это поле обязательно к заполнению",
"source_already_exists": "Этот источник уже добавлен",
+ "must_be_valid_url": "У источника должен быть правильный URL",
+ "blocked_users": "Заблокированные пользователи",
"user_unblocked": "Пользователь разблокирован",
+ "enable_achievement_notifications": "Когда достижение разблокировано",
+ "launch_minimized": "Запускать Hydra в свернутом виде",
+ "disable_nsfw_alert": "Отключить предупреждение о непристойном контенте",
"seed_after_download_complete": "Раздавать после завершения загрузки",
"show_hidden_achievement_description": "Показывать описание скрытых достижений перед их получением",
"account": "Аккаунт",
+ "hydra_cloud": "Hydra Cloud",
"no_users_blocked": "У вас нет заблокированных пользователей",
"subscription_active_until": "Ваша подписка на Hydra Cloud активна до {{date}}",
"manage_subscription": "Управлять подпиской",
@@ -412,12 +514,14 @@
"delete_theme_description": "Это приведет к удалению темы {{theme}}",
"cancel": "Отменить",
"appearance": "Внешний вид",
+ "debrid": "Debrid",
+ "debrid_description": "Сервисы Debrid - это премиум-загрузчики без ограничений, которые позволяют быстро скачивать файлы с различных файлообменников, ограничиваясь только скоростью вашего интернета.",
"enable_torbox": "Включить TorBox",
"torbox_description": "TorBox - это ваш премиум-сервис, конкурирующий даже с лучшими серверами на рынке.",
"torbox_account_linked": "Аккаунт TorBox привязан",
- "real_debrid_account_linked": "Аккаунт Real-Debrid привязан",
"create_real_debrid_account": "Нажмите здесь, если у вас еще нет аккаунта Real-Debrid",
"create_torbox_account": "Нажмите здесь, если у вас еще нет учетной записи TorBox",
+ "real_debrid_account_linked": "Аккаунт Real-Debrid привязан",
"name_min_length": "Название темы должно содержать не менее 3 символов",
"import_theme": "Импортировать тему",
"import_theme_description": "Вы импортируете {{theme}} из магазина тем",
@@ -431,6 +535,7 @@
"installing_common_redist": "Установка…",
"show_download_speed_in_megabytes": "Показать скорость загрузки в мегабайтах в секунду",
"extract_files_by_default": "Извлекать файлы по умолчанию после загрузки",
+ "enable_steam_achievements": "Включить поиск достижений Steam",
"achievement_custom_notification_position": "Позиция уведомлений достижений",
"top-left": "Верхний левый угол",
"top-center": "Верхний центр",
@@ -448,7 +553,8 @@
"test_notification": "Тестовое уведомление",
"notification_preview": "Предварительный просмотр уведомления о достижении",
"enable_friend_start_game_notifications": "Когда друг начинает играть в игру",
- "enable_steam_achievements": "Включить поиск достижений Steam"
+ "autoplay_trailers_on_game_page": "Автоматически начинать воспроизведение трейлеров на странице игры",
+ "hide_to_tray_on_game_start": "Скрывать Hydra в трей при запуске игры"
},
"notifications": {
"download_complete": "Загрузка завершена",
@@ -460,13 +566,13 @@
"restart_to_install_update": "Перезапустите Hydra для установки обновления",
"notification_achievement_unlocked_title": "Достижение разблокировано для {{game}}",
"notification_achievement_unlocked_body": "были разблокированы {{achievement}} и другие {{count}}",
+ "new_friend_request_description": "{{displayName}} отправил вам запрос в друзья",
"new_friend_request_title": "Новый запрос на добавление в друзья",
"extraction_complete": "Распаковка завершена",
"game_extracted": "{{title}} успешно распакован",
"friend_started_playing_game": "{{displayName}} начал играть в игру",
"test_achievement_notification_title": "Это тестовое уведомление",
- "test_achievement_notification_description": "Довольно круто, да?",
- "new_friend_request_description": "{{displayName}} отправил вам запрос в друзья"
+ "test_achievement_notification_description": "Довольно круто, да?"
},
"system_tray": {
"open": "Открыть Hydra",
@@ -475,7 +581,8 @@
"game_card": {
"available_one": "Доступный",
"available_other": "Доступный",
- "no_downloads": "Нет доступных источников"
+ "no_downloads": "Нет доступных источников",
+ "calculating": "Вычисление"
},
"binary_not_found_modal": {
"title": "Программы не установлены",
@@ -496,6 +603,11 @@
"last_time_played": "Последняя игра {{period}}",
"activity": "Недавняя активность",
"library": "Библиотека",
+ "pinned": "Закрепленные",
+ "sort_by": "Сортировать по:",
+ "achievements_earned": "Заработанные достижения",
+ "played_recently": "Недавно сыгранные",
+ "playtime": "Время игры",
"total_play_time": "Всего сыграно",
"manual_playtime_tooltip": "Время игры было обновлено вручную",
"no_recent_activity_title": "Хммм... Тут ничего нет",
@@ -539,24 +651,24 @@
"no_pending_invites": "У вас нет запросов ожидающих ответа",
"no_blocked_users": "Вы не заблокировали ни одного пользователя",
"friend_code_copied": "Код друга скопирован",
- "displayname_max_length": "Отображаемое имя должно содержать не более 50 символов.",
- "displayname_min_length": "Отображаемое имя должно содержать не менее 3 символов.",
- "image_process_failure": "Сбой при обработке изображения",
- "locked_profile": "Этот профиль является частным",
+ "undo_friendship_modal_text": "Это отменит вашу дружбу с {{displayName}}.",
"privacy_hint": "Чтобы указать, кто может это видеть, перейдите в <0>Настройки0>.",
- "profile_reported": "Профиль сообщил",
- "report": "Отчет",
- "report_description": "Дополнительная информация",
- "report_description_placeholder": "Дополнительная информация",
+ "locked_profile": "Этот профиль является частным",
+ "image_process_failure": "Сбой при обработке изображения",
+ "required_field": "Это поле обязательно к заполнению",
+ "displayname_min_length": "Отображаемое имя должно содержать не менее 3 символов.",
+ "displayname_max_length": "Отображаемое имя должно содержать не более 50 символов.",
"report_profile": "Пожаловаться на этот профиль",
"report_reason": "Почему вы жалуетесь на этот профиль?",
+ "report_description": "Дополнительная информация",
+ "report_description_placeholder": "Дополнительная информация",
+ "report": "Пожаловаться",
"report_reason_hate": "Разжигание ненависти",
- "report_reason_other": "Другой",
"report_reason_sexual_content": "Сексуальный контент",
- "report_reason_spam": "Спам",
"report_reason_violence": "Насилие",
- "required_field": "Это поле обязательно к заполнению",
- "undo_friendship_modal_text": "Это отменит вашу дружбу с {{displayName}}.",
+ "report_reason_spam": "Спам",
+ "report_reason_other": "Другое",
+ "profile_reported": "Жалоба на профиль отправлена",
"your_friend_code": "Код вашего друга:",
"upload_banner": "Загрузить баннер",
"uploading_banner": "Загрузка баннера...",
@@ -572,7 +684,12 @@
"show_achievements_on_profile": "Покажите свои достижения в профиле",
"show_points_on_profile": "Показывать заработанные очки в своем профиле",
"error_adding_friend": "Не удалось отправить запрос в друзья. Пожалуйста, проверьте код друга",
- "friend_code_length_error": "Код друга должен содержать 8 символов"
+ "friend_code_length_error": "Код друга должен содержать 8 символов",
+ "game_removed_from_pinned": "Игра удалена из закрепленных",
+ "game_added_to_pinned": "Игра добавлена в закрепленные",
+ "karma": "Карма",
+ "karma_count": "карма",
+ "karma_description": "Заработана положительными оценками отзывов"
},
"achievement": {
"achievement_unlocked": "Достижение разблокировано",
diff --git a/src/locales/uk/translation.json b/src/locales/uk/translation.json
index 26aa8aae..323d8ad5 100644
--- a/src/locales/uk/translation.json
+++ b/src/locales/uk/translation.json
@@ -27,7 +27,68 @@
"favorites": "Улюблені",
"friends": "Друзі",
"need_help": "Потрібна допомога?",
- "playable_button_title": "Показати лише ігри, які можна грати зараз"
+ "playable_button_title": "Показати лише ігри, які можна грати зараз",
+ "add_custom_game_tooltip": "Додати власну гру",
+ "show_playable_only_tooltip": "Показати лише доступні для гри",
+ "custom_game_modal": "Додати власну гру",
+ "custom_game_modal_description": "Додайте власну гру до бібліотеки, вибравши виконуваний файл",
+ "custom_game_modal_executable_path": "Шлях до виконуваного файлу",
+ "custom_game_modal_select_executable": "Виберіть виконуваний файл",
+ "custom_game_modal_title": "Назва гри",
+ "custom_game_modal_enter_title": "Введіть назву гри",
+ "custom_game_modal_browse": "Огляд",
+ "custom_game_modal_cancel": "Скасувати",
+ "custom_game_modal_add": "Додати гру",
+ "custom_game_modal_adding": "Додавання гри...",
+ "custom_game_modal_success": "Власну гру успішно додано",
+ "custom_game_modal_failed": "Не вдалося додати власну гру",
+ "custom_game_modal_executable": "Виконуваний файл",
+ "edit_game_modal": "Налаштувати ресурси",
+ "edit_game_modal_description": "Налаштуйте ресурси та деталі гри",
+ "edit_game_modal_title": "Назва",
+ "edit_game_modal_enter_title": "Введіть назву",
+ "edit_game_modal_image": "Зображення",
+ "edit_game_modal_select_image": "Виберіть зображення",
+ "edit_game_modal_browse": "Огляд",
+ "edit_game_modal_image_preview": "Попередній перегляд зображення",
+ "edit_game_modal_icon": "Іконка",
+ "edit_game_modal_select_icon": "Виберіть іконку",
+ "edit_game_modal_icon_preview": "Попередній перегляд іконки",
+ "edit_game_modal_logo": "Логотип",
+ "edit_game_modal_select_logo": "Виберіть логотип",
+ "edit_game_modal_logo_preview": "Попередній перегляд логотипу",
+ "edit_game_modal_hero": "Зображення обкладинки гри",
+ "edit_game_modal_select_hero": "Виберіть обкладинку гри",
+ "edit_game_modal_hero_preview": "Попередній перегляд обкладинки гри",
+ "edit_game_modal_cancel": "Скасувати",
+ "edit_game_modal_update": "Оновити",
+ "edit_game_modal_updating": "Оновлення...",
+ "edit_game_modal_fill_required": "Будь ласка, заповніть всі обов'язкові поля",
+ "edit_game_modal_success": "Ресурси успішно оновлено",
+ "edit_game_modal_failed": "Не вдалося оновити ресурси",
+ "edit_game_modal_image_filter": "Зображення",
+ "edit_game_modal_icon_resolution": "Рекомендована роздільна здатність: 256x256px",
+ "edit_game_modal_logo_resolution": "Рекомендована роздільна здатність: 640x360px",
+ "edit_game_modal_hero_resolution": "Рекомендована роздільна здатність: 1920x620px",
+ "edit_game_modal_assets": "Ресурси",
+ "edit_game_modal_drop_icon_image_here": "Перетягніть зображення іконки сюди",
+ "edit_game_modal_drop_logo_image_here": "Перетягніть зображення логотипу сюди",
+ "edit_game_modal_drop_hero_image_here": "Перетягніть зображення обкладинки сюди",
+ "edit_game_modal_drop_to_replace_icon": "Перетягніть для заміни іконки",
+ "edit_game_modal_drop_to_replace_logo": "Перетягніть для заміни логотипу",
+ "edit_game_modal_drop_to_replace_hero": "Перетягніть для заміни обкладинки",
+ "install_decky_plugin": "Встановити плагін Decky",
+ "update_decky_plugin": "Оновити плагін Decky",
+ "decky_plugin_installed_version": "Плагін Decky (v{{version}})",
+ "install_decky_plugin_title": "Встановити плагін Hydra Decky",
+ "install_decky_plugin_message": "Це завантажить і встановить плагін Hydra для Decky Loader. Можуть знадобитися підвищені дозволи. Продовжити?",
+ "update_decky_plugin_title": "Оновити плагін Hydra Decky",
+ "update_decky_plugin_message": "Доступна нова версія плагіна Hydra Decky. Бажаєте оновити його зараз?",
+ "decky_plugin_installed": "Плагін Decky v{{version}} успішно встановлено",
+ "decky_plugin_installation_failed": "Не вдалося встановити плагін Decky: {{error}}",
+ "decky_plugin_installation_error": "Помилка встановлення плагіна Decky: {{error}}",
+ "confirm": "Підтвердити",
+ "cancel": "Скасувати"
},
"header": {
"search": "Пошук",
@@ -86,6 +147,7 @@
"amount_minutes": "{{amount}} хвилин",
"accuracy": "{{accuracy}}% точність",
"add_to_library": "Додати до бібліотеки",
+ "already_in_library": "Вже в бібліотеці",
"remove_from_library": "Видалити з бібліотеки",
"no_downloads": "Немає доступних завантажень",
"play_time": "Час гри: {{amount}}",
@@ -102,6 +164,7 @@
"download_now": "Завантажити зараз",
"calculating_eta": "Обчислення залишкового часу…",
"create_shortcut": "Створити ярлик на робочому столі",
+ "create_shortcut_simple": "Створити ярлик",
"create_shortcut_success": "Ярлик успішно створено",
"create_shortcut_error": "Виникла помилка під час створення ярлику",
"nsfw_content_title": "Ця гра містить неприйнятний контент",
@@ -135,6 +198,7 @@
"open_folder": "Відкрити папку",
"open_screenshot": "Відкрити скріншот",
"options": "Налаштування",
+ "properties": "Властивості",
"paused": "Призупинено",
"previous_screenshot": "Попередній скріншот",
"remove_files": "Видалити файли",
@@ -171,7 +235,7 @@
"loading_save_preview": "Виконується пошук збережень гри...",
"wine_prefix": "Префікс Wine",
"wine_prefix_description": "Префікс Wine використовувався для запуску цієї гри",
- "launch_options": "Параметри загрузки",
+ "launch_options": "Параметри завантаження",
"launch_options_description": "Досвідчені користувачі можуть ввести власні модифікації до параметрів запуску (експериментальна функція).",
"launch_options_placeholder": "Параметри не вказано",
"no_download_option_info": "Немає інформації",
@@ -198,11 +262,105 @@
"download_error_not_cached_on_hydra": "Це завантаження недоступне через Nimbus.",
"game_removed_from_favorites": "Гра видалена з улюбленних",
"game_added_to_favorites": "Гра була добавлена у улюблені",
- "automatically_extract_downloaded_files": "Автоматично розархівувати завантаженні файли"
+ "automatically_extract_downloaded_files": "Автоматично розархівувати завантаженні файли",
+ "create_steam_shortcut": "Створити ярлик Steam",
+ "you_might_need_to_restart_steam": "Можливо, вам знадобиться перезапустити Steam, щоб побачити зміни",
+ "add_to_favorites": "Додати до улюбленого",
+ "remove_from_favorites": "Видалити з улюбленого",
+ "failed_update_favorites": "Не вдалося оновити улюблене",
+ "game_removed_from_library": "Гру видалено з бібліотеки",
+ "failed_remove_from_library": "Не вдалося видалити з бібліотеки",
+ "files_removed_success": "Файли успішно видалено",
+ "failed_remove_files": "Не вдалося видалити файли",
+ "show_more": "Показати більше",
+ "show_less": "Показати менше",
+ "reviews": "Відгуки",
+ "leave_a_review": "Залишити відгук",
+ "write_review_placeholder": "Поділіться своїми думками про цю гру...",
+ "sort_newest": "Спочатку нові",
+ "no_reviews_yet": "Поки що немає відгуків",
+ "be_first_to_review": "Станьте першим, хто поділиться своїми думками про цю гру!",
+ "sort_oldest": "Спочатку старі",
+ "sort_highest_score": "Найвища оцінка",
+ "sort_lowest_score": "Найнижча оцінка",
+ "sort_most_voted": "Найпопулярніші",
+ "rating": "Оцінка",
+ "rating_stats": "Оцінка",
+ "rating_very_negative": "Дуже негативно",
+ "rating_negative": "Негативно",
+ "rating_neutral": "Нейтрально",
+ "rating_positive": "Позитивно",
+ "rating_very_positive": "Дуже позитивно",
+ "submit_review": "Відправити",
+ "submitting": "Відправка...",
+ "review_submitted_successfully": "Відгук успішно відправлено!",
+ "review_submission_failed": "Не вдалося відправити відгук. Будь ласка, спробуйте ще раз.",
+ "review_cannot_be_empty": "Текстове поле відгуку не може бути порожнім.",
+ "review_deleted_successfully": "Відгук успішно видалено.",
+ "review_deletion_failed": "Не вдалося видалити відгук. Будь ласка, спробуйте ще раз.",
+ "loading_reviews": "Завантаження відгуків...",
+ "loading_more_reviews": "Завантаження додаткових відгуків...",
+ "load_more_reviews": "Завантажити більше відгуків",
+ "you_seemed_to_enjoy_this_game": "Схоже, вам сподобалася ця гра",
+ "would_you_recommend_this_game": "Бажаєте залишити відгук про цю гру?",
+ "yes": "Так",
+ "maybe_later": "Можливо пізніше",
+ "rating_count": "Оцінка",
+ "delete_review": "Видалити відгук",
+ "remove_review": "Видалити відгук",
+ "delete_review_modal_title": "Ви впевнені, що хочете видалити свій відгук?",
+ "delete_review_modal_description": "Цю дію не можна скасувати.",
+ "delete_review_modal_delete_button": "Видалити",
+ "delete_review_modal_cancel_button": "Скасувати",
+ "backup_failed": "Помилка резервного копіювання",
+ "update_playtime_title": "Оновити час гри",
+ "update_playtime_description": "Вручну оновіть час гри для {{game}}",
+ "update_playtime": "Оновити час гри",
+ "update_playtime_success": "Час гри успішно оновлено",
+ "update_playtime_error": "Не вдалося оновити час гри",
+ "update_game_playtime": "Оновити час гри",
+ "manual_playtime_warning": "Ваші години будуть позначені як оновлені вручну. Цю дію не можна скасувати.",
+ "manual_playtime_tooltip": "Цей час гри було оновлено вручну",
+ "game_removed_from_pinned": "Гру видалено із закріплених",
+ "game_added_to_pinned": "Гру додано до закріплених",
+ "create_start_menu_shortcut": "Створити ярлик у меню «Пуск»",
+ "invalid_wine_prefix_path": "Недійсний шлях префікса Wine",
+ "invalid_wine_prefix_path_description": "Шлях до префікса Wine недійсний. Будь ласка, перевірте шлях і спробуйте знову.",
+ "missing_wine_prefix": "Префікс Wine необхідний для створення резервної копії в Linux",
+ "artifact_renamed": "Резервну копію успішно перейменовано",
+ "rename_artifact": "Перейменувати резервну копію",
+ "rename_artifact_description": "Перейменуйте резервну копію, надавши їй більш описову назву.",
+ "artifact_name_label": "Назва резервної копії",
+ "artifact_name_placeholder": "Введіть назву для резервної копії",
+ "save_changes": "Зберегти зміни",
+ "required_field": "Це поле обов'язкове",
+ "max_length_field": "Це поле має містити менше ніж {{length}} символів",
+ "freeze_backup": "Закріпити, щоб вона не була перезаписана автоматичними резервними копіями",
+ "unfreeze_backup": "Відкріпити",
+ "backup_frozen": "Резервну копію закріплено",
+ "backup_unfrozen": "Резервну копію відкріплено",
+ "backup_freeze_failed": "Не вдалося закріпити резервну копію",
+ "backup_freeze_failed_description": "Ви повинні залишити принаймні один вільний слот для автоматичних резервних копій",
+ "edit_game_modal_button": "Змінити деталі гри",
+ "game_details": "Деталі гри",
+ "currency_symbol": "₴",
+ "currency_country": "ua",
+ "prices": "Ціни",
+ "no_prices_found": "Ціни не знайдено",
+ "view_all_prices": "Натисніть, щоб переглянути всі ціни",
+ "retail_price": "Роздрібна ціна",
+ "keyshop_price": "Ціна в магазині ключів",
+ "historical_retail": "Історичні роздрібні ціни",
+ "historical_keyshop": "Історичні ціни в магазинах ключів",
+ "language": "Мова",
+ "caption": "Субтитри",
+ "audio": "Аудіо",
+ "filter_by_source": "Фільтр за джерелом",
+ "no_repacks_found": "Джерела для цієї гри не знайдено"
},
"activation": {
"title": "Активувати Hydra",
- "installation_id": "ID установки:",
+ "installation_id": "ID встановлення:",
"enter_activation_code": "Введіть ваш активаційний код",
"message": "Якщо ви не знаєте, де його запросити, то не повинні мати його.",
"activate": "Активувати",
@@ -226,7 +384,7 @@
"install": "Встановити",
"download_in_progress": "В процесі",
"downloads_completed": "Завершено",
- "no_downloads_description": "Ви ще нічого не завантажили через Hydra, але ніколи не пізно почати!",
+ "no_downloads_description": "Ви ще нічого не завантажили через Hydra, але ніколи не пізно почати",
"no_downloads_title": "Тут так пусто...",
"queued": "В черзі",
"queued_downloads": "Завантаження в черзі",
@@ -339,6 +497,8 @@
"delete_theme_description": "Це видалить тему {{theme}}",
"cancel": "Відмінити",
"appearance": "Вигляд",
+ "debrid": "Debrid",
+ "debrid_description": "Сервіси Debrid - це преміум-завантажувачі без обмежень, які дозволяють швидко завантажувати файли з різних файлообмінників, обмежуючись лише швидкістю вашого інтернету.",
"enable_torbox": "Включити TorBox",
"torbox_description": "TorBox — це ваш преміум-сервіс для сідінгу, що конкурує навіть з найкращими серверами на ринку.",
"torbox_account_linked": "TorBox акаунт прив'язано",
@@ -357,7 +517,25 @@
"install_common_redist": "Встановити",
"installing_common_redist": "Встановлюється…",
"show_download_speed_in_megabytes": "Показувати швидкість завантаження в мегабайтах на секунду",
- "extract_files_by_default": "Розпаковувати файли після завантаження"
+ "extract_files_by_default": "Розпаковувати файли після завантаження",
+ "enable_steam_achievements": "Увімкнути пошук досягнень Steam",
+ "achievement_custom_notification_position": "Позиція сповіщень про досягнення",
+ "top-left": "Верхній лівий кут",
+ "top-center": "Верхній центр",
+ "top-right": "Верхній правий кут",
+ "bottom-left": "Нижній лівий кут",
+ "bottom-center": "Нижній центр",
+ "bottom-right": "Нижній правий кут",
+ "enable_achievement_custom_notifications": "Увімкнути сповіщення про досягнення",
+ "alignment": "Вирівнювання",
+ "variation": "Варіація",
+ "default": "За замовчуванням",
+ "rare": "Рідкісне",
+ "platinum": "Платиновий",
+ "hidden": "Прихований",
+ "test_notification": "Тестове сповіщення",
+ "notification_preview": "Попередній перегляд сповіщення про досягнення",
+ "enable_friend_start_game_notifications": "Коли друг починає грати в гру"
},
"notifications": {
"download_complete": "Завантаження завершено",
@@ -372,7 +550,10 @@
"new_friend_request_description": "Ви отримали новий запит на дружбу",
"new_friend_request_title": "Новий запит на дружбу",
"extraction_complete": "Витягування завершено",
- "game_extracted": "{{title}} успішно витягнуто"
+ "game_extracted": "{{title}} успішно витягнуто",
+ "friend_started_playing_game": "{{displayName}} почав грати в гру",
+ "test_achievement_notification_title": "Це тестове сповіщення",
+ "test_achievement_notification_description": "Досить круто, чи не так?"
},
"system_tray": {
"open": "Відкрити Hydra",
@@ -381,7 +562,8 @@
"game_card": {
"no_downloads": "Немає доступних завантажень",
"available_one": "Доступний",
- "available_other": "Доступні"
+ "available_other": "Доступні",
+ "calculating": "Обчислення"
},
"binary_not_found_modal": {
"title": "Програми не встановлені",
@@ -398,11 +580,17 @@
"activity": "Остання активність",
"amount_hours": "{{amount}} годин",
"amount_minutes": "{{amount}} хвилин",
+ "amount_hours_short": "{{amount}}год",
+ "amount_minutes_short": "{{amount}}хв",
"cancel": "Скасувати",
"display_name": "Відображуване ім'я",
"edit_profile": "Редагувати профіль",
"last_time_played": "Остання гра {{period}}",
"library": "Бібліотека",
+ "pinned": "Закріплені",
+ "achievements_earned": "Зароблені досягнення",
+ "played_recently": "Недавно зіграні",
+ "playtime": "Час гри",
"no_recent_activity_description": "Ви давно не грали в ігри. Пора це змінити!",
"no_recent_activity_title": "Хммм... Тут нічого немає",
"playing_for": "Зіграно {{amount}}",
@@ -414,9 +602,10 @@
"sign_out_modal_title": "Ви впевнені?",
"successfully_signed_out": "Успішний вихід з акаунту",
"total_play_time": "Всього зіграно",
+ "manual_playtime_tooltip": "Час гри було оновлено вручну",
"try_again": "Будь ласка, попробуйте ще раз",
- "add_friends": "Добавити друзів",
- "add": "Добавити",
+ "add_friends": "Додати друзів",
+ "add": "Додати",
"friend_code": "Код друга",
"see_profile": "Переглянути профіль",
"sending": "Надсилання",
@@ -425,7 +614,7 @@
"friends_list": "Список друзів",
"user_not_found": "Користувача не найдено",
"block_user": "Заблокувати користувача",
- "add_friend": "Добавити друга",
+ "add_friend": "Додати друга",
"request_sent": "надіслано запит на дружбу",
"request_received": "Отримано запит на дружбу",
"accept_request": "Прийняти запит",
@@ -473,7 +662,14 @@
"achievements_unlocked": "Досягнень розблоковано",
"earned_points": "Отримано балів",
"show_achievements_on_profile": "Покажіть свої досягнення у своєму профілі",
- "show_points_on_profile": "Покажіть ваші отриманні бали у своєму профілі"
+ "show_points_on_profile": "Покажіть ваші отриманні бали у своєму профілі",
+ "error_adding_friend": "Не вдалося відправити запит на дружбу. Будь ласка, перевірте код друга",
+ "friend_code_length_error": "Код друга має містити 8 символів",
+ "game_removed_from_pinned": "Гру видалено із закріплених",
+ "game_added_to_pinned": "Гру додано до закріплених",
+ "karma": "Карма",
+ "karma_count": "карма",
+ "karma_description": "Зароблена позитивними оцінками на відгуках"
},
"achievement": {
"achievement_unlocked": "Досягнення розблоковано",
diff --git a/src/main/constants.ts b/src/main/constants.ts
index b067be80..82b99b2a 100644
--- a/src/main/constants.ts
+++ b/src/main/constants.ts
@@ -42,3 +42,14 @@ export const appVersion = app.getVersion() + (isStaging ? "-staging" : "");
export const ASSETS_PATH = path.join(SystemPath.getPath("userData"), "Assets");
export const MAIN_LOOP_INTERVAL = 2000;
+
+export const DECKY_PLUGINS_LOCATION = path.join(
+ SystemPath.getPath("home"),
+ "homebrew",
+ "plugins"
+);
+
+export const HYDRA_DECKY_PLUGIN_LOCATION = path.join(
+ DECKY_PLUGINS_LOCATION,
+ "Hydra"
+);
diff --git a/src/main/events/catalogue/get-catalogue.ts b/src/main/events/catalogue/get-catalogue.ts
deleted file mode 100644
index c8c24cbe..00000000
--- a/src/main/events/catalogue/get-catalogue.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import { CatalogueCategory } from "@shared";
-import { ShopAssets } from "@types";
-
-const getCatalogue = async (
- _event: Electron.IpcMainInvokeEvent,
- category: CatalogueCategory
-) => {
- const params = new URLSearchParams({
- take: "12",
- skip: "0",
- });
-
- return HydraApi.get(
- `/catalogue/${category}?${params.toString()}`,
- {},
- { needsAuth: false }
- );
-};
-
-registerEvent("getCatalogue", getCatalogue);
diff --git a/src/main/events/catalogue/get-developers.ts b/src/main/events/catalogue/get-developers.ts
deleted file mode 100644
index 76ae566b..00000000
--- a/src/main/events/catalogue/get-developers.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { HydraApi } from "@main/services";
-import { registerEvent } from "../register-event";
-
-const getDevelopers = async (_event: Electron.IpcMainInvokeEvent) => {
- return HydraApi.get(`/catalogue/developers`, null, {
- needsAuth: false,
- });
-};
-
-registerEvent("getDevelopers", getDevelopers);
diff --git a/src/main/events/catalogue/get-game-assets.ts b/src/main/events/catalogue/get-game-assets.ts
new file mode 100644
index 00000000..0e45f886
--- /dev/null
+++ b/src/main/events/catalogue/get-game-assets.ts
@@ -0,0 +1,55 @@
+import type { GameShop, ShopAssets } from "@types";
+import { registerEvent } from "../register-event";
+import { HydraApi } from "@main/services";
+import { gamesShopAssetsSublevel, levelKeys } from "@main/level";
+
+const LOCAL_CACHE_EXPIRATION = 1000 * 60 * 60 * 8; // 8 hours
+
+export const getGameAssets = async (objectId: string, shop: GameShop) => {
+ if (shop === "custom") {
+ return null;
+ }
+
+ const cachedAssets = await gamesShopAssetsSublevel.get(
+ levelKeys.game(shop, objectId)
+ );
+
+ if (
+ cachedAssets &&
+ cachedAssets.updatedAt + LOCAL_CACHE_EXPIRATION > Date.now()
+ ) {
+ return cachedAssets;
+ }
+
+ return HydraApi.get(
+ `/games/${shop}/${objectId}/assets`,
+ null,
+ {
+ needsAuth: false,
+ }
+ ).then(async (assets) => {
+ if (!assets) return null;
+
+ // Preserve existing title if it differs from the incoming title (indicating it was customized)
+ const shouldPreserveTitle =
+ cachedAssets?.title && cachedAssets.title !== assets.title;
+
+ await gamesShopAssetsSublevel.put(levelKeys.game(shop, objectId), {
+ ...assets,
+ title: shouldPreserveTitle ? cachedAssets.title : assets.title,
+ updatedAt: Date.now(),
+ });
+
+ return assets;
+ });
+};
+
+const getGameAssetsEvent = async (
+ _event: Electron.IpcMainInvokeEvent,
+ objectId: string,
+ shop: GameShop
+) => {
+ return getGameAssets(objectId, shop);
+};
+
+registerEvent("getGameAssets", getGameAssetsEvent);
diff --git a/src/main/events/catalogue/get-game-shop-details.ts b/src/main/events/catalogue/get-game-shop-details.ts
index d6d27b9c..1a7fc455 100644
--- a/src/main/events/catalogue/get-game-shop-details.ts
+++ b/src/main/events/catalogue/get-game-shop-details.ts
@@ -26,6 +26,8 @@ const getGameShopDetails = async (
shop: GameShop,
language: string
): Promise => {
+ if (shop === "custom") return null;
+
if (shop === "steam") {
const [cachedData, cachedAssets] = await Promise.all([
gamesShopCacheSublevel.get(
diff --git a/src/main/events/catalogue/get-game-stats.ts b/src/main/events/catalogue/get-game-stats.ts
index b836531d..b7b7125c 100644
--- a/src/main/events/catalogue/get-game-stats.ts
+++ b/src/main/events/catalogue/get-game-stats.ts
@@ -10,6 +10,10 @@ const getGameStats = async (
objectId: string,
shop: GameShop
) => {
+ if (shop === "custom") {
+ return null;
+ }
+
const cachedStats = await gamesStatsCacheSublevel.get(
levelKeys.game(shop, objectId)
);
diff --git a/src/main/events/catalogue/get-how-long-to-beat.ts b/src/main/events/catalogue/get-how-long-to-beat.ts
deleted file mode 100644
index 0d630164..00000000
--- a/src/main/events/catalogue/get-how-long-to-beat.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type { GameShop, HowLongToBeatCategory } from "@types";
-
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const getHowLongToBeat = async (
- _event: Electron.IpcMainInvokeEvent,
- objectId: string,
- shop: GameShop
-): Promise => {
- return HydraApi.get(`/games/${shop}/${objectId}/how-long-to-beat`, null, {
- needsAuth: false,
- });
-};
-
-registerEvent("getHowLongToBeat", getHowLongToBeat);
diff --git a/src/main/events/catalogue/get-publishers.ts b/src/main/events/catalogue/get-publishers.ts
deleted file mode 100644
index 3b8fdc5f..00000000
--- a/src/main/events/catalogue/get-publishers.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { HydraApi } from "@main/services";
-import { registerEvent } from "../register-event";
-
-const getPublishers = async (_event: Electron.IpcMainInvokeEvent) => {
- return HydraApi.get(`/catalogue/publishers`, null, {
- needsAuth: false,
- });
-};
-
-registerEvent("getPublishers", getPublishers);
diff --git a/src/main/events/catalogue/get-trending-games.ts b/src/main/events/catalogue/get-trending-games.ts
deleted file mode 100644
index 4c587f37..00000000
--- a/src/main/events/catalogue/get-trending-games.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { db, levelKeys } from "@main/level";
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import type { TrendingGame } from "@types";
-
-const getTrendingGames = async (_event: Electron.IpcMainInvokeEvent) => {
- const language = await db
- .get(levelKeys.language, {
- valueEncoding: "utf8",
- })
- .then((language) => language || "en");
-
- const trendingGames = await HydraApi.get(
- "/catalogue/featured",
- { language },
- { needsAuth: false }
- ).catch(() => []);
-
- return trendingGames.slice(0, 1);
-};
-
-registerEvent("getTrendingGames", getTrendingGames);
diff --git a/src/main/events/catalogue/save-game-shop-assets.ts b/src/main/events/catalogue/save-game-shop-assets.ts
deleted file mode 100644
index bf5f8b81..00000000
--- a/src/main/events/catalogue/save-game-shop-assets.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import type { GameShop, ShopAssets } from "@types";
-import { gamesShopAssetsSublevel, levelKeys } from "@main/level";
-import { registerEvent } from "../register-event";
-
-const saveGameShopAssets = async (
- _event: Electron.IpcMainInvokeEvent,
- objectId: string,
- shop: GameShop,
- assets: ShopAssets
-): Promise => {
- const key = levelKeys.game(shop, objectId);
- const existingAssets = await gamesShopAssetsSublevel.get(key);
-
- // Preserve existing title if it differs from the incoming title (indicating it was customized)
- const shouldPreserveTitle =
- existingAssets?.title && existingAssets.title !== assets.title;
-
- return gamesShopAssetsSublevel.put(key, {
- ...existingAssets,
- ...assets,
- title: shouldPreserveTitle ? existingAssets.title : assets.title,
- });
-};
-
-registerEvent("saveGameShopAssets", saveGameShopAssets);
diff --git a/src/main/events/catalogue/search-games.ts b/src/main/events/catalogue/search-games.ts
deleted file mode 100644
index 8b22101d..00000000
--- a/src/main/events/catalogue/search-games.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { CatalogueSearchPayload } from "@types";
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const searchGames = async (
- _event: Electron.IpcMainInvokeEvent,
- payload: CatalogueSearchPayload,
- take: number,
- skip: number
-) => {
- return HydraApi.post(
- "/catalogue/search",
- { ...payload, take, skip },
- { needsAuth: false }
- );
-};
-
-registerEvent("searchGames", searchGames);
diff --git a/src/main/events/cloud-save/delete-game-artifact.ts b/src/main/events/cloud-save/delete-game-artifact.ts
deleted file mode 100644
index e293bc56..00000000
--- a/src/main/events/cloud-save/delete-game-artifact.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { HydraApi } from "@main/services";
-import { registerEvent } from "../register-event";
-
-const deleteGameArtifact = async (
- _event: Electron.IpcMainInvokeEvent,
- gameArtifactId: string
-) =>
- HydraApi.delete<{ ok: boolean }>(
- `/profile/games/artifacts/${gameArtifactId}`
- );
-
-registerEvent("deleteGameArtifact", deleteGameArtifact);
diff --git a/src/main/events/cloud-save/get-game-artifacts.ts b/src/main/events/cloud-save/get-game-artifacts.ts
deleted file mode 100644
index 3fa8552c..00000000
--- a/src/main/events/cloud-save/get-game-artifacts.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { HydraApi } from "@main/services";
-import { registerEvent } from "../register-event";
-import type { GameArtifact, GameShop } from "@types";
-import { SubscriptionRequiredError, UserNotLoggedInError } from "@shared";
-
-const getGameArtifacts = async (
- _event: Electron.IpcMainInvokeEvent,
- objectId: string,
- shop: GameShop
-) => {
- const params = new URLSearchParams({
- objectId,
- shop,
- });
-
- return HydraApi.get(
- `/profile/games/artifacts?${params.toString()}`,
- {},
- { needsSubscription: true }
- ).catch((err) => {
- if (err instanceof SubscriptionRequiredError) {
- return [];
- }
-
- if (err instanceof UserNotLoggedInError) {
- return [];
- }
-
- throw err;
- });
-};
-
-registerEvent("getGameArtifacts", getGameArtifacts);
diff --git a/src/main/events/cloud-save/rename-game-artifact.ts b/src/main/events/cloud-save/rename-game-artifact.ts
deleted file mode 100644
index f8257c4b..00000000
--- a/src/main/events/cloud-save/rename-game-artifact.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const renameGameArtifact = async (
- _event: Electron.IpcMainInvokeEvent,
- gameArtifactId: string,
- label: string
-) => {
- await HydraApi.put(`/profile/games/artifacts/${gameArtifactId}`, {
- label,
- });
-};
-
-registerEvent("renameGameArtifact", renameGameArtifact);
diff --git a/src/main/events/cloud-save/toggle-artifact-freeze.ts b/src/main/events/cloud-save/toggle-artifact-freeze.ts
deleted file mode 100644
index d532d459..00000000
--- a/src/main/events/cloud-save/toggle-artifact-freeze.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const toggleArtifactFreeze = async (
- _event: Electron.IpcMainInvokeEvent,
- gameArtifactId: string,
- freeze: boolean
-) => {
- if (freeze) {
- await HydraApi.put(`/profile/games/artifacts/${gameArtifactId}/freeze`);
- } else {
- await HydraApi.put(`/profile/games/artifacts/${gameArtifactId}/unfreeze`);
- }
-};
-
-registerEvent("toggleArtifactFreeze", toggleArtifactFreeze);
diff --git a/src/main/events/download-sources/add-download-source.ts b/src/main/events/download-sources/add-download-source.ts
new file mode 100644
index 00000000..bea009cb
--- /dev/null
+++ b/src/main/events/download-sources/add-download-source.ts
@@ -0,0 +1,50 @@
+import { registerEvent } from "../register-event";
+import { HydraApi } from "@main/services/hydra-api";
+import { downloadSourcesSublevel } from "@main/level";
+import type { DownloadSource } from "@types";
+import { logger } from "@main/services";
+
+const addDownloadSource = async (
+ _event: Electron.IpcMainInvokeEvent,
+ url: string
+) => {
+ try {
+ const existingSources = await downloadSourcesSublevel.values().all();
+ const urlExists = existingSources.some((source) => source.url === url);
+
+ if (urlExists) {
+ throw new Error("Download source with this URL already exists");
+ }
+
+ const downloadSource = await HydraApi.post(
+ "/download-sources",
+ {
+ url,
+ },
+ { needsAuth: false }
+ );
+
+ if (HydraApi.isLoggedIn() && HydraApi.hasActiveSubscription()) {
+ try {
+ await HydraApi.post("/profile/download-sources", {
+ urls: [url],
+ });
+ } catch (error) {
+ logger.error("Failed to add download source to profile:", error);
+ }
+ }
+
+ await downloadSourcesSublevel.put(downloadSource.id, {
+ ...downloadSource,
+ isRemote: true,
+ createdAt: new Date().toISOString(),
+ });
+
+ return downloadSource;
+ } catch (error) {
+ logger.error("Failed to add download source:", error);
+ throw error;
+ }
+};
+
+registerEvent("addDownloadSource", addDownloadSource);
diff --git a/src/main/events/download-sources/create-download-sources.ts b/src/main/events/download-sources/create-download-sources.ts
deleted file mode 100644
index cf1f8f51..00000000
--- a/src/main/events/download-sources/create-download-sources.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { HydraApi } from "@main/services";
-import { registerEvent } from "../register-event";
-
-const createDownloadSources = async (
- _event: Electron.IpcMainInvokeEvent,
- urls: string[]
-) => {
- await HydraApi.post("/profile/download-sources", {
- urls,
- });
-};
-
-registerEvent("createDownloadSources", createDownloadSources);
diff --git a/src/main/events/download-sources/get-download-sources.ts b/src/main/events/download-sources/get-download-sources.ts
index bbebd06c..48583d9e 100644
--- a/src/main/events/download-sources/get-download-sources.ts
+++ b/src/main/events/download-sources/get-download-sources.ts
@@ -1,8 +1,10 @@
-import { HydraApi } from "@main/services";
+import { downloadSourcesSublevel } from "@main/level";
import { registerEvent } from "../register-event";
+import { orderBy } from "lodash-es";
const getDownloadSources = async (_event: Electron.IpcMainInvokeEvent) => {
- return HydraApi.get("/profile/download-sources");
+ const allSources = await downloadSourcesSublevel.values().all();
+ return orderBy(allSources, "createdAt", "desc");
};
registerEvent("getDownloadSources", getDownloadSources);
diff --git a/src/main/events/download-sources/put-download-source.ts b/src/main/events/download-sources/put-download-source.ts
deleted file mode 100644
index 72297059..00000000
--- a/src/main/events/download-sources/put-download-source.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { HydraApi } from "@main/services";
-import { registerEvent } from "../register-event";
-
-const putDownloadSource = async (
- _event: Electron.IpcMainInvokeEvent,
- objectIds: string[]
-) => {
- return HydraApi.put<{ fingerprint: string }>(
- "/download-sources",
- {
- objectIds,
- },
- { needsAuth: false }
- );
-};
-
-registerEvent("putDownloadSource", putDownloadSource);
diff --git a/src/main/events/download-sources/remove-download-source.ts b/src/main/events/download-sources/remove-download-source.ts
index bcc66998..9caeaba5 100644
--- a/src/main/events/download-sources/remove-download-source.ts
+++ b/src/main/events/download-sources/remove-download-source.ts
@@ -1,18 +1,27 @@
import { HydraApi } from "@main/services";
+import { downloadSourcesSublevel } from "@main/level";
import { registerEvent } from "../register-event";
const removeDownloadSource = async (
_event: Electron.IpcMainInvokeEvent,
- url?: string,
- removeAll = false
+ removeAll = false,
+ downloadSourceId?: string
) => {
const params = new URLSearchParams({
all: removeAll.toString(),
});
- if (url) params.set("url", url);
+ if (downloadSourceId) params.set("downloadSourceId", downloadSourceId);
- return HydraApi.delete(`/profile/download-sources?${params.toString()}`);
+ if (HydraApi.isLoggedIn() && HydraApi.hasActiveSubscription()) {
+ void HydraApi.delete(`/profile/download-sources?${params.toString()}`);
+ }
+
+ if (removeAll) {
+ await downloadSourcesSublevel.clear();
+ } else if (downloadSourceId) {
+ await downloadSourcesSublevel.del(downloadSourceId);
+ }
};
registerEvent("removeDownloadSource", removeDownloadSource);
diff --git a/src/main/events/download-sources/sync-download-sources.ts b/src/main/events/download-sources/sync-download-sources.ts
new file mode 100644
index 00000000..68a6be3f
--- /dev/null
+++ b/src/main/events/download-sources/sync-download-sources.ts
@@ -0,0 +1,29 @@
+import { HydraApi } from "@main/services";
+import { registerEvent } from "../register-event";
+import { downloadSourcesSublevel } from "@main/level";
+import type { DownloadSource } from "@types";
+
+const syncDownloadSources = async (_event: Electron.IpcMainInvokeEvent) => {
+ const downloadSources = await downloadSourcesSublevel.values().all();
+
+ const response = await HydraApi.post(
+ "/download-sources/sync",
+ {
+ ids: downloadSources.map((downloadSource) => downloadSource.id),
+ },
+ { needsAuth: false }
+ );
+
+ for (const downloadSource of response) {
+ const existingDownloadSource = downloadSources.find(
+ (source) => source.id === downloadSource.id
+ );
+
+ await downloadSourcesSublevel.put(downloadSource.id, {
+ ...existingDownloadSource,
+ ...downloadSource,
+ });
+ }
+};
+
+registerEvent("syncDownloadSources", syncDownloadSources);
diff --git a/src/main/events/hardware/get-disk-free-space.ts b/src/main/events/hardware/get-disk-free-space.ts
index b5ac86e3..b54431eb 100644
--- a/src/main/events/hardware/get-disk-free-space.ts
+++ b/src/main/events/hardware/get-disk-free-space.ts
@@ -1,10 +1,13 @@
-import disk from "diskusage";
-
+import { DiskUsage } from "@types";
import { registerEvent } from "../register-event";
+import checkDiskSpace from "check-disk-space";
const getDiskFreeSpace = async (
_event: Electron.IpcMainInvokeEvent,
path: string
-) => disk.check(path);
+): Promise => {
+ const result = await checkDiskSpace(path);
+ return { free: result.free, total: result.size };
+};
registerEvent("getDiskFreeSpace", getDiskFreeSpace);
diff --git a/src/main/events/index.ts b/src/main/events/index.ts
index 713ce581..0ab5499a 100644
--- a/src/main/events/index.ts
+++ b/src/main/events/index.ts
@@ -1,16 +1,9 @@
import { appVersion, defaultDownloadsPath, isStaging } from "@main/constants";
import { ipcMain } from "electron";
-import "./catalogue/get-catalogue";
import "./catalogue/get-game-shop-details";
-import "./catalogue/save-game-shop-assets";
-import "./catalogue/get-how-long-to-beat";
import "./catalogue/get-random-game";
-import "./catalogue/search-games";
import "./catalogue/get-game-stats";
-import "./catalogue/get-trending-games";
-import "./catalogue/get-publishers";
-import "./catalogue/get-developers";
import "./hardware/get-disk-free-space";
import "./hardware/check-folder-write-permission";
import "./library/add-game-to-library";
@@ -46,13 +39,15 @@ import "./library/copy-custom-game-asset";
import "./misc/open-checkout";
import "./misc/open-external";
import "./misc/show-open-dialog";
-import "./misc/get-features";
import "./misc/show-item-in-folder";
-import "./misc/get-badges";
import "./misc/install-common-redist";
import "./misc/can-install-common-redist";
import "./misc/save-temp-file";
import "./misc/delete-temp-file";
+import "./misc/install-hydra-decky-plugin";
+import "./misc/get-hydra-decky-plugin-info";
+import "./misc/check-homebrew-folder-exists";
+import "./misc/hydra-api-call";
import "./torrenting/cancel-game-download";
import "./torrenting/pause-game-download";
import "./torrenting/resume-game-download";
@@ -66,39 +61,23 @@ import "./user-preferences/auto-launch";
import "./autoupdater/check-for-updates";
import "./autoupdater/restart-and-install-update";
import "./user-preferences/authenticate-real-debrid";
-import "./user-preferences/authenticate-all-debrid";
import "./user-preferences/authenticate-torbox";
-import "./download-sources/put-download-source";
+import "./download-sources/add-download-source";
+import "./download-sources/sync-download-sources";
import "./auth/sign-out";
import "./auth/open-auth-window";
import "./auth/get-session-hash";
-import "./user/get-user";
-import "./user/get-user-library";
-import "./user/get-blocked-users";
-import "./user/block-user";
-import "./user/unblock-user";
-import "./user/get-user-friends";
import "./user/get-auth";
-import "./user/get-user-stats";
-import "./user/report-user";
import "./user/get-unlocked-achievements";
import "./user/get-compared-unlocked-achievements";
-import "./profile/get-friend-requests";
import "./profile/get-me";
-import "./profile/undo-friendship";
-import "./profile/update-friend-request";
import "./profile/update-profile";
import "./profile/process-profile-image";
-import "./profile/send-friend-request";
import "./profile/sync-friend-requests";
import "./cloud-save/download-game-artifact";
-import "./cloud-save/get-game-artifacts";
import "./cloud-save/get-game-backup-preview";
import "./cloud-save/upload-save-game";
-import "./cloud-save/delete-game-artifact";
import "./cloud-save/select-game-backup-path";
-import "./cloud-save/toggle-artifact-freeze";
-import "./cloud-save/rename-game-artifact";
import "./notifications/publish-new-repacks-notification";
import "./notifications/update-achievement-notification-window";
import "./notifications/show-achievement-test-notification";
@@ -112,7 +91,6 @@ import "./themes/get-custom-theme-by-id";
import "./themes/get-active-custom-theme";
import "./themes/close-editor-window";
import "./themes/toggle-custom-theme";
-import "./download-sources/create-download-sources";
import "./download-sources/remove-download-source";
import "./download-sources/get-download-sources";
import { isPortableVersion } from "@main/helpers";
diff --git a/src/main/events/library/add-custom-game-to-library.ts b/src/main/events/library/add-custom-game-to-library.ts
index 47fd3436..6a90087e 100644
--- a/src/main/events/library/add-custom-game-to-library.ts
+++ b/src/main/events/library/add-custom-game-to-library.ts
@@ -1,6 +1,6 @@
import { registerEvent } from "../register-event";
import { gamesSublevel, gamesShopAssetsSublevel, levelKeys } from "@main/level";
-import { randomUUID } from "crypto";
+import { randomUUID } from "node:crypto";
import type { GameShop } from "@types";
const addCustomGameToLibrary = async (
@@ -27,6 +27,7 @@ const addCustomGameToLibrary = async (
}
const assets = {
+ updatedAt: Date.now(),
objectId,
shop,
title,
@@ -36,6 +37,7 @@ const addCustomGameToLibrary = async (
logoImageUrl: logoImageUrl || "",
logoPosition: null,
coverImageUrl: iconUrl || "",
+ downloadSources: [],
};
await gamesShopAssetsSublevel.put(gameKey, assets);
diff --git a/src/main/events/library/add-game-to-favorites.ts b/src/main/events/library/add-game-to-favorites.ts
index 68c81abb..53985a09 100644
--- a/src/main/events/library/add-game-to-favorites.ts
+++ b/src/main/events/library/add-game-to-favorites.ts
@@ -13,7 +13,9 @@ const addGameToFavorites = async (
const game = await gamesSublevel.get(gameKey);
if (!game) return;
- HydraApi.put(`/profile/games/${shop}/${objectId}/favorite`).catch(() => {});
+ if (shop !== "custom") {
+ HydraApi.put(`/profile/games/${shop}/${objectId}/favorite`).catch(() => {});
+ }
try {
await gamesSublevel.put(gameKey, {
diff --git a/src/main/events/library/cleanup-unused-assets.ts b/src/main/events/library/cleanup-unused-assets.ts
index 22490c07..d1d77e9f 100644
--- a/src/main/events/library/cleanup-unused-assets.ts
+++ b/src/main/events/library/cleanup-unused-assets.ts
@@ -19,7 +19,6 @@ const getAllCustomGameAssets = async (): Promise => {
};
const getUsedAssetPaths = async (): Promise> => {
- // Get all custom games from the level database
const { gamesSublevel } = await import("@main/level");
const allGames = await gamesSublevel.iterator().all();
@@ -30,7 +29,6 @@ const getUsedAssetPaths = async (): Promise> => {
const usedPaths = new Set();
customGames.forEach((game) => {
- // Extract file paths from local URLs
if (game.iconUrl?.startsWith("local:")) {
usedPaths.add(game.iconUrl.replace("local:", ""));
}
diff --git a/src/main/events/library/copy-custom-game-asset.ts b/src/main/events/library/copy-custom-game-asset.ts
index 07c3d6f7..1f5aea0f 100644
--- a/src/main/events/library/copy-custom-game-asset.ts
+++ b/src/main/events/library/copy-custom-game-asset.ts
@@ -1,7 +1,7 @@
import { registerEvent } from "../register-event";
import fs from "node:fs";
import path from "node:path";
-import { randomUUID } from "crypto";
+import { randomUUID } from "node:crypto";
import { ASSETS_PATH } from "@main/constants";
const copyCustomGameAsset = async (
@@ -13,29 +13,23 @@ const copyCustomGameAsset = async (
throw new Error("Source file does not exist");
}
- // Ensure assets directory exists
if (!fs.existsSync(ASSETS_PATH)) {
fs.mkdirSync(ASSETS_PATH, { recursive: true });
}
- // Create custom games assets subdirectory
const customGamesAssetsPath = path.join(ASSETS_PATH, "custom-games");
if (!fs.existsSync(customGamesAssetsPath)) {
fs.mkdirSync(customGamesAssetsPath, { recursive: true });
}
- // Get file extension
const fileExtension = path.extname(sourcePath);
- // Generate unique filename
const uniqueId = randomUUID();
const fileName = `${assetType}-${uniqueId}${fileExtension}`;
const destinationPath = path.join(customGamesAssetsPath, fileName);
- // Copy the file
await fs.promises.copyFile(sourcePath, destinationPath);
- // Return the local URL format
return `local:${destinationPath}`;
};
diff --git a/src/main/events/library/create-steam-shortcut.ts b/src/main/events/library/create-steam-shortcut.ts
index f83dd675..d5434d7f 100644
--- a/src/main/events/library/create-steam-shortcut.ts
+++ b/src/main/events/library/create-steam-shortcut.ts
@@ -1,12 +1,11 @@
import { registerEvent } from "../register-event";
-import type { GameShop, GameStats } from "@types";
+import type { GameShop, ShopAssets } from "@types";
import { gamesSublevel, levelKeys } from "@main/level";
import {
composeSteamShortcut,
getSteamLocation,
getSteamShortcuts,
getSteamUsersIds,
- HydraApi,
logger,
SystemPath,
writeSteamShortcuts,
@@ -15,6 +14,7 @@ import fs from "node:fs";
import axios from "axios";
import path from "node:path";
import { ASSETS_PATH } from "@main/constants";
+import { getGameAssets } from "../catalogue/get-game-assets";
const downloadAsset = async (downloadPath: string, url?: string | null) => {
try {
@@ -41,7 +41,7 @@ const downloadAsset = async (downloadPath: string, url?: string | null) => {
const downloadAssetsFromSteam = async (
shop: GameShop,
objectId: string,
- assets: GameStats["assets"]
+ assets: ShopAssets | null
) => {
const gameAssetsPath = path.join(ASSETS_PATH, `${shop}-${objectId}`);
@@ -86,9 +86,7 @@ const createSteamShortcut = async (
throw new Error("No executable path found for game");
}
- const { assets } = await HydraApi.get(
- `/games/${shop}/${objectId}/stats`
- );
+ const assets = await getGameAssets(objectId, shop);
const steamUserIds = await getSteamUsersIds();
diff --git a/src/main/events/library/remove-game-from-favorites.ts b/src/main/events/library/remove-game-from-favorites.ts
index f06f55ce..7c79cbf4 100644
--- a/src/main/events/library/remove-game-from-favorites.ts
+++ b/src/main/events/library/remove-game-from-favorites.ts
@@ -13,7 +13,11 @@ const removeGameFromFavorites = async (
const game = await gamesSublevel.get(gameKey);
if (!game) return;
- HydraApi.put(`/profile/games/${shop}/${objectId}/unfavorite`).catch(() => {});
+ if (shop !== "custom") {
+ HydraApi.put(`/profile/games/${shop}/${objectId}/unfavorite`).catch(
+ () => {}
+ );
+ }
try {
await gamesSublevel.put(gameKey, {
diff --git a/src/main/events/library/remove-game-from-library.ts b/src/main/events/library/remove-game-from-library.ts
index fbb60ab2..95133c70 100644
--- a/src/main/events/library/remove-game-from-library.ts
+++ b/src/main/events/library/remove-game-from-library.ts
@@ -84,7 +84,7 @@ const removeGameFromLibrary = async (
await resetShopAssets(gameKey);
}
- if (game?.remoteId) {
+ if (game.remoteId) {
HydraApi.delete(`/profile/games/${game.remoteId}`).catch(() => {});
}
diff --git a/src/main/events/misc/check-homebrew-folder-exists.ts b/src/main/events/misc/check-homebrew-folder-exists.ts
new file mode 100644
index 00000000..32e09754
--- /dev/null
+++ b/src/main/events/misc/check-homebrew-folder-exists.ts
@@ -0,0 +1,13 @@
+import { registerEvent } from "../register-event";
+import { DECKY_PLUGINS_LOCATION } from "@main/constants";
+import fs from "node:fs";
+import path from "node:path";
+
+const checkHomebrewFolderExists = async (
+ _event: Electron.IpcMainInvokeEvent
+): Promise => {
+ const homebrewPath = path.dirname(DECKY_PLUGINS_LOCATION);
+ return fs.existsSync(homebrewPath);
+};
+
+registerEvent("checkHomebrewFolderExists", checkHomebrewFolderExists);
diff --git a/src/main/events/misc/get-badges.ts b/src/main/events/misc/get-badges.ts
deleted file mode 100644
index c1d62782..00000000
--- a/src/main/events/misc/get-badges.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { Badge } from "@types";
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import { db, levelKeys } from "@main/level";
-
-const getBadges = async (_event: Electron.IpcMainInvokeEvent) => {
- const language = await db
- .get(levelKeys.language, {
- valueEncoding: "utf8",
- })
- .then((language) => language || "en");
-
- const params = new URLSearchParams({
- locale: language,
- });
-
- return HydraApi.get(`/badges?${params.toString()}`, null, {
- needsAuth: false,
- });
-};
-
-registerEvent("getBadges", getBadges);
diff --git a/src/main/events/misc/get-features.ts b/src/main/events/misc/get-features.ts
deleted file mode 100644
index 766c84aa..00000000
--- a/src/main/events/misc/get-features.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const getFeatures = async (_event: Electron.IpcMainInvokeEvent) => {
- return HydraApi.get("/features", null, { needsAuth: false });
-};
-
-registerEvent("getFeatures", getFeatures);
diff --git a/src/main/events/misc/get-hydra-decky-plugin-info.ts b/src/main/events/misc/get-hydra-decky-plugin-info.ts
new file mode 100644
index 00000000..430bd691
--- /dev/null
+++ b/src/main/events/misc/get-hydra-decky-plugin-info.ts
@@ -0,0 +1,94 @@
+import { registerEvent } from "../register-event";
+import { logger, HydraApi } from "@main/services";
+import { HYDRA_DECKY_PLUGIN_LOCATION } from "@main/constants";
+import fs from "node:fs";
+import path from "node:path";
+
+interface DeckyReleaseInfo {
+ version: string;
+ downloadUrl: string;
+}
+
+const getHydraDeckyPluginInfo = async (
+ _event: Electron.IpcMainInvokeEvent
+): Promise<{
+ installed: boolean;
+ version: string | null;
+ path: string;
+ outdated: boolean;
+ expectedVersion: string | null;
+}> => {
+ try {
+ // Fetch the expected version from API
+ let expectedVersion: string | null = null;
+ try {
+ const releaseInfo = await HydraApi.get(
+ "/decky/release",
+ {},
+ { needsAuth: false }
+ );
+ expectedVersion = releaseInfo.version;
+ } catch (error) {
+ logger.error("Failed to fetch Decky release info:", error);
+ }
+
+ // Check if plugin folder exists
+ if (!fs.existsSync(HYDRA_DECKY_PLUGIN_LOCATION)) {
+ logger.log("Hydra Decky plugin not installed");
+ return {
+ installed: false,
+ version: null,
+ path: HYDRA_DECKY_PLUGIN_LOCATION,
+ outdated: true,
+ expectedVersion,
+ };
+ }
+
+ // Check if package.json exists
+ const packageJsonPath = path.join(
+ HYDRA_DECKY_PLUGIN_LOCATION,
+ "package.json"
+ );
+
+ if (!fs.existsSync(packageJsonPath)) {
+ logger.log("Hydra Decky plugin package.json not found");
+ return {
+ installed: false,
+ version: null,
+ path: HYDRA_DECKY_PLUGIN_LOCATION,
+ outdated: true,
+ expectedVersion,
+ };
+ }
+
+ // Read and parse package.json
+ const packageJsonContent = fs.readFileSync(packageJsonPath, "utf-8");
+ const packageJson = JSON.parse(packageJsonContent);
+ const version = packageJson.version;
+
+ const outdated = expectedVersion ? version !== expectedVersion : false;
+
+ logger.log(
+ `Hydra Decky plugin installed, version: ${version}, expected: ${expectedVersion}, outdated: ${outdated}`
+ );
+
+ return {
+ installed: true,
+ version,
+ path: HYDRA_DECKY_PLUGIN_LOCATION,
+ outdated,
+ expectedVersion,
+ };
+ } catch (error) {
+ logger.error("Failed to get plugin info:", error);
+ return {
+ installed: false,
+ version: null,
+ path: HYDRA_DECKY_PLUGIN_LOCATION,
+ outdated: true,
+ expectedVersion: null,
+ };
+ }
+};
+
+registerEvent("getHydraDeckyPluginInfo", getHydraDeckyPluginInfo);
diff --git a/src/main/events/misc/hydra-api-call.ts b/src/main/events/misc/hydra-api-call.ts
new file mode 100644
index 00000000..3b5f78ec
--- /dev/null
+++ b/src/main/events/misc/hydra-api-call.ts
@@ -0,0 +1,38 @@
+import { registerEvent } from "../register-event";
+import { HydraApi } from "@main/services";
+
+interface HydraApiCallPayload {
+ method: "get" | "post" | "put" | "patch" | "delete";
+ url: string;
+ data?: unknown;
+ params?: unknown;
+ options?: {
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ ifModifiedSince?: Date;
+ };
+}
+
+const hydraApiCall = async (
+ _event: Electron.IpcMainInvokeEvent,
+ payload: HydraApiCallPayload
+) => {
+ const { method, url, data, params, options } = payload;
+
+ switch (method) {
+ case "get":
+ return HydraApi.get(url, params, options);
+ case "post":
+ return HydraApi.post(url, data, options);
+ case "put":
+ return HydraApi.put(url, data, options);
+ case "patch":
+ return HydraApi.patch(url, data, options);
+ case "delete":
+ return HydraApi.delete(url, options);
+ default:
+ throw new Error(`Unsupported HTTP method: ${method}`);
+ }
+};
+
+registerEvent("hydraApiCall", hydraApiCall);
diff --git a/src/main/events/misc/install-hydra-decky-plugin.ts b/src/main/events/misc/install-hydra-decky-plugin.ts
new file mode 100644
index 00000000..e14ea2ed
--- /dev/null
+++ b/src/main/events/misc/install-hydra-decky-plugin.ts
@@ -0,0 +1,50 @@
+import { registerEvent } from "../register-event";
+import { logger, DeckyPlugin } from "@main/services";
+import { HYDRA_DECKY_PLUGIN_LOCATION } from "@main/constants";
+
+const installHydraDeckyPlugin = async (
+ _event: Electron.IpcMainInvokeEvent
+): Promise<{
+ success: boolean;
+ path: string;
+ currentVersion: string | null;
+ expectedVersion: string;
+ error?: string;
+}> => {
+ try {
+ logger.log("Installing/updating Hydra Decky plugin...");
+
+ const result = await DeckyPlugin.checkPluginVersion();
+
+ if (result.exists && !result.outdated) {
+ logger.log("Plugin installed successfully");
+ return {
+ success: true,
+ path: HYDRA_DECKY_PLUGIN_LOCATION,
+ currentVersion: result.currentVersion,
+ expectedVersion: result.expectedVersion,
+ };
+ } else {
+ logger.error("Failed to install plugin");
+ return {
+ success: false,
+ path: HYDRA_DECKY_PLUGIN_LOCATION,
+ currentVersion: result.currentVersion,
+ expectedVersion: result.expectedVersion,
+ error: "Plugin installation failed",
+ };
+ }
+ } catch (error) {
+ const errorMessage = error instanceof Error ? error.message : String(error);
+ logger.error("Failed to install plugin:", error);
+ return {
+ success: false,
+ path: HYDRA_DECKY_PLUGIN_LOCATION,
+ currentVersion: null,
+ expectedVersion: "unknown",
+ error: errorMessage,
+ };
+ }
+};
+
+registerEvent("installHydraDeckyPlugin", installHydraDeckyPlugin);
diff --git a/src/main/events/profile/get-friend-requests.ts b/src/main/events/profile/get-friend-requests.ts
deleted file mode 100644
index 39573b67..00000000
--- a/src/main/events/profile/get-friend-requests.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import type { FriendRequest } from "@types";
-
-const getFriendRequests = async (
- _event: Electron.IpcMainInvokeEvent
-): Promise => {
- return HydraApi.get(`/profile/friend-requests`).catch(() => []);
-};
-
-registerEvent("getFriendRequests", getFriendRequests);
diff --git a/src/main/events/profile/send-friend-request.ts b/src/main/events/profile/send-friend-request.ts
deleted file mode 100644
index d696606f..00000000
--- a/src/main/events/profile/send-friend-request.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const sendFriendRequest = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string
-) => {
- return HydraApi.post("/profile/friend-requests", { friendCode: userId });
-};
-
-registerEvent("sendFriendRequest", sendFriendRequest);
diff --git a/src/main/events/profile/undo-friendship.ts b/src/main/events/profile/undo-friendship.ts
deleted file mode 100644
index 371bc5cc..00000000
--- a/src/main/events/profile/undo-friendship.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const undoFriendship = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string
-) => {
- await HydraApi.delete(`/profile/friends/${userId}`);
-};
-
-registerEvent("undoFriendship", undoFriendship);
diff --git a/src/main/events/profile/update-friend-request.ts b/src/main/events/profile/update-friend-request.ts
deleted file mode 100644
index b265f88c..00000000
--- a/src/main/events/profile/update-friend-request.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import type { FriendRequestAction } from "@types";
-
-const updateFriendRequest = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string,
- action: FriendRequestAction
-) => {
- if (action == "CANCEL") {
- return HydraApi.delete(`/profile/friend-requests/${userId}`);
- }
-
- return HydraApi.patch(`/profile/friend-requests/${userId}`, {
- requestState: action,
- });
-};
-
-registerEvent("updateFriendRequest", updateFriendRequest);
diff --git a/src/main/events/user-preferences/authenticate-all-debrid.ts b/src/main/events/user-preferences/authenticate-all-debrid.ts
deleted file mode 100644
index 713db965..00000000
--- a/src/main/events/user-preferences/authenticate-all-debrid.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { AllDebridClient } from "@main/services/download/all-debrid";
-import { registerEvent } from "../register-event";
-
-const authenticateAllDebrid = async (
- _event: Electron.IpcMainInvokeEvent,
- apiKey: string
-) => {
- AllDebridClient.authorize(apiKey);
- const result = await AllDebridClient.getUser();
- if ("error_code" in result) {
- return { error_code: result.error_code };
- }
-
- return result.user;
-};
-
-registerEvent("authenticateAllDebrid", authenticateAllDebrid);
diff --git a/src/main/events/user/block-user.ts b/src/main/events/user/block-user.ts
deleted file mode 100644
index c81231e5..00000000
--- a/src/main/events/user/block-user.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const blockUser = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string
-) => {
- await HydraApi.post(`/users/${userId}/block`);
-};
-
-registerEvent("blockUser", blockUser);
diff --git a/src/main/events/user/get-blocked-users.ts b/src/main/events/user/get-blocked-users.ts
deleted file mode 100644
index 9696cd7b..00000000
--- a/src/main/events/user/get-blocked-users.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import { UserNotLoggedInError } from "@shared";
-import type { UserBlocks } from "@types";
-
-export const getBlockedUsers = async (
- _event: Electron.IpcMainInvokeEvent,
- take: number,
- skip: number
-): Promise => {
- return HydraApi.get(`/profile/blocks`, { take, skip }).catch((err) => {
- if (err instanceof UserNotLoggedInError) {
- return { blocks: [] };
- }
- throw err;
- });
-};
-
-registerEvent("getBlockedUsers", getBlockedUsers);
diff --git a/src/main/events/user/get-user-friends.ts b/src/main/events/user/get-user-friends.ts
deleted file mode 100644
index aefc7052..00000000
--- a/src/main/events/user/get-user-friends.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { db } from "@main/level";
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import type { User, UserFriends } from "@types";
-import { levelKeys } from "@main/level/sublevels";
-
-export const getUserFriends = async (
- userId: string,
- take: number,
- skip: number
-): Promise => {
- const user = await db.get(levelKeys.user, {
- valueEncoding: "json",
- });
-
- if (user?.id === userId) {
- return HydraApi.get(`/profile/friends`, { take, skip });
- }
-
- return HydraApi.get(`/users/${userId}/friends`, { take, skip });
-};
-
-const getUserFriendsEvent = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string,
- take: number,
- skip: number
-) => {
- return getUserFriends(userId, take, skip);
-};
-
-registerEvent("getUserFriends", getUserFriendsEvent);
diff --git a/src/main/events/user/get-user-library.ts b/src/main/events/user/get-user-library.ts
deleted file mode 100644
index f3c3eed5..00000000
--- a/src/main/events/user/get-user-library.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import type { UserLibraryResponse } from "@types";
-
-const getUserLibrary = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string,
- take: number = 12,
- skip: number = 0,
- sortBy?: string
-): Promise => {
- const params = new URLSearchParams();
-
- params.append("take", take.toString());
- params.append("skip", skip.toString());
-
- if (sortBy) {
- params.append("sortBy", sortBy);
- }
-
- const queryString = params.toString();
- const baseUrl = `/users/${userId}/library`;
- const url = queryString ? `${baseUrl}?${queryString}` : baseUrl;
-
- return HydraApi.get(url).catch(() => null);
-};
-
-registerEvent("getUserLibrary", getUserLibrary);
diff --git a/src/main/events/user/get-user-stats.ts b/src/main/events/user/get-user-stats.ts
deleted file mode 100644
index f88a4f12..00000000
--- a/src/main/events/user/get-user-stats.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import type { UserStats } from "@types";
-
-export const getUserStats = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string
-): Promise => {
- return HydraApi.get(`/users/${userId}/stats`);
-};
-
-registerEvent("getUserStats", getUserStats);
diff --git a/src/main/events/user/get-user.ts b/src/main/events/user/get-user.ts
deleted file mode 100644
index fe77a7c1..00000000
--- a/src/main/events/user/get-user.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-import type { UserProfile } from "@types";
-
-const getUser = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string
-): Promise => {
- return HydraApi.get(`/users/${userId}`).catch(() => null);
-};
-
-registerEvent("getUser", getUser);
diff --git a/src/main/events/user/report-user.ts b/src/main/events/user/report-user.ts
deleted file mode 100644
index 1e8efbaa..00000000
--- a/src/main/events/user/report-user.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-export const reportUser = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string,
- reason: string,
- description: string
-): Promise => {
- return HydraApi.post(`/users/${userId}/report`, {
- reason,
- description,
- });
-};
-
-registerEvent("reportUser", reportUser);
diff --git a/src/main/events/user/unblock-user.ts b/src/main/events/user/unblock-user.ts
deleted file mode 100644
index c604a0b5..00000000
--- a/src/main/events/user/unblock-user.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { registerEvent } from "../register-event";
-import { HydraApi } from "@main/services";
-
-const unblockUser = async (
- _event: Electron.IpcMainInvokeEvent,
- userId: string
-) => {
- await HydraApi.post(`/users/${userId}/unblock`);
-};
-
-registerEvent("unblockUser", unblockUser);
diff --git a/src/main/helpers/migrate-download-sources.ts b/src/main/helpers/migrate-download-sources.ts
new file mode 100644
index 00000000..fd627f20
--- /dev/null
+++ b/src/main/helpers/migrate-download-sources.ts
@@ -0,0 +1,27 @@
+import { downloadSourcesSublevel } from "@main/level";
+import { HydraApi } from "@main/services/hydra-api";
+import { DownloadSource } from "@types";
+
+export const migrateDownloadSources = async () => {
+ const downloadSources = downloadSourcesSublevel.iterator();
+
+ for await (const [key, value] of downloadSources) {
+ if (!value.isRemote) {
+ const downloadSource = await HydraApi.post(
+ "/download-sources",
+ {
+ url: value.url,
+ },
+ { needsAuth: false }
+ );
+
+ await downloadSourcesSublevel.put(downloadSource.id, {
+ ...downloadSource,
+ isRemote: true,
+ createdAt: new Date().toISOString(),
+ });
+
+ await downloadSourcesSublevel.del(key);
+ }
+ }
+};
diff --git a/src/main/index.ts b/src/main/index.ts
index 106feaf0..65e20144 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -9,6 +9,7 @@ import {
clearGamesPlaytime,
WindowManager,
Lock,
+ Aria2,
} from "@main/services";
import resources from "@locales";
import { PythonRPC } from "./services/python-rpc";
@@ -222,6 +223,7 @@ app.on("before-quit", async (e) => {
e.preventDefault();
/* Disconnects libtorrent */
PythonRPC.kill();
+ Aria2.kill();
await clearGamesPlaytime();
canAppBeClosed = true;
app.quit();
diff --git a/src/main/level/sublevels/download-sources.ts b/src/main/level/sublevels/download-sources.ts
new file mode 100644
index 00000000..b6cdad0b
--- /dev/null
+++ b/src/main/level/sublevels/download-sources.ts
@@ -0,0 +1,10 @@
+import { db } from "../level";
+import { levelKeys } from "./keys";
+import type { DownloadSource } from "@types";
+
+export const downloadSourcesSublevel = db.sublevel(
+ levelKeys.downloadSources,
+ {
+ valueEncoding: "json",
+ }
+);
diff --git a/src/main/level/sublevels/game-shop-assets.ts b/src/main/level/sublevels/game-shop-assets.ts
index 561d85df..806e041f 100644
--- a/src/main/level/sublevels/game-shop-assets.ts
+++ b/src/main/level/sublevels/game-shop-assets.ts
@@ -3,9 +3,9 @@ import type { ShopAssets } from "@types";
import { db } from "../level";
import { levelKeys } from "./keys";
-export const gamesShopAssetsSublevel = db.sublevel(
- levelKeys.gameShopAssets,
- {
- valueEncoding: "json",
- }
-);
+export const gamesShopAssetsSublevel = db.sublevel<
+ string,
+ ShopAssets & { updatedAt: number }
+>(levelKeys.gameShopAssets, {
+ valueEncoding: "json",
+});
diff --git a/src/main/level/sublevels/index.ts b/src/main/level/sublevels/index.ts
index f78f09b8..3619ae26 100644
--- a/src/main/level/sublevels/index.ts
+++ b/src/main/level/sublevels/index.ts
@@ -6,3 +6,4 @@ export * from "./game-stats-cache";
export * from "./game-achievements";
export * from "./keys";
export * from "./themes";
+export * from "./download-sources";
diff --git a/src/main/level/sublevels/keys.ts b/src/main/level/sublevels/keys.ts
index bba35169..a28690b2 100644
--- a/src/main/level/sublevels/keys.ts
+++ b/src/main/level/sublevels/keys.ts
@@ -17,4 +17,5 @@ export const levelKeys = {
language: "language",
screenState: "screenState",
rpcPassword: "rpcPassword",
+ downloadSources: "downloadSources",
};
diff --git a/src/main/main.ts b/src/main/main.ts
index 67391057..ffb8f8a9 100644
--- a/src/main/main.ts
+++ b/src/main/main.ts
@@ -8,7 +8,6 @@ import {
CommonRedistManager,
TorBoxClient,
RealDebridClient,
- AllDebridClient,
Aria2,
DownloadManager,
HydraApi,
@@ -16,7 +15,9 @@ import {
startMainLoop,
Ludusavi,
Lock,
+ DeckyPlugin,
} from "@main/services";
+import { migrateDownloadSources } from "./helpers/migrate-download-sources";
export const loadState = async () => {
await Lock.acquireLock();
@@ -38,10 +39,6 @@ export const loadState = async () => {
RealDebridClient.authorize(userPreferences.realDebridApiToken);
}
- if (userPreferences?.allDebridApiKey) {
- AllDebridClient.authorize(userPreferences.allDebridApiKey);
- }
-
if (userPreferences?.torBoxApiToken) {
TorBoxClient.authorize(userPreferences.torBoxApiToken);
}
@@ -49,8 +46,16 @@ export const loadState = async () => {
Ludusavi.copyConfigFileToUserData();
Ludusavi.copyBinaryToUserData();
- await HydraApi.setupApi().then(() => {
+ if (process.platform === "linux") {
+ DeckyPlugin.checkAndUpdateIfOutdated();
+ }
+
+ await HydraApi.setupApi().then(async () => {
uploadGamesBatch();
+ void migrateDownloadSources();
+
+ const { syncDownloadSourcesFromApi } = await import("./services/user");
+ void syncDownloadSourcesFromApi();
// WSClient.connect();
});
diff --git a/src/main/services/achievements/get-game-achievement-data.ts b/src/main/services/achievements/get-game-achievement-data.ts
index 72b49bc5..69437801 100644
--- a/src/main/services/achievements/get-game-achievement-data.ts
+++ b/src/main/services/achievements/get-game-achievement-data.ts
@@ -5,15 +5,18 @@ import { logger } from "../logger";
import { db, gameAchievementsSublevel, levelKeys } from "@main/level";
import { AxiosError } from "axios";
-const LOCAL_CACHE_EXPIRATION = 1000 * 60 * 60; // 1 hour
-
const getModifiedSinceHeader = (
- cachedAchievements: GameAchievement | undefined
+ cachedAchievements: GameAchievement | undefined,
+ userLanguage: string
): Date | undefined => {
if (!cachedAchievements) {
return undefined;
}
+ if (userLanguage != cachedAchievements.language) {
+ return undefined;
+ }
+
return cachedAchievements.updatedAt
? new Date(cachedAchievements.updatedAt)
: undefined;
@@ -24,17 +27,15 @@ export const getGameAchievementData = async (
shop: GameShop,
useCachedData: boolean
) => {
+ if (shop === "custom") {
+ return [];
+ }
+
const gameKey = levelKeys.game(shop, objectId);
const cachedAchievements = await gameAchievementsSublevel.get(gameKey);
- if (cachedAchievements?.achievements && useCachedData)
- return cachedAchievements.achievements;
-
- if (
- cachedAchievements?.achievements &&
- Date.now() < (cachedAchievements.updatedAt ?? 0) + LOCAL_CACHE_EXPIRATION
- ) {
+ if (cachedAchievements?.achievements && useCachedData) {
return cachedAchievements.achievements;
}
@@ -50,14 +51,15 @@ export const getGameAchievementData = async (
language,
},
{
- ifModifiedSince: getModifiedSinceHeader(cachedAchievements),
+ ifModifiedSince: getModifiedSinceHeader(cachedAchievements, language),
}
)
.then(async (achievements) => {
await gameAchievementsSublevel.put(gameKey, {
unlockedAchievements: cachedAchievements?.unlockedAchievements ?? [],
achievements,
- updatedAt: Date.now() + LOCAL_CACHE_EXPIRATION,
+ updatedAt: Date.now(),
+ language,
});
return achievements;
diff --git a/src/main/services/achievements/merge-achievements.ts b/src/main/services/achievements/merge-achievements.ts
index f2ea03ac..804f5933 100644
--- a/src/main/services/achievements/merge-achievements.ts
+++ b/src/main/services/achievements/merge-achievements.ts
@@ -37,6 +37,7 @@ const saveAchievementsOnLocal = async (
achievements: gameAchievement?.achievements ?? [],
unlockedAchievements: unlockedAchievements,
updatedAt: gameAchievement?.updatedAt,
+ language: gameAchievement?.language,
});
if (!sendUpdateEvent) return;
diff --git a/src/main/services/aria2.ts b/src/main/services/aria2.ts
index c6b97b9f..f6835558 100644
--- a/src/main/services/aria2.ts
+++ b/src/main/services/aria2.ts
@@ -1,6 +1,7 @@
import path from "node:path";
import cp from "node:child_process";
import { app } from "electron";
+import { logger } from "./logger";
export class Aria2 {
private static process: cp.ChildProcess | null = null;
@@ -23,6 +24,9 @@ export class Aria2 {
}
public static kill() {
- this.process?.kill();
+ if (this.process) {
+ logger.log("Killing aria2 process");
+ this.process.kill();
+ }
}
}
diff --git a/src/main/services/cloud-sync.ts b/src/main/services/cloud-sync.ts
index 6da24ce1..200a5ee3 100644
--- a/src/main/services/cloud-sync.ts
+++ b/src/main/services/cloud-sync.ts
@@ -80,7 +80,7 @@ export class CloudSync {
try {
await fs.promises.rm(backupPath, { recursive: true });
} catch (error) {
- logger.error("Failed to remove backup path", error);
+ logger.error("Failed to remove backup path", { backupPath, error });
}
}
@@ -163,7 +163,7 @@ export class CloudSync {
try {
await fs.promises.unlink(bundleLocation);
} catch (error) {
- logger.error("Failed to remove tar file", error);
+ logger.error("Failed to remove tar file", { bundleLocation, error });
}
}
}
diff --git a/src/main/services/decky-plugin.ts b/src/main/services/decky-plugin.ts
new file mode 100644
index 00000000..4dc1fdad
--- /dev/null
+++ b/src/main/services/decky-plugin.ts
@@ -0,0 +1,400 @@
+import fs from "node:fs";
+import path from "node:path";
+import os from "node:os";
+import axios from "axios";
+import sudo from "sudo-prompt";
+import { app } from "electron";
+import {
+ HYDRA_DECKY_PLUGIN_LOCATION,
+ DECKY_PLUGINS_LOCATION,
+} from "@main/constants";
+import { logger } from "./logger";
+import { SevenZip } from "./7zip";
+import { SystemPath } from "./system-path";
+import { HydraApi } from "./hydra-api";
+
+interface DeckyReleaseInfo {
+ version: string;
+ downloadUrl: string;
+}
+
+export class DeckyPlugin {
+ private static releaseInfo: DeckyReleaseInfo | null = null;
+
+ private static async getDeckyReleaseInfo(): Promise {
+ if (this.releaseInfo) {
+ return this.releaseInfo;
+ }
+
+ try {
+ const response = await HydraApi.get(
+ "/decky/release",
+ {},
+ { needsAuth: false }
+ );
+
+ this.releaseInfo = response;
+ return response;
+ } catch (error) {
+ logger.error("Failed to fetch Decky release info:", error);
+ throw error;
+ }
+ }
+
+ private static getPackageJsonPath(): string {
+ return path.join(HYDRA_DECKY_PLUGIN_LOCATION, "package.json");
+ }
+
+ private static async downloadPlugin(): Promise {
+ logger.log("Downloading Hydra Decky plugin...");
+
+ const releaseInfo = await this.getDeckyReleaseInfo();
+ const tempDir = SystemPath.getPath("temp");
+ const zipPath = path.join(tempDir, "Hydra.zip");
+
+ const response = await axios.get(releaseInfo.downloadUrl, {
+ responseType: "arraybuffer",
+ });
+
+ await fs.promises.writeFile(zipPath, response.data);
+ logger.log(`Plugin downloaded to: ${zipPath}`);
+
+ return zipPath;
+ }
+
+ private static async extractPlugin(zipPath: string): Promise {
+ logger.log("Extracting Hydra Decky plugin...");
+
+ const tempDir = SystemPath.getPath("temp");
+ const extractPath = path.join(tempDir, "hydra-decky-plugin");
+
+ if (fs.existsSync(extractPath)) {
+ await fs.promises.rm(extractPath, { recursive: true, force: true });
+ }
+
+ await fs.promises.mkdir(extractPath, { recursive: true });
+
+ return new Promise((resolve, reject) => {
+ SevenZip.extractFile(
+ {
+ filePath: zipPath,
+ outputPath: extractPath,
+ },
+ () => {
+ logger.log(`Plugin extracted to: ${extractPath}`);
+ resolve(extractPath);
+ },
+ () => {
+ reject(new Error("Failed to extract plugin"));
+ }
+ );
+ });
+ }
+
+ private static needsSudo(): boolean {
+ try {
+ if (fs.existsSync(DECKY_PLUGINS_LOCATION)) {
+ fs.accessSync(DECKY_PLUGINS_LOCATION, fs.constants.W_OK);
+ return false;
+ }
+
+ const parentDir = path.dirname(DECKY_PLUGINS_LOCATION);
+ if (fs.existsSync(parentDir)) {
+ fs.accessSync(parentDir, fs.constants.W_OK);
+ return false;
+ }
+
+ return true;
+ } catch (error) {
+ if (
+ error &&
+ typeof error === "object" &&
+ "code" in error &&
+ (error.code === "EACCES" || error.code === "EPERM")
+ ) {
+ return true;
+ }
+ throw error;
+ }
+ }
+
+ private static async installPluginWithSudo(
+ extractPath: string
+ ): Promise {
+ logger.log("Installing plugin with sudo...");
+
+ const username = os.userInfo().username;
+ const sourcePath = path.join(extractPath, "Hydra");
+
+ return new Promise((resolve, reject) => {
+ const command = `mkdir -p "${DECKY_PLUGINS_LOCATION}" && rm -rf "${HYDRA_DECKY_PLUGIN_LOCATION}" && cp -r "${sourcePath}" "${HYDRA_DECKY_PLUGIN_LOCATION}" && chown -R ${username}: "${DECKY_PLUGINS_LOCATION}"`;
+
+ sudo.exec(
+ command,
+ { name: app.getName() },
+ (sudoError, _stdout, stderr) => {
+ if (sudoError) {
+ logger.error("Failed to install plugin with sudo:", sudoError);
+ reject(sudoError);
+ } else {
+ logger.log("Plugin installed successfully with sudo");
+ if (stderr) {
+ logger.log("Sudo stderr:", stderr);
+ }
+ resolve();
+ }
+ }
+ );
+ });
+ }
+
+ private static async installPluginWithoutSudo(
+ extractPath: string
+ ): Promise {
+ logger.log("Installing plugin without sudo...");
+
+ const sourcePath = path.join(extractPath, "Hydra");
+
+ if (!fs.existsSync(DECKY_PLUGINS_LOCATION)) {
+ await fs.promises.mkdir(DECKY_PLUGINS_LOCATION, { recursive: true });
+ }
+
+ if (fs.existsSync(HYDRA_DECKY_PLUGIN_LOCATION)) {
+ await fs.promises.rm(HYDRA_DECKY_PLUGIN_LOCATION, {
+ recursive: true,
+ force: true,
+ });
+ }
+
+ await fs.promises.cp(sourcePath, HYDRA_DECKY_PLUGIN_LOCATION, {
+ recursive: true,
+ });
+
+ logger.log("Plugin installed successfully");
+ }
+
+ private static async installPlugin(extractPath: string): Promise {
+ if (this.needsSudo()) {
+ await this.installPluginWithSudo(extractPath);
+ } else {
+ await this.installPluginWithoutSudo(extractPath);
+ }
+ }
+
+ private static async updatePlugin(): Promise {
+ let zipPath: string | null = null;
+ let extractPath: string | null = null;
+
+ try {
+ zipPath = await this.downloadPlugin();
+ extractPath = await this.extractPlugin(zipPath);
+ await this.installPlugin(extractPath);
+
+ logger.log("Plugin update completed successfully");
+ } catch (error) {
+ logger.error("Failed to update plugin:", error);
+ throw error;
+ } finally {
+ if (zipPath) {
+ try {
+ await fs.promises.rm(zipPath, { force: true });
+ logger.log("Cleaned up downloaded zip file");
+ } catch (cleanupError) {
+ logger.error("Failed to clean up zip file:", cleanupError);
+ }
+ }
+
+ if (extractPath) {
+ try {
+ await fs.promises.rm(extractPath, { recursive: true, force: true });
+ logger.log("Cleaned up extraction directory");
+ } catch (cleanupError) {
+ logger.error(
+ "Failed to clean up extraction directory:",
+ cleanupError
+ );
+ }
+ }
+ }
+ }
+
+ public static async checkAndUpdateIfOutdated(): Promise {
+ if (!fs.existsSync(HYDRA_DECKY_PLUGIN_LOCATION)) {
+ logger.log("Hydra Decky plugin not installed, skipping update check");
+ return;
+ }
+
+ const packageJsonPath = this.getPackageJsonPath();
+
+ try {
+ if (!fs.existsSync(packageJsonPath)) {
+ logger.log(
+ "Hydra Decky plugin package.json not found, skipping update"
+ );
+ return;
+ }
+
+ const releaseInfo = await this.getDeckyReleaseInfo();
+ const packageJsonContent = fs.readFileSync(packageJsonPath, "utf-8");
+ const packageJson = JSON.parse(packageJsonContent);
+ const currentVersion = packageJson.version;
+ const isOutdated = currentVersion !== releaseInfo.version;
+
+ if (isOutdated) {
+ logger.log(
+ `Hydra Decky plugin is outdated. Current: ${currentVersion}, Expected: ${releaseInfo.version}. Updating...`
+ );
+
+ await this.updatePlugin();
+ logger.log("Hydra Decky plugin updated successfully");
+ } else {
+ logger.log(`Hydra Decky plugin is up to date (${currentVersion})`);
+ }
+ } catch (error) {
+ logger.error(`Error checking/updating Hydra Decky plugin: ${error}`);
+ }
+ }
+
+ public static async checkPluginVersion(): Promise<{
+ exists: boolean;
+ outdated: boolean;
+ currentVersion: string | null;
+ expectedVersion: string;
+ }> {
+ try {
+ const releaseInfo = await this.getDeckyReleaseInfo();
+
+ if (!fs.existsSync(HYDRA_DECKY_PLUGIN_LOCATION)) {
+ logger.log("Hydra Decky plugin folder not found, installing...");
+
+ try {
+ await this.updatePlugin();
+
+ // Read the actual installed version from package.json
+ const packageJsonPath = this.getPackageJsonPath();
+ if (fs.existsSync(packageJsonPath)) {
+ const packageJsonContent = fs.readFileSync(
+ packageJsonPath,
+ "utf-8"
+ );
+ const packageJson = JSON.parse(packageJsonContent);
+ return {
+ exists: true,
+ outdated: false,
+ currentVersion: packageJson.version,
+ expectedVersion: releaseInfo.version,
+ };
+ }
+
+ return {
+ exists: true,
+ outdated: false,
+ currentVersion: releaseInfo.version,
+ expectedVersion: releaseInfo.version,
+ };
+ } catch (error) {
+ logger.error("Failed to install plugin:", error);
+ return {
+ exists: false,
+ outdated: true,
+ currentVersion: null,
+ expectedVersion: releaseInfo.version,
+ };
+ }
+ }
+
+ const packageJsonPath = this.getPackageJsonPath();
+
+ try {
+ if (!fs.existsSync(packageJsonPath)) {
+ logger.log(
+ "Hydra Decky plugin package.json not found, installing..."
+ );
+
+ await this.updatePlugin();
+
+ // Read the actual installed version from package.json
+ if (fs.existsSync(packageJsonPath)) {
+ const packageJsonContent = fs.readFileSync(
+ packageJsonPath,
+ "utf-8"
+ );
+ const packageJson = JSON.parse(packageJsonContent);
+ return {
+ exists: true,
+ outdated: false,
+ currentVersion: packageJson.version,
+ expectedVersion: releaseInfo.version,
+ };
+ }
+
+ return {
+ exists: true,
+ outdated: false,
+ currentVersion: releaseInfo.version,
+ expectedVersion: releaseInfo.version,
+ };
+ }
+
+ const packageJsonContent = fs.readFileSync(packageJsonPath, "utf-8");
+ const packageJson = JSON.parse(packageJsonContent);
+ const currentVersion = packageJson.version;
+ const isOutdated = currentVersion !== releaseInfo.version;
+
+ if (isOutdated) {
+ logger.log(
+ `Hydra Decky plugin is outdated. Current: ${currentVersion}, Expected: ${releaseInfo.version}`
+ );
+
+ await this.updatePlugin();
+
+ if (fs.existsSync(packageJsonPath)) {
+ const updatedPackageJsonContent = fs.readFileSync(
+ packageJsonPath,
+ "utf-8"
+ );
+ const updatedPackageJson = JSON.parse(updatedPackageJsonContent);
+ return {
+ exists: true,
+ outdated: false,
+ currentVersion: updatedPackageJson.version,
+ expectedVersion: releaseInfo.version,
+ };
+ }
+
+ return {
+ exists: true,
+ outdated: false,
+ currentVersion: releaseInfo.version,
+ expectedVersion: releaseInfo.version,
+ };
+ } else {
+ logger.log(`Hydra Decky plugin is up to date (${currentVersion})`);
+ }
+
+ return {
+ exists: true,
+ outdated: isOutdated,
+ currentVersion,
+ expectedVersion: releaseInfo.version,
+ };
+ } catch (error) {
+ logger.error(`Error checking Hydra Decky plugin version: ${error}`);
+ return {
+ exists: false,
+ outdated: true,
+ currentVersion: null,
+ expectedVersion: releaseInfo.version,
+ };
+ }
+ } catch (error) {
+ logger.error(`Error fetching release info: ${error}`);
+ return {
+ exists: false,
+ outdated: true,
+ currentVersion: null,
+ expectedVersion: "unknown",
+ };
+ }
+ }
+}
diff --git a/src/main/services/download/all-debrid.ts b/src/main/services/download/all-debrid.ts
deleted file mode 100644
index 05ee56c6..00000000
--- a/src/main/services/download/all-debrid.ts
+++ /dev/null
@@ -1,315 +0,0 @@
-import axios, { AxiosInstance } from "axios";
-import type { AllDebridUser } from "@types";
-import { logger } from "@main/services";
-
-interface AllDebridMagnetStatus {
- id: number;
- filename: string;
- size: number;
- status: string;
- statusCode: number;
- downloaded: number;
- uploaded: number;
- seeders: number;
- downloadSpeed: number;
- uploadSpeed: number;
- uploadDate: number;
- completionDate: number;
- links: Array<{
- link: string;
- filename: string;
- size: number;
- }>;
-}
-
-interface AllDebridError {
- code: string;
- message: string;
-}
-
-interface AllDebridDownloadUrl {
- link: string;
- size?: number;
- filename?: string;
-}
-
-export class AllDebridClient {
- private static instance: AxiosInstance;
- private static readonly baseURL = "https://api.alldebrid.com/v4";
-
- static authorize(apiKey: string) {
- logger.info("[AllDebrid] Authorizing with key:", apiKey ? "***" : "empty");
- this.instance = axios.create({
- baseURL: this.baseURL,
- params: {
- agent: "hydra",
- apikey: apiKey,
- },
- });
- }
-
- static async getUser() {
- try {
- const response = await this.instance.get<{
- status: string;
- data?: { user: AllDebridUser };
- error?: AllDebridError;
- }>("/user");
-
- logger.info("[AllDebrid] API Response:", response.data);
-
- if (response.data.status === "error") {
- const error = response.data.error;
- logger.error("[AllDebrid] API Error:", error);
- if (error?.code === "AUTH_MISSING_APIKEY") {
- return { error_code: "alldebrid_missing_key" };
- }
- if (error?.code === "AUTH_BAD_APIKEY") {
- return { error_code: "alldebrid_invalid_key" };
- }
- if (error?.code === "AUTH_BLOCKED") {
- return { error_code: "alldebrid_blocked" };
- }
- if (error?.code === "AUTH_USER_BANNED") {
- return { error_code: "alldebrid_banned" };
- }
- return { error_code: "alldebrid_unknown_error" };
- }
-
- if (!response.data.data?.user) {
- logger.error("[AllDebrid] No user data in response");
- return { error_code: "alldebrid_invalid_response" };
- }
-
- logger.info(
- "[AllDebrid] Successfully got user:",
- response.data.data.user.username
- );
- return { user: response.data.data.user };
- } catch (error: any) {
- logger.error("[AllDebrid] Request Error:", error);
- if (error.response?.data?.error) {
- return { error_code: "alldebrid_invalid_key" };
- }
- return { error_code: "alldebrid_network_error" };
- }
- }
-
- private static async uploadMagnet(magnet: string) {
- try {
- logger.info("[AllDebrid] Uploading magnet with params:", { magnet });
-
- const response = await this.instance.get("/magnet/upload", {
- params: {
- magnets: [magnet],
- },
- });
-
- logger.info(
- "[AllDebrid] Upload Magnet Raw Response:",
- JSON.stringify(response.data, null, 2)
- );
-
- if (response.data.status === "error") {
- throw new Error(response.data.error?.message || "Unknown error");
- }
-
- const magnetInfo = response.data.data.magnets[0];
- logger.info(
- "[AllDebrid] Magnet Info:",
- JSON.stringify(magnetInfo, null, 2)
- );
-
- if (magnetInfo.error) {
- throw new Error(magnetInfo.error.message);
- }
-
- return magnetInfo.id;
- } catch (error: any) {
- logger.error("[AllDebrid] Upload Magnet Error:", error);
- throw error;
- }
- }
-
- private static async checkMagnetStatus(
- magnetId: number
- ): Promise {
- try {
- logger.info("[AllDebrid] Checking magnet status for ID:", magnetId);
-
- const response = await this.instance.get(`/magnet/status`, {
- params: {
- id: magnetId,
- },
- });
-
- logger.info(
- "[AllDebrid] Check Magnet Status Raw Response:",
- JSON.stringify(response.data, null, 2)
- );
-
- if (!response.data) {
- throw new Error("No response data received");
- }
-
- if (response.data.status === "error") {
- throw new Error(response.data.error?.message || "Unknown error");
- }
-
- // Verificăm noua structură a răspunsului
- const magnetData = response.data.data?.magnets;
- if (!magnetData || typeof magnetData !== "object") {
- logger.error(
- "[AllDebrid] Invalid response structure:",
- JSON.stringify(response.data, null, 2)
- );
- throw new Error("Invalid magnet status response format");
- }
-
- // Convertim răspunsul în formatul așteptat
- const magnetStatus: AllDebridMagnetStatus = {
- id: magnetData.id,
- filename: magnetData.filename,
- size: magnetData.size,
- status: magnetData.status,
- statusCode: magnetData.statusCode,
- downloaded: magnetData.downloaded,
- uploaded: magnetData.uploaded,
- seeders: magnetData.seeders,
- downloadSpeed: magnetData.downloadSpeed,
- uploadSpeed: magnetData.uploadSpeed,
- uploadDate: magnetData.uploadDate,
- completionDate: magnetData.completionDate,
- links: magnetData.links.map((link) => ({
- link: link.link,
- filename: link.filename,
- size: link.size,
- })),
- };
-
- logger.info(
- "[AllDebrid] Magnet Status:",
- JSON.stringify(magnetStatus, null, 2)
- );
-
- return magnetStatus;
- } catch (error: any) {
- logger.error("[AllDebrid] Check Magnet Status Error:", error);
- throw error;
- }
- }
-
- private static async unlockLink(link: string) {
- try {
- const response = await this.instance.get<{
- status: string;
- data?: { link: string };
- error?: AllDebridError;
- }>("/link/unlock", {
- params: {
- link,
- },
- });
-
- if (response.data.status === "error") {
- throw new Error(response.data.error?.message || "Unknown error");
- }
-
- const unlockedLink = response.data.data?.link;
- if (!unlockedLink) {
- throw new Error("No download link received from AllDebrid");
- }
-
- return unlockedLink;
- } catch (error: any) {
- logger.error("[AllDebrid] Unlock Link Error:", error);
- throw error;
- }
- }
-
- public static async getDownloadUrls(
- uri: string
- ): Promise {
- try {
- logger.info("[AllDebrid] Getting download URLs for URI:", uri);
-
- if (uri.startsWith("magnet:")) {
- logger.info("[AllDebrid] Detected magnet link, uploading...");
- // 1. Upload magnet
- const magnetId = await this.uploadMagnet(uri);
- logger.info("[AllDebrid] Magnet uploaded, ID:", magnetId);
-
- // 2. Verificăm statusul până când avem link-uri
- let retries = 0;
- let magnetStatus: AllDebridMagnetStatus;
-
- do {
- magnetStatus = await this.checkMagnetStatus(magnetId);
- logger.info(
- "[AllDebrid] Magnet status:",
- magnetStatus.status,
- "statusCode:",
- magnetStatus.statusCode
- );
-
- if (magnetStatus.statusCode === 4) {
- // Ready
- // Deblocăm fiecare link în parte și aruncăm eroare dacă oricare eșuează
- const unlockedLinks = await Promise.all(
- magnetStatus.links.map(async (link) => {
- try {
- const unlockedLink = await this.unlockLink(link.link);
- logger.info(
- "[AllDebrid] Successfully unlocked link:",
- unlockedLink
- );
-
- return {
- link: unlockedLink,
- size: link.size,
- filename: link.filename,
- };
- } catch (error) {
- logger.error(
- "[AllDebrid] Failed to unlock link:",
- link.link,
- error
- );
- throw new Error("Failed to unlock all links");
- }
- })
- );
-
- logger.info(
- "[AllDebrid] Got unlocked download links:",
- unlockedLinks
- );
- console.log("[AllDebrid] FINAL LINKS →", unlockedLinks);
- return unlockedLinks;
- }
-
- if (retries++ > 30) {
- // Maximum 30 de încercări
- throw new Error("Timeout waiting for magnet to be ready");
- }
-
- await new Promise((resolve) => setTimeout(resolve, 2000)); // Așteptăm 2 secunde între verificări
- } while (magnetStatus.statusCode !== 4);
- } else {
- logger.info("[AllDebrid] Regular link, unlocking...");
- // Pentru link-uri normale, doar debridam link-ul
- const downloadUrl = await this.unlockLink(uri);
- logger.info("[AllDebrid] Got unlocked download URL:", downloadUrl);
- return [
- {
- link: downloadUrl,
- },
- ];
- }
- } catch (error: any) {
- logger.error("[AllDebrid] Get Download URLs Error:", error);
- throw error;
- }
- return []; // Add default return for TypeScript
- }
-}
diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts
index 7c256b51..4dcebbb0 100644
--- a/src/main/services/download/download-manager.ts
+++ b/src/main/services/download/download-manager.ts
@@ -17,7 +17,6 @@ import {
} from "./types";
import { calculateETA, getDirSize } from "./helpers";
import { RealDebridClient } from "./real-debrid";
-import { AllDebridClient } from "./all-debrid";
import path from "path";
import { logger } from "../logger";
import { db, downloadsSublevel, gamesSublevel, levelKeys } from "@main/level";
@@ -379,27 +378,6 @@ export class DownloadManager {
allow_multiple_connections: true,
};
}
- case Downloader.AllDebrid: {
- const downloadUrls = await AllDebridClient.getDownloadUrls(
- download.uri
- );
-
- if (!downloadUrls.length)
- throw new Error(DownloadError.NotCachedInAllDebrid);
-
- const totalSize = downloadUrls.reduce(
- (total, url) => total + (url.size || 0),
- 0
- );
-
- return {
- action: "start",
- game_id: downloadId,
- url: downloadUrls.map((d) => d.link),
- save_path: download.downloadPath,
- total_size: totalSize,
- };
- }
case Downloader.TorBox: {
const { name, url } = await TorBoxClient.getDownloadInfo(download.uri);
diff --git a/src/main/services/download/index.ts b/src/main/services/download/index.ts
index c28d560b..f4e2eddc 100644
--- a/src/main/services/download/index.ts
+++ b/src/main/services/download/index.ts
@@ -1,4 +1,3 @@
export * from "./download-manager";
export * from "./real-debrid";
-export * from "./all-debrid";
export * from "./torbox";
diff --git a/src/main/services/hydra-api.ts b/src/main/services/hydra-api.ts
index ef88b062..12090df3 100644
--- a/src/main/services/hydra-api.ts
+++ b/src/main/services/hydra-api.ts
@@ -12,7 +12,7 @@ import { db } from "@main/level";
import { levelKeys } from "@main/level/sublevels";
import type { Auth, User } from "@types";
-interface HydraApiOptions {
+export interface HydraApiOptions {
needsAuth?: boolean;
needsSubscription?: boolean;
ifModifiedSince?: Date;
@@ -46,7 +46,7 @@ export class HydraApi {
return this.userAuth.authToken !== "";
}
- private static hasActiveSubscription() {
+ public static hasActiveSubscription() {
const expiresAt = new Date(this.userAuth.subscription?.expiresAt ?? 0);
return expiresAt > new Date();
}
@@ -102,8 +102,12 @@ export class HydraApi {
WindowManager.mainWindow.webContents.send("on-signin");
await clearGamesRemoteIds();
uploadGamesBatch();
+
// WSClient.close();
// WSClient.connect();
+
+ const { syncDownloadSourcesFromApi } = await import("./user");
+ syncDownloadSourcesFromApi();
}
}
diff --git a/src/main/services/index.ts b/src/main/services/index.ts
index 727805c7..da4e6848 100644
--- a/src/main/services/index.ts
+++ b/src/main/services/index.ts
@@ -17,3 +17,5 @@ export * from "./system-path";
export * from "./library-sync";
export * from "./wine";
export * from "./lock";
+export * from "./decky-plugin";
+export * from "./user";
diff --git a/src/main/services/library-sync/merge-with-remote-games.ts b/src/main/services/library-sync/merge-with-remote-games.ts
index b5b2d551..c00e4961 100644
--- a/src/main/services/library-sync/merge-with-remote-games.ts
+++ b/src/main/services/library-sync/merge-with-remote-games.ts
@@ -22,7 +22,8 @@ export const mergeWithRemoteGames = async () => {
const updatedLastTimePlayed =
localGame.lastTimePlayed == null ||
(game.lastTimePlayed &&
- new Date(game.lastTimePlayed) > localGame.lastTimePlayed)
+ new Date(game.lastTimePlayed) >
+ new Date(localGame.lastTimePlayed))
? game.lastTimePlayed
: localGame.lastTimePlayed;
@@ -57,7 +58,11 @@ export const mergeWithRemoteGames = async () => {
});
}
+ const localGameShopAsset = await gamesShopAssetsSublevel.get(gameKey);
+
await gamesShopAssetsSublevel.put(gameKey, {
+ updatedAt: Date.now(),
+ ...localGameShopAsset,
shop: game.shop,
objectId: game.objectId,
title: localGame?.title || game.title, // Preserve local title if it exists
@@ -67,6 +72,7 @@ export const mergeWithRemoteGames = async () => {
logoImageUrl: game.logoImageUrl,
iconUrl: game.iconUrl,
logoPosition: game.logoPosition,
+ downloadSources: game.downloadSources,
});
}
})
diff --git a/src/main/services/notifications/index.ts b/src/main/services/notifications/index.ts
index fa9ac593..d28c3cd7 100644
--- a/src/main/services/notifications/index.ts
+++ b/src/main/services/notifications/index.ts
@@ -10,7 +10,7 @@ import icon from "@resources/icon.png?asset";
import { NotificationOptions, toXmlString } from "./xml";
import { logger } from "../logger";
import { WindowManager } from "../window-manager";
-import type { Game, GameStats, UserPreferences, UserProfile } from "@types";
+import type { Game, UserPreferences, UserProfile } from "@types";
import { db, levelKeys } from "@main/level";
import { restartAndInstallUpdate } from "@main/events/autoupdater/restart-and-install-update";
import { SystemPath } from "../system-path";
@@ -108,15 +108,14 @@ export const publishNewFriendRequestNotification = async (
};
export const publishFriendStartedPlayingGameNotification = async (
- friend: UserProfile,
- game: GameStats
+ friend: UserProfile
) => {
new Notification({
title: t("friend_started_playing_game", {
ns: "notifications",
displayName: friend.displayName,
}),
- body: game.assets?.title,
+ body: friend?.currentGame?.title,
icon: friend?.profileImageUrl
? await downloadImage(friend.profileImageUrl)
: trayIcon,
diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts
index 8c407ad5..6408c30d 100644
--- a/src/main/services/process-watcher.ts
+++ b/src/main/services/process-watcher.ts
@@ -1,10 +1,10 @@
import { WindowManager } from "./window-manager";
import { createGame, updateGamePlaytime } from "./library-sync";
-import type { Game, GameRunning } from "@types";
+import type { Game, GameRunning, UserPreferences } from "@types";
import { PythonRPC } from "./python-rpc";
import axios from "axios";
import { ProcessPayload } from "./download/types";
-import { gamesSublevel, levelKeys } from "@main/level";
+import { db, gamesSublevel, levelKeys } from "@main/level";
import { CloudSync } from "./cloud-sync";
import { logger } from "./logger";
import path from "path";
@@ -79,11 +79,18 @@ const findGamePathByProcess = async (
const executables = gameExecutables[gameId];
for (const executable of executables) {
- const pathSet = processMap.get(executable.exe);
+ const executablewithoutExtension = executable.exe.replace(/\.exe$/i, "");
+
+ const pathSet =
+ processMap.get(executable.exe) ??
+ processMap.get(executablewithoutExtension);
if (pathSet) {
for (const path of pathSet) {
- if (path.toLowerCase().endsWith(executable.name)) {
+ if (
+ path.toLowerCase().endsWith(executable.name) ||
+ path.toLowerCase().endsWith(executablewithoutExtension)
+ ) {
const gameKey = levelKeys.game("steam", gameId);
const game = await gamesSublevel.get(gameKey);
@@ -124,7 +131,6 @@ const getSystemProcessMap = async () => {
if (!key || !value) return;
const STEAM_COMPAT_DATA_PATH = process.environ?.STEAM_COMPAT_DATA_PATH;
-
if (STEAM_COMPAT_DATA_PATH) {
winePrefixMap.set(value, STEAM_COMPAT_DATA_PATH);
}
@@ -203,6 +209,17 @@ function onOpenGame(game: Game) {
lastSyncTick: now,
});
+ // Hide Hydra to tray on game startup if enabled
+ db.get(levelKeys.userPreferences, {
+ valueEncoding: "json",
+ })
+ .then((userPreferences) => {
+ if (userPreferences?.hideToTrayOnGameStart) {
+ WindowManager.mainWindow?.hide();
+ }
+ })
+ .catch(() => {});
+
if (game.remoteId) {
updateGamePlaytime(
game,
diff --git a/src/main/services/python-rpc.ts b/src/main/services/python-rpc.ts
index f3ce9f6c..2a1dce79 100644
--- a/src/main/services/python-rpc.ts
+++ b/src/main/services/python-rpc.ts
@@ -106,7 +106,7 @@ export class PythonRPC {
"main.py"
);
- const childProcess = cp.spawn("python3", [scriptPath, ...commonArgs], {
+ const childProcess = cp.spawn("python", [scriptPath, ...commonArgs], {
stdio: ["inherit", "inherit"],
});
diff --git a/src/main/services/steam.ts b/src/main/services/steam.ts
index bc867111..886772b5 100644
--- a/src/main/services/steam.ts
+++ b/src/main/services/steam.ts
@@ -19,7 +19,12 @@ export interface SteamAppDetailsResponse {
export const getSteamLocation = async () => {
if (process.platform === "linux") {
- return path.join(SystemPath.getPath("home"), ".local", "share", "Steam");
+ const possiblePaths = [
+ path.join(SystemPath.getPath("home"), ".steam", "steam"),
+ path.join(SystemPath.getPath("home"), ".local", "share", "Steam"),
+ ];
+
+ return possiblePaths.find((p) => fs.existsSync(p)) || possiblePaths[0];
}
if (process.platform === "darwin") {
@@ -76,7 +81,11 @@ export const getSteamAppDetails = async (
return null;
})
.catch((err) => {
- logger.error(err, { method: "getSteamAppDetails" });
+ logger.error("Error on getSteamAppDetails", {
+ message: err?.message,
+ code: err?.code,
+ name: err?.name,
+ });
return null;
});
};
diff --git a/src/main/services/user/get-user-data.ts b/src/main/services/user/get-user-data.ts
index d26c995d..6bf3fffc 100644
--- a/src/main/services/user/get-user-data.ts
+++ b/src/main/services/user/get-user-data.ts
@@ -8,58 +8,65 @@ import { levelKeys } from "@main/level/sublevels";
export const getUserData = async () => {
return HydraApi.get(`/profile/me`)
.then(async (me) => {
- db.get(levelKeys.user, { valueEncoding: "json" }).then(
- (user) => {
- return db.put(
- levelKeys.user,
- {
- ...user,
- id: me.id,
- displayName: me.displayName,
- profileImageUrl: me.profileImageUrl,
- backgroundImageUrl: me.backgroundImageUrl,
- subscription: me.subscription,
- },
- { valueEncoding: "json" }
- );
- }
- );
-
+ try {
+ const user = await db.get(levelKeys.user, {
+ valueEncoding: "json",
+ });
+ await db.put(
+ levelKeys.user,
+ {
+ ...user,
+ id: me.id,
+ displayName: me.displayName,
+ profileImageUrl: me.profileImageUrl,
+ backgroundImageUrl: me.backgroundImageUrl,
+ subscription: me.subscription,
+ },
+ { valueEncoding: "json" }
+ );
+ } catch (error) {
+ logger.error("Failed to update user in DB", error);
+ }
return me;
})
.catch(async (err) => {
if (err instanceof UserNotLoggedInError) {
return null;
}
- logger.error("Failed to get logged user");
- const loggedUser = await db.get(levelKeys.user, {
- valueEncoding: "json",
- });
+ logger.error("Failed to get logged user", err);
- if (loggedUser) {
- return {
- ...loggedUser,
- username: "",
- bio: "",
- email: null,
- profileVisibility: "PUBLIC" as ProfileVisibility,
- quirks: {
- backupsPerGameLimit: 0,
- },
- subscription: loggedUser.subscription
- ? {
- id: loggedUser.subscription.id,
- status: loggedUser.subscription.status,
- plan: {
- id: loggedUser.subscription.plan.id,
- name: loggedUser.subscription.plan.name,
- },
- expiresAt: loggedUser.subscription.expiresAt,
- }
- : null,
- featurebaseJwt: "",
- } as UserDetails;
+ try {
+ const loggedUser = await db.get(levelKeys.user, {
+ valueEncoding: "json",
+ });
+
+ if (loggedUser) {
+ return {
+ ...loggedUser,
+ username: "",
+ bio: "",
+ email: null,
+ profileVisibility: "PUBLIC" as ProfileVisibility,
+ quirks: {
+ backupsPerGameLimit: 0,
+ },
+ subscription: loggedUser.subscription
+ ? {
+ id: loggedUser.subscription.id,
+ status: loggedUser.subscription.status,
+ plan: {
+ id: loggedUser.subscription.plan.id,
+ name: loggedUser.subscription.plan.name,
+ },
+ expiresAt: loggedUser.subscription.expiresAt,
+ }
+ : null,
+ featurebaseJwt: "",
+ } as UserDetails;
+ }
+ } catch (dbError) {
+ logger.error("Failed to read user from DB", dbError);
}
return null;
diff --git a/src/main/services/user/index.ts b/src/main/services/user/index.ts
new file mode 100644
index 00000000..b1d8c9b7
--- /dev/null
+++ b/src/main/services/user/index.ts
@@ -0,0 +1,2 @@
+export * from "./get-user-data";
+export * from "./sync-download-sources";
diff --git a/src/main/services/user/sync-download-sources.ts b/src/main/services/user/sync-download-sources.ts
new file mode 100644
index 00000000..ff9819ce
--- /dev/null
+++ b/src/main/services/user/sync-download-sources.ts
@@ -0,0 +1,41 @@
+import { HydraApi, logger } from "../";
+import { downloadSourcesSublevel } from "@main/level";
+import type { DownloadSource } from "@types";
+
+export const syncDownloadSourcesFromApi = async () => {
+ if (!HydraApi.isLoggedIn() || !HydraApi.hasActiveSubscription()) {
+ return;
+ }
+
+ try {
+ const profileSources = await HydraApi.get(
+ "/profile/download-sources"
+ );
+
+ const existingSources = await downloadSourcesSublevel.values().all();
+ const existingUrls = new Set(existingSources.map((source) => source.url));
+
+ for (const downloadSource of profileSources) {
+ if (!existingUrls.has(downloadSource.url)) {
+ try {
+ await downloadSourcesSublevel.put(downloadSource.id, {
+ ...downloadSource,
+ isRemote: true,
+ createdAt: new Date().toISOString(),
+ });
+
+ logger.log(
+ `Synced download source from profile: ${downloadSource.url}`
+ );
+ } catch (error) {
+ logger.error(
+ `Failed to sync download source ${downloadSource.url}:`,
+ error
+ );
+ }
+ }
+ }
+ } catch (error) {
+ logger.error("Failed to sync download sources from API:", error);
+ }
+};
diff --git a/src/main/services/window-manager.ts b/src/main/services/window-manager.ts
index 70ff130e..673bf1a0 100644
--- a/src/main/services/window-manager.ts
+++ b/src/main/services/window-manager.ts
@@ -25,6 +25,7 @@ import type {
} from "@types";
import { AuthPage, generateAchievementCustomNotificationTest } from "@shared";
import { isStaging } from "@main/constants";
+import { logger } from "./logger";
export class WindowManager {
public static mainWindow: Electron.BrowserWindow | null = null;
@@ -54,20 +55,41 @@ export class WindowManager {
show: false,
};
- private static loadMainWindowURL(hash = "") {
+ private static formatVersionNumber(version: string) {
+ return version.replaceAll(".", "-");
+ }
+
+ private static async loadWindowURL(window: BrowserWindow, hash: string = "") {
// HMR for renderer base on electron-vite cli.
// Load the remote URL for development or the local html file for production.
if (is.dev && process.env["ELECTRON_RENDERER_URL"]) {
- this.mainWindow?.loadURL(
- `${process.env["ELECTRON_RENDERER_URL"]}#/${hash}`
- );
- } else {
- this.mainWindow?.loadFile(
- path.join(__dirname, "../renderer/index.html"),
- {
+ window.loadURL(`${process.env["ELECTRON_RENDERER_URL"]}#/${hash}`);
+ } else if (import.meta.env.MAIN_VITE_LAUNCHER_SUBDOMAIN) {
+ // Try to load from remote URL in production
+ try {
+ await window.loadURL(
+ `https://release-v${this.formatVersionNumber(app.getVersion())}.${import.meta.env.MAIN_VITE_LAUNCHER_SUBDOMAIN}#/${hash}`
+ );
+ } catch (error) {
+ // Fall back to local file if remote URL fails
+ logger.error(
+ "Failed to load from MAIN_VITE_LAUNCHER_SUBDOMAIN, falling back to local file:",
+ error
+ );
+ window.loadFile(path.join(__dirname, "../renderer/index.html"), {
hash,
- }
- );
+ });
+ }
+ } else {
+ window.loadFile(path.join(__dirname, "../renderer/index.html"), {
+ hash,
+ });
+ }
+ }
+
+ private static async loadMainWindowURL(hash: string = "") {
+ if (this.mainWindow) {
+ await this.loadWindowURL(this.mainWindow, hash);
}
}
@@ -268,17 +290,8 @@ export class WindowManager {
}
private static loadNotificationWindowURL() {
- if (is.dev && process.env["ELECTRON_RENDERER_URL"]) {
- this.notificationWindow?.loadURL(
- `${process.env["ELECTRON_RENDERER_URL"]}#/achievement-notification`
- );
- } else {
- this.notificationWindow?.loadFile(
- path.join(__dirname, "../renderer/index.html"),
- {
- hash: "achievement-notification",
- }
- );
+ if (this.notificationWindow) {
+ this.loadWindowURL(this.notificationWindow, "achievement-notification");
}
}
@@ -450,15 +463,7 @@ export class WindowManager {
editorWindow.removeMenu();
- if (is.dev && process.env["ELECTRON_RENDERER_URL"]) {
- editorWindow.loadURL(
- `${process.env["ELECTRON_RENDERER_URL"]}#/theme-editor?themeId=${themeId}`
- );
- } else {
- editorWindow.loadFile(path.join(__dirname, "../renderer/index.html"), {
- hash: `theme-editor?themeId=${themeId}`,
- });
- }
+ this.loadWindowURL(editorWindow, `theme-editor?themeId=${themeId}`);
editorWindow.once("ready-to-show", () => {
editorWindow.show();
diff --git a/src/main/services/ws/events/friend-game-session.ts b/src/main/services/ws/events/friend-game-session.ts
index 67967b3c..b089c421 100644
--- a/src/main/services/ws/events/friend-game-session.ts
+++ b/src/main/services/ws/events/friend-game-session.ts
@@ -2,7 +2,7 @@ import type { FriendGameSession } from "@main/generated/envelope";
import { db, levelKeys } from "@main/level";
import { HydraApi } from "@main/services/hydra-api";
import { publishFriendStartedPlayingGameNotification } from "@main/services/notifications";
-import type { GameStats, UserPreferences, UserProfile } from "@types";
+import type { UserPreferences, UserProfile } from "@types";
export const friendGameSessionEvent = async (payload: FriendGameSession) => {
const userPreferences = await db.get(
@@ -14,12 +14,9 @@ export const friendGameSessionEvent = async (payload: FriendGameSession) => {
if (userPreferences?.friendStartGameNotificationsEnabled === false) return;
- const [friend, gameStats] = await Promise.all([
- HydraApi.get(`/users/${payload.friendId}`),
- HydraApi.get(`/games/steam/${payload.objectId}/stats`),
- ]).catch(() => [null, null]);
+ const friend = await HydraApi.get(`/users/${payload.friendId}`);
- if (friend && gameStats) {
- publishFriendStartedPlayingGameNotification(friend, gameStats);
+ if (friend) {
+ publishFriendStartedPlayingGameNotification(friend);
}
};
diff --git a/src/main/vite-env.d.ts b/src/main/vite-env.d.ts
index 69ba99fb..7b0ed536 100644
--- a/src/main/vite-env.d.ts
+++ b/src/main/vite-env.d.ts
@@ -7,6 +7,8 @@ interface ImportMetaEnv {
readonly MAIN_VITE_CHECKOUT_URL: string;
readonly MAIN_VITE_EXTERNAL_RESOURCES_URL: string;
readonly MAIN_VITE_WS_URL: string;
+ readonly MAIN_VITE_LAUNCHER_SUBDOMAIN: string;
+ readonly ELECTRON_RENDERER_URL: string;
}
interface ImportMeta {
diff --git a/src/preload/index.ts b/src/preload/index.ts
index cb41e176..f89ec4db 100644
--- a/src/preload/index.ts
+++ b/src/preload/index.ts
@@ -11,17 +11,15 @@ import type {
GameRunning,
FriendRequestAction,
UpdateProfileRequest,
- CatalogueSearchPayload,
SeedingStatus,
GameAchievement,
Theme,
FriendRequestSync,
ShortcutLocation,
- ShopAssets,
AchievementCustomNotificationPosition,
AchievementNotificationInfo,
} from "@types";
-import type { AuthPage, CatalogueCategory } from "@shared";
+import type { AuthPage } from "@shared";
import type { AxiosProgressEvent } from "axios";
contextBridge.exposeInMainWorld("electron", {
@@ -63,20 +61,13 @@ contextBridge.exposeInMainWorld("electron", {
ipcRenderer.invoke("checkDebridAvailability", magnets),
/* Catalogue */
- searchGames: (payload: CatalogueSearchPayload, take: number, skip: number) =>
- ipcRenderer.invoke("searchGames", payload, take, skip),
- getCatalogue: (category: CatalogueCategory) =>
- ipcRenderer.invoke("getCatalogue", category),
- saveGameShopAssets: (objectId: string, shop: GameShop, assets: ShopAssets) =>
- ipcRenderer.invoke("saveGameShopAssets", objectId, shop, assets),
getGameShopDetails: (objectId: string, shop: GameShop, language: string) =>
ipcRenderer.invoke("getGameShopDetails", objectId, shop, language),
getRandomGame: () => ipcRenderer.invoke("getRandomGame"),
- getHowLongToBeat: (objectId: string, shop: GameShop) =>
- ipcRenderer.invoke("getHowLongToBeat", objectId, shop),
getGameStats: (objectId: string, shop: GameShop) =>
ipcRenderer.invoke("getGameStats", objectId, shop),
- getTrendingGames: () => ipcRenderer.invoke("getTrendingGames"),
+ getGameAssets: (objectId: string, shop: GameShop) =>
+ ipcRenderer.invoke("getGameAssets", objectId, shop),
onUpdateAchievements: (
objectId: string,
shop: GameShop,
@@ -102,19 +93,16 @@ contextBridge.exposeInMainWorld("electron", {
ipcRenderer.invoke("autoLaunch", autoLaunchProps),
authenticateRealDebrid: (apiToken: string) =>
ipcRenderer.invoke("authenticateRealDebrid", apiToken),
- authenticateAllDebrid: (apiKey: string) =>
- ipcRenderer.invoke("authenticateAllDebrid", apiKey),
authenticateTorBox: (apiToken: string) =>
ipcRenderer.invoke("authenticateTorBox", apiToken),
/* Download sources */
- putDownloadSource: (objectIds: string[]) =>
- ipcRenderer.invoke("putDownloadSource", objectIds),
- createDownloadSources: (urls: string[]) =>
- ipcRenderer.invoke("createDownloadSources", urls),
+ addDownloadSource: (url: string) =>
+ ipcRenderer.invoke("addDownloadSource", url),
removeDownloadSource: (url: string, removeAll?: boolean) =>
ipcRenderer.invoke("removeDownloadSource", url, removeAll),
getDownloadSources: () => ipcRenderer.invoke("getDownloadSources"),
+ syncDownloadSources: () => ipcRenderer.invoke("syncDownloadSources"),
/* Library */
toggleAutomaticCloudSync: (
@@ -286,10 +274,6 @@ contextBridge.exposeInMainWorld("electron", {
downloadOptionTitle: string | null
) =>
ipcRenderer.invoke("uploadSaveGame", objectId, shop, downloadOptionTitle),
- toggleArtifactFreeze: (gameArtifactId: string, freeze: boolean) =>
- ipcRenderer.invoke("toggleArtifactFreeze", gameArtifactId, freeze),
- renameGameArtifact: (gameArtifactId: string, label: string) =>
- ipcRenderer.invoke("renameGameArtifact", gameArtifactId, label),
downloadGameArtifact: (
objectId: string,
shop: GameShop,
@@ -300,8 +284,6 @@ contextBridge.exposeInMainWorld("electron", {
ipcRenderer.invoke("getGameArtifacts", objectId, shop),
getGameBackupPreview: (objectId: string, shop: GameShop) =>
ipcRenderer.invoke("getGameBackupPreview", objectId, shop),
- deleteGameArtifact: (gameArtifactId: string) =>
- ipcRenderer.invoke("deleteGameArtifact", gameArtifactId),
selectGameBackupPath: (
shop: GameShop,
objectId: string,
@@ -358,10 +340,99 @@ contextBridge.exposeInMainWorld("electron", {
ipcRenderer.invoke("showOpenDialog", options),
showItemInFolder: (path: string) =>
ipcRenderer.invoke("showItemInFolder", path),
- getFeatures: () => ipcRenderer.invoke("getFeatures"),
- getBadges: () => ipcRenderer.invoke("getBadges"),
+ hydraApi: {
+ get: (
+ url: string,
+ options?: {
+ params?: unknown;
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ ifModifiedSince?: Date;
+ }
+ ) =>
+ ipcRenderer.invoke("hydraApiCall", {
+ method: "get",
+ url,
+ params: options?.params,
+ options: {
+ needsAuth: options?.needsAuth,
+ needsSubscription: options?.needsSubscription,
+ ifModifiedSince: options?.ifModifiedSince,
+ },
+ }),
+ post: (
+ url: string,
+ options?: {
+ data?: unknown;
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ }
+ ) =>
+ ipcRenderer.invoke("hydraApiCall", {
+ method: "post",
+ url,
+ data: options?.data,
+ options: {
+ needsAuth: options?.needsAuth,
+ needsSubscription: options?.needsSubscription,
+ },
+ }),
+ put: (
+ url: string,
+ options?: {
+ data?: unknown;
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ }
+ ) =>
+ ipcRenderer.invoke("hydraApiCall", {
+ method: "put",
+ url,
+ data: options?.data,
+ options: {
+ needsAuth: options?.needsAuth,
+ needsSubscription: options?.needsSubscription,
+ },
+ }),
+ patch: (
+ url: string,
+ options?: {
+ data?: unknown;
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ }
+ ) =>
+ ipcRenderer.invoke("hydraApiCall", {
+ method: "patch",
+ url,
+ data: options?.data,
+ options: {
+ needsAuth: options?.needsAuth,
+ needsSubscription: options?.needsSubscription,
+ },
+ }),
+ delete: (
+ url: string,
+ options?: {
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ }
+ ) =>
+ ipcRenderer.invoke("hydraApiCall", {
+ method: "delete",
+ url,
+ options: {
+ needsAuth: options?.needsAuth,
+ needsSubscription: options?.needsSubscription,
+ },
+ }),
+ },
canInstallCommonRedist: () => ipcRenderer.invoke("canInstallCommonRedist"),
installCommonRedist: () => ipcRenderer.invoke("installCommonRedist"),
+ installHydraDeckyPlugin: () => ipcRenderer.invoke("installHydraDeckyPlugin"),
+ getHydraDeckyPluginInfo: () => ipcRenderer.invoke("getHydraDeckyPluginInfo"),
+ checkHomebrewFolderExists: () =>
+ ipcRenderer.invoke("checkHomebrewFolderExists"),
platform: process.platform,
/* Auto update */
@@ -392,13 +463,10 @@ contextBridge.exposeInMainWorld("electron", {
/* Profile */
getMe: () => ipcRenderer.invoke("getMe"),
- undoFriendship: (userId: string) =>
- ipcRenderer.invoke("undoFriendship", userId),
updateProfile: (updateProfile: UpdateProfileRequest) =>
ipcRenderer.invoke("updateProfile", updateProfile),
processProfileImage: (imagePath: string) =>
ipcRenderer.invoke("processProfileImage", imagePath),
- getFriendRequests: () => ipcRenderer.invoke("getFriendRequests"),
syncFriendRequests: () => ipcRenderer.invoke("syncFriendRequests"),
onSyncFriendRequests: (cb: (friendRequests: FriendRequestSync) => void) => {
const listener = (
@@ -411,26 +479,8 @@ contextBridge.exposeInMainWorld("electron", {
},
updateFriendRequest: (userId: string, action: FriendRequestAction) =>
ipcRenderer.invoke("updateFriendRequest", userId, action),
- sendFriendRequest: (userId: string) =>
- ipcRenderer.invoke("sendFriendRequest", userId),
/* User */
- getUser: (userId: string) => ipcRenderer.invoke("getUser", userId),
- getUserLibrary: (
- userId: string,
- take?: number,
- skip?: number,
- sortBy?: string
- ) => ipcRenderer.invoke("getUserLibrary", userId, take, skip, sortBy),
- blockUser: (userId: string) => ipcRenderer.invoke("blockUser", userId),
- unblockUser: (userId: string) => ipcRenderer.invoke("unblockUser", userId),
- getUserFriends: (userId: string, take: number, skip: number) =>
- ipcRenderer.invoke("getUserFriends", userId, take, skip),
- getBlockedUsers: (take: number, skip: number) =>
- ipcRenderer.invoke("getBlockedUsers", take, skip),
- getUserStats: (userId: string) => ipcRenderer.invoke("getUserStats", userId),
- reportUser: (userId: string, reason: string, description: string) =>
- ipcRenderer.invoke("reportUser", userId, reason, description),
getComparedUnlockedAchievements: (
objectId: string,
shop: GameShop,
diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx
index 7cd6eaa4..168a4435 100644
--- a/src/renderer/src/app.tsx
+++ b/src/renderer/src/app.tsx
@@ -7,7 +7,6 @@ import {
useAppSelector,
useDownload,
useLibrary,
- useRepacks,
useToast,
useUserDetails,
} from "@renderer/hooks";
@@ -23,8 +22,6 @@ import {
} from "@renderer/features";
import { useTranslation } from "react-i18next";
import { UserFriendModal } from "./pages/shared-modals/user-friend-modal";
-import { downloadSourcesWorker } from "./workers";
-import { downloadSourcesTable } from "./dexie";
import { useSubscription } from "./hooks/use-subscription";
import { HydraCloudModal } from "./pages/shared-modals/hydra-cloud/hydra-cloud-modal";
@@ -41,8 +38,6 @@ export function App() {
const { t } = useTranslation("app");
- const { updateRepacks } = useRepacks();
-
const { clearDownload, setLastPacket } = useDownload();
const {
@@ -136,15 +131,6 @@ export function App() {
}, [fetchUserDetails, updateUserDetails, dispatch]);
const onSignIn = useCallback(() => {
- window.electron.getDownloadSources().then((sources) => {
- sources.forEach((source) => {
- downloadSourcesWorker.postMessage([
- "IMPORT_DOWNLOAD_SOURCE",
- source.url,
- ]);
- });
- });
-
fetchUserDetails().then((response) => {
if (response) {
updateUserDetails(response);
@@ -209,43 +195,6 @@ export function App() {
});
}, [dispatch, draggingDisabled]);
- useEffect(() => {
- updateRepacks();
-
- const id = crypto.randomUUID();
- const channel = new BroadcastChannel(`download_sources:sync:${id}`);
-
- channel.onmessage = async (event: MessageEvent) => {
- const newRepacksCount = event.data;
- window.electron.publishNewRepacksNotification(newRepacksCount);
- updateRepacks();
-
- const downloadSources = await downloadSourcesTable.toArray();
-
- await Promise.all(
- downloadSources
- .filter((source) => !source.fingerprint)
- .map(async (downloadSource) => {
- const { fingerprint } = await window.electron.putDownloadSource(
- downloadSource.objectIds
- );
-
- return downloadSourcesTable.update(downloadSource.id, {
- fingerprint,
- });
- })
- );
-
- channel.close();
- };
-
- downloadSourcesWorker.postMessage(["SYNC_DOWNLOAD_SOURCES", id]);
-
- return () => {
- channel.close();
- };
- }, [updateRepacks]);
-
const loadAndApplyTheme = useCallback(async () => {
const activeTheme = await window.electron.getActiveCustomTheme();
if (activeTheme?.code) {
diff --git a/src/renderer/src/assets/icons/decky.png b/src/renderer/src/assets/icons/decky.png
new file mode 100644
index 00000000..205552dd
Binary files /dev/null and b/src/renderer/src/assets/icons/decky.png differ
diff --git a/src/renderer/src/components/achievements/notification/achievement-notification.scss b/src/renderer/src/components/achievements/notification/achievement-notification.scss
index 0a41782e..090c91c4 100644
--- a/src/renderer/src/components/achievements/notification/achievement-notification.scss
+++ b/src/renderer/src/components/achievements/notification/achievement-notification.scss
@@ -302,7 +302,8 @@ $margin-bottom: 28px;
}
&--rare &__trophy-overlay {
- background: linear-gradient(
+ background:
+ linear-gradient(
118deg,
#e8ad15 18.96%,
#d5900f 26.41%,
diff --git a/src/renderer/src/components/confirm-modal/confirm-modal.scss b/src/renderer/src/components/confirm-modal/confirm-modal.scss
deleted file mode 100644
index e5bda187..00000000
--- a/src/renderer/src/components/confirm-modal/confirm-modal.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-@use "../../scss/globals.scss";
-
-.confirm-modal {
- &__actions {
- display: flex;
- width: 100%;
- justify-content: flex-end;
- align-items: center;
- gap: globals.$spacing-unit;
- }
-}
diff --git a/src/renderer/src/components/confirm-modal/confirm-modal.tsx b/src/renderer/src/components/confirm-modal/confirm-modal.tsx
deleted file mode 100644
index d210c035..00000000
--- a/src/renderer/src/components/confirm-modal/confirm-modal.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { useTranslation } from "react-i18next";
-import { Button, Modal } from "@renderer/components";
-import "./confirm-modal.scss";
-
-export interface ConfirmModalProps {
- visible: boolean;
- title: string;
- description?: string;
- onClose: () => void;
- onConfirm: () => Promise | void;
- confirmLabel?: string;
- cancelLabel?: string;
- confirmTheme?: "primary" | "outline" | "danger";
- confirmDisabled?: boolean;
-}
-
-export function ConfirmModal({
- visible,
- title,
- description,
- onClose,
- onConfirm,
- confirmLabel,
- cancelLabel,
- confirmTheme = "outline",
- confirmDisabled = false,
-}: ConfirmModalProps) {
- const { t } = useTranslation();
-
- const handleConfirm = async () => {
- await onConfirm();
- onClose();
- };
-
- return (
-
-
-
-
-
-
-
- );
-}
diff --git a/src/renderer/src/components/confirmation-modal/confirmation-modal.scss b/src/renderer/src/components/confirmation-modal/confirmation-modal.scss
index 428818c4..7689ebcd 100644
--- a/src/renderer/src/components/confirmation-modal/confirmation-modal.scss
+++ b/src/renderer/src/components/confirmation-modal/confirmation-modal.scss
@@ -8,7 +8,7 @@
&__actions {
display: flex;
align-self: flex-end;
- gap: calc(globals.$spacing-unit * 2);
+ gap: globals.$spacing-unit;
}
&__description {
font-size: 16px;
diff --git a/src/renderer/src/components/confirmation-modal/confirmation-modal.tsx b/src/renderer/src/components/confirmation-modal/confirmation-modal.tsx
index 63256935..f81453fa 100644
--- a/src/renderer/src/components/confirmation-modal/confirmation-modal.tsx
+++ b/src/renderer/src/components/confirmation-modal/confirmation-modal.tsx
@@ -42,7 +42,7 @@ export function ConfirmationModal({
{cancelButtonLabel}
- {uniqueRepackers.length > 0 ? (
+ {game.downloadSources.length > 0 ? (
- {firstThreeRepackers.map((repacker) => (
- -
- {repacker}
+ {game.downloadSources.slice(0, 3).map((sourceName) => (
+
-
+ {sourceName}
))}
- {remainingCount > 0 && (
+ {game.downloadSources.length > 3 && (
-
- +{remainingCount}{" "}
- {t("game_card:available", { count: remainingCount })}
+ +{game.downloadSources.length - 3}{" "}
+ {t("game_card:available", {
+ count: game.downloadSources.length - 3,
+ })}
)}
@@ -107,6 +94,9 @@ export function GameCard({ game, ...props }: GameCardProps) {
{stats ? numberFormatter.format(stats.playerCount) : "…"}
+
+
+
diff --git a/src/renderer/src/components/game-context-menu/game-context-menu.tsx b/src/renderer/src/components/game-context-menu/game-context-menu.tsx
index bb341a3a..694012b7 100644
--- a/src/renderer/src/components/game-context-menu/game-context-menu.tsx
+++ b/src/renderer/src/components/game-context-menu/game-context-menu.tsx
@@ -14,9 +14,13 @@ import {
} from "@primer/octicons-react";
import SteamLogo from "@renderer/assets/steam-logo.svg?react";
import { LibraryGame } from "@types";
-import { ContextMenu, ContextMenuItemData, ContextMenuProps } from "..";
-import { ConfirmModal } from "@renderer/components/confirm-modal/confirm-modal";
-import { useGameActions } from "..";
+import {
+ ContextMenu,
+ ContextMenuItemData,
+ ContextMenuProps,
+ ConfirmationModal,
+ useGameActions,
+} from "..";
interface GameContextMenuProps extends Omit {
game: LibraryGame;
@@ -36,9 +40,11 @@ export function GameContextMenu({
canPlay,
isDeleting,
isGameDownloading,
+ isGameRunning,
hasRepacks,
shouldShowCreateStartMenuShortcut,
handlePlayGame,
+ handleCloseGame,
handleToggleFavorite,
handleCreateShortcut,
handleCreateSteamShortcut,
@@ -53,10 +59,20 @@ export function GameContextMenu({
const items: ContextMenuItemData[] = [
{
id: "play",
- label: canPlay ? t("play") : t("download"),
- icon: canPlay ? : ,
+ label: isGameRunning ? t("close") : canPlay ? t("play") : t("download"),
+ icon: isGameRunning ? (
+
+ ) : canPlay ? (
+
+ ) : (
+
+ ),
onClick: () => {
- void handlePlayGame();
+ if (isGameRunning) {
+ void handleCloseGame();
+ } else {
+ void handlePlayGame();
+ }
},
disabled: isDeleting,
},
@@ -195,36 +211,40 @@ export function GameContextMenu({
}
/>
- {
setShowConfirmRemoveLibrary(false);
onClose();
}}
onConfirm={async () => {
+ setShowConfirmRemoveLibrary(false);
+ onClose();
await handleRemoveFromLibrary();
}}
- confirmLabel={t("remove")}
- cancelLabel={t("cancel")}
- confirmTheme="danger"
+ cancelButtonLabel={t("cancel")}
+ confirmButtonLabel={t("remove")}
/>
- {
setShowConfirmRemoveFiles(false);
onClose();
}}
onConfirm={async () => {
+ setShowConfirmRemoveFiles(false);
+ onClose();
await handleRemoveFiles();
}}
- confirmLabel={t("remove")}
- cancelLabel={t("cancel")}
- confirmTheme="danger"
+ cancelButtonLabel={t("cancel")}
+ confirmButtonLabel={t("remove")}
/>
>
);
diff --git a/src/renderer/src/components/game-context-menu/use-game-actions.ts b/src/renderer/src/components/game-context-menu/use-game-actions.ts
index 042b796b..c7224225 100644
--- a/src/renderer/src/components/game-context-menu/use-game-actions.ts
+++ b/src/renderer/src/components/game-context-menu/use-game-actions.ts
@@ -1,4 +1,4 @@
-import { useState } from "react";
+import { useState, useEffect } from "react";
import { useTranslation } from "react-i18next";
import { LibraryGame, ShortcutLocation } from "@types";
import { useDownload, useLibrary, useToast } from "@renderer/hooks";
@@ -21,6 +21,7 @@ export function useGameActions(game: LibraryGame) {
} = useDownload();
const [creatingSteamShortcut, setCreatingSteamShortcut] = useState(false);
+ const [isGameRunning, setIsGameRunning] = useState(false);
const canPlay = Boolean(game.executablePath);
const isDeleting = isGameDeleting(game.id);
@@ -30,6 +31,20 @@ export function useGameActions(game: LibraryGame) {
const shouldShowCreateStartMenuShortcut =
window.electron.platform === "win32";
+ useEffect(() => {
+ const unsubscribe = window.electron.onGamesRunning((gamesIds) => {
+ const updatedIsGameRunning =
+ !!game?.id &&
+ !!gamesIds.find((gameRunning) => gameRunning.id == game.id);
+
+ setIsGameRunning(updatedIsGameRunning);
+ });
+
+ return () => {
+ unsubscribe();
+ };
+ }, [game?.id]);
+
const handlePlayGame = async () => {
if (!canPlay) {
const path = buildGameDetailsPath({
@@ -75,6 +90,15 @@ export function useGameActions(game: LibraryGame) {
}
};
+ const handleCloseGame = async () => {
+ try {
+ await window.electron.closeGame(game.shop, game.objectId);
+ } catch (error) {
+ showErrorToast("Failed to close game");
+ logger.error("Failed to close game", error);
+ }
+ };
+
const handleToggleFavorite = async () => {
try {
if (game.favorite) {
@@ -239,10 +263,12 @@ export function useGameActions(game: LibraryGame) {
canPlay,
isDeleting,
isGameDownloading,
+ isGameRunning,
hasRepacks,
shouldShowCreateStartMenuShortcut,
creatingSteamShortcut,
handlePlayGame,
+ handleCloseGame,
handleToggleFavorite,
handleCreateShortcut,
handleCreateSteamShortcut,
diff --git a/src/renderer/src/components/hero/hero.tsx b/src/renderer/src/components/hero/hero.tsx
index ce73d144..a1e36719 100644
--- a/src/renderer/src/components/hero/hero.tsx
+++ b/src/renderer/src/components/hero/hero.tsx
@@ -18,10 +18,18 @@ export function Hero() {
useEffect(() => {
setIsLoading(true);
- window.electron
- .getTrendingGames()
+ const language = i18n.language.split("-")[0];
+
+ window.electron.hydraApi
+ .get("/catalogue/featured", {
+ params: { language },
+ needsAuth: false,
+ })
.then((result) => {
- setFeaturedGameDetails(result);
+ setFeaturedGameDetails(result.slice(0, 1));
+ })
+ .catch(() => {
+ setFeaturedGameDetails([]);
})
.finally(() => {
setIsLoading(false);
diff --git a/src/renderer/src/components/index.ts b/src/renderer/src/components/index.ts
index 9970be42..89dccdbc 100644
--- a/src/renderer/src/components/index.ts
+++ b/src/renderer/src/components/index.ts
@@ -18,3 +18,4 @@ export * from "./debrid-badge/debrid-badge";
export * from "./context-menu/context-menu";
export * from "./game-context-menu/game-context-menu";
export * from "./game-context-menu/use-game-actions";
+export * from "./star-rating/star-rating";
diff --git a/src/renderer/src/components/sidebar/sidebar-adding-custom-game-modal.scss b/src/renderer/src/components/sidebar/sidebar-adding-custom-game-modal.scss
index 942384fe..1a8ca315 100644
--- a/src/renderer/src/components/sidebar/sidebar-adding-custom-game-modal.scss
+++ b/src/renderer/src/components/sidebar/sidebar-adding-custom-game-modal.scss
@@ -5,10 +5,7 @@
display: flex;
flex-direction: column;
gap: calc(globals.$spacing-unit * 3);
- width: 100%;
- max-width: 500px;
- margin: 0 auto;
- text-align: center;
+ min-width: 500px;
}
&__form {
diff --git a/src/renderer/src/components/sidebar/sidebar.scss b/src/renderer/src/components/sidebar/sidebar.scss
index 0fec7c30..49f6e007 100644
--- a/src/renderer/src/components/sidebar/sidebar.scss
+++ b/src/renderer/src/components/sidebar/sidebar.scss
@@ -71,6 +71,23 @@
opacity: 1;
}
}
+
+ &--decky {
+ background: linear-gradient(
+ 135deg,
+ rgba(22, 177, 149, 0.2) 0%,
+ rgba(62, 98, 192, 0.1) 100%
+ );
+ color: globals.$muted-color;
+
+ &:hover {
+ background: linear-gradient(
+ 135deg,
+ rgba(22, 177, 149, 0.3) 0%,
+ rgba(62, 98, 192, 0.15) 100%
+ );
+ }
+ }
}
&__menu-item-button {
@@ -123,6 +140,11 @@
padding-bottom: globals.$spacing-unit;
}
+ &__bottom-buttons {
+ display: flex;
+ flex-direction: column;
+ }
+
&__help-button {
color: globals.$muted-color;
padding: globals.$spacing-unit calc(globals.$spacing-unit * 2);
diff --git a/src/renderer/src/components/sidebar/sidebar.tsx b/src/renderer/src/components/sidebar/sidebar.tsx
index f77066a2..5dd6ae94 100644
--- a/src/renderer/src/components/sidebar/sidebar.tsx
+++ b/src/renderer/src/components/sidebar/sidebar.tsx
@@ -5,7 +5,7 @@ import { Tooltip } from "react-tooltip";
import type { LibraryGame } from "@types";
-import { TextField } from "@renderer/components";
+import { TextField, ConfirmationModal } from "@renderer/components";
import {
useDownload,
useLibrary,
@@ -31,6 +31,7 @@ import { SidebarGameItem } from "./sidebar-game-item";
import { SidebarAddingCustomGameModal } from "./sidebar-adding-custom-game-modal";
import { setFriendRequestCount } from "@renderer/features/user-details-slice";
import { useDispatch } from "react-redux";
+import deckyIcon from "@renderer/assets/icons/decky.png";
const SIDEBAR_MIN_WIDTH = 200;
const SIDEBAR_INITIAL_WIDTH = 250;
@@ -47,6 +48,13 @@ export function Sidebar() {
const { t } = useTranslation("sidebar");
const { library, updateLibrary } = useLibrary();
+ const [deckyPluginInfo, setDeckyPluginInfo] = useState<{
+ installed: boolean;
+ version: string | null;
+ outdated: boolean;
+ }>({ installed: false, version: null, outdated: false });
+ const [homebrewFolderExists, setHomebrewFolderExists] = useState(false);
+ const [showDeckyConfirmModal, setShowDeckyConfirmModal] = useState(false);
const navigate = useNavigate();
const [filteredLibrary, setFilteredLibrary] = useState([]);
@@ -66,7 +74,7 @@ export function Sidebar() {
const { lastPacket, progress } = useDownload();
- const { showWarningToast } = useToast();
+ const { showWarningToast, showSuccessToast, showErrorToast } = useToast();
const [showPlayableOnly, setShowPlayableOnly] = useState(false);
const [showAddGameModal, setShowAddGameModal] = useState(false);
@@ -83,10 +91,68 @@ export function Sidebar() {
setShowAddGameModal(false);
};
+ const loadDeckyPluginInfo = async () => {
+ if (window.electron.platform !== "linux") return;
+
+ try {
+ const [info, folderExists] = await Promise.all([
+ window.electron.getHydraDeckyPluginInfo(),
+ window.electron.checkHomebrewFolderExists(),
+ ]);
+
+ setDeckyPluginInfo({
+ installed: info.installed,
+ version: info.version,
+ outdated: info.outdated,
+ });
+ setHomebrewFolderExists(folderExists);
+ } catch (error) {
+ console.error("Failed to load Decky plugin info:", error);
+ }
+ };
+
+ const handleInstallHydraDeckyPlugin = () => {
+ if (deckyPluginInfo.installed && !deckyPluginInfo.outdated) {
+ return;
+ }
+ setShowDeckyConfirmModal(true);
+ };
+
+ const handleConfirmDeckyInstallation = async () => {
+ setShowDeckyConfirmModal(false);
+
+ try {
+ const result = await window.electron.installHydraDeckyPlugin();
+
+ if (result.success) {
+ showSuccessToast(
+ t("decky_plugin_installed", {
+ version: result.currentVersion,
+ })
+ );
+ await loadDeckyPluginInfo();
+ } else {
+ showErrorToast(
+ t("decky_plugin_installation_failed", {
+ error: result.error || "Unknown error",
+ })
+ );
+ }
+ } catch (error) {
+ showErrorToast(
+ t("decky_plugin_installation_error", { error: String(error) })
+ );
+ }
+ };
+
useEffect(() => {
updateLibrary();
}, [lastPacket?.gameId, updateLibrary]);
+ useEffect(() => {
+ loadDeckyPluginInfo();
+ }, []);
+
useEffect(() => {
const unsubscribe = window.electron.onSyncFriendRequests((result) => {
dispatch(setFriendRequestCount(result.friendRequestCount));
@@ -244,6 +310,30 @@ export function Sidebar() {
))}
+ {window.electron.platform === "linux" && homebrewFolderExists && (
+ -
+
+
+
+ {deckyPluginInfo.installed && !deckyPluginInfo.outdated
+ ? t("decky_plugin_installed_version", {
+ version: deckyPluginInfo.version,
+ })
+ : deckyPluginInfo.installed && deckyPluginInfo.outdated
+ ? t("update_decky_plugin")
+ : t("install_decky_plugin")}
+
+
+
+ )}
@@ -321,18 +411,20 @@ export function Sidebar() {
- {hasActiveSubscription && (
-
-
-
-
- {t("need_help")}
-
- )}
+
+ {hasActiveSubscription && (
+
+
+
+
+ {t("need_help")}
+
+ )}
+
+ setShowDeckyConfirmModal(false)}
+ onConfirm={handleConfirmDeckyInstallation}
+ cancelButtonLabel={t("cancel")}
+ confirmButtonLabel={t("confirm")}
+ />
+
diff --git a/src/renderer/src/components/star-rating/index.ts b/src/renderer/src/components/star-rating/index.ts
new file mode 100644
index 00000000..10dd86ff
--- /dev/null
+++ b/src/renderer/src/components/star-rating/index.ts
@@ -0,0 +1 @@
+export * from "./star-rating";
diff --git a/src/renderer/src/components/star-rating/star-rating.scss b/src/renderer/src/components/star-rating/star-rating.scss
new file mode 100644
index 00000000..5ff36c1f
--- /dev/null
+++ b/src/renderer/src/components/star-rating/star-rating.scss
@@ -0,0 +1,54 @@
+@use "../../scss/globals.scss";
+
+.star-rating {
+ display: flex;
+ align-items: center;
+ gap: 2px;
+
+ &__star {
+ color: globals.$muted-color;
+ transition: color ease 0.2s;
+
+ &--filled {
+ color: #ffffff;
+ }
+
+ &--empty {
+ color: globals.$muted-color;
+ }
+
+ &--half {
+ color: #ffffff;
+ position: absolute;
+ top: 0;
+ left: 0;
+ clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%);
+ }
+ }
+
+ &__half-star {
+ position: relative;
+ display: inline-block;
+ }
+
+ &__value {
+ margin-left: 4px;
+ font-size: 12px;
+ color: globals.$muted-color;
+ font-weight: 500;
+ }
+
+ &__calculating-text,
+ &__no-rating-text {
+ margin-left: 4px;
+ font-size: 12px;
+ color: globals.$muted-color;
+ }
+
+ &--calculating,
+ &--no-rating {
+ .star-rating__star {
+ color: globals.$muted-color;
+ }
+ }
+}
diff --git a/src/renderer/src/components/star-rating/star-rating.tsx b/src/renderer/src/components/star-rating/star-rating.tsx
new file mode 100644
index 00000000..5a10b140
--- /dev/null
+++ b/src/renderer/src/components/star-rating/star-rating.tsx
@@ -0,0 +1,32 @@
+import { StarFillIcon } from "@primer/octicons-react";
+import "./star-rating.scss";
+
+export interface StarRatingProps {
+ rating: number | null;
+ size?: number;
+}
+
+export function StarRating({ rating, size = 12 }: Readonly) {
+ if (rating === null || rating === undefined) {
+ return (
+
+
+ …
+
+ );
+ }
+
+ // Always use single star mode with numeric score
+ return (
+
+
+ {rating.toFixed(1)}
+
+ );
+}
diff --git a/src/renderer/src/components/text-field/text-field.tsx b/src/renderer/src/components/text-field/text-field.tsx
index 1c4d54af..76759126 100644
--- a/src/renderer/src/components/text-field/text-field.tsx
+++ b/src/renderer/src/components/text-field/text-field.tsx
@@ -1,9 +1,7 @@
-import React, { useId, useMemo, useState } from "react";
+import React, { useId, useState } from "react";
import { EyeClosedIcon, EyeIcon } from "@primer/octicons-react";
import { useTranslation } from "react-i18next";
-
import cn from "classnames";
-
import "./text-field.scss";
export interface TextFieldProps
@@ -42,44 +40,30 @@ export const TextField = React.forwardRef(
) => {
const id = useId();
const [isFocused, setIsFocused] = useState(false);
-
const [isPasswordVisible, setIsPasswordVisible] = useState(false);
-
const { t } = useTranslation("forms");
-
const showPasswordToggleButton = props.type === "password";
-
- const inputType = useMemo(() => {
- if (props.type === "password" && isPasswordVisible) return "text";
- return props.type ?? "text";
- }, [props.type, isPasswordVisible]);
-
- const hintContent = useMemo(() => {
- if (error)
- return (
- {error}
- );
-
- if (hint) return {hint};
- return null;
- }, [hint, error]);
-
+ const inputType =
+ props.type === "password" && isPasswordVisible
+ ? "text"
+ : (props.type ?? "text");
+ const hintContent = error ? (
+ {error}
+ ) : hint ? (
+ {hint}
+ ) : null;
const handleFocus: React.FocusEventHandler = (event) => {
setIsFocused(true);
- if (props.onFocus) props.onFocus(event);
+ props.onFocus?.(event);
};
-
const handleBlur: React.FocusEventHandler = (event) => {
setIsFocused(false);
- if (props.onBlur) props.onBlur(event);
+ props.onBlur?.(event);
};
-
const hasError = !!error;
-
return (
{label &&
}
-
(
onBlur={handleBlur}
type={inputType}
/>
-
{showPasswordToggleButton && (
(
)}
-
{rightContent}
-
{hintContent}
);
}
);
-
TextField.displayName = "TextField";
diff --git a/src/renderer/src/constants.ts b/src/renderer/src/constants.ts
index 5f5661ea..3329a0cc 100644
--- a/src/renderer/src/constants.ts
+++ b/src/renderer/src/constants.ts
@@ -1,6 +1,6 @@
import { Downloader } from "@shared";
-export const VERSION_CODENAME = "Lumen";
+export const VERSION_CODENAME = "Supernova";
export const DOWNLOADER_NAME = {
[Downloader.RealDebrid]: "Real-Debrid",
@@ -11,7 +11,6 @@ export const DOWNLOADER_NAME = {
[Downloader.Datanodes]: "Datanodes",
[Downloader.Mediafire]: "Mediafire",
[Downloader.TorBox]: "TorBox",
- [Downloader.AllDebrid]: "All-Debrid",
[Downloader.Hydra]: "Nimbus",
};
diff --git a/src/renderer/src/context/cloud-sync/cloud-sync.context.tsx b/src/renderer/src/context/cloud-sync/cloud-sync.context.tsx
index f9287a11..abc359e9 100644
--- a/src/renderer/src/context/cloud-sync/cloud-sync.context.tsx
+++ b/src/renderer/src/context/cloud-sync/cloud-sync.context.tsx
@@ -87,7 +87,7 @@ export function CloudSyncContextProvider({
const [loadingPreview, setLoadingPreview] = useState(false);
const [freezingArtifact, setFreezingArtifact] = useState(false);
- const { showSuccessToast } = useToast();
+ const { showSuccessToast, showErrorToast } = useToast();
const downloadGameArtifact = useCallback(
async (gameArtifactId: string) => {
@@ -98,7 +98,23 @@ export function CloudSyncContextProvider({
);
const getGameArtifacts = useCallback(async () => {
- const results = await window.electron.getGameArtifacts(objectId, shop);
+ if (shop === "custom") {
+ setArtifacts([]);
+ return;
+ }
+
+ const params = new URLSearchParams({
+ objectId,
+ shop,
+ });
+
+ const results = await window.electron.hydraApi
+ .get(`/profile/games/artifacts?${params.toString()}`, {
+ needsSubscription: true,
+ })
+ .catch(() => {
+ return [];
+ });
setArtifacts(results);
}, [objectId, shop]);
@@ -122,16 +138,25 @@ export function CloudSyncContextProvider({
const uploadSaveGame = useCallback(
async (downloadOptionTitle: string | null) => {
setUploadingBackup(true);
- window.electron.uploadSaveGame(objectId, shop, downloadOptionTitle);
+ window.electron
+ .uploadSaveGame(objectId, shop, downloadOptionTitle)
+ .catch((err) => {
+ setUploadingBackup(false);
+ logger.error("Failed to upload save game", { objectId, shop, err });
+ showErrorToast(t("backup_failed"));
+ });
},
- [objectId, shop]
+ [objectId, shop, t, showErrorToast]
);
const toggleArtifactFreeze = useCallback(
async (gameArtifactId: string, freeze: boolean) => {
setFreezingArtifact(true);
try {
- await window.electron.toggleArtifactFreeze(gameArtifactId, freeze);
+ const endpoint = freeze ? "freeze" : "unfreeze";
+ await window.electron.hydraApi.put(
+ `/profile/games/artifacts/${gameArtifactId}/${endpoint}`
+ );
getGameArtifacts();
} catch (err) {
logger.error("Failed to toggle artifact freeze", objectId, shop, err);
@@ -179,10 +204,12 @@ export function CloudSyncContextProvider({
const deleteGameArtifact = useCallback(
async (gameArtifactId: string) => {
- return window.electron.deleteGameArtifact(gameArtifactId).then(() => {
- getGameBackupPreview();
- getGameArtifacts();
- });
+ return window.electron.hydraApi
+ .delete<{ ok: boolean }>(`/profile/games/artifacts/${gameArtifactId}`)
+ .then(() => {
+ getGameBackupPreview();
+ getGameArtifacts();
+ });
},
[getGameBackupPreview, getGameArtifacts]
);
diff --git a/src/renderer/src/context/game-details/game-details.context.tsx b/src/renderer/src/context/game-details/game-details.context.tsx
index 23ea3845..c5b88607 100644
--- a/src/renderer/src/context/game-details/game-details.context.tsx
+++ b/src/renderer/src/context/game-details/game-details.context.tsx
@@ -1,11 +1,4 @@
-import {
- createContext,
- useCallback,
- useEffect,
- useMemo,
- useRef,
- useState,
-} from "react";
+import { createContext, useCallback, useEffect, useRef, useState } from "react";
import { setHeaderTitle } from "@renderer/features";
import { getSteamLanguage } from "@renderer/helpers";
@@ -13,11 +6,11 @@ import {
useAppDispatch,
useAppSelector,
useDownload,
- useRepacks,
useUserDetails,
} from "@renderer/hooks";
import type {
+ GameRepack,
GameShop,
GameStats,
LibraryGame,
@@ -84,12 +77,7 @@ export function GameDetailsContextProvider({
const [isGameRunning, setIsGameRunning] = useState(false);
const [showRepacksModal, setShowRepacksModal] = useState(false);
const [showGameOptionsModal, setShowGameOptionsModal] = useState(false);
-
- const { getRepacksForObjectId } = useRepacks();
-
- const repacks = useMemo(() => {
- return getRepacksForObjectId(objectId);
- }, [getRepacksForObjectId, objectId]);
+ const [repacks, setRepacks] = useState([]);
const { i18n } = useTranslation("game_details");
const location = useLocation();
@@ -142,29 +130,26 @@ export function GameDetailsContextProvider({
}
});
- const statsPromise = window.electron
- .getGameStats(objectId, shop)
- .then((result) => {
- if (abortController.signal.aborted) return null;
+ if (shop !== "custom") {
+ window.electron.getGameStats(objectId, shop).then((result) => {
+ if (abortController.signal.aborted) return;
setStats(result);
- return result;
});
+ }
- Promise.all([shopDetailsPromise, statsPromise])
- .then(([_, stats]) => {
- if (stats) {
- const assets = stats.assets;
- if (assets) {
- window.electron.saveGameShopAssets(objectId, shop, assets);
+ const assetsPromise = window.electron.getGameAssets(objectId, shop);
- setShopDetails((prev) => {
- if (!prev) return null;
- return {
- ...prev,
- assets,
- };
- });
- }
+ Promise.all([shopDetailsPromise, assetsPromise])
+ .then(([_, assets]) => {
+ if (assets) {
+ if (abortController.signal.aborted) return;
+ setShopDetails((prev) => {
+ if (!prev) return null;
+ return {
+ ...prev,
+ assets,
+ };
+ });
}
})
.finally(() => {
@@ -172,7 +157,7 @@ export function GameDetailsContextProvider({
setIsLoading(false);
});
- if (userDetails) {
+ if (userDetails && shop !== "custom") {
window.electron
.getUnlockedAchievements(objectId, shop)
.then((achievements) => {
@@ -201,13 +186,14 @@ export function GameDetailsContextProvider({
}, [objectId, gameTitle, dispatch]);
useEffect(() => {
- const state = (location && (location.state as Record)) || {};
+ const state =
+ (location && (location.state as Record)) || {};
if (state.openRepacks) {
setShowRepacksModal(true);
try {
window.history.replaceState({}, document.title, location.pathname);
- } catch (_e) {
- void _e;
+ } catch (e) {
+ console.error(e);
}
}
}, [location]);
@@ -291,19 +277,6 @@ export function GameDetailsContextProvider({
}
}, [location]);
- const lastDownloadedOption = useMemo(() => {
- if (game?.download) {
- const repack = repacks.find((repack) =>
- repack.uris.some((uri) => uri.includes(game.download!.uri))
- );
-
- if (!repack) return null;
- return repack;
- }
-
- return null;
- }, [game?.download, repacks]);
-
useEffect(() => {
const unsubscribe = window.electron.onUpdateAchievements(
objectId,
@@ -319,6 +292,34 @@ export function GameDetailsContextProvider({
};
}, [objectId, shop, userDetails]);
+ useEffect(() => {
+ const fetchDownloadSources = async () => {
+ try {
+ const sources = await window.electron.getDownloadSources();
+
+ const params = {
+ take: 100,
+ skip: 0,
+ downloadSourceIds: sources.map((source) => source.id),
+ };
+
+ const downloads = await window.electron.hydraApi.get(
+ `/games/${shop}/${objectId}/download-sources`,
+ {
+ params,
+ needsAuth: false,
+ }
+ );
+
+ setRepacks(downloads);
+ } catch (error) {
+ console.error("Failed to fetch download sources:", error);
+ }
+ };
+
+ fetchDownloadSources();
+ }, [shop, objectId]);
+
const getDownloadsPath = async () => {
if (userPreferences?.downloadsPath) return userPreferences.downloadsPath;
return window.electron.getDefaultDownloadsPath();
@@ -363,7 +364,7 @@ export function GameDetailsContextProvider({
stats,
achievements,
hasNSFWContentBlocked,
- lastDownloadedOption,
+ lastDownloadedOption: null,
setHasNSFWContentBlocked,
selectGameExecutable,
updateGame,
diff --git a/src/renderer/src/context/settings/settings.context.tsx b/src/renderer/src/context/settings/settings.context.tsx
index 5c79f38d..1160ca3e 100644
--- a/src/renderer/src/context/settings/settings.context.tsx
+++ b/src/renderer/src/context/settings/settings.context.tsx
@@ -116,7 +116,13 @@ export function SettingsContextProvider({
}, []);
const fetchBlockedUsers = useCallback(async () => {
- const blockedUsers = await window.electron.getBlockedUsers(12, 0);
+ const blockedUsers = await window.electron.hydraApi
+ .get("/profile/blocks", {
+ params: { take: 12, skip: 0 },
+ })
+ .catch(() => {
+ return { blocks: [] };
+ });
setBlockedUsers(blockedUsers.blocks);
}, []);
diff --git a/src/renderer/src/context/user-profile/user-profile.context.tsx b/src/renderer/src/context/user-profile/user-profile.context.tsx
index 2750442a..87e2a669 100644
--- a/src/renderer/src/context/user-profile/user-profile.context.tsx
+++ b/src/renderer/src/context/user-profile/user-profile.context.tsx
@@ -66,10 +66,7 @@ export function UserProfileContextProvider({
const isMe = userDetails?.id === userProfile?.id;
const getHeroBackgroundFromImageUrl = async (imageUrl: string) => {
- const output = await average(imageUrl, {
- amount: 1,
- format: "hex",
- });
+ const output = await average(imageUrl, { amount: 1, format: "hex" });
return `linear-gradient(135deg, ${darkenColor(output as string, 0.5)}, ${darkenColor(output as string, 0.6, 0.5)})`;
};
@@ -82,26 +79,38 @@ export function UserProfileContextProvider({
return "";
};
- const { t } = useTranslation("user_profile");
+ const { t, i18n } = useTranslation("user_profile");
const { showErrorToast } = useToast();
const navigate = useNavigate();
const getUserStats = useCallback(async () => {
- window.electron.getUserStats(userId).then((stats) => {
- setUserStats(stats);
- });
+ window.electron.hydraApi
+ .get(`/users/${userId}/stats`)
+ .then((stats) => {
+ setUserStats(stats);
+ });
}, [userId]);
const getUserLibraryGames = useCallback(
async (sortBy?: string) => {
try {
- const response = await window.electron.getUserLibrary(
- userId,
- 12,
- 0,
- sortBy
- );
+ const params = new URLSearchParams();
+ params.append("take", "12");
+ params.append("skip", "0");
+ if (sortBy) {
+ params.append("sortBy", sortBy);
+ }
+
+ const queryString = params.toString();
+ const url = queryString
+ ? `/users/${userId}/library?${queryString}`
+ : `/users/${userId}/library`;
+
+ const response = await window.electron.hydraApi.get<{
+ library: UserGame[];
+ pinnedGames: UserGame[];
+ }>(url);
if (response) {
setLibraryGames(response.library);
@@ -122,8 +131,9 @@ export function UserProfileContextProvider({
getUserStats();
getUserLibraryGames();
- return window.electron.getUser(userId).then((userProfile) => {
- if (userProfile) {
+ return window.electron.hydraApi
+ .get(`/users/${userId}`)
+ .then((userProfile) => {
setUserProfile(userProfile);
if (userProfile.profileImageUrl) {
@@ -131,17 +141,23 @@ export function UserProfileContextProvider({
(color) => setHeroBackground(color)
);
}
- } else {
+ })
+ .catch(() => {
showErrorToast(t("user_not_found"));
navigate(-1);
- }
- });
+ });
}, [navigate, getUserStats, getUserLibraryGames, showErrorToast, userId, t]);
const getBadges = useCallback(async () => {
- const badges = await window.electron.getBadges();
+ const language = i18n.language.split("-")[0];
+ const params = new URLSearchParams({ locale: language });
+
+ const badges = await window.electron.hydraApi.get(
+ `/badges?${params.toString()}`,
+ { needsAuth: false }
+ );
setBadges(badges);
- }, []);
+ }, [i18n]);
useEffect(() => {
setUserProfile(null);
diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts
index ad7a5386..fa4ab3d6 100644
--- a/src/renderer/src/declaration.d.ts
+++ b/src/renderer/src/declaration.d.ts
@@ -1,47 +1,38 @@
-import type { AuthPage, CatalogueCategory } from "@shared";
+import type { AuthPage } from "@shared";
import type {
AppUpdaterEvent,
GameShop,
- HowLongToBeatCategory,
Steam250Game,
DownloadProgress,
SeedingStatus,
UserPreferences,
StartGameDownloadPayload,
RealDebridUser,
- AllDebridUser,
UserProfile,
- FriendRequest,
FriendRequestAction,
- UserFriends,
- UserBlocks,
UpdateProfileRequest,
GameStats,
- TrendingGame,
- UserStats,
UserDetails,
FriendRequestSync,
GameArtifact,
LudusaviBackup,
UserAchievement,
ComparedAchievements,
- CatalogueSearchPayload,
LibraryGame,
GameRunning,
TorBoxUser,
Theme,
- Badge,
Auth,
ShortcutLocation,
- CatalogueSearchResult,
ShopAssets,
ShopDetailsWithAssets,
AchievementCustomNotificationPosition,
AchievementNotificationInfo,
- UserLibraryResponse,
+ Game,
+ DiskUsage,
+ DownloadSource,
} from "@types";
import type { AxiosProgressEvent } from "axios";
-import type disk from "diskusage";
declare global {
declare module "*.svg" {
@@ -71,36 +62,22 @@ declare global {
) => Promise>;
/* Catalogue */
- searchGames: (
- payload: CatalogueSearchPayload,
- take: number,
- skip: number
- ) => Promise<{ edges: CatalogueSearchResult[]; count: number }>;
- getCatalogue: (category: CatalogueCategory) => Promise;
- saveGameShopAssets: (
- objectId: string,
- shop: GameShop,
- assets: ShopAssets
- ) => Promise;
getGameShopDetails: (
objectId: string,
shop: GameShop,
language: string
) => Promise;
getRandomGame: () => Promise;
- getHowLongToBeat: (
+ getGameStats: (objectId: string, shop: GameShop) => Promise;
+ getGameAssets: (
objectId: string,
shop: GameShop
- ) => Promise;
- getGameStats: (objectId: string, shop: GameShop) => Promise;
- getTrendingGames: () => Promise;
+ ) => Promise;
onUpdateAchievements: (
objectId: string,
shop: GameShop,
cb: (achievements: UserAchievement[]) => void
) => () => Electron.IpcRenderer;
- getPublishers: () => Promise;
- getDevelopers: () => Promise;
/* Library */
toggleAutomaticCloudSync: (
@@ -213,9 +190,6 @@ declare global {
) => Promise;
/* User preferences */
authenticateRealDebrid: (apiToken: string) => Promise;
- authenticateAllDebrid: (
- apiKey: string
- ) => Promise;
authenticateTorBox: (apiToken: string) => Promise;
getUserPreferences: () => Promise;
updateUserPreferences: (
@@ -233,17 +207,16 @@ declare global {
createSteamShortcut: (shop: GameShop, objectId: string) => Promise;
/* Download sources */
- putDownloadSource: (
- objectIds: string[]
- ) => Promise<{ fingerprint: string }>;
- createDownloadSources: (urls: string[]) => Promise;
- removeDownloadSource: (url: string, removeAll?: boolean) => Promise;
- getDownloadSources: () => Promise<
- Pick[]
- >;
+ addDownloadSource: (url: string) => Promise;
+ removeDownloadSource: (
+ removeAll = false,
+ downloadSourceId?: string
+ ) => Promise;
+ getDownloadSources: () => Promise;
+ syncDownloadSources: () => Promise;
/* Hardware */
- getDiskFreeSpace: (path: string) => Promise;
+ getDiskFreeSpace: (path: string) => Promise;
checkFolderWritePermission: (path: string) => Promise;
/* Cloud save */
@@ -252,14 +225,6 @@ declare global {
shop: GameShop,
downloadOptionTitle: string | null
) => Promise;
- toggleArtifactFreeze: (
- gameArtifactId: string,
- freeze: boolean
- ) => Promise;
- renameGameArtifact: (
- gameArtifactId: string,
- label: string
- ) => Promise;
downloadGameArtifact: (
objectId: string,
shop: GameShop,
@@ -273,7 +238,6 @@ declare global {
objectId: string,
shop: GameShop
) => Promise;
- deleteGameArtifact: (gameArtifactId: string) => Promise<{ ok: boolean }>;
selectGameBackupPath: (
shop: GameShop,
objectId: string,
@@ -307,10 +271,65 @@ declare global {
options: Electron.OpenDialogOptions
) => Promise;
showItemInFolder: (path: string) => Promise;
- getFeatures: () => Promise;
- getBadges: () => Promise;
+ hydraApi: {
+ get: (
+ url: string,
+ options?: {
+ params?: unknown;
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ ifModifiedSince?: Date;
+ }
+ ) => Promise;
+ post: (
+ url: string,
+ options?: {
+ data?: unknown;
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ }
+ ) => Promise;
+ put: (
+ url: string,
+ options?: {
+ data?: unknown;
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ }
+ ) => Promise;
+ patch: (
+ url: string,
+ options?: {
+ data?: unknown;
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ }
+ ) => Promise;
+ delete: (
+ url: string,
+ options?: {
+ needsAuth?: boolean;
+ needsSubscription?: boolean;
+ }
+ ) => Promise;
+ };
canInstallCommonRedist: () => Promise;
installCommonRedist: () => Promise;
+ installHydraDeckyPlugin: () => Promise<{
+ success: boolean;
+ path: string;
+ currentVersion: string | null;
+ expectedVersion: string;
+ error?: string;
+ }>;
+ getHydraDeckyPluginInfo: () => Promise<{
+ installed: boolean;
+ version: string | null;
+ path: string;
+ outdated: boolean;
+ expectedVersion: string | null;
+ }>;
+ checkHomebrewFolderExists: () => Promise;
onCommonRedistProgress: (
cb: (value: { log: string; complete: boolean }) => void
) => () => Electron.IpcRenderer;
@@ -335,27 +354,6 @@ declare global {
onSignOut: (cb: () => void) => () => Electron.IpcRenderer;
/* User */
- getUser: (userId: string) => Promise;
- getUserLibrary: (
- userId: string,
- take?: number,
- skip?: number,
- sortBy?: string
- ) => Promise;
- blockUser: (userId: string) => Promise;
- unblockUser: (userId: string) => Promise;
- getUserFriends: (
- userId: string,
- take: number,
- skip: number
- ) => Promise;
- getBlockedUsers: (take: number, skip: number) => Promise;
- getUserStats: (userId: string) => Promise;
- reportUser: (
- userId: string,
- reason: string,
- description: string
- ) => Promise;
getComparedUnlockedAchievements: (
objectId: string,
shop: GameShop,
@@ -368,7 +366,6 @@ declare global {
/* Profile */
getMe: () => Promise;
- undoFriendship: (userId: string) => Promise;
updateProfile: (
updateProfile: UpdateProfileRequest
) => Promise;
@@ -376,7 +373,6 @@ declare global {
processProfileImage: (
path: string
) => Promise<{ imagePath: string; mimeType: string }>;
- getFriendRequests: () => Promise;
syncFriendRequests: () => Promise;
onSyncFriendRequests: (
cb: (friendRequests: FriendRequestSync) => void
@@ -385,7 +381,6 @@ declare global {
userId: string,
action: FriendRequestAction
) => Promise;
- sendFriendRequest: (userId: string) => Promise;
/* Notifications */
publishNewRepacksNotification: (newRepacksCount: number) => Promise;
diff --git a/src/renderer/src/dexie.ts b/src/renderer/src/dexie.ts
deleted file mode 100644
index 7991dc8a..00000000
--- a/src/renderer/src/dexie.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { GameShop, HowLongToBeatCategory } from "@types";
-import { Dexie } from "dexie";
-
-export interface HowLongToBeatEntry {
- id?: number;
- objectId: string;
- categories: HowLongToBeatCategory[];
- shop: GameShop;
- createdAt: Date;
- updatedAt: Date;
-}
-
-export const db = new Dexie("Hydra");
-
-db.version(9).stores({
- repacks: `++id, title, uris, fileSize, uploadDate, downloadSourceId, repacker, objectIds, createdAt, updatedAt`,
- downloadSources: `++id, &url, name, etag, objectIds, downloadCount, status, fingerprint, createdAt, updatedAt`,
- howLongToBeatEntries: `++id, categories, [shop+objectId], createdAt, updatedAt`,
-});
-
-export const downloadSourcesTable = db.table("downloadSources");
-export const repacksTable = db.table("repacks");
-export const howLongToBeatEntriesTable = db.table(
- "howLongToBeatEntries"
-);
-
-db.open();
diff --git a/src/renderer/src/features/index.ts b/src/renderer/src/features/index.ts
index 9d48c0df..a7e64e1f 100644
--- a/src/renderer/src/features/index.ts
+++ b/src/renderer/src/features/index.ts
@@ -6,5 +6,4 @@ export * from "./toast-slice";
export * from "./user-details-slice";
export * from "./game-running.slice";
export * from "./subscription-slice";
-export * from "./repacks-slice";
export * from "./catalogue-search";
diff --git a/src/renderer/src/helpers.ts b/src/renderer/src/helpers.ts
index 01b4d6cc..f09cec84 100644
--- a/src/renderer/src/helpers.ts
+++ b/src/renderer/src/helpers.ts
@@ -1,6 +1,7 @@
import type { GameShop } from "@types";
import Color from "color";
+import { v4 as uuidv4 } from "uuid";
import { THEME_WEB_STORE_URL } from "./constants";
export const formatDownloadProgress = (
@@ -104,3 +105,19 @@ export const generateRandomGradient = (): string => {
// Return as data URL that works in img tags
return `data:image/svg+xml;base64,${btoa(svgContent)}`;
};
+
+export const formatNumber = (num: number): string => {
+ return new Intl.NumberFormat("en-US", {
+ notation: "compact",
+ compactDisplay: "short",
+ maximumFractionDigits: 1,
+ }).format(num);
+};
+
+/**
+ * Generates a UUID v4
+ * @returns A random UUID string
+ */
+export const generateUUID = (): string => {
+ return uuidv4();
+};
diff --git a/src/renderer/src/hooks/index.ts b/src/renderer/src/hooks/index.ts
index 8140e0cd..73733e2b 100644
--- a/src/renderer/src/hooks/index.ts
+++ b/src/renderer/src/hooks/index.ts
@@ -5,5 +5,4 @@ export * from "./use-toast";
export * from "./redux";
export * from "./use-user-details";
export * from "./use-format";
-export * from "./use-repacks";
export * from "./use-feature";
diff --git a/src/renderer/src/hooks/use-catalogue.ts b/src/renderer/src/hooks/use-catalogue.ts
index 1d0aeb57..675f5013 100644
--- a/src/renderer/src/hooks/use-catalogue.ts
+++ b/src/renderer/src/hooks/use-catalogue.ts
@@ -2,6 +2,7 @@ import axios from "axios";
import { useCallback, useEffect, useState } from "react";
import { useAppDispatch } from "./redux";
import { setGenres, setTags } from "@renderer/features";
+import type { DownloadSource } from "@types";
export const externalResourcesInstance = axios.create({
baseURL: import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL,
@@ -12,6 +13,7 @@ export function useCatalogue() {
const [steamPublishers, setSteamPublishers] = useState([]);
const [steamDevelopers, setSteamDevelopers] = useState([]);
+ const [downloadSources, setDownloadSources] = useState([]);
const getSteamUserTags = useCallback(() => {
externalResourcesInstance.get("/steam-user-tags.json").then((response) => {
@@ -37,17 +39,25 @@ export function useCatalogue() {
});
}, []);
+ const getDownloadSources = useCallback(() => {
+ window.electron.getDownloadSources().then((results) => {
+ setDownloadSources(results.filter((source) => !!source.fingerprint));
+ });
+ }, []);
+
useEffect(() => {
getSteamUserTags();
getSteamGenres();
getSteamPublishers();
getSteamDevelopers();
+ getDownloadSources();
}, [
getSteamUserTags,
getSteamGenres,
getSteamPublishers,
getSteamDevelopers,
+ getDownloadSources,
]);
- return { steamPublishers, steamDevelopers };
+ return { steamPublishers, downloadSources, steamDevelopers };
}
diff --git a/src/renderer/src/hooks/use-feature.ts b/src/renderer/src/hooks/use-feature.ts
index d4727105..c4841f8b 100644
--- a/src/renderer/src/hooks/use-feature.ts
+++ b/src/renderer/src/hooks/use-feature.ts
@@ -11,10 +11,12 @@ export function useFeature() {
const [features, setFeatures] = useState(null);
useEffect(() => {
- window.electron.getFeatures().then((features) => {
- localStorage.setItem("features", JSON.stringify(features || []));
- setFeatures(features || []);
- });
+ window.electron.hydraApi
+ .get("/features", { needsAuth: false })
+ .then((features) => {
+ localStorage.setItem("features", JSON.stringify(features || []));
+ setFeatures(features || []);
+ });
}, []);
const isFeatureEnabled = useCallback(
diff --git a/src/renderer/src/hooks/use-repacks.ts b/src/renderer/src/hooks/use-repacks.ts
deleted file mode 100644
index dbc918b9..00000000
--- a/src/renderer/src/hooks/use-repacks.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { repacksTable } from "@renderer/dexie";
-import { setRepacks } from "@renderer/features";
-import { useCallback } from "react";
-import { RootState } from "@renderer/store";
-import { useSelector } from "react-redux";
-import { useAppDispatch } from "./redux";
-
-export function useRepacks() {
- const dispatch = useAppDispatch();
- const repacks = useSelector((state: RootState) => state.repacks.value);
-
- const getRepacksForObjectId = useCallback(
- (objectId: string) => {
- return repacks.filter((repack) => repack.objectIds.includes(objectId));
- },
- [repacks]
- );
-
- const updateRepacks = useCallback(() => {
- repacksTable.toArray().then((repacks) => {
- dispatch(
- setRepacks(
- JSON.parse(
- JSON.stringify(
- repacks.filter((repack) => Array.isArray(repack.objectIds))
- )
- )
- )
- );
- });
- }, [dispatch]);
-
- return { getRepacksForObjectId, updateRepacks };
-}
diff --git a/src/renderer/src/hooks/use-user-details.ts b/src/renderer/src/hooks/use-user-details.ts
index a35a760b..6d89f9b4 100644
--- a/src/renderer/src/hooks/use-user-details.ts
+++ b/src/renderer/src/hooks/use-user-details.ts
@@ -11,6 +11,7 @@ import type {
FriendRequestAction,
UpdateProfileRequest,
UserDetails,
+ FriendRequest,
} from "@types";
import { UserFriendModalTab } from "@renderer/pages/shared-modals/user-friend-modal";
@@ -68,6 +69,7 @@ export function useUserDetails() {
username: userDetails?.username || "",
subscription: userDetails?.subscription || null,
featurebaseJwt: userDetails?.featurebaseJwt || "",
+ karma: userDetails?.karma || 0,
});
},
[
@@ -75,12 +77,13 @@ export function useUserDetails() {
userDetails?.username,
userDetails?.subscription,
userDetails?.featurebaseJwt,
+ userDetails?.karma,
]
);
const fetchFriendRequests = useCallback(async () => {
- return window.electron
- .getFriendRequests()
+ return window.electron.hydraApi
+ .get("/profile/friend-requests")
.then((friendRequests) => {
window.electron.syncFriendRequests();
dispatch(setFriendRequests(friendRequests));
@@ -102,8 +105,10 @@ export function useUserDetails() {
const sendFriendRequest = useCallback(
async (userId: string) => {
- return window.electron
- .sendFriendRequest(userId)
+ return window.electron.hydraApi
+ .post("/profile/friend-requests", {
+ data: { friendCode: userId },
+ })
.then(() => fetchFriendRequests());
},
[fetchFriendRequests]
@@ -111,19 +116,31 @@ export function useUserDetails() {
const updateFriendRequestState = useCallback(
async (userId: string, action: FriendRequestAction) => {
- return window.electron
- .updateFriendRequest(userId, action)
+ if (action === "CANCEL") {
+ return window.electron.hydraApi
+ .delete(`/profile/friend-requests/${userId}`)
+ .then(() => fetchFriendRequests());
+ }
+
+ return window.electron.hydraApi
+ .patch(`/profile/friend-requests/${userId}`, {
+ data: {
+ requestState: action,
+ },
+ })
.then(() => fetchFriendRequests());
},
[fetchFriendRequests]
);
const undoFriendship = (userId: string) =>
- window.electron.undoFriendship(userId);
+ window.electron.hydraApi.delete(`/profile/friends/${userId}`);
- const blockUser = (userId: string) => window.electron.blockUser(userId);
+ const blockUser = (userId: string) =>
+ window.electron.hydraApi.post(`/users/${userId}/block`);
- const unblockUser = (userId: string) => window.electron.unblockUser(userId);
+ const unblockUser = (userId: string) =>
+ window.electron.hydraApi.post(`/users/${userId}/unblock`);
const hasActiveSubscription = useMemo(() => {
const expiresAt = new Date(userDetails?.subscription?.expiresAt ?? 0);
diff --git a/src/renderer/src/pages/catalogue/catalogue.tsx b/src/renderer/src/pages/catalogue/catalogue.tsx
index 421f9695..bbeda906 100644
--- a/src/renderer/src/pages/catalogue/catalogue.tsx
+++ b/src/renderer/src/pages/catalogue/catalogue.tsx
@@ -1,16 +1,14 @@
-import type { CatalogueSearchResult, DownloadSource } from "@types";
+import type {
+ CatalogueSearchResult,
+ CatalogueSearchPayload,
+ DownloadSource,
+} from "@types";
-import {
- useAppDispatch,
- useAppSelector,
- useFormat,
- useRepacks,
-} from "@renderer/hooks";
+import { useAppDispatch, useAppSelector, useFormat } from "@renderer/hooks";
import { useEffect, useMemo, useRef, useState } from "react";
import "./catalogue.scss";
-import { downloadSourcesTable } from "@renderer/dexie";
import { FilterSection } from "./filter-section";
import { setFilters, setPage } from "@renderer/features";
import { useTranslation } from "react-i18next";
@@ -35,13 +33,12 @@ export default function Catalogue() {
const abortControllerRef = useRef(null);
const cataloguePageRef = useRef(null);
- const { steamDevelopers, steamPublishers } = useCatalogue();
+ const { steamDevelopers, steamPublishers, downloadSources } = useCatalogue();
const { steamGenres, steamUserTags } = useAppSelector(
(state) => state.catalogueSearch
);
- const [downloadSources, setDownloadSources] = useState([]);
const [isLoading, setIsLoading] = useState(true);
const [results, setResults] = useState([]);
@@ -56,25 +53,42 @@ export default function Catalogue() {
const { t, i18n } = useTranslation("catalogue");
- const { getRepacksForObjectId } = useRepacks();
-
const debouncedSearch = useRef(
- debounce(async (filters, pageSize, offset) => {
- const abortController = new AbortController();
- abortControllerRef.current = abortController;
+ debounce(
+ async (
+ filters: CatalogueSearchPayload,
+ downloadSources: DownloadSource[],
+ pageSize: number,
+ offset: number
+ ) => {
+ const abortController = new AbortController();
+ abortControllerRef.current = abortController;
- const response = await window.electron.searchGames(
- filters,
- pageSize,
- offset
- );
+ const requestData = {
+ ...filters,
+ take: pageSize,
+ skip: offset,
+ downloadSourceIds: downloadSources.map(
+ (downloadSource) => downloadSource.id
+ ),
+ };
- if (abortController.signal.aborted) return;
+ const response = await window.electron.hydraApi.post<{
+ edges: CatalogueSearchResult[];
+ count: number;
+ }>("/catalogue/search", {
+ data: requestData,
+ needsAuth: false,
+ });
- setResults(response.edges);
- setItemsCount(response.count);
- setIsLoading(false);
- }, 500)
+ if (abortController.signal.aborted) return;
+
+ setResults(response.edges);
+ setItemsCount(response.count);
+ setIsLoading(false);
+ },
+ 500
+ )
).current;
const decodeHTML = (s: string) =>
@@ -85,18 +99,17 @@ export default function Catalogue() {
setIsLoading(true);
abortControllerRef.current?.abort();
- debouncedSearch(filters, PAGE_SIZE, (page - 1) * PAGE_SIZE);
+ debouncedSearch(
+ filters,
+ downloadSources,
+ PAGE_SIZE,
+ (page - 1) * PAGE_SIZE
+ );
return () => {
debouncedSearch.cancel();
};
- }, [filters, page, debouncedSearch]);
-
- useEffect(() => {
- downloadSourcesTable.toArray().then((sources) => {
- setDownloadSources(sources.filter((source) => !!source.fingerprint));
- });
- }, [getRepacksForObjectId]);
+ }, [filters, downloadSources, page, debouncedSearch]);
const language = i18n.language.split("-")[0];
@@ -174,7 +187,7 @@ export default function Catalogue() {
value: publisher,
})),
];
- }, [filters, steamUserTags, steamGenresMapping, language, downloadSources]);
+ }, [filters, steamUserTags, downloadSources, steamGenresMapping, language]);
const filterSections = useMemo(() => {
return [
@@ -190,13 +203,15 @@ export default function Catalogue() {
},
{
title: t("download_sources"),
- items: downloadSources.map((source) => ({
- label: source.name,
- value: source.fingerprint,
- checked: filters.downloadSourceFingerprints.includes(
- source.fingerprint
- ),
- })),
+ items: downloadSources
+ .filter((source) => source.fingerprint)
+ .map((source) => ({
+ label: source.name,
+ value: source.fingerprint!,
+ checked: filters.downloadSourceFingerprints.includes(
+ source.fingerprint!
+ ),
+ })),
key: "downloadSourceFingerprints",
},
{
diff --git a/src/renderer/src/pages/catalogue/game-item.tsx b/src/renderer/src/pages/catalogue/game-item.tsx
index ecfe0f73..4583afd3 100644
--- a/src/renderer/src/pages/catalogue/game-item.tsx
+++ b/src/renderer/src/pages/catalogue/game-item.tsx
@@ -1,6 +1,6 @@
import { Badge } from "@renderer/components";
import { buildGameDetailsPath } from "@renderer/helpers";
-import { useAppSelector, useRepacks, useLibrary } from "@renderer/hooks";
+import { useAppSelector, useLibrary } from "@renderer/hooks";
import { useMemo, useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";
@@ -23,10 +23,6 @@ export function GameItem({ game }: GameItemProps) {
const { steamGenres } = useAppSelector((state) => state.catalogueSearch);
- const { getRepacksForObjectId } = useRepacks();
-
- const repacks = getRepacksForObjectId(game.objectId);
-
const [isAddingToLibrary, setIsAddingToLibrary] = useState(false);
const [added, setAdded] = useState(false);
@@ -63,10 +59,6 @@ export function GameItem({ game }: GameItemProps) {
}
};
- const uniqueRepackers = useMemo(() => {
- return Array.from(new Set(repacks.map((repack) => repack.repacker)));
- }, [repacks]);
-
const genres = useMemo(() => {
return game.genres?.map((genre) => {
const index = steamGenres["en"]?.findIndex(
@@ -117,8 +109,8 @@ export function GameItem({ game }: GameItemProps) {
{genres.join(", ")}
- {uniqueRepackers.map((repacker) => (
- {repacker}
+ {game.downloadSources.map((sourceName) => (
+ {sourceName}
))}
diff --git a/src/renderer/src/pages/catalogue/pagination.scss b/src/renderer/src/pages/catalogue/pagination.scss
index 141dfe54..cac10211 100644
--- a/src/renderer/src/pages/catalogue/pagination.scss
+++ b/src/renderer/src/pages/catalogue/pagination.scss
@@ -1,3 +1,5 @@
+@use "../../scss/globals.scss";
+
.pagination {
display: flex;
gap: 4px;
@@ -18,4 +20,31 @@
font-size: 16px;
}
}
+
+ &__page-input {
+ box-sizing: border-box;
+ width: 40px;
+ min-width: 40px;
+ max-width: 40px;
+ min-height: 40px;
+ border-radius: 8px;
+ border: solid 1px globals.$border-color;
+ background-color: transparent;
+ color: globals.$muted-color;
+ text-align: center;
+ font-size: 12px;
+ padding: 0 6px;
+ outline: none;
+ }
+
+ &__double-chevron {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0; // remove whitespace node width between SVGs
+ }
+
+ &__double-chevron > svg + svg {
+ margin-left: -8px; // pull the second chevron closer
+ }
}
diff --git a/src/renderer/src/pages/catalogue/pagination.tsx b/src/renderer/src/pages/catalogue/pagination.tsx
index dfae6164..9febc8f8 100644
--- a/src/renderer/src/pages/catalogue/pagination.tsx
+++ b/src/renderer/src/pages/catalogue/pagination.tsx
@@ -1,8 +1,51 @@
import { Button } from "@renderer/components/button/button";
import { ChevronLeftIcon, ChevronRightIcon } from "@primer/octicons-react";
import { useFormat } from "@renderer/hooks/use-format";
+import { useEffect, useRef, useState } from "react";
+import type { ChangeEvent, KeyboardEvent, RefObject } from "react";
import "./pagination.scss";
+interface JumpControlProps {
+ isOpen: boolean;
+ value: string;
+ totalPages: number;
+ inputRef: RefObject;
+ onOpen: () => void;
+ onClose: () => void;
+ onChange: (e: ChangeEvent) => void;
+ onKeyDown: (e: KeyboardEvent) => void;
+}
+
+function JumpControl({
+ isOpen,
+ value,
+ totalPages,
+ inputRef,
+ onOpen,
+ onClose,
+ onChange,
+ onKeyDown,
+}: JumpControlProps) {
+ return isOpen ? (
+
+ ) : (
+
+ ...
+
+ );
+}
+
interface PaginationProps {
page: number;
totalPages: number;
@@ -16,20 +59,82 @@ export function Pagination({
}: PaginationProps) {
const { formatNumber } = useFormat();
+ const [isJumpOpen, setIsJumpOpen] = useState(false);
+ const [jumpValue, setJumpValue] = useState("");
+ const jumpInputRef = useRef(null);
+
+ useEffect(() => {
+ if (isJumpOpen) {
+ setJumpValue("");
+ setTimeout(() => jumpInputRef.current?.focus(), 0);
+ }
+ }, [isJumpOpen, page]);
+
if (totalPages <= 1) return null;
const visiblePages = 3;
+ const isLastThree = totalPages > 3 && page >= totalPages - 2;
let startPage = Math.max(1, page - 1);
let endPage = startPage + visiblePages - 1;
- if (endPage > totalPages) {
+ if (isLastThree) {
+ startPage = Math.max(1, totalPages - 2);
+ endPage = totalPages;
+ } else if (endPage > totalPages) {
endPage = totalPages;
startPage = Math.max(1, endPage - visiblePages + 1);
}
+ const onJumpChange = (e: ChangeEvent) => {
+ const val = e.target.value;
+ if (val === "") {
+ setJumpValue("");
+ return;
+ }
+ const num = Number(val);
+ if (Number.isNaN(num)) {
+ return;
+ }
+ if (num < 1) {
+ setJumpValue("1");
+ return;
+ }
+ if (num > totalPages) {
+ setJumpValue(String(totalPages));
+ return;
+ }
+ setJumpValue(val);
+ };
+
+ const onJumpKeyDown = (e: KeyboardEvent) => {
+ if (e.key === "Enter") {
+ if (jumpValue.trim() === "") return;
+ const parsed = Number(jumpValue);
+ if (Number.isNaN(parsed)) return;
+ const target = Math.max(1, Math.min(totalPages, parsed));
+ onPageChange(target);
+ setIsJumpOpen(false);
+ } else if (e.key === "Escape") {
+ setIsJumpOpen(false);
+ }
+ };
+
return (
+ {startPage > 1 && (
+
onPageChange(1)}
+ className="pagination__button"
+ >
+
+
+
+
+
+ )}
+
onPageChange(page - 1)}
@@ -39,20 +144,25 @@ export function Pagination({
- {page > 2 && (
+ {isLastThree && startPage > 1 && (
<>
onPageChange(1)}
className="pagination__button"
- disabled={page === 1}
+ onClick={() => onPageChange(1)}
>
- {1}
+ {formatNumber(1)}
-
-
- ...
-
+
setIsJumpOpen(true)}
+ onClose={() => setIsJumpOpen(false)}
+ onChange={onJumpChange}
+ onKeyDown={onJumpKeyDown}
+ />
>
)}
@@ -70,11 +180,18 @@ export function Pagination({
))}
- {page < totalPages - 1 && (
+ {!isLastThree && page < totalPages - 1 && (
<>
-
- ...
-
+ setIsJumpOpen(true)}
+ onClose={() => setIsJumpOpen(false)}
+ onChange={onJumpChange}
+ onKeyDown={onJumpKeyDown}
+ />
+
+ {endPage < totalPages && (
+ onPageChange(totalPages)}
+ className="pagination__button"
+ >
+
+
+
+
+
+ )}
);
}
diff --git a/src/renderer/src/pages/downloads/download-group.tsx b/src/renderer/src/pages/downloads/download-group.tsx
index bfa27792..06e9face 100644
--- a/src/renderer/src/pages/downloads/download-group.tsx
+++ b/src/renderer/src/pages/downloads/download-group.tsx
@@ -114,15 +114,6 @@ export function DownloadGroup({
return {t("deleting")}
;
}
- if (download.downloader === Downloader.AllDebrid) {
- return (
- <>
- {progress}
- {t("alldebrid_size_not_supported")}
- >
- );
- }
-
if (isGameDownloading) {
if (lastPacket?.isDownloadingMetadata) {
return {t("downloading_metadata")}
;
@@ -190,15 +181,6 @@ export function DownloadGroup({
}
if (download.status === "active") {
- if ((download.downloader as unknown as string) === "alldebrid") {
- return (
- <>
- {formatDownloadProgress(download.progress)}
- {t("alldebrid_size_not_supported")}
- >
- );
- }
-
return (
<>
{formatDownloadProgress(download.progress)}
@@ -293,9 +275,7 @@ export function DownloadGroup({
(download?.downloader === Downloader.RealDebrid &&
!userPreferences?.realDebridApiToken) ||
(download?.downloader === Downloader.TorBox &&
- !userPreferences?.torBoxApiToken) ||
- (download?.downloader === Downloader.AllDebrid &&
- !userPreferences?.allDebridApiKey);
+ !userPreferences?.torBoxApiToken);
return [
{
diff --git a/src/renderer/src/pages/game-details/cloud-sync-rename-artifact-modal/cloud-sync-rename-artifact-modal.tsx b/src/renderer/src/pages/game-details/cloud-sync-rename-artifact-modal/cloud-sync-rename-artifact-modal.tsx
index 25525331..c2e6e3a5 100644
--- a/src/renderer/src/pages/game-details/cloud-sync-rename-artifact-modal/cloud-sync-rename-artifact-modal.tsx
+++ b/src/renderer/src/pages/game-details/cloud-sync-rename-artifact-modal/cloud-sync-rename-artifact-modal.tsx
@@ -58,7 +58,14 @@ export function CloudSyncRenameArtifactModal({
try {
if (!artifact) return;
- await window.electron.renameGameArtifact(artifact.id, data.label);
+ await window.electron.hydraApi.put(
+ `/profile/games/artifacts/${artifact.id}`,
+ {
+ data: {
+ label: data.label,
+ },
+ }
+ );
await getGameArtifacts();
showSuccessToast(t("artifact_renamed"));
diff --git a/src/renderer/src/pages/game-details/description-header/description-header.scss b/src/renderer/src/pages/game-details/description-header/description-header.scss
index 1af1480d..74126fd5 100644
--- a/src/renderer/src/pages/game-details/description-header/description-header.scss
+++ b/src/renderer/src/pages/game-details/description-header/description-header.scss
@@ -2,20 +2,29 @@
.description-header {
width: 100%;
- padding: calc(globals.$spacing-unit * 1.5);
+ padding: calc(globals.$spacing-unit * 2);
display: flex;
justify-content: space-between;
align-items: center;
background-color: globals.$background-color;
height: 72px;
- border-radius: 12px;
+ border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.05);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
- margin-bottom: calc(globals.$spacing-unit * 1);
&__info {
display: flex;
- gap: globals.$spacing-unit;
+ gap: calc(globals.$spacing-unit * 0.5);
flex-direction: column;
+
+ p {
+ font-size: globals.$small-font-size;
+ color: globals.$muted-color;
+ font-weight: 400;
+
+ &:first-child {
+ font-weight: 600;
+ }
+ }
}
}
diff --git a/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.scss b/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.scss
index 9483b50e..f9da431d 100644
--- a/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.scss
+++ b/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.scss
@@ -2,7 +2,7 @@
.gallery-slider {
&__container {
- padding: calc(globals.$spacing-unit * 1.5) calc(globals.$spacing-unit * 1);
+ padding: calc(globals.$spacing-unit * 1.5) 0;
width: 100%;
display: flex;
flex-direction: column;
@@ -25,11 +25,6 @@
overflow: hidden;
border-radius: 8px;
- @media (min-width: 1024px) {
- width: 80%;
- max-height: 400px;
- }
-
@media (min-width: 1280px) {
width: 60%;
max-height: 500px;
@@ -65,17 +60,13 @@
&__preview {
width: 100%;
padding: globals.$spacing-unit 0;
- height: 100%;
+ height: auto;
display: flex;
position: relative;
overflow-x: auto;
overflow-y: hidden;
gap: calc(globals.$spacing-unit / 2);
- @media (min-width: 1024px) {
- width: 80%;
- }
-
@media (min-width: 1280px) {
width: 60%;
}
diff --git a/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.tsx b/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.tsx
index 4bf8dc48..c9658636 100644
--- a/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.tsx
+++ b/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.tsx
@@ -7,11 +7,16 @@ import {
} from "@primer/octicons-react";
import useEmblaCarousel from "embla-carousel-react";
import { gameDetailsContext } from "@renderer/context";
+import { useAppSelector } from "@renderer/hooks";
import "./gallery-slider.scss";
export function GallerySlider() {
const { shopDetails } = useContext(gameDetailsContext);
const { t } = useTranslation("game_details");
+ const userPreferences = useAppSelector(
+ (state) => state.userPreferences.value
+ );
+ const autoplayEnabled = userPreferences?.autoplayGameTrailers !== false;
const hasScreenshots = shopDetails && shopDetails.screenshots?.length;
@@ -164,7 +169,7 @@ export function GallerySlider() {
poster={item.poster}
loop
muted
- autoPlay
+ autoPlay={autoplayEnabled}
tabIndex={-1}
>
diff --git a/src/renderer/src/pages/game-details/game-details-content.tsx b/src/renderer/src/pages/game-details/game-details-content.tsx
index ca2ca023..63c4c974 100644
--- a/src/renderer/src/pages/game-details/game-details-content.tsx
+++ b/src/renderer/src/pages/game-details/game-details-content.tsx
@@ -1,33 +1,74 @@
-import { useContext, useEffect, useMemo, useRef, useState } from "react";
+import { useContext, useEffect, useMemo, useState } from "react";
import { PencilIcon } from "@primer/octicons-react";
+import { useTranslation } from "react-i18next";
import { HeroPanel } from "./hero";
import { DescriptionHeader } from "./description-header/description-header";
import { GallerySlider } from "./gallery-slider/gallery-slider";
import { Sidebar } from "./sidebar/sidebar";
import { EditGameModal } from "./modals";
+import { GameReviews } from "./game-reviews";
+import { GameLogo } from "./game-logo";
-import { useTranslation } from "react-i18next";
-import { cloudSyncContext, gameDetailsContext } from "@renderer/context";
import { AuthPage } from "@shared";
+import { cloudSyncContext, gameDetailsContext } from "@renderer/context";
import cloudIconAnimated from "@renderer/assets/icons/cloud-animated.gif";
import { useUserDetails, useLibrary } from "@renderer/hooks";
import { useSubscription } from "@renderer/hooks/use-subscription";
import "./game-details.scss";
+import "./hero.scss";
+
+const processMediaElements = (document: Document) => {
+ const $images = Array.from(document.querySelectorAll("img"));
+ $images.forEach(($image) => {
+ $image.loading = "lazy";
+ $image.removeAttribute("width");
+ $image.removeAttribute("height");
+ $image.removeAttribute("style");
+ $image.style.maxWidth = "100%";
+ $image.style.width = "auto";
+ $image.style.height = "auto";
+ $image.style.boxSizing = "border-box";
+ });
+
+ // Handle videos the same way
+ const $videos = Array.from(document.querySelectorAll("video"));
+ $videos.forEach(($video) => {
+ $video.removeAttribute("width");
+ $video.removeAttribute("height");
+ $video.removeAttribute("style");
+ $video.style.maxWidth = "100%";
+ $video.style.width = "auto";
+ $video.style.height = "auto";
+ $video.style.boxSizing = "border-box";
+ });
+};
+
+const getImageWithCustomPriority = (
+ customUrl: string | null | undefined,
+ originalUrl: string | null | undefined,
+ fallbackUrl?: string | null | undefined
+) => {
+ return customUrl || originalUrl || fallbackUrl || "";
+};
export function GameDetailsContent() {
- const heroRef = useRef(null);
-
const { t } = useTranslation("game_details");
- const { objectId, shopDetails, game, hasNSFWContentBlocked, updateGame } =
- useContext(gameDetailsContext);
+ const {
+ objectId,
+ shopDetails,
+ game,
+ hasNSFWContentBlocked,
+ updateGame,
+ shop,
+ } = useContext(gameDetailsContext);
const { showHydraCloudModal } = useSubscription();
const { userDetails, hasActiveSubscription } = useUserDetails();
- const { updateLibrary } = useLibrary();
+ const { updateLibrary, library } = useLibrary();
const { setShowCloudSyncModal, getGameArtifacts } =
useContext(cloudSyncContext);
@@ -40,33 +81,7 @@ export function GameDetailsContent() {
"text/html"
);
- const $images = Array.from(document.querySelectorAll("img"));
- $images.forEach(($image) => {
- $image.loading = "lazy";
- // Remove any inline width/height styles that might cause overflow
- $image.removeAttribute("width");
- $image.removeAttribute("height");
- $image.removeAttribute("style");
- // Set max-width to prevent overflow
- $image.style.maxWidth = "100%";
- $image.style.width = "auto";
- $image.style.height = "auto";
- $image.style.boxSizing = "border-box";
- });
-
- // Handle videos the same way
- const $videos = Array.from(document.querySelectorAll("video"));
- $videos.forEach(($video) => {
- // Remove any inline width/height styles that might cause overflow
- $video.removeAttribute("width");
- $video.removeAttribute("height");
- $video.removeAttribute("style");
- // Set max-width to prevent overflow
- $video.style.maxWidth = "100%";
- $video.style.width = "auto";
- $video.style.height = "auto";
- $video.style.boxSizing = "border-box";
- });
+ processMediaElements(document);
return document.body.outerHTML;
}
@@ -80,6 +95,16 @@ export function GameDetailsContent() {
const [backdropOpacity, setBackdropOpacity] = useState(1);
const [showEditGameModal, setShowEditGameModal] = useState(false);
+ const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false);
+ const [hasUserReviewed, setHasUserReviewed] = useState(false);
+
+ // Check if the current game is in the user's library
+ const isGameInLibrary = useMemo(() => {
+ if (!library || !shop || !objectId) return false;
+ return library.some(
+ (libItem) => libItem.shop === shop && libItem.objectId === objectId
+ );
+ }, [library, shop, objectId]);
useEffect(() => {
setBackdropOpacity(1);
@@ -103,7 +128,7 @@ export function GameDetailsContent() {
setShowEditGameModal(true);
};
- const handleGameUpdated = (_updatedGame: any) => {
+ const handleGameUpdated = () => {
updateGame();
updateLibrary();
};
@@ -114,15 +139,6 @@ export function GameDetailsContent() {
const isCustomGame = game?.shop === "custom";
- // Helper function to get image with custom asset priority
- const getImageWithCustomPriority = (
- customUrl: string | null | undefined,
- originalUrl: string | null | undefined,
- fallbackUrl?: string | null | undefined
- ) => {
- return customUrl || originalUrl || fallbackUrl || "";
- };
-
const heroImage = isCustomGame
? game?.libraryHeroImageUrl || game?.iconUrl || ""
: getImageWithCustomPriority(
@@ -130,65 +146,24 @@ export function GameDetailsContent() {
shopDetails?.assets?.libraryHeroImageUrl
);
- const logoImage = isCustomGame
- ? game?.logoImageUrl || ""
- : getImageWithCustomPriority(
- game?.customLogoImageUrl,
- shopDetails?.assets?.logoImageUrl
- );
-
- const renderGameLogo = () => {
- if (isCustomGame) {
- // For custom games, show logo image if available, otherwise show game title as text
- if (logoImage) {
- return (
-
- );
- } else {
- return (
- {game?.title}
- );
- }
- } else {
- // For non-custom games, show logo image if available
- return logoImage ? (
-
- ) : null;
- }
- };
-
return (
-
+

-
- {renderGameLogo()}
+
{game && (
@@ -220,11 +195,13 @@ export function GameDetailsContent() {
)}
+
+
+
+
-
-
@@ -234,11 +211,37 @@ export function GameDetailsContent() {
dangerouslySetInnerHTML={{
__html: aboutTheGame,
}}
- className="game-details__description"
+ className={`game-details__description ${
+ isDescriptionExpanded
+ ? "game-details__description--expanded"
+ : "game-details__description--collapsed"
+ }`}
/>
+
+ {aboutTheGame && aboutTheGame.length > 500 && (
+ setIsDescriptionExpanded(!isDescriptionExpanded)}
+ >
+ {isDescriptionExpanded ? t("show_less") : t("show_more")}
+
+ )}
+
+ {shop !== "custom" && shop && objectId && (
+
+ )}
- {game?.shop !== "custom" &&
}
+ {shop !== "custom" &&
}
diff --git a/src/renderer/src/pages/game-details/game-details-skeleton.tsx b/src/renderer/src/pages/game-details/game-details-skeleton.tsx
index c39da3bb..7fc2a176 100644
--- a/src/renderer/src/pages/game-details/game-details-skeleton.tsx
+++ b/src/renderer/src/pages/game-details/game-details-skeleton.tsx
@@ -1,58 +1,170 @@
import Skeleton from "react-loading-skeleton";
-import { Button } from "@renderer/components";
-import { useTranslation } from "react-i18next";
-import "./game-details.scss";
+import "react-loading-skeleton/dist/skeleton.css";
export function GameDetailsSkeleton() {
- const { t } = useTranslation("game_details");
-
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
- {Array.from({ length: 3 }).map((_, index) => (
-
- ))}
-
- {Array.from({ length: 2 }).map((_, index) => (
-
- ))}
-
-
+
+
+
-
-
-
- {t("minimum")}
-
-
- {t("recommended")}
-
-
-
- {Array.from({ length: 6 }).map((_, index) => (
-
- ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
);
}
diff --git a/src/renderer/src/pages/game-details/game-details.scss b/src/renderer/src/pages/game-details/game-details.scss
index e1140d31..f5f77a86 100644
--- a/src/renderer/src/pages/game-details/game-details.scss
+++ b/src/renderer/src/pages/game-details/game-details.scss
@@ -1,19 +1,5 @@
@use "../../scss/globals.scss";
-$hero-height: 300px;
-
-@keyframes slide-in {
- 0% {
- transform: translateY(calc(40px + globals.$spacing-unit * 2));
- opacity: 0;
- }
-
- 100% {
- transform: translateY(0);
- opacity: 1;
- }
-}
-
.game-details {
&__wrapper {
display: flex;
@@ -27,143 +13,6 @@ $hero-height: 300px;
}
}
- &__hero {
- width: 100%;
- height: $hero-height;
- min-height: $hero-height;
- display: flex;
- flex-direction: column;
- position: relative;
- transition: all ease 0.2s;
-
- @media (min-width: 1250px) {
- height: 350px;
- min-height: 350px;
- }
- }
-
- &__hero-content {
- padding: calc(globals.$spacing-unit * 1.5);
- height: 100%;
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: flex-end;
-
- @media (min-width: 768px) {
- padding: calc(globals.$spacing-unit * 2);
- }
- }
-
- &__hero-buttons {
- display: flex;
- gap: globals.$spacing-unit;
- align-items: center;
-
- &--right {
- margin-left: auto;
- }
- }
-
- &__edit-custom-game-button {
- padding: calc(globals.$spacing-unit * 1.5);
- background-color: rgba(0, 0, 0, 0.6);
- backdrop-filter: blur(20px);
- border-radius: 8px;
- transition: all ease 0.2s;
- cursor: pointer;
- min-height: 40px;
- min-width: 40px;
- display: flex;
- align-items: center;
- justify-content: center;
- color: globals.$muted-color;
- border: solid 1px globals.$border-color;
- box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.8);
- animation: slide-in 0.3s cubic-bezier(0.33, 1, 0.68, 1);
-
- &:active {
- opacity: 0.9;
- }
-
- &:hover {
- background-color: rgba(0, 0, 0, 0.5);
- color: globals.$body-color;
- }
- }
-
- &__hero-logo-backdrop {
- width: 100%;
- height: 100%;
- background: linear-gradient(0deg, rgba(0, 0, 0, 0.3) 60%, transparent 100%);
- position: absolute;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- }
-
- &__hero-image {
- width: 100%;
- height: calc($hero-height + 72px);
- min-height: calc($hero-height + 72px);
- object-fit: cover;
- object-position: top;
- transition: all ease 0.2s;
- position: absolute;
- z-index: 0;
-
- @media (min-width: 1250px) {
- object-position: center;
- height: calc(350px + 72px);
- min-height: calc(350px + 72px);
- }
- }
-
- &__game-logo {
- width: 200px;
- align-self: flex-end;
-
- @media (min-width: 768px) {
- width: 250px;
- }
-
- @media (min-width: 1024px) {
- width: 300px;
- }
- }
-
- &__game-logo-text {
- width: 200px;
- align-self: flex-end;
- font-size: 1.8rem;
- font-weight: bold;
- color: #ffffff;
- text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
- text-align: left;
- line-height: 1.2;
- word-wrap: break-word;
- overflow-wrap: break-word;
- hyphens: auto;
-
- @media (min-width: 768px) {
- width: 250px;
- font-size: 2.2rem;
- }
-
- @media (min-width: 1024px) {
- width: 300px;
- font-size: 2.5rem;
- }
- }
-
- &__hero-image-skeleton {
- height: 300px;
-
- @media (min-width: 1250px) {
- height: 350px;
- }
- }
-
&__container {
width: 100%;
height: 100%;
@@ -172,6 +21,7 @@ $hero-height: 300px;
z-index: 1;
}
+ // Description Section Styles
&__description-container {
display: flex;
width: 100%;
@@ -192,6 +42,8 @@ $hero-height: 300px;
min-width: 0;
flex: 1;
overflow-x: hidden;
+ display: flex;
+ flex-direction: column;
}
&__description {
@@ -203,6 +55,7 @@ $hero-height: 300px;
margin-right: auto;
overflow-x: auto;
min-height: auto;
+ transition: max-height 0.3s ease-in-out;
@media (min-width: 1280px) {
width: 60%;
@@ -212,6 +65,27 @@ $hero-height: 300px;
width: 50%;
}
+ &--collapsed {
+ max-height: 300px;
+ overflow: hidden;
+ position: relative;
+
+ &::after {
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 60px;
+ background: linear-gradient(transparent, globals.$background-color);
+ pointer-events: none;
+ }
+ }
+
+ &--expanded {
+ max-height: none;
+ }
+
img,
video {
border-radius: 5px;
@@ -237,134 +111,70 @@ $hero-height: 300px;
}
}
- &__description-skeleton {
- display: flex;
- flex-direction: column;
- gap: globals.$spacing-unit;
- padding: calc(globals.$spacing-unit * 2) calc(globals.$spacing-unit * 1.5);
- width: 100%;
- margin-left: auto;
- margin-right: auto;
-
- @media (min-width: 768px) {
- padding: calc(globals.$spacing-unit * 2.5) calc(globals.$spacing-unit * 2);
- }
-
- @media (min-width: 1024px) {
- padding: calc(globals.$spacing-unit * 3) calc(globals.$spacing-unit * 2);
- width: 80%;
- }
-
- @media (min-width: 1280px) {
- width: 60%;
- line-height: 22px;
- }
-
- @media (min-width: 1536px) {
- width: 50%;
- }
- }
-
- &__randomizer-button {
- animation: slide-in 0.2s;
- position: fixed;
- bottom: calc(globals.$spacing-unit * 3);
- right: calc(9px + globals.$spacing-unit * 2);
- box-shadow: rgba(255, 255, 255, 0.1) 0px 0px 10px 1px;
- border: solid 2px globals.$border-color;
- z-index: 1;
- background-color: globals.$background-color;
-
- &:hover {
- background-color: globals.$background-color;
- box-shadow: rgba(255, 255, 255, 0.1) 0px 0px 15px 5px;
- opacity: 1;
- }
-
- &:active {
- transform: scale(0.98);
- }
-
- &:disabled {
- box-shadow: none;
- transform: none;
- opacity: 0.8;
- background-color: globals.$background-color;
- }
- }
-
- &__hero-panel-skeleton {
- width: 100%;
- padding: calc(globals.$spacing-unit * 2);
- display: flex;
- align-items: center;
- background-color: globals.$background-color;
- height: 72px;
- border-bottom: solid 1px globals.$border-color;
- }
-
- &__cloud-sync-button {
- padding: calc(globals.$spacing-unit * 1.5) calc(globals.$spacing-unit * 2);
- background-color: rgba(0, 0, 0, 0.6);
- backdrop-filter: blur(20px);
- border-radius: 8px;
- transition: all ease 0.2s;
+ &__description-toggle {
+ background: none;
+ border: 1px solid globals.$border-color;
+ color: globals.$body-color;
+ padding: calc(globals.$spacing-unit * 0.75)
+ calc(globals.$spacing-unit * 1.5);
+ border-radius: 4px;
cursor: pointer;
- min-height: 40px;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: globals.$spacing-unit;
- color: globals.$muted-color;
- font-size: globals.$small-font-size;
- border: solid 1px globals.$border-color;
- box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.8);
- animation: slide-in 0.3s cubic-bezier(0.33, 1, 0.68, 1);
-
- &:active {
- opacity: 0.9;
- }
-
- &:disabled {
- opacity: globals.$disabled-opacity;
- cursor: not-allowed;
- }
+ font-size: globals.$body-font-size;
+ margin-top: calc(globals.$spacing-unit * 1.5);
+ transition: all 0.2s ease;
+ align-self: center;
&:hover {
- background-color: rgba(0, 0, 0, 0.5);
+ background-color: rgba(255, 255, 255, 0.1);
+ border-color: rgba(255, 255, 255, 0.1);
}
}
- &__stars-icon-container {
- width: 16px;
- height: 16px;
- position: relative;
- }
+ // Skeleton-specific styles
+ &__skeleton {
+ .react-loading-skeleton {
+ background: linear-gradient(90deg, #1c1c1c 25%, #2a2a2a 50%, #1c1c1c 75%);
+ background-size: 200% 100%;
+ animation: skeleton-loading 1.5s infinite;
+ }
- &__stars-icon {
- width: 70px;
- position: absolute;
- top: -28px;
- left: -27px;
- }
+ // Ensure skeleton elements maintain proper spacing
+ .description-header {
+ margin-bottom: calc(globals.$spacing-unit * 1.5);
+ }
- &__cloud-icon-container {
- width: 20px;
- height: 16px;
- display: flex;
- align-items: center;
- justify-content: center;
- position: relative;
- }
+ .content-sidebar {
+ min-width: 300px;
+ max-width: 300px;
+ }
- &__cloud-icon {
- width: 26px;
- position: absolute;
- top: -3px;
- }
+ // Hero panel skeleton spacing
+ .hero-panel__content {
+ display: flex;
+ flex-direction: column;
+ gap: calc(globals.$spacing-unit * 0.5);
+ }
- &__hero-backdrop {
- flex: 1;
- transition: opacity 0.2s ease;
+ // Review items skeleton spacing
+ .review-item-skeleton {
+ border: 1px solid globals.$border-color;
+ border-radius: 8px;
+ padding: calc(globals.$spacing-unit * 1);
+ margin-bottom: calc(globals.$spacing-unit * 1);
+ }
+
+ // Sidebar section spacing
+ .sidebar-section-skeleton {
+ margin-bottom: calc(globals.$spacing-unit * 1.5);
+ }
+ }
+}
+
+@keyframes skeleton-loading {
+ 0% {
+ background-position: 200% 0;
+ }
+ 100% {
+ background-position: -200% 0;
}
}
diff --git a/src/renderer/src/pages/game-details/game-details.tsx b/src/renderer/src/pages/game-details/game-details.tsx
index f0778494..6bc28c10 100644
--- a/src/renderer/src/pages/game-details/game-details.tsx
+++ b/src/renderer/src/pages/game-details/game-details.tsx
@@ -25,6 +25,7 @@ import { Downloader, getDownloadersForUri } from "@shared";
import { CloudSyncModal } from "./cloud-sync-modal/cloud-sync-modal";
import { CloudSyncFilesModal } from "./cloud-sync-files-modal/cloud-sync-files-modal";
import "./game-details.scss";
+import "./hero.scss";
export default function GameDetails() {
const [randomGame, setRandomGame] = useState(null);
@@ -102,7 +103,6 @@ export default function GameDetails() {
automaticallyExtract: boolean
) => {
const response = await startDownload({
- repackId: repack.id,
objectId: objectId!,
title: gameTitle,
downloader,
diff --git a/src/renderer/src/pages/game-details/game-logo.tsx b/src/renderer/src/pages/game-details/game-logo.tsx
new file mode 100644
index 00000000..f0cb92ae
--- /dev/null
+++ b/src/renderer/src/pages/game-details/game-logo.tsx
@@ -0,0 +1,49 @@
+import type { Game, ShopDetailsWithAssets } from "@types";
+
+interface GameLogoProps {
+ game: Game | null;
+ shopDetails: ShopDetailsWithAssets | null;
+}
+
+const getImageWithCustomPriority = (
+ customUrl: string | null | undefined,
+ originalUrl: string | null | undefined,
+ fallbackUrl?: string | null | undefined
+) => {
+ return customUrl || originalUrl || fallbackUrl || "";
+};
+
+export function GameLogo({ game, shopDetails }: Readonly) {
+ const isCustomGame = game?.shop === "custom";
+
+ const logoImage = isCustomGame
+ ? game?.logoImageUrl || ""
+ : getImageWithCustomPriority(
+ game?.customLogoImageUrl,
+ shopDetails?.assets?.logoImageUrl
+ );
+
+ if (isCustomGame) {
+ // For custom games, show logo image if available, otherwise show game title as text
+ if (logoImage) {
+ return (
+
+ );
+ } else {
+ return {game?.title}
;
+ }
+ } else {
+ // For non-custom games, show logo image if available
+ return logoImage ? (
+
+ ) : null;
+ }
+}
diff --git a/src/renderer/src/pages/game-details/game-reviews.scss b/src/renderer/src/pages/game-details/game-reviews.scss
new file mode 100644
index 00000000..e3a187b6
--- /dev/null
+++ b/src/renderer/src/pages/game-details/game-reviews.scss
@@ -0,0 +1,116 @@
+@use "../../scss/globals.scss";
+
+.game-details {
+ &__reviews-section {
+ margin-top: calc(globals.$spacing-unit * 3);
+ padding-top: calc(globals.$spacing-unit * 3);
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+
+ @media (min-width: 1280px) {
+ width: 60%;
+ }
+
+ @media (min-width: 1536px) {
+ width: 50%;
+ }
+ }
+
+ &__reviews-title {
+ font-size: 1.25rem;
+ font-weight: 600;
+ color: globals.$muted-color;
+ margin: 0;
+ }
+
+ &__reviews-title-group {
+ display: flex;
+ align-items: center;
+ gap: calc(globals.$spacing-unit);
+ flex: 1;
+ }
+
+ &__reviews-badge {
+ background-color: rgba(255, 255, 255, 0.1);
+ color: rgba(255, 255, 255, 0.7);
+ padding: 4px 8px;
+ border-radius: 6px;
+ font-size: 12px;
+ font-weight: 600;
+ min-width: 24px;
+ text-align: center;
+ flex-shrink: 0;
+ }
+
+ &__reviews-container {
+ display: flex;
+ flex-direction: column;
+ gap: calc(globals.$spacing-unit * 4);
+ }
+
+ &__reviews-separator {
+ height: 1px;
+ background: rgba(255, 255, 255, 0.1);
+ margin: calc(globals.$spacing-unit * 3) 0;
+ width: 100%;
+ }
+
+ &__reviews-list-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding-bottom: calc(globals.$spacing-unit * 1);
+ }
+
+ &__reviews-empty {
+ text-align: center;
+ padding: calc(globals.$spacing-unit * 4) calc(globals.$spacing-unit * 2);
+ margin-bottom: calc(globals.$spacing-unit * 2);
+ }
+
+ &__reviews-empty-icon {
+ font-size: 48px;
+ margin-bottom: calc(globals.$spacing-unit * 2);
+ color: rgba(255, 255, 255, 0.6);
+ }
+
+ &__reviews-empty-title {
+ color: rgba(255, 255, 255, 0.9);
+ font-weight: 600;
+ margin: 0 0 calc(globals.$spacing-unit * 1) 0;
+ }
+
+ &__reviews-empty-message {
+ color: rgba(255, 255, 255, 0.6);
+ font-size: globals.$small-font-size;
+ margin: 0;
+ line-height: 1.4;
+ }
+
+ &__reviews-loading {
+ text-align: center;
+ color: rgba(255, 255, 255, 0.6);
+ padding: calc(globals.$spacing-unit * 2);
+ }
+
+ &__load-more-reviews {
+ background: rgba(255, 255, 255, 0.05);
+ border: 1px solid globals.$border-color;
+ color: globals.$body-color;
+ padding: calc(globals.$spacing-unit * 1) calc(globals.$spacing-unit * 2);
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: globals.$body-font-size;
+ font-family: inherit;
+ transition: all 0.2s ease;
+ width: 100%;
+ margin-top: calc(globals.$spacing-unit * 2);
+
+ &:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+ border-color: globals.$brand-teal;
+ }
+ }
+}
diff --git a/src/renderer/src/pages/game-details/game-reviews.tsx b/src/renderer/src/pages/game-details/game-reviews.tsx
new file mode 100644
index 00000000..1a6fc675
--- /dev/null
+++ b/src/renderer/src/pages/game-details/game-reviews.tsx
@@ -0,0 +1,547 @@
+import { useCallback, useEffect, useRef, useState } from "react";
+import { NoteIcon } from "@primer/octicons-react";
+import { useEditor } from "@tiptap/react";
+import StarterKit from "@tiptap/starter-kit";
+import { useTranslation } from "react-i18next";
+import type { GameReview, Game, GameShop } from "@types";
+
+import { ReviewForm } from "./review-form";
+import { ReviewItem } from "./review-item";
+import { ReviewSortOptions } from "./review-sort-options";
+import { ReviewPromptBanner } from "./review-prompt-banner";
+import "./game-reviews.scss";
+import { useToast } from "@renderer/hooks";
+
+type ReviewSortOption =
+ | "newest"
+ | "oldest"
+ | "score_high"
+ | "score_low"
+ | "most_voted";
+
+interface GameReviewsProps {
+ shop: GameShop;
+ objectId: string;
+ game: Game | null;
+ userDetailsId?: string;
+ isGameInLibrary: boolean;
+ hasUserReviewed: boolean;
+ onUserReviewedChange: (hasReviewed: boolean) => void;
+}
+
+const MAX_REVIEW_CHARS = 1000;
+
+export function GameReviews({
+ shop,
+ objectId,
+ game,
+ userDetailsId,
+ isGameInLibrary,
+ hasUserReviewed,
+ onUserReviewedChange,
+}: Readonly) {
+ const { t, i18n } = useTranslation("game_details");
+ const { showSuccessToast, showErrorToast } = useToast();
+
+ const [reviews, setReviews] = useState([]);
+ const [reviewsLoading, setReviewsLoading] = useState(false);
+ const [reviewScore, setReviewScore] = useState(null);
+ const [submittingReview, setSubmittingReview] = useState(false);
+ const [reviewCharCount, setReviewCharCount] = useState(0);
+ const [reviewsSortBy, setReviewsSortBy] =
+ useState("newest");
+ const [reviewsPage, setReviewsPage] = useState(0);
+ const [hasMoreReviews, setHasMoreReviews] = useState(true);
+ const [visibleBlockedReviews, setVisibleBlockedReviews] = useState<
+ Set
+ >(new Set());
+ const [totalReviewCount, setTotalReviewCount] = useState(0);
+ const [showReviewForm, setShowReviewForm] = useState(false);
+ const [votingReviews, setVotingReviews] = useState>(new Set());
+ const [showReviewPrompt, setShowReviewPrompt] = useState(false);
+
+ const previousVotesRef = useRef<
+ Map
+ >(new Map());
+ const abortControllerRef = useRef(null);
+
+ const editor = useEditor({
+ extensions: [
+ StarterKit.configure({
+ link: false,
+ }),
+ ],
+ content: "",
+ editorProps: {
+ attributes: {
+ class: "game-details__review-editor",
+ "data-placeholder": t("write_review_placeholder"),
+ },
+ handlePaste: (view, event) => {
+ const htmlContent = event.clipboardData?.getData("text/html") || "";
+ const plainText = event.clipboardData?.getData("text/plain") || "";
+
+ const currentText = view.state.doc.textContent;
+ const remainingChars = MAX_REVIEW_CHARS - currentText.length;
+
+ if ((htmlContent || plainText) && remainingChars > 0) {
+ event.preventDefault();
+
+ if (htmlContent) {
+ const tempDiv = document.createElement("div");
+ tempDiv.innerHTML = htmlContent;
+ const textLength = tempDiv.textContent?.length || 0;
+
+ if (textLength <= remainingChars) {
+ return false;
+ }
+ }
+
+ const truncatedText = plainText.slice(0, remainingChars);
+ view.dispatch(view.state.tr.insertText(truncatedText));
+ return true;
+ }
+ return false;
+ },
+ },
+ onUpdate: ({ editor }) => {
+ const text = editor.getText();
+ setReviewCharCount(text.length);
+
+ if (text.length > MAX_REVIEW_CHARS) {
+ const truncatedContent = text.slice(0, MAX_REVIEW_CHARS);
+ editor.commands.setContent(truncatedContent);
+ setReviewCharCount(MAX_REVIEW_CHARS);
+ }
+ },
+ });
+
+ const checkUserReview = useCallback(async () => {
+ if (!objectId || !userDetailsId || shop === "custom") return;
+
+ try {
+ const response = await window.electron.hydraApi.get<{
+ hasReviewed: boolean;
+ }>(`/games/${shop}/${objectId}/reviews/check`, {
+ needsAuth: true,
+ });
+ const hasReviewed = response?.hasReviewed || false;
+ onUserReviewedChange(hasReviewed);
+
+ const twoHoursInMilliseconds = 2 * 60 * 60 * 1000;
+ const hasEnoughPlaytime =
+ game && game.playTimeInMilliseconds >= twoHoursInMilliseconds;
+
+ if (
+ !hasReviewed &&
+ hasEnoughPlaytime &&
+ !sessionStorage.getItem(`reviewPromptDismissed_${objectId}`)
+ ) {
+ setShowReviewPrompt(true);
+ setShowReviewForm(true);
+ }
+ } catch (error) {
+ console.error("Failed to check user review:", error);
+ }
+ }, [objectId, userDetailsId, shop, game, onUserReviewedChange]);
+
+ const loadReviews = useCallback(
+ async (reset = false) => {
+ if (!objectId || shop === "custom") return;
+
+ if (abortControllerRef.current) {
+ abortControllerRef.current.abort();
+ }
+
+ const abortController = new AbortController();
+ abortControllerRef.current = abortController;
+
+ setReviewsLoading(true);
+ try {
+ const skip = reset ? 0 : reviewsPage * 20;
+ const params = new URLSearchParams({
+ take: "20",
+ skip: skip.toString(),
+ sortBy: reviewsSortBy,
+ language: i18n.language,
+ });
+
+ const response = await window.electron.hydraApi.get(
+ `/games/${shop}/${objectId}/reviews?${params.toString()}`,
+ { needsAuth: false }
+ );
+
+ if (abortController.signal.aborted) {
+ return;
+ }
+
+ const typedResponse = response as unknown as
+ | { reviews: GameReview[]; totalCount: number }
+ | undefined;
+ const reviewsData = typedResponse?.reviews || [];
+ const reviewCount = typedResponse?.totalCount || 0;
+
+ if (reset) {
+ setReviews(reviewsData);
+ setReviewsPage(0);
+ setTotalReviewCount(reviewCount);
+ } else {
+ setReviews((prev) => [...prev, ...reviewsData]);
+ }
+
+ setHasMoreReviews(reviewsData.length === 20);
+ } catch (error) {
+ if (!abortController.signal.aborted) {
+ console.error("Failed to load reviews:", error);
+ }
+ } finally {
+ if (!abortController.signal.aborted) {
+ setReviewsLoading(false);
+ }
+ }
+ },
+ [objectId, shop, reviewsPage, reviewsSortBy, i18n.language]
+ );
+
+ const handleVoteReview = async (
+ reviewId: string,
+ voteType: "upvote" | "downvote"
+ ) => {
+ if (!objectId || votingReviews.has(reviewId)) return;
+
+ setVotingReviews((prev) => new Set(prev).add(reviewId));
+
+ const reviewIndex = reviews.findIndex((r) => r.id === reviewId);
+ if (reviewIndex === -1) {
+ setVotingReviews((prev) => {
+ const next = new Set(prev);
+ next.delete(reviewId);
+ return next;
+ });
+ return;
+ }
+
+ const review = reviews[reviewIndex];
+ const originalReview = { ...review };
+
+ const updatedReviews = [...reviews];
+ const updatedReview = { ...review };
+
+ if (voteType === "upvote") {
+ if (review.hasUpvoted) {
+ updatedReview.hasUpvoted = false;
+ updatedReview.upvotes = Math.max(0, (review.upvotes || 0) - 1);
+ } else {
+ updatedReview.hasUpvoted = true;
+ updatedReview.upvotes = (review.upvotes || 0) + 1;
+
+ if (review.hasDownvoted) {
+ updatedReview.hasDownvoted = false;
+ updatedReview.downvotes = Math.max(0, (review.downvotes || 0) - 1);
+ }
+ }
+ } else {
+ if (review.hasDownvoted) {
+ updatedReview.hasDownvoted = false;
+ updatedReview.downvotes = Math.max(0, (review.downvotes || 0) - 1);
+ } else {
+ updatedReview.hasDownvoted = true;
+ updatedReview.downvotes = (review.downvotes || 0) + 1;
+
+ if (review.hasUpvoted) {
+ updatedReview.hasUpvoted = false;
+ updatedReview.upvotes = Math.max(0, (review.upvotes || 0) - 1);
+ }
+ }
+ }
+
+ updatedReviews[reviewIndex] = updatedReview;
+ setReviews(updatedReviews);
+
+ try {
+ await window.electron.hydraApi.put(
+ `/games/${shop}/${objectId}/reviews/${reviewId}/${voteType}`,
+ { data: {} }
+ );
+ } catch (error) {
+ console.error(`Failed to ${voteType} review:`, error);
+
+ const rolledBackReviews = [...reviews];
+ rolledBackReviews[reviewIndex] = originalReview;
+ setReviews(rolledBackReviews);
+
+ showErrorToast(t("vote_failed"));
+ } finally {
+ setTimeout(() => {
+ setVotingReviews((prev) => {
+ const next = new Set(prev);
+ next.delete(reviewId);
+ return next;
+ });
+ }, 500);
+ }
+ };
+
+ const handleDeleteReview = async (reviewId: string) => {
+ if (!objectId) return;
+
+ try {
+ await window.electron.hydraApi.delete(
+ `/games/${shop}/${objectId}/reviews/${reviewId}`
+ );
+ loadReviews(true);
+ onUserReviewedChange(false);
+ setShowReviewForm(true);
+ showSuccessToast(t("review_deleted_successfully"));
+ } catch (error) {
+ console.error("Failed to delete review:", error);
+ showErrorToast(t("review_deletion_failed"));
+ }
+ };
+
+ const handleSubmitReview = async () => {
+ const reviewHtml = editor?.getHTML() || "";
+ const reviewText = editor?.getText() || "";
+
+ if (!objectId) return;
+
+ if (!reviewText.trim()) {
+ showErrorToast(t("review_cannot_be_empty"));
+ return;
+ }
+
+ if (submittingReview || reviewCharCount > MAX_REVIEW_CHARS) {
+ return;
+ }
+
+ if (reviewScore === null) {
+ return;
+ }
+
+ setSubmittingReview(true);
+
+ try {
+ await window.electron.hydraApi.post(
+ `/games/${shop}/${objectId}/reviews`,
+ {
+ data: {
+ reviewHtml,
+ score: reviewScore,
+ },
+ }
+ );
+
+ editor?.commands.clearContent();
+ setReviewScore(null);
+ showSuccessToast(t("review_submitted_successfully"));
+
+ await loadReviews(true);
+ setShowReviewForm(false);
+ setShowReviewPrompt(false);
+ onUserReviewedChange(true);
+ } catch (error) {
+ console.error("Failed to submit review:", error);
+ showErrorToast(t("review_submission_failed"));
+ } finally {
+ setSubmittingReview(false);
+ }
+ };
+
+ const handleReviewPromptYes = () => {
+ setShowReviewPrompt(false);
+
+ setTimeout(() => {
+ const reviewFormElement = document.querySelector(
+ ".game-details__review-form"
+ );
+ if (reviewFormElement) {
+ reviewFormElement.scrollIntoView({
+ behavior: "smooth",
+ block: "start",
+ });
+ }
+ }, 100);
+ };
+
+ const handleReviewPromptLater = () => {
+ setShowReviewPrompt(false);
+ setShowReviewForm(false);
+ if (objectId) {
+ sessionStorage.setItem(`reviewPromptDismissed_${objectId}`, "true");
+ }
+ };
+
+ const handleSortChange = (newSortBy: ReviewSortOption) => {
+ if (newSortBy !== reviewsSortBy) {
+ setReviewsSortBy(newSortBy);
+ setReviewsPage(0);
+ setHasMoreReviews(true);
+ loadReviews(true);
+ }
+ };
+
+ const toggleBlockedReview = (reviewId: string) => {
+ setVisibleBlockedReviews((prev) => {
+ const newSet = new Set(prev);
+ if (newSet.has(reviewId)) {
+ newSet.delete(reviewId);
+ } else {
+ newSet.add(reviewId);
+ }
+ return newSet;
+ });
+ };
+
+ const loadMoreReviews = () => {
+ if (!reviewsLoading && hasMoreReviews) {
+ setReviewsPage((prev) => prev + 1);
+ loadReviews(false);
+ }
+ };
+
+ const handleVoteAnimationComplete = (
+ reviewId: string,
+ votes: { upvotes: number; downvotes: number }
+ ) => {
+ previousVotesRef.current.set(reviewId, votes);
+ };
+
+ useEffect(() => {
+ if (objectId) {
+ loadReviews(true);
+ if (userDetailsId) {
+ checkUserReview();
+ }
+ }
+
+ return () => {
+ if (abortControllerRef.current) {
+ abortControllerRef.current.abort();
+ abortControllerRef.current = null;
+ }
+ };
+ }, [objectId, userDetailsId, checkUserReview, loadReviews]);
+
+ useEffect(() => {
+ if (reviewsPage > 0) {
+ loadReviews(false);
+ }
+ }, [reviewsPage, loadReviews]);
+
+ useEffect(() => {
+ reviews.forEach((review) => {
+ if (!previousVotesRef.current.has(review.id)) {
+ previousVotesRef.current.set(review.id, {
+ upvotes: review.upvotes || 0,
+ downvotes: review.downvotes || 0,
+ });
+ }
+ });
+ }, [reviews]);
+
+ return (
+
+ {showReviewPrompt &&
+ userDetailsId &&
+ !hasUserReviewed &&
+ isGameInLibrary && (
+
+ )}
+
+ {showReviewForm && (
+ <>
+
+
+ >
+ )}
+
+
+
+
{t("reviews")}
+
+ {totalReviewCount}
+
+
+
+
+
+ {reviewsLoading && reviews.length === 0 && (
+
+ {t("loading_reviews")}
+
+ )}
+
+ {!reviewsLoading && reviews.length === 0 && (
+
+
+
+
+
+ {t("no_reviews_yet")}
+
+
+ {t("be_first_to_review")}
+
+
+ )}
+
+
0 ? 0.5 : 1,
+ transition: "opacity 0.2s ease",
+ }}
+ >
+ {reviews.map((review) => (
+
+ ))}
+
+
+ {hasMoreReviews && !reviewsLoading && (
+
+ {t("load_more_reviews")}
+
+ )}
+
+ {reviewsLoading && reviews.length > 0 && (
+
+ {t("loading_more_reviews")}
+
+ )}
+
+ );
+}
diff --git a/src/renderer/src/pages/game-details/hero.scss b/src/renderer/src/pages/game-details/hero.scss
new file mode 100644
index 00000000..41264fe4
--- /dev/null
+++ b/src/renderer/src/pages/game-details/hero.scss
@@ -0,0 +1,274 @@
+@use "../../scss/globals.scss";
+
+$hero-height: 350px;
+
+@keyframes slide-in {
+ 0% {
+ transform: translateY(calc(40px + globals.$spacing-unit * 2));
+ opacity: 0;
+ }
+
+ 100% {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+.game-details {
+ &__hero-panel {
+ padding: globals.$spacing-unit;
+ }
+
+ &__hero {
+ width: 100%;
+ height: $hero-height;
+ min-height: $hero-height;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ transition: all ease 0.2s;
+
+ @media (min-width: 1250px) {
+ height: 350px;
+ min-height: 350px;
+ }
+ }
+
+ &__hero-content {
+ padding: calc(globals.$spacing-unit * 1.5);
+ height: 100%;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-end;
+
+ @media (min-width: 768px) {
+ padding: calc(globals.$spacing-unit * 2);
+ }
+ }
+
+ &__hero-buttons {
+ display: flex;
+ gap: globals.$spacing-unit;
+ align-items: center;
+
+ &--right {
+ margin-left: auto;
+ }
+ }
+
+ &__edit-custom-game-button {
+ padding: calc(globals.$spacing-unit * 1.5);
+ background-color: rgba(0, 0, 0, 0.6);
+ backdrop-filter: blur(20px);
+ border-radius: 8px;
+ transition: all ease 0.2s;
+ cursor: pointer;
+ min-height: 40px;
+ min-width: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: globals.$muted-color;
+ border: solid 1px globals.$border-color;
+ box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.8);
+ animation: slide-in 0.3s cubic-bezier(0.33, 1, 0.68, 1);
+
+ &:active {
+ opacity: 0.9;
+ }
+
+ &:hover {
+ background-color: rgba(0, 0, 0, 0.5);
+ color: globals.$body-color;
+ }
+ }
+
+ &__hero-logo-backdrop {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ }
+
+ &__hero-image-wrapper {
+ position: absolute;
+ width: 100%;
+ height: 384px;
+ max-height: 384px;
+ overflow: hidden;
+ border-radius: 0px 0px 8px 8px;
+ z-index: 0;
+
+ &::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(
+ 0deg,
+ rgba(0, 0, 0, 0.3) 60%,
+ transparent 100%
+ );
+ z-index: 1;
+ pointer-events: none;
+ border-radius: inherit;
+ }
+
+ @media (min-width: 1250px) {
+ height: calc(350px + 82px);
+ min-height: calc(350px + 84px);
+ }
+ }
+
+ &__hero-image {
+ width: 100%;
+ height: $hero-height;
+ min-height: $hero-height;
+ object-fit: cover;
+ object-position: top;
+ transition: all ease 0.2s;
+ position: absolute;
+ z-index: 0;
+ border-radius: 0px 0px 8px 8px;
+
+ @media (min-width: 1250px) {
+ object-position: center;
+ height: $hero-height;
+ min-height: $hero-height;
+ }
+ }
+
+ &__game-logo {
+ width: 200px;
+ align-self: flex-end;
+ object-fit: contain;
+ object-position: left bottom;
+
+ @media (min-width: 768px) {
+ width: 250px;
+ }
+
+ @media (min-width: 1024px) {
+ width: 300px;
+ max-height: 150px;
+ }
+ }
+
+ &__game-logo-text {
+ width: 200px;
+ align-self: flex-end;
+ font-size: 1.8rem;
+ font-weight: bold;
+ color: #ffffff;
+ text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
+ text-align: left;
+ line-height: 1.2;
+ word-wrap: break-word;
+ overflow-wrap: break-word;
+ hyphens: auto;
+
+ @media (min-width: 768px) {
+ width: 250px;
+ font-size: 2.2rem;
+ }
+
+ @media (min-width: 1024px) {
+ width: 300px;
+ font-size: 2.5rem;
+ }
+ }
+
+ &__cloud-sync-button {
+ padding: calc(globals.$spacing-unit * 1.5) calc(globals.$spacing-unit * 2);
+ background-color: rgba(0, 0, 0, 0.6);
+ backdrop-filter: blur(20px);
+ border-radius: 8px;
+ transition: all ease 0.2s;
+ cursor: pointer;
+ min-height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: globals.$spacing-unit;
+ color: globals.$muted-color;
+ font-size: globals.$small-font-size;
+ border: solid 1px globals.$border-color;
+ box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.8);
+ animation: slide-in 0.3s cubic-bezier(0.33, 1, 0.68, 1);
+
+ &:active {
+ opacity: 0.9;
+ }
+
+ &:disabled {
+ opacity: globals.$disabled-opacity;
+ cursor: not-allowed;
+ }
+
+ &:hover {
+ background-color: rgba(0, 0, 0, 0.5);
+ }
+ }
+
+ &__cloud-icon-container {
+ width: 20px;
+ height: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ }
+
+ &__cloud-icon {
+ width: 26px;
+ position: absolute;
+ top: -3px;
+ }
+
+ &__randomizer-button {
+ padding: calc(globals.$spacing-unit * 1.5);
+ background-color: rgba(0, 0, 0, 0.6);
+ backdrop-filter: blur(20px);
+ border-radius: 8px;
+ transition: all ease 0.2s;
+ cursor: pointer;
+ min-height: 40px;
+ min-width: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: globals.$muted-color;
+ border: solid 1px globals.$border-color;
+ box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.8);
+ animation: slide-in 0.3s cubic-bezier(0.33, 1, 0.68, 1);
+
+ &:active {
+ opacity: 0.9;
+ }
+
+ &:hover {
+ background-color: rgba(0, 0, 0, 0.5);
+ color: globals.$body-color;
+ }
+ }
+
+ &__stars-icon-container {
+ width: 20px;
+ height: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ }
+
+ &__stars-icon {
+ width: 26px;
+ position: absolute;
+ top: -3px;
+ }
+}
diff --git a/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx b/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx
index ac8a1615..2e91d361 100644
--- a/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx
+++ b/src/renderer/src/pages/game-details/hero/hero-panel-actions.tsx
@@ -69,14 +69,32 @@ export function HeroPanelActions() {
updateGame();
};
- window.addEventListener("hydra:game-favorite-toggled", onFavoriteToggled as EventListener);
- window.addEventListener("hydra:game-removed-from-library", onGameRemoved as EventListener);
- window.addEventListener("hydra:game-files-removed", onFilesRemoved as EventListener);
+ window.addEventListener(
+ "hydra:game-favorite-toggled",
+ onFavoriteToggled as EventListener
+ );
+ window.addEventListener(
+ "hydra:game-removed-from-library",
+ onGameRemoved as EventListener
+ );
+ window.addEventListener(
+ "hydra:game-files-removed",
+ onFilesRemoved as EventListener
+ );
return () => {
- window.removeEventListener("hydra:game-favorite-toggled", onFavoriteToggled as EventListener);
- window.removeEventListener("hydra:game-removed-from-library", onGameRemoved as EventListener);
- window.removeEventListener("hydra:game-files-removed", onFilesRemoved as EventListener);
+ window.removeEventListener(
+ "hydra:game-favorite-toggled",
+ onFavoriteToggled as EventListener
+ );
+ window.removeEventListener(
+ "hydra:game-removed-from-library",
+ onGameRemoved as EventListener
+ );
+ window.removeEventListener(
+ "hydra:game-files-removed",
+ onFilesRemoved as EventListener
+ );
};
}, [updateLibrary, updateGame]);
@@ -226,7 +244,7 @@ export function HeroPanelActions() {
onClick={() => setShowRepacksModal(true)}
theme="outline"
disabled={isGameDownloading}
- className={`hero-panel-actions__action ${!repacks.length ? 'hero-panel-actions__action--disabled' : ''}`}
+ className={`hero-panel-actions__action ${repacks.length === 0 ? "hero-panel-actions__action--disabled" : ""}`}
>
{t("download")}
diff --git a/src/renderer/src/pages/game-details/hero/hero-panel.scss b/src/renderer/src/pages/game-details/hero/hero-panel.scss
index 4dd1cc22..c91e685c 100644
--- a/src/renderer/src/pages/game-details/hero/hero-panel.scss
+++ b/src/renderer/src/pages/game-details/hero/hero-panel.scss
@@ -18,6 +18,7 @@
top: 0;
z-index: 2;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
&--stuck {
background: rgba(0, 0, 0, 0.7);
@@ -29,7 +30,18 @@
&__content {
display: flex;
flex-direction: column;
- gap: globals.$spacing-unit;
+ gap: calc(globals.$spacing-unit * 0.5);
+
+ p {
+ font-size: globals.$small-font-size;
+ color: globals.$muted-color;
+ font-weight: 400;
+ margin: 0;
+
+ &:first-child {
+ font-weight: 600;
+ }
+ }
}
&__actions {
diff --git a/src/renderer/src/pages/game-details/hero/hero-panel.tsx b/src/renderer/src/pages/game-details/hero/hero-panel.tsx
index 7f8de0b0..799f2c36 100644
--- a/src/renderer/src/pages/game-details/hero/hero-panel.tsx
+++ b/src/renderer/src/pages/game-details/hero/hero-panel.tsx
@@ -50,25 +50,29 @@ export function HeroPanel() {
game?.download?.status === "paused";
return (
-
-
{getInfo()}
-
-
-
+
+
+
{getInfo()}
+
+
+
- {showProgressBar && (
-
- )}
+ {showProgressBar && (
+
+ )}
+
);
}
diff --git a/src/renderer/src/pages/game-details/modals/delete-review-modal.scss b/src/renderer/src/pages/game-details/modals/delete-review-modal.scss
new file mode 100644
index 00000000..34e916ad
--- /dev/null
+++ b/src/renderer/src/pages/game-details/modals/delete-review-modal.scss
@@ -0,0 +1,20 @@
+@use "../../../scss/globals.scss";
+
+.delete-review-modal {
+ &__karma-warning {
+ background-color: rgba(255, 193, 7, 0.1);
+ border: 1px solid rgba(255, 193, 7, 0.3);
+ border-radius: 4px;
+ padding: 12px;
+ margin-bottom: 16px;
+ color: #ffc107;
+ font-size: 14px;
+ font-weight: 500;
+ }
+
+ &__actions {
+ display: flex;
+ justify-content: flex-end;
+ gap: 8px;
+ }
+}
diff --git a/src/renderer/src/pages/game-details/modals/delete-review-modal.tsx b/src/renderer/src/pages/game-details/modals/delete-review-modal.tsx
new file mode 100644
index 00000000..fe612bbd
--- /dev/null
+++ b/src/renderer/src/pages/game-details/modals/delete-review-modal.tsx
@@ -0,0 +1,41 @@
+import { useTranslation } from "react-i18next";
+import { Button, Modal } from "@renderer/components";
+import "./delete-review-modal.scss";
+
+interface DeleteReviewModalProps {
+ visible: boolean;
+ onClose: () => void;
+ onConfirm: () => void;
+}
+
+export function DeleteReviewModal({
+ visible,
+ onClose,
+ onConfirm,
+}: Readonly
) {
+ const { t } = useTranslation("game_details");
+
+ const handleDeleteReview = () => {
+ onConfirm();
+ onClose();
+ };
+
+ return (
+
+
+
+ {t("delete_review_modal_cancel_button")}
+
+
+
+ {t("delete_review_modal_delete_button")}
+
+
+
+ );
+}
diff --git a/src/renderer/src/pages/game-details/modals/download-settings-modal.tsx b/src/renderer/src/pages/game-details/modals/download-settings-modal.tsx
index fec50c94..a6c32b6e 100644
--- a/src/renderer/src/pages/game-details/modals/download-settings-modal.tsx
+++ b/src/renderer/src/pages/game-details/modals/download-settings-modal.tsx
@@ -117,8 +117,6 @@ export function DownloadSettingsModal({
return userPreferences?.realDebridApiToken;
if (downloader === Downloader.TorBox)
return userPreferences?.torBoxApiToken;
- if (downloader === Downloader.AllDebrid)
- return userPreferences?.allDebridApiKey;
if (downloader === Downloader.Hydra)
return isFeatureEnabled(Feature.Nimbus);
return true;
@@ -133,7 +131,6 @@ export function DownloadSettingsModal({
downloaders,
userPreferences?.realDebridApiToken,
userPreferences?.torBoxApiToken,
- userPreferences?.allDebridApiKey,
]);
const handleChooseDownloadsPath = async () => {
@@ -194,8 +191,6 @@ export function DownloadSettingsModal({
const shouldDisableButton =
(downloader === Downloader.RealDebrid &&
!userPreferences?.realDebridApiToken) ||
- (downloader === Downloader.AllDebrid &&
- !userPreferences?.allDebridApiKey) ||
(downloader === Downloader.TorBox &&
!userPreferences?.torBoxApiToken) ||
(downloader === Downloader.Hydra &&
diff --git a/src/renderer/src/pages/game-details/modals/edit-game-modal.scss b/src/renderer/src/pages/game-details/modals/edit-game-modal.scss
index 5400df07..33558601 100644
--- a/src/renderer/src/pages/game-details/modals/edit-game-modal.scss
+++ b/src/renderer/src/pages/game-details/modals/edit-game-modal.scss
@@ -55,11 +55,8 @@
border: 1px solid var(--color-border);
border-radius: 8px;
background-color: var(--color-background-secondary);
- background-image: linear-gradient(
- 45deg,
- rgba(255, 255, 255, 0.1) 25%,
- transparent 25%
- ),
+ background-image:
+ linear-gradient(45deg, rgba(255, 255, 255, 0.1) 25%, transparent 25%),
linear-gradient(-45deg, rgba(255, 255, 255, 0.1) 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.1) 75%),
linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.1) 75%);
diff --git a/src/renderer/src/pages/game-details/modals/edit-game-modal.tsx b/src/renderer/src/pages/game-details/modals/edit-game-modal.tsx
index a31ce400..8fbdf4a2 100644
--- a/src/renderer/src/pages/game-details/modals/edit-game-modal.tsx
+++ b/src/renderer/src/pages/game-details/modals/edit-game-modal.tsx
@@ -19,6 +19,68 @@ export interface EditGameModalProps {
type AssetType = "icon" | "logo" | "hero";
+interface ElectronFile extends File {
+ path?: string;
+}
+
+interface GameWithOriginalAssets extends Game {
+ originalIconPath?: string;
+ originalLogoPath?: string;
+ originalHeroPath?: string;
+}
+
+interface LibraryGameWithCustomOriginalAssets extends LibraryGame {
+ customOriginalIconPath?: string;
+ customOriginalLogoPath?: string;
+ customOriginalHeroPath?: string;
+}
+
+interface AssetPaths {
+ icon: string;
+ logo: string;
+ hero: string;
+}
+
+interface AssetUrls {
+ icon: string | null;
+ logo: string | null;
+ hero: string | null;
+}
+
+interface RemovedAssets {
+ icon: boolean;
+ logo: boolean;
+ hero: boolean;
+}
+
+const VALID_IMAGE_TYPES = [
+ "image/jpeg",
+ "image/jpg",
+ "image/png",
+ "image/gif",
+ "image/webp",
+] as const;
+
+const IMAGE_EXTENSIONS = ["jpg", "jpeg", "png", "gif", "webp"] as const;
+
+const INITIAL_ASSET_PATHS: AssetPaths = {
+ icon: "",
+ logo: "",
+ hero: "",
+};
+
+const INITIAL_REMOVED_ASSETS: RemovedAssets = {
+ icon: false,
+ logo: false,
+ hero: false,
+};
+
+const INITIAL_ASSET_URLS: AssetUrls = {
+ icon: null,
+ logo: null,
+ hero: null,
+};
+
export function EditGameModal({
visible,
onClose,
@@ -30,33 +92,18 @@ export function EditGameModal({
const { showSuccessToast, showErrorToast } = useToast();
const [gameName, setGameName] = useState("");
- const [assetPaths, setAssetPaths] = useState({
- icon: "",
- logo: "",
- hero: "",
- });
- const [assetDisplayPaths, setAssetDisplayPaths] = useState({
- icon: "",
- logo: "",
- hero: "",
- });
- const [originalAssetPaths, setOriginalAssetPaths] = useState({
- icon: "",
- logo: "",
- hero: "",
- });
- const [removedAssets, setRemovedAssets] = useState({
- icon: false,
- logo: false,
- hero: false,
- });
- const [defaultUrls, setDefaultUrls] = useState({
- icon: null as string | null,
- logo: null as string | null,
- hero: null as string | null,
- });
+ const [assetPaths, setAssetPaths] = useState(INITIAL_ASSET_PATHS);
+ const [assetDisplayPaths, setAssetDisplayPaths] =
+ useState(INITIAL_ASSET_PATHS);
+ const [originalAssetPaths, setOriginalAssetPaths] =
+ useState(INITIAL_ASSET_PATHS);
+ const [removedAssets, setRemovedAssets] = useState(
+ INITIAL_REMOVED_ASSETS
+ );
+ const [defaultUrls, setDefaultUrls] = useState(INITIAL_ASSET_URLS);
const [isUpdating, setIsUpdating] = useState(false);
const [selectedAssetType, setSelectedAssetType] = useState("icon");
+ const [dragOverTarget, setDragOverTarget] = useState(null);
const isCustomGame = (game: LibraryGame | Game): boolean => {
return game.shop === "custom";
@@ -66,7 +113,19 @@ export function EditGameModal({
return url?.startsWith("local:") ? url.replace("local:", "") : "";
};
+ const capitalizeAssetType = (assetType: AssetType): string => {
+ return assetType.charAt(0).toUpperCase() + assetType.slice(1);
+ };
+
const setCustomGameAssets = useCallback((game: LibraryGame | Game) => {
+ const gameWithAssets = game as GameWithOriginalAssets;
+ const iconRemoved =
+ !game.iconUrl && Boolean(gameWithAssets.originalIconPath);
+ const logoRemoved =
+ !game.logoImageUrl && Boolean(gameWithAssets.originalLogoPath);
+ const heroRemoved =
+ !game.libraryHeroImageUrl && Boolean(gameWithAssets.originalHeroPath);
+
setAssetPaths({
icon: extractLocalPath(game.iconUrl),
logo: extractLocalPath(game.logoImageUrl),
@@ -78,17 +137,33 @@ export function EditGameModal({
hero: extractLocalPath(game.libraryHeroImageUrl),
});
setOriginalAssetPaths({
- icon: (game as any).originalIconPath || extractLocalPath(game.iconUrl),
+ icon: gameWithAssets.originalIconPath || extractLocalPath(game.iconUrl),
logo:
- (game as any).originalLogoPath || extractLocalPath(game.logoImageUrl),
+ gameWithAssets.originalLogoPath || extractLocalPath(game.logoImageUrl),
hero:
- (game as any).originalHeroPath ||
+ gameWithAssets.originalHeroPath ||
extractLocalPath(game.libraryHeroImageUrl),
});
+
+ setRemovedAssets({
+ icon: iconRemoved,
+ logo: logoRemoved,
+ hero: heroRemoved,
+ });
}, []);
const setNonCustomGameAssets = useCallback(
(game: LibraryGame) => {
+ const gameWithAssets = game as LibraryGameWithCustomOriginalAssets;
+ const iconRemoved =
+ !game.customIconUrl && Boolean(gameWithAssets.customOriginalIconPath);
+ const logoRemoved =
+ !game.customLogoImageUrl &&
+ Boolean(gameWithAssets.customOriginalLogoPath);
+ const heroRemoved =
+ !game.customHeroImageUrl &&
+ Boolean(gameWithAssets.customOriginalHeroPath);
+
setAssetPaths({
icon: extractLocalPath(game.customIconUrl),
logo: extractLocalPath(game.customLogoImageUrl),
@@ -101,16 +176,22 @@ export function EditGameModal({
});
setOriginalAssetPaths({
icon:
- (game as any).customOriginalIconPath ||
+ gameWithAssets.customOriginalIconPath ||
extractLocalPath(game.customIconUrl),
logo:
- (game as any).customOriginalLogoPath ||
+ gameWithAssets.customOriginalLogoPath ||
extractLocalPath(game.customLogoImageUrl),
hero:
- (game as any).customOriginalHeroPath ||
+ gameWithAssets.customOriginalHeroPath ||
extractLocalPath(game.customHeroImageUrl),
});
+ setRemovedAssets({
+ icon: iconRemoved,
+ logo: logoRemoved,
+ hero: heroRemoved,
+ });
+
setDefaultUrls({
icon: shopDetails?.assets?.iconUrl || game.iconUrl || null,
logo: shopDetails?.assets?.logoImageUrl || game.logoImageUrl || null,
@@ -143,25 +224,22 @@ export function EditGameModal({
setSelectedAssetType(assetType);
};
- const getAssetPath = (assetType: AssetType): string => {
- return assetPaths[assetType];
- };
-
const getAssetDisplayPath = (assetType: AssetType): string => {
- // Use original path if available, otherwise fall back to display path
- return originalAssetPaths[assetType] || assetDisplayPaths[assetType];
+ if (removedAssets[assetType]) {
+ return "";
+ }
+ return assetDisplayPaths[assetType] || originalAssetPaths[assetType];
};
- const setAssetPath = (assetType: AssetType, path: string): void => {
+ const updateAssetPaths = (
+ assetType: AssetType,
+ path: string,
+ displayPath: string
+ ): void => {
setAssetPaths((prev) => ({ ...prev, [assetType]: path }));
- };
-
- const setAssetDisplayPath = (assetType: AssetType, path: string): void => {
- setAssetDisplayPaths((prev) => ({ ...prev, [assetType]: path }));
- };
-
- const getDefaultUrl = (assetType: AssetType): string | null => {
- return defaultUrls[assetType];
+ setAssetDisplayPaths((prev) => ({ ...prev, [assetType]: displayPath }));
+ setOriginalAssetPaths((prev) => ({ ...prev, [assetType]: displayPath }));
+ setRemovedAssets((prev) => ({ ...prev, [assetType]: false }));
};
const getOriginalAssetUrl = (assetType: AssetType): string | null => {
@@ -185,7 +263,7 @@ export function EditGameModal({
filters: [
{
name: t("edit_game_modal_image_filter"),
- extensions: ["jpg", "jpeg", "png", "gif", "webp"],
+ extensions: [...IMAGE_EXTENSIONS],
},
],
});
@@ -197,48 +275,26 @@ export function EditGameModal({
originalPath,
assetType
);
- setAssetPath(assetType, copiedAssetUrl.replace("local:", ""));
- setAssetDisplayPath(assetType, originalPath);
- // Store the original path for display purposes
- setOriginalAssetPaths((prev) => ({
- ...prev,
- [assetType]: originalPath,
- }));
- // Clear the removed flag when a new asset is selected
- setRemovedAssets((prev) => ({ ...prev, [assetType]: false }));
+ updateAssetPaths(
+ assetType,
+ copiedAssetUrl.replace("local:", ""),
+ originalPath
+ );
} catch (error) {
console.error(`Failed to copy ${assetType} asset:`, error);
- setAssetPath(assetType, originalPath);
- setAssetDisplayPath(assetType, originalPath);
- setOriginalAssetPaths((prev) => ({
- ...prev,
- [assetType]: originalPath,
- }));
- // Clear the removed flag when a new asset is selected
- setRemovedAssets((prev) => ({ ...prev, [assetType]: false }));
+ updateAssetPaths(assetType, originalPath, originalPath);
}
}
};
const handleRestoreDefault = (assetType: AssetType) => {
- if (game && isCustomGame(game)) {
- // For custom games, mark asset as removed and clear paths
- setRemovedAssets((prev) => ({ ...prev, [assetType]: true }));
- setAssetPath(assetType, "");
- setAssetDisplayPath(assetType, "");
- setOriginalAssetPaths((prev) => ({ ...prev, [assetType]: "" }));
- } else {
- // For non-custom games, clear custom assets (restore to shop defaults)
- setAssetPath(assetType, "");
- setAssetDisplayPath(assetType, "");
- setOriginalAssetPaths((prev) => ({ ...prev, [assetType]: "" }));
- }
+ setRemovedAssets((prev) => ({ ...prev, [assetType]: true }));
+ setAssetPaths((prev) => ({ ...prev, [assetType]: "" }));
+ setAssetDisplayPaths((prev) => ({ ...prev, [assetType]: "" }));
};
const getOriginalTitle = (): string => {
if (!game) return "";
-
- // For non-custom games, the original title is from shopDetails assets
return shopDetails?.assets?.title || game.title || "";
};
@@ -249,12 +305,10 @@ export function EditGameModal({
const isTitleChanged = useMemo((): boolean => {
if (!game || isCustomGame(game)) return false;
- const originalTitle = getOriginalTitle();
+ const originalTitle = shopDetails?.assets?.title || game.title || "";
return gameName.trim() !== originalTitle.trim();
}, [game, gameName, shopDetails]);
- const [dragOverTarget, setDragOverTarget] = useState(null);
-
const handleDragOver = (e: React.DragEvent) => {
e.preventDefault();
e.stopPropagation();
@@ -275,14 +329,9 @@ export function EditGameModal({
};
const validateImageFile = (file: File): boolean => {
- const validTypes = [
- "image/jpeg",
- "image/jpg",
- "image/png",
- "image/gif",
- "image/webp",
- ];
- return validTypes.includes(file.type);
+ return VALID_IMAGE_TYPES.includes(
+ file.type as (typeof VALID_IMAGE_TYPES)[number]
+ );
};
const processDroppedFile = async (file: File, assetType: AssetType) => {
@@ -296,10 +345,6 @@ export function EditGameModal({
try {
let filePath: string;
- interface ElectronFile extends File {
- path?: string;
- }
-
if ("path" in file && typeof (file as ElectronFile).path === "string") {
filePath = (file as ElectronFile).path!;
} else {
@@ -326,12 +371,13 @@ export function EditGameModal({
assetType
);
- const assetPath = copiedAssetUrl.replace("local:", "");
- setAssetPath(assetType, assetPath);
- setAssetDisplayPath(assetType, filePath);
-
+ updateAssetPaths(
+ assetType,
+ copiedAssetUrl.replace("local:", ""),
+ filePath
+ );
showSuccessToast(
- `${assetType.charAt(0).toUpperCase() + assetType.slice(1)} updated successfully!`
+ `${capitalizeAssetType(assetType)} updated successfully!`
);
if (!("path" in file) && filePath) {
@@ -362,54 +408,53 @@ export function EditGameModal({
}
};
- // Helper function to prepare custom game assets
const prepareCustomGameAssets = (game: LibraryGame | Game) => {
- // For custom games, check if asset was explicitly removed
- let iconUrl;
- if (removedAssets.icon) {
- iconUrl = null;
- } else if (assetPaths.icon) {
- iconUrl = `local:${assetPaths.icon}`;
- } else {
- iconUrl = game.iconUrl;
- }
+ const iconUrl = removedAssets.icon
+ ? null
+ : assetPaths.icon
+ ? `local:${assetPaths.icon}`
+ : game.iconUrl;
- let logoImageUrl;
- if (removedAssets.logo) {
- logoImageUrl = null;
- } else if (assetPaths.logo) {
- logoImageUrl = `local:${assetPaths.logo}`;
- } else {
- logoImageUrl = game.logoImageUrl;
- }
+ const logoImageUrl = removedAssets.logo
+ ? null
+ : assetPaths.logo
+ ? `local:${assetPaths.logo}`
+ : game.logoImageUrl;
- // For hero image, if removed, restore to the original gradient or keep the original
- let libraryHeroImageUrl;
- if (removedAssets.hero) {
- // If the original hero was a gradient (data URL), keep it, otherwise generate a new one
- const originalHero = game.libraryHeroImageUrl;
- libraryHeroImageUrl = originalHero?.startsWith("data:image/svg+xml")
- ? originalHero
- : generateRandomGradient();
- } else {
- libraryHeroImageUrl = assetPaths.hero
+ const libraryHeroImageUrl = removedAssets.hero
+ ? game.libraryHeroImageUrl?.startsWith("data:image/svg+xml")
+ ? game.libraryHeroImageUrl
+ : generateRandomGradient()
+ : assetPaths.hero
? `local:${assetPaths.hero}`
: game.libraryHeroImageUrl;
- }
return { iconUrl, logoImageUrl, libraryHeroImageUrl };
};
- // Helper function to prepare non-custom game assets
const prepareNonCustomGameAssets = () => {
+ const customIconUrl =
+ !removedAssets.icon && assetPaths.icon
+ ? `local:${assetPaths.icon}`
+ : null;
+
+ const customLogoImageUrl =
+ !removedAssets.logo && assetPaths.logo
+ ? `local:${assetPaths.logo}`
+ : null;
+
+ const customHeroImageUrl =
+ !removedAssets.hero && assetPaths.hero
+ ? `local:${assetPaths.hero}`
+ : null;
+
return {
- customIconUrl: assetPaths.icon ? `local:${assetPaths.icon}` : null,
- customLogoImageUrl: assetPaths.logo ? `local:${assetPaths.logo}` : null,
- customHeroImageUrl: assetPaths.hero ? `local:${assetPaths.hero}` : null,
+ customIconUrl,
+ customLogoImageUrl,
+ customHeroImageUrl,
};
};
- // Helper function to update custom game
const updateCustomGame = async (game: LibraryGame | Game) => {
const { iconUrl, logoImageUrl, libraryHeroImageUrl } =
prepareCustomGameAssets(game);
@@ -427,7 +472,6 @@ export function EditGameModal({
});
};
- // Helper function to update non-custom game
const updateNonCustomGame = async (game: LibraryGame) => {
const { customIconUrl, customLogoImageUrl, customHeroImageUrl } =
prepareNonCustomGameAssets();
@@ -439,9 +483,15 @@ export function EditGameModal({
customIconUrl,
customLogoImageUrl,
customHeroImageUrl,
- customOriginalIconPath: originalAssetPaths.icon || undefined,
- customOriginalLogoPath: originalAssetPaths.logo || undefined,
- customOriginalHeroPath: originalAssetPaths.hero || undefined,
+ customOriginalIconPath: removedAssets.icon
+ ? undefined
+ : originalAssetPaths.icon || undefined,
+ customOriginalLogoPath: removedAssets.logo
+ ? undefined
+ : originalAssetPaths.logo || undefined,
+ customOriginalHeroPath: removedAssets.hero
+ ? undefined
+ : originalAssetPaths.hero || undefined,
});
};
@@ -472,26 +522,17 @@ export function EditGameModal({
}
};
- // Helper function to reset form to initial state
const resetFormToInitialState = useCallback(
(game: LibraryGame | Game) => {
setGameName(game.title || "");
-
- // Reset removed assets state
- setRemovedAssets({
- icon: false,
- logo: false,
- hero: false,
- });
+ setRemovedAssets(INITIAL_REMOVED_ASSETS);
+ setAssetPaths(INITIAL_ASSET_PATHS);
+ setAssetDisplayPaths(INITIAL_ASSET_PATHS);
+ setOriginalAssetPaths(INITIAL_ASSET_PATHS);
if (isCustomGame(game)) {
setCustomGameAssets(game);
- // Clear default URLs for custom games
- setDefaultUrls({
- icon: null,
- logo: null,
- hero: null,
- });
+ setDefaultUrls(INITIAL_ASSET_URLS);
} else {
setNonCustomGameAssets(game as LibraryGame);
}
@@ -509,8 +550,8 @@ export function EditGameModal({
const isFormValid = gameName.trim();
const getPreviewUrl = (assetType: AssetType): string | undefined => {
- const assetPath = getAssetPath(assetType);
- const defaultUrl = getDefaultUrl(assetType);
+ const assetPath = assetPaths[assetType];
+ const defaultUrl = defaultUrls[assetType];
if (game && !isCustomGame(game)) {
return assetPath ? `local:${assetPath}` : defaultUrl || undefined;
@@ -519,9 +560,9 @@ export function EditGameModal({
};
const renderImageSection = (assetType: AssetType) => {
- const assetPath = getAssetPath(assetType);
+ const assetPath = assetPaths[assetType];
const assetDisplayPath = getAssetDisplayPath(assetType);
- const defaultUrl = getDefaultUrl(assetType);
+ const defaultUrl = defaultUrls[assetType];
const hasImage = assetPath || (game && !isCustomGame(game) && defaultUrl);
const isDragOver = dragOverTarget === assetType;
diff --git a/src/renderer/src/pages/game-details/modals/index.ts b/src/renderer/src/pages/game-details/modals/index.ts
index 724e0003..d0f27b0f 100644
--- a/src/renderer/src/pages/game-details/modals/index.ts
+++ b/src/renderer/src/pages/game-details/modals/index.ts
@@ -2,3 +2,4 @@ export * from "./repacks-modal";
export * from "./download-settings-modal";
export * from "./game-options-modal";
export * from "./edit-game-modal";
+export * from "./delete-review-modal";
diff --git a/src/renderer/src/pages/game-details/modals/repacks-modal.tsx b/src/renderer/src/pages/game-details/modals/repacks-modal.tsx
index ec7dc3f8..306e8647 100644
--- a/src/renderer/src/pages/game-details/modals/repacks-modal.tsx
+++ b/src/renderer/src/pages/game-details/modals/repacks-modal.tsx
@@ -15,7 +15,6 @@ import {
TextField,
CheckboxField,
} from "@renderer/components";
-import { downloadSourcesTable } from "@renderer/dexie";
import type { DownloadSource } from "@types";
import type { GameRepack } from "@types";
@@ -55,7 +54,7 @@ export function RepacksModal({
{}
);
- const { repacks, game } = useContext(gameDetailsContext);
+ const { game, repacks } = useContext(gameDetailsContext);
const { t } = useTranslation("game_details");
@@ -89,6 +88,15 @@ export function RepacksModal({
});
}, [repacks, isFeatureEnabled, Feature]);
+ useEffect(() => {
+ const fetchDownloadSources = async () => {
+ const sources = await window.electron.getDownloadSources();
+ setDownloadSources(sources);
+ };
+
+ fetchDownloadSources();
+ }, []);
+
const sortedRepacks = useMemo(() => {
return orderBy(
repacks,
@@ -104,23 +112,13 @@ export function RepacksModal({
);
}, [repacks, hashesInDebrid]);
- useEffect(() => {
- downloadSourcesTable.toArray().then((sources) => {
- const uniqueRepackers = new Set(sortedRepacks.map((r) => r.repacker));
- const filteredSources = sources.filter(
- (s) => s.name && uniqueRepackers.has(s.name) && !!s.fingerprint
- );
- setDownloadSources(filteredSources);
- });
- }, [sortedRepacks]);
-
useEffect(() => {
const term = filterTerm.trim().toLowerCase();
const byTerm = sortedRepacks.filter((repack) => {
if (!term) return true;
const lowerTitle = repack.title.toLowerCase();
- const lowerRepacker = repack.repacker.toLowerCase();
+ const lowerRepacker = repack.downloadSourceName.toLowerCase();
return lowerTitle.includes(term) || lowerRepacker.includes(term);
});
@@ -129,8 +127,9 @@ export function RepacksModal({
return downloadSources.some(
(src) =>
+ src.fingerprint &&
selectedFingerprints.includes(src.fingerprint) &&
- src.name === repack.repacker
+ src.name === repack.downloadSourceName
);
});
@@ -161,6 +160,14 @@ export function RepacksModal({
const [isFilterDrawerOpen, setIsFilterDrawerOpen] = useState(false);
+ useEffect(() => {
+ if (!visible) {
+ setFilterTerm("");
+ setSelectedFingerprints([]);
+ setIsFilterDrawerOpen(false);
+ }
+ }, [visible]);
+
return (
<>
-
+
{downloadSources.length > 0 && (
- {downloadSources.map((source) => {
- const label = source.name || source.url;
- const truncatedLabel =
- label.length > 16 ? label.substring(0, 16) + "..." : label;
- return (
-
- toggleFingerprint(source.fingerprint)}
- />
-
- );
- })}
+ {downloadSources
+ .filter(
+ (
+ source
+ ): source is DownloadSource & { fingerprint: string } =>
+ source.fingerprint !== undefined
+ )
+ .map((source) => {
+ const label = source.name || source.url;
+ const truncatedLabel =
+ label.length > 16 ? label.substring(0, 16) + "..." : label;
+ return (
+
+ toggleFingerprint(source.fingerprint)}
+ />
+
+ );
+ })}
@@ -262,7 +280,7 @@ export function RepacksModal({
)}
- {repack.fileSize} - {repack.repacker} -{" "}
+ {repack.fileSize} - {repack.downloadSourceName} -{" "}
{repack.uploadDate ? formatDate(repack.uploadDate) : ""}
@@ -277,4 +295,4 @@ export function RepacksModal({
>
);
-}
\ No newline at end of file
+}
diff --git a/src/renderer/src/pages/game-details/review-form.scss b/src/renderer/src/pages/game-details/review-form.scss
new file mode 100644
index 00000000..7ec1d922
--- /dev/null
+++ b/src/renderer/src/pages/game-details/review-form.scss
@@ -0,0 +1,232 @@
+@use "../../scss/globals.scss";
+
+.game-details {
+ &__reviews-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: calc(globals.$spacing-unit * 2);
+
+ @media (max-width: 768px) {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: calc(globals.$spacing-unit * 1.5);
+ }
+ }
+
+ &__reviews-title {
+ font-size: 1.25rem;
+ font-weight: 600;
+ color: globals.$muted-color;
+ margin: 0;
+ }
+
+ &__review-form {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ margin-bottom: 24px;
+ }
+
+ &__review-form-bottom {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 16px;
+ flex-wrap: wrap;
+ }
+
+ &__review-score-container {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ }
+
+ &__review-score-select {
+ background-color: #2a2a2a;
+ border: 1px solid #3a3a3a;
+ border-radius: 4px;
+ color: #ffffff;
+ padding: 6px 12px;
+ font-size: 14px;
+ cursor: pointer;
+ transition:
+ border-color 0.2s ease,
+ background-color 0.2s ease;
+
+ &:focus {
+ outline: none;
+ }
+
+ &--red {
+ border-color: #e74c3c;
+ background-color: rgba(231, 76, 60, 0.1);
+ }
+
+ &--yellow {
+ border-color: #f39c12;
+ background-color: rgba(243, 156, 18, 0.1);
+ }
+
+ &--green {
+ border-color: #27ae60;
+ background-color: rgba(39, 174, 96, 0.1);
+ }
+
+ option {
+ background-color: #2a2a2a;
+ color: #ffffff;
+ }
+ }
+
+ &__star-rating {
+ display: flex;
+ align-items: center;
+ gap: 2px;
+ }
+
+ &__star {
+ background: none;
+ border: none;
+ color: #666666;
+ cursor: pointer;
+ padding: 2px;
+ border-radius: 4px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.2s ease;
+
+ &:hover {
+ color: #ffffff;
+ background-color: rgba(255, 255, 255, 0.1);
+ transform: scale(1.1);
+ }
+
+ &--filled {
+ color: #ffffff;
+
+ &.game-details__review-score-select--red {
+ color: #e74c3c;
+ }
+
+ &.game-details__review-score-select--yellow {
+ color: #f39c12;
+ }
+
+ &.game-details__review-score-select--green {
+ color: #27ae60;
+ }
+ }
+
+ &--empty {
+ color: #666666;
+
+ &:hover {
+ color: #ffffff;
+ }
+ }
+
+ svg {
+ fill: currentColor;
+ }
+ }
+
+ &__review-input-container {
+ display: flex;
+ flex-direction: column;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 8px;
+ background-color: globals.$dark-background-color;
+ overflow: hidden;
+ }
+
+ &__review-input-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 8px 12px;
+ background-color: globals.$background-color;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+ }
+
+ &__review-editor-toolbar {
+ display: flex;
+ gap: 4px;
+ }
+
+ &__editor-button {
+ background: none;
+ border: 1px solid rgba(255, 255, 255, 0.15);
+ border-radius: 4px;
+ color: #ffffff;
+ padding: 4px 8px;
+ cursor: pointer;
+ font-size: 12px;
+ transition: all 0.2s ease;
+
+ &:hover {
+ background-color: rgba(255, 255, 255, 0.08);
+ border-color: rgba(255, 255, 255, 0.2);
+ }
+
+ &.is-active {
+ background-color: globals.$brand-blue;
+ border-color: globals.$brand-blue;
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+ }
+
+ &__review-char-counter {
+ font-size: 12px;
+ color: #888888;
+
+ .over-limit {
+ color: #ff6b6b;
+ }
+ }
+
+ &__review-input {
+ min-height: 120px;
+ padding: 12px;
+ cursor: text;
+
+ .ProseMirror {
+ outline: none;
+ color: #ffffff;
+ font-size: 14px;
+ line-height: 1.5;
+ min-height: 96px; // 120px - 24px padding
+ width: 100%;
+ cursor: text;
+
+ &:focus {
+ outline: none;
+ }
+
+ p {
+ margin: 0 0 8px 0;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ strong {
+ font-weight: bold;
+ }
+
+ em {
+ font-style: italic;
+ }
+
+ u {
+ text-decoration: underline;
+ }
+ }
+ }
+}
diff --git a/src/renderer/src/pages/game-details/review-form.tsx b/src/renderer/src/pages/game-details/review-form.tsx
new file mode 100644
index 00000000..ffcad4e3
--- /dev/null
+++ b/src/renderer/src/pages/game-details/review-form.tsx
@@ -0,0 +1,150 @@
+import { Star } from "lucide-react";
+import { useTranslation } from "react-i18next";
+import { EditorContent, Editor } from "@tiptap/react";
+import { Button } from "@renderer/components";
+import "./review-form.scss";
+
+interface ReviewFormProps {
+ editor: Editor | null;
+ reviewScore: number | null;
+ reviewCharCount: number;
+ maxReviewChars: number;
+ submittingReview: boolean;
+ onScoreChange: (score: number) => void;
+ onSubmit: () => void;
+}
+
+const getSelectScoreColorClass = (score: number): string => {
+ if (score >= 1 && score <= 2) return "game-details__review-score-select--red";
+ if (score >= 3 && score <= 3)
+ return "game-details__review-score-select--yellow";
+ if (score >= 4 && score <= 5)
+ return "game-details__review-score-select--green";
+ return "";
+};
+
+const getRatingText = (score: number, t: (key: string) => string): string => {
+ switch (score) {
+ case 1:
+ return t("rating_very_negative");
+ case 2:
+ return t("rating_negative");
+ case 3:
+ return t("rating_neutral");
+ case 4:
+ return t("rating_positive");
+ case 5:
+ return t("rating_very_positive");
+ default:
+ return "";
+ }
+};
+
+export function ReviewForm({
+ editor,
+ reviewScore,
+ reviewCharCount,
+ maxReviewChars,
+ submittingReview,
+ onScoreChange,
+ onSubmit,
+}: Readonly) {
+ const { t } = useTranslation("game_details");
+
+ return (
+ <>
+
+
{t("leave_a_review")}
+
+
+
+
+
+
+ editor?.chain().focus().toggleBold().run()}
+ className={`game-details__editor-button ${editor?.isActive("bold") ? "is-active" : ""}`}
+ disabled={!editor}
+ >
+ B
+
+ editor?.chain().focus().toggleItalic().run()}
+ className={`game-details__editor-button ${editor?.isActive("italic") ? "is-active" : ""}`}
+ disabled={!editor}
+ >
+ I
+
+ editor?.chain().focus().toggleUnderline().run()}
+ className={`game-details__editor-button ${editor?.isActive("underline") ? "is-active" : ""}`}
+ disabled={!editor}
+ >
+ U
+
+
+
+ maxReviewChars ? "over-limit" : ""}
+ >
+ {reviewCharCount}/{maxReviewChars}
+
+
+
+
+
+
+
+
+
+
+
+ {[1, 2, 3, 4, 5].map((starValue) => (
+ onScoreChange(starValue)}
+ title={getRatingText(starValue, t)}
+ >
+
+
+ ))}
+
+
+
+
maxReviewChars
+ }
+ >
+ {submittingReview ? t("submitting") : t("submit_review")}
+
+
+
+ >
+ );
+}
diff --git a/src/renderer/src/pages/game-details/review-item.scss b/src/renderer/src/pages/game-details/review-item.scss
new file mode 100644
index 00000000..d4f2d38c
--- /dev/null
+++ b/src/renderer/src/pages/game-details/review-item.scss
@@ -0,0 +1,230 @@
+@use "../../scss/globals.scss";
+
+.game-details {
+ &__review-item {
+ overflow: hidden;
+ word-wrap: break-word;
+ }
+
+ &__review-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: calc(globals.$spacing-unit * 1.5);
+ }
+
+ &__review-user {
+ display: flex;
+ align-items: center;
+ gap: calc(globals.$spacing-unit * 1);
+ }
+
+ &__review-user-info {
+ display: flex;
+ flex-direction: column;
+ gap: calc(globals.$spacing-unit * 0.25);
+ }
+
+ &__review-display-name {
+ color: rgba(255, 255, 255, 0.9);
+ font-size: globals.$small-font-size;
+ font-weight: 600;
+ display: inline-flex;
+
+ &--clickable {
+ cursor: pointer;
+ transition: color 0.2s ease;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ &__review-actions {
+ margin-top: 12px;
+ padding-top: 8px;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ &__review-votes {
+ display: flex;
+ gap: 12px;
+ }
+
+ &__vote-button {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ background: rgba(255, 255, 255, 0.05);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 6px;
+ padding: 6px 12px;
+ color: #ccc;
+ font-size: 14px;
+ cursor: pointer;
+ transition: all 0.2s ease;
+
+ &:hover {
+ background: rgba(255, 255, 255, 0.1);
+ border-color: rgba(255, 255, 255, 0.2);
+ color: #ffffff;
+ }
+
+ &--active {
+ &.game-details__vote-button--upvote {
+ svg {
+ fill: white;
+ }
+ }
+
+ &.game-details__vote-button--downvote {
+ svg {
+ fill: white;
+ }
+ }
+ }
+
+ span {
+ font-weight: 500;
+ display: inline-block;
+ min-width: 1ch;
+ overflow: hidden;
+ }
+ }
+
+ &__delete-review-button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(244, 67, 54, 0.1);
+ border: 1px solid rgba(244, 67, 54, 0.3);
+ border-radius: 6px;
+ padding: 6px;
+ color: #f44336;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ gap: 6px;
+
+ &:hover {
+ background: rgba(244, 67, 54, 0.2);
+ border-color: #f44336;
+ color: #ff5722;
+ }
+ }
+
+ &__blocked-review-simple {
+ color: rgba(255, 255, 255, 0.6);
+ font-size: globals.$small-font-size;
+ display: flex;
+ align-items: center;
+ gap: calc(globals.$spacing-unit * 0.5);
+ }
+
+ &__blocked-review-show-link {
+ background: none;
+ border: none;
+ color: #ffc107;
+ font-size: globals.$small-font-size;
+ cursor: pointer;
+ text-decoration: underline;
+ padding: 0;
+ transition: color 0.2s ease;
+
+ &:hover {
+ color: #ffeb3b;
+ }
+ }
+
+ &__blocked-review-hide-link {
+ background: none;
+ border: none;
+ color: rgba(255, 255, 255, 0.5);
+ font-size: globals.$small-font-size;
+ cursor: pointer;
+ text-decoration: underline;
+ padding: 0;
+ transition: color 0.2s ease;
+
+ &:hover {
+ color: rgba(255, 255, 255, 0.8);
+ }
+ }
+
+ &__review-score-stars {
+ display: flex;
+ align-items: center;
+ gap: 2px;
+ }
+
+ &__review-star {
+ color: #666666;
+ transition: color 0.2s ease;
+ cursor: default;
+
+ &--filled {
+ color: #ffffff;
+
+ &.game-details__review-score--red {
+ color: #fca5a5;
+ }
+
+ &.game-details__review-score--yellow {
+ color: #fcd34d;
+ }
+
+ &.game-details__review-score--green {
+ color: #86efac;
+ }
+ }
+
+ &--empty {
+ color: #666666;
+ }
+
+ svg {
+ fill: currentColor;
+ }
+ }
+
+ &__review-date {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ color: rgba(255, 255, 255, 0.6);
+ font-size: globals.$small-font-size;
+ }
+
+ &__review-content {
+ color: globals.$body-color;
+ line-height: 1.5;
+ word-wrap: break-word;
+ word-break: break-word;
+ overflow-wrap: break-word;
+ white-space: pre-wrap;
+ max-width: 100%;
+ }
+
+ &__review-translation-toggle {
+ display: inline-flex;
+ align-items: center;
+ gap: calc(globals.$spacing-unit * 1);
+ margin-top: calc(globals.$spacing-unit * 1.5);
+ padding: 0;
+ background: none;
+ border: none;
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 0.875rem;
+ cursor: pointer;
+ text-decoration: none;
+ transition: all 0.2s ease;
+
+ &:hover {
+ text-decoration: underline;
+ color: rgba(255, 255, 255, 0.9);
+ }
+ }
+}
diff --git a/src/renderer/src/pages/game-details/review-item.tsx b/src/renderer/src/pages/game-details/review-item.tsx
new file mode 100644
index 00000000..f5e3528a
--- /dev/null
+++ b/src/renderer/src/pages/game-details/review-item.tsx
@@ -0,0 +1,332 @@
+import { TrashIcon, ClockIcon } from "@primer/octicons-react";
+import { ThumbsUp, ThumbsDown, Star, Languages } from "lucide-react";
+import { useNavigate } from "react-router-dom";
+import { motion, AnimatePresence } from "framer-motion";
+import { useTranslation } from "react-i18next";
+import { useState } from "react";
+import type { GameReview } from "@types";
+
+import { sanitizeHtml } from "@shared";
+import { useDate } from "@renderer/hooks";
+import { formatNumber } from "@renderer/helpers";
+import { Avatar } from "@renderer/components";
+
+import "./review-item.scss";
+
+interface ReviewItemProps {
+ review: GameReview;
+ userDetailsId?: string;
+ isBlocked: boolean;
+ isVisible: boolean;
+ isVoting: boolean;
+ previousVotes: { upvotes: number; downvotes: number };
+ onVote: (reviewId: string, voteType: "upvote" | "downvote") => void;
+ onDelete: (reviewId: string) => void;
+ onToggleVisibility: (reviewId: string) => void;
+ onAnimationComplete: (
+ reviewId: string,
+ votes: { upvotes: number; downvotes: number }
+ ) => void;
+}
+
+const getScoreColorClass = (score: number): string => {
+ if (score >= 1 && score <= 2) return "game-details__review-score--red";
+ if (score >= 3 && score <= 3) return "game-details__review-score--yellow";
+ if (score >= 4 && score <= 5) return "game-details__review-score--green";
+ return "";
+};
+
+const getRatingText = (score: number, t: (key: string) => string): string => {
+ switch (score) {
+ case 1:
+ return t("rating_very_negative");
+ case 2:
+ return t("rating_negative");
+ case 3:
+ return t("rating_neutral");
+ case 4:
+ return t("rating_positive");
+ case 5:
+ return t("rating_very_positive");
+ default:
+ return "";
+ }
+};
+
+export function ReviewItem({
+ review,
+ userDetailsId,
+ isBlocked,
+ isVisible,
+ isVoting,
+ previousVotes,
+ onVote,
+ onDelete,
+ onToggleVisibility,
+ onAnimationComplete,
+}: Readonly) {
+ const navigate = useNavigate();
+ const { t, i18n } = useTranslation("game_details");
+ const { formatDistance } = useDate();
+
+ const [showOriginal, setShowOriginal] = useState(false);
+
+ // Check if this is the user's own review
+ const isOwnReview = userDetailsId === review.user.id;
+
+ // Helper to get base language code (e.g., "pt" from "pt-BR")
+ const getBaseLanguage = (lang: string) => lang.split("-")[0];
+
+ // Check if the review is in a different language (comparing base language codes)
+ const isDifferentLanguage =
+ getBaseLanguage(review.detectedLanguage) !== getBaseLanguage(i18n.language);
+
+ // Check if translation is available and needed (but not for own reviews)
+ const needsTranslation =
+ !isOwnReview &&
+ isDifferentLanguage &&
+ review.translations &&
+ review.translations[i18n.language];
+
+ // Get the full language name using Intl.DisplayNames
+ const getLanguageName = (languageCode: string) => {
+ try {
+ const displayNames = new Intl.DisplayNames([i18n.language], {
+ type: "language",
+ });
+ return displayNames.of(languageCode) || languageCode.toUpperCase();
+ } catch {
+ return languageCode.toUpperCase();
+ }
+ };
+
+ // Determine which content to show - always show original for own reviews
+ const displayContent = needsTranslation
+ ? review.translations[i18n.language]
+ : review.reviewHtml;
+
+ if (isBlocked && !isVisible) {
+ return (
+
+
+ Review from blocked user —{" "}
+ onToggleVisibility(review.id)}
+ >
+ Show
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
navigate(`/profile/${review.user.id}`)}
+ title={review.user.displayName}
+ >
+
+
+
+
+ review.user.id && navigate(`/profile/${review.user.id}`)
+ }
+ >
+ {review.user.displayName || "Anonymous"}
+
+
+
+ {formatDistance(new Date(review.createdAt), new Date(), {
+ addSuffix: true,
+ })}
+
+
+
+
+ {[1, 2, 3, 4, 5].map((starValue) => (
+
+ ))}
+
+
+
+
+ {needsTranslation && (
+ <>
+
setShowOriginal(!showOriginal)}
+ >
+
+ {showOriginal
+ ? t("hide_original")
+ : t("show_original_translated_from", {
+ language: getLanguageName(review.detectedLanguage),
+ })}
+
+ {showOriginal && (
+
+ )}
+ >
+ )}
+
+
+
+
onVote(review.id, "upvote")}
+ disabled={isVoting}
+ style={{
+ opacity: isVoting ? 0.5 : 1,
+ cursor: isVoting ? "not-allowed" : "pointer",
+ }}
+ animate={
+ review.hasUpvoted
+ ? {
+ scale: [1, 1.2, 1],
+ transition: { duration: 0.3 },
+ }
+ : {}
+ }
+ >
+
+
+ previousVotes.upvotes}
+ variants={{
+ enter: (isIncreasing: boolean) => ({
+ y: isIncreasing ? 10 : -10,
+ opacity: 0,
+ }),
+ center: { y: 0, opacity: 1 },
+ exit: (isIncreasing: boolean) => ({
+ y: isIncreasing ? -10 : 10,
+ opacity: 0,
+ }),
+ }}
+ initial="enter"
+ animate="center"
+ exit="exit"
+ transition={{ duration: 0.2 }}
+ onAnimationComplete={() => {
+ onAnimationComplete(review.id, {
+ upvotes: review.upvotes || 0,
+ downvotes: review.downvotes || 0,
+ });
+ }}
+ >
+ {formatNumber(review.upvotes || 0)}
+
+
+
+
onVote(review.id, "downvote")}
+ disabled={isVoting}
+ style={{
+ opacity: isVoting ? 0.5 : 1,
+ cursor: isVoting ? "not-allowed" : "pointer",
+ }}
+ animate={
+ review.hasDownvoted
+ ? {
+ scale: [1, 1.2, 1],
+ transition: { duration: 0.3 },
+ }
+ : {}
+ }
+ >
+
+
+ previousVotes.downvotes}
+ variants={{
+ enter: (isIncreasing: boolean) => ({
+ y: isIncreasing ? 10 : -10,
+ opacity: 0,
+ }),
+ center: { y: 0, opacity: 1 },
+ exit: (isIncreasing: boolean) => ({
+ y: isIncreasing ? -10 : 10,
+ opacity: 0,
+ }),
+ }}
+ initial="enter"
+ animate="center"
+ exit="exit"
+ transition={{ duration: 0.2 }}
+ onAnimationComplete={() => {
+ onAnimationComplete(review.id, {
+ upvotes: review.upvotes || 0,
+ downvotes: review.downvotes || 0,
+ });
+ }}
+ >
+ {formatNumber(review.downvotes || 0)}
+
+
+
+
+ {userDetailsId === review.user.id && (
+
onDelete(review.id)}
+ title={t("delete_review")}
+ >
+
+ {t("remove_review")}
+
+ )}
+ {isBlocked && isVisible && (
+
onToggleVisibility(review.id)}
+ >
+ Hide
+
+ )}
+
+
+ );
+}
diff --git a/src/renderer/src/pages/game-details/review-prompt-banner.scss b/src/renderer/src/pages/game-details/review-prompt-banner.scss
new file mode 100644
index 00000000..f9358e52
--- /dev/null
+++ b/src/renderer/src/pages/game-details/review-prompt-banner.scss
@@ -0,0 +1,46 @@
+@use "../../scss/globals.scss";
+
+.review-prompt-banner {
+ background: rgba(255, 255, 255, 0.02);
+ border-radius: 8px;
+ padding: calc(globals.$spacing-unit * 2);
+ margin-bottom: calc(globals.$spacing-unit * 1.5);
+ border: 1px solid rgba(255, 255, 255, 0.05);
+
+ &__content {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: calc(globals.$spacing-unit * 2.5);
+
+ @media (max-width: 768px) {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: calc(globals.$spacing-unit * 2);
+ }
+ }
+
+ &__text {
+ display: flex;
+ flex-direction: column;
+ gap: calc(globals.$spacing-unit * 0.5);
+ }
+
+ &__playtime {
+ font-size: globals.$body-font-size;
+ color: globals.$body-color;
+ font-weight: 600;
+ }
+
+ &__question {
+ font-size: globals.$small-font-size;
+ color: globals.$muted-color;
+ font-weight: 400;
+ }
+
+ &__actions {
+ display: flex;
+ gap: globals.$spacing-unit;
+ align-items: center;
+ }
+}
diff --git a/src/renderer/src/pages/game-details/review-prompt-banner.tsx b/src/renderer/src/pages/game-details/review-prompt-banner.tsx
new file mode 100644
index 00000000..053c97e8
--- /dev/null
+++ b/src/renderer/src/pages/game-details/review-prompt-banner.tsx
@@ -0,0 +1,38 @@
+import { useTranslation } from "react-i18next";
+import { Button } from "@renderer/components";
+import "./review-prompt-banner.scss";
+
+interface ReviewPromptBannerProps {
+ onYesClick: () => void;
+ onLaterClick: () => void;
+}
+
+export function ReviewPromptBanner({
+ onYesClick,
+ onLaterClick,
+}: Readonly) {
+ const { t } = useTranslation("game_details");
+
+ return (
+
+
+
+
+ {t("you_seemed_to_enjoy_this_game")}
+
+
+ {t("would_you_recommend_this_game")}
+
+
+
+
+ {t("maybe_later")}
+
+
+ {t("yes")}
+
+
+
+
+ );
+}
diff --git a/src/renderer/src/pages/game-details/review-sort-options.scss b/src/renderer/src/pages/game-details/review-sort-options.scss
new file mode 100644
index 00000000..fba6c50f
--- /dev/null
+++ b/src/renderer/src/pages/game-details/review-sort-options.scss
@@ -0,0 +1,73 @@
+@use "../../scss/globals.scss";
+
+.review-sort-options {
+ &__container {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: calc(globals.$spacing-unit);
+ margin-bottom: calc(globals.$spacing-unit * 3);
+ }
+
+ &__label {
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 14px;
+ font-weight: 400;
+ }
+
+ &__options {
+ display: flex;
+ align-items: center;
+ gap: calc(globals.$spacing-unit);
+ font-size: 14px;
+ flex-wrap: wrap;
+
+ @media (max-width: 768px) {
+ gap: calc(globals.$spacing-unit * 0.75);
+ }
+ }
+
+ &__option {
+ background: none;
+ border: none;
+ color: rgba(255, 255, 255, 0.4);
+ cursor: pointer;
+ padding: 4px 0;
+ font-size: 14px;
+ font-weight: 300;
+ transition: all ease 0.2s;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+
+ &:hover:not(:disabled) {
+ color: rgba(255, 255, 255, 0.6);
+ }
+
+ &.active {
+ color: rgba(255, 255, 255, 0.9);
+ font-weight: 500;
+ }
+
+ span {
+ display: inline-block;
+
+ @media (max-width: 480px) {
+ display: none;
+ }
+ }
+
+ @media (max-width: 480px) {
+ gap: 0;
+ }
+ }
+
+ &__separator {
+ color: rgba(255, 255, 255, 0.3);
+ font-size: 14px;
+
+ @media (max-width: 480px) {
+ display: none;
+ }
+ }
+}
diff --git a/src/renderer/src/pages/game-details/review-sort-options.tsx b/src/renderer/src/pages/game-details/review-sort-options.tsx
new file mode 100644
index 00000000..0944e58e
--- /dev/null
+++ b/src/renderer/src/pages/game-details/review-sort-options.tsx
@@ -0,0 +1,90 @@
+import {
+ ThumbsupIcon,
+ ChevronUpIcon,
+ ChevronDownIcon,
+} from "@primer/octicons-react";
+import { useTranslation } from "react-i18next";
+import "./review-sort-options.scss";
+
+type ReviewSortOption =
+ | "newest"
+ | "oldest"
+ | "score_high"
+ | "score_low"
+ | "most_voted";
+
+interface ReviewSortOptionsProps {
+ sortBy: ReviewSortOption;
+ onSortChange: (sortBy: ReviewSortOption) => void;
+}
+
+export function ReviewSortOptions({
+ sortBy,
+ onSortChange,
+}: Readonly) {
+ const { t } = useTranslation("game_details");
+
+ const handleDateToggle = () => {
+ const newSort = sortBy === "newest" ? "oldest" : "newest";
+ onSortChange(newSort);
+ };
+
+ const handleScoreToggle = () => {
+ const newSort = sortBy === "score_high" ? "score_low" : "score_high";
+ onSortChange(newSort);
+ };
+
+ const handleMostVotedClick = () => {
+ if (sortBy !== "most_voted") {
+ onSortChange("most_voted");
+ }
+ };
+
+ const isDateActive = sortBy === "newest" || sortBy === "oldest";
+ const isScoreActive = sortBy === "score_high" || sortBy === "score_low";
+ const isMostVotedActive = sortBy === "most_voted";
+
+ return (
+
+
+
+ {sortBy === "newest" ? (
+
+ ) : (
+
+ )}
+
+ {sortBy === "oldest" ? t("sort_oldest") : t("sort_newest")}
+
+
+ |
+
+ {sortBy === "score_high" ? (
+
+ ) : (
+
+ )}
+
+ {sortBy === "score_low"
+ ? t("sort_lowest_score")
+ : t("sort_highest_score")}
+
+
+ |
+
+
+ {t("sort_most_voted")}
+
+
+
+ );
+}
diff --git a/src/renderer/src/pages/game-details/sidebar/how-long-to-beat-section.tsx b/src/renderer/src/pages/game-details/sidebar/how-long-to-beat-section.tsx
index 9a29f150..61c90389 100644
--- a/src/renderer/src/pages/game-details/sidebar/how-long-to-beat-section.tsx
+++ b/src/renderer/src/pages/game-details/sidebar/how-long-to-beat-section.tsx
@@ -25,7 +25,7 @@ export function HowLongToBeatSection({
return `${value} ${t(durationTranslation[unit])}`;
};
- if (!howLongToBeatData || !isLoading) return null;
+ if (!howLongToBeatData && !isLoading) return null;
return (
diff --git a/src/renderer/src/pages/game-details/sidebar/sidebar.scss b/src/renderer/src/pages/game-details/sidebar/sidebar.scss
index 06519f6c..1330d278 100755
--- a/src/renderer/src/pages/game-details/sidebar/sidebar.scss
+++ b/src/renderer/src/pages/game-details/sidebar/sidebar.scss
@@ -106,7 +106,7 @@
.stats {
&__section {
display: flex;
- gap: calc(globals.$spacing-unit * 2);
+ gap: calc(globals.$spacing-unit * 1);
padding: calc(globals.$spacing-unit * 2);
justify-content: space-between;
transition: max-height ease 0.5s;
@@ -115,10 +115,6 @@
@media (min-width: 1024px) {
flex-direction: column;
}
-
- @media (min-width: 1280px) {
- flex-direction: row;
- }
}
&__category-title {
diff --git a/src/renderer/src/pages/game-details/sidebar/sidebar.tsx b/src/renderer/src/pages/game-details/sidebar/sidebar.tsx
index 0a24c418..3056e414 100755
--- a/src/renderer/src/pages/game-details/sidebar/sidebar.tsx
+++ b/src/renderer/src/pages/game-details/sidebar/sidebar.tsx
@@ -5,7 +5,7 @@ import type {
UserAchievement,
} from "@types";
import { useTranslation } from "react-i18next";
-import { Button, Link } from "@renderer/components";
+import { Button, Link, StarRating } from "@renderer/components";
import { gameDetailsContext } from "@renderer/context";
import { useDate, useFormat, useUserDetails } from "@renderer/hooks";
@@ -14,9 +14,9 @@ import {
DownloadIcon,
LockIcon,
PeopleIcon,
+ StarIcon,
} from "@primer/octicons-react";
import { HowLongToBeatSection } from "./how-long-to-beat-section";
-import { howLongToBeatEntriesTable } from "@renderer/dexie";
import { SidebarSection } from "../sidebar-section/sidebar-section";
import { buildGameAchievementPath } from "@renderer/helpers";
import { useSubscription } from "@renderer/hooks/use-subscription";
@@ -79,40 +79,22 @@ export function Sidebar() {
if (objectId) {
setHowLongToBeat({ isLoading: true, data: null });
- howLongToBeatEntriesTable
- .where({ shop, objectId })
- .first()
- .then(async (cachedHowLongToBeat) => {
- if (cachedHowLongToBeat) {
- setHowLongToBeat({
- isLoading: false,
- data: cachedHowLongToBeat.categories,
- });
- } else {
- try {
- const howLongToBeat = await window.electron.getHowLongToBeat(
- objectId,
- shop
- );
-
- if (howLongToBeat) {
- howLongToBeatEntriesTable.add({
- objectId,
- shop: "steam",
- createdAt: new Date(),
- updatedAt: new Date(),
- categories: howLongToBeat,
- });
- }
-
- setHowLongToBeat({ isLoading: false, data: howLongToBeat });
- } catch (err) {
- setHowLongToBeat({ isLoading: false, data: null });
- }
+ // Directly fetch from API without checking cache
+ window.electron.hydraApi
+ .get(
+ `/games/${shop}/${objectId}/how-long-to-beat`,
+ {
+ needsAuth: false,
}
+ )
+ .then((howLongToBeatData) => {
+ setHowLongToBeat({ isLoading: false, data: howLongToBeatData });
+ })
+ .catch(() => {
+ setHowLongToBeat({ isLoading: false, data: null });
});
}
- }, [objectId, shop, gameTitle]);
+ }, [objectId, shop]);
return (
+
+
+
+
+ {t("rating_count")}
+
+
+
)}
diff --git a/src/renderer/src/pages/home/home.tsx b/src/renderer/src/pages/home/home.tsx
index 0b762882..b8f632a6 100644
--- a/src/renderer/src/pages/home/home.tsx
+++ b/src/renderer/src/pages/home/home.tsx
@@ -40,7 +40,21 @@ export default function Home() {
setCurrentCatalogueCategory(category);
setIsLoading(true);
- const catalogue = await window.electron.getCatalogue(category);
+ const downloadSources = await window.electron.getDownloadSources();
+
+ const params = {
+ take: 12,
+ skip: 0,
+ downloadSourceIds: downloadSources.map((source) => source.id),
+ };
+
+ const catalogue = await window.electron.hydraApi.get
(
+ `/catalogue/${category}`,
+ {
+ params,
+ needsAuth: false,
+ }
+ );
setCatalogue((prev) => ({ ...prev, [category]: catalogue }));
} finally {
diff --git a/src/renderer/src/pages/profile/profile-content/profile-animations.ts b/src/renderer/src/pages/profile/profile-content/profile-animations.ts
index f9ac0593..d89f4323 100644
--- a/src/renderer/src/pages/profile/profile-content/profile-animations.ts
+++ b/src/renderer/src/pages/profile/profile-content/profile-animations.ts
@@ -5,7 +5,7 @@ export const sectionVariants = {
height: 0,
transition: {
duration: 0.3,
- ease: [0.25, 0.1, 0.25, 1],
+ ease: [0.25, 0.1, 0.25, 1] as const,
opacity: { duration: 0.1 },
y: { duration: 0.1 },
height: { duration: 0.2 },
@@ -17,13 +17,13 @@ export const sectionVariants = {
height: "auto",
transition: {
duration: 0.3,
- ease: [0.25, 0.1, 0.25, 1],
+ ease: [0.25, 0.1, 0.25, 1] as const,
opacity: { duration: 0.2, delay: 0.1 },
y: { duration: 0.3 },
height: { duration: 0.3 },
},
},
-};
+} as const;
export const gameCardVariants = {
hidden: {
@@ -37,7 +37,7 @@ export const gameCardVariants = {
scale: 1,
transition: {
duration: 0.4,
- ease: [0.25, 0.1, 0.25, 1],
+ ease: [0.25, 0.1, 0.25, 1] as const,
},
},
exit: {
@@ -46,10 +46,10 @@ export const gameCardVariants = {
scale: 0.95,
transition: {
duration: 0.3,
- ease: [0.25, 0.1, 0.25, 1],
+ ease: [0.25, 0.1, 0.25, 1] as const,
},
},
-};
+} as const;
export const gameGridVariants = {
hidden: {
@@ -76,16 +76,16 @@ export const chevronVariants = {
rotate: 0,
transition: {
duration: 0.2,
- ease: "easeInOut",
+ ease: "easeInOut" as const,
},
},
expanded: {
rotate: 90,
transition: {
duration: 0.2,
- ease: "easeInOut",
+ ease: "easeInOut" as const,
},
},
-};
+} as const;
export const GAME_STATS_ANIMATION_DURATION_IN_MS = 3500;
diff --git a/src/renderer/src/pages/profile/profile-content/profile-content.tsx b/src/renderer/src/pages/profile/profile-content/profile-content.tsx
index 56f7d20b..d2f1f074 100644
--- a/src/renderer/src/pages/profile/profile-content/profile-content.tsx
+++ b/src/renderer/src/pages/profile/profile-content/profile-content.tsx
@@ -10,6 +10,7 @@ import { ReportProfile } from "../report-profile/report-profile";
import { FriendsBox } from "./friends-box";
import { RecentGamesBox } from "./recent-games-box";
import { UserStatsBox } from "./user-stats-box";
+import { UserKarmaBox } from "./user-karma-box";
import { UserLibraryGameCard } from "./user-library-game-card";
import { SortOptions } from "./sort-options";
import { useSectionCollapse } from "@renderer/hooks/use-section-collapse";
@@ -223,6 +224,7 @@ export function ProfileContent() {
{shouldShowRightContent && (
+
diff --git a/src/renderer/src/pages/profile/profile-content/sort-options.tsx b/src/renderer/src/pages/profile/profile-content/sort-options.tsx
index 53da8e40..607e54b9 100644
--- a/src/renderer/src/pages/profile/profile-content/sort-options.tsx
+++ b/src/renderer/src/pages/profile/profile-content/sort-options.tsx
@@ -14,7 +14,7 @@ export function SortOptions({ sortBy, onSortChange }: SortOptionsProps) {
return (
-
Sort by:
+
{t("sort_by")}
+
+
{t("karma")}
+
+
+
+
+
+
+ {numberFormatter.format(karma)}{" "}
+ {t("karma_count")}
+
+
+
+
+ {t("karma_description")}
+
+
+
+
+
+ );
+}
diff --git a/src/renderer/src/pages/profile/profile-content/user-library-game-card.tsx b/src/renderer/src/pages/profile/profile-content/user-library-game-card.tsx
index a3d24958..72b48a8c 100644
--- a/src/renderer/src/pages/profile/profile-content/user-library-game-card.tsx
+++ b/src/renderer/src/pages/profile/profile-content/user-library-game-card.tsx
@@ -234,7 +234,7 @@ export function UserLibraryGameCard({

diff --git a/src/renderer/src/pages/profile/report-profile/report-profile.tsx b/src/renderer/src/pages/profile/report-profile/report-profile.tsx
index 40084aba..67b7a72a 100644
--- a/src/renderer/src/pages/profile/report-profile/report-profile.tsx
+++ b/src/renderer/src/pages/profile/report-profile/report-profile.tsx
@@ -54,8 +54,13 @@ export function ReportProfile() {
const onSubmit = useCallback(
async (values: FormValues) => {
- return window.electron
- .reportUser(userProfile!.id, values.reason, values.description)
+ return window.electron.hydraApi
+ .post(`/users/${userProfile!.id}/report`, {
+ data: {
+ reason: values.reason,
+ description: values.description,
+ },
+ })
.then(() => {
showSuccessToast(t("profile_reported"));
setShowReportProfileModal(false);
diff --git a/src/renderer/src/pages/settings/add-download-source-modal.scss b/src/renderer/src/pages/settings/add-download-source-modal.scss
index f6b5d151..d938f7f0 100644
--- a/src/renderer/src/pages/settings/add-download-source-modal.scss
+++ b/src/renderer/src/pages/settings/add-download-source-modal.scss
@@ -1,5 +1,14 @@
@use "../../scss/globals.scss";
+@keyframes spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
.add-download-source-modal {
&__container {
display: flex;
@@ -24,4 +33,16 @@
&__validate-button {
align-self: flex-end;
}
+
+ &__spinner {
+ animation: spin 1s linear infinite;
+ margin-right: calc(globals.$spacing-unit / 2);
+ }
+
+ &__actions {
+ display: flex;
+ justify-content: flex-end;
+ gap: globals.$spacing-unit;
+ margin-top: calc(globals.$spacing-unit * 2);
+ }
}
diff --git a/src/renderer/src/pages/settings/add-download-source-modal.tsx b/src/renderer/src/pages/settings/add-download-source-modal.tsx
index fee1c5e3..af6f8b4d 100644
--- a/src/renderer/src/pages/settings/add-download-source-modal.tsx
+++ b/src/renderer/src/pages/settings/add-download-source-modal.tsx
@@ -1,15 +1,14 @@
-import { useCallback, useContext, useEffect, useState } from "react";
+import { useContext, useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { Button, Modal, TextField } from "@renderer/components";
import { settingsContext } from "@renderer/context";
import { useForm } from "react-hook-form";
+import { logger } from "@renderer/logger";
import * as yup from "yup";
import { yupResolver } from "@hookform/resolvers/yup";
-import { downloadSourcesTable } from "@renderer/dexie";
-import type { DownloadSourceValidationResult } from "@types";
-import { downloadSourcesWorker } from "@renderer/workers";
+import { SyncIcon } from "@primer/octicons-react";
import "./add-download-source-modal.scss";
interface AddDownloadSourceModalProps {
@@ -27,7 +26,6 @@ export function AddDownloadSourceModal({
onClose,
onAddDownloadSource,
}: Readonly
) {
- const [url, setUrl] = useState("");
const [isLoading, setIsLoading] = useState(false);
const { t } = useTranslation("settings");
@@ -47,89 +45,45 @@ export function AddDownloadSourceModal({
resolver: yupResolver(schema),
});
- const [validationResult, setValidationResult] =
- useState(null);
-
const { sourceUrl } = useContext(settingsContext);
- const onSubmit = useCallback(
- async (values: FormValues) => {
- const existingDownloadSource = await downloadSourcesTable
- .where({ url: values.url })
- .first();
+ const onSubmit = async (values: FormValues) => {
+ setIsLoading(true);
- if (existingDownloadSource) {
- setError("url", {
- type: "server",
- message: t("source_already_exists"),
- });
+ try {
+ await window.electron.addDownloadSource(values.url);
- return;
- }
+ onClose();
+ onAddDownloadSource();
+ } catch (error) {
+ logger.error("Failed to add download source:", error);
+ const errorMessage =
+ error instanceof Error && error.message.includes("already exists")
+ ? t("download_source_already_exists")
+ : t("failed_add_download_source");
- downloadSourcesWorker.postMessage([
- "VALIDATE_DOWNLOAD_SOURCE",
- values.url,
- ]);
-
- const channel = new BroadcastChannel(
- `download_sources:validate:${values.url}`
- );
-
- channel.onmessage = (
- event: MessageEvent
- ) => {
- setValidationResult(event.data);
- channel.close();
- };
-
- setUrl(values.url);
- },
- [setError, t]
- );
+ setError("url", {
+ type: "server",
+ message: errorMessage,
+ });
+ } finally {
+ setIsLoading(false);
+ }
+ };
useEffect(() => {
setValue("url", "");
clearErrors();
setIsLoading(false);
- setValidationResult(null);
if (sourceUrl) {
setValue("url", sourceUrl);
- handleSubmit(onSubmit)();
}
- }, [visible, clearErrors, handleSubmit, onSubmit, setValue, sourceUrl]);
+ }, [visible, clearErrors, setValue, sourceUrl]);
- const putDownloadSource = async () => {
- const downloadSource = await downloadSourcesTable.where({ url }).first();
- if (!downloadSource) return;
-
- window.electron
- .putDownloadSource(downloadSource.objectIds)
- .then(({ fingerprint }) => {
- downloadSourcesTable.update(downloadSource.id, { fingerprint });
- });
- };
-
- const handleAddDownloadSource = async () => {
- if (validationResult) {
- setIsLoading(true);
-
- const channel = new BroadcastChannel(`download_sources:import:${url}`);
-
- downloadSourcesWorker.postMessage(["IMPORT_DOWNLOAD_SOURCE", url]);
-
- channel.onmessage = () => {
- window.electron.createDownloadSources([url]);
- setIsLoading(false);
-
- putDownloadSource();
-
- onClose();
- onAddDownloadSource();
- channel.close();
- };
- }
+ const handleClose = () => {
+ if (isLoading) return;
+ onClose();
};
return (
@@ -137,49 +91,36 @@ export function AddDownloadSourceModal({
visible={visible}
title={t("add_download_source")}
description={t("add_download_source_description")}
- onClose={onClose}
+ onClose={handleClose}
+ clickOutsideToClose={!isLoading}
>
-
+
+
+
- {t("validate_download_source")}
-
- }
- />
-
- {validationResult && (
-
-
-
{validationResult?.name}
-
- {t("found_download_option", {
- count: validationResult?.downloadCount,
- countFormatted:
- validationResult?.downloadCount.toLocaleString(),
- })}
-
-
-
-
- {t("import")}
+ {t("cancel")}
+
+
+
+ {isLoading && (
+
+ )}
+ {isLoading ? t("adding") : t("add_download_source")}
- )}
+
);
diff --git a/src/renderer/src/pages/settings/aparence/modals/add-theme-modal.tsx b/src/renderer/src/pages/settings/aparence/modals/add-theme-modal.tsx
index 58bcf58d..522d8546 100644
--- a/src/renderer/src/pages/settings/aparence/modals/add-theme-modal.tsx
+++ b/src/renderer/src/pages/settings/aparence/modals/add-theme-modal.tsx
@@ -9,6 +9,7 @@ import { useForm } from "react-hook-form";
import * as yup from "yup";
import { yupResolver } from "@hookform/resolvers/yup";
import { useCallback } from "react";
+import { generateUUID } from "@renderer/helpers";
import "./modals.scss";
@@ -79,7 +80,7 @@ export function AddThemeModal({
const onSubmit = useCallback(
async (values: FormValues) => {
const theme: Theme = {
- id: crypto.randomUUID(),
+ id: generateUUID(),
name: values.name,
isActive: false,
author: userDetails?.id,
diff --git a/src/renderer/src/pages/settings/aparence/modals/import-theme-modal.tsx b/src/renderer/src/pages/settings/aparence/modals/import-theme-modal.tsx
index 601e9568..516f320f 100644
--- a/src/renderer/src/pages/settings/aparence/modals/import-theme-modal.tsx
+++ b/src/renderer/src/pages/settings/aparence/modals/import-theme-modal.tsx
@@ -3,7 +3,11 @@ import { Modal } from "@renderer/components/modal/modal";
import { useTranslation } from "react-i18next";
import "./modals.scss";
import { Theme } from "@types";
-import { injectCustomCss, removeCustomCss } from "@renderer/helpers";
+import {
+ injectCustomCss,
+ removeCustomCss,
+ generateUUID,
+} from "@renderer/helpers";
import { useToast } from "@renderer/hooks";
import { THEME_WEB_STORE_URL } from "@renderer/constants";
import { logger } from "@renderer/logger";
@@ -30,7 +34,7 @@ export const ImportThemeModal = ({
const handleImportTheme = async () => {
const theme: Theme = {
- id: crypto.randomUUID(),
+ id: generateUUID(),
name: themeName,
isActive: false,
author: authorId,
diff --git a/src/renderer/src/pages/settings/settings-account.tsx b/src/renderer/src/pages/settings/settings-account.tsx
index 9cf35541..f2825cca 100644
--- a/src/renderer/src/pages/settings/settings-account.tsx
+++ b/src/renderer/src/pages/settings/settings-account.tsx
@@ -201,7 +201,7 @@ export function SettingsAccount() {
- Hydra Cloud
+ {t("hydra_cloud")}
{getHydraCloudSectionContent().description}
diff --git a/src/renderer/src/pages/settings/settings-all-debrid.scss b/src/renderer/src/pages/settings/settings-all-debrid.scss
deleted file mode 100644
index 4427ca7d..00000000
--- a/src/renderer/src/pages/settings/settings-all-debrid.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-.settings-all-debrid {
- &__form {
- display: flex;
- flex-direction: column;
- gap: 1rem;
- }
-
- &__description {
- margin: 0;
- color: var(--text-secondary);
- }
-}
diff --git a/src/renderer/src/pages/settings/settings-all-debrid.tsx b/src/renderer/src/pages/settings/settings-all-debrid.tsx
deleted file mode 100644
index aa821bc1..00000000
--- a/src/renderer/src/pages/settings/settings-all-debrid.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-import { useContext, useEffect, useState } from "react";
-import { Trans, useTranslation } from "react-i18next";
-
-import { Button, CheckboxField, Link, TextField } from "@renderer/components";
-import "./settings-all-debrid.scss";
-
-import { useAppSelector, useToast } from "@renderer/hooks";
-
-import { settingsContext } from "@renderer/context";
-
-const ALL_DEBRID_API_TOKEN_URL = "https://alldebrid.com/apikeys";
-
-export function SettingsAllDebrid() {
- const userPreferences = useAppSelector(
- (state) => state.userPreferences.value
- );
-
- const { updateUserPreferences } = useContext(settingsContext);
-
- const [isLoading, setIsLoading] = useState(false);
- const [form, setForm] = useState({
- useAllDebrid: false,
- allDebridApiKey: null as string | null,
- });
-
- const { showSuccessToast, showErrorToast } = useToast();
-
- const { t } = useTranslation("settings");
-
- useEffect(() => {
- if (userPreferences) {
- setForm({
- useAllDebrid: Boolean(userPreferences.allDebridApiKey),
- allDebridApiKey: userPreferences.allDebridApiKey ?? null,
- });
- }
- }, [userPreferences]);
-
- const handleFormSubmit: React.FormEventHandler = async (
- event
- ) => {
- setIsLoading(true);
- event.preventDefault();
-
- try {
- if (form.useAllDebrid) {
- if (!form.allDebridApiKey) {
- showErrorToast(t("alldebrid_missing_key"));
- return;
- }
-
- const result = await window.electron.authenticateAllDebrid(
- form.allDebridApiKey
- );
-
- if ("error_code" in result) {
- showErrorToast(t(result.error_code));
- return;
- }
-
- if (!result.isPremium) {
- showErrorToast(
- t("all_debrid_free_account_error", { username: result.username })
- );
- return;
- }
-
- showSuccessToast(
- t("all_debrid_account_linked"),
- t("debrid_linked_message", { username: result.username })
- );
- } else {
- showSuccessToast(t("changes_saved"));
- }
-
- updateUserPreferences({
- allDebridApiKey: form.useAllDebrid ? form.allDebridApiKey : null,
- });
- } catch (err: any) {
- showErrorToast(t("alldebrid_unknown_error"));
- } finally {
- setIsLoading(false);
- }
- };
-
- const isButtonDisabled =
- (form.useAllDebrid && !form.allDebridApiKey) || isLoading;
-
- return (
-
- );
-}
diff --git a/src/renderer/src/pages/settings/settings-behavior.tsx b/src/renderer/src/pages/settings/settings-behavior.tsx
index 64df52d7..c5698ef7 100644
--- a/src/renderer/src/pages/settings/settings-behavior.tsx
+++ b/src/renderer/src/pages/settings/settings-behavior.tsx
@@ -27,6 +27,8 @@ export function SettingsBehavior() {
showDownloadSpeedInMegabytes: false,
extractFilesByDefault: true,
enableSteamAchievements: false,
+ autoplayGameTrailers: true,
+ hideToTrayOnGameStart: false,
});
const { t } = useTranslation("settings");
@@ -49,6 +51,8 @@ export function SettingsBehavior() {
extractFilesByDefault: userPreferences.extractFilesByDefault ?? true,
enableSteamAchievements:
userPreferences.enableSteamAchievements ?? false,
+ autoplayGameTrailers: userPreferences.autoplayGameTrailers ?? true,
+ hideToTrayOnGameStart: userPreferences.hideToTrayOnGameStart ?? false,
});
}
}, [userPreferences]);
@@ -76,6 +80,16 @@ export function SettingsBehavior() {
}
/>
+
+ handleChange({
+ hideToTrayOnGameStart: !form.hideToTrayOnGameStart,
+ })
+ }
+ />
+
{showRunAtStartup && (
)}
+
+ handleChange({ autoplayGameTrailers: !form.autoplayGameTrailers })
+ }
+ />
+
state.userPreferences.value
+ );
+
+ const initialCollapseState = useMemo(() => {
+ return {
+ torbox: !userPreferences?.torBoxApiToken,
+ realDebrid: !userPreferences?.realDebridApiToken,
+ };
+ }, [userPreferences]);
+
+ const [collapseState, setCollapseState] =
+ useState(initialCollapseState);
+
+ const toggleSection = useCallback((section: keyof CollapseState) => {
+ setCollapseState((prevState) => ({
+ ...prevState,
+ [section]: !prevState[section],
+ }));
+ }, []);
+
+ return (
+
+
{t("debrid_description")}
+
+
+
+ toggleSection("realDebrid")}
+ aria-label={
+ collapseState.realDebrid
+ ? "Expand Real-Debrid section"
+ : "Collapse Real-Debrid section"
+ }
+ >
+
+
+
+
+
Real-Debrid
+ {userPreferences?.realDebridApiToken && (
+
+ )}
+
+
+
+ {!collapseState.realDebrid && (
+
+
+
+ )}
+
+
+
+ {isTorBoxEnabled && (
+
+
+ toggleSection("torbox")}
+ aria-label={
+ collapseState.torbox
+ ? "Expand TorBox section"
+ : "Collapse TorBox section"
+ }
+ >
+
+
+
+
+
TorBox
+ {userPreferences?.torBoxApiToken && (
+
+ )}
+
+
+
+ {!collapseState.torbox && (
+
+
+
+ )}
+
+
+ )}
+
+ );
+}
diff --git a/src/renderer/src/pages/settings/settings-download-sources.scss b/src/renderer/src/pages/settings/settings-download-sources.scss
index a12bdff3..df0f5c8b 100644
--- a/src/renderer/src/pages/settings/settings-download-sources.scss
+++ b/src/renderer/src/pages/settings/settings-download-sources.scss
@@ -1,5 +1,14 @@
@use "../../scss/globals.scss";
+@keyframes spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
.settings-download-sources {
&__list {
padding: 0;
@@ -22,6 +31,17 @@
&--syncing {
opacity: globals.$disabled-opacity;
}
+
+ &--pending {
+ opacity: 0.6;
+ }
+ }
+
+ &__spinner {
+ animation: spin 1s linear infinite;
+ margin-right: calc(globals.$spacing-unit / 2);
+ width: 12px;
+ height: 12px;
}
&__item-header {
diff --git a/src/renderer/src/pages/settings/settings-download-sources.tsx b/src/renderer/src/pages/settings/settings-download-sources.tsx
index fa30dfa1..75f0cc73 100644
--- a/src/renderer/src/pages/settings/settings-download-sources.tsx
+++ b/src/renderer/src/pages/settings/settings-download-sources.tsx
@@ -16,14 +16,13 @@ import {
TrashIcon,
} from "@primer/octicons-react";
import { AddDownloadSourceModal } from "./add-download-source-modal";
-import { useAppDispatch, useRepacks, useToast } from "@renderer/hooks";
+import { useAppDispatch, useToast } from "@renderer/hooks";
import { DownloadSourceStatus } from "@shared";
import { settingsContext } from "@renderer/context";
-import { downloadSourcesTable } from "@renderer/dexie";
-import { downloadSourcesWorker } from "@renderer/workers";
import { useNavigate } from "react-router-dom";
import { setFilters, clearFilters } from "@renderer/features";
import "./settings-download-sources.scss";
+import { logger } from "@renderer/logger";
export function SettingsDownloadSources() {
const [
@@ -37,7 +36,6 @@ export function SettingsDownloadSources() {
useState(false);
const [isRemovingDownloadSource, setIsRemovingDownloadSource] =
useState(false);
- const [isFetchingSources, setIsFetchingSources] = useState(true);
const { sourceUrl, clearSourceUrl } = useContext(settingsContext);
@@ -48,95 +46,103 @@ export function SettingsDownloadSources() {
const navigate = useNavigate();
- const { updateRepacks } = useRepacks();
-
- const getDownloadSources = async () => {
- await downloadSourcesTable
- .toCollection()
- .sortBy("createdAt")
- .then((sources) => {
- setDownloadSources(sources.reverse());
- })
- .finally(() => {
- setIsFetchingSources(false);
- });
- };
-
- useEffect(() => {
- getDownloadSources();
- }, []);
-
useEffect(() => {
if (sourceUrl) setShowAddDownloadSourceModal(true);
}, [sourceUrl]);
- const handleRemoveSource = (downloadSource: DownloadSource) => {
- setIsRemovingDownloadSource(true);
- const channel = new BroadcastChannel(
- `download_sources:delete:${downloadSource.id}`
+ useEffect(() => {
+ const fetchDownloadSources = async () => {
+ const sources = await window.electron.getDownloadSources();
+ setDownloadSources(sources);
+ };
+
+ fetchDownloadSources();
+ }, []);
+
+ useEffect(() => {
+ const hasPendingOrMatchingSource = downloadSources.some(
+ (source) =>
+ source.status === DownloadSourceStatus.PendingMatching ||
+ source.status === DownloadSourceStatus.Matching
);
- downloadSourcesWorker.postMessage([
- "DELETE_DOWNLOAD_SOURCE",
- downloadSource.id,
- ]);
+ if (!hasPendingOrMatchingSource || !downloadSources.length) {
+ return;
+ }
- channel.onmessage = () => {
- showSuccessToast(t("removed_download_source"));
- window.electron.removeDownloadSource(downloadSource.url);
+ const intervalId = setInterval(async () => {
+ try {
+ await window.electron.syncDownloadSources();
+ const sources = await window.electron.getDownloadSources();
+ setDownloadSources(sources);
+ } catch (error) {
+ logger.error("Failed to fetch download sources:", error);
+ }
+ }, 5000);
- getDownloadSources();
- setIsRemovingDownloadSource(false);
- channel.close();
- updateRepacks();
- };
- };
+ return () => clearInterval(intervalId);
+ }, [downloadSources]);
- const handleRemoveAllDownloadSources = () => {
+ const handleRemoveSource = async (downloadSource: DownloadSource) => {
setIsRemovingDownloadSource(true);
- const id = crypto.randomUUID();
- const channel = new BroadcastChannel(`download_sources:delete_all:${id}`);
+ try {
+ await window.electron.removeDownloadSource(false, downloadSource.id);
+ const sources = await window.electron.getDownloadSources();
+ setDownloadSources(sources as DownloadSource[]);
+ showSuccessToast(t("removed_download_source"));
+ } catch (error) {
+ logger.error("Failed to remove download source:", error);
+ } finally {
+ setIsRemovingDownloadSource(false);
+ }
+ };
- downloadSourcesWorker.postMessage(["DELETE_ALL_DOWNLOAD_SOURCES", id]);
+ const handleRemoveAllDownloadSources = async () => {
+ setIsRemovingDownloadSource(true);
- channel.onmessage = () => {
- showSuccessToast(t("removed_download_sources"));
- window.electron.removeDownloadSource("", true);
- getDownloadSources();
+ try {
+ await window.electron.removeDownloadSource(true);
+ const sources = await window.electron.getDownloadSources();
+ setDownloadSources(sources as DownloadSource[]);
+ showSuccessToast(t("removed_all_download_sources"));
+ } catch (error) {
+ logger.error("Failed to remove all download sources:", error);
+ } finally {
setIsRemovingDownloadSource(false);
setShowConfirmationDeleteAllSourcesModal(false);
- channel.close();
- updateRepacks();
- };
+ }
};
const handleAddDownloadSource = async () => {
- await getDownloadSources();
- showSuccessToast(t("added_download_source"));
- updateRepacks();
+ try {
+ const sources = await window.electron.getDownloadSources();
+ setDownloadSources(sources as DownloadSource[]);
+ } catch (error) {
+ logger.error("Failed to refresh download sources:", error);
+ }
};
const syncDownloadSources = async () => {
setIsSyncingDownloadSources(true);
+ try {
+ await window.electron.syncDownloadSources();
+ const sources = await window.electron.getDownloadSources();
+ setDownloadSources(sources as DownloadSource[]);
- const id = crypto.randomUUID();
- const channel = new BroadcastChannel(`download_sources:sync:${id}`);
-
- downloadSourcesWorker.postMessage(["SYNC_DOWNLOAD_SOURCES", id]);
-
- channel.onmessage = () => {
- showSuccessToast(t("download_sources_synced"));
- getDownloadSources();
+ showSuccessToast(t("download_sources_synced_successfully"));
+ } finally {
setIsSyncingDownloadSources(false);
- channel.close();
- updateRepacks();
- };
+ }
};
const statusTitle = {
- [DownloadSourceStatus.UpToDate]: t("download_source_up_to_date"),
- [DownloadSourceStatus.Errored]: t("download_source_errored"),
+ [DownloadSourceStatus.PendingMatching]: t(
+ "download_source_pending_matching"
+ ),
+ [DownloadSourceStatus.Matched]: t("download_source_matched"),
+ [DownloadSourceStatus.Matching]: t("download_source_matching"),
+ [DownloadSourceStatus.Failed]: t("download_source_failed"),
};
const handleModalClose = () => {
@@ -144,7 +150,12 @@ export function SettingsDownloadSources() {
setShowAddDownloadSourceModal(false);
};
- const navigateToCatalogue = (fingerprint: string) => {
+ const navigateToCatalogue = (fingerprint?: string) => {
+ if (!fingerprint) {
+ logger.error("Cannot navigate: fingerprint is undefined");
+ return;
+ }
+
dispatch(clearFilters());
dispatch(setFilters({ downloadSourceFingerprints: [fingerprint] }));
@@ -179,8 +190,7 @@ export function SettingsDownloadSources() {
disabled={
!downloadSources.length ||
isSyncingDownloadSources ||
- isRemovingDownloadSource ||
- isFetchingSources
+ isRemovingDownloadSource
}
onClick={syncDownloadSources}
>
@@ -196,8 +206,7 @@ export function SettingsDownloadSources() {
disabled={
isRemovingDownloadSource ||
isSyncingDownloadSources ||
- !downloadSources.length ||
- isFetchingSources
+ !downloadSources.length
}
>
@@ -208,11 +217,7 @@ export function SettingsDownloadSources() {
type="button"
theme="outline"
onClick={() => setShowAddDownloadSourceModal(true)}
- disabled={
- isSyncingDownloadSources ||
- isFetchingSources ||
- isRemovingDownloadSource
- }
+ disabled={isSyncingDownloadSources || isRemovingDownloadSource}
>
{t("add_download_source")}
@@ -221,54 +226,69 @@ export function SettingsDownloadSources() {
- {downloadSources.map((downloadSource) => (
- -
-
-
{downloadSource.name}
+ {downloadSources.map((downloadSource) => {
+ const isPendingOrMatching =
+ downloadSource.status === DownloadSourceStatus.PendingMatching ||
+ downloadSource.status === DownloadSourceStatus.Matching;
-
-
{statusTitle[downloadSource.status]}
+ return (
+
-
+
+
{downloadSource.name}
+
+
+
+ {isPendingOrMatching && (
+
+ )}
+ {statusTitle[downloadSource.status]}
+
+
+
+
+ navigateToCatalogue(downloadSource.fingerprint)
+ }
+ >
+
+ {isPendingOrMatching
+ ? t("download_source_no_information")
+ : t("download_count", {
+ count: downloadSource.downloadCount,
+ countFormatted:
+ downloadSource.downloadCount.toLocaleString(),
+ })}
+
+
- navigateToCatalogue(downloadSource.fingerprint)}
- >
-
- {t("download_count", {
- count: downloadSource.downloadCount,
- countFormatted:
- downloadSource.downloadCount.toLocaleString(),
- })}
-
-
-
-
-
handleRemoveSource(downloadSource)}
- disabled={isRemovingDownloadSource}
- >
-
- {t("remove_download_source")}
-
- }
- />
-
- ))}
+ handleRemoveSource(downloadSource)}
+ disabled={isRemovingDownloadSource}
+ >
+
+ {t("remove_download_source")}
+
+ }
+ />
+
+ );
+ })}
>
);
diff --git a/src/renderer/src/pages/settings/settings-real-debrid.tsx b/src/renderer/src/pages/settings/settings-real-debrid.tsx
index 42ba6ad9..db3a29a3 100644
--- a/src/renderer/src/pages/settings/settings-real-debrid.tsx
+++ b/src/renderer/src/pages/settings/settings-real-debrid.tsx
@@ -133,7 +133,7 @@ export function SettingsRealDebrid() {
{t("save_changes")}
}
- placeholder="API Token"
+ placeholder={t("api_token")}
hint={
diff --git a/src/renderer/src/pages/settings/settings-torbox.tsx b/src/renderer/src/pages/settings/settings-torbox.tsx
index 610dc942..46c8e2f9 100644
--- a/src/renderer/src/pages/settings/settings-torbox.tsx
+++ b/src/renderer/src/pages/settings/settings-torbox.tsx
@@ -116,7 +116,7 @@ export function SettingsTorBox() {
onChange={(event) =>
setForm({ ...form, torBoxApiToken: event.target.value })
}
- placeholder="API Token"
+ placeholder={t("api_token")}
rightContent={
{t("save_changes")}
diff --git a/src/renderer/src/pages/settings/settings.tsx b/src/renderer/src/pages/settings/settings.tsx
index d609d218..eb19af31 100644
--- a/src/renderer/src/pages/settings/settings.tsx
+++ b/src/renderer/src/pages/settings/settings.tsx
@@ -1,7 +1,5 @@
import { Button } from "@renderer/components";
import { useTranslation } from "react-i18next";
-import { SettingsRealDebrid } from "./settings-real-debrid";
-import { SettingsAllDebrid } from "./settings-all-debrid";
import { SettingsGeneral } from "./settings-general";
import { SettingsBehavior } from "./settings-behavior";
import { SettingsDownloadSources } from "./settings-download-sources";
@@ -10,21 +8,17 @@ import {
SettingsContextProvider,
} from "@renderer/context";
import { SettingsAccount } from "./settings-account";
-import { useFeature, useUserDetails } from "@renderer/hooks";
+import { useUserDetails } from "@renderer/hooks";
import { useMemo } from "react";
import "./settings.scss";
import { SettingsAppearance } from "./aparence/settings-appearance";
-import { SettingsTorBox } from "./settings-torbox";
+import { SettingsDebrid } from "./settings-debrid";
export default function Settings() {
const { t } = useTranslation("settings");
const { userDetails } = useUserDetails();
- const { isFeatureEnabled, Feature } = useFeature();
-
- const isTorBoxEnabled = isFeatureEnabled(Feature.TorBox);
-
const categories = useMemo(() => {
const categories = [
{ tabLabel: t("general"), contentTitle: t("general") },
@@ -34,16 +28,7 @@ export default function Settings() {
tabLabel: t("appearance"),
contentTitle: t("appearance"),
},
- ...(isTorBoxEnabled
- ? [
- {
- tabLabel: "TorBox",
- contentTitle: "TorBox",
- },
- ]
- : []),
- { tabLabel: "Real-Debrid", contentTitle: "Real-Debrid" },
- { tabLabel: "All-Debrid", contentTitle: "All-Debrid" },
+ { tabLabel: t("debrid"), contentTitle: t("debrid") },
];
if (userDetails)
@@ -52,7 +37,7 @@ export default function Settings() {
{ tabLabel: t("account"), contentTitle: t("account") },
];
return categories;
- }, [userDetails, t, isTorBoxEnabled]);
+ }, [userDetails, t]);
return (
@@ -76,15 +61,7 @@ export default function Settings() {
}
if (currentCategoryIndex === 4) {
- return ;
- }
-
- if (currentCategoryIndex === 5) {
- return ;
- }
-
- if (currentCategoryIndex === 6) {
- return ;
+ return ;
}
return ;
diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.tsx b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.tsx
index 610816fa..6ae91cfd 100644
--- a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.tsx
+++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.tsx
@@ -34,8 +34,13 @@ export const UserFriendModalList = ({
const loadNextPage = () => {
if (page > maxPage) return;
setIsLoading(true);
- window.electron
- .getUserFriends(userId, pageSize, page * pageSize)
+
+ const url = isMe ? "/profile/friends" : `/users/${userId}/friends`;
+
+ window.electron.hydraApi
+ .get<{ totalFriends: number; friends: UserFriend[] }>(url, {
+ params: { take: pageSize, skip: page * pageSize },
+ })
.then((newPage) => {
if (page === 0) {
setMaxPage(newPage.totalFriends / pageSize);
diff --git a/src/renderer/src/store.ts b/src/renderer/src/store.ts
index e771f98e..9903271c 100644
--- a/src/renderer/src/store.ts
+++ b/src/renderer/src/store.ts
@@ -8,7 +8,6 @@ import {
userDetailsSlice,
gameRunningSlice,
subscriptionSlice,
- repacksSlice,
catalogueSearchSlice,
} from "@renderer/features";
@@ -22,7 +21,6 @@ export const store = configureStore({
userDetails: userDetailsSlice.reducer,
gameRunning: gameRunningSlice.reducer,
subscription: subscriptionSlice.reducer,
- repacks: repacksSlice.reducer,
catalogueSearch: catalogueSearchSlice.reducer,
},
});
diff --git a/src/renderer/src/workers/download-sources.worker.ts b/src/renderer/src/workers/download-sources.worker.ts
deleted file mode 100644
index 3f95bf22..00000000
--- a/src/renderer/src/workers/download-sources.worker.ts
+++ /dev/null
@@ -1,238 +0,0 @@
-import { db, downloadSourcesTable, repacksTable } from "@renderer/dexie";
-
-import { z } from "zod";
-import axios, { AxiosError, AxiosHeaders } from "axios";
-import { DownloadSourceStatus, formatName, pipe } from "@shared";
-import { GameRepack } from "@types";
-
-const formatRepackName = pipe((name) => name.replace("[DL]", ""), formatName);
-
-export const downloadSourceSchema = z.object({
- name: z.string().max(255),
- downloads: z.array(
- z.object({
- title: z.string().max(255),
- uris: z.array(z.string()),
- uploadDate: z.string().max(255),
- fileSize: z.string().max(255),
- })
- ),
-});
-
-type Payload =
- | ["IMPORT_DOWNLOAD_SOURCE", string]
- | ["DELETE_DOWNLOAD_SOURCE", number]
- | ["VALIDATE_DOWNLOAD_SOURCE", string]
- | ["SYNC_DOWNLOAD_SOURCES", string]
- | ["DELETE_ALL_DOWNLOAD_SOURCES", string];
-
-export type SteamGamesByLetter = Record;
-
-const addNewDownloads = async (
- downloadSource: { id: number; name: string },
- downloads: z.infer["downloads"],
- steamGames: SteamGamesByLetter
-) => {
- const now = new Date();
-
- const results = [] as (Omit & {
- downloadSourceId: number;
- })[];
-
- const objectIdsOnSource = new Set();
-
- for (const download of downloads) {
- const formattedTitle = formatRepackName(download.title);
- const [firstLetter] = formattedTitle;
- const games = steamGames[firstLetter] || [];
-
- const gamesInSteam = games.filter((game) =>
- formattedTitle.startsWith(game.name)
- );
-
- if (gamesInSteam.length === 0) continue;
-
- for (const game of gamesInSteam) {
- objectIdsOnSource.add(String(game.id));
- }
-
- results.push({
- objectIds: gamesInSteam.map((game) => String(game.id)),
- title: download.title,
- uris: download.uris,
- fileSize: download.fileSize,
- repacker: downloadSource.name,
- uploadDate: download.uploadDate,
- downloadSourceId: downloadSource.id,
- createdAt: now,
- updatedAt: now,
- });
- }
-
- await repacksTable.bulkAdd(results);
-
- await downloadSourcesTable.update(downloadSource.id, {
- objectIds: Array.from(objectIdsOnSource),
- });
-};
-
-const getSteamGames = async () => {
- const response = await axios.get(
- `${import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL}/steam-games-by-letter.json`
- );
-
- return response.data;
-};
-
-const importDownloadSource = async (url: string) => {
- const response = await axios.get>(url);
-
- const steamGames = await getSteamGames();
-
- await db.transaction("rw", repacksTable, downloadSourcesTable, async () => {
- const now = new Date();
-
- const id = await downloadSourcesTable.add({
- url,
- name: response.data.name,
- etag: response.headers["etag"],
- status: DownloadSourceStatus.UpToDate,
- downloadCount: response.data.downloads.length,
- createdAt: now,
- updatedAt: now,
- });
-
- const downloadSource = await downloadSourcesTable.get(id);
-
- await addNewDownloads(downloadSource, response.data.downloads, steamGames);
- });
-};
-
-const deleteDownloadSource = async (id: number) => {
- await db.transaction("rw", repacksTable, downloadSourcesTable, async () => {
- await repacksTable.where({ downloadSourceId: id }).delete();
- await downloadSourcesTable.where({ id }).delete();
- });
-};
-
-const deleteAllDowloadSources = async () => {
- await db.transaction("rw", repacksTable, downloadSourcesTable, async () => {
- await repacksTable.clear();
- await downloadSourcesTable.clear();
- });
-};
-
-self.onmessage = async (event: MessageEvent) => {
- const [type, data] = event.data;
-
- if (type === "VALIDATE_DOWNLOAD_SOURCE") {
- const response =
- await axios.get>(data);
-
- const { name } = downloadSourceSchema.parse(response.data);
-
- const channel = new BroadcastChannel(`download_sources:validate:${data}`);
-
- channel.postMessage({
- name,
- etag: response.headers["etag"],
- downloadCount: response.data.downloads.length,
- });
- }
-
- if (type === "DELETE_ALL_DOWNLOAD_SOURCES") {
- await deleteAllDowloadSources();
-
- const channel = new BroadcastChannel(`download_sources:delete_all:${data}`);
-
- channel.postMessage(true);
- }
-
- if (type === "DELETE_DOWNLOAD_SOURCE") {
- await deleteDownloadSource(data);
-
- const channel = new BroadcastChannel(`download_sources:delete:${data}`);
-
- channel.postMessage(true);
- }
-
- if (type === "IMPORT_DOWNLOAD_SOURCE") {
- await importDownloadSource(data);
-
- const channel = new BroadcastChannel(`download_sources:import:${data}`);
- channel.postMessage(true);
- }
-
- if (type === "SYNC_DOWNLOAD_SOURCES") {
- const channel = new BroadcastChannel(`download_sources:sync:${data}`);
- let newRepacksCount = 0;
-
- try {
- const downloadSources = await downloadSourcesTable.toArray();
- const existingRepacks = await repacksTable.toArray();
-
- if (downloadSources.some((source) => !source.fingerprint)) {
- await Promise.all(
- downloadSources.map(async (source) => {
- await deleteDownloadSource(source.id);
- await importDownloadSource(source.url);
- })
- );
- } else {
- for (const downloadSource of downloadSources) {
- const headers = new AxiosHeaders();
-
- if (downloadSource.etag) {
- headers.set("If-None-Match", downloadSource.etag);
- }
-
- try {
- const response = await axios.get(downloadSource.url, {
- headers,
- });
-
- const source = downloadSourceSchema.parse(response.data);
-
- const steamGames = await getSteamGames();
-
- await db.transaction(
- "rw",
- repacksTable,
- downloadSourcesTable,
- async () => {
- await downloadSourcesTable.update(downloadSource.id, {
- etag: response.headers["etag"],
- downloadCount: source.downloads.length,
- status: DownloadSourceStatus.UpToDate,
- });
-
- const repacks = source.downloads.filter(
- (download) =>
- !existingRepacks.some(
- (repack) => repack.title === download.title
- )
- );
-
- await addNewDownloads(downloadSource, repacks, steamGames);
-
- newRepacksCount += repacks.length;
- }
- );
- } catch (err: unknown) {
- const isNotModified = (err as AxiosError).response?.status === 304;
-
- await downloadSourcesTable.update(downloadSource.id, {
- status: isNotModified
- ? DownloadSourceStatus.UpToDate
- : DownloadSourceStatus.Errored,
- });
- }
- }
- }
-
- channel.postMessage(newRepacksCount);
- } catch (err) {
- channel.postMessage(-1);
- }
- }
-};
diff --git a/src/renderer/src/workers/index.ts b/src/renderer/src/workers/index.ts
deleted file mode 100644
index 39367894..00000000
--- a/src/renderer/src/workers/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import DownloadSourcesWorker from "./download-sources.worker?worker";
-
-export const downloadSourcesWorker = new DownloadSourcesWorker();
diff --git a/src/shared/constants.ts b/src/shared/constants.ts
index 352ffe12..619dca65 100644
--- a/src/shared/constants.ts
+++ b/src/shared/constants.ts
@@ -1,6 +1,5 @@
export enum Downloader {
RealDebrid,
- AllDebrid,
Torrent,
Gofile,
PixelDrain,
@@ -12,8 +11,10 @@ export enum Downloader {
}
export enum DownloadSourceStatus {
- UpToDate,
- Errored,
+ PendingMatching = "PENDING_MATCHING",
+ Matched = "MATCHED",
+ Matching = "MATCHING",
+ Failed = "FAILED",
}
export enum CatalogueCategory {
@@ -56,7 +57,6 @@ export enum AuthPage {
export enum DownloadError {
NotCachedOnRealDebrid = "download_error_not_cached_on_real_debrid",
- NotCachedInAllDebrid = "download_error_not_cached_in_alldebrid",
NotCachedOnTorBox = "download_error_not_cached_on_torbox",
GofileQuotaExceeded = "download_error_gofile_quota_exceeded",
RealDebridAccountNotAuthorized = "download_error_real_debrid_account_not_authorized",
diff --git a/src/shared/html-sanitizer.ts b/src/shared/html-sanitizer.ts
new file mode 100644
index 00000000..0969564d
--- /dev/null
+++ b/src/shared/html-sanitizer.ts
@@ -0,0 +1,86 @@
+function removeZalgoText(text: string): string {
+ // Match combining characters that are commonly used in Zalgo text
+ // Using a more explicit approach to avoid misleading-character-class warning
+ const combiningMarks = [
+ /\u0300-\u036F/g, // Combining Diacritical Marks
+ /\u1AB0-\u1AFF/g, // Combining Diacritical Marks Extended
+ /\u1DC0-\u1DFF/g, // Combining Diacritical Marks Supplement
+ /\u20D0-\u20FF/g, // Combining Diacritical Marks for Symbols
+ /\uFE20-\uFE2F/g, // Combining Half Marks
+ ];
+
+ let result = text;
+ for (const regex of combiningMarks) {
+ result = result.replace(regex, "");
+ }
+ return result;
+}
+
+export function sanitizeHtml(html: string): string {
+ if (!html || typeof html !== "string") {
+ return "";
+ }
+
+ const tempDiv = document.createElement("div");
+ tempDiv.innerHTML = html;
+
+ const disallowedSelectors = [
+ "script",
+ "style",
+ "iframe",
+ "object",
+ "embed",
+ "link",
+ "meta",
+ ];
+ for (const sel of disallowedSelectors) {
+ for (const el of tempDiv.querySelectorAll(sel)) {
+ el.remove();
+ }
+ }
+
+ // Remove code and pre tags but keep their text content
+ for (const el of tempDiv.querySelectorAll("code, pre")) {
+ const textNode = document.createTextNode(el.textContent || "");
+ el.replaceWith(textNode);
+ }
+
+ for (const el of tempDiv.querySelectorAll("*")) {
+ for (const attr of Array.from(el.attributes)) {
+ const name = attr.name.toLowerCase();
+ if (
+ name.startsWith("on") ||
+ name === "style" ||
+ name === "src" ||
+ name === "href"
+ ) {
+ el.removeAttribute(attr.name);
+ }
+ }
+ }
+
+ const walker = document.createTreeWalker(tempDiv, NodeFilter.SHOW_TEXT);
+ let node: Node | null;
+ while ((node = walker.nextNode())) {
+ const textNode = node as Text;
+ const value = textNode.nodeValue || "";
+ textNode.nodeValue = removeZalgoText(value);
+ }
+
+ const cleanHtml = tempDiv.innerHTML.trim();
+ return cleanHtml;
+}
+
+export function stripHtml(html: string): string {
+ if (!html || typeof html !== "string") {
+ return "";
+ }
+
+ const tempDiv = document.createElement("div");
+ tempDiv.innerHTML = html;
+ let cleanText = tempDiv.textContent || tempDiv.innerText || "";
+
+ cleanText = removeZalgoText(cleanText);
+
+ return cleanText;
+}
diff --git a/src/shared/index.ts b/src/shared/index.ts
index 000ffd22..615fa36e 100644
--- a/src/shared/index.ts
+++ b/src/shared/index.ts
@@ -19,6 +19,7 @@ import { format } from "date-fns";
import { AchievementNotificationInfo } from "@types";
export * from "./constants";
+export * from "./html-sanitizer";
export class UserNotLoggedInError extends Error {
constructor() {
@@ -123,7 +124,6 @@ export const getDownloadersForUri = (uri: string) => {
Downloader.Hydra,
Downloader.TorBox,
Downloader.RealDebrid,
- Downloader.AllDebrid,
];
}
@@ -141,19 +141,6 @@ export const getDownloadersForUris = (uris: string[]) => {
return Array.from(downloadersSet);
};
-export const steamUrlBuilder = {
- library: (objectId: string) =>
- `https://steamcdn-a.akamaihd.net/steam/apps/${objectId}/header.jpg`,
- libraryHero: (objectId: string) =>
- `https://steamcdn-a.akamaihd.net/steam/apps/${objectId}/library_hero.jpg`,
- logo: (objectId: string) =>
- `https://cdn.cloudflare.steamstatic.com/steam/apps/${objectId}/logo.png`,
- cover: (objectId: string) =>
- `https://cdn.cloudflare.steamstatic.com/steam/apps/${objectId}/library_600x900.jpg`,
- icon: (objectId: string, clientIcon: string) =>
- `https://cdn.cloudflare.steamstatic.com/steamcommunity/public/images/apps/${objectId}/${clientIcon}.ico`,
-};
-
export const getDateLocale = (language: string) => {
if (language.startsWith("pt")) return ptBR;
if (language.startsWith("es")) return es;
diff --git a/src/types/download.types.ts b/src/types/download.types.ts
index d19a3b83..004d8f27 100644
--- a/src/types/download.types.ts
+++ b/src/types/download.types.ts
@@ -175,11 +175,3 @@ export interface SeedingStatus {
status: DownloadStatus;
uploadSpeed: number;
}
-
-/* All-Debrid */
-export interface AllDebridUser {
- username: string;
- email: string;
- isPremium: boolean;
- premiumUntil: string;
-}
diff --git a/src/types/game.types.ts b/src/types/game.types.ts
index ed8fb852..35d537a8 100644
--- a/src/types/game.types.ts
+++ b/src/types/game.types.ts
@@ -1,4 +1,4 @@
-export type GameShop = "steam" | "epic" | "custom";
+export type GameShop = "steam" | "custom";
export type ShortcutLocation = "desktop" | "start_menu";
diff --git a/src/types/index.ts b/src/types/index.ts
index 593c45be..4b13c496 100644
--- a/src/types/index.ts
+++ b/src/types/index.ts
@@ -10,30 +10,30 @@ export type HydraCloudFeature =
| "backup"
| "achievements-points";
+export interface DiskUsage {
+ free: number;
+ total: number;
+}
+
export interface GameRepack {
- id: number;
+ id: string;
title: string;
- uris: string[];
- repacker: string;
fileSize: string | null;
- objectIds: string[];
- uploadDate: Date | string | null;
- createdAt: Date;
- updatedAt: Date;
+ uris: string[];
+ uploadDate: string | null;
+ downloadSourceId: string;
+ downloadSourceName: string;
}
export interface DownloadSource {
- id: number;
+ id: string;
name: string;
url: string;
- repackCount: number;
status: DownloadSourceStatus;
- objectIds: string[];
downloadCount: number;
- fingerprint: string;
- etag: string | null;
- createdAt: Date;
- updatedAt: Date;
+ fingerprint?: string;
+ isRemote?: true;
+ createdAt: string;
}
export interface ShopAssets {
@@ -45,7 +45,8 @@ export interface ShopAssets {
libraryImageUrl: string;
logoImageUrl: string;
logoPosition: string | null;
- coverImageUrl: string;
+ coverImageUrl: string | null;
+ downloadSources: string[];
}
export type ShopDetails = SteamAppDetails & {
@@ -108,7 +109,6 @@ export type AppUpdaterEvent =
/* Events */
export interface StartGameDownloadPayload {
- repackId: number;
objectId: string;
title: string;
shop: GameShop;
@@ -182,6 +182,7 @@ export interface UserDetails {
bio: string;
featurebaseJwt: string;
subscription: Subscription | null;
+ karma: number;
quirks?: {
backupsPerGameLimit: number;
};
@@ -202,6 +203,7 @@ export interface UserProfile {
currentGame: UserProfileCurrentGame | null;
bio: string;
hasActiveSubscription: boolean;
+ karma: number;
quirks: {
backupsPerGameLimit: number;
};
@@ -224,16 +226,33 @@ export interface DownloadSourceDownload {
fileSize: string;
}
-export interface DownloadSourceValidationResult {
- name: string;
- etag: string;
- downloadCount: number;
-}
-
export interface GameStats {
downloadCount: number;
playerCount: number;
- assets: ShopAssets | null;
+ averageScore: number | null;
+ reviewCount: number;
+}
+
+export interface GameReview {
+ id: string;
+ reviewHtml: string;
+ score: number;
+ createdAt: string;
+ updatedAt: string;
+ upvotes: number;
+ downvotes: number;
+ isBlocked: boolean;
+ hasUpvoted: boolean;
+ hasDownvoted: boolean;
+ user: {
+ id: string;
+ displayName: string;
+ profileImageUrl: string | null;
+ };
+ translations: {
+ [key: string]: string;
+ };
+ detectedLanguage: string;
}
export interface TrendingGame extends ShopAssets {
@@ -336,7 +355,7 @@ export type CatalogueSearchResult = {
title: string;
shop: GameShop;
genres: string[];
-} & Pick;
+} & Pick;
export type LibraryGame = Game &
Partial & {
diff --git a/src/types/level.types.ts b/src/types/level.types.ts
index 93925068..1df55b9e 100644
--- a/src/types/level.types.ts
+++ b/src/types/level.types.ts
@@ -83,6 +83,7 @@ export interface GameAchievement {
achievements: SteamAchievement[];
unlockedAchievements: UnlockedAchievement[];
updatedAt: number | undefined;
+ language: string | undefined;
}
export type AchievementCustomNotificationPosition =
@@ -99,7 +100,6 @@ export interface UserPreferences {
language?: string;
realDebridApiToken?: string | null;
torBoxApiToken?: string | null;
- allDebridApiKey?: string | null;
preferQuitInsteadOfHiding?: boolean;
runAtStartup?: boolean;
startMinimized?: boolean;
@@ -118,6 +118,8 @@ export interface UserPreferences {
showDownloadSpeedInMegabytes?: boolean;
extractFilesByDefault?: boolean;
enableSteamAchievements?: boolean;
+ autoplayGameTrailers?: boolean;
+ hideToTrayOnGameStart?: boolean;
}
export interface ScreenState {
diff --git a/yarn.lock b/yarn.lock
index 2c321857..6fb80492 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4,16 +4,19 @@
"7zip-bin@~5.2.0":
version "5.2.0"
- resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz"
+ resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d"
integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==
-"@ampproject/remapping@^2.2.0":
- version "2.3.0"
- resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz"
- integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+"@asamuzakjp/css-color@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-3.2.0.tgz#cc42f5b85c593f79f1fa4f25d2b9b321e61d1794"
+ integrity sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==
dependencies:
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.24"
+ "@csstools/css-calc" "^2.1.3"
+ "@csstools/css-color-parser" "^3.0.9"
+ "@csstools/css-parser-algorithms" "^3.0.4"
+ "@csstools/css-tokenizer" "^3.0.3"
+ lru-cache "^10.4.3"
"@aws-crypto/crc32@5.2.0":
version "5.2.0"
@@ -84,548 +87,507 @@
tslib "^2.6.2"
"@aws-sdk/client-s3@^3.705.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.714.0.tgz#74d056a57525a1289c7934015f2ce3f3714e7464"
- integrity sha512-DqzfbecKrhUEpsYTsYRIm4cKKlIvAl4I/A2NpzDPDSiA2EmCWLy0T5fK1ivUA4XL+09+4pHJGNVTpMyDs7n6vg==
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.908.0.tgz#99aaf076f95dadc11419a2558749b0159e5d9e4a"
+ integrity sha512-c/89iG3of8UEiWbRK014DoHLy8PLLTJtM9IvYLPsvrf83kpV2P/K9WrdbjW4h6e5qt9XPgfNTZ8U607mt7pdmA==
dependencies:
"@aws-crypto/sha1-browser" "5.2.0"
"@aws-crypto/sha256-browser" "5.2.0"
"@aws-crypto/sha256-js" "5.2.0"
- "@aws-sdk/client-sso-oidc" "3.714.0"
- "@aws-sdk/client-sts" "3.714.0"
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/credential-provider-node" "3.714.0"
- "@aws-sdk/middleware-bucket-endpoint" "3.714.0"
- "@aws-sdk/middleware-expect-continue" "3.714.0"
- "@aws-sdk/middleware-flexible-checksums" "3.714.0"
- "@aws-sdk/middleware-host-header" "3.714.0"
- "@aws-sdk/middleware-location-constraint" "3.714.0"
- "@aws-sdk/middleware-logger" "3.714.0"
- "@aws-sdk/middleware-recursion-detection" "3.714.0"
- "@aws-sdk/middleware-sdk-s3" "3.714.0"
- "@aws-sdk/middleware-ssec" "3.714.0"
- "@aws-sdk/middleware-user-agent" "3.714.0"
- "@aws-sdk/region-config-resolver" "3.714.0"
- "@aws-sdk/signature-v4-multi-region" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@aws-sdk/util-endpoints" "3.714.0"
- "@aws-sdk/util-user-agent-browser" "3.714.0"
- "@aws-sdk/util-user-agent-node" "3.714.0"
- "@aws-sdk/xml-builder" "3.709.0"
- "@smithy/config-resolver" "^3.0.13"
- "@smithy/core" "^2.5.5"
- "@smithy/eventstream-serde-browser" "^3.0.14"
- "@smithy/eventstream-serde-config-resolver" "^3.0.11"
- "@smithy/eventstream-serde-node" "^3.0.13"
- "@smithy/fetch-http-handler" "^4.1.2"
- "@smithy/hash-blob-browser" "^3.1.10"
- "@smithy/hash-node" "^3.0.11"
- "@smithy/hash-stream-node" "^3.1.10"
- "@smithy/invalid-dependency" "^3.0.11"
- "@smithy/md5-js" "^3.0.11"
- "@smithy/middleware-content-length" "^3.0.13"
- "@smithy/middleware-endpoint" "^3.2.5"
- "@smithy/middleware-retry" "^3.0.30"
- "@smithy/middleware-serde" "^3.0.11"
- "@smithy/middleware-stack" "^3.0.11"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/node-http-handler" "^3.3.2"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- "@smithy/url-parser" "^3.0.11"
- "@smithy/util-base64" "^3.0.0"
- "@smithy/util-body-length-browser" "^3.0.0"
- "@smithy/util-body-length-node" "^3.0.0"
- "@smithy/util-defaults-mode-browser" "^3.0.30"
- "@smithy/util-defaults-mode-node" "^3.0.30"
- "@smithy/util-endpoints" "^2.1.7"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-retry" "^3.0.11"
- "@smithy/util-stream" "^3.3.2"
- "@smithy/util-utf8" "^3.0.0"
- "@smithy/util-waiter" "^3.2.0"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/credential-provider-node" "3.908.0"
+ "@aws-sdk/middleware-bucket-endpoint" "3.901.0"
+ "@aws-sdk/middleware-expect-continue" "3.901.0"
+ "@aws-sdk/middleware-flexible-checksums" "3.908.0"
+ "@aws-sdk/middleware-host-header" "3.901.0"
+ "@aws-sdk/middleware-location-constraint" "3.901.0"
+ "@aws-sdk/middleware-logger" "3.901.0"
+ "@aws-sdk/middleware-recursion-detection" "3.901.0"
+ "@aws-sdk/middleware-sdk-s3" "3.908.0"
+ "@aws-sdk/middleware-ssec" "3.901.0"
+ "@aws-sdk/middleware-user-agent" "3.908.0"
+ "@aws-sdk/region-config-resolver" "3.901.0"
+ "@aws-sdk/signature-v4-multi-region" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@aws-sdk/util-endpoints" "3.901.0"
+ "@aws-sdk/util-user-agent-browser" "3.907.0"
+ "@aws-sdk/util-user-agent-node" "3.908.0"
+ "@aws-sdk/xml-builder" "3.901.0"
+ "@smithy/config-resolver" "^4.3.0"
+ "@smithy/core" "^3.15.0"
+ "@smithy/eventstream-serde-browser" "^4.2.0"
+ "@smithy/eventstream-serde-config-resolver" "^4.3.0"
+ "@smithy/eventstream-serde-node" "^4.2.0"
+ "@smithy/fetch-http-handler" "^5.3.1"
+ "@smithy/hash-blob-browser" "^4.2.1"
+ "@smithy/hash-node" "^4.2.0"
+ "@smithy/hash-stream-node" "^4.2.0"
+ "@smithy/invalid-dependency" "^4.2.0"
+ "@smithy/md5-js" "^4.2.0"
+ "@smithy/middleware-content-length" "^4.2.0"
+ "@smithy/middleware-endpoint" "^4.3.1"
+ "@smithy/middleware-retry" "^4.4.1"
+ "@smithy/middleware-serde" "^4.2.0"
+ "@smithy/middleware-stack" "^4.2.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/node-http-handler" "^4.3.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/smithy-client" "^4.7.1"
+ "@smithy/types" "^4.6.0"
+ "@smithy/url-parser" "^4.2.0"
+ "@smithy/util-base64" "^4.3.0"
+ "@smithy/util-body-length-browser" "^4.2.0"
+ "@smithy/util-body-length-node" "^4.2.1"
+ "@smithy/util-defaults-mode-browser" "^4.3.0"
+ "@smithy/util-defaults-mode-node" "^4.2.1"
+ "@smithy/util-endpoints" "^3.2.0"
+ "@smithy/util-middleware" "^4.2.0"
+ "@smithy/util-retry" "^4.2.0"
+ "@smithy/util-stream" "^4.5.0"
+ "@smithy/util-utf8" "^4.2.0"
+ "@smithy/util-waiter" "^4.2.0"
+ "@smithy/uuid" "^1.1.0"
tslib "^2.6.2"
-"@aws-sdk/client-sso-oidc@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.714.0.tgz#ddbb500ce93003f21c26d05ac45593c961d8b8e2"
- integrity sha512-dMvpPUaL3v01psPY1ZyCzQ/w2tOgQTH1if0zBF5r2q7Vc0oOPzbBZgNAhG1bDWlRCBW0iXmoqRFoWUwQ5rtx+A==
+"@aws-sdk/client-sso@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.908.0.tgz#08db2b04caaeee7b3453945e18b8ff5811219ec5"
+ integrity sha512-PseFMWvtac+Q+zaY9DMISE+2+glNh0ROJ1yR4gMzeafNHSwkdYu4qcgxLWIOnIodGydBv/tQ6nzHPzExXnUUgw==
dependencies:
"@aws-crypto/sha256-browser" "5.2.0"
"@aws-crypto/sha256-js" "5.2.0"
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/credential-provider-node" "3.714.0"
- "@aws-sdk/middleware-host-header" "3.714.0"
- "@aws-sdk/middleware-logger" "3.714.0"
- "@aws-sdk/middleware-recursion-detection" "3.714.0"
- "@aws-sdk/middleware-user-agent" "3.714.0"
- "@aws-sdk/region-config-resolver" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@aws-sdk/util-endpoints" "3.714.0"
- "@aws-sdk/util-user-agent-browser" "3.714.0"
- "@aws-sdk/util-user-agent-node" "3.714.0"
- "@smithy/config-resolver" "^3.0.13"
- "@smithy/core" "^2.5.5"
- "@smithy/fetch-http-handler" "^4.1.2"
- "@smithy/hash-node" "^3.0.11"
- "@smithy/invalid-dependency" "^3.0.11"
- "@smithy/middleware-content-length" "^3.0.13"
- "@smithy/middleware-endpoint" "^3.2.5"
- "@smithy/middleware-retry" "^3.0.30"
- "@smithy/middleware-serde" "^3.0.11"
- "@smithy/middleware-stack" "^3.0.11"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/node-http-handler" "^3.3.2"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- "@smithy/url-parser" "^3.0.11"
- "@smithy/util-base64" "^3.0.0"
- "@smithy/util-body-length-browser" "^3.0.0"
- "@smithy/util-body-length-node" "^3.0.0"
- "@smithy/util-defaults-mode-browser" "^3.0.30"
- "@smithy/util-defaults-mode-node" "^3.0.30"
- "@smithy/util-endpoints" "^2.1.7"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-retry" "^3.0.11"
- "@smithy/util-utf8" "^3.0.0"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/middleware-host-header" "3.901.0"
+ "@aws-sdk/middleware-logger" "3.901.0"
+ "@aws-sdk/middleware-recursion-detection" "3.901.0"
+ "@aws-sdk/middleware-user-agent" "3.908.0"
+ "@aws-sdk/region-config-resolver" "3.901.0"
+ "@aws-sdk/types" "3.901.0"
+ "@aws-sdk/util-endpoints" "3.901.0"
+ "@aws-sdk/util-user-agent-browser" "3.907.0"
+ "@aws-sdk/util-user-agent-node" "3.908.0"
+ "@smithy/config-resolver" "^4.3.0"
+ "@smithy/core" "^3.15.0"
+ "@smithy/fetch-http-handler" "^5.3.1"
+ "@smithy/hash-node" "^4.2.0"
+ "@smithy/invalid-dependency" "^4.2.0"
+ "@smithy/middleware-content-length" "^4.2.0"
+ "@smithy/middleware-endpoint" "^4.3.1"
+ "@smithy/middleware-retry" "^4.4.1"
+ "@smithy/middleware-serde" "^4.2.0"
+ "@smithy/middleware-stack" "^4.2.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/node-http-handler" "^4.3.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/smithy-client" "^4.7.1"
+ "@smithy/types" "^4.6.0"
+ "@smithy/url-parser" "^4.2.0"
+ "@smithy/util-base64" "^4.3.0"
+ "@smithy/util-body-length-browser" "^4.2.0"
+ "@smithy/util-body-length-node" "^4.2.1"
+ "@smithy/util-defaults-mode-browser" "^4.3.0"
+ "@smithy/util-defaults-mode-node" "^4.2.1"
+ "@smithy/util-endpoints" "^3.2.0"
+ "@smithy/util-middleware" "^4.2.0"
+ "@smithy/util-retry" "^4.2.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@aws-sdk/client-sso@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.714.0.tgz#a98358f499fcffec7895f9fb0fb8650b3c993bc4"
- integrity sha512-pFtjY5Ga91qrryo0UfbjetdT2p9rOgtHofogAeEuGjxx7/rupBpdlW0WDOtD/7jhmbhM8WZEr6aH7GLzzkKfCA==
+"@aws-sdk/core@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.908.0.tgz#efd691b34ea3ba413f82ec27ce5fa9db4f9d386d"
+ integrity sha512-okl6FC2cQT1Oidvmnmvyp/IEvqENBagKO0ww4YV5UtBkf0VlhAymCWkZqhovtklsqgq0otag2VRPAgnrMt6nVQ==
dependencies:
- "@aws-crypto/sha256-browser" "5.2.0"
- "@aws-crypto/sha256-js" "5.2.0"
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/middleware-host-header" "3.714.0"
- "@aws-sdk/middleware-logger" "3.714.0"
- "@aws-sdk/middleware-recursion-detection" "3.714.0"
- "@aws-sdk/middleware-user-agent" "3.714.0"
- "@aws-sdk/region-config-resolver" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@aws-sdk/util-endpoints" "3.714.0"
- "@aws-sdk/util-user-agent-browser" "3.714.0"
- "@aws-sdk/util-user-agent-node" "3.714.0"
- "@smithy/config-resolver" "^3.0.13"
- "@smithy/core" "^2.5.5"
- "@smithy/fetch-http-handler" "^4.1.2"
- "@smithy/hash-node" "^3.0.11"
- "@smithy/invalid-dependency" "^3.0.11"
- "@smithy/middleware-content-length" "^3.0.13"
- "@smithy/middleware-endpoint" "^3.2.5"
- "@smithy/middleware-retry" "^3.0.30"
- "@smithy/middleware-serde" "^3.0.11"
- "@smithy/middleware-stack" "^3.0.11"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/node-http-handler" "^3.3.2"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- "@smithy/url-parser" "^3.0.11"
- "@smithy/util-base64" "^3.0.0"
- "@smithy/util-body-length-browser" "^3.0.0"
- "@smithy/util-body-length-node" "^3.0.0"
- "@smithy/util-defaults-mode-browser" "^3.0.30"
- "@smithy/util-defaults-mode-node" "^3.0.30"
- "@smithy/util-endpoints" "^2.1.7"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-retry" "^3.0.11"
- "@smithy/util-utf8" "^3.0.0"
+ "@aws-sdk/types" "3.901.0"
+ "@aws-sdk/xml-builder" "3.901.0"
+ "@smithy/core" "^3.15.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/signature-v4" "^5.3.0"
+ "@smithy/smithy-client" "^4.7.1"
+ "@smithy/types" "^4.6.0"
+ "@smithy/util-base64" "^4.3.0"
+ "@smithy/util-middleware" "^4.2.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@aws-sdk/client-sts@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.714.0.tgz#3222b498ae1dd83490379558eb1af27d5d89601c"
- integrity sha512-ThcXgolapPsOzeavJF4Am312umFyoFBBeiTYD8PQGIiYkbJi4hXcjoWacmtkq6moMmMZSP9iK/ellls7vwY2JQ==
+"@aws-sdk/credential-provider-env@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.908.0.tgz#9767fcafbe643f0f5b5d4b6283c9dddb5fdee708"
+ integrity sha512-FK2YuxoI5CxUflPOIMbVAwDbi6Xvu+2sXopXLmrHc2PfI39M3vmjEoQwYCP8WuQSRb+TbAP3xAkxHjFSBFR35w==
dependencies:
- "@aws-crypto/sha256-browser" "5.2.0"
- "@aws-crypto/sha256-js" "5.2.0"
- "@aws-sdk/client-sso-oidc" "3.714.0"
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/credential-provider-node" "3.714.0"
- "@aws-sdk/middleware-host-header" "3.714.0"
- "@aws-sdk/middleware-logger" "3.714.0"
- "@aws-sdk/middleware-recursion-detection" "3.714.0"
- "@aws-sdk/middleware-user-agent" "3.714.0"
- "@aws-sdk/region-config-resolver" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@aws-sdk/util-endpoints" "3.714.0"
- "@aws-sdk/util-user-agent-browser" "3.714.0"
- "@aws-sdk/util-user-agent-node" "3.714.0"
- "@smithy/config-resolver" "^3.0.13"
- "@smithy/core" "^2.5.5"
- "@smithy/fetch-http-handler" "^4.1.2"
- "@smithy/hash-node" "^3.0.11"
- "@smithy/invalid-dependency" "^3.0.11"
- "@smithy/middleware-content-length" "^3.0.13"
- "@smithy/middleware-endpoint" "^3.2.5"
- "@smithy/middleware-retry" "^3.0.30"
- "@smithy/middleware-serde" "^3.0.11"
- "@smithy/middleware-stack" "^3.0.11"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/node-http-handler" "^3.3.2"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- "@smithy/url-parser" "^3.0.11"
- "@smithy/util-base64" "^3.0.0"
- "@smithy/util-body-length-browser" "^3.0.0"
- "@smithy/util-body-length-node" "^3.0.0"
- "@smithy/util-defaults-mode-browser" "^3.0.30"
- "@smithy/util-defaults-mode-node" "^3.0.30"
- "@smithy/util-endpoints" "^2.1.7"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-retry" "^3.0.11"
- "@smithy/util-utf8" "^3.0.0"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/core@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.714.0.tgz#f53dbf5aa579f66bf3aa3e3e312b624e70ae871d"
- integrity sha512-TlZ50d8MEPVp9O03SvisOmcmxjxhMDKHJJcrBgYjgDej6QmNfiFwtCRkReXDdkEeXP29ehMs7uPXtmVvPqziYw==
+"@aws-sdk/credential-provider-http@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.908.0.tgz#9500e348eb64cecfcaa6c10ce68785aecf3ee612"
+ integrity sha512-eLbz0geVW9EykujQNnYfR35Of8MreI6pau5K6XDFDUSWO9GF8wqH7CQwbXpXHBlCTHtq4QSLxzorD8U5CROhUw==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/core" "^2.5.5"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/signature-v4" "^4.2.4"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- "@smithy/util-middleware" "^3.0.11"
- fast-xml-parser "4.4.1"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/fetch-http-handler" "^5.3.1"
+ "@smithy/node-http-handler" "^4.3.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/smithy-client" "^4.7.1"
+ "@smithy/types" "^4.6.0"
+ "@smithy/util-stream" "^4.5.0"
tslib "^2.6.2"
-"@aws-sdk/credential-provider-env@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.714.0.tgz#87b9e71d6477fbed1d4c8c3fc561c11994ba573c"
- integrity sha512-0S4nKE1a+EHXAInXUeuWkyzVnXzmwIbwLStVidAIoyl6sJF8xGdw+r3AaoTr7p0YXzdoDUsn3wBTCA6ZwgXVbA==
+"@aws-sdk/credential-provider-ini@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.908.0.tgz#6f2567326245ea57e37cfb0bf30b7526c13a3965"
+ integrity sha512-7Cgnv5wabgFtsgr+Uc/76EfPNGyxmbG8aICn3g3D3iJlcO4uuOZI8a77i0afoDdchZrTC6TG6UusS/NAW6zEoQ==
dependencies:
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/credential-provider-env" "3.908.0"
+ "@aws-sdk/credential-provider-http" "3.908.0"
+ "@aws-sdk/credential-provider-process" "3.908.0"
+ "@aws-sdk/credential-provider-sso" "3.908.0"
+ "@aws-sdk/credential-provider-web-identity" "3.908.0"
+ "@aws-sdk/nested-clients" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/credential-provider-imds" "^4.2.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/shared-ini-file-loader" "^4.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/credential-provider-http@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.714.0.tgz#06dc80fc910ef85aadb920d9be9b6aba971ea31a"
- integrity sha512-1AXEfUSQUQg+x/DpH1XJhjf2yEgTHHatM3cvYu7FZMhRXF28Q5OJDbEFPfdqrK+vmCiYRWhszDb+zuUIvz46bw==
+"@aws-sdk/credential-provider-node@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.908.0.tgz#942c686e105182b5c59fad92f65b1fdf246f347a"
+ integrity sha512-8OKbykpGw5bdfF/pLTf8YfUi1Kl8o1CTjBqWQTsLOkE3Ho3hsp1eQx8Cz4ttrpv0919kb+lox62DgmAOEmTr1w==
dependencies:
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/fetch-http-handler" "^4.1.2"
- "@smithy/node-http-handler" "^3.3.2"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- "@smithy/util-stream" "^3.3.2"
+ "@aws-sdk/credential-provider-env" "3.908.0"
+ "@aws-sdk/credential-provider-http" "3.908.0"
+ "@aws-sdk/credential-provider-ini" "3.908.0"
+ "@aws-sdk/credential-provider-process" "3.908.0"
+ "@aws-sdk/credential-provider-sso" "3.908.0"
+ "@aws-sdk/credential-provider-web-identity" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/credential-provider-imds" "^4.2.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/shared-ini-file-loader" "^4.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/credential-provider-ini@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.714.0.tgz#7fbe0a9c2ef00f1eee59f1bc24194f66c77fdaf2"
- integrity sha512-w5wOcgBngfcvVev5wnYWXoc/W2ewVmGJkfRdGquhFt8pkUxktyd8eXehqkP7u31SONVlgy96EFTdSCzWpTrqOw==
+"@aws-sdk/credential-provider-process@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.908.0.tgz#b9bf7b2780a2c378d2983c3a53c2bf68de4427e5"
+ integrity sha512-sWnbkGjDPBi6sODUzrAh5BCDpnPw0wpK8UC/hWI13Q8KGfyatAmCBfr+9OeO3+xBHa8N5AskMncr7C4qS846yQ==
dependencies:
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/credential-provider-env" "3.714.0"
- "@aws-sdk/credential-provider-http" "3.714.0"
- "@aws-sdk/credential-provider-process" "3.714.0"
- "@aws-sdk/credential-provider-sso" "3.714.0"
- "@aws-sdk/credential-provider-web-identity" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/credential-provider-imds" "^3.2.8"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/shared-ini-file-loader" "^3.1.12"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/shared-ini-file-loader" "^4.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/credential-provider-node@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.714.0.tgz#48c90bf53e55b31b23bf464b420816ec9259f0c1"
- integrity sha512-ebho1HYNKzaw0ZfbI9kEicSW8J7tsOoV6EJajsjfFnuP+GY9J5Oi4759GEq1Qqj7GxIhrySOZFzif/hxAXPWtQ==
+"@aws-sdk/credential-provider-sso@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.908.0.tgz#2c21de6f6974aff4eee7464056547ae0cf8168c5"
+ integrity sha512-WV/aOzuS6ZZhrkPty6TJ3ZG24iS8NXP0m3GuTVuZ5tKi9Guss31/PJ1CrKPRCYGm15CsIjf+mrUxVnNYv9ap5g==
dependencies:
- "@aws-sdk/credential-provider-env" "3.714.0"
- "@aws-sdk/credential-provider-http" "3.714.0"
- "@aws-sdk/credential-provider-ini" "3.714.0"
- "@aws-sdk/credential-provider-process" "3.714.0"
- "@aws-sdk/credential-provider-sso" "3.714.0"
- "@aws-sdk/credential-provider-web-identity" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/credential-provider-imds" "^3.2.8"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/shared-ini-file-loader" "^3.1.12"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/client-sso" "3.908.0"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/token-providers" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/shared-ini-file-loader" "^4.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/credential-provider-process@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.714.0.tgz#1fd25ddda0bac94fad7d2cbeeeb84d5746af3f2a"
- integrity sha512-mHM+zYJDUiXggBx4YvQgMOhbkV07KUib8/jWPnAZbUJcRncN/yevAp/WNocjUN4VaBWkooJUgoTET/okRK+TCQ==
+"@aws-sdk/credential-provider-web-identity@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.908.0.tgz#5ad86a4cf5fd650b60eed83d0575de4666c554b7"
+ integrity sha512-9xWrFn6nWlF5KlV4XYW+7E6F33S3wUUEGRZ/+pgDhkIZd527ycT2nPG2dZ3fWUZMlRmzijP20QIJDqEbbGWe1Q==
dependencies:
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/shared-ini-file-loader" "^3.1.12"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/nested-clients" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/shared-ini-file-loader" "^4.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/credential-provider-sso@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.714.0.tgz#803a21cbd558a2b47ab102c68ec9ed92e999523f"
- integrity sha512-LQyHUQd+/A0PO96m6/A3KeekRplRpG9AmwLn8VPknlmACAhhbWHehzerCTd42V8dClf5pigr25/aVqh/2p/sRw==
+"@aws-sdk/middleware-bucket-endpoint@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.901.0.tgz#5b7f740cff9f91d21084b666be225876d72e634b"
+ integrity sha512-mPF3N6eZlVs9G8aBSzvtoxR1RZqMo1aIwR+X8BAZSkhfj55fVF2no4IfPXfdFO3I66N+zEQ8nKoB0uTATWrogQ==
dependencies:
- "@aws-sdk/client-sso" "3.714.0"
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/token-providers" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/shared-ini-file-loader" "^3.1.12"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@aws-sdk/util-arn-parser" "3.893.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/types" "^4.6.0"
+ "@smithy/util-config-provider" "^4.2.0"
tslib "^2.6.2"
-"@aws-sdk/credential-provider-web-identity@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.714.0.tgz#975b11d07c0f87bc4f6470cb45aef5aee590b78c"
- integrity sha512-piKfEJvLrGZ0bH4NPO19d1dtfCZi2p6YJUK/9vRCD1rvJidOuHNeUwIcxTnkIMovQHX12rZVvU9ub0C3CwegUQ==
+"@aws-sdk/middleware-expect-continue@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.901.0.tgz#bd6c1fde979808418ce013c6f5f379e67ef2f4c4"
+ integrity sha512-bwq9nj6MH38hlJwOY9QXIDwa6lI48UsaZpaXbdD71BljEIRlxDzfB4JaYb+ZNNK7RIAdzsP/K05mJty6KJAQHw==
dependencies:
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/middleware-bucket-endpoint@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.714.0.tgz#c184781eb3e00648e9ca0f6db4522be8e8fbde4e"
- integrity sha512-I/xSOskiseJJ8i183Z522BgqbgYzLKP7jGcg2Qeib/IWoG2IP+9DH8pwqagKaPAycyswtnoKBJiiFXY43n0CkA==
- dependencies:
- "@aws-sdk/types" "3.714.0"
- "@aws-sdk/util-arn-parser" "3.693.0"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
- "@smithy/util-config-provider" "^3.0.0"
- tslib "^2.6.2"
-
-"@aws-sdk/middleware-expect-continue@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.714.0.tgz#8ea3941adf191c94246a9bc56c443d350fd32589"
- integrity sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w==
- dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
- tslib "^2.6.2"
-
-"@aws-sdk/middleware-flexible-checksums@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.714.0.tgz#a42c12bfc3d619f40bc1c05d00ce535b4c3264fa"
- integrity sha512-y5I2mRmTDRQ/SYa+F30RRE4xchTHmDPDiYKFRRoENxFhVcrv/FbjA3hfhB8Z95JfSalzJVr+XQjd+N+t4M2gMw==
+"@aws-sdk/middleware-flexible-checksums@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.908.0.tgz#ab406ce131a4916d2724c5a297464771bd0df37f"
+ integrity sha512-hYGhNBvdfnxhhywYRkesdxIZD8rvhsp2CBci5kCqrR2o5VvEkn5+waUQtkREtkciEpC4ent4fadg7N9XfTKvgQ==
dependencies:
"@aws-crypto/crc32" "5.2.0"
"@aws-crypto/crc32c" "5.2.0"
"@aws-crypto/util" "5.2.0"
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/is-array-buffer" "^3.0.0"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-stream" "^3.3.2"
- "@smithy/util-utf8" "^3.0.0"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/is-array-buffer" "^4.2.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/types" "^4.6.0"
+ "@smithy/util-middleware" "^4.2.0"
+ "@smithy/util-stream" "^4.5.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@aws-sdk/middleware-host-header@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.714.0.tgz#c14707c2501e70a4343644f876bea5b575dc74e2"
- integrity sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==
+"@aws-sdk/middleware-host-header@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.901.0.tgz#e6b3a6706601d93949ca25167ecec50c40e3d9de"
+ integrity sha512-yWX7GvRmqBtbNnUW7qbre3GvZmyYwU0WHefpZzDTYDoNgatuYq6LgUIQ+z5C04/kCRoFkAFrHag8a3BXqFzq5A==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/middleware-location-constraint@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.714.0.tgz#67bcc4552287481ac631be1c7a3326601be70f9b"
- integrity sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw==
+"@aws-sdk/middleware-location-constraint@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.901.0.tgz#0a74fdd450cdec336f3ccdcb7b2fdbf4ce8b9e0b"
+ integrity sha512-MuCS5R2ngNoYifkVt05CTULvYVWX0dvRT0/Md4jE3a0u0yMygYy31C1zorwfE/SUgAQXyLmUx8ATmPp9PppImQ==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/middleware-logger@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz#c059e1aabf28fdfc647db6a3dba625a9813787cd"
- integrity sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==
+"@aws-sdk/middleware-logger@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.901.0.tgz#30562184bd0b6a90d30f2d6d58ef5054300f2652"
+ integrity sha512-UoHebjE7el/tfRo8/CQTj91oNUm+5Heus5/a4ECdmWaSCHCS/hXTsU3PTTHAY67oAQR8wBLFPfp3mMvXjB+L2A==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/middleware-recursion-detection@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.714.0.tgz#c2d20d335c035196ac1cd5cdf3f58c5f31b01bdb"
- integrity sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==
+"@aws-sdk/middleware-recursion-detection@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.901.0.tgz#8492bd83aeee52f4e1b4194a81d044f46acf8c5b"
+ integrity sha512-Wd2t8qa/4OL0v/oDpCHHYkgsXJr8/ttCxrvCKAt0H1zZe2LlRhY9gpDVKqdertfHrHDj786fOvEQA28G1L75Dg==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@aws/lambda-invoke-store" "^0.0.1"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/middleware-sdk-s3@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.714.0.tgz#d07f48aef867bf9f937031406ba70ec98d021ee5"
- integrity sha512-YYhX+JefwwEsUxYs0YXn5Mfb97Lo3hwnk3qRIlUkcotCsHYwgCX4jVWjeh8HK+RFFx3Krbh/8/YmzTkI/Z4Z9Q==
+"@aws-sdk/middleware-sdk-s3@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.908.0.tgz#e65cf8668270162e469c74da726e023fbe5bd135"
+ integrity sha512-23MbAOHsGaD0kTVMVLumaIM1f9vtDImIn2lSvPullbjFHKS4XxfrKuPumtKDzl8gzcux+98XnmfDRKH0fzkOUA==
dependencies:
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@aws-sdk/util-arn-parser" "3.693.0"
- "@smithy/core" "^2.5.5"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/signature-v4" "^4.2.4"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- "@smithy/util-config-provider" "^3.0.0"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-stream" "^3.3.2"
- "@smithy/util-utf8" "^3.0.0"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@aws-sdk/util-arn-parser" "3.893.0"
+ "@smithy/core" "^3.15.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/signature-v4" "^5.3.0"
+ "@smithy/smithy-client" "^4.7.1"
+ "@smithy/types" "^4.6.0"
+ "@smithy/util-config-provider" "^4.2.0"
+ "@smithy/util-middleware" "^4.2.0"
+ "@smithy/util-stream" "^4.5.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@aws-sdk/middleware-ssec@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.714.0.tgz#a5112a5537da9330ab476c8f9c549e3e9ffba510"
- integrity sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ==
+"@aws-sdk/middleware-ssec@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.901.0.tgz#9a08f8a90a12c5d3eccabd884d8dfdd2f76473a4"
+ integrity sha512-YiLLJmA3RvjL38mFLuu8fhTTGWtp2qT24VqpucgfoyziYcTgIQkJJmKi90Xp6R6/3VcArqilyRgM1+x8i/em+Q==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/middleware-user-agent@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.714.0.tgz#15cebf91f8bf51f494174911fd8808b32bf3a905"
- integrity sha512-OgLjJf7WxUqA2OgiqGCfIc68gsbXlIG8LjObBiF0qlMStAd0L23AGuK5VmYinJlsle9qUpwQvWgKFKaDgdQXgA==
+"@aws-sdk/middleware-user-agent@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.908.0.tgz#aa4827cf1c5290b5d9d44ac39f467735fd199b04"
+ integrity sha512-R0ePEOku72EvyJWy/D0Z5f/Ifpfxa0U9gySO3stpNhOox87XhsILpcIsCHPy0OHz1a7cMoZsF6rMKSzDeCnogQ==
dependencies:
- "@aws-sdk/core" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@aws-sdk/util-endpoints" "3.714.0"
- "@smithy/core" "^2.5.5"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@aws-sdk/util-endpoints" "3.901.0"
+ "@smithy/core" "^3.15.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/region-config-resolver@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.714.0.tgz#26449aeb67daa00560c69bb80cb6cd187ee18dc9"
- integrity sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==
+"@aws-sdk/nested-clients@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.908.0.tgz#133f316e6655b509f1b872b0ef352923ac8b86df"
+ integrity sha512-ZxDYrfxOKXNFHLyvJtT96TJ0p4brZOhwRE4csRXrezEVUN+pNgxuem95YvMALPVhlVqON2CTzr8BX+CcBKvX9Q==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/types" "^3.7.2"
- "@smithy/util-config-provider" "^3.0.0"
- "@smithy/util-middleware" "^3.0.11"
+ "@aws-crypto/sha256-browser" "5.2.0"
+ "@aws-crypto/sha256-js" "5.2.0"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/middleware-host-header" "3.901.0"
+ "@aws-sdk/middleware-logger" "3.901.0"
+ "@aws-sdk/middleware-recursion-detection" "3.901.0"
+ "@aws-sdk/middleware-user-agent" "3.908.0"
+ "@aws-sdk/region-config-resolver" "3.901.0"
+ "@aws-sdk/types" "3.901.0"
+ "@aws-sdk/util-endpoints" "3.901.0"
+ "@aws-sdk/util-user-agent-browser" "3.907.0"
+ "@aws-sdk/util-user-agent-node" "3.908.0"
+ "@smithy/config-resolver" "^4.3.0"
+ "@smithy/core" "^3.15.0"
+ "@smithy/fetch-http-handler" "^5.3.1"
+ "@smithy/hash-node" "^4.2.0"
+ "@smithy/invalid-dependency" "^4.2.0"
+ "@smithy/middleware-content-length" "^4.2.0"
+ "@smithy/middleware-endpoint" "^4.3.1"
+ "@smithy/middleware-retry" "^4.4.1"
+ "@smithy/middleware-serde" "^4.2.0"
+ "@smithy/middleware-stack" "^4.2.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/node-http-handler" "^4.3.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/smithy-client" "^4.7.1"
+ "@smithy/types" "^4.6.0"
+ "@smithy/url-parser" "^4.2.0"
+ "@smithy/util-base64" "^4.3.0"
+ "@smithy/util-body-length-browser" "^4.2.0"
+ "@smithy/util-body-length-node" "^4.2.1"
+ "@smithy/util-defaults-mode-browser" "^4.3.0"
+ "@smithy/util-defaults-mode-node" "^4.2.1"
+ "@smithy/util-endpoints" "^3.2.0"
+ "@smithy/util-middleware" "^4.2.0"
+ "@smithy/util-retry" "^4.2.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@aws-sdk/signature-v4-multi-region@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.714.0.tgz#91db060340d0006083cc750a4291a3144b4c4392"
- integrity sha512-xIQyx0ILRtJZnSUPpMsWkwASuFDYh9GPnr7p+pmfsV5KtRQluHuoH1wPkPTeNuTnAl7RDHUOmcOgTPUCDxiKxg==
+"@aws-sdk/region-config-resolver@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.901.0.tgz#6673eeda4ecc0747f93a084e876cab71431a97ca"
+ integrity sha512-7F0N888qVLHo4CSQOsnkZ4QAp8uHLKJ4v3u09Ly5k4AEStrSlFpckTPyUx6elwGL+fxGjNE2aakK8vEgzzCV0A==
dependencies:
- "@aws-sdk/middleware-sdk-s3" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/signature-v4" "^4.2.4"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/types" "^4.6.0"
+ "@smithy/util-config-provider" "^4.2.0"
+ "@smithy/util-middleware" "^4.2.0"
tslib "^2.6.2"
-"@aws-sdk/token-providers@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.714.0.tgz#c308dff77d18978f630188000aebb87be38f5526"
- integrity sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==
+"@aws-sdk/signature-v4-multi-region@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.908.0.tgz#05690b946b11b9a2663012aac503ed3e6f3109bc"
+ integrity sha512-8OodflIzZM2GVuCGiGK6hqwsbfHRDl4kQcEYzHRg9p91H4h5Y876DPvLRkwM7pSC7LKUL0XkKWWVVjwJbp6/Ig==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/shared-ini-file-loader" "^3.1.12"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/middleware-sdk-s3" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/protocol-http" "^5.3.0"
+ "@smithy/signature-v4" "^5.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/types@3.714.0", "@aws-sdk/types@^3.222.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.714.0.tgz#de6afee1436d2d95364efa0663887f3bf0b1303a"
- integrity sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==
+"@aws-sdk/token-providers@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.908.0.tgz#ed3b064ad07db451a7abc0a8d73e1443aa5f6a19"
+ integrity sha512-4SosHWRQ8hj1X2yDenCYHParcCjHcd7S+Mdb/lelwF0JBFCNC+dNCI9ws3cP/dFdZO/AIhJQGUBzEQtieloixw==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/core" "3.908.0"
+ "@aws-sdk/nested-clients" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/property-provider" "^4.2.0"
+ "@smithy/shared-ini-file-loader" "^4.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/util-arn-parser@3.693.0":
- version "3.693.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz#8dae27eb822ab4f88be28bb3c0fc11f1f13d3948"
- integrity sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==
+"@aws-sdk/types@3.901.0", "@aws-sdk/types@^3.222.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.901.0.tgz#b5a2e26c7b3fb3bbfe4c7fc24873646992a1c56c"
+ integrity sha512-FfEM25hLEs4LoXsLXQ/q6X6L4JmKkKkbVFpKD4mwfVHtRVQG6QxJiCPcrkcPISquiy6esbwK2eh64TWbiD60cg==
+ dependencies:
+ "@smithy/types" "^4.6.0"
+ tslib "^2.6.2"
+
+"@aws-sdk/util-arn-parser@3.893.0":
+ version "3.893.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz#fcc9b792744b9da597662891c2422dda83881d8d"
+ integrity sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==
dependencies:
tslib "^2.6.2"
-"@aws-sdk/util-endpoints@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.714.0.tgz#f059c27bedf329584358b1f837cd9a5c220f34e2"
- integrity sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==
+"@aws-sdk/util-endpoints@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.901.0.tgz#be6296739d0f446b89a3f497c3a85afeb6cddd92"
+ integrity sha512-5nZP3hGA8FHEtKvEQf4Aww5QZOkjLW1Z+NixSd+0XKfHvA39Ah5sZboScjLx0C9kti/K3OGW1RCx5K9Zc3bZqg==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/types" "^3.7.2"
- "@smithy/util-endpoints" "^2.1.7"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/types" "^4.6.0"
+ "@smithy/url-parser" "^4.2.0"
+ "@smithy/util-endpoints" "^3.2.0"
tslib "^2.6.2"
"@aws-sdk/util-locate-window@^3.0.0":
- version "3.693.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz#1160f6d055cf074ca198eb8ecf89b6311537ad6c"
- integrity sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==
+ version "3.893.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz#5df15f24e1edbe12ff1fe8906f823b51cd53bae8"
+ integrity sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==
dependencies:
tslib "^2.6.2"
-"@aws-sdk/util-user-agent-browser@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.714.0.tgz#7768660fa92a70b78406810a30174fb20508eb61"
- integrity sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==
+"@aws-sdk/util-user-agent-browser@3.907.0":
+ version "3.907.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.907.0.tgz#96b621c66530c061fbc51f5bf4931e64429927d4"
+ integrity sha512-Hus/2YCQmtCEfr4Ls88d07Q99Ex59uvtktiPTV963Q7w7LHuIT/JBjrbwNxtSm2KlJR9PHNdqxwN+fSuNsMGMQ==
dependencies:
- "@aws-sdk/types" "3.714.0"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/types" "^4.6.0"
bowser "^2.11.0"
tslib "^2.6.2"
-"@aws-sdk/util-user-agent-node@3.714.0":
- version "3.714.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.714.0.tgz#b9c86713fb0c9770cec9935eac93a74cf70844fd"
- integrity sha512-x8JoZb7yBEbNUmHUNoRAP4L++6A5uZCVf2yFLw8CZKpH4q+Cf1a68ou48OfnND3H0rbBnLXc/3uOlseRvd57/g==
+"@aws-sdk/util-user-agent-node@3.908.0":
+ version "3.908.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.908.0.tgz#37d0397a3dac1705693b4cad5fe79da5bd04e46d"
+ integrity sha512-l6AEaKUAYarcEy8T8NZ+dNZ00VGLs3fW2Cqu1AuPENaSad0/ahEU+VU7MpXS8FhMRGPgplxKVgCTLyTY0Lbssw==
dependencies:
- "@aws-sdk/middleware-user-agent" "3.714.0"
- "@aws-sdk/types" "3.714.0"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/types" "^3.7.2"
+ "@aws-sdk/middleware-user-agent" "3.908.0"
+ "@aws-sdk/types" "3.901.0"
+ "@smithy/node-config-provider" "^4.3.0"
+ "@smithy/types" "^4.6.0"
tslib "^2.6.2"
-"@aws-sdk/xml-builder@3.709.0":
- version "3.709.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.709.0.tgz#5841faa1e78afcea064557a1a56709978b325758"
- integrity sha512-2GPCwlNxeHspoK/Mc8nbk9cBOkSpp3j2SJUQmFnyQK6V/pR6II2oPRyZkMomug1Rc10hqlBHByMecq4zhV2uUw==
+"@aws-sdk/xml-builder@3.901.0":
+ version "3.901.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.901.0.tgz#3cd2e3929cefafd771c8bd790ec6965faa1be49d"
+ integrity sha512-pxFCkuAP7Q94wMTNPAwi6hEtNrp/BdFf+HOrIEeFQsk4EoOmpKY3I6S+u6A9Wg295J80Kh74LqDWM22ux3z6Aw==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.6.0"
+ fast-xml-parser "5.2.5"
tslib "^2.6.2"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2":
- version "7.24.2"
- resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz"
- integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==
- dependencies:
- "@babel/highlight" "^7.24.2"
- picocolors "^1.0.0"
+"@aws/lambda-invoke-store@^0.0.1":
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz#92d792a7dda250dfcb902e13228f37a81be57c8f"
+ integrity sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==
-"@babel/code-frame@^7.27.1":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
@@ -634,91 +596,76 @@
js-tokens "^4.0.0"
picocolors "^1.1.1"
-"@babel/compat-data@^7.23.5":
- version "7.24.4"
- resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz"
- integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==
-
"@babel/compat-data@^7.27.2":
- version "7.27.2"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9"
- integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04"
+ integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==
-"@babel/core@^7.21.3", "@babel/core@^7.23.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz"
- integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==
+"@babel/core@^7.21.3", "@babel/core@^7.28.0":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496"
+ integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==
dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.24.2"
- "@babel/generator" "^7.24.5"
- "@babel/helper-compilation-targets" "^7.23.6"
- "@babel/helper-module-transforms" "^7.24.5"
- "@babel/helpers" "^7.24.5"
- "@babel/parser" "^7.24.5"
- "@babel/template" "^7.24.0"
- "@babel/traverse" "^7.24.5"
- "@babel/types" "^7.24.5"
- convert-source-map "^2.0.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.3"
- semver "^6.3.1"
-
-"@babel/core@^7.26.10":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6"
- integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.27.1"
- "@babel/generator" "^7.27.1"
- "@babel/helper-compilation-targets" "^7.27.1"
- "@babel/helper-module-transforms" "^7.27.1"
- "@babel/helpers" "^7.27.1"
- "@babel/parser" "^7.27.1"
- "@babel/template" "^7.27.1"
- "@babel/traverse" "^7.27.1"
- "@babel/types" "^7.27.1"
+ "@babel/generator" "^7.28.3"
+ "@babel/helper-compilation-targets" "^7.27.2"
+ "@babel/helper-module-transforms" "^7.28.3"
+ "@babel/helpers" "^7.28.4"
+ "@babel/parser" "^7.28.4"
+ "@babel/template" "^7.27.2"
+ "@babel/traverse" "^7.28.4"
+ "@babel/types" "^7.28.4"
+ "@jridgewell/remapping" "^2.3.5"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz"
- integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==
+"@babel/core@^7.27.7":
+ version "7.28.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e"
+ integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==
dependencies:
- "@babel/types" "^7.24.5"
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.25"
- jsesc "^2.5.1"
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.5"
+ "@babel/helper-compilation-targets" "^7.27.2"
+ "@babel/helper-module-transforms" "^7.28.3"
+ "@babel/helpers" "^7.28.4"
+ "@babel/parser" "^7.28.5"
+ "@babel/template" "^7.27.2"
+ "@babel/traverse" "^7.28.5"
+ "@babel/types" "^7.28.5"
+ "@jridgewell/remapping" "^2.3.5"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
-"@babel/generator@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230"
- integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==
+"@babel/generator@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e"
+ integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==
dependencies:
- "@babel/parser" "^7.27.1"
- "@babel/types" "^7.27.1"
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.25"
+ "@babel/parser" "^7.28.3"
+ "@babel/types" "^7.28.2"
+ "@jridgewell/gen-mapping" "^0.3.12"
+ "@jridgewell/trace-mapping" "^0.3.28"
jsesc "^3.0.2"
-"@babel/helper-compilation-targets@^7.23.6":
- version "7.23.6"
- resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz"
- integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
+"@babel/generator@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298"
+ integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==
dependencies:
- "@babel/compat-data" "^7.23.5"
- "@babel/helper-validator-option" "^7.23.5"
- browserslist "^4.22.2"
- lru-cache "^5.1.1"
- semver "^6.3.1"
+ "@babel/parser" "^7.28.5"
+ "@babel/types" "^7.28.5"
+ "@jridgewell/gen-mapping" "^0.3.12"
+ "@jridgewell/trace-mapping" "^0.3.28"
+ jsesc "^3.0.2"
-"@babel/helper-compilation-targets@^7.27.1":
+"@babel/helper-compilation-targets@^7.27.2":
version "7.27.2"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d"
integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
@@ -729,32 +676,10 @@
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-environment-visitor@^7.22.20":
- version "7.22.20"
- resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz"
- integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
-
-"@babel/helper-function-name@^7.23.0":
- version "7.23.0"
- resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz"
- integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
- dependencies:
- "@babel/template" "^7.22.15"
- "@babel/types" "^7.23.0"
-
-"@babel/helper-hoist-variables@^7.22.5":
- version "7.22.5"
- resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz"
- integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
- dependencies:
- "@babel/types" "^7.22.5"
-
-"@babel/helper-module-imports@^7.24.3":
- version "7.24.3"
- resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz"
- integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==
- dependencies:
- "@babel/types" "^7.24.0"
+"@babel/helper-globals@^7.28.0":
+ version "7.28.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674"
+ integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
"@babel/helper-module-imports@^7.27.1":
version "7.27.1"
@@ -764,169 +689,89 @@
"@babel/traverse" "^7.27.1"
"@babel/types" "^7.27.1"
-"@babel/helper-module-transforms@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz"
- integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==
- dependencies:
- "@babel/helper-environment-visitor" "^7.22.20"
- "@babel/helper-module-imports" "^7.24.3"
- "@babel/helper-simple-access" "^7.24.5"
- "@babel/helper-split-export-declaration" "^7.24.5"
- "@babel/helper-validator-identifier" "^7.24.5"
-
-"@babel/helper-module-transforms@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f"
- integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==
+"@babel/helper-module-transforms@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6"
+ integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==
dependencies:
"@babel/helper-module-imports" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
- "@babel/traverse" "^7.27.1"
-
-"@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz"
- integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==
+ "@babel/traverse" "^7.28.3"
"@babel/helper-plugin-utils@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
-"@babel/helper-simple-access@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz"
- integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==
- dependencies:
- "@babel/types" "^7.24.5"
-
-"@babel/helper-split-export-declaration@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz"
- integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==
- dependencies:
- "@babel/types" "^7.24.5"
-
-"@babel/helper-string-parser@^7.24.1":
- version "7.24.1"
- resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz"
- integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
-
"@babel/helper-string-parser@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
-"@babel/helper-validator-identifier@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz"
- integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==
-
"@babel/helper-validator-identifier@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
-"@babel/helper-validator-option@^7.23.5":
- version "7.23.5"
- resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz"
- integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
+"@babel/helper-validator-identifier@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4"
+ integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==
"@babel/helper-validator-option@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
-"@babel/helpers@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz"
- integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==
+"@babel/helpers@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827"
+ integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==
dependencies:
- "@babel/template" "^7.24.0"
- "@babel/traverse" "^7.24.5"
- "@babel/types" "^7.24.5"
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.4"
-"@babel/helpers@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4"
- integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==
+"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8"
+ integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==
dependencies:
- "@babel/template" "^7.27.1"
- "@babel/types" "^7.27.1"
+ "@babel/types" "^7.28.4"
-"@babel/highlight@^7.24.2":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz"
- integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==
+"@babel/parser@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08"
+ integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==
dependencies:
- "@babel/helper-validator-identifier" "^7.24.5"
- chalk "^2.4.2"
- js-tokens "^4.0.0"
- picocolors "^1.0.0"
+ "@babel/types" "^7.28.5"
-"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz"
- integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==
-
-"@babel/parser@^7.27.1", "@babel/parser@^7.27.2":
- version "7.27.2"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127"
- integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==
- dependencies:
- "@babel/types" "^7.27.1"
-
-"@babel/plugin-transform-arrow-functions@^7.25.9":
+"@babel/plugin-transform-arrow-functions@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a"
integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-react-jsx-self@^7.23.3":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz"
- integrity sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==
+"@babel/plugin-transform-react-jsx-self@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz#af678d8506acf52c577cac73ff7fe6615c85fc92"
+ integrity sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==
dependencies:
- "@babel/helper-plugin-utils" "^7.24.5"
+ "@babel/helper-plugin-utils" "^7.27.1"
-"@babel/plugin-transform-react-jsx-source@^7.23.3":
- version "7.24.1"
- resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz"
- integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==
+"@babel/plugin-transform-react-jsx-source@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz#dcfe2c24094bb757bf73960374e7c55e434f19f0"
+ integrity sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==
dependencies:
- "@babel/helper-plugin-utils" "^7.24.0"
+ "@babel/helper-plugin-utils" "^7.27.1"
-"@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1"
- integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==
- dependencies:
- regenerator-runtime "^0.14.0"
-
-"@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz"
- integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==
- dependencies:
- regenerator-runtime "^0.14.0"
-
-"@babel/runtime@^7.9.2":
+"@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9", "@babel/runtime@^7.9.2":
version "7.28.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326"
integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==
-"@babel/template@^7.22.15", "@babel/template@^7.24.0":
- version "7.24.0"
- resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz"
- integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
- dependencies:
- "@babel/code-frame" "^7.23.5"
- "@babel/parser" "^7.24.0"
- "@babel/types" "^7.24.0"
-
-"@babel/template@^7.27.1":
+"@babel/template@^7.27.2":
version "7.27.2"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
@@ -935,208 +780,218 @@
"@babel/parser" "^7.27.2"
"@babel/types" "^7.27.1"
-"@babel/traverse@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz"
- integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==
- dependencies:
- "@babel/code-frame" "^7.24.2"
- "@babel/generator" "^7.24.5"
- "@babel/helper-environment-visitor" "^7.22.20"
- "@babel/helper-function-name" "^7.23.0"
- "@babel/helper-hoist-variables" "^7.22.5"
- "@babel/helper-split-export-declaration" "^7.24.5"
- "@babel/parser" "^7.24.5"
- "@babel/types" "^7.24.5"
- debug "^4.3.1"
- globals "^11.1.0"
-
-"@babel/traverse@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291"
- integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==
+"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b"
+ integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==
dependencies:
"@babel/code-frame" "^7.27.1"
- "@babel/generator" "^7.27.1"
- "@babel/parser" "^7.27.1"
- "@babel/template" "^7.27.1"
- "@babel/types" "^7.27.1"
+ "@babel/generator" "^7.28.3"
+ "@babel/helper-globals" "^7.28.0"
+ "@babel/parser" "^7.28.4"
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.4"
debug "^4.3.1"
- globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5":
- version "7.24.5"
- resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz"
- integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==
+"@babel/traverse@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b"
+ integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==
dependencies:
- "@babel/helper-string-parser" "^7.24.1"
- "@babel/helper-validator-identifier" "^7.24.5"
- to-fast-properties "^2.0.0"
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.5"
+ "@babel/helper-globals" "^7.28.0"
+ "@babel/parser" "^7.28.5"
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.5"
+ debug "^4.3.1"
-"@babel/types@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560"
- integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a"
+ integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==
dependencies:
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
-"@bufbuild/protobuf@^2.0.0":
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.2.2.tgz#1a6d89603fb215dc4d4178052d05b30b83c75402"
- integrity sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==
+"@babel/types@^7.28.5":
+ version "7.28.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b"
+ integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
+ dependencies:
+ "@babel/helper-string-parser" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.28.5"
+
+"@borewit/text-codec@^0.1.0":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@borewit/text-codec/-/text-codec-0.1.1.tgz#7e7f27092473d5eabcffef693a849f2cc48431da"
+ integrity sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==
+
+"@bufbuild/protobuf@2.9.0", "@bufbuild/protobuf@^2.4.0", "@bufbuild/protobuf@^2.5.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.9.0.tgz#ff8827be3d8e56d74a03530cff8b0e1952aa115e"
+ integrity sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==
+
+"@bufbuild/protoplugin@^2.4.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@bufbuild/protoplugin/-/protoplugin-2.9.0.tgz#9cee42c572c5b91ffeb5a7e0caf68bae60e6bafe"
+ integrity sha512-uoiwNVYoTq+AyqaV1L6pBazGx5fXOO89L0NSR9/7hEfo0Y8n9T1jsKGu4mkitLmP3z+8gJREaule1mMuKBPyYw==
+ dependencies:
+ "@bufbuild/protobuf" "2.9.0"
+ "@typescript/vfs" "^1.5.2"
+ typescript "5.4.5"
"@commitlint/cli@^19.6.0":
- version "19.6.0"
- resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.6.0.tgz#98e7fc8501cc38b6eef4b7f61e19b15f3c53700e"
- integrity sha512-v17BgGD9w5KnthaKxXnEg6KLq6DYiAxyiN44TpiRtqyW8NSq+Kx99mkEG8Qo6uu6cI5eMzMojW2muJxjmPnF8w==
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.8.1.tgz#85f7d9f331344e1f0a2b9d8b24fd3695466e1158"
+ integrity sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==
dependencies:
- "@commitlint/format" "^19.5.0"
- "@commitlint/lint" "^19.6.0"
- "@commitlint/load" "^19.5.0"
- "@commitlint/read" "^19.5.0"
- "@commitlint/types" "^19.5.0"
- tinyexec "^0.3.0"
+ "@commitlint/format" "^19.8.1"
+ "@commitlint/lint" "^19.8.1"
+ "@commitlint/load" "^19.8.1"
+ "@commitlint/read" "^19.8.1"
+ "@commitlint/types" "^19.8.1"
+ tinyexec "^1.0.0"
yargs "^17.0.0"
"@commitlint/config-conventional@^19.6.0":
- version "19.6.0"
- resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.6.0.tgz#badba72c8639ea79291e2941001bd7ea7fad3a2c"
- integrity sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz#eab42df58cda44f18410ae0cbd6785ece00f214b"
+ integrity sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==
dependencies:
- "@commitlint/types" "^19.5.0"
+ "@commitlint/types" "^19.8.1"
conventional-changelog-conventionalcommits "^7.0.2"
-"@commitlint/config-validator@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-19.5.0.tgz#f0a4eda2109fc716ef01bb8831af9b02e3a1e568"
- integrity sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==
+"@commitlint/config-validator@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-19.8.1.tgz#29e9bb1360fa41b9439b23d8e25deaaf097306b5"
+ integrity sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==
dependencies:
- "@commitlint/types" "^19.5.0"
+ "@commitlint/types" "^19.8.1"
ajv "^8.11.0"
-"@commitlint/ensure@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-19.5.0.tgz#b087374a6a0a0140e5925a82901d234885d9f6dd"
- integrity sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==
+"@commitlint/ensure@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-19.8.1.tgz#938c54d6f586bda600b5c8e8e842edb281546e14"
+ integrity sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==
dependencies:
- "@commitlint/types" "^19.5.0"
+ "@commitlint/types" "^19.8.1"
lodash.camelcase "^4.3.0"
lodash.kebabcase "^4.1.1"
lodash.snakecase "^4.1.1"
lodash.startcase "^4.4.0"
lodash.upperfirst "^4.3.1"
-"@commitlint/execute-rule@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-19.5.0.tgz#c13da8c03ea0379f30856111e27d57518e25b8a2"
- integrity sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==
+"@commitlint/execute-rule@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz#53000363b737773e2d25e97c20f15eaa78742067"
+ integrity sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==
-"@commitlint/format@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-19.5.0.tgz#d879db2d97d70ae622397839fb8603d56e85a250"
- integrity sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==
+"@commitlint/format@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-19.8.1.tgz#3e09b1291b3e29092d7a86f0afbbcfc0d99d3ad4"
+ integrity sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==
dependencies:
- "@commitlint/types" "^19.5.0"
+ "@commitlint/types" "^19.8.1"
chalk "^5.3.0"
-"@commitlint/is-ignored@^19.6.0":
- version "19.6.0"
- resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.6.0.tgz#6adb9097d36b68e00b9c06a73d7a08e9f54c54dc"
- integrity sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==
+"@commitlint/is-ignored@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz#fed0851360ea2d21799eaf8ec9ef6d98c15536e3"
+ integrity sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==
dependencies:
- "@commitlint/types" "^19.5.0"
+ "@commitlint/types" "^19.8.1"
semver "^7.6.0"
-"@commitlint/lint@^19.6.0":
- version "19.6.0"
- resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.6.0.tgz#f9fc9b11b808c96bd3f85e882e056daabac40c36"
- integrity sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==
+"@commitlint/lint@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.8.1.tgz#c21bf9000ca54e41c5b0139c98aaf12473c03bb0"
+ integrity sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==
dependencies:
- "@commitlint/is-ignored" "^19.6.0"
- "@commitlint/parse" "^19.5.0"
- "@commitlint/rules" "^19.6.0"
- "@commitlint/types" "^19.5.0"
+ "@commitlint/is-ignored" "^19.8.1"
+ "@commitlint/parse" "^19.8.1"
+ "@commitlint/rules" "^19.8.1"
+ "@commitlint/types" "^19.8.1"
-"@commitlint/load@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.5.0.tgz#67f90a294894d1f99b930b6152bed2df44a81794"
- integrity sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==
+"@commitlint/load@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.8.1.tgz#b997b1f65a961bf0a47189f15f6dc8786ceb4576"
+ integrity sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==
dependencies:
- "@commitlint/config-validator" "^19.5.0"
- "@commitlint/execute-rule" "^19.5.0"
- "@commitlint/resolve-extends" "^19.5.0"
- "@commitlint/types" "^19.5.0"
+ "@commitlint/config-validator" "^19.8.1"
+ "@commitlint/execute-rule" "^19.8.1"
+ "@commitlint/resolve-extends" "^19.8.1"
+ "@commitlint/types" "^19.8.1"
chalk "^5.3.0"
cosmiconfig "^9.0.0"
- cosmiconfig-typescript-loader "^5.0.0"
+ cosmiconfig-typescript-loader "^6.1.0"
lodash.isplainobject "^4.0.6"
lodash.merge "^4.6.2"
lodash.uniq "^4.5.0"
-"@commitlint/message@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-19.5.0.tgz#c062d9a1d2b3302c3a8cac25d6d1125ea9c019b2"
- integrity sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==
+"@commitlint/message@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-19.8.1.tgz#d5d0d87837483d9f9b4559ffa06e1aaa26d266d6"
+ integrity sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==
-"@commitlint/parse@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-19.5.0.tgz#b450dad9b5a95ac5ba472d6d0fdab822dce946fc"
- integrity sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==
+"@commitlint/parse@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-19.8.1.tgz#73125d04f07f11477cf563cbfe0cc9f6dc85a747"
+ integrity sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==
dependencies:
- "@commitlint/types" "^19.5.0"
+ "@commitlint/types" "^19.8.1"
conventional-changelog-angular "^7.0.0"
conventional-commits-parser "^5.0.0"
-"@commitlint/read@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.5.0.tgz#601f9f1afe69852b0f28aa81cd455b40979fad6b"
- integrity sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==
+"@commitlint/read@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.8.1.tgz#812930fd0f616e796e122751cb983346e5454ec8"
+ integrity sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==
dependencies:
- "@commitlint/top-level" "^19.5.0"
- "@commitlint/types" "^19.5.0"
+ "@commitlint/top-level" "^19.8.1"
+ "@commitlint/types" "^19.8.1"
git-raw-commits "^4.0.0"
minimist "^1.2.8"
- tinyexec "^0.3.0"
+ tinyexec "^1.0.0"
-"@commitlint/resolve-extends@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-19.5.0.tgz#f3ec33e12d10df90cae0bfad8e593431fb61b18e"
- integrity sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==
+"@commitlint/resolve-extends@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz#a44bb4c22e3e7d407cc9a3758fcf58f5c360b694"
+ integrity sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==
dependencies:
- "@commitlint/config-validator" "^19.5.0"
- "@commitlint/types" "^19.5.0"
+ "@commitlint/config-validator" "^19.8.1"
+ "@commitlint/types" "^19.8.1"
global-directory "^4.0.1"
import-meta-resolve "^4.0.0"
lodash.mergewith "^4.6.2"
resolve-from "^5.0.0"
-"@commitlint/rules@^19.6.0":
- version "19.6.0"
- resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.6.0.tgz#2436da7974c3cf2a7236257f3ef5dd40c4d91312"
- integrity sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==
+"@commitlint/rules@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.8.1.tgz#1cea53d5bf970ce56dc105e1da5e6655a2fe7a5f"
+ integrity sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==
dependencies:
- "@commitlint/ensure" "^19.5.0"
- "@commitlint/message" "^19.5.0"
- "@commitlint/to-lines" "^19.5.0"
- "@commitlint/types" "^19.5.0"
+ "@commitlint/ensure" "^19.8.1"
+ "@commitlint/message" "^19.8.1"
+ "@commitlint/to-lines" "^19.8.1"
+ "@commitlint/types" "^19.8.1"
-"@commitlint/to-lines@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-19.5.0.tgz#e4b7f34f09064568c96a74de4f1fc9f466c4d472"
- integrity sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==
+"@commitlint/to-lines@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-19.8.1.tgz#c1a28a84542c7ba321c1c11178b83ae024257b47"
+ integrity sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==
-"@commitlint/top-level@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-19.5.0.tgz#0017ffe39b5ba3611a1debd62efe28803601a14f"
- integrity sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==
+"@commitlint/top-level@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-19.8.1.tgz#2c942189d83a29b21ff7ba6e91607301efdf5916"
+ integrity sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==
dependencies:
find-up "^7.0.0"
-"@commitlint/types@^19.5.0":
- version "19.5.0"
- resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-19.5.0.tgz#c5084d1231d4dd50e40bdb656ee7601f691400b3"
- integrity sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==
+"@commitlint/types@^19.8.1":
+ version "19.8.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-19.8.1.tgz#7971fbd56b0cfb31692a4e1941b74ac8217c44e5"
+ integrity sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==
dependencies:
"@types/conventional-commits-parser" "^5.0.0"
chalk "^5.3.0"
@@ -1148,9 +1003,37 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
+"@csstools/color-helpers@^5.1.0":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef"
+ integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==
+
+"@csstools/css-calc@^2.1.3", "@csstools/css-calc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65"
+ integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==
+
+"@csstools/css-color-parser@^3.0.9":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0"
+ integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==
+ dependencies:
+ "@csstools/color-helpers" "^5.1.0"
+ "@csstools/css-calc" "^2.1.4"
+
+"@csstools/css-parser-algorithms@^3.0.4":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076"
+ integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==
+
+"@csstools/css-tokenizer@^3.0.3":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3"
+ integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==
+
"@develar/schema-utils@~2.6.5":
version "2.6.5"
- resolved "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz"
+ resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6"
integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==
dependencies:
ajv "^6.12.0"
@@ -1158,7 +1041,7 @@
"@electron-toolkit/eslint-config-prettier@^2.0.0":
version "2.0.0"
- resolved "https://registry.npmjs.org/@electron-toolkit/eslint-config-prettier/-/eslint-config-prettier-2.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@electron-toolkit/eslint-config-prettier/-/eslint-config-prettier-2.0.0.tgz#a258a28fc0a09b7f910fd71e0aa18ea6ee440735"
integrity sha512-L+uG1FvJcAZkPZpSi6B1pmdpyJFyOxWDTjr1Vs47vSryxv/EX1Ch6o4HVsachlDq3fMEkDgojuP2F3ZvVZMoLw==
dependencies:
eslint-config-prettier "^9.1.0"
@@ -1172,20 +1055,20 @@
"@typescript-eslint/eslint-plugin" "^7.5.0"
"@typescript-eslint/parser" "^7.5.0"
-"@electron-toolkit/preload@^3.0.0":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@electron-toolkit/preload/-/preload-3.0.1.tgz#8bae193fd851f3d38c56eec13a5dd602744e8064"
- integrity sha512-EzoQmpK8jqqU8YnM5jRe0GJjGVJPke2KtANqz8QtN2JPT96ViOvProBdK5C6riCm0j1T8jjAGVQCZLQy9OVoIA==
+"@electron-toolkit/preload@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@electron-toolkit/preload/-/preload-3.0.2.tgz#ee5bb33aba48741c5bc539a9a6faad0be455465e"
+ integrity sha512-TWWPToXd8qPRfSXwzf5KVhpXMfONaUuRAZJHsKthKgZR/+LqX1dZVSSClQ8OTAEduvLGdecljCsoT2jSshfoUg==
"@electron-toolkit/tsconfig@^1.0.1":
version "1.0.1"
- resolved "https://registry.npmjs.org/@electron-toolkit/tsconfig/-/tsconfig-1.0.1.tgz"
+ resolved "https://registry.yarnpkg.com/@electron-toolkit/tsconfig/-/tsconfig-1.0.1.tgz#78048d3178dd7a6a573590e23240f0764b0c14af"
integrity sha512-M0Mol3odspvtCuheyujLNAW7bXq7KFNYVMRtpjFa4ZfES4MuklXBC7Nli/omvc+PRKlrklgAGx3l4VakjNo8jg==
-"@electron-toolkit/utils@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@electron-toolkit/utils/-/utils-3.0.0.tgz#74626893d93025eacba086d497b615cf927d42c4"
- integrity sha512-GaXHDhiT7KCvMJjXdp/QqpYinq69T/Pdl49Z1XLf8mKGf63dnsODMWyrmIjEQ0z/vG7dO8qF3fvmI6Eb2lUNZA==
+"@electron-toolkit/utils@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@electron-toolkit/utils/-/utils-4.0.0.tgz#fd850c519a4ae692a2a6fb6a174010e6b377a113"
+ integrity sha512-qXSntwEzluSzKl4z5yFNBknmPGjPa3zFhE4mp9+h0cgokY5ornAeP+CJQDBhKsL1S58aOQfcwkD3NwLZCl+64g==
"@electron/asar@3.2.18":
version "3.2.18"
@@ -1197,11 +1080,10 @@
minimatch "^3.0.4"
"@electron/asar@^3.2.7":
- version "3.2.13"
- resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.13.tgz#56565ea423ead184465adfa72663b2c70d9835f2"
- integrity sha512-pY5z2qQSwbFzJsBdgfJIzXf5ElHTVMutC2dxh0FD60njknMu3n1NnTABOcQwbb5/v5soqE79m9UjaJryBf3epg==
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.4.1.tgz#4e9196a4b54fba18c56cd8d5cac67c5bdc588065"
+ integrity sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==
dependencies:
- "@types/glob" "^7.1.0"
commander "^5.0.0"
glob "^7.1.6"
minimatch "^3.0.4"
@@ -1217,7 +1099,7 @@
"@electron/get@^2.0.0":
version "2.0.3"
- resolved "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz"
+ resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960"
integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==
dependencies:
debug "^4.1.1"
@@ -1304,261 +1186,261 @@
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
-"@esbuild/aix-ppc64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz#830d6476cbbca0c005136af07303646b419f1162"
- integrity sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==
+"@esbuild/aix-ppc64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz#2ae33300598132cc4cf580dbbb28d30fed3c5c49"
+ integrity sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==
"@esbuild/android-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
-"@esbuild/android-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz#d11d4fc299224e729e2190cacadbcc00e7a9fd67"
- integrity sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==
+"@esbuild/android-arm64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz#927708b3db5d739d6cb7709136924cc81bec9b03"
+ integrity sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==
"@esbuild/android-arm@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
-"@esbuild/android-arm@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.4.tgz#5660bd25080553dd2a28438f2a401a29959bd9b1"
- integrity sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==
+"@esbuild/android-arm@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.11.tgz#571f94e7f4068957ec4c2cfb907deae3d01b55ae"
+ integrity sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==
"@esbuild/android-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
-"@esbuild/android-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.4.tgz#18ddde705bf984e8cd9efec54e199ac18bc7bee1"
- integrity sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==
+"@esbuild/android-x64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.11.tgz#8a3bf5cae6c560c7ececa3150b2bde76e0fb81e6"
+ integrity sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==
"@esbuild/darwin-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
-"@esbuild/darwin-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz#b0b7fb55db8fc6f5de5a0207ae986eb9c4766e67"
- integrity sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==
+"@esbuild/darwin-arm64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz#0a678c4ac4bf8717e67481e1a797e6c152f93c84"
+ integrity sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==
"@esbuild/darwin-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
-"@esbuild/darwin-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz#e6813fdeba0bba356cb350a4b80543fbe66bf26f"
- integrity sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==
+"@esbuild/darwin-x64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz#70f5e925a30c8309f1294d407a5e5e002e0315fe"
+ integrity sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==
"@esbuild/freebsd-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
-"@esbuild/freebsd-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz#dc11a73d3ccdc308567b908b43c6698e850759be"
- integrity sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==
+"@esbuild/freebsd-arm64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz#4ec1db687c5b2b78b44148025da9632397553e8a"
+ integrity sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==
"@esbuild/freebsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
-"@esbuild/freebsd-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz#91da08db8bd1bff5f31924c57a81dab26e93a143"
- integrity sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==
+"@esbuild/freebsd-x64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz#4c81abd1b142f1e9acfef8c5153d438ca53f44bb"
+ integrity sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==
"@esbuild/linux-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
-"@esbuild/linux-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz#efc15e45c945a082708f9a9f73bfa8d4db49728a"
- integrity sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==
+"@esbuild/linux-arm64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz#69517a111acfc2b93aa0fb5eaeb834c0202ccda5"
+ integrity sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==
"@esbuild/linux-arm@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
-"@esbuild/linux-arm@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz#9b93c3e54ac49a2ede6f906e705d5d906f6db9e8"
- integrity sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==
+"@esbuild/linux-arm@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz#58dac26eae2dba0fac5405052b9002dac088d38f"
+ integrity sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==
"@esbuild/linux-ia32@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
-"@esbuild/linux-ia32@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz#be8ef2c3e1d99fca2d25c416b297d00360623596"
- integrity sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==
+"@esbuild/linux-ia32@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz#b89d4efe9bdad46ba944f0f3b8ddd40834268c2b"
+ integrity sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==
"@esbuild/linux-loong64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
-"@esbuild/linux-loong64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz#b0840a2707c3fc02eec288d3f9defa3827cd7a87"
- integrity sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==
+"@esbuild/linux-loong64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz#11f603cb60ad14392c3f5c94d64b3cc8b630fbeb"
+ integrity sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==
"@esbuild/linux-mips64el@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
-"@esbuild/linux-mips64el@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz#2a198e5a458c9f0e75881a4e63d26ba0cf9df39f"
- integrity sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==
+"@esbuild/linux-mips64el@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz#b7d447ff0676b8ab247d69dac40a5cf08e5eeaf5"
+ integrity sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==
"@esbuild/linux-ppc64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
-"@esbuild/linux-ppc64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz#64f4ae0b923d7dd72fb860b9b22edb42007cf8f5"
- integrity sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==
+"@esbuild/linux-ppc64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz#b3a28ed7cc252a61b07ff7c8fd8a984ffd3a2f74"
+ integrity sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==
"@esbuild/linux-riscv64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
-"@esbuild/linux-riscv64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz#fb2844b11fdddd39e29d291c7cf80f99b0d5158d"
- integrity sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==
+"@esbuild/linux-riscv64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz#ce75b08f7d871a75edcf4d2125f50b21dc9dc273"
+ integrity sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==
"@esbuild/linux-s390x@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
-"@esbuild/linux-s390x@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz#1466876e0aa3560c7673e63fdebc8278707bc750"
- integrity sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==
+"@esbuild/linux-s390x@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz#cd08f6c73b6b6ff9ccdaabbd3ff6ad3dca99c263"
+ integrity sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==
"@esbuild/linux-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
-"@esbuild/linux-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz#c10fde899455db7cba5f11b3bccfa0e41bf4d0cd"
- integrity sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==
+"@esbuild/linux-x64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz#3c3718af31a95d8946ebd3c32bb1e699bdf74910"
+ integrity sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==
-"@esbuild/netbsd-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz#02e483fbcbe3f18f0b02612a941b77be76c111a4"
- integrity sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==
+"@esbuild/netbsd-arm64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz#b4c767082401e3a4e8595fe53c47cd7f097c8077"
+ integrity sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==
"@esbuild/netbsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
-"@esbuild/netbsd-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz#ec401fb0b1ed0ac01d978564c5fc8634ed1dc2ed"
- integrity sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==
+"@esbuild/netbsd-x64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz#f2a930458ed2941d1f11ebc34b9c7d61f7a4d034"
+ integrity sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==
-"@esbuild/openbsd-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz#f272c2f41cfea1d91b93d487a51b5c5ca7a8c8c4"
- integrity sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==
+"@esbuild/openbsd-arm64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz#b4ae93c75aec48bc1e8a0154957a05f0641f2dad"
+ integrity sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==
"@esbuild/openbsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
-"@esbuild/openbsd-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz#2e25950bc10fa9db1e5c868e3d50c44f7c150fd7"
- integrity sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==
+"@esbuild/openbsd-x64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz#b42863959c8dcf9b01581522e40012d2c70045e2"
+ integrity sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==
+
+"@esbuild/openharmony-arm64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz#b2e717141c8fdf6bddd4010f0912e6b39e1640f1"
+ integrity sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==
"@esbuild/sunos-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
-"@esbuild/sunos-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz#cd596fa65a67b3b7adc5ecd52d9f5733832e1abd"
- integrity sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==
+"@esbuild/sunos-x64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz#9fbea1febe8778927804828883ec0f6dd80eb244"
+ integrity sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==
"@esbuild/win32-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
-"@esbuild/win32-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz#b4dbcb57b21eeaf8331e424c3999b89d8951dc88"
- integrity sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==
+"@esbuild/win32-arm64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz#501539cedb24468336073383989a7323005a8935"
+ integrity sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==
"@esbuild/win32-ia32@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
-"@esbuild/win32-ia32@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz#410842e5d66d4ece1757634e297a87635eb82f7a"
- integrity sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==
+"@esbuild/win32-ia32@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz#8ac7229aa82cef8f16ffb58f1176a973a7a15343"
+ integrity sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==
"@esbuild/win32-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
-"@esbuild/win32-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz#0b17ec8a70b2385827d52314c1253160a0b9bacc"
- integrity sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==
+"@esbuild/win32-x64@0.25.11":
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz#5ecda6f3fe138b7e456f4e429edde33c823f392f"
+ integrity sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
- version "4.4.0"
- resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz"
- integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ version "4.9.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3"
+ integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==
dependencies:
- eslint-visitor-keys "^3.3.0"
+ eslint-visitor-keys "^3.4.3"
-"@eslint-community/regexpp@^4.10.0":
+"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1":
version "4.12.1"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
-"@eslint-community/regexpp@^4.6.1":
- version "4.10.0"
- resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz"
- integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
-
"@eslint/eslintrc@^2.1.4":
version "2.1.4"
- resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
dependencies:
ajv "^6.12.4"
@@ -1576,60 +1458,49 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"
integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
-"@floating-ui/core@^1.6.0":
- version "1.6.8"
- resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12"
- integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==
+"@floating-ui/core@^1.7.3":
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7"
+ integrity sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==
dependencies:
- "@floating-ui/utils" "^0.2.8"
+ "@floating-ui/utils" "^0.2.10"
-"@floating-ui/dom@^1.0.0":
- version "1.6.12"
- resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556"
- integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==
+"@floating-ui/dom@^1.0.0", "@floating-ui/dom@^1.6.1", "@floating-ui/dom@^1.7.4":
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.4.tgz#ee667549998745c9c3e3e84683b909c31d6c9a77"
+ integrity sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==
dependencies:
- "@floating-ui/core" "^1.6.0"
- "@floating-ui/utils" "^0.2.8"
-
-"@floating-ui/dom@^1.6.1":
- version "1.6.13"
- resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34"
- integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==
- dependencies:
- "@floating-ui/core" "^1.6.0"
- "@floating-ui/utils" "^0.2.9"
+ "@floating-ui/core" "^1.7.3"
+ "@floating-ui/utils" "^0.2.10"
"@floating-ui/react-dom@^2.0.0":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31"
- integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.6.tgz#189f681043c1400561f62972f461b93f01bf2231"
+ integrity sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==
dependencies:
- "@floating-ui/dom" "^1.0.0"
+ "@floating-ui/dom" "^1.7.4"
-"@floating-ui/utils@^0.2.8":
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62"
- integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==
+"@floating-ui/utils@^0.2.10":
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c"
+ integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==
-"@floating-ui/utils@^0.2.9":
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429"
- integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==
-
-"@fontsource/noto-sans@^5.1.0":
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/@fontsource/noto-sans/-/noto-sans-5.1.0.tgz#54a5edd1b2b8c8e17bec6a85d4ee3a53b4b89c1f"
- integrity sha512-P6X+ynPOteCsbUHI7rU4UIpRJcuraJ3OllKqPIjKgxPZS0yPtxFyquADb4SmcgZosRrgqDy34/dcSIhio3Qx4Q==
+"@fontsource/noto-sans@^5.2.10":
+ version "5.2.10"
+ resolved "https://registry.yarnpkg.com/@fontsource/noto-sans/-/noto-sans-5.2.10.tgz#74476071b53fda1554ac009b98f18d763d0f7135"
+ integrity sha512-J58RVfS/C0Z2VBF+PoU260Tx8cdRGYuS+e3yQe4hYaIYDl0sEVn5CzlLo5zVRvQD0HaIUTV8AZMfqR7rtdEpqQ==
"@gar/promisify@^1.1.3":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
-"@hookform/resolvers@^3.9.1":
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.9.1.tgz#a23883c40bfd449cb6c6ab5a0fa0729184c950ff"
- integrity sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==
+"@hookform/resolvers@^5.2.2":
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-5.2.2.tgz#5ac16cd89501ca31671e6e9f0f5c5d762a99aa12"
+ integrity sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==
+ dependencies:
+ "@standard-schema/utils" "^0.3.0"
"@humanwhocodes/config-array@^0.13.0":
version "0.13.0"
@@ -1642,7 +1513,7 @@
"@humanwhocodes/module-importer@^1.0.1":
version "1.0.1"
- resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
"@humanwhocodes/object-schema@^2.0.3":
@@ -1650,9 +1521,21 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+"@isaacs/balanced-match@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29"
+ integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==
+
+"@isaacs/brace-expansion@^5.0.0":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3"
+ integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==
+ dependencies:
+ "@isaacs/balanced-match" "^4.0.1"
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
- resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz"
+ resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
dependencies:
string-width "^5.1.2"
@@ -1669,34 +1552,31 @@
dependencies:
minipass "^7.0.4"
-"@jridgewell/gen-mapping@^0.3.5":
- version "0.3.5"
- resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz"
- integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.13"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
+ integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
dependencies:
- "@jridgewell/set-array" "^1.2.1"
- "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/sourcemap-codec" "^1.5.0"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/remapping@^2.3.5":
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
+ integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
version "3.1.2"
- resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
-"@jridgewell/set-array@^1.2.1":
- version "1.2.1"
- resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz"
- integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
-
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
- version "1.4.15"
- resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
- integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-
-"@jridgewell/sourcemap-codec@^1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
- integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5":
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
+ integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
"@jridgewell/trace-mapping@0.3.9":
version "0.3.9"
@@ -1706,10 +1586,10 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
-"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
- version "0.3.25"
- resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
- integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28":
+ version "0.3.31"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0"
+ integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
@@ -1723,7 +1603,7 @@
"@malept/flatpak-bundler@^0.4.0":
version "0.4.0"
- resolved "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz"
+ resolved "https://registry.yarnpkg.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858"
integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==
dependencies:
debug "^4.1.1"
@@ -1731,23 +1611,23 @@
lodash "^4.17.15"
tmp-promise "^3.0.2"
-"@monaco-editor/loader@^1.4.0":
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558"
- integrity sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==
+"@monaco-editor/loader@^1.5.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.6.0.tgz#020a7ea717a63ff2a28940d7aa589a178a83356e"
+ integrity sha512-PdWBZkPb2Amc1kxRsIEyQFkAya6PzUvSf4waXMPt7I05Azm4e2hQuViBVjfw1Mmck98GG2TqecLzWtg1tbyriw==
dependencies:
state-local "^1.0.6"
"@monaco-editor/react@^4.6.0":
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.6.0.tgz#bcc68671e358a21c3814566b865a54b191e24119"
- integrity sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.7.0.tgz#35a1ec01bfe729f38bfc025df7b7bac145602a60"
+ integrity sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==
dependencies:
- "@monaco-editor/loader" "^1.4.0"
+ "@monaco-editor/loader" "^1.5.0"
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
- resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
dependencies:
"@nodelib/fs.stat" "2.0.5"
@@ -1755,12 +1635,12 @@
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
version "2.0.5"
- resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
version "1.2.8"
- resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
dependencies:
"@nodelib/fs.scandir" "2.1.5"
@@ -1782,271 +1662,356 @@
mkdirp "^1.0.4"
rimraf "^3.0.2"
+"@parcel/watcher-android-arm64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
+ integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==
+
+"@parcel/watcher-darwin-arm64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67"
+ integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==
+
+"@parcel/watcher-darwin-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8"
+ integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==
+
+"@parcel/watcher-freebsd-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b"
+ integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==
+
+"@parcel/watcher-linux-arm-glibc@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1"
+ integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==
+
+"@parcel/watcher-linux-arm-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e"
+ integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==
+
+"@parcel/watcher-linux-arm64-glibc@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30"
+ integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==
+
+"@parcel/watcher-linux-arm64-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2"
+ integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==
+
+"@parcel/watcher-linux-x64-glibc@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e"
+ integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==
+
+"@parcel/watcher-linux-x64-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee"
+ integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==
+
+"@parcel/watcher-win32-arm64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243"
+ integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==
+
+"@parcel/watcher-win32-ia32@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6"
+ integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==
+
+"@parcel/watcher-win32-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947"
+ integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==
+
+"@parcel/watcher@^2.4.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200"
+ integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==
+ dependencies:
+ detect-libc "^1.0.3"
+ is-glob "^4.0.3"
+ micromatch "^4.0.5"
+ node-addon-api "^7.0.0"
+ optionalDependencies:
+ "@parcel/watcher-android-arm64" "2.5.1"
+ "@parcel/watcher-darwin-arm64" "2.5.1"
+ "@parcel/watcher-darwin-x64" "2.5.1"
+ "@parcel/watcher-freebsd-x64" "2.5.1"
+ "@parcel/watcher-linux-arm-glibc" "2.5.1"
+ "@parcel/watcher-linux-arm-musl" "2.5.1"
+ "@parcel/watcher-linux-arm64-glibc" "2.5.1"
+ "@parcel/watcher-linux-arm64-musl" "2.5.1"
+ "@parcel/watcher-linux-x64-glibc" "2.5.1"
+ "@parcel/watcher-linux-x64-musl" "2.5.1"
+ "@parcel/watcher-win32-arm64" "2.5.1"
+ "@parcel/watcher-win32-ia32" "2.5.1"
+ "@parcel/watcher-win32-x64" "2.5.1"
+
"@pkgjs/parseargs@^0.11.0":
version "0.11.0"
- resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz"
+ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-"@pkgr/core@^0.1.0":
- version "0.1.1"
- resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz"
- integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
+"@pkgr/core@^0.2.9":
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b"
+ integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==
"@primer/octicons-react@^19.9.0":
- version "19.9.0"
- resolved "https://registry.npmjs.org/@primer/octicons-react/-/octicons-react-19.9.0.tgz"
- integrity sha512-Uk4XrHyfylyfzZN9d8VFjF8FpfYHEyT4sabw+9+oP+GWAJHhPvNPTz6gXvUzJZmoblAvgcTrDslIPjz8zMh76w==
-
-"@protobuf-ts/plugin-framework@^2.10.0":
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin-framework/-/plugin-framework-2.10.0.tgz#e716a4b7fdb8710527101d145a000e254731abbb"
- integrity sha512-EuW9irbt+w7Ml1CaAxK6xyl7pSuWVbNy0rsChxJEthMrAVTN5EPdJ3whNWvsRBa+HwRImEl8KHNnRoq/vGOHbg==
- dependencies:
- "@protobuf-ts/runtime" "^2.10.0"
- typescript "^3.9"
+ version "19.19.0"
+ resolved "https://registry.yarnpkg.com/@primer/octicons-react/-/octicons-react-19.19.0.tgz#e4e575004d9fb52b1391952fa8475af7b54becb3"
+ integrity sha512-dTO3khy50yS7XC0FB5L7Wwg+aEjI7mrdiZ+FeZGKiNSpkpcRDn7HTidLdtKgo0cJp6QKpqtUHGHRRpa+wrc6Bg==
"@protobuf-ts/plugin@^2.10.0":
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin/-/plugin-2.10.0.tgz#dc91af30aeecf2a9debe2d0abf5b2a07a25156c5"
- integrity sha512-iMX4C4TVfMNRLn2msK0cVg5jmizjtu5FYiy8EK5Lg6EgyR9TVHeK2rzmufWKYM2Pcg1jSwC0cFcXHQnCoeFxUg==
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin/-/plugin-2.11.1.tgz#c819ff9aca102209d2096414b3d2240dd240cbdb"
+ integrity sha512-HyuprDcw0bEEJqkOWe1rnXUP0gwYLij8YhPuZyZk6cJbIgc/Q0IFgoHQxOXNIXAcXM4Sbehh6kjVnCzasElw1A==
dependencies:
- "@protobuf-ts/plugin-framework" "^2.10.0"
- "@protobuf-ts/protoc" "^2.10.0"
- "@protobuf-ts/runtime" "^2.10.0"
- "@protobuf-ts/runtime-rpc" "^2.10.0"
+ "@bufbuild/protobuf" "^2.4.0"
+ "@bufbuild/protoplugin" "^2.4.0"
+ "@protobuf-ts/protoc" "^2.11.1"
+ "@protobuf-ts/runtime" "^2.11.1"
+ "@protobuf-ts/runtime-rpc" "^2.11.1"
typescript "^3.9"
-"@protobuf-ts/protoc@^2.10.0":
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/@protobuf-ts/protoc/-/protoc-2.10.0.tgz#4a280ead9d5b143b6ef863339980050184bcac49"
- integrity sha512-S4BtGBh22+uL5E6qLVxV0QNY6tiLVB8QL7RIkvo+KYknipZfSNwubdKy5CPkrwVXzJn4s3cx7bKx1w6BxkBIPg==
+"@protobuf-ts/protoc@^2.11.1":
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/@protobuf-ts/protoc/-/protoc-2.11.1.tgz#5ae86a777cacdc58ddc7e38ee107a74342a86e30"
+ integrity sha512-mUZJaV0daGO6HUX90o/atzQ6A7bbN2RSuHtdwo8SSF2Qoe3zHwa4IHyCN1evftTeHfLmdz+45qo47sL+5P8nyg==
-"@protobuf-ts/runtime-rpc@^2.10.0":
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.10.0.tgz#68de8dcc369e56579569a4deafd394cf4683dc66"
- integrity sha512-8CS/XPv3+pMK4v8UKhtCdvbS4h9l7aqlteKdRt0/UbIKZ8n0qHj6hX8cBhz2ngvohxCOS0N08zPr9aCLBNhW3Q==
+"@protobuf-ts/runtime-rpc@^2.11.1":
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.11.1.tgz#a6eb2f384bceae8d23a01d0b0e37faf0af36c179"
+ integrity sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==
dependencies:
- "@protobuf-ts/runtime" "^2.10.0"
+ "@protobuf-ts/runtime" "^2.11.1"
-"@protobuf-ts/runtime@^2.10.0":
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.10.0.tgz#bc90f632647ff2ae72887546ddf3d193f3f43d98"
- integrity sha512-ypYwGg9Pn3W/2lZ7/HW60hONGuSdzphvOY8Dq7LeNttymDe0y3LaTUUMRpuGqOT6FfrWEMnfQbyqU8AAreo8wA==
+"@protobuf-ts/runtime@^2.11.1":
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.11.1.tgz#ee2bf2fac6e2d8deac0ca63471a77481548e5553"
+ integrity sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==
-"@radix-ui/primitive@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2"
- integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==
+"@radix-ui/primitive@1.1.3":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.3.tgz#e2dbc13bdc5e4168f4334f75832d7bdd3e2de5ba"
+ integrity sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==
-"@radix-ui/react-arrow@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz#744f388182d360b86285217e43b6c63633f39e7a"
- integrity sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==
+"@radix-ui/react-arrow@1.1.7":
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz#e14a2657c81d961598c5e72b73dd6098acc04f09"
+ integrity sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==
dependencies:
- "@radix-ui/react-primitive" "2.0.0"
+ "@radix-ui/react-primitive" "2.1.3"
-"@radix-ui/react-collection@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.0.tgz#f18af78e46454a2360d103c2251773028b7724ed"
- integrity sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==
+"@radix-ui/react-collection@1.1.7":
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.7.tgz#d05c25ca9ac4695cc19ba91f42f686e3ea2d9aec"
+ integrity sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==
dependencies:
- "@radix-ui/react-compose-refs" "1.1.0"
- "@radix-ui/react-context" "1.1.0"
- "@radix-ui/react-primitive" "2.0.0"
- "@radix-ui/react-slot" "1.1.0"
+ "@radix-ui/react-compose-refs" "1.1.2"
+ "@radix-ui/react-context" "1.1.2"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-slot" "1.2.3"
-"@radix-ui/react-compose-refs@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz#656432461fc8283d7b591dcf0d79152fae9ecc74"
- integrity sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==
+"@radix-ui/react-compose-refs@1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30"
+ integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==
-"@radix-ui/react-context@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.0.tgz#6df8d983546cfd1999c8512f3a8ad85a6e7fcee8"
- integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==
+"@radix-ui/react-context@1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36"
+ integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==
-"@radix-ui/react-context@1.1.1":
+"@radix-ui/react-direction@1.1.1":
version "1.1.1"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a"
- integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14"
+ integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==
-"@radix-ui/react-direction@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc"
- integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==
+"@radix-ui/react-dismissable-layer@1.1.11":
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz#e33ab6f6bdaa00f8f7327c408d9f631376b88b37"
+ integrity sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==
+ dependencies:
+ "@radix-ui/primitive" "1.1.3"
+ "@radix-ui/react-compose-refs" "1.1.2"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-use-callback-ref" "1.1.1"
+ "@radix-ui/react-use-escape-keydown" "1.1.1"
-"@radix-ui/react-dismissable-layer@1.1.1":
+"@radix-ui/react-dropdown-menu@^2.1.16":
+ version "2.1.16"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz#5ee045c62bad8122347981c479d92b1ff24c7254"
+ integrity sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==
+ dependencies:
+ "@radix-ui/primitive" "1.1.3"
+ "@radix-ui/react-compose-refs" "1.1.2"
+ "@radix-ui/react-context" "1.1.2"
+ "@radix-ui/react-id" "1.1.1"
+ "@radix-ui/react-menu" "2.1.16"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-use-controllable-state" "1.2.2"
+
+"@radix-ui/react-focus-guards@1.1.3":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz#2a5669e464ad5fde9f86d22f7fdc17781a4dfa7f"
+ integrity sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==
+
+"@radix-ui/react-focus-scope@1.1.7":
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz#dfe76fc103537d80bf42723a183773fd07bfb58d"
+ integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==
+ dependencies:
+ "@radix-ui/react-compose-refs" "1.1.2"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-use-callback-ref" "1.1.1"
+
+"@radix-ui/react-id@1.1.1":
version "1.1.1"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz#cbdcb739c5403382bdde5f9243042ba643883396"
- integrity sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7"
+ integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==
dependencies:
- "@radix-ui/primitive" "1.1.0"
- "@radix-ui/react-compose-refs" "1.1.0"
- "@radix-ui/react-primitive" "2.0.0"
- "@radix-ui/react-use-callback-ref" "1.1.0"
- "@radix-ui/react-use-escape-keydown" "1.1.0"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
-"@radix-ui/react-dropdown-menu@^2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz#acc49577130e3c875ef0133bd1e271ea3392d924"
- integrity sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==
+"@radix-ui/react-menu@2.1.16":
+ version "2.1.16"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.16.tgz#528a5a973c3a7413d3d49eb9ccd229aa52402911"
+ integrity sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==
dependencies:
- "@radix-ui/primitive" "1.1.0"
- "@radix-ui/react-compose-refs" "1.1.0"
- "@radix-ui/react-context" "1.1.1"
- "@radix-ui/react-id" "1.1.0"
- "@radix-ui/react-menu" "2.1.2"
- "@radix-ui/react-primitive" "2.0.0"
- "@radix-ui/react-use-controllable-state" "1.1.0"
+ "@radix-ui/primitive" "1.1.3"
+ "@radix-ui/react-collection" "1.1.7"
+ "@radix-ui/react-compose-refs" "1.1.2"
+ "@radix-ui/react-context" "1.1.2"
+ "@radix-ui/react-direction" "1.1.1"
+ "@radix-ui/react-dismissable-layer" "1.1.11"
+ "@radix-ui/react-focus-guards" "1.1.3"
+ "@radix-ui/react-focus-scope" "1.1.7"
+ "@radix-ui/react-id" "1.1.1"
+ "@radix-ui/react-popper" "1.2.8"
+ "@radix-ui/react-portal" "1.1.9"
+ "@radix-ui/react-presence" "1.1.5"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-roving-focus" "1.1.11"
+ "@radix-ui/react-slot" "1.2.3"
+ "@radix-ui/react-use-callback-ref" "1.1.1"
+ aria-hidden "^1.2.4"
+ react-remove-scroll "^2.6.3"
-"@radix-ui/react-focus-guards@1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe"
- integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==
-
-"@radix-ui/react-focus-scope@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz#ebe2891a298e0a33ad34daab2aad8dea31caf0b2"
- integrity sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==
- dependencies:
- "@radix-ui/react-compose-refs" "1.1.0"
- "@radix-ui/react-primitive" "2.0.0"
- "@radix-ui/react-use-callback-ref" "1.1.0"
-
-"@radix-ui/react-id@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed"
- integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==
- dependencies:
- "@radix-ui/react-use-layout-effect" "1.1.0"
-
-"@radix-ui/react-menu@2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.2.tgz#91f6815845a4298dde775563ed2d80b7ad667899"
- integrity sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==
- dependencies:
- "@radix-ui/primitive" "1.1.0"
- "@radix-ui/react-collection" "1.1.0"
- "@radix-ui/react-compose-refs" "1.1.0"
- "@radix-ui/react-context" "1.1.1"
- "@radix-ui/react-direction" "1.1.0"
- "@radix-ui/react-dismissable-layer" "1.1.1"
- "@radix-ui/react-focus-guards" "1.1.1"
- "@radix-ui/react-focus-scope" "1.1.0"
- "@radix-ui/react-id" "1.1.0"
- "@radix-ui/react-popper" "1.2.0"
- "@radix-ui/react-portal" "1.1.2"
- "@radix-ui/react-presence" "1.1.1"
- "@radix-ui/react-primitive" "2.0.0"
- "@radix-ui/react-roving-focus" "1.1.0"
- "@radix-ui/react-slot" "1.1.0"
- "@radix-ui/react-use-callback-ref" "1.1.0"
- aria-hidden "^1.1.1"
- react-remove-scroll "2.6.0"
-
-"@radix-ui/react-popper@1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.0.tgz#a3e500193d144fe2d8f5d5e60e393d64111f2a7a"
- integrity sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==
+"@radix-ui/react-popper@1.2.8":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.8.tgz#a79f39cdd2b09ab9fb50bf95250918422c4d9602"
+ integrity sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==
dependencies:
"@floating-ui/react-dom" "^2.0.0"
- "@radix-ui/react-arrow" "1.1.0"
- "@radix-ui/react-compose-refs" "1.1.0"
- "@radix-ui/react-context" "1.1.0"
- "@radix-ui/react-primitive" "2.0.0"
- "@radix-ui/react-use-callback-ref" "1.1.0"
- "@radix-ui/react-use-layout-effect" "1.1.0"
- "@radix-ui/react-use-rect" "1.1.0"
- "@radix-ui/react-use-size" "1.1.0"
- "@radix-ui/rect" "1.1.0"
+ "@radix-ui/react-arrow" "1.1.7"
+ "@radix-ui/react-compose-refs" "1.1.2"
+ "@radix-ui/react-context" "1.1.2"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-use-callback-ref" "1.1.1"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
+ "@radix-ui/react-use-rect" "1.1.1"
+ "@radix-ui/react-use-size" "1.1.1"
+ "@radix-ui/rect" "1.1.1"
-"@radix-ui/react-portal@1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.2.tgz#51eb46dae7505074b306ebcb985bf65cc547d74e"
- integrity sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==
+"@radix-ui/react-portal@1.1.9":
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.9.tgz#14c3649fe48ec474ac51ed9f2b9f5da4d91c4472"
+ integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==
dependencies:
- "@radix-ui/react-primitive" "2.0.0"
- "@radix-ui/react-use-layout-effect" "1.1.0"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
-"@radix-ui/react-presence@1.1.1":
+"@radix-ui/react-presence@1.1.5":
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.5.tgz#5d8f28ac316c32f078afce2996839250c10693db"
+ integrity sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==
+ dependencies:
+ "@radix-ui/react-compose-refs" "1.1.2"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
+
+"@radix-ui/react-primitive@2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc"
+ integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==
+ dependencies:
+ "@radix-ui/react-slot" "1.2.3"
+
+"@radix-ui/react-roving-focus@1.1.11":
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz#ef54384b7361afc6480dcf9907ef2fedb5080fd9"
+ integrity sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==
+ dependencies:
+ "@radix-ui/primitive" "1.1.3"
+ "@radix-ui/react-collection" "1.1.7"
+ "@radix-ui/react-compose-refs" "1.1.2"
+ "@radix-ui/react-context" "1.1.2"
+ "@radix-ui/react-direction" "1.1.1"
+ "@radix-ui/react-id" "1.1.1"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-use-callback-ref" "1.1.1"
+ "@radix-ui/react-use-controllable-state" "1.2.2"
+
+"@radix-ui/react-slot@1.2.3":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1"
+ integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==
+ dependencies:
+ "@radix-ui/react-compose-refs" "1.1.2"
+
+"@radix-ui/react-use-callback-ref@1.1.1":
version "1.1.1"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.1.tgz#98aba423dba5e0c687a782c0669dcd99de17f9b1"
- integrity sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40"
+ integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==
+
+"@radix-ui/react-use-controllable-state@1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190"
+ integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==
dependencies:
- "@radix-ui/react-compose-refs" "1.1.0"
- "@radix-ui/react-use-layout-effect" "1.1.0"
+ "@radix-ui/react-use-effect-event" "0.0.2"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
-"@radix-ui/react-primitive@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz#fe05715faa9203a223ccc0be15dc44b9f9822884"
- integrity sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==
+"@radix-ui/react-use-effect-event@0.0.2":
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907"
+ integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==
dependencies:
- "@radix-ui/react-slot" "1.1.0"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
-"@radix-ui/react-roving-focus@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz#b30c59daf7e714c748805bfe11c76f96caaac35e"
- integrity sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==
+"@radix-ui/react-use-escape-keydown@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29"
+ integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==
dependencies:
- "@radix-ui/primitive" "1.1.0"
- "@radix-ui/react-collection" "1.1.0"
- "@radix-ui/react-compose-refs" "1.1.0"
- "@radix-ui/react-context" "1.1.0"
- "@radix-ui/react-direction" "1.1.0"
- "@radix-ui/react-id" "1.1.0"
- "@radix-ui/react-primitive" "2.0.0"
- "@radix-ui/react-use-callback-ref" "1.1.0"
- "@radix-ui/react-use-controllable-state" "1.1.0"
+ "@radix-ui/react-use-callback-ref" "1.1.1"
-"@radix-ui/react-slot@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.0.tgz#7c5e48c36ef5496d97b08f1357bb26ed7c714b84"
- integrity sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==
+"@radix-ui/react-use-layout-effect@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e"
+ integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==
+
+"@radix-ui/react-use-rect@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152"
+ integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==
dependencies:
- "@radix-ui/react-compose-refs" "1.1.0"
+ "@radix-ui/rect" "1.1.1"
-"@radix-ui/react-use-callback-ref@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1"
- integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==
-
-"@radix-ui/react-use-controllable-state@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0"
- integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==
+"@radix-ui/react-use-size@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37"
+ integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==
dependencies:
- "@radix-ui/react-use-callback-ref" "1.1.0"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
-"@radix-ui/react-use-escape-keydown@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754"
- integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==
- dependencies:
- "@radix-ui/react-use-callback-ref" "1.1.0"
-
-"@radix-ui/react-use-layout-effect@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27"
- integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==
-
-"@radix-ui/react-use-rect@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88"
- integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==
- dependencies:
- "@radix-ui/rect" "1.1.0"
-
-"@radix-ui/react-use-size@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b"
- integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==
- dependencies:
- "@radix-ui/react-use-layout-effect" "1.1.0"
-
-"@radix-ui/rect@1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438"
- integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==
+"@radix-ui/rect@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb"
+ integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==
"@react-dnd/asap@^5.0.1":
version "5.0.2"
@@ -2064,264 +2029,308 @@
integrity sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==
"@reduxjs/toolkit@^2.2.3":
- version "2.2.5"
- resolved "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.5.tgz"
- integrity sha512-aeFA/s5NCG7NoJe/MhmwREJxRkDs0ZaSqt0MxhWUrwCf1UQXpwR87RROJEql0uAkLI6U7snBOYOcKw83ew3FPg==
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.9.0.tgz#d4b12b90c27716a6a507193f8c3b2880729b97d5"
+ integrity sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==
dependencies:
+ "@standard-schema/spec" "^1.0.0"
+ "@standard-schema/utils" "^0.3.0"
immer "^10.0.3"
redux "^5.0.1"
redux-thunk "^3.1.0"
reselect "^5.1.0"
-"@remix-run/router@1.19.2":
- version "1.19.2"
- resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.2.tgz#0c896535473291cb41f152c180bedd5680a3b273"
- integrity sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==
+"@remirror/core-constants@3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-3.0.0.tgz#96fdb89d25c62e7b6a5d08caf0ce5114370e3b8f"
+ integrity sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==
-"@rollup/pluginutils@^5.0.5":
- version "5.1.0"
- resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz"
- integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==
+"@remix-run/router@1.23.0":
+ version "1.23.0"
+ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.0.tgz#35390d0e7779626c026b11376da6789eb8389242"
+ integrity sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==
+
+"@rolldown/pluginutils@1.0.0-beta.27":
+ version "1.0.0-beta.27"
+ resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz#47d2bf4cef6d470b22f5831b420f8964e0bf755f"
+ integrity sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==
+
+"@rollup/pluginutils@^5.2.0":
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4"
+ integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==
dependencies:
"@types/estree" "^1.0.0"
estree-walker "^2.0.2"
- picomatch "^2.3.1"
+ picomatch "^4.0.2"
-"@rollup/rollup-android-arm-eabi@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.23.0.tgz#17c381804b84fecee9dd8588e93d9b2a4544ea42"
- integrity sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==
+"@rollup/rollup-android-arm-eabi@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz#59e7478d310f7e6a7c72453978f562483828112f"
+ integrity sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==
-"@rollup/rollup-android-arm64@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.23.0.tgz#0594aab393e7b13c4cd7f21bb72d953c128cdae4"
- integrity sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==
+"@rollup/rollup-android-arm64@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz#a825192a0b1b2f27a5c950c439e7e37a33c5d056"
+ integrity sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==
-"@rollup/rollup-darwin-arm64@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.23.0.tgz#1bc123d4e69920d026f0ffc791bc3c4e04a33b60"
- integrity sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==
+"@rollup/rollup-darwin-arm64@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz#4ee37078bccd725ae3c5f30ef92efc8e1bf886f3"
+ integrity sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==
-"@rollup/rollup-darwin-x64@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.23.0.tgz#272b6787d8a356ac8460738c03b0281af75ed73e"
- integrity sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==
+"@rollup/rollup-darwin-x64@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz#43cc08bd05bf9f388f125e7210a544e62d368d90"
+ integrity sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==
-"@rollup/rollup-linux-arm-gnueabihf@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.23.0.tgz#c35a35414d11c028db1e11b158b3947d1fa3abb0"
- integrity sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==
+"@rollup/rollup-freebsd-arm64@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz#bc8e640e28abe52450baf3fc80d9b26d9bb6587d"
+ integrity sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==
-"@rollup/rollup-linux-arm-musleabihf@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.23.0.tgz#f490e10393558d37c8bc71e71fcab919f2a5bec6"
- integrity sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==
+"@rollup/rollup-freebsd-x64@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz#e981a22e057cc8c65bb523019d344d3a66b15bbc"
+ integrity sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==
-"@rollup/rollup-linux-arm64-gnu@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.23.0.tgz#1b685e1c219494e39f7441cd6b15fe4779ceda77"
- integrity sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==
+"@rollup/rollup-linux-arm-gnueabihf@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz#4036b68904f392a20f3499d63b33e055b67eb274"
+ integrity sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==
-"@rollup/rollup-linux-arm64-musl@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.23.0.tgz#a6cf6cdb340abde851b055e6d8785308ef4ace1a"
- integrity sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==
+"@rollup/rollup-linux-arm-musleabihf@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz#d3b1b9589606e0ff916801c855b1ace9e733427a"
+ integrity sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==
-"@rollup/rollup-linux-powerpc64le-gnu@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.23.0.tgz#2ce0518e709a8a4c0ae563ae0dd4526bc8b14df8"
- integrity sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==
+"@rollup/rollup-linux-arm64-gnu@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz#cbf0943c477e3b96340136dd3448eaf144378cf2"
+ integrity sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==
-"@rollup/rollup-linux-riscv64-gnu@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.23.0.tgz#008bbfc76beae9651b989a36a0308fbb90ce9fcd"
- integrity sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==
+"@rollup/rollup-linux-arm64-musl@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz#837f5a428020d5dce1c3b4cc049876075402cf78"
+ integrity sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==
-"@rollup/rollup-linux-s390x-gnu@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.23.0.tgz#dac114e4eda8d6c5d6b46abd7f1638c6e5846f75"
- integrity sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==
+"@rollup/rollup-linux-loong64-gnu@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz#532c214ababb32ab4bc21b4054278b9a8979e516"
+ integrity sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==
-"@rollup/rollup-linux-x64-gnu@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.23.0.tgz#5d813f8fa79830e13ebeb69433cc786c5522da87"
- integrity sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==
+"@rollup/rollup-linux-ppc64-gnu@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz#93900163b61b49cee666d10ee38257a8b1dd161a"
+ integrity sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==
-"@rollup/rollup-linux-x64-musl@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.23.0.tgz#cca8bf6f96467494c4cb8bba996752d3c7b20714"
- integrity sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==
+"@rollup/rollup-linux-riscv64-gnu@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz#f0ffdcc7066ca04bc972370c74289f35c7a7dc42"
+ integrity sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==
-"@rollup/rollup-win32-arm64-msvc@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.23.0.tgz#9e09307dd0656a63db9ef86a6004679f56d9ddcf"
- integrity sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==
+"@rollup/rollup-linux-riscv64-musl@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz#361695c39dbe96773509745d77a870a32a9f8e48"
+ integrity sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==
-"@rollup/rollup-win32-ia32-msvc@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.23.0.tgz#ebd6a789dd59c1a4e94ab055de0c37ab4ae43618"
- integrity sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==
+"@rollup/rollup-linux-s390x-gnu@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz#09fc6cc2e266a2324e366486ae5d1bca48c43a6a"
+ integrity sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==
-"@rollup/rollup-win32-x64-msvc@4.23.0":
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.23.0.tgz#54e3562ebd264ef5839f8091618310c40d43d8a9"
- integrity sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==
+"@rollup/rollup-linux-x64-gnu@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz#aa9d5b307c08f05d3454225bb0a2b4cc87eeb2e1"
+ integrity sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==
+
+"@rollup/rollup-linux-x64-musl@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz#26949e5b4645502a61daba2f7a8416bd17cb5382"
+ integrity sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==
+
+"@rollup/rollup-openharmony-arm64@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz#ef493c072f9dac7e0edb6c72d63366846b6ffcd9"
+ integrity sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==
+
+"@rollup/rollup-win32-arm64-msvc@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz#56e1aaa6a630d2202ee7ec0adddd05cf384ffd44"
+ integrity sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==
+
+"@rollup/rollup-win32-ia32-msvc@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz#0a44bbf933a9651c7da2b8569fa448dec0de7480"
+ integrity sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==
+
+"@rollup/rollup-win32-x64-gnu@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz#730e12f0b60b234a7c02d5d3179ca3ec7972033d"
+ integrity sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==
+
+"@rollup/rollup-win32-x64-msvc@4.52.4":
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz#5b2dd648a960b8fa00d76f2cc4eea2f03daa80f4"
+ integrity sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==
"@sindresorhus/is@^4.0.0":
version "4.6.0"
- resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
-"@smithy/abort-controller@^3.1.9":
- version "3.1.9"
- resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.9.tgz#47d323f754136a489e972d7fd465d534d72fcbff"
- integrity sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==
+"@smithy/abort-controller@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.1.tgz#6e14bd7f30023dfd904758b552e5b88f687d0dd8"
+ integrity sha512-OvVe992TXYHR7QpYebmtw+/MF5AP9vU0fjfyfW1VmNYeA/dfibLhN13xrzIj+EO0HYMPur5lUIB9hRZ7IhjLDQ==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/chunked-blob-reader-native@^3.0.1":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz#39045ed278ee1b6f4c12715c7565678557274c29"
- integrity sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==
+"@smithy/chunked-blob-reader-native@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz#380266951d746b522b4ab2b16bfea6b451147b41"
+ integrity sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==
dependencies:
- "@smithy/util-base64" "^3.0.0"
+ "@smithy/util-base64" "^4.3.0"
tslib "^2.6.2"
-"@smithy/chunked-blob-reader@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz#754099909957fb1986c16eb88afad75919d7129d"
- integrity sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==
+"@smithy/chunked-blob-reader@^5.2.0":
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz#776fec5eaa5ab5fa70d0d0174b7402420b24559c"
+ integrity sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==
dependencies:
tslib "^2.6.2"
-"@smithy/config-resolver@^3.0.13":
- version "3.0.13"
- resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.13.tgz#653643a77a33d0f5907a5e7582353886b07ba752"
- integrity sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==
+"@smithy/config-resolver@^4.3.0", "@smithy/config-resolver@^4.3.1":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.3.1.tgz#f1a0ed6faa52377909440002e1632be9fc901840"
+ integrity sha512-tWDwrWy37CDVGeaP8AIGZPFL2RoFtmd5Y+nTzLw5qroXNedT2S66EY2d+XzB1zxulCd6nfDXnAQu4auq90aj5Q==
dependencies:
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/types" "^3.7.2"
- "@smithy/util-config-provider" "^3.0.0"
- "@smithy/util-middleware" "^3.0.11"
+ "@smithy/node-config-provider" "^4.3.1"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-config-provider" "^4.2.0"
+ "@smithy/util-middleware" "^4.2.1"
tslib "^2.6.2"
-"@smithy/core@^2.5.5":
- version "2.5.5"
- resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.5.tgz#c75b15caee9e58c800db3e6b99e9e373532d394a"
- integrity sha512-G8G/sDDhXA7o0bOvkc7bgai6POuSld/+XhNnWAbpQTpLv2OZPvyqQ58tLPPlz0bSNsXktldDDREIv1LczFeNEw==
+"@smithy/core@^3.15.0", "@smithy/core@^3.16.0":
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.16.0.tgz#43718e4df99059e5ad5cecc21b6287bf7932ae6d"
+ integrity sha512-T6eJ+yhnCP5plm6aEaenUpxkHTd5zVCKpyWAbP4ekJ7R5wSmKQjmvQIA58CXB1sgrwaYZJXOJMeRtpghxP7n1g==
dependencies:
- "@smithy/middleware-serde" "^3.0.11"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
- "@smithy/util-body-length-browser" "^3.0.0"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-stream" "^3.3.2"
- "@smithy/util-utf8" "^3.0.0"
+ "@smithy/middleware-serde" "^4.2.1"
+ "@smithy/protocol-http" "^5.3.1"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-base64" "^4.3.0"
+ "@smithy/util-body-length-browser" "^4.2.0"
+ "@smithy/util-middleware" "^4.2.1"
+ "@smithy/util-stream" "^4.5.1"
+ "@smithy/util-utf8" "^4.2.0"
+ "@smithy/uuid" "^1.1.0"
tslib "^2.6.2"
-"@smithy/credential-provider-imds@^3.2.8":
- version "3.2.8"
- resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de"
- integrity sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==
+"@smithy/credential-provider-imds@^4.2.0", "@smithy/credential-provider-imds@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.1.tgz#9cfe81812bc48b1d7b457efeb9b82f037adfcee8"
+ integrity sha512-Y7Gq6xZvAUJOf60prfpknyKIJoIU89q/t6Cr4AWLYZBaaIhEdWJRIWvLqiqL5Hb6iK8btorKHI8jT6ZuQB+BVg==
dependencies:
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/types" "^3.7.2"
- "@smithy/url-parser" "^3.0.11"
+ "@smithy/node-config-provider" "^4.3.1"
+ "@smithy/property-provider" "^4.2.1"
+ "@smithy/types" "^4.7.0"
+ "@smithy/url-parser" "^4.2.1"
tslib "^2.6.2"
-"@smithy/eventstream-codec@^3.1.10":
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz#0c1a3457e7a23b71cd71525ceb668f8569a84dad"
- integrity sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==
+"@smithy/eventstream-codec@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.1.tgz#97abdd85be768ff95b889de55141c4605db8dfef"
+ integrity sha512-CAxQlKfWIPLT/hF6GfocaYPbc8ZYC93cqTlu8173olp6K+LGa/32w3E+DG0EmP9TqWSUAOGe6i2SqWBtt+Rnrg==
dependencies:
"@aws-crypto/crc32" "5.2.0"
- "@smithy/types" "^3.7.2"
- "@smithy/util-hex-encoding" "^3.0.0"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-hex-encoding" "^4.2.0"
tslib "^2.6.2"
-"@smithy/eventstream-serde-browser@^3.0.14":
- version "3.0.14"
- resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz#0c3584c7cde2e210aacdfbbd2b57c1d7e2ca3b95"
- integrity sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==
+"@smithy/eventstream-serde-browser@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.1.tgz#e52300806619a5ac611188b5a3c2263359790efb"
+ integrity sha512-8TE6Kwlo+mbvnJdQz1dNGueT+GNtE//Wos8G3Eiz+ebf7Fz1l0ekxnn71XeipIkisgXSKvvaAlDBSVQ2aRYmZQ==
dependencies:
- "@smithy/eventstream-serde-universal" "^3.0.13"
- "@smithy/types" "^3.7.2"
+ "@smithy/eventstream-serde-universal" "^4.2.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/eventstream-serde-config-resolver@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz#5edceba836debea165ea93145231036f6286d67c"
- integrity sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==
+"@smithy/eventstream-serde-config-resolver@^4.3.0":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.1.tgz#2f408779a78716e6a7ecb312d4dd5d86f370e3f2"
+ integrity sha512-/2auO4BugZ64ynwvN3+IJx2CrlKNHRyH6Jw8idzyUqtgsqqpQbIKN5DTHwuUtYWM/s6SbXfgJSgnEmt0HCq0Qw==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/eventstream-serde-node@^3.0.13":
- version "3.0.13"
- resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz#5aebd7b553becee277e411a2b69f6af8c9d7b3a6"
- integrity sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==
+"@smithy/eventstream-serde-node@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.1.tgz#3e15afc05952e64ddb234aff1dbd6b5e9e84bd36"
+ integrity sha512-SKCkhJytWD2l/PlftMnHoZ3Sd6CLoIL/9Ws/ErWIFWVmSeZfImBA/wCZ4oPLhyqTsFPkNdFuL/FlrJfIUnZVPg==
dependencies:
- "@smithy/eventstream-serde-universal" "^3.0.13"
- "@smithy/types" "^3.7.2"
+ "@smithy/eventstream-serde-universal" "^4.2.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/eventstream-serde-universal@^3.0.13":
- version "3.0.13"
- resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz#609c922ea14a0a3eed23a28ac110344c935704eb"
- integrity sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==
+"@smithy/eventstream-serde-universal@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.1.tgz#6c83efea2cb68b50393a79ef9b39fb261ac6d082"
+ integrity sha512-q/k55ZXavQVIAkHFaonz5vUkOHe4isy5114fMv+FJ6HXZESaYN6DZfadjbHMQoMVyqBg5togfk+AxD2rbCop/A==
dependencies:
- "@smithy/eventstream-codec" "^3.1.10"
- "@smithy/types" "^3.7.2"
+ "@smithy/eventstream-codec" "^4.2.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/fetch-http-handler@^4.1.2":
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.2.tgz#f034ff16416b37d92908a1381ef5fddbf4ef1879"
- integrity sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==
+"@smithy/fetch-http-handler@^5.3.1", "@smithy/fetch-http-handler@^5.3.2":
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.2.tgz#8dfd9917dbff7e9079d8e7b50d5bcdae6855e996"
+ integrity sha512-3CXDhyjl6nz0na+te37f+aGqmDwJeyeo9GK7ThPStoa/ruZcUm17UPRC4xJvbm8Z4JCvbnh54mRCFtiR/IzXjw==
dependencies:
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/querystring-builder" "^3.0.11"
- "@smithy/types" "^3.7.2"
- "@smithy/util-base64" "^3.0.0"
+ "@smithy/protocol-http" "^5.3.1"
+ "@smithy/querystring-builder" "^4.2.1"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-base64" "^4.3.0"
tslib "^2.6.2"
-"@smithy/hash-blob-browser@^3.1.10":
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.10.tgz#985e308189c2687a15004152b97506882ffb2b13"
- integrity sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA==
+"@smithy/hash-blob-browser@^4.2.1":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.2.tgz#85abb0a810a0f70af656d21dde8e184dd2ac4b71"
+ integrity sha512-I7oRNdOVWV5psHPvlatTLGNXi1rVfLafsK7RY0etWMop2WpqcnYMzmRCfJLzmIQBb5zB3KfmZBITUhxlCn1PCw==
dependencies:
- "@smithy/chunked-blob-reader" "^4.0.0"
- "@smithy/chunked-blob-reader-native" "^3.0.1"
- "@smithy/types" "^3.7.2"
+ "@smithy/chunked-blob-reader" "^5.2.0"
+ "@smithy/chunked-blob-reader-native" "^4.2.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/hash-node@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.11.tgz#99e09ead3fc99c8cd7ca0f254ea0e35714f2a0d3"
- integrity sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==
+"@smithy/hash-node@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.1.tgz#d8666428535f3587cdf0119496300c628e05d1be"
+ integrity sha512-eqyR+zua9LI8K0NhYMUEh8HDy7zaT1gRuB3d1kNIKeSG9nc2JxNbKXYNRdmIvAWG3wJyl9uUWPs+H3k8uDes1Q==
dependencies:
- "@smithy/types" "^3.7.2"
- "@smithy/util-buffer-from" "^3.0.0"
- "@smithy/util-utf8" "^3.0.0"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-buffer-from" "^4.2.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@smithy/hash-stream-node@^3.1.10":
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.10.tgz#94716b4556f4ccf2807e605f47bb5b018ed7dfb0"
- integrity sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q==
+"@smithy/hash-stream-node@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.2.1.tgz#43489664a3b7ea4997f9d3c7be80b93a009adce2"
+ integrity sha512-Ege/rLl4srtUMSsJJIdWJNcwIXf45Y191IegtBgdX/XP54guFGhKpVRPg7yG0J4pazOGb8GNGl/rbTN7DHbXiw==
dependencies:
- "@smithy/types" "^3.7.2"
- "@smithy/util-utf8" "^3.0.0"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@smithy/invalid-dependency@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae"
- integrity sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==
+"@smithy/invalid-dependency@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.1.tgz#1a2830c72f9593c38f654b92f55a244b4cc3ab76"
+ integrity sha512-mGH4fyQwVun9jtAbNQjU5Dt2pItOM1ULQrceaISyyu8pEjreBjyC0T5BN+zU2ltqKF3NefjQ+ApfoAk1w1UplQ==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
"@smithy/is-array-buffer@^2.2.0":
@@ -2331,208 +2340,209 @@
dependencies:
tslib "^2.6.2"
-"@smithy/is-array-buffer@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a"
- integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==
+"@smithy/is-array-buffer@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz#b0f874c43887d3ad44f472a0f3f961bcce0550c2"
+ integrity sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==
dependencies:
tslib "^2.6.2"
-"@smithy/md5-js@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.11.tgz#27e4dab616348ff94aed24dc75e4017c582df40f"
- integrity sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==
+"@smithy/md5-js@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.2.1.tgz#bdf8b104809c183f965584c4126bd21b66162316"
+ integrity sha512-6iFIH++OqA8QP7axnP/9NE5DNwq4t05VKx5izFsHQZUQDjfqqmKsLdzEPNtuspV/6AgPe23tYHJU+2XQhjpBxA==
dependencies:
- "@smithy/types" "^3.7.2"
- "@smithy/util-utf8" "^3.0.0"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@smithy/middleware-content-length@^3.0.13":
- version "3.0.13"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f"
- integrity sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==
+"@smithy/middleware-content-length@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.1.tgz#2922b6b81e89c7ab1fe944f452e812221e39cc50"
+ integrity sha512-+V6TdTAcS/dGILfe4hZP5lVnCuUvcX05yj+GihbOpy/ylGzUYhE/oYmv4vU33vMj5rfpdcfuyuESHkJTTRDXGw==
dependencies:
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
+ "@smithy/protocol-http" "^5.3.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/middleware-endpoint@^3.2.5":
- version "3.2.5"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.5.tgz#bdcfdf1f342cf933b0b8a709996f9a8fbb8148f4"
- integrity sha512-VhJNs/s/lyx4weiZdXSloBgoLoS8osV0dKIain8nGmx7of3QFKu5BSdEuk1z/U8x9iwes1i+XCiNusEvuK1ijg==
+"@smithy/middleware-endpoint@^4.3.1", "@smithy/middleware-endpoint@^4.3.2":
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.2.tgz#95e44d3188a31db7f53578c1477395b682d27364"
+ integrity sha512-3UP7E5SD0rF6cQEWVMxfbMvpC0fv9fTbusMQfKAXlff5g7L2tn2kspiiGX+nqyK78FV2kP/O2WS7rbIvhfw6/Q==
dependencies:
- "@smithy/core" "^2.5.5"
- "@smithy/middleware-serde" "^3.0.11"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/shared-ini-file-loader" "^3.1.12"
- "@smithy/types" "^3.7.2"
- "@smithy/url-parser" "^3.0.11"
- "@smithy/util-middleware" "^3.0.11"
+ "@smithy/core" "^3.16.0"
+ "@smithy/middleware-serde" "^4.2.1"
+ "@smithy/node-config-provider" "^4.3.1"
+ "@smithy/shared-ini-file-loader" "^4.3.1"
+ "@smithy/types" "^4.7.0"
+ "@smithy/url-parser" "^4.2.1"
+ "@smithy/util-middleware" "^4.2.1"
tslib "^2.6.2"
-"@smithy/middleware-retry@^3.0.30":
- version "3.0.30"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.30.tgz#2580322d0d28ad782b5b8c07c150b14efdc3b2f9"
- integrity sha512-6323RL2BvAR3VQpTjHpa52kH/iSHyxd/G9ohb2MkBk2Ucu+oMtRXT8yi7KTSIS9nb58aupG6nO0OlXnQOAcvmQ==
+"@smithy/middleware-retry@^4.4.1":
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.2.tgz#5adf9f577e9dd881f8c2fd0457e9fa77ba5d41d4"
+ integrity sha512-cuPmDJi7AE7PkdfeqJaHKBR33mXCl1MPxrboQDR/zZUo9u947m0gnYRd25NTSRER5LZpNDCvVTSedeAC9dHckA==
dependencies:
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/service-error-classification" "^3.0.11"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-retry" "^3.0.11"
- tslib "^2.6.2"
- uuid "^9.0.1"
-
-"@smithy/middleware-serde@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz#c7d54e0add4f83e05c6878a011fc664e21022f12"
- integrity sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==
- dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/node-config-provider" "^4.3.1"
+ "@smithy/protocol-http" "^5.3.1"
+ "@smithy/service-error-classification" "^4.2.1"
+ "@smithy/smithy-client" "^4.8.0"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-middleware" "^4.2.1"
+ "@smithy/util-retry" "^4.2.1"
+ "@smithy/uuid" "^1.1.0"
tslib "^2.6.2"
-"@smithy/middleware-stack@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc"
- integrity sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==
+"@smithy/middleware-serde@^4.2.0", "@smithy/middleware-serde@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.1.tgz#674736c4f7514878ad708ae663f390f6cddef03e"
+ integrity sha512-0J1EDeGGBNz0h0R/UGKudF7gBMS+UMJEWuNPY1hDV/RTyyKgBfsKH87nKCeCSB81EgjnBDFsnfXD2ZMRCfIPWA==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/protocol-http" "^5.3.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/node-config-provider@^3.1.12":
- version "3.1.12"
- resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c"
- integrity sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==
+"@smithy/middleware-stack@^4.2.0", "@smithy/middleware-stack@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.1.tgz#d620fa159c6d444a3b03ecd8082923663c538bc7"
+ integrity sha512-gWKgBqYYrcdtkEMzN8hEtypab7zgU4VVZHSwURAR5YGrvGJxbBh5mC9RPmVWS7TZxr/vB4yMKfxEQTrYRKRQ3Q==
dependencies:
- "@smithy/property-provider" "^3.1.11"
- "@smithy/shared-ini-file-loader" "^3.1.12"
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/node-http-handler@^3.3.2":
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.2.tgz#b34685863b74dabdaf7860aa81b42d0d5437c7e0"
- integrity sha512-t4ng1DAd527vlxvOfKFYEe6/QFBcsj7WpNlWTyjorwXXcKw3XlltBGbyHfSJ24QT84nF+agDha9tNYpzmSRZPA==
+"@smithy/node-config-provider@^4.3.0", "@smithy/node-config-provider@^4.3.1":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.1.tgz#95e576a5608c3e6e512f70bf729358d55f566db4"
+ integrity sha512-Ap8Wd95HCrWRktMAZNc0AVzdPdUSPHsG59+DMe+4aH74FLDnVTo/7XDcRhSkSZCHeDjaDtzAh5OvnHOE0VHwUg==
dependencies:
- "@smithy/abort-controller" "^3.1.9"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/querystring-builder" "^3.0.11"
- "@smithy/types" "^3.7.2"
+ "@smithy/property-provider" "^4.2.1"
+ "@smithy/shared-ini-file-loader" "^4.3.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/property-provider@^3.1.11":
- version "3.1.11"
- resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad"
- integrity sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==
+"@smithy/node-http-handler@^4.3.0", "@smithy/node-http-handler@^4.4.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.0.tgz#e1f6ae4a90cd7257699263bf8e06e653ff0e5f83"
+ integrity sha512-E00fuesARqnmdc1vR4qurQjQH+QWcsKjmM6kYoJBWjxgqNfp1WHc1SwfC18EdVaYamgctxyXV6kWhHmanhYgCg==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/abort-controller" "^4.2.1"
+ "@smithy/protocol-http" "^5.3.1"
+ "@smithy/querystring-builder" "^4.2.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/protocol-http@^4.1.8":
- version "4.1.8"
- resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9"
- integrity sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==
+"@smithy/property-provider@^4.2.0", "@smithy/property-provider@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.1.tgz#c175cae05d229ed13371b97795a75f5b36aad218"
+ integrity sha512-2zthf6j/u4XV3nRvulJgQsZdAs9xNf7dJPE5+Wvrx4yAsNrmtchadydASqRLXEw67ovl8c+HFa58QEXD/jUMSg==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/querystring-builder@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909"
- integrity sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==
+"@smithy/protocol-http@^5.3.0", "@smithy/protocol-http@^5.3.1":
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.1.tgz#add01f73290f1e8fd49d7102b63e3fe53a5e6e18"
+ integrity sha512-DqbfSgeZC0qo3/3fLgr5UEdOE7/o/VlVOt6LtpShwVcw3PIoqQMRCUTzMpJ0keAVb86Cl1w5YtW7uDUzeNMMLA==
dependencies:
- "@smithy/types" "^3.7.2"
- "@smithy/util-uri-escape" "^3.0.0"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/querystring-parser@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969"
- integrity sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==
+"@smithy/querystring-builder@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.1.tgz#1ef454874cb9da2295369ded8433d1de66498104"
+ integrity sha512-2Qf5x7Afn6ofV3XLYL9+oaOwWK2FUC/LLTarex0SaXEKctVdzCdOOzEfaAZJSwSSiYqFWF6e2r0m7PFDzA44fA==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-uri-escape" "^4.2.0"
tslib "^2.6.2"
-"@smithy/service-error-classification@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a"
- integrity sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==
+"@smithy/querystring-parser@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.1.tgz#996358b90c35ecf357d5b32048414e9c17551f6d"
+ integrity sha512-y1DmifEgOF5J1MmrLP2arzI17tEaVqD+NUnfE+sVcpPcEHmAUL0TF9gQzAi5s6GGHUyDurO+zHvZQOeo7LuJnQ==
dependencies:
- "@smithy/types" "^3.7.2"
-
-"@smithy/shared-ini-file-loader@^3.1.12":
- version "3.1.12"
- resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a"
- integrity sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==
- dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/signature-v4@^4.2.4":
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d"
- integrity sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==
+"@smithy/service-error-classification@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.1.tgz#efc6772fd47152ca64b6c7b95e672bc1e21b9292"
+ integrity sha512-NEcg3bGL9MddDd0GtH1+6bLg+e9SpbNEAVV8vEM4uWgqixECItz6wf0sYcq+N0lQjeRljdwaG3wxd2YgJ7JfbQ==
dependencies:
- "@smithy/is-array-buffer" "^3.0.0"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
- "@smithy/util-hex-encoding" "^3.0.0"
- "@smithy/util-middleware" "^3.0.11"
- "@smithy/util-uri-escape" "^3.0.0"
- "@smithy/util-utf8" "^3.0.0"
+ "@smithy/types" "^4.7.0"
+
+"@smithy/shared-ini-file-loader@^4.3.0", "@smithy/shared-ini-file-loader@^4.3.1":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.1.tgz#efc591bf620599a8473c9adfefcfb9775a21b0d3"
+ integrity sha512-V4XVUUCsuVeSNkjeXLR4Y5doyNkTx29Cp8NfKoklgpSsWawyxmJbVvJ1kFHRulOmdBlLuHoqDrAirN8ZoduUCA==
+ dependencies:
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/smithy-client@^3.5.0":
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.5.0.tgz#65cff262801b009998c1196764ee69929ee06f8a"
- integrity sha512-Y8FeOa7gbDfCWf7njrkoRATPa5eNLUEjlJS5z5rXatYuGkCb80LbHcu8AQR8qgAZZaNHCLyo2N+pxPsV7l+ivg==
+"@smithy/signature-v4@^5.3.0":
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.1.tgz#c3d711c29d37f3db4daf51750eea75204c4f51d4"
+ integrity sha512-7jimpk6X2jzV3UmesOFFV675N/4D8QqNg6NdZFNa/RmWAco+jyX/TbX2mHFImNm+DoafpwEfcDNsPxDSYF0Pxw==
dependencies:
- "@smithy/core" "^2.5.5"
- "@smithy/middleware-endpoint" "^3.2.5"
- "@smithy/middleware-stack" "^3.0.11"
- "@smithy/protocol-http" "^4.1.8"
- "@smithy/types" "^3.7.2"
- "@smithy/util-stream" "^3.3.2"
+ "@smithy/is-array-buffer" "^4.2.0"
+ "@smithy/protocol-http" "^5.3.1"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-hex-encoding" "^4.2.0"
+ "@smithy/util-middleware" "^4.2.1"
+ "@smithy/util-uri-escape" "^4.2.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@smithy/types@^3.7.2":
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10"
- integrity sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==
+"@smithy/smithy-client@^4.7.1", "@smithy/smithy-client@^4.8.0":
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.8.0.tgz#a602a8513977b1d411e3bf5629a93f0f41a304a8"
+ integrity sha512-gbpNLnuDnguDcXQvbeIAd05F9EDK4HasFtiRzJoM5NbsvXGnW2dGd4mHaShR+ZNveoP9KaWlwF8Hj4ZtipaM3Q==
+ dependencies:
+ "@smithy/core" "^3.16.0"
+ "@smithy/middleware-endpoint" "^4.3.2"
+ "@smithy/middleware-stack" "^4.2.1"
+ "@smithy/protocol-http" "^5.3.1"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-stream" "^4.5.1"
+ tslib "^2.6.2"
+
+"@smithy/types@^4.6.0", "@smithy/types@^4.7.0":
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.7.0.tgz#42d707276d9184aef705f04e04615cd1979d044f"
+ integrity sha512-KM8Or+jCDCrUI3wYYhj7ehrC7aATB1NdJ1aFEE/YLKNLVH257k9RNeOqKdg0JOxjyEpVD7KKsmmob9mRy1Ho2g==
dependencies:
tslib "^2.6.2"
-"@smithy/url-parser@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d"
- integrity sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==
+"@smithy/url-parser@^4.2.0", "@smithy/url-parser@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.1.tgz#0c00510684f832cd2fc8f188766267db04e6115d"
+ integrity sha512-dHm6hDcl79Ededl0oKgpSq3mM5b7Xdw+jic8bq1G7Z2spVpm7HpHJuLCV9PUJLjMbDbZfRUf5GEOnnOIvgfYgQ==
dependencies:
- "@smithy/querystring-parser" "^3.0.11"
- "@smithy/types" "^3.7.2"
+ "@smithy/querystring-parser" "^4.2.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/util-base64@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017"
- integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==
+"@smithy/util-base64@^4.3.0":
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.0.tgz#5e287b528793aa7363877c1a02cd880d2e76241d"
+ integrity sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==
dependencies:
- "@smithy/util-buffer-from" "^3.0.0"
- "@smithy/util-utf8" "^3.0.0"
+ "@smithy/util-buffer-from" "^4.2.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@smithy/util-body-length-browser@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded"
- integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==
+"@smithy/util-body-length-browser@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz#04e9fc51ee7a3e7f648a4b4bcdf96c350cfa4d61"
+ integrity sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==
dependencies:
tslib "^2.6.2"
-"@smithy/util-body-length-node@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d"
- integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==
+"@smithy/util-body-length-node@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz#79c8a5d18e010cce6c42d5cbaf6c1958523e6fec"
+ integrity sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==
dependencies:
tslib "^2.6.2"
@@ -2544,96 +2554,95 @@
"@smithy/is-array-buffer" "^2.2.0"
tslib "^2.6.2"
-"@smithy/util-buffer-from@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3"
- integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==
+"@smithy/util-buffer-from@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz#7abd12c4991b546e7cee24d1e8b4bfaa35c68a9d"
+ integrity sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==
dependencies:
- "@smithy/is-array-buffer" "^3.0.0"
+ "@smithy/is-array-buffer" "^4.2.0"
tslib "^2.6.2"
-"@smithy/util-config-provider@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe"
- integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==
+"@smithy/util-config-provider@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz#2e4722937f8feda4dcb09672c59925a4e6286cfc"
+ integrity sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==
dependencies:
tslib "^2.6.2"
-"@smithy/util-defaults-mode-browser@^3.0.30":
- version "3.0.30"
- resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.30.tgz#6c0d95af3f15bef8f1fe3f6217cc4f5ba8df5554"
- integrity sha512-nLuGmgfcr0gzm64pqF2UT4SGWVG8UGviAdayDlVzJPNa6Z4lqvpDzdRXmLxtOdEjVlTOEdpZ9dd3ZMMu488mzg==
+"@smithy/util-defaults-mode-browser@^4.3.0":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.1.tgz#62c406c8e4ce731ac223b50cc7bbee674d38cfd0"
+ integrity sha512-B3kaaqtc11rIc7SN3g6TYGdUrQfCkoHvpqbhd9kdfRUQZG7M7dcc0oLcCjMuBhCSUdtorkK7OA5uGq9BB+isaA==
dependencies:
- "@smithy/property-provider" "^3.1.11"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
- bowser "^2.11.0"
+ "@smithy/property-provider" "^4.2.1"
+ "@smithy/smithy-client" "^4.8.0"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/util-defaults-mode-node@^3.0.30":
- version "3.0.30"
- resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.30.tgz#33cdb02f90944b9ff221e2f8e0904a63ac1e335f"
- integrity sha512-OD63eWoH68vp75mYcfYyuVH+p7Li/mY4sYOROnauDrtObo1cS4uWfsy/zhOTW8F8ZPxQC1ZXZKVxoxvMGUv2Ow==
+"@smithy/util-defaults-mode-node@^4.2.1":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.2.tgz#b561cd3192e6cda6a0a3ee3c1b050248eb8ffaed"
+ integrity sha512-cneOHBPi/DGbjz65oV8wID+uUbtzrFAQ8w3a7uS3C1jjrInSrinAitup8SouDpmi8jr5GVOAck1/hsR3n/WvaQ==
dependencies:
- "@smithy/config-resolver" "^3.0.13"
- "@smithy/credential-provider-imds" "^3.2.8"
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/property-provider" "^3.1.11"
- "@smithy/smithy-client" "^3.5.0"
- "@smithy/types" "^3.7.2"
+ "@smithy/config-resolver" "^4.3.1"
+ "@smithy/credential-provider-imds" "^4.2.1"
+ "@smithy/node-config-provider" "^4.3.1"
+ "@smithy/property-provider" "^4.2.1"
+ "@smithy/smithy-client" "^4.8.0"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/util-endpoints@^2.1.7":
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz#a088ebfab946a7219dd4763bfced82709894b82d"
- integrity sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==
+"@smithy/util-endpoints@^3.2.0":
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.2.1.tgz#da67eb006997c4806ceafd30237c92b48e87a624"
+ integrity sha512-lJudabG/ll+BD22i8IgxZgxS+1hEdUfFqtC1tNubC9vlGwInUktcXodTe5CvM+xDiqGZfqYLY7mKFdabCIrkYw==
dependencies:
- "@smithy/node-config-provider" "^3.1.12"
- "@smithy/types" "^3.7.2"
+ "@smithy/node-config-provider" "^4.3.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/util-hex-encoding@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6"
- integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==
+"@smithy/util-hex-encoding@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz#1c22ea3d1e2c3a81ff81c0a4f9c056a175068a7b"
+ integrity sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==
dependencies:
tslib "^2.6.2"
-"@smithy/util-middleware@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf"
- integrity sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==
+"@smithy/util-middleware@^4.2.0", "@smithy/util-middleware@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.1.tgz#126aaeb6b434748b81058b0ea6c1a7c1656d7040"
+ integrity sha512-4rf5Ma0e0uuKmtzMihsvs3jnb9iGMRDWrUe6mfdZBWm52PW1xVHdEeP4+swhheF+YAXhVH/O+taKJuqOrVsG3w==
dependencies:
- "@smithy/types" "^3.7.2"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/util-retry@^3.0.11":
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425"
- integrity sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==
+"@smithy/util-retry@^4.2.0", "@smithy/util-retry@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.1.tgz#8336368586a458cdce86fc92d6fb11fd1db41521"
+ integrity sha512-0DQqQtZ9brT/QCMts9ssPnsU6CmQAgzkAvTIGcTHoMbntQa7v5VPxxpiyyiTK/BIl8y0vCZSXcOS+kOMXAYRpg==
dependencies:
- "@smithy/service-error-classification" "^3.0.11"
- "@smithy/types" "^3.7.2"
+ "@smithy/service-error-classification" "^4.2.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
-"@smithy/util-stream@^3.3.2":
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.2.tgz#daeea26397e8541cf2499ce65bf0b8d528cba421"
- integrity sha512-sInAqdiVeisUGYAv/FrXpmJ0b4WTFmciTRqzhb7wVuem9BHvhIG7tpiYHLDWrl2stOokNZpTTGqz3mzB2qFwXg==
+"@smithy/util-stream@^4.5.0", "@smithy/util-stream@^4.5.1":
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.1.tgz#07b330af9263762a42ea0b40578c67716b080b84"
+ integrity sha512-kVnOiYDDb84ZUGwpQBiVQROWR7epNXikxMGw971Mww3+eufKl2NHYyao2Gg4Wd3iG+D9hF/d9VrmMBxBcVprXw==
dependencies:
- "@smithy/fetch-http-handler" "^4.1.2"
- "@smithy/node-http-handler" "^3.3.2"
- "@smithy/types" "^3.7.2"
- "@smithy/util-base64" "^3.0.0"
- "@smithy/util-buffer-from" "^3.0.0"
- "@smithy/util-hex-encoding" "^3.0.0"
- "@smithy/util-utf8" "^3.0.0"
+ "@smithy/fetch-http-handler" "^5.3.2"
+ "@smithy/node-http-handler" "^4.4.0"
+ "@smithy/types" "^4.7.0"
+ "@smithy/util-base64" "^4.3.0"
+ "@smithy/util-buffer-from" "^4.2.0"
+ "@smithy/util-hex-encoding" "^4.2.0"
+ "@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
-"@smithy/util-uri-escape@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54"
- integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==
+"@smithy/util-uri-escape@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz#096a4cec537d108ac24a68a9c60bee73fc7e3a9e"
+ integrity sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==
dependencies:
tslib "^2.6.2"
@@ -2645,66 +2654,83 @@
"@smithy/util-buffer-from" "^2.2.0"
tslib "^2.6.2"
-"@smithy/util-utf8@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a"
- integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==
+"@smithy/util-utf8@^4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz#8b19d1514f621c44a3a68151f3d43e51087fed9d"
+ integrity sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==
dependencies:
- "@smithy/util-buffer-from" "^3.0.0"
+ "@smithy/util-buffer-from" "^4.2.0"
tslib "^2.6.2"
-"@smithy/util-waiter@^3.2.0":
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.2.0.tgz#1e52f870e77d2e5572025f7606053e6ff00df93d"
- integrity sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==
+"@smithy/util-waiter@^4.2.0":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.1.tgz#c849ef1096863314d762944ead830e20db56783c"
+ integrity sha512-c/tJR24Zf7TZFiq/cmVY9WH9j6j3WBDVvhfgCE9mtSb1u93A1P+qf4c7r6g8hcJOKm25Jp12uqojnB0T1//OmA==
dependencies:
- "@smithy/abort-controller" "^3.1.9"
- "@smithy/types" "^3.7.2"
+ "@smithy/abort-controller" "^4.2.1"
+ "@smithy/types" "^4.7.0"
tslib "^2.6.2"
+"@smithy/uuid@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.0.tgz#9fd09d3f91375eab94f478858123387df1cda987"
+ integrity sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==
+ dependencies:
+ tslib "^2.6.2"
+
+"@standard-schema/spec@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c"
+ integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==
+
+"@standard-schema/utils@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@standard-schema/utils/-/utils-0.3.0.tgz#3d5e608f16c2390c10528e98e59aef6bf73cae7b"
+ integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==
+
"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
version "8.0.0"
- resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22"
integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==
"@svgr/babel-plugin-remove-jsx-attribute@8.0.0":
version "8.0.0"
- resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186"
integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==
"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0":
version "8.0.0"
- resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44"
integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==
"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0":
version "8.0.0"
- resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27"
integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==
"@svgr/babel-plugin-svg-dynamic-title@8.0.0":
version "8.0.0"
- resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0"
integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==
"@svgr/babel-plugin-svg-em-dimensions@8.0.0":
version "8.0.0"
- resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501"
integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==
"@svgr/babel-plugin-transform-react-native-svg@8.1.0":
version "8.1.0"
- resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754"
integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==
"@svgr/babel-plugin-transform-svg-component@8.0.0":
version "8.0.0"
- resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e"
integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==
"@svgr/babel-preset@8.1.0":
version "8.1.0"
- resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece"
integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==
dependencies:
"@svgr/babel-plugin-add-jsx-attribute" "8.0.0"
@@ -2718,7 +2744,7 @@
"@svgr/core@^8.1.0":
version "8.1.0"
- resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88"
integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==
dependencies:
"@babel/core" "^7.21.3"
@@ -2729,7 +2755,7 @@
"@svgr/hast-util-to-babel-ast@8.0.0":
version "8.0.0"
- resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4"
integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==
dependencies:
"@babel/types" "^7.21.3"
@@ -2737,7 +2763,7 @@
"@svgr/plugin-jsx@^8.1.0":
version "8.1.0"
- resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928"
integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==
dependencies:
"@babel/core" "^7.21.3"
@@ -2745,90 +2771,90 @@
"@svgr/hast-util-to-babel-ast" "8.0.0"
svg-parser "^2.0.4"
-"@swc/core-darwin-arm64@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.7.tgz#2b5cdbd34e4162e50de6147dd1a5cb12d23b08e8"
- integrity sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ==
+"@swc/core-darwin-arm64@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz#7638c073946f9297753ed9a2eb198d07b2336a24"
+ integrity sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==
-"@swc/core-darwin-x64@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.5.7.tgz#6aa7e3c01ab8e5e41597f8a24ff24c4e50936a46"
- integrity sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw==
+"@swc/core-darwin-x64@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz#18061167378f0fb285e17818494bc6c89dd07551"
+ integrity sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==
-"@swc/core-linux-arm-gnueabihf@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.7.tgz#160108633b9e1d1ad05f815bedc7e9eb5d59fc2a"
- integrity sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ==
+"@swc/core-linux-arm-gnueabihf@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz#4c8062bd598049b5b9b0beb762e075e76b4c23c3"
+ integrity sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==
-"@swc/core-linux-arm64-gnu@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.7.tgz#cbfa512683c73227ad25552f3b3e722b0e7fbd1d"
- integrity sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g==
+"@swc/core-linux-arm64-gnu@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz#7222d321197ea9304e387933e87d775849fc1ae6"
+ integrity sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==
-"@swc/core-linux-arm64-musl@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.7.tgz#80239cb58fe57f3c86b44617fe784530ec55ee2b"
- integrity sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ==
+"@swc/core-linux-arm64-musl@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz#51e7958deaf37edc212bd9dc0ea1476f151d2bea"
+ integrity sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==
-"@swc/core-linux-x64-gnu@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.7.tgz#a699c1632de60b6a63b7fdb7abcb4fef317e57ca"
- integrity sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg==
+"@swc/core-linux-x64-gnu@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz#3476beab93ab03e92844d955ca9d9289aa4a5993"
+ integrity sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==
-"@swc/core-linux-x64-musl@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.7.tgz#8e4c203d6bc41e7f85d7d34d0fdf4ef751fa626c"
- integrity sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg==
+"@swc/core-linux-x64-musl@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz#f4934b1e77e2a297909bb3ab977836205c36e5e0"
+ integrity sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==
-"@swc/core-win32-arm64-msvc@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.7.tgz#31e3d42b8c0aa79f0ea1a980c0dd1a999d378ed7"
- integrity sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA==
+"@swc/core-win32-arm64-msvc@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz#5084c107435cfc82d4d901bfb388dc319d38a236"
+ integrity sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==
-"@swc/core-win32-ia32-msvc@1.5.7":
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.7.tgz#a235285f9f62850aefcf9abb03420f2c54f63638"
- integrity sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ==
+"@swc/core-win32-ia32-msvc@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz#f8b2e28bc51b30467e316ed736a130c1324b9880"
+ integrity sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==
-"@swc/core-win32-x64-msvc@1.5.7":
- version "1.5.7"
- resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.7.tgz"
- integrity sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg==
+"@swc/core-win32-x64-msvc@1.13.5":
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz#13883cf3c63bf11b787e28dcdf75ca0cc49efa83"
+ integrity sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==
"@swc/core@^1.4.16":
- version "1.5.7"
- resolved "https://registry.npmjs.org/@swc/core/-/core-1.5.7.tgz"
- integrity sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ==
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.5.tgz#93874b831d3bd121560e6fcd688972b7fc7baa26"
+ integrity sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==
dependencies:
- "@swc/counter" "^0.1.2"
- "@swc/types" "0.1.7"
+ "@swc/counter" "^0.1.3"
+ "@swc/types" "^0.1.24"
optionalDependencies:
- "@swc/core-darwin-arm64" "1.5.7"
- "@swc/core-darwin-x64" "1.5.7"
- "@swc/core-linux-arm-gnueabihf" "1.5.7"
- "@swc/core-linux-arm64-gnu" "1.5.7"
- "@swc/core-linux-arm64-musl" "1.5.7"
- "@swc/core-linux-x64-gnu" "1.5.7"
- "@swc/core-linux-x64-musl" "1.5.7"
- "@swc/core-win32-arm64-msvc" "1.5.7"
- "@swc/core-win32-ia32-msvc" "1.5.7"
- "@swc/core-win32-x64-msvc" "1.5.7"
+ "@swc/core-darwin-arm64" "1.13.5"
+ "@swc/core-darwin-x64" "1.13.5"
+ "@swc/core-linux-arm-gnueabihf" "1.13.5"
+ "@swc/core-linux-arm64-gnu" "1.13.5"
+ "@swc/core-linux-arm64-musl" "1.13.5"
+ "@swc/core-linux-x64-gnu" "1.13.5"
+ "@swc/core-linux-x64-musl" "1.13.5"
+ "@swc/core-win32-arm64-msvc" "1.13.5"
+ "@swc/core-win32-ia32-msvc" "1.13.5"
+ "@swc/core-win32-x64-msvc" "1.13.5"
-"@swc/counter@^0.1.2", "@swc/counter@^0.1.3":
+"@swc/counter@^0.1.3":
version "0.1.3"
- resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz"
+ resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9"
integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
-"@swc/types@0.1.7":
- version "0.1.7"
- resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.7.tgz"
- integrity sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==
+"@swc/types@^0.1.24":
+ version "0.1.25"
+ resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.25.tgz#b517b2a60feb37dd933e542d93093719e4cf1078"
+ integrity sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==
dependencies:
"@swc/counter" "^0.1.3"
"@szmarczak/http-timer@^4.0.5":
version "4.0.6"
- resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
dependencies:
defer-to-connect "^2.0.0"
@@ -2840,6 +2866,201 @@
dependencies:
uint8-util "^2.2.5"
+"@tiptap/core@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-3.6.7.tgz#77ececdbe3379c02c594fda7fe4d3732dd79af28"
+ integrity sha512-Br3huqItnCkxjrt7EiIRMVd+dPfGRvy+ZTekRCofRzNioVtyRWRLH1KYM7cZ2z04wkDKA47E+j9Dr1z1aq474g==
+
+"@tiptap/extension-blockquote@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-3.6.7.tgz#79ddf3796433de54f61297d69b0461c5ab82fec5"
+ integrity sha512-8IdRy7ixrUVVbiaaJBx7p6KRyJQDRezKL+mklkKEd2srK0ApCdQSjqnBbYQ20lkDMC6o35Jw+ZhHy/TdnmLscg==
+
+"@tiptap/extension-bold@^3.6.2", "@tiptap/extension-bold@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-3.6.7.tgz#7d2f3763b259bfe18df318e90f4e61e0a670aefe"
+ integrity sha512-K07qJY9uwcmjnh56l3Qj9ma0R8OffigMKXn0PKMtQ5exaRDuZFiHirCOw85u8iqLjVpx0hsZJ3gumP4RO+a31Q==
+
+"@tiptap/extension-bubble-menu@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.6.7.tgz#88ea4aa1c8f8a9c5d118ae5143b2cec978e2509b"
+ integrity sha512-5hn++5eZYUKhoEfAhpzq/0qQDThD/WZfdEUnual+xAgfYG6MXPeJhHfmNDjOlCpM2ld5p7ap38N273rnr4yulQ==
+ dependencies:
+ "@floating-ui/dom" "^1.0.0"
+
+"@tiptap/extension-bullet-list@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-3.6.7.tgz#3926ae219b214cc3327e439fdb06797a29b7e3e7"
+ integrity sha512-ISuKxSNEJsTVglvbolBbrG8OvAAg/xC1EYtaDArDMcRdhi1UR9uy+u5ZkJBgoTIWPp2cvCnqnaCL8VH7vk4JAg==
+
+"@tiptap/extension-code-block@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-3.6.7.tgz#769ea88fcba8be9feabc3087861dc761fef18045"
+ integrity sha512-BRNAxkkv6YNUnfpovR3RfLahqmvXqvRVvIIhgdMDt7/ifIY8CCdf+y/Fh3hVMi/QB71uZ1IMvrm1ikKm+w6rQg==
+
+"@tiptap/extension-code@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-3.6.7.tgz#160ee044f12c182f773ae728ac8a7a5f97dcdea6"
+ integrity sha512-wCzd5NxxuRUGZteevy2R4Y1frBVMVmYwHl+kmTwOJw8tZ6+tuKQn/6+KpDiLfia4tQXfgH3YxuV0o/ArlD5yOQ==
+
+"@tiptap/extension-document@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-3.6.7.tgz#d9ee2e40e3d3b107bd9a8e44f5681421e38f006a"
+ integrity sha512-Tlxf8tbViD57nlqzDyE/QwS4HGpwlqCFS1qD0tayoqpJqaVO5DvBS8XWFCYIQx8bQqaNsfPvTzjICXIPFOr0Rw==
+
+"@tiptap/extension-dropcursor@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-3.6.7.tgz#937d1adffdf3782c61ff941e0b2182929fb7dc44"
+ integrity sha512-m3OF468rQCFq0kPIsKJl/nLgJjGTK0Sb6jLzVb692KOWnvWsGcREiRCuYnDHoym0TrOem/kyFqtrB4kCq8Xchw==
+
+"@tiptap/extension-floating-menu@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-3.6.7.tgz#9892c04b9e9f530dd5ddc095a2c4ef6fd4921be1"
+ integrity sha512-e/CM70p4Xld6uRJY5ke+VhezDLF8rU7Dvi5IHMblAF6NiupC9wCgWYZUsQDVfoGo4Ky9b+c54Ybnan2XGBkIRg==
+
+"@tiptap/extension-gapcursor@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-3.6.7.tgz#be296c794b0375cbe01a8033217c13ab49774e77"
+ integrity sha512-n8dtV7wmmrtMCdOww/ZJZX+nzQexDONIlxz3lckKn0HJ7OoZz9YKvcx8tcEbbKcGAPkl6j9dsRDxxVqXiKGhlw==
+
+"@tiptap/extension-hard-break@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-3.6.7.tgz#300d3e7341a5737492ab354589f2503b5425263c"
+ integrity sha512-Jlzi5KPCylrSIrlYRxLC33OLlu/8p9rv0EsKPB04OXcr/Oyy9Z0X2/yTWzoNUma6cMpqikLAGQhQZ1rpGDKygw==
+
+"@tiptap/extension-heading@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-3.6.7.tgz#ca02310eb07b4cb093bdd2754b3bb1ee5263ceb1"
+ integrity sha512-uuAkZ+WXr6jZ7x75Vim20V9o5RbaZmFAj/HjKjw6xgSUcMDL7dWdKNGO2v20iv6o8+MyZtD4ZCW0qfq401nA/Q==
+
+"@tiptap/extension-horizontal-rule@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.6.7.tgz#26ea71e9d754403097eb43eb24b427159fae551c"
+ integrity sha512-ISUlP+OhhFiITNPwRP2MJPXtI0yobCeXnyMQDmI5of9j79N+ckq8CuEt/Ab3KS4hMM74dkBbsN0AGzyI60lLSQ==
+
+"@tiptap/extension-italic@^3.6.2", "@tiptap/extension-italic@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-3.6.7.tgz#bef77575431f39c69ab55ca44a7ac582371ea421"
+ integrity sha512-aLLMLHyDN1ZD5dyR7NyDArbDllF4YLPLosq0+fqFT0UW5TpEG+d8pcRkvt8bA38Ih9AUQKTX9gzutfmOhX+xOw==
+
+"@tiptap/extension-link@^3.6.2", "@tiptap/extension-link@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-3.6.7.tgz#01e2e70a6a18990dad8f38c95969cb609b154db2"
+ integrity sha512-Zu3tAkyd82efPGxyyBhx+J2Fl214lUu2pFD9683PagyCeoQY+xBx8vRAKMvu2zerRnN60IYuKzSM4OX4kGNgUQ==
+ dependencies:
+ linkifyjs "^4.3.2"
+
+"@tiptap/extension-list-item@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-3.6.7.tgz#d1e2aa272a6b1d1f3fd8eb1fd352175cb8029625"
+ integrity sha512-eT88D37qRJz3GFD+6jc6OxTRfo+ovdx6X1mRJ+JQnCnYO8FCczG/4uQgiW/0rYUJH/RS9kAaTJHDIXTgxdfMyA==
+
+"@tiptap/extension-list-keymap@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-list-keymap/-/extension-list-keymap-3.6.7.tgz#bc0dffecac8896fc6cd6b7c59414628d0413b362"
+ integrity sha512-UE9FLi6lnp+qgRy2lAdu71i6YRdXWWm0DVUoDvcHxDgpCBLZqJ4ucXeJfV3vpqYUC452LwMAzxV809akyeFlsg==
+
+"@tiptap/extension-list@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-list/-/extension-list-3.6.7.tgz#5baa2dad49174d2e9b882866e77da62ce787b601"
+ integrity sha512-hF6/cTc6qKqm92Y9B8Cu2jUKzt6RSVqkPS9LFVOjTn0v/5FpzTpFsEDAs67i+PoOxKRnN6kZAs4b+QSWppgmMQ==
+
+"@tiptap/extension-ordered-list@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-3.6.7.tgz#497cfc94b258a383dc96391dcc99fe91ed54439c"
+ integrity sha512-TmoT6HpwhVVSSnv0fq9ppqeJM4WEe2QvDSJ1a17KVrsm3Gc94obL79RG84dlfCgq8QTk6gKcZGPwer5YokfS/A==
+
+"@tiptap/extension-paragraph@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-3.6.7.tgz#3b6738b72f1ed21f8eb46817e4c08bc1ec0589d4"
+ integrity sha512-ZfM0s719Ht4sDv1UdXiTxbElfiLFbdjyEBUQ60t2Gog2XOe6C9MJiUOF0QFqphr6eLdx29PHQh9SJjrsJ8Rgog==
+
+"@tiptap/extension-strike@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-3.6.7.tgz#49a0e0ad29cc0c247f1856562a9ad817195572bf"
+ integrity sha512-WPaaSVroPqNvxZ3KgA3jz1DI/GcGOwU2ra+gjamge+YVWJAS4vxmvWsoqs4z6m8RFFOXg5cv+VCSjTFDNd12tw==
+
+"@tiptap/extension-text@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-3.6.7.tgz#4475c8aefc893a22fff27bbe2dad3d03ce532305"
+ integrity sha512-xkEduL3icFW2Wk0FUMLS9BCMatinEit/ALJ1XY/5J3QjCIH4pPHjiF8sXB+xv1numnxDSoU+8iVuTf4n2oDygg==
+
+"@tiptap/extension-underline@^3.6.2", "@tiptap/extension-underline@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-3.6.7.tgz#ffc0bda5f80fda3162d875cb66ce08e769c94daf"
+ integrity sha512-D3gJl7oPSDPgNa/QspPhw/fd9SUde1jh5bVPnsI/Fywmd68oGrGhAXZxErBfxfQwjfmRrY8aB82g8CXIC8JEeg==
+
+"@tiptap/extensions@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extensions/-/extensions-3.6.7.tgz#05ecf20b63af8d00b50167c8399e82538acfe808"
+ integrity sha512-078CbHYbTdPt7cPf2dJpoR2rEDs3NXivAtaV+U5YF/17sUKNdrJ8kEaD3P3RT7vVKKJlWaTfttz5X68C0M7iBg==
+
+"@tiptap/pm@^3.6.7":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-3.6.7.tgz#2014aabae3518cf91cff0cb30dc6fc99bf8168bb"
+ integrity sha512-M657tCIM8R86aNhslgTa1Dt46IECdRh0fWdopUY4GgeQNHFb/UXfBUqJI33IEZhspWYF30x7h0W+mrJ4Jr15WA==
+ dependencies:
+ prosemirror-changeset "^2.3.0"
+ prosemirror-collab "^1.3.1"
+ prosemirror-commands "^1.6.2"
+ prosemirror-dropcursor "^1.8.1"
+ prosemirror-gapcursor "^1.3.2"
+ prosemirror-history "^1.4.1"
+ prosemirror-inputrules "^1.4.0"
+ prosemirror-keymap "^1.2.2"
+ prosemirror-markdown "^1.13.1"
+ prosemirror-menu "^1.2.4"
+ prosemirror-model "^1.24.1"
+ prosemirror-schema-basic "^1.2.3"
+ prosemirror-schema-list "^1.5.0"
+ prosemirror-state "^1.4.3"
+ prosemirror-tables "^1.6.4"
+ prosemirror-trailing-node "^3.0.0"
+ prosemirror-transform "^1.10.2"
+ prosemirror-view "^1.38.1"
+
+"@tiptap/react@^3.6.2":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-3.6.7.tgz#62bfdc07787737dca20fd27a95904186ece52c69"
+ integrity sha512-PbSPjbPb1kWhr6VeCuk4Q2kQ6hlk9AN2mZK8cyT3O2ztHLVbcMW2hXrHTtNulN5JWUZlzZ4N/o1UVKo3iR+9dA==
+ dependencies:
+ "@types/use-sync-external-store" "^0.0.6"
+ fast-deep-equal "^3.1.3"
+ use-sync-external-store "^1.4.0"
+ optionalDependencies:
+ "@tiptap/extension-bubble-menu" "^3.6.7"
+ "@tiptap/extension-floating-menu" "^3.6.7"
+
+"@tiptap/starter-kit@^3.6.2":
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-3.6.7.tgz#0f1d2e69e1b3650a82375d4133d94fde67bb3c96"
+ integrity sha512-ROpQPMDJzEyNTJGUXML9VQzuhz0u7ojNi72mEXk0WkNgfAD0RnKVvTb40pI+oyjfbuSfNFfxEQCUWrJJyuFGFA==
+ dependencies:
+ "@tiptap/core" "^3.6.7"
+ "@tiptap/extension-blockquote" "^3.6.7"
+ "@tiptap/extension-bold" "^3.6.7"
+ "@tiptap/extension-bullet-list" "^3.6.7"
+ "@tiptap/extension-code" "^3.6.7"
+ "@tiptap/extension-code-block" "^3.6.7"
+ "@tiptap/extension-document" "^3.6.7"
+ "@tiptap/extension-dropcursor" "^3.6.7"
+ "@tiptap/extension-gapcursor" "^3.6.7"
+ "@tiptap/extension-hard-break" "^3.6.7"
+ "@tiptap/extension-heading" "^3.6.7"
+ "@tiptap/extension-horizontal-rule" "^3.6.7"
+ "@tiptap/extension-italic" "^3.6.7"
+ "@tiptap/extension-link" "^3.6.7"
+ "@tiptap/extension-list" "^3.6.7"
+ "@tiptap/extension-list-item" "^3.6.7"
+ "@tiptap/extension-list-keymap" "^3.6.7"
+ "@tiptap/extension-ordered-list" "^3.6.7"
+ "@tiptap/extension-paragraph" "^3.6.7"
+ "@tiptap/extension-strike" "^3.6.7"
+ "@tiptap/extension-text" "^3.6.7"
+ "@tiptap/extension-underline" "^3.6.7"
+ "@tiptap/extensions" "^3.6.7"
+ "@tiptap/pm" "^3.6.7"
+
"@tokenizer/inflate@^0.2.6":
version "0.2.7"
resolved "https://registry.yarnpkg.com/@tokenizer/inflate/-/inflate-0.2.7.tgz#32dd9dfc9abe457c89b3d9b760fc0690c85a103b"
@@ -2856,7 +3077,7 @@
"@tootallnate/once@2":
version "2.0.0"
- resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
"@tsconfig/node10@^1.0.7":
@@ -2881,12 +3102,12 @@
"@types/auto-launch@^5.0.5":
version "5.0.5"
- resolved "https://registry.npmjs.org/@types/auto-launch/-/auto-launch-5.0.5.tgz"
+ resolved "https://registry.yarnpkg.com/@types/auto-launch/-/auto-launch-5.0.5.tgz#439ed36aaaea501e2e2cfbddd8a20c366c34863b"
integrity sha512-/nGvQZSzM/pvCMCh4Gt2kIeiUmOP/cKGJbjlInI+A+5MoV/7XmT56DJ6EU8bqc3+ItxEe4UC2GVspmPzcCc8cg==
"@types/babel__core@^7.20.5":
version "7.20.5"
- resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
dependencies:
"@babel/parser" "^7.20.7"
@@ -2896,30 +3117,30 @@
"@types/babel__traverse" "*"
"@types/babel__generator@*":
- version "7.6.8"
- resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz"
- integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9"
+ integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==
dependencies:
"@babel/types" "^7.0.0"
"@types/babel__template@*":
version "7.4.4"
- resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
"@types/babel__traverse@*":
- version "7.20.5"
- resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz"
- integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==
+ version "7.28.0"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74"
+ integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==
dependencies:
- "@babel/types" "^7.20.7"
+ "@babel/types" "^7.28.2"
"@types/cacheable-request@^6.0.1":
version "6.0.3"
- resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz"
+ resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
dependencies:
"@types/http-cache-semantics" "*"
@@ -2928,66 +3149,53 @@
"@types/responselike" "^1.0.0"
"@types/color-convert@*":
- version "2.0.3"
- resolved "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.3.tgz"
- integrity sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.4.tgz#843398ae71e951dc5415d202dfd5e43108823eeb"
+ integrity sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ==
dependencies:
- "@types/color-name" "*"
+ "@types/color-name" "^1.1.0"
-"@types/color-name@*":
- version "1.1.4"
- resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.4.tgz"
- integrity sha512-hulKeREDdLFesGQjl96+4aoJSHY5b2GRjagzzcqCfIrWhe5vkCqIvrLbqzBaI1q94Vg8DNJZZqTR5ocdWmWclg==
+"@types/color-name@^1.1.0":
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.5.tgz#3a3510c4e3661f7707c5ae9c67d726986e6e147d"
+ integrity sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg==
"@types/color@^3.0.6":
version "3.0.6"
- resolved "https://registry.npmjs.org/@types/color/-/color-3.0.6.tgz"
+ resolved "https://registry.yarnpkg.com/@types/color/-/color-3.0.6.tgz#29c27a99d4de2975e1676712679a0bd7f646a3fb"
integrity sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A==
dependencies:
"@types/color-convert" "*"
"@types/conventional-commits-parser@^5.0.0":
- version "5.0.0"
- resolved "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz"
- integrity sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz#8cb81cf170853496cbc501a3b32dcf5e46ffb61a"
+ integrity sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==
dependencies:
"@types/node" "*"
"@types/debug@^4.1.6":
version "4.1.12"
- resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917"
integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==
dependencies:
"@types/ms" "*"
-"@types/estree@1.0.6":
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
- integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
-
-"@types/estree@^1.0.0":
- version "1.0.5"
- resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz"
- integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
+"@types/estree@1.0.8", "@types/estree@^1.0.0":
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
+ integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11":
version "9.0.13"
- resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz"
+ resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
dependencies:
"@types/node" "*"
-"@types/glob@^7.1.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
- integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
- dependencies:
- "@types/minimatch" "*"
- "@types/node" "*"
-
"@types/http-cache-semantics@*":
version "4.0.4"
- resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz"
+ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
"@types/jsdom@^21.1.7":
@@ -3000,73 +3208,93 @@
parse5 "^7.0.0"
"@types/jsonwebtoken@^9.0.8":
- version "9.0.8"
- resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.8.tgz#313490052801edfb031bb32b6bbd77cc9f230852"
- integrity sha512-7fx54m60nLFUVYlxAB1xpe9CBWX2vSrk50Y6ogRJ1v5xxtba7qXTg5BgYDN5dq+yuQQ9HaVlHJyAAt1/mxryFg==
+ version "9.0.10"
+ resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09"
+ integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==
dependencies:
"@types/ms" "*"
"@types/node" "*"
"@types/keyv@^3.1.4":
version "3.1.4"
- resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz"
+ resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
dependencies:
"@types/node" "*"
+"@types/linkify-it@^5":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76"
+ integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==
+
"@types/lodash-es@^4.17.12":
version "4.17.12"
- resolved "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz"
+ resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b"
integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==
dependencies:
"@types/lodash" "*"
"@types/lodash@*":
- version "4.17.3"
- resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.3.tgz"
- integrity sha512-zmNrEJaBvNskZXQWaUQq6bktF4IDGVfDS78M+YEk5aCn9M/b94/mB/6WCyfH2/MjwBdc6QuOor95CIlKWYRL3A==
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.20.tgz#1ca77361d7363432d29f5e55950d9ec1e1c6ea93"
+ integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==
"@types/magnet-uri@*":
version "5.1.5"
- resolved "https://registry.npmjs.org/@types/magnet-uri/-/magnet-uri-5.1.5.tgz"
+ resolved "https://registry.yarnpkg.com/@types/magnet-uri/-/magnet-uri-5.1.5.tgz#8034da138edb41f007729ff18c76e0454df42438"
integrity sha512-SbBjlb1KGe38VfjRR+mwqztJd/4skhdKkRbIzPDhTy7IAeEAPZWIVSEkZw00Qr4ZZOGR3/ATJ20WWPBfrKHGdA==
dependencies:
"@types/node" "*"
-"@types/minimatch@*":
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
- integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
+"@types/markdown-it@^14.0.0":
+ version "14.1.2"
+ resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61"
+ integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==
+ dependencies:
+ "@types/linkify-it" "^5"
+ "@types/mdurl" "^2"
+
+"@types/mdurl@^2":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd"
+ integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==
"@types/ms@*":
- version "0.7.34"
- resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz"
- integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78"
+ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
-"@types/node@*", "@types/node@^20.12.7":
- version "20.12.12"
- resolved "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz"
- integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==
+"@types/node@*":
+ version "24.7.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-24.7.2.tgz#5adf66b6e2ac5cab1d10a2ad3682e359cb652f4a"
+ integrity sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==
dependencies:
- undici-types "~5.26.4"
+ undici-types "~7.14.0"
-"@types/node@^20.9.0":
- version "20.13.0"
- resolved "https://registry.npmjs.org/@types/node/-/node-20.13.0.tgz"
- integrity sha512-FM6AOb3khNkNIXPnHFDYaHerSv8uN22C91z098AnGccVu+Pcdhi+pNUFDi0iLmPIsVE0JBD0KVS7mzUYt4nRzQ==
+"@types/node@^20.12.7":
+ version "20.19.21"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.21.tgz#6e5378e04993c40395473b13baf94a09875157b8"
+ integrity sha512-CsGG2P3I5y48RPMfprQGfy4JPRZ6csfC3ltBZSRItG3ngggmNY/qs2uZKp4p9VbrpqNNSMzUZNFZKzgOGnd/VA==
dependencies:
- undici-types "~5.26.4"
+ undici-types "~6.21.0"
+
+"@types/node@^22.7.7":
+ version "22.18.12"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.12.tgz#e165d87bc25d7bf6d3657035c914db7485de84fb"
+ integrity sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==
+ dependencies:
+ undici-types "~6.21.0"
"@types/parse-torrent-file@*":
version "4.0.6"
- resolved "https://registry.npmjs.org/@types/parse-torrent-file/-/parse-torrent-file-4.0.6.tgz"
+ resolved "https://registry.yarnpkg.com/@types/parse-torrent-file/-/parse-torrent-file-4.0.6.tgz#11801dfd5b0a017302a164b72c8869f2bcba15b1"
integrity sha512-SxqVth0Iv0WuEkqWS5MaY4S4Tlyi+QHkElQREvsUPw2xHcPgKyQ2dkJRRv5vAxmLzH+tnMdOj1Nws/wsenbzUw==
dependencies:
"@types/node" "*"
"@types/parse-torrent@^5.8.7":
version "5.8.7"
- resolved "https://registry.npmjs.org/@types/parse-torrent/-/parse-torrent-5.8.7.tgz"
+ resolved "https://registry.yarnpkg.com/@types/parse-torrent/-/parse-torrent-5.8.7.tgz#68bca7701201a67568fdc7f194bdf3f2a49c2c11"
integrity sha512-vZtYe450hO+KL7B5fejM8CHWg1LPZKeVXlolphPsWf6n4H0ZUlI6ICbqHoaFmH7JQmU2yRbGgyvqqizdFuGPFQ==
dependencies:
"@types/magnet-uri" "*"
@@ -3082,28 +3310,26 @@
xmlbuilder ">=11.0.1"
"@types/prop-types@*":
- version "15.7.12"
- resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz"
- integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==
+ version "15.7.15"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7"
+ integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==
"@types/react-dom@^18.2.18":
- version "18.3.0"
- resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz"
- integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==
- dependencies:
- "@types/react" "*"
+ version "18.3.7"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f"
+ integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==
-"@types/react@*", "@types/react@^18.2.48":
- version "18.3.2"
- resolved "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz"
- integrity sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==
+"@types/react@^18.2.48":
+ version "18.3.26"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.26.tgz#4c5970878d30db3d2a0bca1e4eb5f258e391bbeb"
+ integrity sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==
dependencies:
"@types/prop-types" "*"
csstype "^3.0.2"
"@types/responselike@^1.0.0":
version "1.0.3"
- resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz"
+ resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==
dependencies:
"@types/node" "*"
@@ -3117,23 +3343,23 @@
"@types/tough-cookie@*":
version "4.0.5"
- resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz"
+ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304"
integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==
-"@types/use-sync-external-store@^0.0.3":
- version "0.0.3"
- resolved "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz"
- integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==
+"@types/use-sync-external-store@^0.0.6":
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc"
+ integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==
"@types/user-agents@^1.0.4":
version "1.0.4"
- resolved "https://registry.npmjs.org/@types/user-agents/-/user-agents-1.0.4.tgz"
+ resolved "https://registry.yarnpkg.com/@types/user-agents/-/user-agents-1.0.4.tgz#49bf6760d9ca3858d91e6258835bf2c329b87cf0"
integrity sha512-AjeFc4oX5WPPflgKfRWWJfkEk7Wu82fnj1rROPsiqFt6yElpdGFg8Srtm/4PU4rA9UiDUZlruGPgcwTMQlwq4w==
"@types/verror@^1.10.3":
- version "1.10.10"
- resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087"
- integrity sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==
+ version "1.10.11"
+ resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.11.tgz#d3d6b418978c8aa202d41e5bb3483227b6ecc1bb"
+ integrity sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==
"@types/winreg@^1.2.36":
version "1.2.36"
@@ -3149,7 +3375,7 @@
"@types/yauzl@^2.9.1":
version "2.10.3"
- resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz"
+ resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999"
integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==
dependencies:
"@types/node" "*"
@@ -3235,30 +3461,38 @@
"@typescript-eslint/types" "7.18.0"
eslint-visitor-keys "^3.4.3"
+"@typescript/vfs@^1.5.2":
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@typescript/vfs/-/vfs-1.6.1.tgz#fe7087d5a43715754f7ea9bf6e0b905176c9eebd"
+ integrity sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==
+ dependencies:
+ debug "^4.1.1"
+
"@ungap/structured-clone@^1.2.0":
- version "1.2.0"
- resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz"
- integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
+ integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
"@vitejs/plugin-react@^4.2.1":
- version "4.2.1"
- resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz"
- integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz#647af4e7bb75ad3add578e762ad984b90f4a24b9"
+ integrity sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==
dependencies:
- "@babel/core" "^7.23.5"
- "@babel/plugin-transform-react-jsx-self" "^7.23.3"
- "@babel/plugin-transform-react-jsx-source" "^7.23.3"
+ "@babel/core" "^7.28.0"
+ "@babel/plugin-transform-react-jsx-self" "^7.27.1"
+ "@babel/plugin-transform-react-jsx-source" "^7.27.1"
+ "@rolldown/pluginutils" "1.0.0-beta.27"
"@types/babel__core" "^7.20.5"
- react-refresh "^0.14.0"
+ react-refresh "^0.17.0"
"@xmldom/xmldom@^0.8.8":
- version "0.8.10"
- resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz"
- integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
+ version "0.8.11"
+ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.11.tgz#b79de2d67389734c57c52595f7a7305e30c2d608"
+ integrity sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==
JSONStream@^1.3.5:
version "1.3.5"
- resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
dependencies:
jsonparse "^1.2.0"
@@ -3271,7 +3505,7 @@ abbrev@^1.0.0:
abort-controller@^3.0.0:
version "3.0.0"
- resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
dependencies:
event-target-shim "^5.0.0"
@@ -3290,49 +3524,37 @@ abstract-level@^2.0.0:
acorn-jsx@^5.3.2:
version "5.3.2"
- resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn-walk@^8.1.1:
- version "8.3.3"
- resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e"
- integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7"
+ integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==
dependencies:
acorn "^8.11.0"
-acorn@^8.11.0, acorn@^8.4.1:
- version "8.12.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
- integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
-
-acorn@^8.9.0:
- version "8.11.3"
- resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz"
- integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+acorn@^8.11.0, acorn@^8.4.1, acorn@^8.9.0:
+ version "8.15.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
+ integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
agent-base@6, agent-base@^6.0.2:
version "6.0.2"
- resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
dependencies:
debug "4"
-agent-base@^7.0.2, agent-base@^7.1.0:
- version "7.1.1"
- resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz"
- integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
- dependencies:
- debug "^4.3.4"
-
-agent-base@^7.1.3:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1"
- integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==
+agent-base@^7.1.0, agent-base@^7.1.2, agent-base@^7.1.3:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8"
+ integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
agentkeepalive@^4.2.1:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
- integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a"
+ integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==
dependencies:
humanize-ms "^1.2.1"
@@ -3346,12 +3568,12 @@ aggregate-error@^3.0.0:
ajv-keywords@^3.4.1:
version "3.5.2"
- resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4:
version "6.12.6"
- resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
dependencies:
fast-deep-equal "^3.1.1"
@@ -3360,43 +3582,36 @@ ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4:
uri-js "^4.2.2"
ajv@^8.11.0:
- version "8.13.0"
- resolved "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz"
- integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==
+ version "8.17.1"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6"
+ integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
dependencies:
fast-deep-equal "^3.1.3"
+ fast-uri "^3.0.1"
json-schema-traverse "^1.0.0"
require-from-string "^2.0.2"
- uri-js "^4.4.1"
ansi-regex@^5.0.1:
version "5.0.1"
- resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
ansi-regex@^6.0.1:
- version "6.0.1"
- resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz"
- integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1"
+ integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
- resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041"
+ integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
app-builder-bin@5.0.0-alpha.12:
version "5.0.0-alpha.12"
@@ -3444,7 +3659,7 @@ app-builder-lib@26.0.12:
applescript@^1.0.0:
version "1.0.0"
- resolved "https://registry.npmjs.org/applescript/-/applescript-1.0.0.tgz"
+ resolved "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz#bb87af568cad034a4e48c4bdaf6067a3a2701317"
integrity sha512-yvtNHdWvtbYEiIazXAdp/NY+BBb65/DAseqlNiJQjOx9DynuzOYDbVLBJvuc0ve0VL9x6B3OHF6eH52y9hCBtQ==
arg@^4.1.0:
@@ -3457,10 +3672,10 @@ argparse@^2.0.1:
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-aria-hidden@^1.1.1:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522"
- integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==
+aria-hidden@^1.2.4:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a"
+ integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==
dependencies:
tslib "^2.0.0"
@@ -3469,15 +3684,7 @@ aria-query@^5.3.2:
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59"
integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==
-array-buffer-byte-length@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f"
- integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==
- dependencies:
- call-bind "^1.0.5"
- is-array-buffer "^3.0.4"
-
-array-buffer-byte-length@^1.0.2:
+array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b"
integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==
@@ -3491,16 +3698,18 @@ array-ify@^1.0.0:
integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==
array-includes@^3.1.6, array-includes@^3.1.8:
- version "3.1.8"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d"
- integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==
+ version "3.1.9"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a"
+ integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==
dependencies:
- call-bind "^1.0.7"
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
define-properties "^1.2.1"
- es-abstract "^1.23.2"
- es-object-atoms "^1.0.0"
- get-intrinsic "^1.2.4"
- is-string "^1.0.7"
+ es-abstract "^1.24.0"
+ es-object-atoms "^1.1.1"
+ get-intrinsic "^1.3.0"
+ is-string "^1.1.1"
+ math-intrinsics "^1.1.0"
array-union@^2.1.0:
version "2.1.0"
@@ -3520,26 +3729,16 @@ array.prototype.findlast@^1.2.5:
es-shim-unscopables "^1.0.2"
array.prototype.flat@^1.3.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18"
- integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5"
+ integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- es-shim-unscopables "^1.0.0"
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-shim-unscopables "^1.0.2"
-array.prototype.flatmap@^1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527"
- integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- es-shim-unscopables "^1.0.0"
-
-array.prototype.flatmap@^1.3.3:
+array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b"
integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==
@@ -3560,20 +3759,6 @@ array.prototype.tosorted@^1.1.4:
es-errors "^1.3.0"
es-shim-unscopables "^1.0.2"
-arraybuffer.prototype.slice@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6"
- integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==
- dependencies:
- array-buffer-byte-length "^1.0.1"
- call-bind "^1.0.5"
- define-properties "^1.2.1"
- es-abstract "^1.22.3"
- es-errors "^1.2.1"
- get-intrinsic "^1.2.3"
- is-array-buffer "^3.0.4"
- is-shared-array-buffer "^1.0.2"
-
arraybuffer.prototype.slice@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c"
@@ -3607,7 +3792,12 @@ async-exit-hook@^2.0.1:
resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3"
integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==
-async@^3.2.3:
+async-function@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b"
+ integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==
+
+async@^3.2.6:
version "3.2.6"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
@@ -3641,9 +3831,9 @@ available-typed-arrays@^1.0.7:
possible-typed-array-names "^1.0.0"
axe-core@^4.10.0:
- version "4.10.0"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59"
- integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==
+ version "4.11.0"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.11.0.tgz#16f74d6482e343ff263d4f4503829e9ee91a86b6"
+ integrity sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==
axios-cookiejar-support@^5.0.5:
version "5.0.5"
@@ -3652,13 +3842,13 @@ axios-cookiejar-support@^5.0.5:
dependencies:
http-cookie-agent "^6.0.8"
-axios@^1.7.9:
- version "1.7.9"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a"
- integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==
+axios@^1.12.2:
+ version "1.12.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7"
+ integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==
dependencies:
follow-redirects "^1.15.6"
- form-data "^4.0.0"
+ form-data "^4.0.4"
proxy-from-env "^1.1.0"
axobject-query@^4.1.0:
@@ -3681,6 +3871,11 @@ base64-js@^1.3.1, base64-js@^1.5.1:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+baseline-browser-mapping@^2.8.9:
+ version "2.8.16"
+ resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz#e17789673e7f4b7654f81ab2ef25e96ab6a895f9"
+ integrity sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==
+
bencode@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/bencode/-/bencode-4.0.0.tgz#36ca0bc366290dad002215fc52fc74edf4eb0625"
@@ -3708,22 +3903,22 @@ boolean@^3.0.1:
integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
bowser@^2.11.0:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f"
- integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==
+ version "2.12.1"
+ resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.12.1.tgz#f9ad78d7aebc472feb63dd9635e3ce2337e0e2c1"
+ integrity sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==
brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
+ integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7"
+ integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
dependencies:
balanced-match "^1.0.0"
@@ -3734,25 +3929,16 @@ braces@^3.0.3:
dependencies:
fill-range "^7.1.1"
-browserslist@^4.22.2:
- version "4.24.0"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4"
- integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==
- dependencies:
- caniuse-lite "^1.0.30001663"
- electron-to-chromium "^1.5.28"
- node-releases "^2.0.18"
- update-browserslist-db "^1.1.0"
-
browserslist@^4.24.0:
- version "4.24.3"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2"
- integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==
+ version "4.26.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.3.tgz#40fbfe2d1cd420281ce5b1caa8840049c79afb56"
+ integrity sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==
dependencies:
- caniuse-lite "^1.0.30001688"
- electron-to-chromium "^1.5.73"
- node-releases "^2.0.19"
- update-browserslist-db "^1.1.1"
+ baseline-browser-mapping "^2.8.9"
+ caniuse-lite "^1.0.30001746"
+ electron-to-chromium "^1.5.227"
+ node-releases "^2.0.21"
+ update-browserslist-db "^1.1.3"
buffer-builder@^0.2.0:
version "0.2.0"
@@ -3764,7 +3950,7 @@ buffer-crc32@~0.2.3:
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
-buffer-equal-constant-time@1.0.1:
+buffer-equal-constant-time@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
@@ -3868,26 +4054,15 @@ cacheable-request@^7.0.2:
normalize-url "^6.0.1"
responselike "^2.0.0"
-call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840"
- integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==
+call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
+ integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
dependencies:
es-errors "^1.3.0"
function-bind "^1.1.2"
-call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
- integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
- dependencies:
- es-define-property "^1.0.0"
- es-errors "^1.3.0"
- function-bind "^1.1.2"
- get-intrinsic "^1.2.4"
- set-function-length "^1.2.1"
-
-call-bind@^1.0.8:
+call-bind@^1.0.7, call-bind@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c"
integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==
@@ -3897,21 +4072,13 @@ call-bind@^1.0.8:
get-intrinsic "^1.2.4"
set-function-length "^1.2.2"
-call-bound@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.2.tgz#9dbd4daf9f5f753bec3e4c8fbb8a2ecc4de6c39b"
- integrity sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==
+call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
+ integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
dependencies:
- call-bind "^1.0.8"
- get-intrinsic "^1.2.5"
-
-call-bound@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681"
- integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==
- dependencies:
- call-bind-apply-helpers "^1.0.1"
- get-intrinsic "^1.2.6"
+ call-bind-apply-helpers "^1.0.2"
+ get-intrinsic "^1.3.0"
callsites@^3.0.0:
version "3.1.0"
@@ -3923,26 +4090,12 @@ camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-caniuse-lite@^1.0.30001663:
- version "1.0.30001664"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz#d588d75c9682d3301956b05a3749652a80677df4"
- integrity sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==
+caniuse-lite@^1.0.30001746:
+ version "1.0.30001750"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz#c229f82930033abd1502c6f73035356cf528bfbc"
+ integrity sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==
-caniuse-lite@^1.0.30001688:
- version "1.0.30001690"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8"
- integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==
-
-chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -3951,9 +4104,21 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
supports-color "^7.1.0"
chalk@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
- integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
+ version "5.6.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea"
+ integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==
+
+check-disk-space@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/check-disk-space/-/check-disk-space-3.4.0.tgz#eb8e69eee7a378fd12e35281b8123a8b4c4a8ff7"
+ integrity sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==
+
+chokidar@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
+ integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
+ dependencies:
+ readdirp "^4.0.1"
chownr@^2.0.0:
version "2.0.0"
@@ -4036,13 +4201,6 @@ clone@^1.0.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@@ -4050,11 +4208,6 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
@@ -4158,12 +4311,12 @@ core-util-is@1.0.2:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
-cosmiconfig-typescript-loader@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz#0d3becfe022a871f7275ceb2397d692e06045dc8"
- integrity sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==
+cosmiconfig-typescript-loader@^6.1.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.2.0.tgz#26399fa92e9569052062846afd038c94628f0f69"
+ integrity sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==
dependencies:
- jiti "^1.19.1"
+ jiti "^2.6.1"
cosmiconfig@^8.1.3:
version "8.3.6"
@@ -4209,6 +4362,11 @@ create-require@^1.1.0:
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+crelt@^1.0.0:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72"
+ integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==
+
cross-fetch-ponyfill@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/cross-fetch-ponyfill/-/cross-fetch-ponyfill-1.0.3.tgz#5c5524e3bd3374e71d5016c2327e416369a57527"
@@ -4217,16 +4375,7 @@ cross-fetch-ponyfill@^1.0.3:
abort-controller "^3.0.0"
node-fetch "^3.3.0"
-cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
-cross-spawn@^7.0.6:
+cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.6:
version "7.0.6"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
@@ -4236,11 +4385,12 @@ cross-spawn@^7.0.6:
which "^2.0.1"
cssstyle@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.1.0.tgz#161faee382af1bafadb6d3867a92a19bcb4aea70"
- integrity sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9"
+ integrity sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==
dependencies:
- rrweb-cssom "^0.7.1"
+ "@asamuzakjp/css-color" "^3.2.0"
+ rrweb-cssom "^0.8.0"
csstype@^3.0.2:
version "3.1.3"
@@ -4270,15 +4420,6 @@ data-urls@^5.0.0:
whatwg-mimetype "^4.0.0"
whatwg-url "^14.0.0"
-data-view-buffer@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2"
- integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==
- dependencies:
- call-bind "^1.0.6"
- es-errors "^1.3.0"
- is-data-view "^1.0.1"
-
data-view-buffer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570"
@@ -4288,15 +4429,6 @@ data-view-buffer@^1.0.2:
es-errors "^1.3.0"
is-data-view "^1.0.2"
-data-view-byte-length@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2"
- integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==
- dependencies:
- call-bind "^1.0.7"
- es-errors "^1.3.0"
- is-data-view "^1.0.1"
-
data-view-byte-length@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735"
@@ -4306,15 +4438,6 @@ data-view-byte-length@^1.0.2:
es-errors "^1.3.0"
is-data-view "^1.0.2"
-data-view-byte-offset@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a"
- integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==
- dependencies:
- call-bind "^1.0.6"
- es-errors "^1.3.0"
- is-data-view "^1.0.1"
-
data-view-byte-offset@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191"
@@ -4329,24 +4452,17 @@ date-fns@^3.6.0:
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf"
integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
- version "4.3.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
- integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==
- dependencies:
- ms "^2.1.3"
-
-debug@^4.4.0:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
- integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.4.0:
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
dependencies:
ms "^2.1.3"
decimal.js@^10.4.3:
- version "10.4.3"
- resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
- integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+ version "10.6.0"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a"
+ integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==
decompress-response@^6.0.0:
version "6.0.0"
@@ -4381,7 +4497,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4:
es-errors "^1.3.0"
gopd "^1.0.1"
-define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
+define-properties@^1.1.3, define-properties@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
@@ -4395,10 +4511,15 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+detect-libc@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
+
detect-libc@^2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
- integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad"
+ integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==
detect-node-es@^1.1.0:
version "1.1.0"
@@ -4410,11 +4531,6 @@ detect-node@^2.0.4:
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-dexie@^4.0.10:
- version "4.0.10"
- resolved "https://registry.yarnpkg.com/dexie/-/dexie-4.0.10.tgz#979e3ee75993b44eea3852f97ceb198019d5b287"
- integrity sha512-eM2RzuR3i+M046r2Q0Optl3pS31qTWf8aFuA7H9wnsHTwl8EPvroVLwvQene/6paAs39Tbk6fWZcn2aZaHkc/w==
-
diff@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
@@ -4435,14 +4551,6 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
-diskusage@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/diskusage/-/diskusage-1.2.0.tgz#3e8ae42333d5d7e0c7d93e055d7fea9ea841bc88"
- integrity sha512-2u3OG3xuf5MFyzc4MctNRUKjjwK+UkovRYdD2ed/NZNZPrt0lqHnLKxGhlFVvAb4/oufIgQG3nWgwmeTbHOvXA==
- dependencies:
- es6-promise "^4.2.8"
- nan "^2.18.0"
-
dmg-builder@26.0.12:
version "26.0.12"
resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-26.0.12.tgz#6996ad0bab80a861c9a7b33ee9734d4f60566b46"
@@ -4510,27 +4618,18 @@ dot-prop@^5.1.0:
is-obj "^2.0.0"
dotenv-expand@^11.0.6:
- version "11.0.6"
- resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.6.tgz#f2c840fd924d7c77a94eff98f153331d876882d3"
- integrity sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==
+ version "11.0.7"
+ resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08"
+ integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==
dependencies:
- dotenv "^16.4.4"
+ dotenv "^16.4.5"
-dotenv@^16.4.4, dotenv@^16.4.5:
- version "16.4.5"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
- integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
+dotenv@^16.4.5:
+ version "16.6.1"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020"
+ integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==
-dunder-proto@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80"
- integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==
- dependencies:
- call-bind-apply-helpers "^1.0.0"
- es-errors "^1.3.0"
- gopd "^1.2.0"
-
-dunder-proto@^1.0.1:
+dunder-proto@^1.0.0, dunder-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
@@ -4574,10 +4673,10 @@ electron-builder@^26.0.12:
simple-update-notifier "2.0.0"
yargs "^17.6.2"
-electron-log@^5.2.4:
- version "5.2.4"
- resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.4.tgz#6b488d9db80aa3c6f3dc39bcd635fc9d1f79c8af"
- integrity sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA==
+electron-log@^5.4.3:
+ version "5.4.3"
+ resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.4.3.tgz#02a90baf4256950ca416095db6e5745268584d20"
+ integrity sha512-sOUsM3LjZdugatazSQ/XTyNcw8dfvH1SYhXWiJyfYodAAKOZdHs0txPiLDXFzOZbhXgAgshQkshH2ccq0feyLQ==
electron-publish@26.0.11:
version "26.0.11"
@@ -4593,15 +4692,10 @@ electron-publish@26.0.11:
lazy-val "^1.0.5"
mime "^2.5.2"
-electron-to-chromium@^1.5.28:
- version "1.5.30"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.30.tgz#5b264b489cfe0c3dd71097c164d795444834e7c7"
- integrity sha512-sXI35EBN4lYxzc/pIGorlymYNzDBOqkSlVRe6MkgBsW/hW1tpC/HDJ2fjG7XnjakzfLEuvdmux0Mjs6jHq4UOA==
-
-electron-to-chromium@^1.5.73:
- version "1.5.76"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz#db20295c5061b68f07c8ea4dfcbd701485d94a3d"
- integrity sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==
+electron-to-chromium@^1.5.227:
+ version "1.5.235"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.235.tgz#778dac70537ed9e9e0abf25a49cc94b5a23aaa0e"
+ integrity sha512-i/7ntLFwOdoHY7sgjlTIDo4Sl8EdoTjWIaKinYOVfC6bOp71bmwenyZthWHcasxgHDNWbWxvG9M3Ia116zIaYQ==
electron-updater@^6.6.2:
version "6.6.2"
@@ -4617,25 +4711,25 @@ electron-updater@^6.6.2:
semver "^7.6.3"
tiny-typed-emitter "^2.1.0"
-electron-vite@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/electron-vite/-/electron-vite-3.1.0.tgz#1784907a83d23c6c8093ec68b8e414a74d814385"
- integrity sha512-M7aAzaRvSl5VO+6KN4neJCYLHLpF/iWo5ztchI/+wMxIieDZQqpbCYfaEHHHPH6eupEzfvZdLYdPdmvGqoVe0Q==
+electron-vite@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/electron-vite/-/electron-vite-4.0.1.tgz#6cdf798f842c255779983ccadd06b3d475c02f57"
+ integrity sha512-QqacJbA8f1pmwUTqki1qLL5vIBaOQmeq13CZZefZ3r3vKVaIoC7cpoTgE+KPKxJDFTax+iFZV0VYvLVWPiQ8Aw==
dependencies:
- "@babel/core" "^7.26.10"
- "@babel/plugin-transform-arrow-functions" "^7.25.9"
+ "@babel/core" "^7.27.7"
+ "@babel/plugin-transform-arrow-functions" "^7.27.1"
cac "^6.7.14"
- esbuild "^0.25.1"
+ esbuild "^0.25.5"
magic-string "^0.30.17"
picocolors "^1.1.1"
-electron@^32.3.3:
- version "32.3.3"
- resolved "https://registry.yarnpkg.com/electron/-/electron-32.3.3.tgz#000b390f96379b1fd56ca2fcbe9340d266057e83"
- integrity sha512-7FT8tDg+MueAw8dBn5LJqDvlM4cZkKJhXfgB3w7P5gvSoUQVAY6LIQcXJxgL+vw2rIRY/b9ak7ZBFbCMF2Bk4w==
+electron@^37.7.1:
+ version "37.7.1"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-37.7.1.tgz#7d771b3d3365b5458f8bc758385defee14387034"
+ integrity sha512-2EmIqWv4T8BtgFQosB3/0Fezs09X3l0wXhIzes/cNt/GI+UDljbQr3NiF2J9WnqP0aFSbUEfztGUQMiX+qDvsw==
dependencies:
"@electron/get" "^2.0.0"
- "@types/node" "^20.9.0"
+ "@types/node" "^22.7.7"
extract-zip "^2.0.1"
embla-carousel-autoplay@^8.6.0:
@@ -4679,9 +4773,9 @@ encoding@^0.1.13:
iconv-lite "^0.6.2"
end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c"
+ integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==
dependencies:
once "^1.4.0"
@@ -4690,6 +4784,11 @@ entities@^4.4.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+entities@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694"
+ integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==
+
env-paths@^2.2.0, env-paths@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
@@ -4701,137 +4800,33 @@ err-code@^2.0.2:
integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
error-ex@^1.3.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
- integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414"
+ integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.3:
- version "1.23.3"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0"
- integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==
- dependencies:
- array-buffer-byte-length "^1.0.1"
- arraybuffer.prototype.slice "^1.0.3"
- available-typed-arrays "^1.0.7"
- call-bind "^1.0.7"
- data-view-buffer "^1.0.1"
- data-view-byte-length "^1.0.1"
- data-view-byte-offset "^1.0.0"
- es-define-property "^1.0.0"
- es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
- es-set-tostringtag "^2.0.3"
- es-to-primitive "^1.2.1"
- function.prototype.name "^1.1.6"
- get-intrinsic "^1.2.4"
- get-symbol-description "^1.0.2"
- globalthis "^1.0.3"
- gopd "^1.0.1"
- has-property-descriptors "^1.0.2"
- has-proto "^1.0.3"
- has-symbols "^1.0.3"
- hasown "^2.0.2"
- internal-slot "^1.0.7"
- is-array-buffer "^3.0.4"
- is-callable "^1.2.7"
- is-data-view "^1.0.1"
- is-negative-zero "^2.0.3"
- is-regex "^1.1.4"
- is-shared-array-buffer "^1.0.3"
- is-string "^1.0.7"
- is-typed-array "^1.1.13"
- is-weakref "^1.0.2"
- object-inspect "^1.13.1"
- object-keys "^1.1.1"
- object.assign "^4.1.5"
- regexp.prototype.flags "^1.5.2"
- safe-array-concat "^1.1.2"
- safe-regex-test "^1.0.3"
- string.prototype.trim "^1.2.9"
- string.prototype.trimend "^1.0.8"
- string.prototype.trimstart "^1.0.8"
- typed-array-buffer "^1.0.2"
- typed-array-byte-length "^1.0.1"
- typed-array-byte-offset "^1.0.2"
- typed-array-length "^1.0.6"
- unbox-primitive "^1.0.2"
- which-typed-array "^1.1.15"
-
-es-abstract@^1.23.5:
- version "1.23.5"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb"
- integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==
- dependencies:
- array-buffer-byte-length "^1.0.1"
- arraybuffer.prototype.slice "^1.0.3"
- available-typed-arrays "^1.0.7"
- call-bind "^1.0.7"
- data-view-buffer "^1.0.1"
- data-view-byte-length "^1.0.1"
- data-view-byte-offset "^1.0.0"
- es-define-property "^1.0.0"
- es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
- es-set-tostringtag "^2.0.3"
- es-to-primitive "^1.2.1"
- function.prototype.name "^1.1.6"
- get-intrinsic "^1.2.4"
- get-symbol-description "^1.0.2"
- globalthis "^1.0.4"
- gopd "^1.0.1"
- has-property-descriptors "^1.0.2"
- has-proto "^1.0.3"
- has-symbols "^1.0.3"
- hasown "^2.0.2"
- internal-slot "^1.0.7"
- is-array-buffer "^3.0.4"
- is-callable "^1.2.7"
- is-data-view "^1.0.1"
- is-negative-zero "^2.0.3"
- is-regex "^1.1.4"
- is-shared-array-buffer "^1.0.3"
- is-string "^1.0.7"
- is-typed-array "^1.1.13"
- is-weakref "^1.0.2"
- object-inspect "^1.13.3"
- object-keys "^1.1.1"
- object.assign "^4.1.5"
- regexp.prototype.flags "^1.5.3"
- safe-array-concat "^1.1.2"
- safe-regex-test "^1.0.3"
- string.prototype.trim "^1.2.9"
- string.prototype.trimend "^1.0.8"
- string.prototype.trimstart "^1.0.8"
- typed-array-buffer "^1.0.2"
- typed-array-byte-length "^1.0.1"
- typed-array-byte-offset "^1.0.2"
- typed-array-length "^1.0.6"
- unbox-primitive "^1.0.2"
- which-typed-array "^1.1.15"
-
-es-abstract@^1.23.6, es-abstract@^1.23.9:
- version "1.23.9"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606"
- integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==
+es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0:
+ version "1.24.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328"
+ integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==
dependencies:
array-buffer-byte-length "^1.0.2"
arraybuffer.prototype.slice "^1.0.4"
available-typed-arrays "^1.0.7"
call-bind "^1.0.8"
- call-bound "^1.0.3"
+ call-bound "^1.0.4"
data-view-buffer "^1.0.2"
data-view-byte-length "^1.0.2"
data-view-byte-offset "^1.0.1"
es-define-property "^1.0.1"
es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
+ es-object-atoms "^1.1.1"
es-set-tostringtag "^2.1.0"
es-to-primitive "^1.3.0"
function.prototype.name "^1.1.8"
- get-intrinsic "^1.2.7"
- get-proto "^1.0.0"
+ get-intrinsic "^1.3.0"
+ get-proto "^1.0.1"
get-symbol-description "^1.1.0"
globalthis "^1.0.4"
gopd "^1.2.0"
@@ -4843,21 +4838,24 @@ es-abstract@^1.23.6, es-abstract@^1.23.9:
is-array-buffer "^3.0.5"
is-callable "^1.2.7"
is-data-view "^1.0.2"
+ is-negative-zero "^2.0.3"
is-regex "^1.2.1"
+ is-set "^2.0.3"
is-shared-array-buffer "^1.0.4"
is-string "^1.1.1"
is-typed-array "^1.1.15"
- is-weakref "^1.1.0"
+ is-weakref "^1.1.1"
math-intrinsics "^1.1.0"
- object-inspect "^1.13.3"
+ object-inspect "^1.13.4"
object-keys "^1.1.1"
object.assign "^4.1.7"
own-keys "^1.0.1"
- regexp.prototype.flags "^1.5.3"
+ regexp.prototype.flags "^1.5.4"
safe-array-concat "^1.1.3"
safe-push-apply "^1.0.0"
safe-regex-test "^1.1.0"
set-proto "^1.0.0"
+ stop-iteration-iterator "^1.1.0"
string.prototype.trim "^1.2.10"
string.prototype.trimend "^1.0.9"
string.prototype.trimstart "^1.0.8"
@@ -4866,21 +4864,14 @@ es-abstract@^1.23.6, es-abstract@^1.23.9:
typed-array-byte-offset "^1.0.4"
typed-array-length "^1.0.7"
unbox-primitive "^1.1.0"
- which-typed-array "^1.1.18"
+ which-typed-array "^1.1.19"
-es-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
- integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
- dependencies:
- get-intrinsic "^1.2.4"
-
-es-define-property@^1.0.1:
+es-define-property@^1.0.0, es-define-property@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
-es-errors@^1.2.1, es-errors@^1.3.0:
+es-errors@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
@@ -4907,23 +4898,14 @@ es-iterator-helpers@^1.2.1:
iterator.prototype "^1.1.4"
safe-array-concat "^1.1.3"
-es-object-atoms@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
- integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
+ integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
dependencies:
es-errors "^1.3.0"
-es-set-tostringtag@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777"
- integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==
- dependencies:
- get-intrinsic "^1.2.4"
- has-tostringtag "^1.0.2"
- hasown "^2.0.1"
-
-es-set-tostringtag@^2.1.0:
+es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
@@ -4933,21 +4915,12 @@ es-set-tostringtag@^2.1.0:
has-tostringtag "^1.0.2"
hasown "^2.0.2"
-es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763"
- integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==
+es-shim-unscopables@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5"
+ integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==
dependencies:
- hasown "^2.0.0"
-
-es-to-primitive@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
- integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
- dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
+ hasown "^2.0.2"
es-to-primitive@^1.3.0:
version "1.3.0"
@@ -4963,11 +4936,6 @@ es6-error@^4.1.1:
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
-es6-promise@^4.2.8:
- version "4.2.8"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
- integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
-
esbuild@^0.21.3:
version "0.21.5"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d"
@@ -4997,56 +4965,52 @@ esbuild@^0.21.3:
"@esbuild/win32-ia32" "0.21.5"
"@esbuild/win32-x64" "0.21.5"
-esbuild@^0.25.1:
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.4.tgz#bb9a16334d4ef2c33c7301a924b8b863351a0854"
- integrity sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==
+esbuild@^0.25.5:
+ version "0.25.11"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.11.tgz#0f31b82f335652580f75ef6897bba81962d9ae3d"
+ integrity sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==
optionalDependencies:
- "@esbuild/aix-ppc64" "0.25.4"
- "@esbuild/android-arm" "0.25.4"
- "@esbuild/android-arm64" "0.25.4"
- "@esbuild/android-x64" "0.25.4"
- "@esbuild/darwin-arm64" "0.25.4"
- "@esbuild/darwin-x64" "0.25.4"
- "@esbuild/freebsd-arm64" "0.25.4"
- "@esbuild/freebsd-x64" "0.25.4"
- "@esbuild/linux-arm" "0.25.4"
- "@esbuild/linux-arm64" "0.25.4"
- "@esbuild/linux-ia32" "0.25.4"
- "@esbuild/linux-loong64" "0.25.4"
- "@esbuild/linux-mips64el" "0.25.4"
- "@esbuild/linux-ppc64" "0.25.4"
- "@esbuild/linux-riscv64" "0.25.4"
- "@esbuild/linux-s390x" "0.25.4"
- "@esbuild/linux-x64" "0.25.4"
- "@esbuild/netbsd-arm64" "0.25.4"
- "@esbuild/netbsd-x64" "0.25.4"
- "@esbuild/openbsd-arm64" "0.25.4"
- "@esbuild/openbsd-x64" "0.25.4"
- "@esbuild/sunos-x64" "0.25.4"
- "@esbuild/win32-arm64" "0.25.4"
- "@esbuild/win32-ia32" "0.25.4"
- "@esbuild/win32-x64" "0.25.4"
+ "@esbuild/aix-ppc64" "0.25.11"
+ "@esbuild/android-arm" "0.25.11"
+ "@esbuild/android-arm64" "0.25.11"
+ "@esbuild/android-x64" "0.25.11"
+ "@esbuild/darwin-arm64" "0.25.11"
+ "@esbuild/darwin-x64" "0.25.11"
+ "@esbuild/freebsd-arm64" "0.25.11"
+ "@esbuild/freebsd-x64" "0.25.11"
+ "@esbuild/linux-arm" "0.25.11"
+ "@esbuild/linux-arm64" "0.25.11"
+ "@esbuild/linux-ia32" "0.25.11"
+ "@esbuild/linux-loong64" "0.25.11"
+ "@esbuild/linux-mips64el" "0.25.11"
+ "@esbuild/linux-ppc64" "0.25.11"
+ "@esbuild/linux-riscv64" "0.25.11"
+ "@esbuild/linux-s390x" "0.25.11"
+ "@esbuild/linux-x64" "0.25.11"
+ "@esbuild/netbsd-arm64" "0.25.11"
+ "@esbuild/netbsd-x64" "0.25.11"
+ "@esbuild/openbsd-arm64" "0.25.11"
+ "@esbuild/openbsd-x64" "0.25.11"
+ "@esbuild/openharmony-arm64" "0.25.11"
+ "@esbuild/sunos-x64" "0.25.11"
+ "@esbuild/win32-arm64" "0.25.11"
+ "@esbuild/win32-ia32" "0.25.11"
+ "@esbuild/win32-x64" "0.25.11"
escalade@^3.1.1, escalade@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
-
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-config-prettier@^9.1.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f"
- integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==
+ version "9.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz#90deb4fa0259592df774b600dbd1d2249a78ce91"
+ integrity sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==
eslint-plugin-jsx-a11y@^6.10.2:
version "6.10.2"
@@ -5070,12 +5034,12 @@ eslint-plugin-jsx-a11y@^6.10.2:
string.prototype.includes "^2.0.1"
eslint-plugin-prettier@^5.0.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95"
- integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==
+ version "5.5.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c"
+ integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==
dependencies:
prettier-linter-helpers "^1.0.0"
- synckit "^0.9.1"
+ synckit "^0.11.7"
eslint-plugin-react-hooks@^4.6.0:
version "4.6.2"
@@ -5083,9 +5047,9 @@ eslint-plugin-react-hooks@^4.6.0:
integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==
eslint-plugin-react@^7.37.4:
- version "7.37.4"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz#1b6c80b6175b6ae4b26055ae4d55d04c414c7181"
- integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==
+ version "7.37.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065"
+ integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==
dependencies:
array-includes "^3.1.8"
array.prototype.findlast "^1.2.5"
@@ -5097,7 +5061,7 @@ eslint-plugin-react@^7.37.4:
hasown "^2.0.2"
jsx-ast-utils "^2.4.1 || ^3.0.0"
minimatch "^3.1.2"
- object.entries "^1.1.8"
+ object.entries "^1.1.9"
object.fromentries "^2.0.8"
object.values "^1.2.1"
prop-types "^15.8.1"
@@ -5114,7 +5078,7 @@ eslint-scope@^7.2.2:
esrecurse "^4.3.0"
estraverse "^5.2.0"
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
@@ -5207,9 +5171,9 @@ event-target-shim@^5.0.0:
integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
exponential-backoff@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
- integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6"
+ integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==
extract-zip@^2.0.1:
version "2.0.1"
@@ -5238,15 +5202,15 @@ fast-diff@^1.1.2:
integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==
fast-glob@^3.2.9:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
- integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
glob-parent "^5.1.2"
merge2 "^1.3.0"
- micromatch "^4.0.4"
+ micromatch "^4.0.8"
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
@@ -5258,17 +5222,22 @@ fast-levenshtein@^2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
-fast-xml-parser@4.4.1:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f"
- integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==
+fast-uri@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa"
+ integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==
+
+fast-xml-parser@5.2.5:
+ version "5.2.5"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz#4809fdfb1310494e341098c25cb1341a01a9144a"
+ integrity sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==
dependencies:
- strnum "^1.0.5"
+ strnum "^2.1.0"
fastq@^1.6.0:
- version "1.17.1"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
- integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
+ integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
dependencies:
reusify "^1.0.4"
@@ -5350,37 +5319,39 @@ flat-cache@^3.0.4:
rimraf "^3.0.2"
flatted@^3.2.9:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
- integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358"
+ integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
follow-redirects@^1.15.6:
- version "1.15.9"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
- integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340"
+ integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==
-for-each@^0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
- integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+for-each@^0.3.3, for-each@^0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47"
+ integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==
dependencies:
- is-callable "^1.1.3"
+ is-callable "^1.2.7"
foreground-child@^3.1.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77"
- integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f"
+ integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==
dependencies:
- cross-spawn "^7.0.0"
+ cross-spawn "^7.0.6"
signal-exit "^4.0.1"
-form-data@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
- integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+form-data@^4.0.0, form-data@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4"
+ integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
+ es-set-tostringtag "^2.1.0"
+ hasown "^2.0.2"
mime-types "^2.1.12"
formdata-polyfill@^4.0.10:
@@ -5391,12 +5362,12 @@ formdata-polyfill@^4.0.10:
fetch-blob "^3.1.2"
framer-motion@^12.15.0:
- version "12.15.0"
- resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.15.0.tgz#6892283fc7967b071f537d6d160ab49e3d5e73ae"
- integrity sha512-XKg/LnKExdLGugZrDILV7jZjI599785lDIJZLxMiiIFidCsy0a4R2ZEf+Izm67zyOuJgQYTHOmodi7igQsw3vg==
+ version "12.23.24"
+ resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.23.24.tgz#4895b67e880bd2b1089e61fbaa32ae802fc24b8c"
+ integrity sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==
dependencies:
- motion-dom "^12.15.0"
- motion-utils "^12.12.1"
+ motion-dom "^12.23.23"
+ motion-utils "^12.23.6"
tslib "^2.4.0"
fs-extra@^10.0.0, fs-extra@^10.1.0:
@@ -5409,9 +5380,9 @@ fs-extra@^10.0.0, fs-extra@^10.1.0:
universalify "^2.0.0"
fs-extra@^11.1.1:
- version "11.2.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
- integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
+ version "11.3.2"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4"
+ integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
@@ -5458,17 +5429,7 @@ function-bind@^1.1.2:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-function.prototype.name@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
- integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- functions-have-names "^1.2.3"
-
-function.prototype.name@^1.1.8:
+function.prototype.name@^1.1.6, function.prototype.name@^1.1.8:
version "1.1.8"
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78"
integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==
@@ -5485,6 +5446,11 @@ functions-have-names@^1.2.3:
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+generator-function@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2"
+ integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==
+
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -5495,44 +5461,17 @@ get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
- integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
+get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
+ integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
dependencies:
- es-errors "^1.3.0"
- function-bind "^1.1.2"
- has-proto "^1.0.1"
- has-symbols "^1.0.3"
- hasown "^2.0.0"
-
-get-intrinsic@^1.2.5, get-intrinsic@^1.2.6:
- version "1.2.6"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz#43dd3dd0e7b49b82b2dfcad10dc824bf7fc265d5"
- integrity sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==
- dependencies:
- call-bind-apply-helpers "^1.0.1"
- dunder-proto "^1.0.0"
+ call-bind-apply-helpers "^1.0.2"
es-define-property "^1.0.1"
es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
+ es-object-atoms "^1.1.1"
function-bind "^1.1.2"
- gopd "^1.2.0"
- has-symbols "^1.1.0"
- hasown "^2.0.2"
- math-intrinsics "^1.0.0"
-
-get-intrinsic@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044"
- integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==
- dependencies:
- call-bind-apply-helpers "^1.0.1"
- es-define-property "^1.0.1"
- es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
- function-bind "^1.1.2"
- get-proto "^1.0.0"
+ get-proto "^1.0.1"
gopd "^1.2.0"
has-symbols "^1.1.0"
hasown "^2.0.2"
@@ -5563,15 +5502,6 @@ get-stream@^5.1.0:
dependencies:
pump "^3.0.0"
-get-symbol-description@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
- integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==
- dependencies:
- call-bind "^1.0.5"
- es-errors "^1.3.0"
- get-intrinsic "^1.2.4"
-
get-symbol-description@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee"
@@ -5604,7 +5534,7 @@ glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
-glob@^10.3.12, glob@^10.3.7:
+glob@^10.3.12:
version "10.4.5"
resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
@@ -5658,11 +5588,6 @@ global-directory@^4.0.1:
dependencies:
ini "4.1.1"
-globals@^11.1.0:
- version "11.12.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
- integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
globals@^13.19.0:
version "13.24.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
@@ -5670,7 +5595,7 @@ globals@^13.19.0:
dependencies:
type-fest "^0.20.2"
-globalthis@^1.0.1, globalthis@^1.0.3, globalthis@^1.0.4:
+globalthis@^1.0.1, globalthis@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
@@ -5690,14 +5615,7 @@ globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
-gopd@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
- integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
- dependencies:
- get-intrinsic "^1.1.3"
-
-gopd@^1.2.0:
+gopd@^1.0.1, gopd@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
@@ -5729,15 +5647,10 @@ graphemer@^1.4.0:
resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
-has-bigints@^1.0.1, has-bigints@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
- integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+has-bigints@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe"
+ integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==
has-flag@^4.0.0:
version "4.0.0"
@@ -5751,11 +5664,6 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
dependencies:
es-define-property "^1.0.0"
-has-proto@^1.0.1, has-proto@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
- integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
-
has-proto@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5"
@@ -5763,24 +5671,19 @@ has-proto@^1.2.0:
dependencies:
dunder-proto "^1.0.0"
-has-symbols@^1.0.2, has-symbols@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-
-has-symbols@^1.1.0:
+has-symbols@^1.0.3, has-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
-has-tostringtag@^1.0.0, has-tostringtag@^1.0.2:
+has-tostringtag@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
dependencies:
has-symbols "^1.0.3"
-hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2:
+hasown@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
@@ -5816,9 +5719,9 @@ html-parse-stringify@^3.0.1:
void-elements "3.1.0"
http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
- integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5"
+ integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==
http-cookie-agent@^6.0.8:
version "6.0.8"
@@ -5861,11 +5764,11 @@ https-proxy-agent@^5.0.0:
debug "4"
https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.5:
- version "7.0.5"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2"
- integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
+ integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
dependencies:
- agent-base "^7.0.2"
+ agent-base "^7.1.2"
debug "4"
humanize-ms@^1.2.1:
@@ -5886,16 +5789,16 @@ husky@^9.1.7:
integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==
i18next-browser-languagedetector@^7.2.1:
- version "7.2.1"
- resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz#1968196d437b4c8db847410c7c33554f6c448f6f"
- integrity sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw==
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.2.tgz#748e7dc192847613911d8a79d9d9a6c2d266133e"
+ integrity sha512-6b7r75uIJDWCcCflmbof+sJ94k9UQO4X0YR62oUfqGI/GjCLVzlCwu8TFdRZIqVLzWbzNcmkmhfqKEr4TLz4HQ==
dependencies:
"@babel/runtime" "^7.23.2"
i18next@^23.11.2:
- version "23.15.1"
- resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.15.1.tgz#c50de337bf12ca5195e697cc0fbe5f32304871d9"
- integrity sha512-wB4abZ3uK7EWodYisHl/asf8UYEhrI/vj/8aoSsrj/ZDxj4/UXPOa1KvFt1Fq5hkUHquNqwFlDprmjZ8iySgYA==
+ version "23.16.8"
+ resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.16.8.tgz#3ae1373d344c2393f465556f394aba5a9233b93a"
+ integrity sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==
dependencies:
"@babel/runtime" "^7.23.2"
@@ -5925,27 +5828,27 @@ ignore@^5.2.0, ignore@^5.3.1:
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
immer@^10.0.3:
- version "10.1.1"
- resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc"
- integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==
+ version "10.1.3"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.3.tgz#e38a0b97db59949d31d9b381b04c2e441b1c3747"
+ integrity sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==
-immutable@^4.0.0:
- version "4.3.7"
- resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381"
- integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==
+immutable@^5.0.2:
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.4.tgz#e3f8c1fe7b567d56cf26698f31918c241dae8c1f"
+ integrity sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==
import-fresh@^3.2.1, import-fresh@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
- integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
dependencies:
parent-module "^1.0.0"
resolve-from "^4.0.0"
import-meta-resolve@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706"
- integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz#08cb85b5bd37ecc8eb1e0f670dc2767002d43734"
+ integrity sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==
imurmurhash@^0.1.4:
version "0.1.4"
@@ -5980,15 +5883,6 @@ ini@4.1.1:
resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1"
integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==
-internal-slot@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802"
- integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==
- dependencies:
- es-errors "^1.3.0"
- hasown "^2.0.0"
- side-channel "^1.0.4"
-
internal-slot@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961"
@@ -5998,30 +5892,12 @@ internal-slot@^1.1.0:
hasown "^2.0.2"
side-channel "^1.1.0"
-invariant@^2.2.4:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
- integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
- dependencies:
- loose-envify "^1.0.0"
+ip-address@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.0.1.tgz#a8180b783ce7788777d796286d61bce4276818ed"
+ integrity sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==
-ip-address@^9.0.5:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
- integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
- dependencies:
- jsbn "1.1.0"
- sprintf-js "^1.1.3"
-
-is-array-buffer@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98"
- integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==
- dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.2.1"
-
-is-array-buffer@^3.0.5:
+is-array-buffer@^3.0.4, is-array-buffer@^3.0.5:
version "3.0.5"
resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280"
integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==
@@ -6036,23 +5912,20 @@ is-arrayish@^0.2.1:
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
is-arrayish@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
- integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.4.tgz#1ee5553818511915685d33bb13d31bf854e5059d"
+ integrity sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==
is-async-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646"
- integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523"
+ integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==
dependencies:
- has-tostringtag "^1.0.0"
-
-is-bigint@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
- integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
- dependencies:
- has-bigints "^1.0.1"
+ async-function "^1.0.0"
+ call-bound "^1.0.3"
+ get-proto "^1.0.1"
+ has-tostringtag "^1.0.2"
+ safe-regex-test "^1.1.0"
is-bigint@^1.1.0:
version "1.1.0"
@@ -6061,20 +5934,12 @@ is-bigint@^1.1.0:
dependencies:
has-bigints "^1.0.2"
-is-boolean-object@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
- integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+is-boolean-object@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e"
+ integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==
dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
-is-boolean-object@^1.2.0, is-boolean-object@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89"
- integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==
- dependencies:
- call-bound "^1.0.2"
+ call-bound "^1.0.3"
has-tostringtag "^1.0.2"
is-buffer@^2.0.5:
@@ -6082,7 +5947,7 @@ is-buffer@^2.0.5:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
-is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
+is-callable@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
@@ -6095,20 +5960,13 @@ is-ci@^3.0.0:
ci-info "^3.2.0"
is-core-module@^2.13.0:
- version "2.15.1"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37"
- integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==
+ version "2.16.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
dependencies:
hasown "^2.0.2"
-is-data-view@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f"
- integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==
- dependencies:
- is-typed-array "^1.1.13"
-
-is-data-view@^1.0.2:
+is-data-view@^1.0.1, is-data-view@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e"
integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==
@@ -6117,13 +5975,6 @@ is-data-view@^1.0.2:
get-intrinsic "^1.2.6"
is-typed-array "^1.1.13"
-is-date-object@^1.0.1:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
- integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
- dependencies:
- has-tostringtag "^1.0.0"
-
is-date-object@^1.0.5, is-date-object@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7"
@@ -6138,11 +5989,11 @@ is-extglob@^2.1.1:
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
is-finalizationregistry@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz#d74a7d0c5f3578e34a20729e69202e578d495dc2"
- integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90"
+ integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==
dependencies:
- call-bind "^1.0.7"
+ call-bound "^1.0.3"
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
@@ -6150,11 +6001,15 @@ is-fullwidth-code-point@^3.0.0:
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
is-generator-function@^1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
- integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5"
+ integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==
dependencies:
- has-tostringtag "^1.0.0"
+ call-bound "^1.0.4"
+ generator-function "^2.0.0"
+ get-proto "^1.0.1"
+ has-tostringtag "^1.0.2"
+ safe-regex-test "^1.1.0"
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
version "4.0.3"
@@ -6183,21 +6038,6 @@ is-negative-zero@^2.0.3:
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
-is-number-object@^1.0.4:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
- integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
- dependencies:
- has-tostringtag "^1.0.0"
-
-is-number-object@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.0.tgz#5a867e9ecc3d294dda740d9f127835857af7eb05"
- integrity sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==
- dependencies:
- call-bind "^1.0.7"
- has-tostringtag "^1.0.2"
-
is-number-object@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541"
@@ -6226,14 +6066,6 @@ is-potential-custom-element-name@^1.0.1:
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
-is-regex@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
- integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
- dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
is-regex@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22"
@@ -6249,13 +6081,6 @@ is-set@^2.0.3:
resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d"
integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==
-is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688"
- integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==
- dependencies:
- call-bind "^1.0.7"
-
is-shared-array-buffer@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f"
@@ -6263,21 +6088,6 @@ is-shared-array-buffer@^1.0.4:
dependencies:
call-bound "^1.0.3"
-is-string@^1.0.5, is-string@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
- integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
- dependencies:
- has-tostringtag "^1.0.0"
-
-is-string@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.0.tgz#8cb83c5d57311bf8058bc6c8db294711641da45d"
- integrity sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==
- dependencies:
- call-bind "^1.0.7"
- has-tostringtag "^1.0.2"
-
is-string@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9"
@@ -6286,14 +6096,7 @@ is-string@^1.1.1:
call-bound "^1.0.3"
has-tostringtag "^1.0.2"
-is-symbol@^1.0.2, is-symbol@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
- integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
- dependencies:
- has-symbols "^1.0.2"
-
-is-symbol@^1.0.4, is-symbol@^1.1.0, is-symbol@^1.1.1:
+is-symbol@^1.0.4, is-symbol@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634"
integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==
@@ -6309,14 +6112,7 @@ is-text-path@^2.0.0:
dependencies:
text-extensions "^2.0.0"
-is-typed-array@^1.1.13:
- version "1.1.13"
- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229"
- integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==
- dependencies:
- which-typed-array "^1.1.14"
-
-is-typed-array@^1.1.14, is-typed-array@^1.1.15:
+is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15:
version "1.1.15"
resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b"
integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==
@@ -6333,27 +6129,20 @@ is-weakmap@^2.0.2:
resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd"
integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==
-is-weakref@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
- integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+is-weakref@^1.0.2, is-weakref@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293"
+ integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==
dependencies:
- call-bind "^1.0.2"
-
-is-weakref@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef"
- integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==
- dependencies:
- call-bound "^1.0.2"
+ call-bound "^1.0.3"
is-weakset@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007"
- integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca"
+ integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==
dependencies:
- call-bind "^1.0.7"
- get-intrinsic "^1.2.4"
+ call-bound "^1.0.3"
+ get-intrinsic "^1.2.6"
isarray@^2.0.5:
version "2.0.5"
@@ -6366,9 +6155,9 @@ isbinaryfile@^4.0.8:
integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==
isbinaryfile@^5.0.0:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.2.tgz#fe6e4dfe2e34e947ffa240c113444876ba393ae0"
- integrity sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==
+ version "5.0.6"
+ resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.6.tgz#01eac28867aeffaebaee7eaf21d1dd3a67d7c0c7"
+ integrity sha512-I+NmIfBHUl+r2wcDd6JwE9yWje/PIVY/R5/CmV8dXLZd5K+L9X2klAOwfAHNnondLXkbHyTAleQAWonpTJBTtw==
isexe@^2.0.0:
version "2.0.0"
@@ -6397,19 +6186,18 @@ jackspeak@^3.1.2:
"@pkgjs/parseargs" "^0.11.0"
jake@^10.8.5:
- version "10.9.2"
- resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f"
- integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==
+ version "10.9.4"
+ resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.4.tgz#d626da108c63d5cfb00ab5c25fadc7e0084af8e6"
+ integrity sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==
dependencies:
- async "^3.2.3"
- chalk "^4.0.2"
+ async "^3.2.6"
filelist "^1.0.4"
- minimatch "^3.1.2"
+ picocolors "^1.1.1"
-jiti@^1.19.1:
- version "1.21.6"
- resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268"
- integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==
+jiti@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92"
+ integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
@@ -6423,11 +6211,6 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-jsbn@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
- integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
-
jsdom@^24.0.0:
version "24.1.3"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.1.3.tgz#88e4a07cb9dd21067514a619e9f17b090a394a9f"
@@ -6455,11 +6238,6 @@ jsdom@^24.0.0:
ws "^8.18.0"
xml-name-validator "^5.0.0"
-jsesc@^2.5.1:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
- integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-
jsesc@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
@@ -6508,9 +6286,9 @@ jsonfile@^4.0.0:
graceful-fs "^4.1.6"
jsonfile@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
- integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62"
+ integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==
dependencies:
universalify "^2.0.0"
optionalDependencies:
@@ -6548,11 +6326,11 @@ jsonwebtoken@^9.0.2:
object.values "^1.1.6"
jwa@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
- integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.2.tgz#16011ac6db48de7b102777e57897901520eec7b9"
+ integrity sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==
dependencies:
- buffer-equal-constant-time "1.0.1"
+ buffer-equal-constant-time "^1.0.1"
ecdsa-sig-formatter "1.0.11"
safe-buffer "^5.0.1"
@@ -6614,6 +6392,18 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+linkify-it@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421"
+ integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==
+ dependencies:
+ uc.micro "^2.0.0"
+
+linkifyjs@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.2.tgz#d97eb45419aabf97ceb4b05a7adeb7b8c8ade2b1"
+ integrity sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==
+
locate-path@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
@@ -6736,7 +6526,7 @@ log-symbols@^4.1.0:
chalk "^4.1.0"
is-unicode-supported "^0.1.0"
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
+loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -6755,7 +6545,7 @@ lowercase-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-lru-cache@^10.2.0:
+lru-cache@^10.2.0, lru-cache@^10.4.3:
version "10.4.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
@@ -6779,12 +6569,17 @@ lru-cache@^7.7.1:
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+lucide-react@^0.544.0:
+ version "0.544.0"
+ resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.544.0.tgz#4719953c10fd53a64dd8343bb0ed16ec79f3eeef"
+ integrity sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==
+
magic-string@^0.30.17:
- version "0.30.17"
- resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453"
- integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
+ version "0.30.19"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9"
+ integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==
dependencies:
- "@jridgewell/sourcemap-codec" "^1.5.0"
+ "@jridgewell/sourcemap-codec" "^1.5.5"
magnet-uri@^7.0.7:
version "7.0.7"
@@ -6822,6 +6617,18 @@ make-fetch-happen@^10.2.1:
socks-proxy-agent "^7.0.0"
ssri "^9.0.0"
+markdown-it@^14.0.0:
+ version "14.1.0"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45"
+ integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==
+ dependencies:
+ argparse "^2.0.1"
+ entities "^4.4.0"
+ linkify-it "^5.0.0"
+ mdurl "^2.0.0"
+ punycode.js "^2.3.1"
+ uc.micro "^2.1.0"
+
matcher@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
@@ -6829,11 +6636,6 @@ matcher@^3.0.0:
dependencies:
escape-string-regexp "^4.0.0"
-math-intrinsics@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.0.0.tgz#4e04bf87c85aa51e90d078dac2252b4eb5260817"
- integrity sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==
-
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
@@ -6844,6 +6646,11 @@ maybe-combine-errors@^1.0.0:
resolved "https://registry.yarnpkg.com/maybe-combine-errors/-/maybe-combine-errors-1.0.0.tgz#e9592832e61fc47643a92cff3c1f33e27211e5be"
integrity sha512-eefp6IduNPT6fVdwPp+1NgD0PML1NU5P6j1Mj5nz1nidX8/sWY7119WL8vTAHgqfsY74TzW0w1XPgdYEKkGZ5A==
+mdurl@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0"
+ integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==
+
meow@^12.0.1:
version "12.1.1"
resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6"
@@ -6854,7 +6661,7 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-micromatch@^4.0.4:
+micromatch@^4.0.5, micromatch@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
@@ -6895,11 +6702,11 @@ mimic-response@^3.1.0:
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
minimatch@^10.0.0:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b"
- integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==
+ version "10.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa"
+ integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==
dependencies:
- brace-expansion "^2.0.1"
+ "@isaacs/brace-expansion" "^5.0.0"
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
@@ -6991,13 +6798,12 @@ minizlib@^2.1.1, minizlib@^2.1.2:
minipass "^3.0.0"
yallist "^4.0.0"
-minizlib@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.1.tgz#46d5329d1eb3c83924eff1d3b858ca0a31581012"
- integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==
+minizlib@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c"
+ integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==
dependencies:
- minipass "^7.0.4"
- rimraf "^5.0.5"
+ minipass "^7.1.2"
mkdirp@^0.5.1:
version "0.5.6"
@@ -7011,42 +6817,32 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-mkdirp@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50"
- integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
-
module-error@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86"
integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==
-motion-dom@^12.15.0:
- version "12.15.0"
- resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-12.15.0.tgz#eca7c9d8c28976b8c920f175f92d5288f5a17785"
- integrity sha512-D2ldJgor+2vdcrDtKJw48k3OddXiZN1dDLLWrS8kiHzQdYVruh0IoTwbJBslrnTXIPgFED7PBN2Zbwl7rNqnhA==
+motion-dom@^12.23.23:
+ version "12.23.23"
+ resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-12.23.23.tgz#8f874333ea1a04ee3a89eb928f518b463d589e0e"
+ integrity sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==
dependencies:
- motion-utils "^12.12.1"
+ motion-utils "^12.23.6"
-motion-utils@^12.12.1:
- version "12.12.1"
- resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-12.12.1.tgz#63e28751325cb9d1cd684f3c273a570022b0010e"
- integrity sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w==
+motion-utils@^12.23.6:
+ version "12.23.6"
+ resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-12.23.6.tgz#fafef80b4ea85122dd0d6c599a0c63d72881f312"
+ integrity sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==
ms@^2.0.0, ms@^2.1.1, ms@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-nan@^2.18.0:
- version "2.22.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3"
- integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==
-
-nanoid@^3.3.7:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
- integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+nanoid@^3.3.11:
+ version "3.3.11"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
napi-macros@^2.2.2:
version "2.2.2"
@@ -7059,9 +6855,9 @@ natural-compare@^1.4.0:
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
negotiator@^0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
- integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
+ integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
no-case@^3.0.4:
version "3.0.4"
@@ -7072,9 +6868,9 @@ no-case@^3.0.4:
tslib "^2.0.3"
node-abi@^3.45.0:
- version "3.68.0"
- resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.68.0.tgz#8f37fb02ecf4f43ebe694090dcb52e0c4cc4ba25"
- integrity sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==
+ version "3.78.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.78.0.tgz#fd0ecbd0aa89857b98da06bd3909194abb0821ba"
+ integrity sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==
dependencies:
semver "^7.3.5"
@@ -7083,10 +6879,15 @@ node-addon-api@^1.6.3:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d"
integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==
+node-addon-api@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558"
+ integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
+
node-api-version@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.2.0.tgz#5177441da2b1046a4d4547ab9e0972eed7b1ac1d"
- integrity sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.2.1.tgz#19bad54f6d65628cbee4e607a325e4488ace2de9"
+ integrity sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==
dependencies:
semver "^7.3.5"
@@ -7109,15 +6910,10 @@ node-gyp-build@^4.3.0:
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8"
integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==
-node-releases@^2.0.18:
- version "2.0.18"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
- integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
-
-node-releases@^2.0.19:
- version "2.0.19"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
- integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+node-releases@^2.0.21:
+ version "2.0.23"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.23.tgz#2ecf3d7ba571ece05c67c77e5b7b1b6fb9e18cea"
+ integrity sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==
nopt@^6.0.0:
version "6.0.0"
@@ -7132,24 +6928,19 @@ normalize-url@^6.0.1:
integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
nwsapi@^2.2.12:
- version "2.2.13"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.13.tgz#e56b4e98960e7a040e5474536587e599c4ff4655"
- integrity sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==
+ version "2.2.22"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.22.tgz#109f9530cda6c156d6a713cdf5939e9f0de98b9d"
+ integrity sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==
object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-object-inspect@^1.13.1:
- version "1.13.2"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
- integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
-
-object-inspect@^1.13.3:
- version "1.13.3"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a"
- integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==
+object-inspect@^1.13.3, object-inspect@^1.13.4:
+ version "1.13.4"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
+ integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
object-keys@^1.1.1:
version "1.1.1"
@@ -7163,17 +6954,7 @@ object-sizeof@^1.2.0:
dependencies:
buffer "^5.6.0"
-object.assign@^4.1.4, object.assign@^4.1.5:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
- integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
- dependencies:
- call-bind "^1.0.5"
- define-properties "^1.2.1"
- has-symbols "^1.0.3"
- object-keys "^1.1.1"
-
-object.assign@^4.1.7:
+object.assign@^4.1.4, object.assign@^4.1.7:
version "4.1.7"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d"
integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==
@@ -7185,14 +6966,15 @@ object.assign@^4.1.7:
has-symbols "^1.1.0"
object-keys "^1.1.1"
-object.entries@^1.1.8:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41"
- integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==
+object.entries@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3"
+ integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==
dependencies:
- call-bind "^1.0.7"
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
define-properties "^1.2.1"
- es-object-atoms "^1.0.0"
+ es-object-atoms "^1.1.1"
object.fromentries@^2.0.8:
version "2.0.8"
@@ -7204,16 +6986,7 @@ object.fromentries@^2.0.8:
es-abstract "^1.23.2"
es-object-atoms "^1.0.0"
-object.values@^1.1.6:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b"
- integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-object-atoms "^1.0.0"
-
-object.values@^1.2.1:
+object.values@^1.1.6, object.values@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216"
integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==
@@ -7264,6 +7037,11 @@ ora@^5.1.0:
strip-ansi "^6.0.0"
wcwidth "^1.0.1"
+orderedmap@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-2.1.1.tgz#61481269c44031c449915497bf5a4ad273c512d2"
+ integrity sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==
+
own-keys@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358"
@@ -7314,9 +7092,9 @@ p-map@^4.0.0:
aggregate-error "^3.0.0"
package-json-from-dist@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00"
- integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
+ integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
parent-module@^1.0.0:
version "1.0.1"
@@ -7336,9 +7114,9 @@ parse-json@^5.2.0:
lines-and-columns "^1.1.6"
parse-torrent@^11.0.18:
- version "11.0.18"
- resolved "https://registry.yarnpkg.com/parse-torrent/-/parse-torrent-11.0.18.tgz#2ae7e52160fd0e59b6f1e539fb3670a71882d7a6"
- integrity sha512-C1igbmTrQQuKlspAfP1wcLaOPlvtu5qi4pMdPoCCfepHmxDOk8iArJ2J1yblLx11UefZJUaKEPSxIwMdG11SuA==
+ version "11.0.19"
+ resolved "https://registry.yarnpkg.com/parse-torrent/-/parse-torrent-11.0.19.tgz#ab9ccd51277cc271da1a78da18e92105219d3fbe"
+ integrity sha512-T0lEkDdFVQsy0YxHIKjzDHSgt/yl57f3INs5jl7OZqAm77XDF0FgRgrv3LCKgSqsTOrMwYaF0t2761WKdvhgig==
dependencies:
bencode "^4.0.0"
cross-fetch-ponyfill "^1.0.3"
@@ -7348,11 +7126,11 @@ parse-torrent@^11.0.18:
uint8-util "^2.2.5"
parse5@^7.0.0, parse5@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
- integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05"
+ integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==
dependencies:
- entities "^4.4.0"
+ entities "^6.0.0"
path-exists@^4.0.0:
version "4.0.0"
@@ -7397,21 +7175,11 @@ pe-library@^0.4.1:
resolved "https://registry.yarnpkg.com/pe-library/-/pe-library-0.4.1.tgz#e269be0340dcb13aa6949d743da7d658c3e2fbea"
integrity sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==
-peek-readable@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-7.0.0.tgz#c6e4e78ec76f7005e5f6b51ffc93fdb91ede6512"
- integrity sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ==
-
pend@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
-picocolors@^1.0.0, picocolors@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59"
- integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==
-
picocolors@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
@@ -7422,6 +7190,11 @@ picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+picomatch@^4.0.2:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
+ integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
+
plist@3.1.0, plist@^3.0.4, plist@^3.0.5, plist@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
@@ -7432,17 +7205,17 @@ plist@3.1.0, plist@^3.0.4, plist@^3.0.5, plist@^3.1.0:
xmlbuilder "^15.1.1"
possible-typed-array-names@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
- integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae"
+ integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==
postcss@^8.4.43:
- version "8.4.47"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365"
- integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==
+ version "8.5.6"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
+ integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
dependencies:
- nanoid "^3.3.7"
- picocolors "^1.1.0"
+ nanoid "^3.3.11"
+ picocolors "^1.1.1"
source-map-js "^1.2.1"
prelude-ls@^1.2.1:
@@ -7458,9 +7231,9 @@ prettier-linter-helpers@^1.0.0:
fast-diff "^1.1.2"
prettier@^3.4.2:
- version "3.4.2"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f"
- integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
+ integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
proc-log@^2.0.1:
version "2.0.1"
@@ -7499,24 +7272,185 @@ property-expr@^2.0.5:
resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8"
integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==
+prosemirror-changeset@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz#eee3299cfabc7a027694e9abdc4e85505e9dd5e7"
+ integrity sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==
+ dependencies:
+ prosemirror-transform "^1.0.0"
+
+prosemirror-collab@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz#0e8c91e76e009b53457eb3b3051fb68dad029a33"
+ integrity sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==
+ dependencies:
+ prosemirror-state "^1.0.0"
+
+prosemirror-commands@^1.0.0, prosemirror-commands@^1.6.2:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz#d101fef85618b1be53d5b99ea17bee5600781b38"
+ integrity sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==
+ dependencies:
+ prosemirror-model "^1.0.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.10.2"
+
+prosemirror-dropcursor@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz#2ed30c4796109ddeb1cf7282372b3850528b7228"
+ integrity sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==
+ dependencies:
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.1.0"
+ prosemirror-view "^1.1.0"
+
+prosemirror-gapcursor@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz#5fa336b83789c6199a7341c9493587e249215cb4"
+ integrity sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==
+ dependencies:
+ prosemirror-keymap "^1.0.0"
+ prosemirror-model "^1.0.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-view "^1.0.0"
+
+prosemirror-history@^1.0.0, prosemirror-history@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.4.1.tgz#cc370a46fb629e83a33946a0e12612e934ab8b98"
+ integrity sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==
+ dependencies:
+ prosemirror-state "^1.2.2"
+ prosemirror-transform "^1.0.0"
+ prosemirror-view "^1.31.0"
+ rope-sequence "^1.3.0"
+
+prosemirror-inputrules@^1.4.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz#e22bfaf1d6ea4fe240ad447c184af3d520d43c37"
+ integrity sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==
+ dependencies:
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.0.0"
+
+prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz#c0f6ab95f75c0b82c97e44eb6aaf29cbfc150472"
+ integrity sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==
+ dependencies:
+ prosemirror-state "^1.0.0"
+ w3c-keyname "^2.2.0"
+
+prosemirror-markdown@^1.13.1:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz#863eb3fd5f57a444e4378174622b562735b1c503"
+ integrity sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==
+ dependencies:
+ "@types/markdown-it" "^14.0.0"
+ markdown-it "^14.0.0"
+ prosemirror-model "^1.25.0"
+
+prosemirror-menu@^1.2.4:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz#dea00e7b623cea89f4d76963bee22d2ac2343250"
+ integrity sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==
+ dependencies:
+ crelt "^1.0.0"
+ prosemirror-commands "^1.0.0"
+ prosemirror-history "^1.0.0"
+ prosemirror-state "^1.0.0"
+
+prosemirror-model@^1.0.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.24.1, prosemirror-model@^1.25.0:
+ version "1.25.3"
+ resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.3.tgz#c657c60a361cb1e9c9f683d19118c0af50a6f7a9"
+ integrity sha512-dY2HdaNXlARknJbrManZ1WyUtos+AP97AmvqdOQtWtrrC5g4mohVX5DTi9rXNFSk09eczLq9GuNTtq3EfMeMGA==
+ dependencies:
+ orderedmap "^2.0.0"
+
+prosemirror-schema-basic@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz#389ce1ec09b8a30ea9bbb92c58569cb690c2d695"
+ integrity sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==
+ dependencies:
+ prosemirror-model "^1.25.0"
+
+prosemirror-schema-list@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz#5869c8f749e8745c394548bb11820b0feb1e32f5"
+ integrity sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==
+ dependencies:
+ prosemirror-model "^1.0.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.7.3"
+
+prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080"
+ integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==
+ dependencies:
+ prosemirror-model "^1.0.0"
+ prosemirror-transform "^1.0.0"
+ prosemirror-view "^1.27.0"
+
+prosemirror-tables@^1.6.4:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.8.1.tgz#896a234e3e18240b629b747a871369dae78c8a9a"
+ integrity sha512-DAgDoUYHCcc6tOGpLVPSU1k84kCUWTWnfWX3UDy2Delv4ryH0KqTD6RBI6k4yi9j9I8gl3j8MkPpRD/vWPZbug==
+ dependencies:
+ prosemirror-keymap "^1.2.2"
+ prosemirror-model "^1.25.0"
+ prosemirror-state "^1.4.3"
+ prosemirror-transform "^1.10.3"
+ prosemirror-view "^1.39.1"
+
+prosemirror-trailing-node@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz#5bc223d4fc1e8d9145e4079ec77a932b54e19e04"
+ integrity sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==
+ dependencies:
+ "@remirror/core-constants" "3.0.0"
+ escape-string-regexp "^4.0.0"
+
+prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.10.3, prosemirror-transform@^1.7.3:
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.4.tgz#56419eac14f9f56612c806ae46f9238648f3f02e"
+ integrity sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==
+ dependencies:
+ prosemirror-model "^1.21.0"
+
+prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.38.1, prosemirror-view@^1.39.1:
+ version "1.41.3"
+ resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.41.3.tgz#753a37ebe172a3e313ad2c3d85496f9ed1b2c256"
+ integrity sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==
+ dependencies:
+ prosemirror-model "^1.20.0"
+ prosemirror-state "^1.0.0"
+ prosemirror-transform "^1.1.0"
+
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
psl@^1.1.33:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
- integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6"
+ integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==
+ dependencies:
+ punycode "^2.3.1"
pump@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8"
- integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d"
+ integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
+punycode.js@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7"
+ integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==
+
punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
@@ -7548,17 +7482,17 @@ rc-resize-observer@^1.0.0:
resize-observer-polyfill "^1.5.1"
rc-util@^5.36.0, rc-util@^5.44.1:
- version "5.44.2"
- resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.44.2.tgz#6bc5db0e96ebdb515eb5977a7371887e5413a6f8"
- integrity sha512-uGSk3hpPBLa3/0QAcKhCjgl4SFnhQCJDLvvpoLdbR6KgDuXrujG+dQaUeUvBJr2ZWak1O/9n+cYbJiWmmk95EQ==
+ version "5.44.4"
+ resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.44.4.tgz#89ee9037683cca01cd60f1a6bbda761457dd6ba5"
+ integrity sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==
dependencies:
"@babel/runtime" "^7.18.3"
react-is "^18.2.0"
rc-virtual-list@^3.18.3:
- version "3.18.6"
- resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.18.6.tgz#87898dbb22563b3c58ca7fffcc1c77e32044a824"
- integrity sha512-TQ5SsutL3McvWmmxqQtMIbfeoE3dGjJrRSfKekgby7WQMpPIFvv4ghytp5Z0s3D8Nik9i9YNOCqHBfk86AwgAA==
+ version "3.19.2"
+ resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.19.2.tgz#1dd2d782c9a3ccbe537bb873447d73f83af8de0f"
+ integrity sha512-Ys6NcjwGkuwkeaWBDqfI3xWuZ7rDiQXlH1o2zLfFzATfEgXcqpk8CkgMfbJD81McqjcJVez25a3kPxCR807evA==
dependencies:
"@babel/runtime" "^7.20.0"
classnames "^2.2.6"
@@ -7592,9 +7526,9 @@ react-dom@^18.2.0:
scheduler "^0.23.2"
react-hook-form@^7.53.0:
- version "7.53.0"
- resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.53.0.tgz#3cf70951bf41fa95207b34486203ebefbd3a05ab"
- integrity sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==
+ version "7.65.0"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.65.0.tgz#6139dac77ed1081d0178b6830dc6f5ff6ff86361"
+ integrity sha512-xtOzDz063WcXvGWaHgLNrNzlsdFgtUWcb32E6WFaGTd7kPZG3EeDusjdZfUsPwKCKVXy1ZlntifaHZ4l8pAsmw==
react-i18next@^14.1.0:
version "14.1.3"
@@ -7620,51 +7554,51 @@ react-loading-skeleton@^3.4.0:
integrity sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==
react-redux@^9.1.1:
- version "9.1.2"
- resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.2.tgz#deba38c64c3403e9abd0c3fbeab69ffd9d8a7e4b"
- integrity sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5"
+ integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==
dependencies:
- "@types/use-sync-external-store" "^0.0.3"
- use-sync-external-store "^1.0.0"
+ "@types/use-sync-external-store" "^0.0.6"
+ use-sync-external-store "^1.4.0"
-react-refresh@^0.14.0:
- version "0.14.2"
- resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
- integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
+react-refresh@^0.17.0:
+ version "0.17.0"
+ resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
+ integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==
-react-remove-scroll-bar@^2.3.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c"
- integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==
+react-remove-scroll-bar@^2.3.7:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223"
+ integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==
dependencies:
- react-style-singleton "^2.2.1"
+ react-style-singleton "^2.2.2"
tslib "^2.0.0"
-react-remove-scroll@2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz#fb03a0845d7768a4f1519a99fdb84983b793dc07"
- integrity sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==
+react-remove-scroll@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz#d2101d414f6d81d7d3bf033f3c1cb4785789f753"
+ integrity sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==
dependencies:
- react-remove-scroll-bar "^2.3.6"
- react-style-singleton "^2.2.1"
+ react-remove-scroll-bar "^2.3.7"
+ react-style-singleton "^2.2.3"
tslib "^2.1.0"
- use-callback-ref "^1.3.0"
- use-sidecar "^1.1.2"
+ use-callback-ref "^1.3.3"
+ use-sidecar "^1.1.3"
react-router-dom@^6.22.3:
- version "6.26.2"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.2.tgz#a6e3b0cbd6bfd508e42b9342099d015a0ac59680"
- integrity sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==
+ version "6.30.1"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.1.tgz#da2580c272ddb61325e435478566be9563a4a237"
+ integrity sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==
dependencies:
- "@remix-run/router" "1.19.2"
- react-router "6.26.2"
+ "@remix-run/router" "1.23.0"
+ react-router "6.30.1"
-react-router@6.26.2:
- version "6.26.2"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.2.tgz#2f0a68999168954431cdc29dd36cec3b6fa44a7e"
- integrity sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==
+react-router@6.30.1:
+ version "6.30.1"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.1.tgz#ecb3b883c9ba6dbf5d319ddbc996747f4ab9f4c3"
+ integrity sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==
dependencies:
- "@remix-run/router" "1.19.2"
+ "@remix-run/router" "1.23.0"
react-shadow@^20.6.0:
version "20.6.0"
@@ -7673,19 +7607,18 @@ react-shadow@^20.6.0:
dependencies:
humps "^2.0.1"
-react-style-singleton@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4"
- integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==
+react-style-singleton@^2.2.2, react-style-singleton@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388"
+ integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==
dependencies:
get-nonce "^1.0.0"
- invariant "^2.2.4"
tslib "^2.0.0"
react-tooltip@^5.28.1:
- version "5.28.1"
- resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.28.1.tgz#5b25c7c53ce008b7ad0685e9f516101d80925cbc"
- integrity sha512-ZA4oHwoIIK09TS7PvSLFcRlje1wGZaxw6xHvfrzn6T82UcMEfEmHVCad16Gnr4NDNDh93HyN037VK4HDi5odfQ==
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.30.0.tgz#8e1af2d1bf91a2a5169302bd0eb82b62847ad224"
+ integrity sha512-Yn8PfbgQ/wmqnL7oBpz1QiDaLKrzZMdSUUdk7nVeGTwzbxCAJiJzR4VSYW+eIO42F1INt57sPUmpgKv0KwJKtg==
dependencies:
"@floating-ui/dom" "^1.6.1"
classnames "^2.3.0"
@@ -7713,6 +7646,11 @@ readable-stream@^3.4.0:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+readdirp@^4.0.1:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d"
+ integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
+
redux-thunk@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3"
@@ -7744,29 +7682,16 @@ reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
get-proto "^1.0.1"
which-builtin-type "^1.2.1"
-regenerator-runtime@^0.14.0:
- version "0.14.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
- integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
-
-regexp.prototype.flags@^1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334"
- integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==
+regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19"
+ integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==
dependencies:
- call-bind "^1.0.6"
- define-properties "^1.2.1"
- es-errors "^1.3.0"
- set-function-name "^2.0.1"
-
-regexp.prototype.flags@^1.5.3:
- version "1.5.3"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42"
- integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==
- dependencies:
- call-bind "^1.0.7"
+ call-bind "^1.0.8"
define-properties "^1.2.1"
es-errors "^1.3.0"
+ get-proto "^1.0.1"
+ gopd "^1.2.0"
set-function-name "^2.0.2"
require-directory@^2.1.1:
@@ -7785,9 +7710,9 @@ requires-port@^1.0.0:
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
resedit@^1.7.0:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/resedit/-/resedit-1.7.1.tgz#150c101000210968730141ae2eb504ca0aead165"
- integrity sha512-/FJ6/gKAXbcHtivannhecWsa43kGVFK3aHHv9Jm3x0eFiM31MoGihkAOWbm3UsvjYLRVw0zTkfARy2dI96JL1Q==
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/resedit/-/resedit-1.7.2.tgz#b1041170b99811710c13f949c7d225871de4cc78"
+ integrity sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==
dependencies:
pe-library "^0.4.1"
@@ -7846,9 +7771,9 @@ retry@^0.12.0:
integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
reusify@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
- integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
+ integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
rimraf@^3.0.2:
version "3.0.2"
@@ -7857,13 +7782,6 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
-rimraf@^5.0.5:
- version "5.0.10"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c"
- integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==
- dependencies:
- glob "^10.3.7"
-
roarr@^2.15.3:
version "2.15.4"
resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
@@ -7877,35 +7795,51 @@ roarr@^2.15.3:
sprintf-js "^1.1.2"
rollup@^4.20.0:
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.23.0.tgz#6eed667340a6e95407eebbbb65de1138fbce1a79"
- integrity sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.4.tgz#71e64cce96a865fcbaa6bb62c6e82807f4e378a1"
+ integrity sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==
dependencies:
- "@types/estree" "1.0.6"
+ "@types/estree" "1.0.8"
optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.23.0"
- "@rollup/rollup-android-arm64" "4.23.0"
- "@rollup/rollup-darwin-arm64" "4.23.0"
- "@rollup/rollup-darwin-x64" "4.23.0"
- "@rollup/rollup-linux-arm-gnueabihf" "4.23.0"
- "@rollup/rollup-linux-arm-musleabihf" "4.23.0"
- "@rollup/rollup-linux-arm64-gnu" "4.23.0"
- "@rollup/rollup-linux-arm64-musl" "4.23.0"
- "@rollup/rollup-linux-powerpc64le-gnu" "4.23.0"
- "@rollup/rollup-linux-riscv64-gnu" "4.23.0"
- "@rollup/rollup-linux-s390x-gnu" "4.23.0"
- "@rollup/rollup-linux-x64-gnu" "4.23.0"
- "@rollup/rollup-linux-x64-musl" "4.23.0"
- "@rollup/rollup-win32-arm64-msvc" "4.23.0"
- "@rollup/rollup-win32-ia32-msvc" "4.23.0"
- "@rollup/rollup-win32-x64-msvc" "4.23.0"
+ "@rollup/rollup-android-arm-eabi" "4.52.4"
+ "@rollup/rollup-android-arm64" "4.52.4"
+ "@rollup/rollup-darwin-arm64" "4.52.4"
+ "@rollup/rollup-darwin-x64" "4.52.4"
+ "@rollup/rollup-freebsd-arm64" "4.52.4"
+ "@rollup/rollup-freebsd-x64" "4.52.4"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.52.4"
+ "@rollup/rollup-linux-arm-musleabihf" "4.52.4"
+ "@rollup/rollup-linux-arm64-gnu" "4.52.4"
+ "@rollup/rollup-linux-arm64-musl" "4.52.4"
+ "@rollup/rollup-linux-loong64-gnu" "4.52.4"
+ "@rollup/rollup-linux-ppc64-gnu" "4.52.4"
+ "@rollup/rollup-linux-riscv64-gnu" "4.52.4"
+ "@rollup/rollup-linux-riscv64-musl" "4.52.4"
+ "@rollup/rollup-linux-s390x-gnu" "4.52.4"
+ "@rollup/rollup-linux-x64-gnu" "4.52.4"
+ "@rollup/rollup-linux-x64-musl" "4.52.4"
+ "@rollup/rollup-openharmony-arm64" "4.52.4"
+ "@rollup/rollup-win32-arm64-msvc" "4.52.4"
+ "@rollup/rollup-win32-ia32-msvc" "4.52.4"
+ "@rollup/rollup-win32-x64-gnu" "4.52.4"
+ "@rollup/rollup-win32-x64-msvc" "4.52.4"
fsevents "~2.3.2"
+rope-sequence@^1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425"
+ integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==
+
rrweb-cssom@^0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz#c73451a484b86dd7cfb1e0b2898df4b703183e4b"
integrity sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==
+rrweb-cssom@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2"
+ integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==
+
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -7914,22 +7848,12 @@ run-parallel@^1.1.9:
queue-microtask "^1.2.2"
rxjs@^7.4.0:
- version "7.8.1"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
- integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
+ version "7.8.2"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b"
+ integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==
dependencies:
tslib "^2.1.0"
-safe-array-concat@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb"
- integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==
- dependencies:
- call-bind "^1.0.7"
- get-intrinsic "^1.2.4"
- has-symbols "^1.0.3"
- isarray "^2.0.5"
-
safe-array-concat@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3"
@@ -7954,16 +7878,7 @@ safe-push-apply@^1.0.0:
es-errors "^1.3.0"
isarray "^2.0.5"
-safe-regex-test@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
- integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==
- dependencies:
- call-bind "^1.0.6"
- es-errors "^1.3.0"
- is-regex "^1.1.4"
-
-safe-regex-test@^1.1.0:
+safe-regex-test@^1.0.3, safe-regex-test@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1"
integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==
@@ -7984,139 +7899,143 @@ sanitize-filename@^1.6.3:
dependencies:
truncate-utf8-bytes "^1.0.0"
-sass-embedded-android-arm64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.80.6.tgz#748df1f7deabea3a81c2c647661d9696090e1b81"
- integrity sha512-4rC4ZGM/k4ENVjLXnK3JTst8e8FI9MHSol2Fl7dCdYyJ3KLnlt4qL4AEYfU8zq1tcBb7CBOSZVR+CzCKubnXdg==
+sass-embedded-all-unknown@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.93.2.tgz#dd9207a0dd4eea2f14774359e1d37efc61c7a63c"
+ integrity sha512-GdEuPXIzmhRS5J7UKAwEvtk8YyHQuFZRcpnEnkA3rwRUI27kwjyXkNeIj38XjUQ3DzrfMe8HcKFaqWGHvblS7Q==
+ dependencies:
+ sass "1.93.2"
-sass-embedded-android-arm@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.80.6.tgz#1fa2e08e5b2a77709f6e8cb8186c801ee140c0a9"
- integrity sha512-UeUKMTRsnz4/dh7IzvhjONxa4/jmVp539CHDd8VZOsqg9M3HcNJNIkUzQWbuwZ+nSlWrTuo7Tvn3XlypopCBzw==
+sass-embedded-android-arm64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.93.2.tgz#e5a6a7c9e98d4b4b12f2cb5e9f340564193a9ee4"
+ integrity sha512-346f4iVGAPGcNP6V6IOOFkN5qnArAoXNTPr5eA/rmNpeGwomdb7kJyQ717r9rbJXxOG8OAAUado6J0qLsjnjXQ==
-sass-embedded-android-ia32@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.80.6.tgz#43674c98454a3adb5da3cca0ba23340128bfbdff"
- integrity sha512-Lxz2SXE2KdHnynuHF+D6flDvrd55/zaEAWUeka9MxEr6FmR66d8UBOIy5ETwCSUd//S/SE5Jl6oTnHppgD1zNA==
+sass-embedded-android-arm@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.93.2.tgz#5970c732137b0a1abbb889305c462cf2ab11b91e"
+ integrity sha512-I8bpO8meZNo5FvFx5FIiE7DGPVOYft0WjuwcCCdeJ6duwfkl6tZdatex1GrSigvTsuz9L0m4ngDcX/Tj/8yMow==
-sass-embedded-android-riscv64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.80.6.tgz#59c9d53b1c800b53221d56cf55d9cf84b4418bac"
- integrity sha512-hKdxY/oOqB+JJhSoBTDM5DJO1j/xtxQgayh2cLCCUx37IQQe3SEdc3V2JFf/4mIo5peaS4cjqwwSATF+l2zaXg==
+sass-embedded-android-riscv64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.93.2.tgz#0b52b538729237cd08efc008fd39291ea36e058d"
+ integrity sha512-hSMW1s4yJf5guT9mrdkumluqrwh7BjbZ4MbBW9tmi1DRDdlw1Wh9Oy1HnnmOG8x9XcI1qkojtPL6LUuEJmsiDg==
-sass-embedded-android-x64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.80.6.tgz#a06a9f55f904c3ba628a3ae03c244f134f4f2bb1"
- integrity sha512-Eap2Fi3kTx/rVLBsOnOp5RYPr5+lFjTZ652zR24dmYFe9/sDgasakJIOPjOvD2bRuL9z0uWEY1AXVeeOPeZKrg==
+sass-embedded-android-x64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.93.2.tgz#793483a0a4848d06cd4f0cb44d2e0ebc906c0a20"
+ integrity sha512-JqktiHZduvn+ldGBosE40ALgQ//tGCVNAObgcQ6UIZznEJbsHegqStqhRo8UW3x2cgOO2XYJcrInH6cc7wdKbw==
-sass-embedded-darwin-arm64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.80.6.tgz#81a7019c92a8c8f76f7f98dfe15f6adfaf621e92"
- integrity sha512-0mnAx8Vq6Gxj3PQt3imgITfK33hhqrSKpyHSuab71gZZni5opsdtoggq2JawW+1taRFTEZwbZJLKZ0MBDbwCCA==
+sass-embedded-darwin-arm64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.93.2.tgz#03c2832c9e9b1e42563c36e7636e01bd724da134"
+ integrity sha512-qI1X16qKNeBJp+M/5BNW7v/JHCDYWr1/mdoJ7+UMHmP0b5AVudIZtimtK0hnjrLnBECURifd6IkulybR+h+4UA==
-sass-embedded-darwin-x64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.80.6.tgz#d1b551443930658bfa4cc92ca026d4b22023ce9d"
- integrity sha512-Ib20yNZFOrJ7YVT+ltoe+JQNKPcRclM3iLAK69XZZYcSeFM/72SCoQBAaVGIpT23dxDp7FXiE4lO602c3xTRwQ==
+sass-embedded-darwin-x64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.93.2.tgz#492f8e46ee0790b22c5119c9f2e729ae78cb24c7"
+ integrity sha512-4KeAvlkQ0m0enKUnDGQJZwpovYw99iiMb8CTZRSsQm8Eh7halbJZVmx67f4heFY/zISgVOCcxNg19GrM5NTwtA==
-sass-embedded-linux-arm64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.80.6.tgz#fe6255bbbe55590fb6405f098431b3841221a1b0"
- integrity sha512-n5r98pBXawrQQKaxIYCMM1zDpnngsqxTkOrmvsYLFiAMCSbR0lWf/7sBB33k/Pm0D6dsbp3jpHilCoQNKI3jIw==
+sass-embedded-linux-arm64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.93.2.tgz#144a4a056778c17011726885b0f94fccb6f389f7"
+ integrity sha512-9ftX6nd5CsShJqJ2WRg+ptaYvUW+spqZfJ88FbcKQBNFQm6L87luj3UI1rB6cP5EWrLwHA754OKxRJyzWiaN6g==
-sass-embedded-linux-arm@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.80.6.tgz#a6603b1ec087762a1128e836fd36851050b537b4"
- integrity sha512-QR0Q6TZox/ThuU2r9c0s3fKCgU2rXAEocpitdgxFp6tta+GsQlMFV3oON2unAa8Bwnuxkmf0YOaK0Oy/TwzkXw==
+sass-embedded-linux-arm@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.93.2.tgz#0df4594316c3b21b18bf60c8d75e2acddda09ef0"
+ integrity sha512-N3+D/ToHtzwLDO+lSH05Wo6/KRxFBPnbjVHASOlHzqJnK+g5cqex7IFAp6ozzlRStySk61Rp6d+YGrqZ6/P0PA==
-sass-embedded-linux-ia32@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.80.6.tgz#bedb53348f7e384ceabc9e0158b086045779af07"
- integrity sha512-O6dWZdcOkryRdDCxVMGOeVowgblpDgVcAuRtZ1F1X7XfbpDriTQm64D+9vVZIrywYSPoJfQMJJ662cr0wUs9IQ==
+sass-embedded-linux-musl-arm64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.93.2.tgz#212a5107f9d05853236def3cee40cba35ff6dd7b"
+ integrity sha512-+3EHuDPkMiAX5kytsjEC1bKZCawB9J6pm2eBIzzLMPWbf5xdx++vO1DpT7hD4bm4ZGn0eVHgSOKIfP6CVz6tVg==
-sass-embedded-linux-musl-arm64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.80.6.tgz#0f0e0bb68c90f0ae920d9a06760241f3f58c7a76"
- integrity sha512-VeUSHUi3MAsvOlg9QI4X/2j04h1659aE+7qKP/282CYBTrGkjFGSXZhIki9WKWDgIpDiSInRYXfQQRWhPhjCDg==
+sass-embedded-linux-musl-arm@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.93.2.tgz#29ebecef7ed479d0441b1cb8305c59724816fd07"
+ integrity sha512-XBTvx66yRenvEsp3VaJCb3HQSyqCsUh7R+pbxcN5TuzueybZi0LXvn9zneksdXcmjACMlMpIVXi6LyHPQkYc8A==
-sass-embedded-linux-musl-arm@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.80.6.tgz#41039f857684ee3470ec9e0d310add5f6f1b694d"
- integrity sha512-X9FC8s8fvQGRiXc+eATlZ57N44Iq3nNa0M0ugi3ysdJwkaNYvOeS4QzBHKQAaw3QiTqdxTnLUHHVBkyzdCi9pw==
+sass-embedded-linux-musl-riscv64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.93.2.tgz#935da64e1f8e10e9a0a0d045b2e2a78a26d26267"
+ integrity sha512-0sB5kmVZDKTYzmCSlTUnjh6mzOhzmQiW/NNI5g8JS4JiHw2sDNTvt1dsFTuqFkUHyEOY3ESTsfHHBQV8Ip4bEA==
-sass-embedded-linux-musl-ia32@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.80.6.tgz#8ff88c78ba3503a19d59c5b8fa172fdea00a67f8"
- integrity sha512-GqitS2Nab8ah0+wfCqaxW1hnI1piC08FimL6+lM9YWK5DbCOOF82IapbvJOy0feUmd/wNnHmyNTgE9h0zVMFdQ==
+sass-embedded-linux-musl-x64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.93.2.tgz#0f6a79b54ab7393376f7a7a4d19e8b5f6752db37"
+ integrity sha512-t3ejQ+1LEVuHy7JHBI2tWHhoMfhedUNDjGJR2FKaLgrtJntGnyD1RyX0xb3nuqL/UXiEAtmTmZY+Uh3SLUe1Hg==
-sass-embedded-linux-musl-riscv64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.80.6.tgz#aaa086a6ce9718d0fd7cbe584c0f2bf81bef3122"
- integrity sha512-ySs15z7QSRRQK/aByEEqaJLYW/sTpfynefNPZCtsVNVEzNRwy+DRpxNChtxo+QjKq97ocXETbdG5KLik7QOTJg==
+sass-embedded-linux-riscv64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.93.2.tgz#d98024c3a7dfac5d7410a75ca3cc1a7ff86ec3b7"
+ integrity sha512-e7AndEwAbFtXaLy6on4BfNGTr3wtGZQmypUgYpSNVcYDO+CWxatKVY4cxbehMPhxG9g5ru+eaMfynvhZt7fLaA==
-sass-embedded-linux-musl-x64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.80.6.tgz#ea0bb093837be3b6f473b9a1b5d09c4633f8e504"
- integrity sha512-DzeNqU/SN0mWFznoOH4RtVGcrg3Eoa41pUQhKMtrhNbCmIE1zNDunUiAEVTNpdHJF4nxf7ELUPXWmStM31CbUQ==
+sass-embedded-linux-x64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.93.2.tgz#d38476e53ba26b98c960dadd94f6d182566d69d0"
+ integrity sha512-U3EIUZQL11DU0xDDHXexd4PYPHQaSQa2hzc4EzmhHqrAj+TyfYO94htjWOd+DdTPtSwmLp+9cTWwPZBODzC96w==
-sass-embedded-linux-riscv64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.80.6.tgz#bc19c15796a3b3a3d67ea626058b3bab48344b1d"
- integrity sha512-AyoHJ3icV9xuJjq1YzJqpEj2XfiC/KBkVYTUrCELKiXP0DN1gi/BpUwZNCAgCM3CyEdMef4LQM/ztCYJxYzdyg==
+sass-embedded-unknown-all@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.93.2.tgz#51d0618999426bf311d16e48d7b53c208c26b514"
+ integrity sha512-7VnaOmyewcXohiuoFagJ3SK5ddP9yXpU0rzz+pZQmS1/+5O6vzyFCUoEt3HDRaLctH4GT3nUGoK1jg0ae62IfQ==
+ dependencies:
+ sass "1.93.2"
-sass-embedded-linux-x64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.80.6.tgz#db076fdf0bc3c1382c8f73c8d396293b893b31ef"
- integrity sha512-EohsE9CEqx0ycylnsEj/0DNPG99Tb0qAVZspiAs5xHFCJjXOFfp3cRQu0BRf+lZ1b72IhPFXymzVtojvzUHb7g==
+sass-embedded-win32-arm64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.93.2.tgz#806310afadb2e040204878718180b10828651d8a"
+ integrity sha512-Y90DZDbQvtv4Bt0GTXKlcT9pn4pz8AObEjFF8eyul+/boXwyptPZ/A1EyziAeNaIEIfxyy87z78PUgCeGHsx3Q==
-sass-embedded-win32-arm64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.80.6.tgz#e889c421b0b31e1297414dd89448385fe443d5e2"
- integrity sha512-29wETQi1ykeVvpd4zMVokpQKFSOZskGJzZawuuNCdo7BHjHKIRDsqbz8YT1CewHPBshI0hfD21fenmjxYjGXPQ==
-
-sass-embedded-win32-ia32@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.80.6.tgz#0934f3598e4fbe701b5e4e4d2a1fa6ef952f7024"
- integrity sha512-1s3OpK2iTIfIL/a91QhAQnffsbuWfnsM8Lx4Fxt0f7ErnxjCV6q8MUFTV/UhcLtLyTFnPCA62DLjp2KGCjMI9A==
-
-sass-embedded-win32-x64@1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.80.6.tgz#b7357b399c12cbb80dab2bee6f541b88a6015d76"
- integrity sha512-0pH4Zr9silHkcmLPC0ghnD3DI0vMsjA7dKvGR32/RbbjOSvHV5cDQRLiuVJAPp34dfMA7kJd1ysSchRdH0igAQ==
+sass-embedded-win32-x64@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.93.2.tgz#4bc3cefd0e79106d4d15074fed6dd99d0a782b32"
+ integrity sha512-BbSucRP6PVRZGIwlEBkp+6VQl2GWdkWFMN+9EuOTPrLxCJZoq+yhzmbjspd3PeM8+7WJ7AdFu/uRYdO8tor1iQ==
sass-embedded@^1.80.6:
- version "1.80.6"
- resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.80.6.tgz#efd66c12c7f117c2dcb558e8bf6bd00cc5cd49b2"
- integrity sha512-Og4aqBnaA3oJfIpHaLuNATAqzBRgUJDYJy2X15V59cot2wYOtiT/ciPnyuq1o7vpDEeOkHhEd+mSviSlXoETug==
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.93.2.tgz#8747862cfe2e3e70772a309223984681bf33f499"
+ integrity sha512-FvQdkn2dZ8DGiLgi0Uf4zsj7r/BsiLImNa5QJ10eZalY6NfZyjrmWGFcuCN5jNwlDlXFJnftauv+UtvBKLvepQ==
dependencies:
- "@bufbuild/protobuf" "^2.0.0"
+ "@bufbuild/protobuf" "^2.5.0"
buffer-builder "^0.2.0"
colorjs.io "^0.5.0"
- immutable "^4.0.0"
+ immutable "^5.0.2"
rxjs "^7.4.0"
supports-color "^8.1.1"
+ sync-child-process "^1.0.2"
varint "^6.0.0"
optionalDependencies:
- sass-embedded-android-arm "1.80.6"
- sass-embedded-android-arm64 "1.80.6"
- sass-embedded-android-ia32 "1.80.6"
- sass-embedded-android-riscv64 "1.80.6"
- sass-embedded-android-x64 "1.80.6"
- sass-embedded-darwin-arm64 "1.80.6"
- sass-embedded-darwin-x64 "1.80.6"
- sass-embedded-linux-arm "1.80.6"
- sass-embedded-linux-arm64 "1.80.6"
- sass-embedded-linux-ia32 "1.80.6"
- sass-embedded-linux-musl-arm "1.80.6"
- sass-embedded-linux-musl-arm64 "1.80.6"
- sass-embedded-linux-musl-ia32 "1.80.6"
- sass-embedded-linux-musl-riscv64 "1.80.6"
- sass-embedded-linux-musl-x64 "1.80.6"
- sass-embedded-linux-riscv64 "1.80.6"
- sass-embedded-linux-x64 "1.80.6"
- sass-embedded-win32-arm64 "1.80.6"
- sass-embedded-win32-ia32 "1.80.6"
- sass-embedded-win32-x64 "1.80.6"
+ sass-embedded-all-unknown "1.93.2"
+ sass-embedded-android-arm "1.93.2"
+ sass-embedded-android-arm64 "1.93.2"
+ sass-embedded-android-riscv64 "1.93.2"
+ sass-embedded-android-x64 "1.93.2"
+ sass-embedded-darwin-arm64 "1.93.2"
+ sass-embedded-darwin-x64 "1.93.2"
+ sass-embedded-linux-arm "1.93.2"
+ sass-embedded-linux-arm64 "1.93.2"
+ sass-embedded-linux-musl-arm "1.93.2"
+ sass-embedded-linux-musl-arm64 "1.93.2"
+ sass-embedded-linux-musl-riscv64 "1.93.2"
+ sass-embedded-linux-musl-x64 "1.93.2"
+ sass-embedded-linux-riscv64 "1.93.2"
+ sass-embedded-linux-x64 "1.93.2"
+ sass-embedded-unknown-all "1.93.2"
+ sass-embedded-win32-arm64 "1.93.2"
+ sass-embedded-win32-x64 "1.93.2"
+
+sass@1.93.2:
+ version "1.93.2"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.93.2.tgz#e97d225d60f59a3b3dbb6d2ae3c1b955fd1f2cd1"
+ integrity sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==
+ dependencies:
+ chokidar "^4.0.0"
+ immutable "^5.0.2"
+ source-map-js ">=0.6.2 <2.0.0"
+ optionalDependencies:
+ "@parcel/watcher" "^2.4.1"
sax@^1.2.4:
version "1.4.1"
@@ -8153,9 +8072,9 @@ semver@^6.2.0, semver@^6.3.1:
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3:
- version "7.6.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
- integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+ version "7.7.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946"
+ integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
serialize-error@^7.0.1:
version "7.0.1"
@@ -8164,7 +8083,7 @@ serialize-error@^7.0.1:
dependencies:
type-fest "^0.13.1"
-set-function-length@^1.2.1, set-function-length@^1.2.2:
+set-function-length@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
@@ -8176,7 +8095,7 @@ set-function-length@^1.2.1, set-function-length@^1.2.2:
gopd "^1.0.1"
has-property-descriptors "^1.0.2"
-set-function-name@^2.0.1, set-function-name@^2.0.2:
+set-function-name@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
@@ -8236,16 +8155,6 @@ side-channel-weakmap@^1.0.2:
object-inspect "^1.13.3"
side-channel-map "^1.0.1"
-side-channel@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
- integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
- dependencies:
- call-bind "^1.0.7"
- es-errors "^1.3.0"
- get-intrinsic "^1.2.4"
- object-inspect "^1.13.1"
-
side-channel@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
@@ -8268,9 +8177,9 @@ signal-exit@^4.0.1:
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
simple-swizzle@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
- integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.4.tgz#a8d11a45a11600d6a1ecdff6363329e3648c3667"
+ integrity sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==
dependencies:
is-arrayish "^0.3.1"
@@ -8318,11 +8227,11 @@ socks-proxy-agent@^7.0.0:
socks "^2.6.2"
socks@^2.6.2:
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
- integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
+ version "2.8.7"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea"
+ integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==
dependencies:
- ip-address "^9.0.5"
+ ip-address "^10.0.1"
smart-buffer "^4.2.0"
sound-play@^1.1.0:
@@ -8330,7 +8239,7 @@ sound-play@^1.1.0:
resolved "https://registry.yarnpkg.com/sound-play/-/sound-play-1.1.0.tgz#58ffa31d1bf51822d49d91ff7865591fd9376381"
integrity sha512-Bd/L0AoCwITFeOnpNLMsfPXrV5GG5NhrC/T6odveahYbhPZkdTnrFXRia9FCC5WBWdUTw1d+yvLBvi4wnD1xOA==
-source-map-js@^1.2.1:
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -8353,7 +8262,7 @@ split2@^4.0.0:
resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
-sprintf-js@^1.1.2, sprintf-js@^1.1.3:
+sprintf-js@^1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
@@ -8382,6 +8291,14 @@ state-local@^1.0.6:
lodash "^4.17.21"
object-sizeof "^1.2.0"
+stop-iteration-iterator@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad"
+ integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==
+ dependencies:
+ es-errors "^1.3.0"
+ internal-slot "^1.1.0"
+
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -8458,25 +8375,6 @@ string.prototype.trim@^1.2.10:
es-object-atoms "^1.0.0"
has-property-descriptors "^1.0.2"
-string.prototype.trim@^1.2.9:
- version "1.2.9"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4"
- integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.0"
- es-object-atoms "^1.0.0"
-
-string.prototype.trimend@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229"
- integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-object-atoms "^1.0.0"
-
string.prototype.trimend@^1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942"
@@ -8518,9 +8416,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
ansi-regex "^5.0.1"
strip-ansi@^7.0.1:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba"
+ integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==
dependencies:
ansi-regex "^6.0.1"
@@ -8529,18 +8427,17 @@ strip-json-comments@^3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-strnum@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
- integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
+strnum@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.1.tgz#cf2a6e0cf903728b8b2c4b971b7e36b4e82d46ab"
+ integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==
strtok3@^10.2.0:
- version "10.2.2"
- resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-10.2.2.tgz#a4c6d78d15db02c5eb20d92af3eedf81edaf09d2"
- integrity sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==
+ version "10.3.4"
+ resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-10.3.4.tgz#793ebd0d59df276a085586134b73a406e60be9c1"
+ integrity sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==
dependencies:
"@tokenizer/token" "^0.3.0"
- peek-readable "^7.0.0"
sudo-prompt@^9.2.1:
version "9.2.1"
@@ -8554,13 +8451,6 @@ sumchecker@^3.0.1:
dependencies:
debug "^4.1.0"
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -8590,13 +8480,24 @@ symbol-tree@^3.2.4:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
-synckit@^0.9.1:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.1.tgz#febbfbb6649979450131f64735aa3f6c14575c88"
- integrity sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==
+sync-child-process@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/sync-child-process/-/sync-child-process-1.0.2.tgz#45e7c72e756d1243e80b547ea2e17957ab9e367f"
+ integrity sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==
dependencies:
- "@pkgr/core" "^0.1.0"
- tslib "^2.6.2"
+ sync-message-port "^1.0.0"
+
+sync-message-port@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/sync-message-port/-/sync-message-port-1.1.3.tgz#6055c565ee8c81d2f9ee5aae7db757e6d9088c0c"
+ integrity sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==
+
+synckit@^0.11.7:
+ version "0.11.11"
+ resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0"
+ integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==
+ dependencies:
+ "@pkgr/core" "^0.2.9"
tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.2.1:
version "6.2.1"
@@ -8611,15 +8512,14 @@ tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.2.1:
yallist "^4.0.0"
tar@^7.4.3:
- version "7.4.3"
- resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571"
- integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.1.tgz#750a8bd63b7c44c1848e7bf982260a083cf747c9"
+ integrity sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==
dependencies:
"@isaacs/fs-minipass" "^4.0.0"
chownr "^3.0.0"
minipass "^7.1.2"
- minizlib "^3.0.1"
- mkdirp "^3.0.1"
+ minizlib "^3.1.0"
yallist "^5.0.0"
temp-file@^3.4.0:
@@ -8662,22 +8562,22 @@ tiny-typed-emitter@^2.1.0:
resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5"
integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==
-tinyexec@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98"
- integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==
+tinyexec@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.1.tgz#70c31ab7abbb4aea0a24f55d120e5990bfa1e0b1"
+ integrity sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==
-tldts-core@^6.1.78:
- version "6.1.78"
- resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.78.tgz#47b477d9742870daa01dbd5ff9a598a48379728c"
- integrity sha512-jS0svNsB99jR6AJBmfmEWuKIgz91Haya91Z43PATaeHJ24BkMoNRb/jlaD37VYjb0mYf6gRL/HOnvS1zEnYBiw==
+tldts-core@^6.1.86:
+ version "6.1.86"
+ resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8"
+ integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==
tldts@^6.1.32:
- version "6.1.78"
- resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.78.tgz#ee94576653a60d421ff94162c4e9060f2e62467b"
- integrity sha512-fSgYrW0ITH0SR/CqKMXIruYIPpNu5aDgUp22UhYoSrnUQwc7SBqifEBFNce7AAcygUPBo6a/gbtcguWdmko4RQ==
+ version "6.1.86"
+ resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7"
+ integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==
dependencies:
- tldts-core "^6.1.78"
+ tldts-core "^6.1.86"
tmp-promise@^3.0.2:
version "3.0.3"
@@ -8687,14 +8587,9 @@ tmp-promise@^3.0.2:
tmp "^0.2.0"
tmp@^0.2.0:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae"
- integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==
-
-to-fast-properties@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
- integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
+ integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
to-regex-range@^5.0.1:
version "5.0.1"
@@ -8704,10 +8599,11 @@ to-regex-range@^5.0.1:
is-number "^7.0.0"
token-types@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/token-types/-/token-types-6.0.0.tgz#1ab26be1ef9c434853500c071acfe5c8dd6544a3"
- integrity sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/token-types/-/token-types-6.1.1.tgz#85bd0ada82939b9178ecd5285881a538c4c00fdd"
+ integrity sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==
dependencies:
+ "@borewit/text-codec" "^0.1.0"
"@tokenizer/token" "^0.3.0"
ieee754 "^1.2.1"
@@ -8727,16 +8623,16 @@ tough-cookie@^4.1.4:
url-parse "^1.5.3"
tough-cookie@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.1.tgz#4641c1fdbf024927e29c5532edb7b6e5377ea1f2"
- integrity sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA==
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7"
+ integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==
dependencies:
tldts "^6.1.32"
-tr46@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec"
- integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==
+tr46@^5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca"
+ integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==
dependencies:
punycode "^2.3.1"
@@ -8748,9 +8644,9 @@ truncate-utf8-bytes@^1.0.0:
utf8-byte-length "^1.0.1"
ts-api-utils@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
- integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
+ integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
ts-node@^10.9.2:
version "10.9.2"
@@ -8771,16 +8667,11 @@ ts-node@^10.9.2:
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"
-tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0:
+tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2:
version "2.8.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-tslib@^2.0.3, tslib@^2.6.2:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
- integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
-
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -8803,15 +8694,6 @@ type-fest@^2.19.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
-typed-array-buffer@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
- integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==
- dependencies:
- call-bind "^1.0.7"
- es-errors "^1.3.0"
- is-typed-array "^1.1.13"
-
typed-array-buffer@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536"
@@ -8821,17 +8703,6 @@ typed-array-buffer@^1.0.3:
es-errors "^1.3.0"
is-typed-array "^1.1.14"
-typed-array-byte-length@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67"
- integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==
- dependencies:
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-proto "^1.0.3"
- is-typed-array "^1.1.13"
-
typed-array-byte-length@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce"
@@ -8843,18 +8714,6 @@ typed-array-byte-length@^1.0.3:
has-proto "^1.2.0"
is-typed-array "^1.1.14"
-typed-array-byte-offset@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063"
- integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==
- dependencies:
- available-typed-arrays "^1.0.7"
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-proto "^1.0.3"
- is-typed-array "^1.1.13"
-
typed-array-byte-offset@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355"
@@ -8868,18 +8727,6 @@ typed-array-byte-offset@^1.0.4:
is-typed-array "^1.1.15"
reflect.getprototypeof "^1.0.9"
-typed-array-length@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3"
- integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==
- dependencies:
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-proto "^1.0.3"
- is-typed-array "^1.1.13"
- possible-typed-array-names "^1.0.0"
-
typed-array-length@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d"
@@ -8892,15 +8739,25 @@ typed-array-length@^1.0.7:
possible-typed-array-names "^1.0.0"
reflect.getprototypeof "^1.0.6"
+typescript@5.4.5:
+ version "5.4.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611"
+ integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
+
typescript@^3.9:
version "3.9.10"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
typescript@^5.3.3, typescript@^5.4.3:
- version "5.6.2"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0"
- integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==
+ version "5.9.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
+ integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
+
+uc.micro@^2.0.0, uc.micro@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee"
+ integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==
uint8-util@^2.2.2, uint8-util@^2.2.5:
version "2.2.5"
@@ -8910,19 +8767,9 @@ uint8-util@^2.2.2, uint8-util@^2.2.5:
base64-arraybuffer "^1.0.2"
uint8array-extras@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.4.0.tgz#e42a678a6dd335ec2d21661333ed42f44ae7cc74"
- integrity sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==
-
-unbox-primitive@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
- integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
- dependencies:
- call-bind "^1.0.2"
- has-bigints "^1.0.2"
- has-symbols "^1.0.3"
- which-boxed-primitive "^1.0.2"
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.5.0.tgz#10d2a85213de3ada304fea1c454f635c73839e86"
+ integrity sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==
unbox-primitive@^1.1.0:
version "1.1.0"
@@ -8934,10 +8781,15 @@ unbox-primitive@^1.1.0:
has-symbols "^1.1.0"
which-boxed-primitive "^1.1.1"
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+undici-types@~6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
+ integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
+
+undici-types@~7.14.0:
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.14.0.tgz#4c037b32ca4d7d62fae042174604341588bc0840"
+ integrity sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==
unicorn-magic@^0.1.0:
version "0.1.0"
@@ -8978,15 +8830,15 @@ untildify@^3.0.2:
resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9"
integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==
-update-browserslist-db@^1.1.0, update-browserslist-db@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5"
- integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==
+update-browserslist-db@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
+ integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
dependencies:
escalade "^3.2.0"
- picocolors "^1.1.0"
+ picocolors "^1.1.1"
-uri-js@^4.2.2, uri-js@^4.4.1:
+uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
@@ -9001,30 +8853,30 @@ url-parse@^1.5.3:
querystringify "^2.1.1"
requires-port "^1.0.0"
-use-callback-ref@^1.3.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693"
- integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==
+use-callback-ref@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf"
+ integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==
dependencies:
tslib "^2.0.0"
-use-sidecar@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2"
- integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==
+use-sidecar@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb"
+ integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==
dependencies:
detect-node-es "^1.1.0"
tslib "^2.0.0"
-use-sync-external-store@^1.0.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9"
- integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==
+use-sync-external-store@^1.4.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d"
+ integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==
user-agents@^1.1.387:
- version "1.1.387"
- resolved "https://registry.yarnpkg.com/user-agents/-/user-agents-1.1.387.tgz#afc69da00b50eee7ffa17724890e755a6672b99f"
- integrity sha512-EQ1tx80ucECUrw+mY/lI4lVQTEN7nYflGpuLwqZS6vXw+pfzHMnhKPwZN9NiR+Mo9QxmDeNmk+2ZDEvInsxrxw==
+ version "1.1.669"
+ resolved "https://registry.yarnpkg.com/user-agents/-/user-agents-1.1.669.tgz#329b1c3f9fb9349f0b974a0b9cf6c0cd6d1d0c1c"
+ integrity sha512-pbIzG+AOqCaIpySKJ4IAm1l0VyE4jMnK4y1thV8lm8PYxI+7X5uWcppOK7zY79TCKKTAnJH3/4gaVIZHsjrmJA==
dependencies:
lodash.clonedeep "^4.5.0"
@@ -9038,10 +8890,10 @@ util-deprecate@^1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-uuid@^9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
- integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+uuid@^13.0.0:
+ version "13.0.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-13.0.0.tgz#263dc341b19b4d755eb8fe36b78d95a6b65707e8"
+ integrity sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==
v8-compile-cache-lib@^3.0.1:
version "3.0.1"
@@ -9062,19 +8914,19 @@ verror@^1.10.0:
core-util-is "1.0.2"
extsprintf "^1.2.0"
-vite-plugin-svgr@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz#9f3bf5206b0ec510287e56d16f1915e729bb4e6b"
- integrity sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==
+vite-plugin-svgr@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-4.5.0.tgz#253e4c703d1f0b30935c285ca8621f4857952338"
+ integrity sha512-W+uoSpmVkSmNOGPSsDCWVW/DDAyv+9fap9AZXBvWiQqrboJ08j2vh0tFxTD/LjwqwAd3yYSVJgm54S/1GhbdnA==
dependencies:
- "@rollup/pluginutils" "^5.0.5"
+ "@rollup/pluginutils" "^5.2.0"
"@svgr/core" "^8.1.0"
"@svgr/plugin-jsx" "^8.1.0"
-vite@^5.0.12:
- version "5.4.8"
- resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.8.tgz#af548ce1c211b2785478d3ba3e8da51e39a287e8"
- integrity sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==
+vite@5.4.21:
+ version "5.4.21"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.21.tgz#84a4f7c5d860b071676d39ba513c0d598fdc7027"
+ integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.43"
@@ -9087,6 +8939,11 @@ void-elements@3.1.0:
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==
+w3c-keyname@^2.2.0:
+ version "2.2.8"
+ resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5"
+ integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==
+
w3c-xmlserializer@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c"
@@ -9124,36 +8981,14 @@ whatwg-mimetype@^4.0.0:
integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==
whatwg-url@^14.0.0:
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.0.0.tgz#00baaa7fd198744910c4b1ef68378f2200e4ceb6"
- integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==
+ version "14.2.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663"
+ integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==
dependencies:
- tr46 "^5.0.0"
+ tr46 "^5.1.0"
webidl-conversions "^7.0.0"
-which-boxed-primitive@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
- integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
- dependencies:
- is-bigint "^1.0.1"
- is-boolean-object "^1.1.0"
- is-number-object "^1.0.4"
- is-string "^1.0.5"
- is-symbol "^1.0.3"
-
-which-boxed-primitive@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz#2d850d6c4ac37b95441a67890e19f3fda8b6c6d9"
- integrity sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==
- dependencies:
- is-bigint "^1.1.0"
- is-boolean-object "^1.2.0"
- is-number-object "^1.1.0"
- is-string "^1.1.0"
- is-symbol "^1.1.0"
-
-which-boxed-primitive@^1.1.1:
+which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e"
integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==
@@ -9193,37 +9028,16 @@ which-collection@^1.0.2:
is-weakmap "^2.0.2"
is-weakset "^2.0.3"
-which-typed-array@^1.1.14, which-typed-array@^1.1.15:
- version "1.1.15"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d"
- integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==
- dependencies:
- available-typed-arrays "^1.0.7"
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-tostringtag "^1.0.2"
-
-which-typed-array@^1.1.16:
- version "1.1.16"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.16.tgz#db4db429c4706feca2f01677a144278e4a8c216b"
- integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==
- dependencies:
- available-typed-arrays "^1.0.7"
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-tostringtag "^1.0.2"
-
-which-typed-array@^1.1.18:
- version "1.1.18"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad"
- integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==
+which-typed-array@^1.1.16, which-typed-array@^1.1.19:
+ version "1.1.19"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956"
+ integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==
dependencies:
available-typed-arrays "^1.0.7"
call-bind "^1.0.8"
- call-bound "^1.0.3"
- for-each "^0.3.3"
+ call-bound "^1.0.4"
+ for-each "^0.3.5"
+ get-proto "^1.0.1"
gopd "^1.2.0"
has-tostringtag "^1.0.2"
@@ -9281,15 +9095,10 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-ws@^8.18.0:
- version "8.18.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
- integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
-
-ws@^8.18.1:
- version "8.18.1"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb"
- integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==
+ws@^8.18.0, ws@^8.18.1:
+ version "8.18.3"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472"
+ integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==
xml-name-validator@^5.0.0:
version "5.0.0"
@@ -9327,9 +9136,9 @@ yallist@^5.0.0:
integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
yaml@^2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773"
- integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79"
+ integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==
yargs-parser@^21.1.1:
version "21.1.1"
@@ -9368,21 +9177,16 @@ yocto-queue@^0.1.0:
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
yocto-queue@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110"
- integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.1.tgz#36d7c4739f775b3cbc28e6136e21aa057adec418"
+ integrity sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==
yup@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/yup/-/yup-1.5.0.tgz#1aaa5e453f04424094b9c8a0e5292e0ac2d97246"
- integrity sha512-NJfBIHnp1QbqZwxcgl6irnDMIsb/7d1prNhFx02f1kp8h+orpi4xs3w90szNpOh68a/iHPdMsYvhZWoDmUvXBQ==
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/yup/-/yup-1.7.1.tgz#4c47c6bb367df08d4bc597f8c4c4f5fc4277f6ab"
+ integrity sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==
dependencies:
property-expr "^2.0.5"
tiny-case "^1.0.3"
toposort "^2.0.2"
type-fest "^2.19.0"
-
-zod@^3.24.1:
- version "3.24.1"
- resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee"
- integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==