diff --git a/.github/actions/build-setup/action.yml b/.github/actions/build-setup/action.yml new file mode 100644 index 000000000..b3f35dfd5 --- /dev/null +++ b/.github/actions/build-setup/action.yml @@ -0,0 +1,84 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Build App Setup +description: Setup before building the app + +inputs: + NPMRC_FILE: + description: 'Secret with the contents of .npmrc' + required: true + ENV_CONFIG_JS: + description: 'Contents of the file `opal.config.js` for the given environment' + required: true + ENV_GOOGLE_SERVICES: + description: 'Contents of the file `google-services.json` for the given environment' + required: true + +runs: + using: "composite" + steps: + # Install dependencies + - name: Install dependencies + uses: ./.github/actions/install-dependencies + with: + NPMRC_FILE: ${{ inputs.NPMRC_FILE }} + + # Initialize the environment files needed to build the app from repository-level Actions variables + - name: Load environment files + run: | + mkdir env/$ENVIRONMENT + echo "${ENV_CONFIG_JS}" > env/$ENVIRONMENT/opal.config.js + echo "${ENV_GOOGLE_SERVICES}" > env/$ENVIRONMENT/google-services.json + shell: bash + env: + ENV_CONFIG_JS: ${{ inputs.ENV_CONFIG_JS }} + ENV_GOOGLE_SERVICES: ${{ inputs.ENV_GOOGLE_SERVICES }} + + # Setup for the next step, calculate-build-number + # Ensure the sed command works the same way on Linux and Mac by installing gnu-sed on Mac + - name: Install gnu-sed if running on macOS + run: | + if [ "$IS_ON_MACOS" == "true" ]; then + echo "Installing gnu-sed" + brew install gnu-sed + echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> "$GITHUB_PATH" + else + echo "Not on macOS, using default sed" + fi + shell: bash + env: + IS_ON_MACOS: ${{ runner.os == 'macOS' }} + + # Calculate the app's build number, for example the number '2' in 1.0.0 (2). + - name: Calculate build number + id: calculate-build-number + # Calculate the number of commits (inclusive) between the last tagged version (e.g. v2.0.0) and the current commit + # This represents the build number; for example, the first commit tagged v2.0.0 will be 2.0.0 (1). The next commit will be 2.0.0 (2), and so on, until the next tag. + # This is only applicable on the 'main' branch; if not on main, use default value '1' + run: | + LATEST_TAG=$(git describe --tags --abbrev=0 --match v*) + COMMIT_DISTANCE=$(git rev-list --count $LATEST_TAG..HEAD) + NEW_BUILD_NUMBER=$((COMMIT_DISTANCE + 1)) + if [ "$IS_ON_MAIN" = true ]; then + echo "Calculating build number" + BUILD_NUMBER=$NEW_BUILD_NUMBER + else + echo "Execution is not on the main branch, defaulting to 1" + BUILD_NUMBER=1 + fi + echo "BUILD_NUMBER=$BUILD_NUMBER" >> "$GITHUB_OUTPUT" + echo "Using build number = $BUILD_NUMBER" + shell: bash + env: + IS_ON_MAIN: ${{ github.ref_name == 'main' }} + + # Replace the build number in the file opal.config.js with the newly calculated value. + - name: Replace build number in opal.config.js + run: | + sed --in-place --regexp-extended "s/\"BUILD_NUMBER\"\: .+\,/\"BUILD_NUMBER\"\: ${BUILD_NUMBER}\,/" env/$ENVIRONMENT/opal.config.js + grep BUILD_NUMBER env/$ENVIRONMENT/opal.config.js + shell: bash + env: + BUILD_NUMBER: ${{ steps.calculate-build-number.outputs.BUILD_NUMBER }} diff --git a/.github/actions/deploy-app-setup/action.yml b/.github/actions/deploy-app-setup/action.yml new file mode 100644 index 000000000..95302a2c1 --- /dev/null +++ b/.github/actions/deploy-app-setup/action.yml @@ -0,0 +1,37 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Deploy App Setup +description: Setup before deploying the mobile app to Firebase + +inputs: + ENVIRONMENT: + description: 'Environment in which to deploy the app' + required: true + GOOGLE_APPLICATION_CREDENTIALS: + description: 'Contents of the service account file used to access the Firebase project for the given environment' + required: true + +runs: + using: "composite" + steps: + - name: Prepare Firebase release notes + # Save release notes as a multiline string: https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#multiline-strings + run: | + { + echo 'RELEASE_NOTES<> "$GITHUB_ENV" + shell: bash + env: + ENVIRONMENT: ${{ inputs.ENVIRONMENT }} + + - name: Load service account used to access Firebase + run: | + echo "$GOOGLE_APPLICATION_CREDENTIALS" > service-account.txt + echo GOOGLE_APPLICATION_CREDENTIALS=service-account.txt >> "$GITHUB_ENV" + shell: bash + env: + GOOGLE_APPLICATION_CREDENTIALS: ${{ inputs.GOOGLE_APPLICATION_CREDENTIALS }} diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml new file mode 100644 index 000000000..b71f67189 --- /dev/null +++ b/.github/actions/install-dependencies/action.yml @@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Install Dependencies +description: Install the dependencies needed by the app, using npm + +inputs: + NPMRC_FILE: + description: 'Secret with the contents of .npmrc' + required: true + +runs: + using: "composite" + steps: + # Install dependencies + - name: Load .npmrc + run: echo "${NPMRC_FILE}" > .npmrc + shell: bash + env: + NPMRC_FILE: ${{ inputs.NPMRC_FILE }} + # Use setup-node's built-in functionality for caching and restoring npm dependencies + # See: https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows + - uses: actions/setup-node@v4.4.0 + with: + # renovate: datasource=node-version dependency=node + node-version: 22.17.1 + cache: 'npm' + - name: Check npm installation + run: npm -v + shell: bash + - name: Install dependencies + run: npm ci + shell: bash diff --git a/.github/workflows/build-deploy-app.yml b/.github/workflows/build-deploy-app.yml new file mode 100644 index 000000000..2c5f828e2 --- /dev/null +++ b/.github/workflows/build-deploy-app.yml @@ -0,0 +1,219 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +# This workflow is explained in `docs/deployment/ci-cd.md`; please keep that documentation file up to date when making changes here. + +name: Build and Deploy App +# Default to dev when running automatically (see also "env" below) +run-name: Building and (optionally) deploying the mobile app for ${{ inputs.ENVIRONMENT || 'dev' }} 📦🚀 +on: + # When pushing to main, automatically build for dev + push: + branches: + - main + + # Offer a manual interface to build for all other environments as needed + workflow_dispatch: + inputs: + ENVIRONMENT: + description: 'Environment in which to build' + type: choice + required: true + default: 'dev' + options: + - dev + - prod + DEPLOY: + description: 'Deploy the resulting mobile app' + required: true + default: true + type: boolean + +env: + # Read the target environment from workflow_dispatch inputs, or default to dev + ENVIRONMENT: ${{ inputs.ENVIRONMENT || 'dev' }} + # The name of the group to which the app is deployed (via Firebase App Distribution) + FIREBASE_GROUP: "general" + +permissions: + contents: read + +jobs: + build-android: + runs-on: macos-latest + steps: + # Setup + - name: Print environment + run: echo "Environment = $ENVIRONMENT" + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + # Fetch part of the commit history and its tags, in order to calculate the build number in `build-setup` + fetch-depth: ${{ vars.FETCH_DEPTH }} + fetch-tags: true + - name: Set up build + uses: ./.github/actions/build-setup + with: + NPMRC_FILE: ${{ secrets.NPMRC_FILE }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT)] }} + + # Build the app + - name: Build the app + run: npm run build:app:android --env="$ENVIRONMENT" + - name: Rename build output + id: rename-android + run: | + mv "./platforms/android/app/build/outputs/apk/debug/app-debug.apk" "opal-${ENVIRONMENT}.apk" + echo "ARTIFACT_NAME=opal-${ENVIRONMENT}.apk" >> "$GITHUB_OUTPUT" + - name: Archive build output + uses: actions/upload-artifact@v4.6.2 + with: + name: android-app + path: ${{ steps.rename-android.outputs.ARTIFACT_NAME }} + + outputs: + ARTIFACT_NAME: ${{ steps.rename-android.outputs.ARTIFACT_NAME }} + + + build-ios: + runs-on: macos-latest + steps: + # Setup + - name: Print environment + run: echo "Environment = $ENVIRONMENT" + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + # Fetch part of the commit history and its tags, in order to calculate the build number in `build-setup` + fetch-depth: ${{ vars.FETCH_DEPTH }} + fetch-tags: true + - name: Set up build + uses: ./.github/actions/build-setup + with: + NPMRC_FILE: ${{ secrets.NPMRC_FILE }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT)] }} + + # Install an Apple certificate and provisioning profile used to build the app for iOS + # See: https://docs.github.com/en/actions/use-cases-and-examples/deploying/installing-an-apple-certificate-on-macos-runners-for-xcode-development + - name: Install the Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64_FILE }} + P12_PASSWORD: ${{ secrets.BUILD_CERTIFICATE_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets[format('{0}_PROVISIONING_PROFILE_BASE64_FILE', env.ENVIRONMENT)] }} # zizmor: ignore[overprovisioned-secrets] + KEYCHAIN_PASSWORD: ${{ secrets.TEMPORARY_KEYCHAIN_PASSWORD }} + run: | + # Create variables + CERTIFICATE_PATH="$RUNNER_TEMP"/build_certificate.p12 + PP_PATH="$RUNNER_TEMP"/build_pp.mobileprovision + KEYCHAIN_PATH="$RUNNER_TEMP"/app-signing.keychain-db + + # Import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o "$CERTIFICATE_PATH" + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o "$PP_PATH" + + # Create temporary keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + # Options: -lut: lock keychain when the system sleeps, lock keychain after timeout interval, specify timeout interval in seconds + security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH" + security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + + # Import certificate to keychain + # Options: -P: specify wrapping passphrase immediately; -A: allow any application to access the imported key without warning; -t: type; -f: format; -k: target keychain to import into + security import "$CERTIFICATE_PATH" -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH" + # Options: -S: comma-separated list of of allowed partition IDs; -k: password for keychain (required) + security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + # Options: -d: use the specified preference domain; -s: set the search list to the specified keychains + security list-keychain -d user -s "$KEYCHAIN_PATH" + + # Apply provisioning profile + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + cp "$PP_PATH" ~/Library/MobileDevice/Provisioning\ Profiles + + # Build the app + - name: Build the app + run: npm run build:app:ios:ci --env="$ENVIRONMENT" --devteam="$IOS_DEVELOPMENT_TEAM" --provisioningprofile="$PROVISIONING_PROFILE_UUID" + env: + IOS_DEVELOPMENT_TEAM: ${{ secrets.IOS_DEVELOPMENT_TEAM }} + PROVISIONING_PROFILE_UUID: ${{ secrets[format('{0}_PROVISIONING_PROFILE_UUID', env.ENVIRONMENT)] }} # zizmor: ignore[overprovisioned-secrets] + - name: Rename build output + id: rename-ios + run: | + mv ./platforms/ios/build/Debug-iphoneos/*.ipa "opal-${ENVIRONMENT}.ipa" + echo "ARTIFACT_NAME=opal-${ENVIRONMENT}.ipa" >> "$GITHUB_OUTPUT" + - name: Archive build output + uses: actions/upload-artifact@v4.6.2 + with: + name: ios-app + path: ${{ steps.rename-ios.outputs.ARTIFACT_NAME }} + + outputs: + ARTIFACT_NAME: ${{ steps.rename-ios.outputs.ARTIFACT_NAME }} + + + deploy-android: + needs: build-android + runs-on: ubuntu-latest + # Deploy manually via inputs, or automatically (to dev) when building on main + if: ${{ inputs.DEPLOY || github.ref_name == 'main' }} + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + - name: Download Android build artifact + uses: actions/download-artifact@v4.3.0 + with: + name: android-app + run-id: ${{ github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Set up deployment + uses: ./.github/actions/deploy-app-setup + with: + ENVIRONMENT: ${{ env.ENVIRONMENT }} + GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets[format('{0}_FIREBASE_SERVICE_ACCOUNT', env.ENVIRONMENT)] }} # zizmor: ignore[overprovisioned-secrets] + + # Deploy the app + # Deployment via firebase-tools implicitly uses a service account assigned to $GOOGLE_APPLICATION_CREDENTIALS (from values defined in the GitHub project settings) + # This service account provides permissions for Firebase app distribution + # See: https://firebase.google.com/docs/admin/setup#initialize_the_sdk_in_non-google_environments + - name: Deploy the app + run: npx firebase-tools appdistribution:distribute "$ARTIFACT_NAME" --app "$FIREBASE_APP_ANDROID" --release-notes "$RELEASE_NOTES" --groups "$FIREBASE_GROUP" + env: + ARTIFACT_NAME: ${{ needs.build-android.outputs.ARTIFACT_NAME }} + FIREBASE_APP_ANDROID: ${{ vars[format('{0}_FIREBASE_APP_ANDROID', env.ENVIRONMENT)] }} + FIREBASE_GROUP: ${{ env.FIREBASE_GROUP }} + + + deploy-ios: + needs: build-ios + runs-on: ubuntu-latest + # Deploy manually via inputs, or automatically (to dev) when building on main + if: ${{ inputs.DEPLOY || github.ref_name == 'main' }} + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + - name: Download iOS build artifact + uses: actions/download-artifact@v4.3.0 + with: + name: ios-app + run-id: ${{ github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Set up deployment + uses: ./.github/actions/deploy-app-setup + with: + ENVIRONMENT: ${{ env.ENVIRONMENT }} + GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets[format('{0}_FIREBASE_SERVICE_ACCOUNT', env.ENVIRONMENT)] }} # zizmor: ignore[overprovisioned-secrets] + + # Deploy the app + # Deployment implicitly uses $GOOGLE_APPLICATION_CREDENTIALS; see deploy-android above for more details + - name: Deploy the app + run: npx firebase-tools appdistribution:distribute "$ARTIFACT_NAME" --app "$FIREBASE_APP_IOS" --release-notes "$RELEASE_NOTES" --groups "$FIREBASE_GROUP" + env: + ARTIFACT_NAME: ${{ needs.build-ios.outputs.ARTIFACT_NAME }} + FIREBASE_APP_IOS: ${{ vars[format('{0}_FIREBASE_APP_IOS', env.ENVIRONMENT)] }} + FIREBASE_GROUP: ${{ env.FIREBASE_GROUP }} diff --git a/.github/workflows/build-deploy-web.yml b/.github/workflows/build-deploy-web.yml new file mode 100644 index 000000000..852eca1ea --- /dev/null +++ b/.github/workflows/build-deploy-web.yml @@ -0,0 +1,121 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Build and Deploy Web +# Default to dev when running automatically (see also "env" below) +run-name: Building and (optionally) deploying the web app for ${{ inputs.ENVIRONMENT || 'dev' }} 📦🚀 +on: + # When pushing to main, automatically build for dev + push: + branches: + - main + + # When updating a pull request or adding a pull request to a merge queue, automatically build for dev + pull_request: + merge_group: + + # Offer a manual interface to build for all other environments as needed + workflow_dispatch: + inputs: + ENVIRONMENT: + description: 'Environment in which to build' + type: choice + required: true + default: 'dev' + options: + - dev + - prod + DEPLOY: + description: 'Deploy the resulting web app' + required: true + default: true + type: boolean + +env: + # Read the target environment from workflow_dispatch inputs, or default to dev + ENVIRONMENT: ${{ inputs.ENVIRONMENT || 'dev' }} + +permissions: + contents: read + +jobs: + build-web: + runs-on: ubuntu-latest + steps: + # Setup + - name: Print environment + run: echo "Environment = $ENVIRONMENT" + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + # Fetch part of the commit history and its tags, in order to calculate the build number in `build-setup` + fetch-depth: ${{ vars.FETCH_DEPTH }} + fetch-tags: true + - name: Set up build + uses: ./.github/actions/build-setup + with: + NPMRC_FILE: ${{ secrets.NPMRC_FILE }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT)] }} + + # Build for web + - name: Build the web app + run: npm run build:web --env="$ENVIRONMENT" + - name: Organize the folder structure for the output + run: | + mkdir web-app + cp -r www web-app + - name: Archive build output + uses: actions/upload-artifact@v4.6.2 + with: + name: web-app + path: web-app + + + deploy-web: + needs: build-web + runs-on: ubuntu-latest + # Deploy manually via inputs, or automatically (to dev) when building on main + if: ${{ inputs.DEPLOY || github.ref_name == 'main' }} + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + - name: Ensure $ENVIRONMENT is defined to avoid destructive mirroring on the server + run: | + echo "Environment = $ENVIRONMENT; target folder for upload is ./app/${ENVIRONMENT}/" + if [ -z "$ENVIRONMENT" ]; then exit 1; fi + shell: bash + - name: Download web build artifact (`www`) + uses: actions/download-artifact@v4.3.0 + with: + name: web-app + run-id: ${{ github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Install lftp + run: | + sudo apt-get install lftp + lftp --version + - name: List contents of `www` + run: ls -la www + + # Upload web files + # See: https://www.cyberciti.biz/faq/lftp-mirror-example/ + # See: https://linuxconfig.org/lftp-tutorial-on-linux-with-examples + - name: Upload files using lftp + run: > + lftp -c " + set cmd:fail-exit yes; + open $FTP_HOST + user $FTP_USER $FTP_PASSWORD; + mirror --exclude='app' --exclude='content' --reverse --delete --verbose ./static/landingpage/ ./app/${ENVIRONMENT}/; + mirror --reverse --delete --use-pget-n=10 --verbose ./www/ ./app/${ENVIRONMENT}/app/; + ls -la app/${ENVIRONMENT}; + bye + " + env: + FTP_HOST: ${{ vars.FTP_HOST }} + FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} + FTP_USER: ${{ vars.FTP_USER }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ebf292a6..241852cf6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 @@ -23,7 +23,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@4.2.2 + - uses: actions/checkout@v4.2.2 with: persist-credentials: false - uses: mschoettle/pre-commit-action@v4.2.3 @@ -31,3 +31,14 @@ jobs: run-reuse-workflow: uses: opalmedapps/.github/.github/workflows/reuse.yaml@main + + check-thirdparty-notice: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + - uses: opalmedapps/actions/actions/check-thirdparty-notice@main + with: + package-file: './package.json' + additional-dependencies: angular-ui-bootstrap Roboto-Font diff --git a/.github/workflows/increment-version.yml b/.github/workflows/increment-version.yml new file mode 100644 index 000000000..955f7c1ac --- /dev/null +++ b/.github/workflows/increment-version.yml @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Increment Version +run-name: Incrementing the app version using semantic-release +on: + # Offer a manual interface to run semantic-release + workflow_dispatch: + +permissions: + contents: read + +jobs: + # See: https://semantic-release.gitbook.io/semantic-release/recipes/ci-configurations/github-actions#node-project-configuration + increment-version: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + # Fetch part of the commit history, used by semantic-release to calculate a new version number + fetch-depth: ${{ vars.FETCH_DEPTH }} + - name: Install dependencies + uses: ./.github/actions/install-dependencies + with: + NPMRC_FILE: ${{ secrets.NPMRC_FILE }} + + # Increment the version + - name: Run semantic-release + run: npx semantic-release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e1207f70c..0510dadd4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,7 @@ default: # run jobs on GitLab shared runners by default # only run those jobs that need our own build machine (macOS) specifically - image: node:22.14.0-alpine3.21 + image: node:22.17.1-alpine3.22 # Cache modules in between pipelines # See: https://javascript.plainenglish.io/improving-ci-performance-aka-how-to-save-your-money-31ff691360e4 cache: @@ -170,7 +170,7 @@ build android: script: - java -version - gradle -v - - npm run build:app:android:device --env=$ENV + - npm run build:app:android --env=$ENV - mv "./platforms/android/app/build/outputs/apk/debug/app-debug.apk" "opal-$ENV.apk" artifacts: expire_in: 1 day @@ -188,7 +188,7 @@ build android release (apk): - gradle -v - apksigner --version # Build the apk in release mode - - npm run build:app:android:device:release:apk --env=$ENV + - npm run build:app:android:release:apk --env=$ENV - mv ./platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk app-release-unsigned.apk # Sign the apk - zipalign -v -f -p 4 app-release-unsigned.apk app-unsigned-aligned.apk @@ -210,7 +210,7 @@ build android release (aab): - java -version - gradle -v # Build the aab in release mode - - npm run build:app:android:device:release --env=$ENV + - npm run build:app:android:release --env=$ENV - mv ./platforms/android/app/build/outputs/bundle/release/app-release.aab app-release-unsigned.aab # Sign the aab - jarsigner -verbose -sigalg SHA512withRSA -digestalg SHA512 -keystore $ANDROID_UPLOAD_KEY_PATH -storepass $ANDROID_UPLOAD_KEY_PASSWORD -signedjar app-release-signed.aab app-release-unsigned.aab $ANDROID_UPLOAD_KEY_ALIAS @@ -231,7 +231,7 @@ build ios: # Fixes Bus Error when cordova invokes pod install # See: https://stackoverflow.com/a/70581304 - gem install --user-install ffi -- --enable-libffi-alloc - - npm run build:app:ios:device:ci --env=$ENV --devteam=$IOS_DEVELOPMENT_TEAM + - npm run build:app:ios:ci --env=$ENV --devteam=$IOS_DEVELOPMENT_TEAM - mv ./platforms/ios/build/Debug-iphoneos/*.ipa "opal-$ENV.ipa" artifacts: expire_in: 1 day diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 76ddf8a47..6a4b096d9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 diff --git a/.typos.toml b/.typos.toml index 0cc875e74..0e4cf4192 100644 --- a/.typos.toml +++ b/.typos.toml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index dd0eb047f..a3545450a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +## [2.2.7](https://github.com/opalmedapps/opal-app/compare/v2.2.6...v2.2.7) (2025-07-30) + + +### Bug Fixes + +* add unilingual support ([#1395](https://github.com/opalmedapps/opal-app/issues/1395)) ([b722b3e](https://github.com/opalmedapps/opal-app/commit/b722b3e9db6ac2dd4ac10baf31d5a9d1d98eac84)) +* clean up translations ([#1381](https://github.com/opalmedapps/opal-app/issues/1381)) ([72a8c2c](https://github.com/opalmedapps/opal-app/commit/72a8c2c7c080c9c44746a30e2621c826ffd7c399)) +* **deps:** update babel monorepo (minor) ([#1392](https://github.com/opalmedapps/opal-app/issues/1392)) ([72bdd16](https://github.com/opalmedapps/opal-app/commit/72bdd163130be866eae55ea0fe64dae2afadcf5f)) +* **deps:** update dependency @babel/runtime to v7.28.2 ([#1412](https://github.com/opalmedapps/opal-app/issues/1412)) ([31810ab](https://github.com/opalmedapps/opal-app/commit/31810ab75eea9cce6a299056568b0cd1dc9aded5)) +* **deps:** update dependency @havesource/cordova-plugin-push to v6 ([#1408](https://github.com/opalmedapps/opal-app/issues/1408)) ([d2ec52e](https://github.com/opalmedapps/opal-app/commit/d2ec52e6b6ecfa5d7119eb36078cab2fca411a2e)) +* **deps:** update dependency cordova-android to v14 ([#1403](https://github.com/opalmedapps/opal-app/issues/1403)) ([34902b1](https://github.com/opalmedapps/opal-app/commit/34902b12d315963f14ceb11085a0cc2157433e38)) +* **deps:** update dependency firebase to v12 ([#1409](https://github.com/opalmedapps/opal-app/issues/1409)) ([fd8e559](https://github.com/opalmedapps/opal-app/commit/fd8e5592984d6dcdecd87d63a3119693d704cfba)) +* **deps:** update dependency marked to v15.0.12 ([#1402](https://github.com/opalmedapps/opal-app/issues/1402)) ([fc58702](https://github.com/opalmedapps/opal-app/commit/fc58702e9ea63a38a78cbca2d6e0ec81775e236e)) +* **deps:** update plotly packages to v3.0.2 (patch) ([#1406](https://github.com/opalmedapps/opal-app/issues/1406)) ([1ae73a0](https://github.com/opalmedapps/opal-app/commit/1ae73a0b9a2737cf0ce367e28c9b242f61472ff4)) +* **deps:** update plotly packages to v3.0.3 (patch) ([#1411](https://github.com/opalmedapps/opal-app/issues/1411)) ([144067f](https://github.com/opalmedapps/opal-app/commit/144067f31a8018b6ae07f74c350874ba4047ab65)) +* ensure that security answer input field can be selected on iOS ([#1378](https://github.com/opalmedapps/opal-app/issues/1378)) ([8c73ba6](https://github.com/opalmedapps/opal-app/commit/8c73ba661fcf249203d150922fb8dc8c38cd3c16)) +* remove false untranslated string warnings from the init page ([#1376](https://github.com/opalmedapps/opal-app/issues/1376)) ([767b57c](https://github.com/opalmedapps/opal-app/commit/767b57c063c4448a29f99e9290a717107b689ce2)) + ## [2.2.6](https://github.com/opalmedapps/opal-app/compare/v2.2.5...v2.2.6) (2025-04-29) diff --git a/README.md b/README.md index 8b095e009..6e2199d3f 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ This section covers installation steps to build the app's web code on your local - To debug the code, open the developer console, switch to mobile view and [disable caching](http://nicholasbering.ca/tools/2016/10/09/devtools-disable-caching/). Caching can sometimes interfere with Webpack's live reloading to see updates in real time. - If you followed all the steps in the [Web](#web) section correctly, the only errors you should see in the debug console are - a 404 error for `cordova.js`, a 404 error for `favicon.ico`, and many warnings for translations that don't exist. + errors for `cordova.js` (which only runs in the mobile app, and isn't needed in the web version). If you see any additional errors that seem to be interfering with the app's functionality, skip ahead to [Troubleshooting](#troubleshooting). ### Mobile App diff --git a/THIRDPARTY.md b/THIRDPARTY.md index e4dfa9e4b..914112afc 100644 --- a/THIRDPARTY.md +++ b/THIRDPARTY.md @@ -565,36 +565,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` -## angular-translate-handler-log - -* Homepage: https://angular-translate.github.io -* Repository: https://github.com/angular-translate/bower-angular-translate-handler-log -* License: `MIT` - -```text -The MIT License (MIT) - -Copyright (c) 2013-2017 The angular-translate team and Pascal Precht - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -``` - ## angular-translate-interpolation-messageformat * Homepage: https://angular-translate.github.io diff --git a/docs/deployment/ci-cd.md b/docs/deployment/ci-cd.md index 5fb7fc632..a10d2abc3 100644 --- a/docs/deployment/ci-cd.md +++ b/docs/deployment/ci-cd.md @@ -4,15 +4,32 @@ SPDX-FileCopyrightText: Copyright (C) 2023 Opal Health Informatics Group at the SPDX-License-Identifier: Apache-2.0 --> -# GitLab CI/CD +_This document refers to some features and uses of GitLab CI/CD which have not yet been converted to GitHub Actions._ +_Content will be updated as this work progresses._ -This project is configured with [GitLab CI/CD pipelines](https://docs.gitlab.com/ee/ci/pipelines/) +# GitHub Actions + +This project is configured with [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions) to build and deploy the application automatically. Currently, deployment is only supported for internal distribution, not to end users via the app stores. -Two different workflows are handled by the pipeline, as follows. +Two different workflows are handled as follows. + +## Workflows - GitHub + +The `Build App` workflow runs automatically on all commits to the main branch, to build the app for iOS and Android. +Commits on this branch are produced as the result of approved "squashed-and-merged" merge requests. +These commits represent completed work that is ready for deployment to our development environment. +As such, the jobs in this workflow run by default in the Dev environment. + +The workflow also provides a UI interface which can be used to build the app for another environment. + +To build the app on demand, go to the [GitHub Actions Tab](https://github.com/opalmedapps/opal-app/actions), +select `Build App` in the left sidebar, and next to `This workflow has a workflow_dispatch event trigger`, +select `Run workflow`. +This will open a panel in which to provide inputs, such as which environment to use. -## Workflows +## Workflows - GitLab ### 1. Commits on feature branches (regular development) @@ -82,7 +99,7 @@ Any commits to the default branch are handled as follows: but using the variables for that environment. For more information on downstream pipelines, refer to GitLab's documentation. -## Protected Environments +## Protected Environments - GitLab GitLab [Protected Environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) are used to limit which users are authorized to deploy versions of the app to each environment. diff --git a/env/config.xml b/env/config.xml index b394c9442..e85de0df4 100644 --- a/env/config.xml +++ b/env/config.xml @@ -4,13 +4,13 @@ SPDX-FileCopyrightText: Copyright (C) 2020 Opal Health Informatics Group at the SPDX-License-Identifier: Apache-2.0 --> - + ${APP_NAME} Opal is a patient portal designed to empower patients with their medical information. - - Opal Med Apps Inc. + + Opal Health Informatics Group @@ -83,12 +83,6 @@ SPDX-License-Identifier: Apache-2.0 - - - - - - diff --git a/env/opal.config.sample.js b/env/opal.config.sample.js index bce53f108..f5eb1d87c 100644 --- a/env/opal.config.sample.js +++ b/env/opal.config.sample.js @@ -23,6 +23,8 @@ const config = { serviceStatusURL: "./content/service-status.json", // Boolean: whether to show the app's version and build number on the front page. showVersionOnInit: true, + // String: comma-separated list of languages supported in the system (ISO 639-1 codes) with the first language being the default + supportedLanguages: 'en,fr', // Boolean: whether to use real (production-ready) hospitals for login. If false, development-specific hospitals are used instead. useProductionHospitals: false, // Boolean: whether to use a sourcemap when building the web code. Should be false in production. diff --git a/opal-env.setup.js b/opal-env.setup.js index 5009ba1dc..c2316cfc8 100644 --- a/opal-env.setup.js +++ b/opal-env.setup.js @@ -257,7 +257,9 @@ class OpalEnv { fullTagEmptyElement: false, indentCdata: true, spaces: 4, - }) + }); + // Make sure the file ends in a newline + contentToWrite += '\n'; fs.writeFileSync(filePath, contentToWrite); } diff --git a/package-lock.json b/package-lock.json index 32dd3bc63..351ba9fcd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,9 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "7.26.10", + "@babel/runtime": "7.28.2", "@fortawesome/fontawesome-free": "6.7.2", - "@havesource/cordova-plugin-push": "5.0.5", + "@havesource/cordova-plugin-push": "6.0.1", "@zxcvbn-ts/core": "3.0.4", "@zxcvbn-ts/language-common": "3.0.4", "@zxcvbn-ts/language-en": "3.0.2", @@ -21,14 +21,13 @@ "angular-sanitize": "npm:@neverendingsupport/angularjs@1.9.9-sanitize", "angular-touch": "npm:@neverendingsupport/angularjs@1.9.9-touch", "angular-translate": "2.19.1", - "angular-translate-handler-log": "2.19.1", "angular-translate-interpolation-messageformat": "2.19.1", "angular-translate-loader-partial": "2.19.1", "angular-ui-router": "1.0.30", "animate.css": "4.1.1", "bootstrap": "3.4.1", "cordova": "12.0.0", - "cordova-android": "13.0.0", + "cordova-android": "14.0.1", "cordova-ios": "7.1.1", "cordova-plugin-android-permissions": "1.1.5", "cordova-plugin-androidx-adapter": "1.1.3", @@ -51,45 +50,45 @@ "cordova-plugin-x-socialsharing": "6.0.4", "crypto-js": "4.2.0", "es6-promise-plugin": "4.2.2", - "firebase": "11.5.0", + "firebase": "12.0.0", "jquery": "3.7.1", "jquery.panzoom": "3.2.3", - "marked": "15.0.7", + "marked": "15.0.12", "moment": "2.30.1", "onsenui": "1.3.17", "pdfjs-dist": "4.10.38", - "plotly.js-basic-dist-min": "3.0.1", - "plotly.js-locales": "3.0.1", + "plotly.js-basic-dist-min": "3.0.3", + "plotly.js-locales": "3.0.3", "python-struct": "1.1.3", "tweetnacl": "1.0.3", "tweetnacl-util": "0.15.1" }, "devDependencies": { - "@babel/core": "7.26.10", - "@babel/plugin-transform-runtime": "7.26.10", - "@babel/preset-env": "7.26.9", + "@babel/core": "7.28.0", + "@babel/plugin-transform-runtime": "7.28.0", + "@babel/preset-env": "7.28.0", "@semantic-release/changelog": "6.0.3", - "@semantic-release/exec": "7.0.3", + "@semantic-release/exec": "7.1.0", "@semantic-release/git": "10.0.1", "babel-loader": "10.0.0", "clean-webpack-plugin": "4.0.0", "copy-webpack-plugin": "13.0.0", "css-loader": "7.1.2", "exports-loader": "5.0.0", - "firebase-tools": "13.29.1", + "firebase-tools": "14.11.1", "html-webpack-plugin": "5.6.3", "imports-loader": "5.0.0", "node-polyfill-webpack-plugin": "4.1.0", "raw-loader": "4.0.2", "run-script-os": "1.1.6", - "semantic-release": "24.2.3", - "semver": "7.7.1", - "shelljs": "0.9.2", + "semantic-release": "24.2.7", + "semver": "7.7.2", + "shelljs": "0.10.0", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "webpack": "5.98.0", + "webpack": "5.101.0", "webpack-cli": "6.0.1", - "webpack-dev-server": "5.2.0", + "webpack-dev-server": "5.2.2", "webpack-manifest-plugin": "5.0.1", "xml-js": "1.6.11" } @@ -142,24 +141,24 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, "license": "MIT", "engines": { @@ -167,22 +166,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -208,16 +207,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -225,27 +224,27 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -265,18 +264,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", - "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.27.0", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", "semver": "^6.3.1" }, "engines": { @@ -297,13 +296,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", - "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, @@ -325,60 +324,70 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -388,22 +397,22 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -411,15 +420,15 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -429,15 +438,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -447,23 +456,23 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -471,9 +480,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -481,9 +490,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -491,42 +500,42 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -536,14 +545,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -553,13 +562,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -569,13 +578,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -585,15 +594,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -603,14 +612,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -633,13 +642,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -649,13 +658,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -682,13 +691,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -698,15 +707,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -716,15 +725,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -734,13 +743,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -750,13 +759,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", - "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -766,14 +775,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -783,14 +792,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -800,18 +809,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", + "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -821,14 +830,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -838,13 +847,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -854,14 +864,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -871,13 +881,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -887,14 +897,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -904,13 +914,30 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -920,13 +947,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -936,13 +963,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -952,14 +979,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -969,15 +996,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -987,13 +1014,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1003,13 +1030,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1019,13 +1046,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1035,13 +1062,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1051,14 +1078,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1068,14 +1095,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1085,16 +1112,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1104,14 +1131,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1121,14 +1148,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1138,13 +1165,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1154,13 +1181,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1170,13 +1197,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1186,15 +1213,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1204,14 +1233,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1221,13 +1250,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1237,14 +1266,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1254,13 +1283,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1270,14 +1299,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1287,15 +1316,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1305,13 +1334,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1321,14 +1350,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", - "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", + "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1338,14 +1366,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1355,13 +1383,13 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1371,17 +1399,17 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", - "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz", + "integrity": "sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "engines": { @@ -1402,13 +1430,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1418,14 +1446,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1435,13 +1463,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1451,13 +1479,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1467,13 +1495,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", - "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1483,13 +1511,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1499,14 +1527,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1516,14 +1544,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1533,14 +1561,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1550,80 +1578,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", + "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.28.0", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.0", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -1659,60 +1688,57 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1752,466 +1778,1136 @@ } }, "node_modules/@electric-sql/pglite": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.2.17.tgz", - "integrity": "sha512-qEpKRT2oUaWDH6tjRxLHjdzMqRUGYDnGZlKrnL4dJ77JVMcP2Hpo3NYnOSPKdZdeec57B6QPprCUFg0picx5Pw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.5.tgz", + "integrity": "sha512-fhODErXJjOrnsJj5f1A8sH/Zj0INpLUbqOCiskufIUImUsFOBNHE6/FApY656Q2VSOp46wkXX3rvbBBO8O8Cag==", "dev": true, "license": "Apache-2.0" }, - "node_modules/@firebase/analytics": { - "version": "0.10.12", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.12.tgz", - "integrity": "sha512-iDCGnw6qdFqwI5ywkgece99WADJNoymu+nLIQI4fZM/vCZ3bEo4wlpEetW71s1HqGpI0hQStiPhqVjFxDb2yyw==", + "node_modules/@electric-sql/pglite-tools": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.2.10.tgz", + "integrity": "sha512-iPdWvzy9j0c8R6MMZeXhwp2oZ8RjCkrXjPPew64TW97esEHCg1r5A9bHXFytRqkzLsxigkElgkBdzbZFzMvNUw==", + "dev": true, "license": "Apache-2.0", - "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", - "tslib": "^2.1.0" - }, "peerDependencies": { - "@firebase/app": "0.x" + "@electric-sql/pglite": "0.3.5" } }, - "node_modules/@firebase/analytics-compat": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.18.tgz", - "integrity": "sha512-Hw9mzsSMZaQu6wrTbi3kYYwGw9nBqOHr47pVLxfr5v8CalsdrG5gfs9XUlPOZjHRVISp3oQrh1j7d3E+ulHPjQ==", + "node_modules/@firebase/ai": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.0.0.tgz", + "integrity": "sha512-N/aSHjqOpU+KkYU3piMkbcuxzvqsOvxflLUXBAkYAPAz8wjE2Ye3BQDgKHEYuhMmEWqj6LFgEBUN8wwc6dfMTw==", "license": "Apache-2.0", "dependencies": { - "@firebase/analytics": "0.10.12", - "@firebase/analytics-types": "0.8.3", - "@firebase/component": "0.6.13", - "@firebase/util": "1.11.0", + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, + "engines": { + "node": ">=20.0.0" + }, "peerDependencies": { - "@firebase/app-compat": "0.x" + "@firebase/app": "0.x", + "@firebase/app-types": "0.x" } }, - "node_modules/@firebase/analytics-types": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz", - "integrity": "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==", - "license": "Apache-2.0" - }, - "node_modules/@firebase/app": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.11.3.tgz", - "integrity": "sha512-QlTZl/RcqPSonYxB87n8KgAUW2L6ZZz0W4D91PVmQ1tJPsKsKPrWAFHL0ii2cQW6FxTxfNjbZ7kucuIcKXk3tw==", + "node_modules/@firebase/ai/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", - "idb": "7.1.1", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/app-check": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.13.tgz", - "integrity": "sha512-ONsgml8/dplUOAP42JQO6hhiWDEwR9+RUTLenxAN9S8N6gel/sDQ9Ci721Py1oASMGdDU8v9R7xAZxzvOX5lPg==", + "node_modules/@firebase/ai/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" + "node": ">=20.0.0" } }, - "node_modules/@firebase/app-check-compat": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.20.tgz", - "integrity": "sha512-/twgmlnNAaZ/wbz3kcQrL/26b+X+zUX+lBmu5LwwEcWcpnb+mrVEAKhD7/ttm52dxYiSWtLDeuXy3FXBhqBC5A==", + "node_modules/@firebase/ai/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@firebase/app-check": "0.8.13", - "@firebase/app-check-types": "0.5.3", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "node": ">=20.0.0" } }, - "node_modules/@firebase/app-check-interop-types": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", - "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==", - "license": "Apache-2.0" - }, - "node_modules/@firebase/app-check-types": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz", - "integrity": "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==", - "license": "Apache-2.0" - }, - "node_modules/@firebase/app-compat": { - "version": "0.2.52", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.52.tgz", - "integrity": "sha512-0p/l1KiwhwwYTcPWoleFQHftOnYzeXvyVf3WNZyKFBAoQMpCVW6bVm/uO1bXF91AwU1JN0og888Y6Sc8avqZ+A==", + "node_modules/@firebase/analytics": { + "version": "0.10.18", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.18.tgz", + "integrity": "sha512-iN7IgLvM06iFk8BeFoWqvVpRFW3Z70f+Qe2PfCJ7vPIgLPjHXDE774DhCT5Y2/ZU/ZbXPDPD60x/XPWEoZLNdg==", "license": "Apache-2.0", "dependencies": { - "@firebase/app": "0.11.3", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, - "engines": { - "node": ">=18.0.0" + "peerDependencies": { + "@firebase/app": "0.x" } }, - "node_modules/@firebase/app-types": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", - "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", - "license": "Apache-2.0" - }, - "node_modules/@firebase/auth": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.9.1.tgz", - "integrity": "sha512-9KKo5SNVkyJzftsW+daS+PGDbeJ+MFJWXQFHDqqPPH3acWHtiNnGHH5HGpIJErEELrsm9xMPie5zfZ0XpGU8+w==", + "node_modules/@firebase/analytics-compat": { + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.24.tgz", + "integrity": "sha512-jE+kJnPG86XSqGQGhXXYt1tpTbCTED8OQJ/PQ90SEw14CuxRxx/H+lFbWA1rlFtFSsTCptAJtgyRBwr/f00vsw==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/analytics": "0.10.18", + "@firebase/analytics-types": "0.8.3", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, - "engines": { - "node": ">=18.0.0" - }, "peerDependencies": { - "@firebase/app": "0.x", - "@react-native-async-storage/async-storage": "^1.18.1" - }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } + "@firebase/app-compat": "0.x" } }, - "node_modules/@firebase/auth-compat": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.19.tgz", - "integrity": "sha512-v898POphOIBJliKF76SiGOXh4EdhO5fM6S9a2ZKf/8wHdBea/qwxwZoVVya4DW6Mi7vWyp1lIzHbFgwRz8G9TA==", + "node_modules/@firebase/analytics-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/auth": "1.9.1", - "@firebase/auth-types": "0.13.0", - "@firebase/component": "0.6.13", - "@firebase/util": "1.11.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/auth-interop-types": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", - "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==", - "license": "Apache-2.0" - }, - "node_modules/@firebase/auth-types": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0.tgz", - "integrity": "sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==", - "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" + "node": ">=20.0.0" } }, - "node_modules/@firebase/component": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.13.tgz", - "integrity": "sha512-I/Eg1NpAtZ8AAfq8mpdfXnuUpcLxIDdCDtTzWSh+FXnp/9eCKJ3SNbOCKrUCyhLzNa2SiPJYruei0sxVjaOTeg==", + "node_modules/@firebase/analytics-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/data-connect": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.2.tgz", - "integrity": "sha512-PYG55JRTmvYrUuXXmYBsZexwKVP9aR3mIRRHxB9V2bQeRDZky6JtRZnH3GLhf4ZsxZy5Ewd8ul/jTOYR4gpD9w==", + "node_modules/@firebase/analytics-types": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz", + "integrity": "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/analytics/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/database": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.14.tgz", - "integrity": "sha512-9nxYtkHAG02/Nh2Ssms1T4BbWPPjiwohCvkHDUl4hNxnki1kPgsLo5xe9kXNzbacOStmVys+RUXvwzynQSKmUQ==", + "node_modules/@firebase/analytics/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", - "faye-websocket": "0.11.4", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/database-compat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.5.tgz", - "integrity": "sha512-CNf1UbvWh6qIaSf4sn6sx2DTDz/em/D7QxULH1LTxxDQHr9+CeYGvlAqrKnk4ZH0P0eIHyQFQU7RwkUJI0B9gQ==", + "node_modules/@firebase/analytics/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/database": "1.0.14", - "@firebase/database-types": "1.0.10", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/database-types": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.10.tgz", - "integrity": "sha512-mH6RC1E9/Pv8jf1/p+M8YFTX+iu+iHDN89hecvyO7wHrI4R1V0TXjxOHvX3nLJN1sfh0CWG6CHZ0VlrSmK/cwg==", + "node_modules/@firebase/app": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.0.tgz", + "integrity": "sha512-APIAeKvRNFWKJLjIL8wLDjh7u8g6ZjaeVmItyqSjCdEkJj14UuVlus74D8ofsOMWh45HEwxwkd96GYbi+CImEg==", "license": "Apache-2.0", "dependencies": { - "@firebase/app-types": "0.9.3", - "@firebase/util": "1.11.0" + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/firestore": { - "version": "4.7.10", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.10.tgz", - "integrity": "sha512-6nKsyo2U+jYSCcSE5sjMdDNA23DMUvYPUvsYGg09CNvcTO8GGKsPs7SpOhspsB91mbacq+u627CDAx3FUhPSSQ==", + "node_modules/@firebase/app-check": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.11.0.tgz", + "integrity": "sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", - "@firebase/webchannel-wrapper": "1.0.3", - "@grpc/grpc-js": "~1.9.0", - "@grpc/proto-loader": "^0.7.8", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, - "node_modules/@firebase/firestore-compat": { - "version": "0.3.45", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.45.tgz", - "integrity": "sha512-uRvi7AYPmsDl7UZwPyV7jgDGYusEZ2+U2g7MndbQHKIA8fNHpYC6QrzMs58+/IjX+kF/lkUn67Vrr0AkVjlY+Q==", + "node_modules/@firebase/app-check-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz", + "integrity": "sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/firestore": "4.7.10", - "@firebase/firestore-types": "3.0.3", - "@firebase/util": "1.11.0", + "@firebase/app-check": "0.11.0", + "@firebase/app-check-types": "0.5.3", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, - "node_modules/@firebase/firestore-types": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz", - "integrity": "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==", + "node_modules/@firebase/app-check-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/functions": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.12.3.tgz", - "integrity": "sha512-Wv7JZMUkKLb1goOWRtsu3t7m97uK6XQvjQLPvn8rncY91+VgdU72crqnaYCDI/ophNuBEmuK8mn0/pAnjUeA6A==", + "node_modules/@firebase/app-check-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.13", - "@firebase/messaging-interop-types": "0.2.3", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" + "node": ">=20.0.0" } }, - "node_modules/@firebase/functions-compat": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.20.tgz", - "integrity": "sha512-iIudmYDAML6n3c7uXO2YTlzra2/J6lnMzmJTXNthvrKVMgNMaseNoQP1wKfchK84hMuSF8EkM4AvufwbJ+Juew==", + "node_modules/@firebase/app-check-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/functions": "0.12.3", - "@firebase/functions-types": "0.6.3", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "node": ">=20.0.0" } }, - "node_modules/@firebase/functions-types": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz", - "integrity": "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==", + "node_modules/@firebase/app-check-interop-types": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", + "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==", "license": "Apache-2.0" }, - "node_modules/@firebase/installations": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.13.tgz", - "integrity": "sha512-6ZpkUiaygPFwgVneYxuuOuHnSPnTA4KefLEaw/sKk/rNYgC7X6twaGfYb0sYLpbi9xV4i5jXsqZ3WO+yaguNgg==", + "node_modules/@firebase/app-check-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz", + "integrity": "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-check/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/util": "1.11.0", - "idb": "7.1.1", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/installations-compat": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.13.tgz", - "integrity": "sha512-f/o6MqCI7LD/ulY9gvgkv6w5k6diaReD8BFHd/y/fEdpsXmFWYS/g28GXCB72bRVBOgPpkOUNl+VsMvDwlRKmw==", + "node_modules/@firebase/app-check/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/installations-types": "0.5.3", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/installations-types": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz", - "integrity": "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==", + "node_modules/@firebase/app-check/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app-types": "0.x" + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/logger": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4.tgz", - "integrity": "sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==", + "node_modules/@firebase/app-compat": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.0.tgz", + "integrity": "sha512-nUnNpOeRj0KZzVzHsyuyrmZKKHfykZ8mn40FtG28DeSTWeM5b/2P242Va4bmQpJsy5y32vfv50+jvdckrpzy7Q==", "license": "Apache-2.0", "dependencies": { + "@firebase/app": "0.14.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/messaging": { - "version": "0.12.17", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.17.tgz", - "integrity": "sha512-W3CnGhTm6Nx8XGb6E5/+jZTuxX/EK8Vur4QXvO1DwZta/t0xqWMRgO9vNsZFMYBqFV4o3j4F9qK/iddGYwWS6g==", + "node_modules/@firebase/app-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/messaging-interop-types": "0.2.3", - "@firebase/util": "1.11.0", - "idb": "7.1.1", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/messaging-compat": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.17.tgz", - "integrity": "sha512-5Q+9IG7FuedusdWHVQRjpA3OVD9KUWp/IPegcv0s5qSqRLBjib7FlAeWxN+VL0Ew43tuPJBY2HKhEecuizmO1Q==", + "node_modules/@firebase/app-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/messaging": "0.12.17", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/messaging-interop-types": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz", - "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==", + "node_modules/@firebase/app-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", + "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/auth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.0.tgz", + "integrity": "sha512-5j7+ua93X+IRcJ1oMDTClTo85l7Xe40WSkoJ+shzPrX7OISlVWLdE1mKC57PSD+/LfAbdhJmvKixINBw2ESK6w==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@firebase/auth-compat": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.0.tgz", + "integrity": "sha512-J0lGSxXlG/lYVi45wbpPhcWiWUMXevY4fvLZsN1GHh+po7TZVng+figdHBVhFheaiipU8HZyc7ljw1jNojM2nw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth": "1.11.0", + "@firebase/auth-types": "0.13.0", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", + "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/auth-types": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0.tgz", + "integrity": "sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/data-connect": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.11.tgz", + "integrity": "sha512-G258eLzAD6im9Bsw+Qm1Z+P4x0PGNQ45yeUuuqe5M9B1rn0RJvvsQCRHXgE52Z+n9+WX1OJd/crcuunvOGc7Vw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/data-connect/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/data-connect/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/data-connect/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz", + "integrity": "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz", + "integrity": "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/database": "1.1.0", + "@firebase/database-types": "1.0.16", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz", + "integrity": "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-types": "0.9.3", + "@firebase/util": "1.13.0" + } + }, + "node_modules/@firebase/database-types/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/firestore": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.0.tgz", + "integrity": "sha512-5zl0+/h1GvlCSLt06RMwqFsd7uqRtnNZt4sW99k2rKRd6k/ECObIWlEnvthm2cuOSnUmwZknFqtmd1qyYSLUuQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "@firebase/webchannel-wrapper": "1.0.4", + "@grpc/grpc-js": "~1.9.0", + "@grpc/proto-loader": "^0.7.8", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/firestore-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.0.tgz", + "integrity": "sha512-4O7v4VFeSEwAZtLjsaj33YrMHMRjplOIYC2CiYsF6o/MboOhrhe01VrTt8iY9Y5EwjRHuRz4pS6jMBT8LfQYJA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/firestore": "4.9.0", + "@firebase/firestore-types": "3.0.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/firestore-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/firestore-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/firestore-types": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz", + "integrity": "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/functions": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.13.0.tgz", + "integrity": "sha512-2/LH5xIbD8aaLOWSFHAwwAybgSzHIM0dB5oVOL0zZnxFG1LctX2bc1NIAaPk1T+Zo9aVkLKUlB5fTXTkVUQprQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/messaging-interop-types": "0.2.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/functions-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.4.0.tgz", + "integrity": "sha512-VPgtvoGFywWbQqtvgJnVWIDFSHV1WE6Hmyi5EGI+P+56EskiGkmnw6lEqc/MEUfGpPGdvmc4I9XMU81uj766/g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/functions": "0.13.0", + "@firebase/functions-types": "0.6.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/functions-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/functions-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/functions-types": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz", + "integrity": "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/functions/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/functions/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/installations": { + "version": "0.6.19", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.19.tgz", + "integrity": "sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/installations-compat": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.19.tgz", + "integrity": "sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/installations-types": "0.5.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/installations-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz", + "integrity": "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/installations/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/installations/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging": { + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.23.tgz", + "integrity": "sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/messaging-interop-types": "0.2.3", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/messaging-compat": { + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz", + "integrity": "sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/messaging": "0.12.23", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/messaging-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging-interop-types": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz", + "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==", "license": "Apache-2.0" }, + "node_modules/@firebase/messaging/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/performance": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.2.tgz", - "integrity": "sha512-DXLLp0R0jdxH/yTmv+WTkOzsLl8YYecXh4lGZE0dzqC0IV8k+AxpLSSWvOTCkAETze8yEU/iF+PtgYVlGjfMMQ==", + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.8.tgz", + "integrity": "sha512-k6xfNM/CdTl4RaV4gT/lH53NU+wP33JiN0pUeNBzGVNvfXZ3HbCkoISE3M/XaiOwHgded1l6XfLHa4zHgm0Wyg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0", "web-vitals": "^4.2.4" }, @@ -2220,38 +2916,114 @@ } }, "node_modules/@firebase/performance-compat": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.15.tgz", - "integrity": "sha512-wUxsw7hGBEMN6XfvYQqwPIQp5LcJXawWM5tmYp6L7ClCoTQuEiCKHWWVurJgN8Q1YHzoHVgjNfPQAOVu29iMVg==", + "version": "0.2.21", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.21.tgz", + "integrity": "sha512-OQfYRsIQiEf9ez1SOMLb5TRevBHNIyA2x1GI1H10lZ432W96AK5r4LTM+SNApg84dxOuHt6RWSQWY7TPWffKXg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/performance": "0.7.2", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/performance": "0.7.8", "@firebase/performance-types": "0.2.3", - "@firebase/util": "1.11.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/performance-types": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz", "integrity": "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==", "license": "Apache-2.0" }, + "node_modules/@firebase/performance/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/remote-config": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.0.tgz", - "integrity": "sha512-Yrk4l5+6FJLPHC6irNHMzgTtJ3NfHXlAXVChCBdNFtgmzyGmufNs/sr8oA0auEfIJ5VpXCaThRh3P4OdQxiAlQ==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.6.tgz", + "integrity": "sha512-Yelp5xd8hM4NO1G1SuWrIk4h5K42mNwC98eWZ9YLVu6Z0S6hFk1mxotAdCRmH2luH8FASlYgLLq6OQLZ4nbnCA==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2259,64 +3031,166 @@ } }, "node_modules/@firebase/remote-config-compat": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.13.tgz", - "integrity": "sha512-UmHoO7TxAEJPIZf8e1Hy6CeFGMeyjqSCpgoBkQZYXFI2JHhzxIyDpr8jVKJJN1dmAePKZ5EX7dC13CmcdTOl7Q==", + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.19.tgz", + "integrity": "sha512-y7PZAb0l5+5oIgLJr88TNSelxuASGlXyAKj+3pUc4fDuRIdPNBoONMHaIUa9rlffBR5dErmaD2wUBJ7Z1a513Q==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/remote-config": "0.6.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/remote-config": "0.6.6", "@firebase/remote-config-types": "0.4.0", - "@firebase/util": "1.11.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/remote-config-types": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.4.0.tgz", "integrity": "sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==", "license": "Apache-2.0" }, + "node_modules/@firebase/remote-config/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/storage": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.13.7.tgz", - "integrity": "sha512-FkRyc24rK+Y6EaQ1tYFm3TevBnnfSNA0VyTfew2hrYyL/aYfatBg7HOgktUdB4kWMHNA9VoTotzZTGoLuK92wg==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.14.0.tgz", + "integrity": "sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "node_modules/@firebase/storage-compat": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.17.tgz", - "integrity": "sha512-CBlODWEZ5b6MJWVh21VZioxwxNwVfPA9CAdsk+ZgVocJQQbE2oDW1XJoRcgthRY1HOitgbn4cVrM+NlQtuUYhw==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.4.0.tgz", + "integrity": "sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/storage": "0.13.7", + "@firebase/component": "0.7.0", + "@firebase/storage": "0.14.0", "@firebase/storage-types": "0.8.3", - "@firebase/util": "1.11.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/storage-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/storage-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/storage-types": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3.tgz", @@ -2327,43 +3201,50 @@ "@firebase/util": "1.x" } }, - "node_modules/@firebase/util": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.11.0.tgz", - "integrity": "sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==", + "node_modules/@firebase/storage/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/storage/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/vertexai": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@firebase/vertexai/-/vertexai-1.2.0.tgz", - "integrity": "sha512-WUYIzFpOipjFXT2i0hT26wivJoIximizQptVs3KAxFAqbVlO8sjKPsMkgz0bh+tdKlqP4SUDda71fMUZXUKHgA==", + "node_modules/@firebase/util": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.11.0.tgz", + "integrity": "sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==", + "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.3.tgz", - "integrity": "sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.4.tgz", + "integrity": "sha512-6m8+P+dE/RPl4OPzjTxcTbQ0rGeRyeTvAi9KwIffBVCiAMKrfXfLZaqD1F+m8t4B5/Q5aHsMozOgirkH1F5oMQ==", "license": "Apache-2.0" }, "node_modules/@fortawesome/fontawesome-free": { @@ -2493,56 +3374,399 @@ "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", - "license": "Apache-2.0", + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@havesource/cordova-plugin-push": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@havesource/cordova-plugin-push/-/cordova-plugin-push-6.0.1.tgz", + "integrity": "sha512-GsYnjkDSLUQM9gkcv68ofslT9Mss3SvO+/x2PjRjiLWuHM3xhisrvipKQBIJ2CWCGYlI0W0CfxwMuyMyaR8/dA==", + "license": "MIT", + "engines": { + "cordovaDependencies": { + "1.0.0": { + "cordova": ">=10.0.0", + "cordova-android": ">=8.0.0", + "cordova-ios": ">=5.1.1" + }, + "2.0.0": { + "cordova": ">=10.0.0", + "cordova-android": ">=8.0.0", + "cordova-ios": ">=6.0.0" + }, + "3.0.0": { + "cordova": ">=10.0.0", + "cordova-android": ">=9.0.0", + "cordova-ios": ">=6.0.0" + }, + "4.0.0": { + "cordova": ">=10.0.0", + "cordova-android": ">=12.0.0", + "cordova-ios": ">=6.0.0" + }, + "5.0.0": { + "cordova": ">=10.0.0", + "cordova-android": ">=12.0.0", + "cordova-ios": ">=6.0.0" + }, + "6.0.0": { + "cordova": ">=10.0.0", + "cordova-android": ">=12.0.0", + "cordova-ios": ">=6.0.0" + } + } + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.9.tgz", + "integrity": "sha512-DBJBkzI5Wx4jFaYm221LHvAhpKYkhVS0k9plqHwaHhofGNxvYB7J3Bz8w+bFJ05zaMb0sZNHo4KdmENQFlNTuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.13.tgz", + "integrity": "sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.14.tgz", + "integrity": "sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/core/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.14.tgz", + "integrity": "sha512-yd2qtLl4QIIax9DTMZ1ZN2pFrrj+yL3kgIWxm34SS6uwCr0sIhsNyudUjAo5q3TqI03xx4SEBkUJqZuAInp9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.16.tgz", + "integrity": "sha512-oiDqafWzMtofeJyyGkb1CTPaxUkjIcSxePHHQCfif8t3HV9pHcw1Kgdw3/uGpDvaFfeTluwQtWiqzPVjAqS3zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.12.tgz", + "integrity": "sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.0.tgz", + "integrity": "sha512-opqpHPB1NjAmDISi3uvZOTrjEEU5CWVu/HBkDby8t93+6UxYX0Z7Ps0Ltjm5sZiEbWenjubwUkivAEYQmy9xHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.16.tgz", + "integrity": "sha512-kMrXAaKGavBEoBYUCgualbwA9jWUx2TjMA46ek+pEKy38+LFpL9QHlTd8PO2kWPUgI/KB+qi02o4y2rwXbzr3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.16.tgz", + "integrity": "sha512-g8BVNBj5Zeb5/Y3cSN+hDUL7CsIFDIuVxb9EPty3lkxBaYpjL5BNRKSYOF9yOLe+JOcKFd+TSVeADQ4iSY7rbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.6.0.tgz", + "integrity": "sha512-jAhL7tyMxB3Gfwn4HIJ0yuJ5pvcB5maYUcouGcgd/ub79f9MqZ+aVnBtuFf+VC2GTkCBF+R+eo7Vi63w5VZlzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.1.9", + "@inquirer/confirm": "^5.1.13", + "@inquirer/editor": "^4.2.14", + "@inquirer/expand": "^4.0.16", + "@inquirer/input": "^4.2.0", + "@inquirer/number": "^3.0.16", + "@inquirer/password": "^4.0.16", + "@inquirer/rawlist": "^4.1.4", + "@inquirer/search": "^3.0.16", + "@inquirer/select": "^4.2.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.4.tgz", + "integrity": "sha512-5GGvxVpXXMmfZNtvWw4IsHpR7RzqAR624xtkPd1NxxlV5M+pShMqzL4oRddRkg8rVEOK9fKdJp1jjVML2Lr7TQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.16.tgz", + "integrity": "sha512-POCmXo+j97kTGU6aeRjsPyuCpQQfKcMXdeTMw708ZMtWrj5aykZvlUxH4Qgz3+Y1L/cAVZsSpA+UgZCu2GMOMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.2.4.tgz", + "integrity": "sha512-unTppUcTjmnbl/q+h8XeQDhAqIOmwWYWNyiiP2e3orXrg6tOaa5DHXja9PChCSbChOsktyKgOieRZFnajzxoBg==", + "dev": true, + "license": "MIT", "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@havesource/cordova-plugin-push": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@havesource/cordova-plugin-push/-/cordova-plugin-push-5.0.5.tgz", - "integrity": "sha512-eD7EyjSTl1vi1gcMswD3Q7o5UV1l+JoS+RaQ9LxlBXC3u+tOEgVFvvrnb9klWvuLrRVu/JjuG0sg4oK8irVLuA==", + "node_modules/@inquirer/type": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.7.tgz", + "integrity": "sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==", + "dev": true, "license": "MIT", "engines": { - "cordovaDependencies": { - "1.0.0": { - "cordova": ">=10.0.0", - "cordova-android": ">=8.0.0", - "cordova-ios": ">=5.1.1" - }, - "2.0.0": { - "cordova": ">=10.0.0", - "cordova-android": ">=8.0.0", - "cordova-ios": ">=6.0.0" - }, - "3.0.0": { - "cordova": ">=10.0.0", - "cordova-android": ">=9.0.0", - "cordova-ios": ">=6.0.0" - }, - "4.0.0": { - "cordova": ">=10.0.0", - "cordova-android": ">=12.0.0", - "cordova-ios": ">=6.0.0" - }, - "5.0.0": { - "cordova": ">=10.0.0", - "cordova-android": ">=12.0.0", - "cordova-ios": ">=6.0.0" - } + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } } }, @@ -2637,18 +3861,14 @@ "license": "ISC" }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "license": "MIT", "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" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -2661,16 +3881,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", @@ -2690,9 +3900,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2711,103 +3921,401 @@ "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", + "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.15.1.tgz", + "integrity": "sha512-W/XlN9c528yYn+9MQkVjxiTPgPxoxt+oczfjHBDsJx0+59+O7B75Zhsp0B16Xbwbz8ANISDajh6+V7nIcPMc5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dev": true, - "license": "Apache-2.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, "engines": { - "node": ">=10.0" + "node": ">=0.6" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">= 0.8" } }, - "node_modules/@jsonjoy.com/json-pack": { + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", - "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 18" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", - "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">= 18" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } }, "node_modules/@napi-rs/canvas": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.68.tgz", - "integrity": "sha512-LQESrePLEBLvhuFkXx9jjBXRC2ClYsO5mqQ1m/puth5z9SOuM3N/B3vDuqnC3RJFktDktyK9khGvo7dTkqO9uQ==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.69.tgz", + "integrity": "sha512-ydvNeJMRm+l3T14yCoUKqjYQiEdXDq1isznI93LEBGYssXKfSaLNLHOkeM4z9Fnw9Pkt2EKOCAtW9cS4b00Zcg==", "license": "MIT", "optional": true, "engines": { "node": ">= 10" }, "optionalDependencies": { - "@napi-rs/canvas-android-arm64": "0.1.68", - "@napi-rs/canvas-darwin-arm64": "0.1.68", - "@napi-rs/canvas-darwin-x64": "0.1.68", - "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.68", - "@napi-rs/canvas-linux-arm64-gnu": "0.1.68", - "@napi-rs/canvas-linux-arm64-musl": "0.1.68", - "@napi-rs/canvas-linux-riscv64-gnu": "0.1.68", - "@napi-rs/canvas-linux-x64-gnu": "0.1.68", - "@napi-rs/canvas-linux-x64-musl": "0.1.68", - "@napi-rs/canvas-win32-x64-msvc": "0.1.68" + "@napi-rs/canvas-android-arm64": "0.1.69", + "@napi-rs/canvas-darwin-arm64": "0.1.69", + "@napi-rs/canvas-darwin-x64": "0.1.69", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.69", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.69", + "@napi-rs/canvas-linux-arm64-musl": "0.1.69", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.69", + "@napi-rs/canvas-linux-x64-gnu": "0.1.69", + "@napi-rs/canvas-linux-x64-musl": "0.1.69", + "@napi-rs/canvas-win32-x64-msvc": "0.1.69" } }, "node_modules/@napi-rs/canvas-android-arm64": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.68.tgz", - "integrity": "sha512-h1KcSR4LKLfRfzeBH65xMxbWOGa1OtMFQbCMVlxPCkN1Zr+2gK+70pXO5ktojIYcUrP6KDcOwoc8clho5ccM/w==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.69.tgz", + "integrity": "sha512-4icWTByY8zPvM9SelfQKf3I6kwXw0aI5drBOVrwfER5kjwXJd78FPSDSZkxDHjvIo9Q86ljl18Yr963ehA4sHQ==", "cpu": [ "arm64" ], @@ -2821,9 +4329,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-arm64": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.68.tgz", - "integrity": "sha512-/VURlrAD4gDoxW1GT/b0nP3fRz/fhxmHI/xznTq2FTwkQLPOlLkDLCvTmQ7v6LtGKdc2Ed6rvYpRan+JXThInQ==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.69.tgz", + "integrity": "sha512-HOanhhYlHdukA+unjelT4Dg3ta7e820x87/AG2dKUMsUzH19jaeZs9bcYjzEy2vYi/dFWKz7cSv2yaIOudB8Yg==", "cpu": [ "arm64" ], @@ -2837,9 +4345,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.68.tgz", - "integrity": "sha512-tEpvGR6vCLTo1Tx9wmDnoOKROpw57wiCWwCpDOuVlj/7rqEJOUYr9ixW4aRJgmeGBrZHgevI0EURys2ER6whmg==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.69.tgz", + "integrity": "sha512-SIp7WfhxAPnSVK9bkFfJp+84rbATCIq9jMUzDwpCLhQ+v+OqtXe4pggX1oeV+62/HK6BT1t18qRmJfyqwJ9f3g==", "cpu": [ "x64" ], @@ -2853,9 +4361,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.68.tgz", - "integrity": "sha512-U9xbJsumPOiAYeAFZMlHf62b9dGs2HJ6Q5xt7xTB0uEyPeurwhgYBWGgabdsEidyj38YuzI/c3LGBbSQB3vagw==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.69.tgz", + "integrity": "sha512-Ls+KujCp6TGpkuMVFvrlx+CxtL+casdkrprFjqIuOAnB30Mct6bCEr+I83Tu29s3nNq4EzIGjdmA3fFAZG/Dtw==", "cpu": [ "arm" ], @@ -2869,9 +4377,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.68.tgz", - "integrity": "sha512-KFkn8wEm3mPnWD4l8+OUUkxylSJuN5q9PnJRZJgv15RtCA1bgxIwTkBhI/+xuyVMcHqON9sXq7cDkEJtHm35dg==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.69.tgz", + "integrity": "sha512-m8VcGmeSBNRbHZBd1srvdM1aq/ScS2y8KqGqmCCEgJlytYK4jdULzAo2K/BPKE1v3xvn8oUPZDLI/NBJbJkEoA==", "cpu": [ "arm64" ], @@ -2885,9 +4393,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.68.tgz", - "integrity": "sha512-IQzts91rCdOALXBWQxLZRCEDrfFTGDtNRJMNu+2SKZ1uT8cmPQkPwVk5rycvFpvgAcmiFiOSCp1aRrlfU8KPpQ==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.69.tgz", + "integrity": "sha512-a3xjNRIeK2m2ZORGv2moBvv3vbkaFZG1QKMeiEv/BKij+rkztuEhTJGMar+buICFgS0fLgphXXsKNkUSJb7eRQ==", "cpu": [ "arm64" ], @@ -2901,9 +4409,9 @@ } }, "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.68.tgz", - "integrity": "sha512-e9AS5UttoIKqXSmBzKZdd3NErSVyOEYzJfNOCGtafGk1//gibTwQXGlSXmAKuErqMp09pyk9aqQRSYzm1AQfBw==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.69.tgz", + "integrity": "sha512-pClUoJF5wdC9AvD0mc15G9JffL1Q85nuH1rLSQPRkGmGmQOtRjw5E9xNbanz7oFUiPbjH7xcAXUjVAcf7tdgPQ==", "cpu": [ "riscv64" ], @@ -2917,9 +4425,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.68.tgz", - "integrity": "sha512-Pa/I36VE3j57I3Obhrr+J48KGFfkZk2cJN/2NmW/vCgmoF7kCP6aTVq5n+cGdGWLd/cN9CJ9JvNwEoMRDghu0g==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.69.tgz", + "integrity": "sha512-96X3bFAmzemfw84Ts6Jg/omL86uuynvK06MWGR/mp3JYNumY9RXofA14eF/kJIYelbYFWXcwpbcBR71lJ6G/YQ==", "cpu": [ "x64" ], @@ -2933,9 +4441,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.68.tgz", - "integrity": "sha512-9c6rkc5195wNxuUHJdf4/mmnq433OQey9TNvQ9LspJazvHbfSkTij8wtKjASVQsJyPDva4fkWOeV/OQ7cLw0GQ==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.69.tgz", + "integrity": "sha512-2QTsEFO72Kwkj53W9hc5y1FAUvdGx0V+pjJB+9oQF6Ys9+y989GyPIl5wZDzeh8nIJW6koZZ1eFa8pD+pA5BFQ==", "cpu": [ "x64" ], @@ -2949,9 +4457,9 @@ } }, "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.68.tgz", - "integrity": "sha512-Fc5Dez23u0FoSATurT6/w1oMytiRnKWEinHivdMvXpge6nG4YvhrASrtqMk8dGJMVQpHr8QJYF45rOrx2YU2Aw==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.69.tgz", + "integrity": "sha512-Q4YA8kVnKarApBVLu7F8icGlIfSll5Glswo5hY6gPS4Is2dCI8+ig9OeDM8RlwYevUIxKq8lZBypN8Q1iLAQ7w==", "cpu": [ "x64" ], @@ -3236,9 +4744,9 @@ } }, "node_modules/@npmcli/move-file/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3512,9 +5020,9 @@ } }, "node_modules/@octokit/plugin-throttling": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.6.0.tgz", - "integrity": "sha512-zn7m1N3vpJDaVzLqjCRdJ0cRzNiekHEWPi8Ww9xyPNrDt5PStHvVE0eR8wy4RSU8Eg7YO8MHyvn6sv25EGVhhg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.6.1.tgz", + "integrity": "sha512-bt3EBUkeKUzDQXRCcFrR9SWVqlLFRRqcCrr6uAorWt6NXTyjMKqcGrFmXqJy9NCbnKgiIZ2OXWq04theFc76Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -3767,9 +5275,9 @@ } }, "node_modules/@semantic-release/exec": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/exec/-/exec-7.0.3.tgz", - "integrity": "sha512-uNWwPNtWi3WTcTm3fWfFQEuj8otOvwoS5m9yo2jSVHuvqdZNsOWmuL0/FqcVyZnCI32fxyYV0G7PPb/TzCH6jw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@semantic-release/exec/-/exec-7.1.0.tgz", + "integrity": "sha512-4ycZ2atgEUutspPZ2hxO6z8JoQt4+y/kkHvfZ1cZxgl9WKJId1xPj+UadwInj+gMn2Gsv+fLnbrZ4s+6tK2TFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4056,9 +5564,9 @@ } }, "node_modules/@semantic-release/github/node_modules/mime": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.6.tgz", - "integrity": "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.7.tgz", + "integrity": "sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa" @@ -4098,9 +5606,9 @@ } }, "node_modules/@semantic-release/npm": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.1.tgz", - "integrity": "sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.2.tgz", + "integrity": "sha512-+M9/Lb35IgnlUO6OSJ40Ie+hUsZLuph2fqXC/qrKn0fMvUU/jiCjpoL6zEm69vzcmaZJ8yNKtMBEKHWN49WBbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4111,7 +5619,7 @@ "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", "normalize-url": "^8.0.0", - "npm": "^10.5.0", + "npm": "^10.9.3", "rc": "^1.2.8", "read-pkg": "^9.0.0", "registry-auth-token": "^5.0.0", @@ -4504,9 +6012,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -4613,12 +6121,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", - "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/node-forge": { @@ -4666,15 +6174,16 @@ } }, "node_modules/@types/request/node_modules/form-data": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz", - "integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" }, @@ -4747,9 +6256,9 @@ "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { @@ -5068,9 +6577,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -5080,6 +6589,19 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", @@ -5239,16 +6761,6 @@ "node": "*" } }, - "node_modules/angular-translate-handler-log": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/angular-translate-handler-log/-/angular-translate-handler-log-2.19.1.tgz", - "integrity": "sha512-ZEi/J/Tr2/h8qh4c6gPJqp6+cNv0n0SnIl5ycdDBo6U4huuyaoZ4m0MKfZvjiRPZU5LQea0DJA0Q50mY23xELg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "MIT", - "dependencies": { - "angular-translate": "~2.19.1" - } - }, "node_modules/angular-translate-interpolation-messageformat": { "version": "2.19.1", "resolved": "https://registry.npmjs.org/angular-translate-interpolation-messageformat/-/angular-translate-interpolation-messageformat-2.19.1.tgz", @@ -5675,14 +7187,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { @@ -5700,27 +7212,27 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" + "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -5849,9 +7361,9 @@ } }, "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.2.0.tgz", + "integrity": "sha512-JocpCSOixzy5XFJi2ub6IMmV/G9i8Lrm2lZvwBv9xPdglmZM0ufDVBbjbrfU/zuLvBfD7Bv2eYxz9i+OHTgkew==", "dev": true, "license": "MIT", "engines": { @@ -6099,9 +7611,9 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -6264,9 +7776,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "funding": [ { @@ -6284,10 +7796,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -6505,9 +8017,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001707", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", - "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "dev": true, "funding": [ { @@ -6826,18 +8338,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", - "dev": true, - "dependencies": { - "colors": "1.0.3" - }, - "engines": { - "node": ">= 0.2.0" - } - }, "node_modules/cli-table3": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", @@ -6854,16 +8354,6 @@ "@colors/colors": "1.5.0" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -7012,16 +8502,6 @@ "dev": true, "license": "MIT" }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", @@ -7115,16 +8595,16 @@ } }, "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -7521,27 +9001,35 @@ } }, "node_modules/cordova-android": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-13.0.0.tgz", - "integrity": "sha512-uQG+cSyrB1NMi2aIzihldIupHB9WGpZVvrMMMAAtnyc6tDlEk7gweSSaFsEONyGAnteRYpIvrzg/YwDW08PcUg==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-14.0.1.tgz", + "integrity": "sha512-HMBMdGu/JlSQtmBuDEpKWf/pE75SpF3FksxZ+mqYuL3qSIN8lN/QsNurwYaPAP7zWXN2DNpvwlpOJItS5VhdLg==", "license": "Apache-2.0", "dependencies": { - "android-versions": "^2.0.0", - "cordova-common": "^5.0.0", + "android-versions": "^2.1.0", + "cordova-common": "^5.0.1", "dedent": "^1.5.3", "execa": "^5.1.1", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", + "fast-glob": "^3.3.3", "is-path-inside": "^3.0.3", - "nopt": "^7.2.1", + "nopt": "^8.1.0", "properties-parser": "^0.6.0", - "semver": "^7.6.2", + "semver": "^7.7.1", "string-argv": "^0.3.1", "untildify": "^4.0.0", - "which": "^4.0.0" + "which": "^5.0.0" }, "engines": { - "node": ">=16.13.0" + "node": ">=20.5.0" + } + }, + "node_modules/cordova-android/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/cordova-android/node_modules/execa": { @@ -7600,6 +9088,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cordova-android/node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/cordova-android/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -7627,6 +9130,21 @@ "node": ">=6" } }, + "node_modules/cordova-android/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/cordova-app-hello-world": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-6.0.0.tgz", @@ -8415,13 +9933,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", - "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", + "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.25.1" }, "funding": { "type": "opencollective", @@ -8603,100 +10121,22 @@ "license": "MIT" }, "node_modules/cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.5" - }, - "bin": { - "cross-env": "dist/bin/cross-env.js", - "cross-env-shell": "dist/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/cross-env/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "cross-spawn": "^7.0.1" }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-env/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/cross-env/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/cross-env/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", "bin": { - "semver": "bin/semver" - } - }, - "node_modules/cross-env/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cross-env/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cross-env/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, "node_modules/cross-spawn": { @@ -8911,9 +10351,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -9116,9 +10556,9 @@ } }, "node_modules/del/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -9576,9 +11016,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.128", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.128.tgz", - "integrity": "sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==", + "version": "1.5.182", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.182.tgz", + "integrity": "sha512-Lv65Btwv9W4J9pyODI6EWpdnhfvrve/us5h1WspW8B2Fb0366REPtY3hX7ounk1CkV/TBjWCEvCBBbYbmV0qCA==", "dev": true, "license": "ISC" }, @@ -10155,15 +11595,38 @@ "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.x" + "node": ">=0.8.x" + } + }, + "node_modules/events-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz", + "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/events-listener": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/events-listener/-/events-listener-1.1.0.tgz", - "integrity": "sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g==", + "node_modules/eventsource-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.3.tgz", + "integrity": "sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } }, "node_modules/evp_bytestokey": { "version": "1.0.3", @@ -10342,6 +11805,22 @@ "url": "https://opencollective.com/express" } }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -10640,79 +12119,82 @@ } }, "node_modules/firebase": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-11.5.0.tgz", - "integrity": "sha512-ZTpO/zD5nYqY02bGpXCg1dRNLggTXPQZdLQeSeur3jYH270p1QkAZZJsm/lrKZ2W4ZjBlafTxxs4OwN38Vyocw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.0.0.tgz", + "integrity": "sha512-KV+OrMJpi2uXlqL2zaCcXb7YuQbY/gMIWT1hf8hKeTW1bSumWaHT5qfmn0WTpHwKQa3QEVOtZR2ta9EchcmYuw==", "license": "Apache-2.0", "dependencies": { - "@firebase/analytics": "0.10.12", - "@firebase/analytics-compat": "0.2.18", - "@firebase/app": "0.11.3", - "@firebase/app-check": "0.8.13", - "@firebase/app-check-compat": "0.3.20", - "@firebase/app-compat": "0.2.52", + "@firebase/ai": "2.0.0", + "@firebase/analytics": "0.10.18", + "@firebase/analytics-compat": "0.2.24", + "@firebase/app": "0.14.0", + "@firebase/app-check": "0.11.0", + "@firebase/app-check-compat": "0.4.0", + "@firebase/app-compat": "0.5.0", "@firebase/app-types": "0.9.3", - "@firebase/auth": "1.9.1", - "@firebase/auth-compat": "0.5.19", - "@firebase/data-connect": "0.3.2", - "@firebase/database": "1.0.14", - "@firebase/database-compat": "2.0.5", - "@firebase/firestore": "4.7.10", - "@firebase/firestore-compat": "0.3.45", - "@firebase/functions": "0.12.3", - "@firebase/functions-compat": "0.3.20", - "@firebase/installations": "0.6.13", - "@firebase/installations-compat": "0.2.13", - "@firebase/messaging": "0.12.17", - "@firebase/messaging-compat": "0.2.17", - "@firebase/performance": "0.7.2", - "@firebase/performance-compat": "0.2.15", - "@firebase/remote-config": "0.6.0", - "@firebase/remote-config-compat": "0.2.13", - "@firebase/storage": "0.13.7", - "@firebase/storage-compat": "0.3.17", - "@firebase/util": "1.11.0", - "@firebase/vertexai": "1.2.0" + "@firebase/auth": "1.11.0", + "@firebase/auth-compat": "0.6.0", + "@firebase/data-connect": "0.3.11", + "@firebase/database": "1.1.0", + "@firebase/database-compat": "2.1.0", + "@firebase/firestore": "4.9.0", + "@firebase/firestore-compat": "0.4.0", + "@firebase/functions": "0.13.0", + "@firebase/functions-compat": "0.4.0", + "@firebase/installations": "0.6.19", + "@firebase/installations-compat": "0.2.19", + "@firebase/messaging": "0.12.23", + "@firebase/messaging-compat": "0.2.23", + "@firebase/performance": "0.7.8", + "@firebase/performance-compat": "0.2.21", + "@firebase/remote-config": "0.6.6", + "@firebase/remote-config-compat": "0.2.19", + "@firebase/storage": "0.14.0", + "@firebase/storage-compat": "0.4.0", + "@firebase/util": "1.13.0" } }, "node_modules/firebase-tools": { - "version": "13.29.1", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-13.29.1.tgz", - "integrity": "sha512-fFiUF9KNdVPzcQKHqtewTzQNsjm6GrvCyVyXiIDiiUFO9zIEmM6m4sI/Y9cKg8dknCTsqr0D4cNv2d6AoUaeWg==", + "version": "14.11.1", + "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-14.11.1.tgz", + "integrity": "sha512-TABPdXQTGJC16Q6QizOMnNbaI31SIJHQUKQs2XH1FjCYLoC3ur88OdOFYgCy2vdGOFmDqBEmFYRzOr0sxlngEA==", "dev": true, "license": "MIT", "dependencies": { - "@electric-sql/pglite": "^0.2.0", + "@electric-sql/pglite": "^0.3.3", + "@electric-sql/pglite-tools": "^0.2.8", "@google-cloud/cloud-sql-connector": "^1.3.3", "@google-cloud/pubsub": "^4.5.0", + "@inquirer/prompts": "^7.4.0", + "@modelcontextprotocol/sdk": "^1.10.2", "abort-controller": "^3.0.0", - "ajv": "^6.12.6", + "ajv": "^8.17.1", + "ajv-formats": "3.0.1", "archiver": "^7.0.0", "async-lock": "1.4.1", "body-parser": "^1.19.0", "chokidar": "^3.6.0", "cjson": "^0.3.1", - "cli-table": "0.3.11", + "cli-table3": "0.6.5", "colorette": "^2.0.19", "commander": "^5.1.0", "configstore": "^5.0.1", "cors": "^2.8.5", - "cross-env": "^5.1.3", - "cross-spawn": "^7.0.3", + "cross-env": "^7.0.3", + "cross-spawn": "^7.0.5", "csv-parse": "^5.0.4", "deep-equal-in-any-order": "^2.0.6", "exegesis": "^4.2.0", "exegesis-express": "^4.0.0", "express": "^4.16.4", "filesize": "^6.1.0", - "form-data": "^4.0.0", + "form-data": "^4.0.1", "fs-extra": "^10.1.0", "fuzzy": "^0.1.3", "gaxios": "^6.7.0", "glob": "^10.4.1", "google-auth-library": "^9.11.0", - "inquirer": "^8.2.6", - "inquirer-autocomplete-prompt": "^2.0.1", + "ignore": "^7.0.4", "js-yaml": "^3.14.1", "jsonwebtoken": "^9.0.0", "leven": "^3.1.0", @@ -10729,6 +12211,8 @@ "ora": "^5.4.1", "p-limit": "^3.0.1", "pg": "^8.11.3", + "pg-gateway": "^0.3.0-beta.4", + "pglite-2": "npm:@electric-sql/pglite@0.2.17", "portfinder": "^1.0.32", "progress": "^2.0.3", "proxy-agent": "^6.3.0", @@ -10737,7 +12221,7 @@ "sql-formatter": "^15.3.0", "stream-chain": "^2.2.4", "stream-json": "^1.7.3", - "superstatic": "^9.1.0", + "superstatic": "^9.2.0", "tar": "^6.1.11", "tcp-port-used": "^1.0.2", "tmp": "^0.2.3", @@ -10748,19 +12232,56 @@ "winston": "^3.0.0", "winston-transport": "^4.4.0", "ws": "^7.5.10", - "yaml": "^2.4.1" + "yaml": "^2.4.1", + "zod": "^3.24.3", + "zod-to-json-schema": "^3.24.5" }, "bin": { "firebase": "lib/bin/firebase.js" }, "engines": { - "node": ">=18.0.0 || >=20.0.0" + "node": ">=20.0.0 || >=22.0.0" + } + }, + "node_modules/firebase-tools/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/firebase-tools/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, "node_modules/firebase-tools/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -10783,6 +12304,16 @@ "node": ">=12" } }, + "node_modules/firebase-tools/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/firebase-tools/node_modules/is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", @@ -10793,6 +12324,13 @@ "node": ">=4" } }, + "node_modules/firebase-tools/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/firebase-tools/node_modules/marked": { "version": "13.0.3", "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz", @@ -10832,6 +12370,19 @@ "node": ">=8" } }, + "node_modules/firebase/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -10912,15 +12463,16 @@ } }, "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "dev": true, "license": "MIT", "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" }, "engines": { @@ -11353,16 +12905,6 @@ "node": ">=10" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -11966,9 +13508,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12511,122 +14053,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.1.tgz", - "integrity": "sha512-jUHrH0btO7j5r8DTQgANf2CBkTZChoVySD8zF/wp5fZCOLIuUbleXhf4ZY5jNBOc1owA3gdfWtfZuppfYBhcUg==", - "dev": true, - "license": "ISC", - "dependencies": { - "ansi-escapes": "^4.3.2", - "figures": "^3.2.0", - "picocolors": "^1.0.0", - "run-async": "^2.4.1", - "rxjs": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "inquirer": "^8.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/insight": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz", @@ -14635,9 +16061,9 @@ } }, "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -14732,9 +16158,9 @@ } }, "node_modules/marked": { - "version": "15.0.7", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.7.tgz", - "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==", + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -14922,9 +16348,9 @@ "license": "ISC" }, "node_modules/messageformat/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -15359,9 +16785,9 @@ "license": "BSD-3-Clause" }, "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", "dev": true, "license": "MIT", "dependencies": { @@ -15369,7 +16795,7 @@ "debug": "2.6.9", "depd": "~2.0.0", "on-finished": "~2.3.0", - "on-headers": "~1.0.2" + "on-headers": "~1.1.0" }, "engines": { "node": ">= 0.8.0" @@ -15425,13 +16851,6 @@ "multicast-dns": "cli.js" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -15534,13 +16953,6 @@ "node": ">= 0.4.0" } }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" - }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -15645,9 +17057,9 @@ } }, "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -15813,9 +17225,9 @@ } }, "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -15940,9 +17352,9 @@ } }, "node_modules/npm": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.2.tgz", - "integrity": "sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==", + "version": "10.9.3", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.3.tgz", + "integrity": "sha512-6Eh1u5Q+kIVXeA8e7l2c/HpnFFcwrkt37xDMujD5be1gloWa9p6j3Fsv3mByXXmqJHy+2cElRMML8opNT7xIJQ==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -16024,37 +17436,37 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/config": "^9.0.0", "@npmcli/fs": "^4.0.0", "@npmcli/map-workspaces": "^4.0.2", - "@npmcli/package-json": "^6.1.0", + "@npmcli/package-json": "^6.2.0", "@npmcli/promise-spawn": "^8.0.2", - "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^9.0.1", - "@sigstore/tuf": "^3.0.0", - "abbrev": "^3.0.0", + "@npmcli/redact": "^3.2.2", + "@npmcli/run-script": "^9.1.0", + "@sigstore/tuf": "^3.1.1", + "abbrev": "^3.0.1", "archy": "~1.0.0", "cacache": "^19.0.1", - "chalk": "^5.3.0", - "ci-info": "^4.1.0", + "chalk": "^5.4.1", + "ci-info": "^4.2.0", "cli-columns": "^4.0.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", "glob": "^10.4.5", "graceful-fs": "^4.2.11", - "hosted-git-info": "^8.0.2", + "hosted-git-info": "^8.1.0", "ini": "^5.0.0", "init-package-json": "^7.0.2", - "is-cidr": "^5.1.0", + "is-cidr": "^5.1.1", "json-parse-even-better-errors": "^4.0.0", "libnpmaccess": "^9.0.0", - "libnpmdiff": "^7.0.0", - "libnpmexec": "^9.0.0", - "libnpmfund": "^6.0.0", + "libnpmdiff": "^7.0.1", + "libnpmexec": "^9.0.1", + "libnpmfund": "^6.0.1", "libnpmhook": "^11.0.0", "libnpmorg": "^7.0.0", - "libnpmpack": "^8.0.0", + "libnpmpack": "^8.0.1", "libnpmpublish": "^10.0.1", "libnpmsearch": "^8.0.0", "libnpmteam": "^7.0.0", @@ -16064,23 +17476,23 @@ "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^11.0.0", - "nopt": "^8.0.0", + "node-gyp": "^11.2.0", + "nopt": "^8.1.0", "normalize-package-data": "^7.0.0", "npm-audit-report": "^6.0.0", "npm-install-checks": "^7.1.1", - "npm-package-arg": "^12.0.0", + "npm-package-arg": "^12.0.2", "npm-pick-manifest": "^10.0.0", "npm-profile": "^11.0.1", "npm-registry-fetch": "^18.0.2", "npm-user-validate": "^3.0.0", - "p-map": "^4.0.0", + "p-map": "^7.0.3", "pacote": "^19.0.1", "parse-conflict-json": "^4.0.0", "proc-log": "^5.0.0", "qrcode-terminal": "^0.12.0", - "read": "^4.0.0", - "semver": "^7.6.3", + "read": "^4.1.0", + "semver": "^7.7.2", "spdx-expression-parse": "^4.0.0", "ssri": "^12.0.0", "supports-color": "^9.4.0", @@ -16088,7 +17500,7 @@ "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^6.0.0", + "validate-npm-package-name": "^6.0.1", "which": "^5.0.0", "write-file-atomic": "^6.0.0" }, @@ -16420,7 +17832,7 @@ } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "8.0.0", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -16500,7 +17912,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "6.0.1", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -16510,7 +17922,6 @@ "lru-cache": "^10.0.1", "npm-pick-manifest": "^10.0.0", "proc-log": "^5.0.0", - "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^5.0.0" @@ -16616,7 +18027,7 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "6.1.0", + "version": "6.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -16625,9 +18036,9 @@ "glob": "^10.2.2", "hosted-git-info": "^8.0.0", "json-parse-even-better-errors": "^4.0.0", - "normalize-package-data": "^7.0.0", "proc-log": "^5.0.0", - "semver": "^7.5.3" + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -16646,19 +18057,19 @@ } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "4.0.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/redact": { - "version": "3.0.0", + "version": "3.2.2", "dev": true, "inBundle": true, "license": "ISC", @@ -16667,7 +18078,7 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "9.0.2", + "version": "9.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -16694,21 +18105,21 @@ } }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", + "version": "0.4.3", "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "3.0.0", + "version": "3.1.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/protobuf-specs": "^0.4.1", "tuf-js": "^3.0.1" }, "engines": { @@ -16725,7 +18136,7 @@ } }, "node_modules/npm/node_modules/abbrev": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -16734,30 +18145,14 @@ } }, "node_modules/npm/node_modules/agent-base": { - "version": "7.1.1", + "version": "7.1.3", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", "dev": true, @@ -16826,7 +18221,7 @@ } }, "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "MIT", @@ -16866,19 +18261,6 @@ "node": ">=18" } }, - "node_modules/npm/node_modules/cacache/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { "version": "3.0.1", "dev": true, @@ -16894,18 +18276,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/cacache/node_modules/p-map": { - "version": "7.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm/node_modules/cacache/node_modules/tar": { "version": "7.4.3", "dev": true, @@ -16933,7 +18303,7 @@ } }, "node_modules/npm/node_modules/chalk": { - "version": "5.3.0", + "version": "5.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -16954,7 +18324,7 @@ } }, "node_modules/npm/node_modules/ci-info": { - "version": "4.1.0", + "version": "4.2.0", "dev": true, "funding": [ { @@ -16969,7 +18339,7 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.1", + "version": "4.1.3", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -16980,15 +18350,6 @@ "node": ">=14" } }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", "dev": true, @@ -17077,7 +18438,7 @@ } }, "node_modules/npm/node_modules/debug": { - "version": "4.3.7", + "version": "4.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -17140,7 +18501,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", + "version": "3.1.2", "dev": true, "inBundle": true, "license": "Apache-2.0" @@ -17155,12 +18516,12 @@ } }, "node_modules/npm/node_modules/foreground-child": { - "version": "3.3.0", + "version": "3.3.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -17209,7 +18570,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "8.0.2", + "version": "8.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -17221,7 +18582,7 @@ } }, "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", + "version": "4.2.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause" @@ -17240,12 +18601,12 @@ } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.5", + "version": "7.0.6", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -17286,15 +18647,6 @@ "node": ">=0.8.19" } }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/ini": { "version": "5.0.0", "dev": true, @@ -17348,7 +18700,7 @@ } }, "node_modules/npm/node_modules/is-cidr": { - "version": "5.1.0", + "version": "5.1.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -17448,12 +18800,12 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "7.0.0", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/installed-package-contents": "^3.0.0", "binary-extensions": "^2.3.0", "diff": "^5.1.0", @@ -17467,12 +18819,12 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "9.0.0", + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/run-script": "^9.0.1", "ci-info": "^4.0.0", "npm-package-arg": "^12.0.0", @@ -17488,12 +18840,12 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "6.0.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0" + "@npmcli/arborist": "^8.0.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -17526,12 +18878,12 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "8.0.0", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/run-script": "^9.0.1", "npm-package-arg": "^12.0.0", "pacote": "^19.0.0" @@ -17674,7 +19026,7 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "4.0.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -17690,19 +19042,6 @@ "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", "dev": true, @@ -17776,28 +19115,15 @@ } }, "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", + "version": "3.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">= 18" } }, "node_modules/npm/node_modules/mkdirp": { @@ -17828,20 +19154,20 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "11.0.0", + "version": "11.2.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", "make-fetch-happen": "^14.0.3", "nopt": "^8.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "tar": "^7.4.3", + "tinyglobby": "^0.2.12", "which": "^5.0.0" }, "bin": { @@ -17860,19 +19186,6 @@ "node": ">=18" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { "version": "3.0.1", "dev": true, @@ -17915,12 +19228,12 @@ } }, "node_modules/npm/node_modules/nopt": { - "version": "8.0.0", + "version": "8.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" @@ -17929,15 +19242,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/nopt/node_modules/abbrev": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/normalize-package-data": { "version": "7.0.0", "dev": true, @@ -17995,7 +19299,7 @@ } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "12.0.0", + "version": "12.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -18068,19 +19372,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/npm-user-validate": { "version": "3.0.0", "dev": true, @@ -18091,15 +19382,12 @@ } }, "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", + "version": "7.0.3", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -18182,7 +19470,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.1.2", + "version": "7.1.0", "dev": true, "inBundle": true, "license": "MIT", @@ -18230,12 +19518,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", "dev": true, @@ -18270,7 +19552,7 @@ } }, "node_modules/npm/node_modules/read": { - "version": "4.0.0", + "version": "4.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -18312,21 +19594,6 @@ "node": ">= 4" } }, - "node_modules/npm/node_modules/rimraf": { - "version": "5.0.10", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", "dev": true, @@ -18335,7 +19602,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.6.3", + "version": "7.7.2", "dev": true, "inBundle": true, "license": "ISC", @@ -18380,29 +19647,29 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^3.0.0", - "@sigstore/tuf": "^3.0.0", - "@sigstore/verify": "^2.0.0" + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.4.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -18418,15 +19685,15 @@ } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^14.0.1", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", "proc-log": "^5.0.0", "promise-retry": "^2.0.1" }, @@ -18435,14 +19702,14 @@ } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify": { - "version": "2.0.0", + "version": "2.1.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.4.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -18459,7 +19726,7 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.8.3", + "version": "2.8.5", "dev": true, "inBundle": true, "license": "MIT", @@ -18473,12 +19740,12 @@ } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.4", + "version": "8.0.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -18523,7 +19790,7 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.20", + "version": "3.0.21", "dev": true, "inBundle": true, "license": "CC0-1.0" @@ -18662,6 +19929,31 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", "dev": true, @@ -18674,6 +19966,48 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.14", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", "dev": true, @@ -18761,7 +20095,7 @@ } }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "6.0.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -19062,9 +20396,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -19589,9 +20923,9 @@ } }, "node_modules/parse-json/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -19743,22 +21077,57 @@ } }, "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", "dev": true, "license": "MIT", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" }, "engines": { "node": ">=0.12" } }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, "node_modules/pdfjs-dist": { "version": "4.10.38", "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.10.38.tgz", @@ -19820,6 +21189,13 @@ "dev": true, "license": "MIT" }, + "node_modules/pg-gateway": { + "version": "0.3.0-beta.4", + "resolved": "https://registry.npmjs.org/pg-gateway/-/pg-gateway-0.3.0-beta.4.tgz", + "integrity": "sha512-CTjsM7Z+0Nx2/dyZ6r8zRsc3f9FScoD5UAOlfUx1Fdv/JOIWvRbF7gou6l6vP+uypXQVoYPgw8xZDXgMGvBa4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", @@ -19864,6 +21240,14 @@ "node": ">=4" } }, + "node_modules/pglite-2": { + "name": "@electric-sql/pglite", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.2.17.tgz", + "integrity": "sha512-qEpKRT2oUaWDH6tjRxLHjdzMqRUGYDnGZlKrnL4dJ77JVMcP2Hpo3NYnOSPKdZdeec57B6QPprCUFg0picx5Pw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/pgpass": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", @@ -19928,6 +21312,16 @@ "node": ">=0.10.0" } }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-conf": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", @@ -20116,15 +21510,15 @@ } }, "node_modules/plotly.js-basic-dist-min": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/plotly.js-basic-dist-min/-/plotly.js-basic-dist-min-3.0.1.tgz", - "integrity": "sha512-2DNfjn0Xv+IAk6ksaIm8AHSlKCxWQOx9f3v5JGvzFKPwEbJRsLIy4Up0cOPqO53kL4jrdw8LnUTrM9FAzvKMsQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/plotly.js-basic-dist-min/-/plotly.js-basic-dist-min-3.0.3.tgz", + "integrity": "sha512-ex9O6GS3aKfWvqkzqGFg+DEy/6AlZTnKfeCKbIr6lzzPbcXjgVGp15GT0JQEUQYlKL2o+7+vGqG2G20be9XrBg==", "license": "MIT" }, "node_modules/plotly.js-locales": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/plotly.js-locales/-/plotly.js-locales-3.0.1.tgz", - "integrity": "sha512-49OfOhnOFpWAXey+HoKunJsfb79ozaFQqG+eqfQtqY4z0/NxPG/1a3I0qf0k3DDE5t11EpBKi2TTa00eIiWYVA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/plotly.js-locales/-/plotly.js-locales-3.0.3.tgz", + "integrity": "sha512-A55zIk4zNYP1//4o+pbyAezVPLY17lQHVZ6nI4V0bSdVwAqqPPj/8BgjZYH4tT4FmlCLBeJuP4KjHmRiz8bQgA==", "license": "MIT" }, "node_modules/portfinder": { @@ -21098,9 +22492,9 @@ } }, "node_modules/read-package-up/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -21166,9 +22560,9 @@ } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -21302,9 +22696,9 @@ } }, "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -21343,22 +22737,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regexpu-core": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", @@ -21710,9 +23088,9 @@ } }, "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -21849,16 +23227,6 @@ "run-script-os": "index.js" } }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -21920,9 +23288,9 @@ "license": "ISC" }, "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21998,16 +23366,16 @@ } }, "node_modules/semantic-release": { - "version": "24.2.3", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.3.tgz", - "integrity": "sha512-KRhQG9cUazPavJiJEFIJ3XAMjgfd0fcK3B+T26qOl8L0UG5aZUjeRfREO0KM5InGtYwxqiiytkJrbcYoLDEv0A==", + "version": "24.2.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.7.tgz", + "integrity": "sha512-g7RssbTAbir1k/S7uSwSVZFfFXwpomUB9Oas0+xi9KStSCmeDXcA7rNhiskjLqvUe/Evhx8fVCT16OSa34eM5g==", "dev": true, "license": "MIT", "dependencies": { "@semantic-release/commit-analyzer": "^13.0.0-beta.1", "@semantic-release/error": "^4.0.0", "@semantic-release/github": "^11.0.0", - "@semantic-release/npm": "^12.0.0", + "@semantic-release/npm": "^12.0.2", "@semantic-release/release-notes-generator": "^14.0.0-beta.1", "aggregate-error": "^5.0.0", "cosmiconfig": "^9.0.0", @@ -22022,8 +23390,8 @@ "hosted-git-info": "^8.0.0", "import-from-esm": "^2.0.0", "lodash-es": "^4.17.21", - "marked": "^12.0.0", - "marked-terminal": "^7.0.0", + "marked": "^15.0.0", + "marked-terminal": "^7.3.0", "micromatch": "^4.0.2", "p-each-series": "^3.0.0", "p-reduce": "^3.0.0", @@ -22098,9 +23466,9 @@ } }, "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", - "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dev": true, "license": "ISC", "dependencies": { @@ -22130,19 +23498,6 @@ "dev": true, "license": "ISC" }, - "node_modules/semantic-release/node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", - "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/semantic-release/node_modules/p-reduce": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", @@ -22167,9 +23522,9 @@ } }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -22487,144 +23842,90 @@ } }, "node_modules/shelljs": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz", - "integrity": "sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.10.0.tgz", + "integrity": "sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "execa": "^1.0.0", - "fast-glob": "^3.3.2", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" + "execa": "^5.1.1", + "fast-glob": "^3.3.2" }, "engines": { "node": ">=18" } }, - "node_modules/shelljs/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, "node_modules/shelljs/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/shelljs/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" + "node": ">=10" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/shelljs/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "node_modules/shelljs/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shelljs/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/shelljs/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "node_modules/shelljs/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": ">=10.17.0" } }, - "node_modules/shelljs/node_modules/path-key": { + "node_modules/shelljs/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/shelljs/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shelljs/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/shelljs/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shelljs/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shelljs/node_modules/signal-exit": { @@ -22634,17 +23935,14 @@ "dev": true, "license": "ISC" }, - "node_modules/shelljs/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/shelljs/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/side-channel": { @@ -22962,9 +24260,9 @@ } }, "node_modules/simctl/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -23649,16 +24947,6 @@ "node": ">=10" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-final-newline": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", @@ -24402,6 +25690,28 @@ "node": ">=14.14" } }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -24713,6 +26023,21 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -24745,9 +26070,9 @@ } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -25219,21 +26544,23 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.101.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz", + "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.2", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -25243,11 +26570,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -25372,15 +26699,16 @@ } }, "node_modules/webpack-dev-server": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", - "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", "@types/sockjs": "^0.3.36", @@ -25393,7 +26721,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -25428,6 +26756,19 @@ } } }, + "node_modules/webpack-dev-server/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", @@ -25438,33 +26779,17 @@ "node": ">= 10" } }, - "node_modules/webpack-dev-server/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/webpack-dev-server/node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dev": true, "license": "MIT", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "wsl-utils": "^0.1.0" }, "engines": { "node": ">=18" @@ -25474,9 +26799,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", "engines": { @@ -25542,9 +26867,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", "engines": { @@ -25966,6 +27291,38 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xcode": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", @@ -26124,6 +27481,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zip-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", @@ -26138,6 +27508,26 @@ "engines": { "node": ">= 14" } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } } } } diff --git a/package.json b/package.json index fa39b55bd..41db21a71 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,8 @@ "name": "opal-app", "description": "Opal Mobile App", "main": "index.js", + "_comment": "Private: true is used to prevent semantic-release from publishing to the registry: https://semantic-release.gitbook.io/semantic-release/support/faq#there-are-valid-reasons-to-commit-during-a-release", + "private": true, "scripts": { "help": "echo Append a variable at the end of each start or build command to specify which environment to use, for example: --env=local", "postinstall": "node -e \"require('./opal-env.setup.js').createWWWFolder()\"", @@ -15,15 +17,13 @@ "build:web": "run-script-os", "build:web:windows": "npm run prepare:web && webpack --env opal_environment=%npm_config_env%", "build:web:nix": "npm run prepare:web && webpack --env opal_environment=$npm_config_env", - "build:app:ios": "npm run prepare:app && npm run build:web && cordova build ios --verbose", - "build:app:android": "npm run prepare:app && npm run build:web && cordova build android --verbose", - "build:app:ios:device": "npm run prepare:app && npm run build:web && cordova build ios --device --verbose", - "build:app:ios:device:ci": "npm run prepare:app && npm run build:web && cordova build ios --device --verbose --developmentTeam=$npm_config_devteam --automaticProvisioning=true", - "build:app:android:device": "npm run prepare:app && npm run build:web && cordova build android --device --verbose", - "build:app:ios:device:release": "npm run prepare:app && npm run build:web && cordova build ios --device --release --verbose", - "build:app:ios:device:release:ci": "npm run prepare:app && npm run build:web && cordova build ios --device --release --verbose --developmentTeam=$npm_config_devteam --automaticProvisioning=true", - "build:app:android:device:release": "npm run prepare:app && npm run build:web && cordova build android --device --release --verbose", - "build:app:android:device:release:apk": "npm run prepare:app && npm run build:web && cordova build android --device --release --verbose -- --packageType=apk", + "build:app:ios": "npm run prepare:app && npm run build:web && cordova build ios --device --verbose", + "build:app:ios:ci": "npm run prepare:app && npm run build:web && cordova build ios --device --verbose --codeSignIdentity=\"iPhone Developer\" --developmentTeam=$npm_config_devteam --provisioningProfile=$npm_config_provisioningprofile", + "build:app:ios:release": "npm run prepare:app && npm run build:web && cordova build ios --device --release --verbose", + "build:app:ios:release:ci": "npm run prepare:app && npm run build:web && cordova build ios --device --release --verbose --codeSignIdentity=\"iPhone Developer\" --developmentTeam=$npm_config_devteam --provisioningProfile=$npm_config_provisioningprofile --packageType=app-store", + "build:app:android": "npm run prepare:app && npm run build:web && cordova build android --device --verbose", + "build:app:android:release": "npm run prepare:app && npm run build:web && cordova build android --device --release --verbose", + "build:app:android:release:apk": "npm run prepare:app && npm run build:web && cordova build android --device --release --verbose -- --packageType=apk", "start": "npm run start:web", "start:web": "run-script-os", "start:web:windows": "npm run prepare:web && webpack-dev-server --open --env opal_environment=%npm_config_env% --env minimize=false", @@ -34,7 +34,7 @@ }, "repository": { "type": "git", - "url": "https://gitlab.com/opalmedapps/qplus.git" + "url": "https://github.com/opalmedapps/opal-app.git" }, "keywords": [ "Health", @@ -43,13 +43,13 @@ "author": "Opal Health Informatics Group", "license": "Apache-2.0", "bugs": { - "url": "https://github.com/Sable/qplus/issues" + "url": "https://github.com/opalmedapps/opal-app/issues" }, - "homepage": "https://github.com/Sable/qplus#readme", + "homepage": "https://github.com/opalmedapps/opal-app#readme", "dependencies": { - "@babel/runtime": "7.26.10", + "@babel/runtime": "7.28.2", "@fortawesome/fontawesome-free": "6.7.2", - "@havesource/cordova-plugin-push": "5.0.5", + "@havesource/cordova-plugin-push": "6.0.1", "@zxcvbn-ts/core": "3.0.4", "@zxcvbn-ts/language-common": "3.0.4", "@zxcvbn-ts/language-en": "3.0.2", @@ -60,14 +60,13 @@ "angular-sanitize": "npm:@neverendingsupport/angularjs@1.9.9-sanitize", "angular-touch": "npm:@neverendingsupport/angularjs@1.9.9-touch", "angular-translate": "2.19.1", - "angular-translate-handler-log": "2.19.1", "angular-translate-interpolation-messageformat": "2.19.1", "angular-translate-loader-partial": "2.19.1", "angular-ui-router": "1.0.30", "animate.css": "4.1.1", "bootstrap": "3.4.1", "cordova": "12.0.0", - "cordova-android": "13.0.0", + "cordova-android": "14.0.1", "cordova-ios": "7.1.1", "cordova-plugin-android-permissions": "1.1.5", "cordova-plugin-androidx-adapter": "1.1.3", @@ -90,45 +89,45 @@ "cordova-plugin-x-socialsharing": "6.0.4", "crypto-js": "4.2.0", "es6-promise-plugin": "4.2.2", - "firebase": "11.5.0", + "firebase": "12.0.0", "jquery": "3.7.1", "jquery.panzoom": "3.2.3", - "marked": "15.0.7", + "marked": "15.0.12", "moment": "2.30.1", "onsenui": "1.3.17", "pdfjs-dist": "4.10.38", - "plotly.js-basic-dist-min": "3.0.1", - "plotly.js-locales": "3.0.1", + "plotly.js-basic-dist-min": "3.0.3", + "plotly.js-locales": "3.0.3", "python-struct": "1.1.3", "tweetnacl": "1.0.3", "tweetnacl-util": "0.15.1" }, "devDependencies": { - "@babel/core": "7.26.10", - "@babel/plugin-transform-runtime": "7.26.10", - "@babel/preset-env": "7.26.9", + "@babel/core": "7.28.0", + "@babel/plugin-transform-runtime": "7.28.0", + "@babel/preset-env": "7.28.0", "@semantic-release/changelog": "6.0.3", - "@semantic-release/exec": "7.0.3", + "@semantic-release/exec": "7.1.0", "@semantic-release/git": "10.0.1", "babel-loader": "10.0.0", "clean-webpack-plugin": "4.0.0", "copy-webpack-plugin": "13.0.0", "css-loader": "7.1.2", "exports-loader": "5.0.0", - "firebase-tools": "13.29.1", + "firebase-tools": "14.11.1", "html-webpack-plugin": "5.6.3", "imports-loader": "5.0.0", "node-polyfill-webpack-plugin": "4.1.0", "raw-loader": "4.0.2", "run-script-os": "1.1.6", - "semantic-release": "24.2.3", - "semver": "7.7.1", - "shelljs": "0.9.2", + "semantic-release": "24.2.7", + "semver": "7.7.2", + "shelljs": "0.10.0", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "webpack": "5.98.0", + "webpack": "5.101.0", "webpack-cli": "6.0.1", - "webpack-dev-server": "5.2.0", + "webpack-dev-server": "5.2.2", "webpack-manifest-plugin": "5.0.1", "xml-js": "1.6.11" }, diff --git a/renovate.json5 b/renovate.json5 index df1112313..66dcfcbb7 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -13,13 +13,14 @@ // https://docs.renovatebot.com/presets-default/#separatepatchreleases ":separatePatchReleases", // get updates for alpine version of node images - "gitlab>opalmedapps/renovate-bot//presets/docker-alpine.json5", + "github>mschoettle/renovate-presets//presets/docker-alpine.json5", // set timezone to local one to ensure schedules are run // https://docs.renovatebot.com/configuration-options/#timezone ":timezone(America/Toronto)", // get weekly updates to lighten load // https://docs.renovatebot.com/presets-schedule/#scheduleweekly "schedule:weekly", + "github>mschoettle/renovate-presets//presets/actions-dependency-version.json5", ], // Extra rules for node images. See: https://github.com/renovatebot/renovate/discussions/29501 // Ensure that node docker versioning doesn't interfere with the custom managers. diff --git a/src/Languages/appTranslationTablesViews/all-views/en.json b/src/Languages/appTranslationTablesViews/all-views/en.json index 5e97c3ba6..cc508bb1f 100644 --- a/src/Languages/appTranslationTablesViews/all-views/en.json +++ b/src/Languages/appTranslationTablesViews/all-views/en.json @@ -1,57 +1,52 @@ { "ADDED": "Added at", - "ALIAS": "Nickname", "ANSWER": "Answer", - "ANSWER2": "Answer", "APPOINTMENT": "Appointment", "APPOINTMENTS": "Appointments", "APPOINTMENT_ABOUT": "About this appointment", "APPOINTMENT_CANCELLED": "This appointment has been cancelled.", "APPOINTMENT_OPEN_ERROR": "An error occurred while opening this appointment.", - "APPOINTMENT_ROOM": "Appointment Room", - "AVAILABLEDEVICES": "Available only on a device.", + "AVAILABLE_DEVICES": "Available only on a device.", "BEGIN": "Begin", "CARNET_SANTE": "Québec Health Booklet", "CHARACTERS_LEFT": "characters left", + "CHART_ALL_RANGE_SELECTOR": "All", + "CHART_DESCRIPTION": "The Chart tab contains all the information regarding your electronic health data.", + "CHART_NON_NUMERIC_VALUES": "These results can't be charted because at least one of them isn't a number", + "CHART_NO_PLOT_AVAILABLE": "No plot available", "CHART_ONE_MONTH_SELECTOR": "1m", - "CHART_THREE_MONTHS_SELECTOR": "3m", "CHART_SIX_MONTHS_SELECTOR": "6m", + "CHART_THREE_MONTHS_SELECTOR": "3m", "CHART_YEAR_SELECTOR": "1y", - "CHART_ALL_RANGE_SELECTOR": "All", - "CHART_NO_PLOT_AVAILABLE": "No plot available", - "CHART_NON_NUMERIC_VALUES": "These results can't be charted because at least one of them isn't a number", "CHECKIN": "Check-in", "CHECKIN_ALL_TODAY": "Check in", "CHECKIN_ERROR_GEOLOCATION": "Unable to detect location; check your app or device permission settings.", - "CHECKIN_ERROR_ONE": "Unable to check in for this appointment. Please try again, or go to the reception.", "CHECKIN_ERROR_MULTIPLE": "Unable to check in for one or more appointments. Please try again, or go to the reception.", + "CHECKIN_ERROR_ONE": "Unable to check in for this appointment. Please try again, or go to the reception.", "CHECKIN_MESSAGE_AFTER": "You are checked in for your appointment.", "CHECKIN_MESSAGE_AFTER_PLURAL": "You are checked in for your appointments.", "CHECKIN_MESSAGE_BEFORE": "Check in for your appointment.", "CHECKIN_MESSAGE_BEFORE_PLURAL": "Check in for your appointments.", "CHECKIN_NONE": "No appointments available for check-in today.", "CHECKIN_NOT_ALLOWED": "Check-in will be available on arrival at the hospital.", - "CHECKIN_PATIENT_HEADER_SELF": "Your appointments", "CHECKIN_PATIENT_HEADER_NON_SELF": "{name}'s appointments", - "CLINICAL_REPORTS": "Clinical Reports", + "CHECKIN_PATIENT_HEADER_SELF": "Your appointments", "CLINICAL_QUESTIONNAIRES": "Clinical Questionnaires", + "CLINICAL_REPORTS": "Clinical Reports", "COLLECTION_DATE": "Collected Date", "CONFIRM_DOWNLOAD": "The document must be temporarily downloaded to your device before proceeding.", "CONSENT": "Consent", "CONSENT_FORMS": "Consent Forms", + "CONSENT_FORMS_NONE_COMPLETED": "No completed consent forms", + "CONSENT_FORMS_NONE_NEW": "No new consent forms", + "CONSENT_FORMS_NONE_PROGRESS": "No consent forms in progress", "CONSENT_FORM_ACKNOWLEDGEMENT": "I agree to participate in this research study according to the conditions stated in this consent form.", "CONSENT_FORM_BEGIN_INSTRUCTION": "Tap \"Begin\" or swipe to the left to respond to the consent form.", "CONSENT_FORM_GO_BACK_TO_LIST": "Go back to the consent form list", - "CONSENT_FORMS_NONE_COMPLETED": "No completed consent forms", - "CONSENT_FORMS_NONE_PROGRESS": "No consent forms in progress", - "CONSENT_FORMS_NONE_NEW": "No new consent forms", "CONSENT_FORM_PASSWORD_INSTRUCTION": "Please enter your password to confirm your consent.", "CONSENT_FORM_RESUME_INSTRUCTION": "Tap \"Resume\" or swipe to the left to resume the consent form.", "CONSENT_FORM_SUBMIT_INSTRUCTION": "To submit the consent form, please answer the question below and tap the submit button.", "CONSENT_FORM_THANKS": "Thank you for completing this consent form", - "CONTACTHOSPITAL": "Contact the hospital for assistance", - "CONTINUE": "Continue", - "DATE": "Date", "DATE_END": "End Date", "DATE_START": "Start Date", "DAYS": "{ days } {days, plural, =0{days} one{day} other{days}}", @@ -64,136 +59,111 @@ "DOC_DATE_CREATED": "Date Created:", "DOC_DATE_UPDATED": "Date Updated:", "DOC_INFO": "Document Info", - "DOC_SIGNEDBY": "Signed By:", + "DOC_SIGNED_BY": "Signed By:", "DONE": "Done", "EDUCATION_DESCRIPTION": "This section contains information specific to your treatment and general diagnosis.", "EDU_OPEN_ERROR": "Error opening this reference material", - "EMAIL": "Email", - "EMAIL_TAKEN": "E-mail has already been taken", - "ENTERANANSWER": "Enter an answer", - "ENTERANSWERPLACEHOLDER": "Enter your answer...", - "ENTEREMAIL": "Enter your Email Address:", - "ENTEREMAILADDRESS": "Enter your new email address:", - "ENTERNEWPASSWORD": "Enter your new password:", - "ENTERNEWTELEPHONE": "Enter your new ten digit telephone number:", - "ENTEROLDPASSWORD": "Enter your old password:", - "ENTEROLDPASSWORDPLACEHOLDER": "Old password", - "ENTERPASSWORD": "Enter your Password", - "ENTERYOURALIAS": "Enter your new nickname", - "ERRORANSWERNOTMATCH": "Answer does not match our records", - "ERROROBTAININGDOCUMENT": "Error obtaining document from server", + "ENTER_NEW_PASSWORD": "Enter your new password:", + "ENTER_OLD_PASSWORD": "Enter your old password:", + "ENTER_OLD_PASSWORD_PLACEHOLDER": "Old password", + "ENTER_PASSWORD": "Enter your Password", "ERROR_GETTING_EDU_MATERIAL": "Error getting reference material contents from server.", "ERROR_IN_VIDEO_URL_OR_FORMAT": "Error in video url or format", + "ERROR_OBTAINING_DOCUMENT": "Error obtaining document from server", "EXIT_APP": "Are you sure you wish to exit Opal?", - "Electrolytes": "Electrolytes", - "FEEDBACK": "Feedback", "FEEDBACK_ERROR": "An error occurred while sending your feedback. Please try again later.", + "FEEDBACK_LEAVE_MESSAGE": "Leave us a message", "FEEDBACK_MESSAGE": "Your feedback is invaluable to us. Please take a moment to let us know what you think about Opal.", "FEEDBACK_RECEIVED": "Your feedback has been received.", "FEEDBACK_SUBMIT_AS": "Submitting feedback as:", - "FIELD_UPDATED": "Field has been updated", "FIND_DOCTOR": "Find a Family Doctor", "FONTSIZE": "Font size", "FOR": "For", "FUTURE": "Future", - "GENERAL": "General", - "GENERALANNOUNCEMENTS": "General Announcements", - "GENERALANNOUNCEMENTSHEADER": "Announcements", + "GENERAL_ANNOUNCEMENTS": "General Announcements", + "GENERAL_ANNOUNCEMENTS_HEADER": "Announcements", "GENERAL_DESCRIPTION": "On the General tab, you will find useful information to facilitate your hospital visit.", - "GOTOSUMMARY": "Go To Summary Page", - "GOTO_ROOM": "Appointment Room:", + "GO_TO_ROOM": "Appointment Room:", + "GO_TO_SUMMARY": "Go To Summary Page", "HEADER_MESSAGE_HOME": "Home", "HIDE": "Hide", - "HOME": "Home", "HOME_DESCRIPTION": "On the Home tab, you will be provided with news about your medical status, documents, hospital announcements and appointments.", - "HOSPITALPARKING": "Parking", + "HOSPITAL_PARKING": "Parking", "INDIVIDUAL_ANNOUNCEMENT_HEADER": "Announcement", "INVALID_OLD_PASSWORD": "Incorrect old password", "INVALID_PASSWORD": "Invalid password.", "INVESTIGATOR": "Investigator", "LABELS": "Labels", - "LAB_BYDATE": "By Date", - "LAB_BYTYPE": "By Type", + "LAB_BY_DATE": "By Date", + "LAB_BY_TYPE": "By Type", "LAB_DELAY": "Delay Settings", - "LAB_DELAY_INFO_HEADER": "Changing lab results delay settings", - "LAB_DELAY_INFO_TEXT": "The delay parameters for lab results can be changed upon request. You can find a printable “Access to lab results” form in the Opal General tab or by making a request at the hospital.", "LAB_DELAY_DEFAULTS_HEADER": "The default delay parameters set by the institution are:", "LAB_DELAY_DEFAULTS_INTERPRETABLE": "Interpretable result ({ yesno, select, yes{yes} no{no} other{?} }) :", + "LAB_DELAY_INFO_HEADER": "Changing lab results delay settings", + "LAB_DELAY_INFO_TEXT": "The delay parameters for lab results can be changed upon request. You can find a printable “Access to lab results” form in the Opal General tab or by making a request at the hospital.", "LAB_DELAY_INTERPRETABLE": "Interpretable: You will be able to interpret these results yourself after receiving instruction from your healthcare team.", - "LAB_DELAY_NONINTERPRETABLE": "Non-interpretable: These results are generally subject to interpretation by a healthcare professional and cannot be interpreted by yourself.", + "LAB_DELAY_NON_INTERPRETABLE": "Non-interpretable: These results are generally subject to interpretation by a healthcare professional and cannot be interpreted by yourself.", "LAB_DISCLAIMER": "Not for clinical use", - "LAB_INFO_FLAGS": "Results outside the normal range are accompanied by (L), (H) or (C), where (L) indicates a low value, (H) indicates a high value and (C) indicates a critical value.", - "LAB_INFO_NORMAL_HEADER": "Normal", - "LAB_INFO_NORMAL_TEXT": "Your blood test results are within the normal range.", "LAB_INFO_CRITICAL_HEADER": "Critical (C)", "LAB_INFO_CRITICAL_TEXT": "Your blood test results are significantly outside of the normal range. The laboratory will usually communicate these results to your treating team in an expedited manner. Your treating team will evaluate them and will notify you if any action needs to be taken with regards to these abnormal blood test results.", + "LAB_INFO_FLAGS": "Results outside the normal range are accompanied by (L), (H) or (C), where (L) indicates a low value, (H) indicates a high value and (C) indicates a critical value.", "LAB_INFO_HIGH_LOW_HEADER": "High (H) or low (L)", "LAB_INFO_HIGH_LOW_TEXT": "Your blood test results are outside the normal range. Your treating team will evaluate them and order further studies or treatments if necessary.", + "LAB_INFO_NORMAL_HEADER": "Normal", + "LAB_INFO_NORMAL_TEXT": "Your blood test results are within the normal range.", "LAB_LEARN_ABOUT": "Learn About", - "LAB_MAX_NORM": "Max Normal Value", - "LAB_MIN_NORM": "Min Normal Value", "LAB_NAME": "Lab Test Name", "LAB_NORM": "Normal Range", "LAB_RECENT_RESULT": "Recent Result", - "LAB_RESULT_INTERPRETABLE": "Result interpretable:", - "LAB_RESULT_DELAY": "Delay:", "LAB_RESULTS": "Lab Results", "LAB_RESULTS_NONE": "No lab results", + "LAB_RESULT_DELAY": "Delay:", + "LAB_RESULT_INTERPRETABLE": "Result interpretable:", "LAB_TEST_INFO": "Test Information", "LAB_YOUR_RESULT": "Your Result", "LANGUAGE": "Language", "LARGE": "Large", - "LEAVEMESSAGE": "Leave us a message", "LEAVING_APP": "Note that you're leaving the app and are no longer relying on Opal to protect your document data.", - "LEAVING_APP4": "Note that you are leaving the app to open an external web browser.", "LEAVING_APP_LABS": "Please note that you are leaving the app to open an external website. This site is offered for informational purposes only; don't provide any of your personal data.", - "LOADING": "Loading", + "LOADING_APPOINTMENTS": "Loading your appointments...", + "LOADING_DATA": "Loading data", + "LOADING_DOCUMENT": "Loading your document...", "LOADING_ERROR": "An error occurred while loading your data. Please try again later.", - "LOADINGAPPOINTMENTS": "Loading your appointments...", - "LOADINGDATA": "Retrieving your account", - "LOADINGDOCUMENT": "Loading your document...", - "LOADINGLABRESULTS": "Loading your lab results...", - "LOADINGMATERIAL": "Loading your reference material...", - "LOADINGQUESTIONNAIRE": "Loading your questionnaire...", + "LOADING_LAB_RESULTS": "Loading your lab results...", + "LOADING_MATERIAL": "Loading your reference material...", + "LOADING_QUESTIONNAIRE": "Loading your questionnaire...", "MARK_ALL_READ": "Mark all as read", "MEDIUM": "Medium", "MESSAGE": "Message", - "MINUTES": "Minutes", "MORE_EDU_MATERIAL": "Additional Reference Material", - "MYCHART_DESCRIPTION": "The Chart tab contains all the information regarding your electronic health data.", "NAME": "Name", "NO": "No", - "NOAPPOINTMENTS": "No appointments", - "NOAPPOINTMENTINFO": "Information concerning this appointment is not available at this time.", - "NODIAGNOSIS": "No diagnoses available", - "NOGENERALANNOUNCEMENTS": "You have no general announcements", - "NONOTIFICATIONS": "You have no new notifications", - "NOPARKINGSITES": "No parking and transportation information available", - "NOPATIENTDOCUMENTSAVAILABLE": "You have no patient documents available", "NORMAL_RANGE": "Normal Range", - "NOTEAMMESSAGES": "You have no treatment team messages", - "NOTIFICATION_OPEN_ERROR": "An error occurred while loading this notification.", "NOTIFICATIONS": "Notifications", + "NOTIFICATION_OPEN_ERROR": "An error occurred while loading this notification.", + "NO_APPOINTMENTS": "No appointments", + "NO_APPOINTMENT_INFO": "Information concerning this appointment is not available at this time.", + "NO_DIAGNOSIS": "No diagnoses available", + "NO_GENERAL_ANNOUNCEMENTS": "You have no general announcements", + "NO_NOTIFICATIONS": "You have no new notifications", + "NO_PARKING_SITES": "No parking and transportation information available", + "NO_PATIENT_DOCUMENTS_AVAILABLE": "You have no patient documents available", + "NO_TEAM_MESSAGES": "You have no treatment team messages", "NO_UPCOMING_APPOINTMENTS": "You have no upcoming appointments.", - "OF": "of", - "ONCOLOGIST": "Oncologist", - "OPALPROBLEMSUBJECT": "Found a Bug/Problem using Opal", - "OPAL_WEBSITE": "Opal's Website", - "OPENEXTERNALVIEWER": "Open in an external viewer", + "OPEN_EXTERNAL_VIEWER": "Open in an external viewer", "OPEN_LINK": "Open link", "OPEN_PDF": "Open document", "OPEN_PDF_ERROR": "Error opening PDF", "OTHER": "Other", - "OUTOFTRIES": "Too many failed attempts - Please try again later.", "PAST": "Past", "PERSONAL": "Personal", - "PHONENUMBER": "Phone Number", + "PHONE_NUMBER": "Phone Number", "PLOT_VIEW": "Plot View", "PREFERENCES": "Preferences", - "PRIMARYDOCTOR": "Primary Oncologist", "QUEBEC_MEDICAL_SCHEDULER": "Québec Medical Appointment Scheduler", "QUESTION": "Question", "QUESTIONNAIRES": "Questionnaires", + "QUESTIONNAIRE_ANSWERED_BY": "Answered By:", "QUESTIONNAIRE_BEGIN_INSTRUCTION": "Tap \"Begin\" or swipe to the left to start the questionnaire.", "QUESTIONNAIRE_CHECKBOX_CHOSEN": "You have selected", "QUESTIONNAIRE_CHECKBOX_OPTION": "option(s)", @@ -202,38 +172,50 @@ "QUESTIONNAIRE_DATE_ADDED": "Date Added:", "QUESTIONNAIRE_DATE_ANSWERED": "Date Answered:", "QUESTIONNAIRE_DATE_LAST_UPDATED": "Last Updated:", - "QUESTIONNAIRE_ANSWERED_BY": "Answered By:", "QUESTIONNAIRE_DESCRIPTION": "Description: ", - "QUESTIONNAIRE_END": "End", "QUESTIONNAIRE_GO_BACK_TO_LIST": "Go back to questionnaire list", + "QUESTIONNAIRE_GO_TO_QUESTION": "Go to Question", "QUESTIONNAIRE_HOME": "Home", "QUESTIONNAIRE_INSTRUCTION": "Instruction: ", "QUESTIONNAIRE_INSTRUCTIONS": "Answer the questions in red. Questions in green can be edited. Once all questions are answered, you can submit.", - "QUESTIONNAIRE_INSTRUCTIONS4": "Go to Question", "QUESTIONNAIRE_IN_PROGRESS": "In Progress", "QUESTIONNAIRE_IN_PROGRESS_BY": "In Progress By:", "QUESTIONNAIRE_LOCKING_ERROR": "This questionnaire can't be answered because another user with access to this patient's file has already started it. Once this user has completed the questionnaire, you'll be able to view the answers on the Completed tab.", "QUESTIONNAIRE_NEW": "New", "QUESTIONNAIRE_NONE_COMPLETED": "No completed questionnaires.", "QUESTIONNAIRE_NONE_NEW": "No new questionnaires.", - "QUESTIONNAIRE_NONE_OF_THE_ABOVE": "None of the above", "QUESTIONNAIRE_NONE_PROGRESS": "No questionnaires in progress.", "QUESTIONNAIRE_NOT_ALLOWED_TO_ANSWER": "Your level of access to this patient's data does not allow answering questionnaires on their behalf. Once the questionnaire has been completed by another user, you'll be able to view the answers on the Completed tab.", "QUESTIONNAIRE_RESUME_INSTRUCTION": "Tap \"Resume\" or swipe to the left to resume the questionnaire.", "QUESTIONNAIRE_SECTION_INSTRUCTION": "Section instruction:", "QUESTIONNAIRE_SELECT": "Select", - "QUESTIONNAIRE_SUBMIT": "Are you sure you want to submit the questionnaire? You cannot change your answers after submitting.", - "QUESTIONNAIRE_SUBMIT_AS_SELF": "Submitting answers as: {userName}", "QUESTIONNAIRE_SUBMIT_AS_OTHER": "Submitting answers as: {userName} (on behalf of {patientName})", + "QUESTIONNAIRE_SUBMIT_AS_SELF": "Submitting answers as: {userName}", "QUESTIONNAIRE_SUBMIT_INSTRUCTION": "Please click the submit button to complete the questionnaire", "QUESTIONNAIRE_THANKS": "Thank you for completing this questionnaire", - "RATEIT": "Rate It", - "RATETHISAPP": "Rate This App", - "RATETHISMATERIAL": "Rate this reference material", + "RATE_IT": "Rate It", + "RATE_THIS_MATERIAL": "Rate this reference material", "REDIRECT_TO_QUESTIONNAIRE": "Redirecting to questionnaire...", - "REENTER_EMAIL": "Re-enter new email", "REFERENCE_MATERIAL_NONE": "You have no reference material", "REFRESH_ERROR": "An error occurred while attempting to refresh your data.", + "RELATIONSHIPS": "My relationships", + "RELATIONSHIPS_CAREGIVERS": "My caregivers", + "RELATIONSHIPS_CAREGIVERS_DESCRIPTION": "List of caregivers who have access to your data in Opal.", + "RELATIONSHIPS_CAREGIVERS_ERROR": "An error occurred while retrieving caregivers.", + "RELATIONSHIPS_CAREGIVERS_NONE": "No caregivers are linked to your account.", + "RELATIONSHIPS_ERROR": "An error occurred while retrieving your data.", + "RELATIONSHIPS_PATIENTS": "My patients", + "RELATIONSHIPS_PATIENTS_ACCESS": "Access", + "RELATIONSHIPS_PATIENTS_AVAILABLE": "Available patient charts", + "RELATIONSHIPS_PATIENTS_DESCRIPTION": "List of patients whose data you can access in Opal.", + "RELATIONSHIPS_PATIENTS_NONE": "No patients are linked to your account.", + "RELATIONSHIPS_PATIENTS_NOT_AVAILABLE": "No available profile", + "RELATIONSHIPS_PATIENTS_STATUS_CON": "Confirmed", + "RELATIONSHIPS_PATIENTS_STATUS_DEN": "Denied", + "RELATIONSHIPS_PATIENTS_STATUS_EXP": "Expired", + "RELATIONSHIPS_PATIENTS_STATUS_PEN": "Pending", + "RELATIONSHIPS_PATIENTS_STATUS_REV": "Revoked", + "RELATIONSHIP_TYPES_ERROR": "An error occurred while retrieving relationship types.", "RESEARCH": "Research", "RESEARCH_DESCRIPTION": "The Research section of Opal contains information about the research studies that you are participating in.", "RESEARCH_FEEDBACK": "Research Feedback", @@ -245,39 +227,19 @@ "RESULT": "Result", "RESULTS": "Results", "RESUME": "Resume", - "RELATIONSHIPS": "My relationships", - "RELATIONSHIPS_CAREGIVERS": "My caregivers", - "RELATIONSHIPS_CAREGIVERS_NONE": "No caregivers are linked to your account.", - "RELATIONSHIPS_CAREGIVERS_ERROR": "An error occurred while retrieving caregivers.", - "RELATIONSHIPS_CAREGIVERS_DESCRIPTION": "List of caregivers who have access to your data in Opal.", - "RELATIONSHIPS_PATIENTS_ACCESS": "Access", - "RELATIONSHIPS_PATIENTS_STATUS_PEN": "Pending", - "RELATIONSHIPS_PATIENTS_STATUS_CON": "Confirmed", - "RELATIONSHIPS_PATIENTS_STATUS_DEN": "Denied", - "RELATIONSHIPS_PATIENTS_STATUS_EXP": "Expired", - "RELATIONSHIPS_PATIENTS_STATUS_REV": "Revoked", - "RELATIONSHIPS_PATIENTS_AVAILABLE": "Available patient charts", - "RELATIONSHIPS_PATIENTS_NOT_AVAILABLE": "No available profile", - "RELATIONSHIPS_PATIENTS": "My patients", - "RELATIONSHIPS_PATIENTS_NONE": "No patients are linked to your account.", - "RELATIONSHIPS_PATIENTS_DESCRIPTION": "List of patients whose data you can access in Opal.", - "RELATIONSHIP_TYPES_ERROR": "An error occurred while retrieving relationship types.", - "RELATIONSHIPS_ERROR": "An error occurred while retrieving your data.", "SAVING_QUESTIONNAIRE_ANSWER": "Saving answers...", - "SCREENSHOTTAKEN": "Screenshot taken. If it was not you, then exit the app.", "SEARCH": "Search", "SEARCH_EDU": "Search by title", "SECTION": "Section", - "SECURITYQUESTION": "Security Question", "SECURITY_QUESTIONS": "Security Questions", "SECURITY_QUESTION_ANSWER_UPDATE_SUCCESS": "Security questions and answers updated. Signing out...", "SECURITY_QUESTION_LENGTH_REQUIREMENT_1": "Your security answer should be at least", "SECURITY_QUESTION_LENGTH_REQUIREMENT_2": "characters long", "SECURITY_QUESTION_LOGOUT_WARNING": "If you make any changes, you will be logged out of Opal and you will need to log in again.", - "SELECTFONTSIZE": "Select font size", - "SELECTLANGUAGE": "Select language", - "SELECT_3_SECURITY_QUESTIONS": "You may change one or more of your security questions or answers here.", + "SECURITY_QUESTIONS_INSTRUCTIONS": "You may change one or more of your security questions or answers here.", "SELECT_DROPDOWN_QUESTION": "Select a new security question", + "SELECT_FONT_SIZE": "Select font size", + "SELECT_LANGUAGE": "Select language", "SEND": "Send", "SEND_ANOTHER": "Send another", "SENT_TO": "Sent to", @@ -286,36 +248,34 @@ "SERVER_ERROR_SUBMIT_QUESTIONNAIRE": "Server problem: the questionnaire cannot be submitted. Please try again later.", "SHARE": "Share", "SHOW": "Show", - "SIGNOUT": "Sign out", + "SIGN_OUT": "Sign out", "SMALL": "Small", - "SMARTDEVICES": "Smart Devices", - "SMARTDEVICES_BACK": "Go back to Smart Devices", - "SMARTDEVICES_LIST_INFO": "This page shows the current supported devices. Select a device from the list to synchronize data from that device.", - "SMARTDEVICES_BLUETOOTH_DISABLED": "Bluetooth is disabled", - "SMARTDEVICES_BLUETOOTH_PROMPT": "Please enable it and then press the refresh button below.", - "SMARTDEVICES_BLUETOOTH_REFRESH": "Refresh", - "SMARTDEVICES_BLUETOOTH_UNAVAILABLE": "Bluetooth is only supported on a mobile device", - "SMARTDEVICES_CONNECTING": "Connecting to device...", - "SMARTDEVICES_ERROR_BACKEND": "Error sending data to hospital", - "SMARTDEVICES_ERROR_NO_DATA": "No data retrieved from device, please redo the measurement.", - "SMARTDEVICES_ETEKCITY": "Etekcity Smart Scale (ESF24)", - "SMARTDEVICES_INFO_SUBMITTED": "If you have any questions or concerns, please let your clinical team know.", - "SMARTDEVICES_MULTIPLE": "Multiple devices detected. Please specify the device to read from:", - "SMARTDEVICES_SCALE_INSTRUCTIONS": "Please step on the scale and weigh yourself. Once your weight has been measured, tap the Read Weight button below.", - "SMARTDEVICES_SCALE_ERROR_NO_DEVICE": "No device found. Please redo the measurement and try again.", - "SMARTDEVICES_SCALE_READ": "Read Weight", - "SMARTDEVICES_SCALE_SUBMIT": "Submit Weight to Hospital", - "SMARTDEVICES_SCALE_SUBMITTED": "Thank you for submitting your weight.", - "SMARTDEVICES_SELECT": "Select", - "SMARTDEVICES_VITAL_SIGNS": "Vital signs", - "SMARTDEVICES_VITALTRACER": "VitalTracer Watch", - "SMARTDEVICES_VITALTRACER_ERROR_NO_DEVICE": "No device found. Please activate the watch's screen and try again.", - "SMARTDEVICES_VITALTRACER_READ": "Read Vital Signs", - "SMARTDEVICES_VITALTRACER_SUBMITTED": "Thank you for submitting your vital signs.", - "SMARTDEVICES_WEIGHT": "Weight", - "SMARTDEVICES_XIAOMI_SCALE": "Xiaomi Mi Scale", - "STAGE": "Step", - "STAGEOF": "Step {{index}} of {{total}}", + "SMART_DEVICES": "Smart Devices", + "SMART_DEVICES_BACK": "Go back to Smart Devices", + "SMART_DEVICES_BLUETOOTH_DISABLED": "Bluetooth is disabled", + "SMART_DEVICES_BLUETOOTH_PROMPT": "Please enable it and then press the refresh button below.", + "SMART_DEVICES_BLUETOOTH_REFRESH": "Refresh", + "SMART_DEVICES_BLUETOOTH_UNAVAILABLE": "Bluetooth is only supported on a mobile device", + "SMART_DEVICES_CONNECTING": "Connecting to device...", + "SMART_DEVICES_ERROR_BACKEND": "Error sending data to hospital", + "SMART_DEVICES_ERROR_NO_DATA": "No data retrieved from device, please redo the measurement.", + "SMART_DEVICES_ETEKCITY": "Etekcity Smart Scale (ESF24)", + "SMART_DEVICES_INFO_SUBMITTED": "If you have any questions or concerns, please let your clinical team know.", + "SMART_DEVICES_LIST_INFO": "This page shows the current supported devices. Select a device from the list to synchronize data from that device.", + "SMART_DEVICES_MULTIPLE": "Multiple devices detected. Please specify the device to read from:", + "SMART_DEVICES_SCALE_ERROR_NO_DEVICE": "No device found. Please redo the measurement and try again.", + "SMART_DEVICES_SCALE_INSTRUCTIONS": "Please step on the scale and weigh yourself. Once your weight has been measured, tap the Read Weight button below.", + "SMART_DEVICES_SCALE_READ": "Read Weight", + "SMART_DEVICES_SCALE_SUBMIT": "Submit Weight to Hospital", + "SMART_DEVICES_SCALE_SUBMITTED": "Thank you for submitting your weight.", + "SMART_DEVICES_SELECT": "Select", + "SMART_DEVICES_VITALTRACER": "VitalTracer Watch", + "SMART_DEVICES_VITALTRACER_ERROR_NO_DEVICE": "No device found. Please activate the watch's screen and try again.", + "SMART_DEVICES_VITALTRACER_READ": "Read Vital Signs", + "SMART_DEVICES_VITALTRACER_SUBMITTED": "Thank you for submitting your vital signs.", + "SMART_DEVICES_VITAL_SIGNS": "Vital signs", + "SMART_DEVICES_WEIGHT": "Weight", + "SMART_DEVICES_XIAOMI_SCALE": "Xiaomi Mi Scale", "STUDIES": "Studies", "STUDIES_DESCRIPTION": "The Studies section contains information about research studies that you have been invited to participate in.", "STUDIES_NONE": "You have no studies", @@ -324,34 +284,28 @@ "STUDY_STATUS_DECLINED": "You declined this study.", "STUDY_STATUS_INVITED": "You are invited to this study.", "SUBMIT": "Submit", - "SUBMIT_AND_LOGOUT": "Submit and Logout", - "SUBMITANSWERS": "Submit Answers", - "SUBMITCONSENT": "Submit Consent Form", "SUBMITTING_QUESTIONNAIRE": "Submitting questionnaire...", + "SUBMIT_AND_LOGOUT": "Submit and Logout", + "SUBMIT_ANSWERS": "Submit Answers", + "SUBMIT_CONSENT": "Submit Consent Form", "SUMMARY": "Summary Page", - "TABLEOFCONTENTS": "Table of Contents", + "TABLE_OF_CONTENTS": "Table of Contents", "TABLE_VIEW": "Table View", - "TAPTOZOOM": "Tap screen to zoom", - "TEAMMESSAGES": "Messages", - "THANKYOUFORFEEDBACK": "Thank you for your feedback", + "TAP_TO_ZOOM": "Tap screen to zoom", + "TEAM_MESSAGES": "Messages", + "THANK_YOU_FOR_FEEDBACK": "Thank you for your feedback", "TITLE": "Info", "TO": "to", "TODAY": "Today", "TOO_MANY_REQUESTS_CONSENT": "Too many unsuccessful password attempts. Please try again later.", - "TREATINGTEAMNOTIFICATIONS": "Treating Team Messages", - "TREATMENTSESSION": "Treatment Sessions", - "Tumor markers": "Tumor Markers", + "TREATING_TEAM_NOTIFICATIONS": "Treating Team Messages", "UNABLE_TO_SHARE_DOCUMENT": "Unable to share document", - "UNATTENDED": "Do not leave your phone unattended.", "UPCOMING_APPOINTMENTS": "Upcoming Appointments", "UPDATE": "Update", - "UPDATED_EMAIL": "Email successfully updated", - "UPDATEPASSWORDBUTTON": "Update Password", - "UPDATEPASSWORDTITLE": "Update Password", - "USER_DISABLED": "Your account has been blocked, please contact the hospital for further assistance.", + "UPDATE_PASSWORD_BUTTON": "Update Password", + "UPDATE_PASSWORD_TITLE": "Update Password", "WAITING_ROOM": "Waiting Room:", "WARNING": "Warning", "YES": "Yes", - "YOU": "you", - "VIDEO": "Video" + "YOU": "you" } diff --git a/src/Languages/appTranslationTablesViews/all-views/fr.json b/src/Languages/appTranslationTablesViews/all-views/fr.json index ab53427a0..c9e800600 100644 --- a/src/Languages/appTranslationTablesViews/all-views/fr.json +++ b/src/Languages/appTranslationTablesViews/all-views/fr.json @@ -1,358 +1,311 @@ { - "ADDED": "Reçu à", - "ALIAS": "Surnom", - "ANSWER": "Réponse", - "ANSWER2": "Réponse", - "APPOINTMENT": "Rendez-vous", - "APPOINTMENTS": "Rendez-vous", - "APPOINTMENT_ABOUT": "À propos de ce rendez-vous", - "APPOINTMENT_CANCELLED": "Ce rendez-vous a été annulé.", - "APPOINTMENT_OPEN_ERROR": "Une erreur s'est produite en ouvrant ce rendez-vous.", - "APPOINTMENT_ROOM": "Localisation du rendez-vous", - "AVAILABLEDEVICES": "Disponible seulement sur un appareil mobile.", - "BEGIN": "Débuter", - "CANCERCENTER": "Centre du cancer des Cèdres", - "CARNET_SANTE": "Carnet santé Québec", - "CHARACTERS_LEFT": "caractères restants", - "CHART_ONE_MONTH_SELECTOR": "1m", - "CHART_THREE_MONTHS_SELECTOR": "3m", - "CHART_SIX_MONTHS_SELECTOR": "6m", - "CHART_YEAR_SELECTOR": "1a", - "CHART_ALL_RANGE_SELECTOR": "Tout", - "CHART_NO_PLOT_AVAILABLE": "Aucun graphique disponible", - "CHART_NON_NUMERIC_VALUES": "Ces résultats ne peuvent pas être représentés car au moins l'un d'entre eux n'est pas un nombre", - "CHECKIN": "Enregistrement", - "CHECKIN_ALL_TODAY": "Enregistrer", - "CHECKIN_ERROR_GEOLOCATION": "Erreur de géolocalisation; vérifiez les paramètres d'autorisation de l'appli ou de l'appareil.", - "CHECKIN_ERROR_ONE": "Impossible de s'enregistrer pour ce rendez-vous. Veuillez réessayer ou vous présenter à la réception.", - "CHECKIN_ERROR_MULTIPLE": "Impossible de s'enregistrer pour votre/vos rendez-vous. Veuillez réessayer ou vous présenter à la réception.", - "CHECKIN_MESSAGE_AFTER": "Vous êtes enregistré(e) pour votre rendez-vous.", - "CHECKIN_MESSAGE_AFTER_PLURAL": "Vous êtes enregistré(e) pour vos rendez-vous.", - "CHECKIN_MESSAGE_BEFORE": "Enregistrez-vous pour votre rendez-vous.", - "CHECKIN_MESSAGE_BEFORE_PLURAL": "Enregistrez-vous pour vos rendez-vous.", - "CHECKIN_NONE": "Aucun rendez-vous disponible pour enregistrement aujourd'hui.", - "CHECKIN_NOT_ALLOWED": "L'enregistrement sera disponible dès l'arrivée à l'hôpital.", - "CHECKIN_PATIENT_HEADER_SELF": "Vos rendez-vous", - "CHECKIN_PATIENT_HEADER_NON_SELF": "Rendez-vous de {name}", - "CLINICAL_REPORTS": "Rapports cliniques", - "CLINICAL_QUESTIONNAIRES": "Questionnaires cliniques", - "COLLECTION_DATE": "Date de Collecte", - "CONFIRM_DOWNLOAD": "Le document doit temporairement être téléchargé sur votre appareil avant de continuer.", - "CONSENT": "Accepter", - "CONSENT_FORMS": "Formulaires de consentement", - "CONSENT_FORM_ACKNOWLEDGEMENT": "Je consens à participer à ce projet de recherche selon les conditions mentionnées dans le formulaire de consentement.", - "CONSENT_FORM_BEGIN_INSTRUCTION": "Cliquez sur \"Débuter\" ou glissez vers la gauche pour répondre au formulaire de consentement.", - "CONSENT_FORM_GO_BACK_TO_LIST": "Retourner à la liste", - "CONSENT_FORMS_NONE_COMPLETED": "Aucun formulaire rempli", - "CONSENT_FORMS_NONE_PROGRESS": "Aucun formulaire en cours", - "CONSENT_FORMS_NONE_NEW": "Aucun nouveau formulaire", - "CONSENT_FORM_PASSWORD_INSTRUCTION": "Veuillez entrer votre mot de passe pour confirmer votre consentement.", - "CONSENT_FORM_RESUME_INSTRUCTION": "Cliquez sur \"Reprendre\" ou glissez vers la gauche pour continuer le formulaire de consentement.", - "CONSENT_FORM_SUBMIT_INSTRUCTION": "Pour soummettre le formulaire de consentement, veuillez répondre à la question ci-dessous et appuyer sur le bouton \"Soumettre le formulaire\".", - "CONSENT_FORM_THANKS": "Merci d'avoir complété ce formulaire", - "CONTACTHOSPITAL": "Contactez l'hôpital pour assistance", - "CONTINUE": "Continuer", - "DATE": "Date", - "DATE_END": "Date de fin", - "DATE_START": "Date de début", - "DAYS": "{ days } {days, plural, =0{jours} one{jour} other{jours}}", - "DEAR": "Chère/Cher", - "DECLINE": "Refuser", - "DETECTING_LOCATION": "Détection de votre emplacement...", - "DIAGNOSIS": "Diagnostic", - "DOCUMENT": "Document", - "DOC_ABOUT": "À propos de ce document", - "DOC_DATE_CREATED": "Créé le:", - "DOC_DATE_UPDATED": "Mis à jour le:", - "DOC_INFO": "Informations sur ce document", - "DOC_SIGNEDBY": "Signé par:", - "DONE": "Finir", - "EDUCATION_DESCRIPTION": "Cette section contient des informations spécifiques à votre traitement et à votre diagnostic en général.", - "EDU_OPEN_ERROR": "Erreur lors de l'ouverture du document de référence", - "EMAIL": "Courriel", - "EMAIL_TAKEN": "Cet adresse courriel a déjà été pris", - "ENTERANANSWER": "Entrez une réponse", - "ENTERANSWERPLACEHOLDER": "Entrez votre réponse...", - "ENTEREMAIL": "Entrez votre adresse courriel:", - "ENTEREMAILADDRESS": "Entrez votre nouvelle adresse courriel:", - "ENTERNEWPASSWORD": "Entrez votre nouveau mot de passe :", - "ENTERNEWTELEPHONE": "Entrez votre numéro de téléphone:", - "ENTEROLDPASSWORD": "Entrez votre mot de passe actuel :", - "ENTEROLDPASSWORDPLACEHOLDER": "Mot de passe actuel", - "ENTERPASSWORD": "Entrez votre mot de passe:", - "ENTERYOURALIAS": "Entrez votre nouveau pseudonyme", - "ERRORANSWERNOTMATCH": "Votre réponse ne correspond pas à celle dans nos dossiers.", - "ERROROBTAININGDOCUMENT": "Erreur lors de l'obtention du document à partir du serveur", - "ERROR_GETTING_EDU_MATERIAL": "Erreur. Le contenu de ce document de référence n'a pas pu être téléchargé du serveur.", - "ERROR_IN_VIDEO_URL_OR_FORMAT": "Erreur dans l'URL ou le format de la vidéo", - "EXIT_APP": "Voulez-vous vraiment quitter Opal?", - "Electrolytes": "Électrolytes", - "FEEDBACK": "Commentaires", - "FEEDBACK_ERROR": "Une erreur s'est produite lors de l'envoi de vos commentaires. Veuillez réessayer plus tard.", - "FEEDBACK_MESSAGE": "Votre commentaire est important pour nous. S'il vous plaît, prenez le temps de nous faire savoir ce que vous pensez d'Opal. Chaque commentaire est apprécié.", - "FEEDBACK_RECEIVED": "Vos commentaires ont été reçus.", - "FEEDBACK_SUBMIT_AS": "Sera envoyé au nom de :", - "FIELD_UPDATED": "Le champ a été mis à jour", - "FIND_DOCTOR": "Accès à un médecin de famille", - "FONTSIZE": "Taille de la police", - "FOR": "Pour", - "FUTURE": "Rendez-vous à venir", - "GENERAL": "Général", - "GENERALANNOUNCEMENTS": "Annonces générales", - "GENERALANNOUNCEMENTSHEADER": "Annonces", - "GENERAL_DESCRIPTION": "Dans l'onglet Général, vous trouverez des renseignements utiles pour faciliter votre visite à l'hôpital.", - "GOTOSUMMARY": "Aller au Résumé", - "GOTO_ROOM": "Salle de rendez-vous :", - "HEADER_MESSAGE_HOME": "Accueil", - "HIDE": "Cacher", - "HOME": "Accueil", - "HOME_DESCRIPTION": "Dans l'onglet Accueil, vous pourrez accéder aux nouvelles concernant votre statut médical, vos documents, les annonces de l'hôpital et vos rendez-vous.", - "HOSPITALPARKING": "Stationnement", - "INDIVIDUAL_ANNOUNCEMENT_HEADER": "Annonce", - "INVALID_OLD_PASSWORD": "Mot de passe actuel invalide", - "INVALID_PASSWORD": "Mot de passe invalide.", - "INVESTIGATOR": "Chercheur(euse)", - "LABELS": "Étiquettes", - "LAB_BYDATE": "Date", - "LAB_BYTYPE": "Type", - "LAB_DELAY": "Paramètres de délai", - "LAB_DELAY_INFO_HEADER": "Modification des paramètres de délai des résultats de laboratoire", - "LAB_DELAY_INFO_TEXT": "Les paramètres de délai des résultats de laboratoire peuvent être modifiés sur demande. Vous pouvez trouver un formulaire imprimable « d'Accès aux résultats de laboratoire » dans le menu Bibliothèque d'Opal ou en faisant la demande à l'hôpital.", - "LAB_DELAY_DEFAULTS_HEADER": "Les délais par défaut fixés par l'établissement sont :", - "LAB_DELAY_DEFAULTS_INTERPRETABLE": "Résultat interprétable ({ yesno, select, yes{oui} no{non} other{?} }) :", - "LAB_DELAY_INTERPRETABLE": "Après avoir reçu l'enseignement de la part de votre équipe soignante vous serez en mesure d'interpréter ces résultats par vous-même.", - "LAB_DELAY_NONINTERPRETABLE": "Non-interprétable : Ces résultats portent une part d'interprétation d'un professionnel de la santé et ne peuvent donc pas être interprétés par vous-même.", - "LAB_DISCLAIMER": "Pas pour usage clinique", - "LAB_INFO_FLAGS": "Les résultats en dehors de la plage de valeurs normales sont accompagnés d'un (L), d'un (H) ou d'un (C), où (L) indique une valeur faible, (H) indique une valeur élevée et (C) indique une valeur critique.", - "LAB_INFO_NORMAL_HEADER": "Valeurs normales", - "LAB_INFO_NORMAL_TEXT": "Les résultats de vos analyses de sang se situent dans la plage normale.", - "LAB_INFO_CRITICAL_HEADER": "Valeurs critiques (C)", - "LAB_INFO_CRITICAL_TEXT": "Les résultats de vos tests sanguins sont considérablement en dehors de la plage normale. Le laboratoire communiquera généralement ces résultats à votre équipe soignante de manière accélérée. Votre équipe soignante les évaluera, et vous informera si des mesures doivent être prises en ce qui concerne vos résultats de tests sanguins anormaux.", - "LAB_INFO_HIGH_LOW_HEADER": "Valeurs faibles (L) ou élevées (H)", - "LAB_INFO_HIGH_LOW_TEXT": "Les résultats de vos analyses de sang sont en dehors de la plage normale. Votre équipe de traitement les évaluera et ordonnera d'autres études ou traitements si nécessaire.", - "LAB_LEARN_ABOUT": "En savoir plus sur:", - "LAB_MAX_NORM": "Valeur max. normale", - "LAB_MIN_NORM": "Valeur min. normale", - "LAB_NAME": "Nom de l'analyse", - "LAB_NORM": "Valeurs normales", - "LAB_RECENT_RESULT": "Résultat récent", - "LAB_RESULT_INTERPRETABLE": "Résultat interprétable :", - "LAB_RESULT_DELAY": "Délai :", - "LAB_RESULTS": "Résultats de laboratoire", - "LAB_RESULTS_NONE": "Pas de résultats de laboratoire disponibles", - "LAB_TEST_INFO": "Détails de l'analyse", - "LAB_YOUR_RESULT": "Votre résultat", - "LANGUAGE": "Langue", - "LARGE": "Grand", - "LEAVEMESSAGE": "Laissez-nous un message", - "LEAVING_APP": "Notez que vous quittez l'application et ne comptez plus sur Opal pour protéger votre document.", - "LEAVING_APP4": "Notez que vous quittez l'application pour ouvrir un navigateur externe.", - "LEAVING_APP_LABS": "Veuillez noter que vous quittez l'application pour ouvrir un site Web externe. Ce site est offert à titre informatif seulement; ne fournissez aucune de vos données personnelles.", - "LOADING": "Chargement", - "LOADING_ERROR": "Une erreur est survenue lors du chargement de vos données. Veuillez réessayer plus tard.", - "LOADINGAPPOINTMENTS": "Chargement de vos rendez-vous...", - "LOADINGDATA": "Chargement des données", - "LOADINGDOCUMENT": "Chargement de votre document...", - "LOADINGLABRESULTS": "Chargement de vos résultats sanguins...", - "LOADINGMATERIAL": "Chargement de votre document de référence...", - "LOADINGQUESTIONNAIRE": "Chargement de votre questionnaire...", - "MARK_ALL_READ": "Tout marquer comme lu", - "MEDIUM": "Moyen", - "MESSAGE": "Message", - "MINUTES": "Minutes", - "MORE_EDU_MATERIAL": "Document de référence supplémentaire", - "MYCHART_DESCRIPTION": "L'onglet Dossier contient toutes les données éléctroniques concernant votre santé.", - "NAME": "Nom", - "NO": "Non", - "NOAPPOINTMENTS": "Aucun rendez-vous", - "NOAPPOINTMENTINFO": "Aucune information concernant ce rendez-vous n'est disponible pour le moment.", - "NODIAGNOSIS": "Pas de diagnostic", - "NOGENERALANNOUNCEMENTS": "Pas d’annonces générales", - "NONOTIFICATIONS": "Vous n'avez pas de nouvelles notifications", - "NOPARKINGSITES": "Aucune information disponible sur le stationnement et le transport", - "NOPATIENTDOCUMENTSAVAILABLE": "Vous n'avez aucun document de patient disponible", - "NORMAL_RANGE": "Plage normale", - "NOTEAMMESSAGES": "Pas de messages de l'équipe de traitement", - "NOTIFICATION_OPEN_ERROR": "Une erreur s'est produite lors du chargement de cette notification.", - "NOTIFICATIONS": "Notifications", - "NO_UPCOMING_APPOINTMENTS": "Vous n'avez aucun rendez-vous à venir.", - "OF": "de", - "ONCOLOGIST": "Oncologues", - "OPALPROBLEMSUBJECT": "Trouvé un bogue / problème en utilisant Opal", - "OPAL_WEBSITE": "Site Web d'Opal", - "OPENEXTERNALVIEWER": "Ouvrir dans une appli externe", - "OPEN_LINK": "Ouvrir le lien", - "OPEN_PDF": "Ouvrir le document", - "OPEN_PDF_ERROR": "Erreur lors de l'ouverture du PDF", - "OTHER": "Autres", - "OUTOFTRIES": "Trop de tentatives échouées - Veuillez réessayer plus tard.", - "PAST": "Rendez-vous complétés", - "PERSONAL": "Personnel", - "PHONENUMBER": "Téléphone", - "PLOT_VIEW": "Vue Graphique", - "PREFERENCES": "Préférences", - "PRIMARYDOCTOR": "Oncologue principal", - "QUEBEC_MEDICAL_SCHEDULER": "Rendez-vous santé Québec", - "QUESTION": "Question", - "QUESTIONNAIRES": "Questionnaires", - "QUESTIONNAIRE_BEGIN_INSTRUCTION": "Cliquez sur \"Débuter\" ou glissez vers la gauche pour commencer le questionnaire.", - "QUESTIONNAIRE_CHECKBOX_CHOSEN": "Vous avez choisi", - "QUESTIONNAIRE_CHECKBOX_OPTION": "option(s)", - "QUESTIONNAIRE_COMPLETED": "Complétés", - "QUESTIONNAIRE_CONTACT": "Si vous avez des questions ou des préoccupations, veuillez en informer votre équipe soignante.", - "QUESTIONNAIRE_DATE_ADDED": "Ajouté le :", - "QUESTIONNAIRE_DATE_ANSWERED": "Complété le :", - "QUESTIONNAIRE_DATE_LAST_UPDATED": "Dernière mise à jour :", - "QUESTIONNAIRE_ANSWERED_BY": "Complété par :", - "QUESTIONNAIRE_DESCRIPTION": "Description: ", - "QUESTIONNAIRE_END": "Fin", - "QUESTIONNAIRE_GO_BACK_TO_LIST": "Retourner à la liste", - "QUESTIONNAIRE_HOME": "Accueil", - "QUESTIONNAIRE_INSTRUCTION": "Instruction: ", - "QUESTIONNAIRE_INSTRUCTIONS": "Répondez aux questions en rouge. Les questions en vert peuvent être modifiées. Une fois toutes les questions répondues, vous pouvez soumettre vos réponses.", - "QUESTIONNAIRE_INSTRUCTIONS4": "Aller à la question", - "QUESTIONNAIRE_IN_PROGRESS": "En cours", - "QUESTIONNAIRE_IN_PROGRESS_BY": "En cours par :", - "QUESTIONNAIRE_LOCKING_ERROR": "Ce questionnaire ne peut être complété car un autre utilisateur ayant access au dossier de ce patient l'a déjà commencé. Une fois le questionnaire complété, vous pourrez consulter les réponses sur l'onglet « Complétés ».", - "QUESTIONNAIRE_NEW": "Nouveaux", - "QUESTIONNAIRE_NONE_COMPLETED": "Pas de questionnaire rempli.", - "QUESTIONNAIRE_NONE_NEW": "Pas de nouveau questionnaire.", - "QUESTIONNAIRE_NONE_OF_THE_ABOVE": "Aucune de ces réponses", - "QUESTIONNAIRE_NONE_PROGRESS": "Pas de questionnaire en cours.", - "QUESTIONNAIRE_NOT_ALLOWED_TO_ANSWER": "Votre niveau d'accès aux données de ce patient ne permet pas de répondre aux questionnaires à sa place. Une fois le questionnaire complété par un autre utilisateur, vous pourrez en consulter les réponses sur l'onglet « Complétés ».", - "QUESTIONNAIRE_RESUME_INSTRUCTION": "Cliquez sur \"continuer\" ou glissez vers la gauche pour poursuivre le questionnaire.", - "QUESTIONNAIRE_SECTION_INSTRUCTION": "Instructions pour cette section", - "QUESTIONNAIRE_SELECT": "Choisissez", - "QUESTIONNAIRE_SUBMIT": "Voulez-vous vraiment soumettre le questionnaire? Vous ne pourrez pas modifier vos réponses après la soumission.", - "QUESTIONNAIRE_SUBMIT_AS_SELF": "Soumission des réponses par : {userName}", - "QUESTIONNAIRE_SUBMIT_AS_OTHER": "Soumission des réponses par : {userName} (au nom de {patientName})", - "QUESTIONNAIRE_SUBMIT_INSTRUCTION": "Veuillez appuyer sur le bouton \"Soumettre les réponses\" pour compléter le questionnaire.", - "QUESTIONNAIRE_THANKS": "Merci d'avoir complété ce questionnaire", - "RATEIT": "Évaluer", - "RATETHISAPP": "Évaluer l'application", - "RATETHISMATERIAL": "Évaluer ce document de référence", - "REDIRECT_TO_QUESTIONNAIRE": "Redirection vers le questionnaire...", - "REENTER_EMAIL": "Entrez encore le nouveau courriel", - "REFERENCE_MATERIAL_NONE": "Vous n’avez pas de documents de référence", - "REFRESH_ERROR": "Une erreur s'est produite en rafraichissant vos données.", - "RESEARCH": "Recherche", - "RESEARCH_FEEDBACK": "Commentaires sur la recherche", - "RESEARCH_FEEDBACK_MESSAGE": "Veuillez utiliser ce formulaire pour fournir des commentaires sur les études de recherche en cours dans Opal. Vous pouvez également utiliser ce formulaire pour révoquer votre consentement pour une étude de recherche à laquelle vous avez précédemment consenti en utilisant Opal.", - "RESEARCH_FEEDBACK_PLACEHOLDER": "Indiquez le nom complet de l'étude de recherche et la raison de vos commentaires (commentaires généraux ou révocation du consentement).", - "RESEARCH_DESCRIPTION": "La section Recherche contient des informations sur les études de recherche auxquelles vous participez.", - "RESEARCH_QUESTIONNAIRES": "Questionnaires de recherche", - "RESEARCH_REFERENCE_MATERIAL": "Documents de référence de recherche", - "RESEARCH_REFERENCE_SHORT": "Référence recherche", - "RESULT": "Résultat", - "RESULTS": "Résultats", - "RESUME": "Continuer", - "RELATIONSHIPS": "Mes relations", - "RELATIONSHIPS_CAREGIVERS": "Mes proches aidants", - "RELATIONSHIPS_CAREGIVERS_NONE": "Aucun proche aidant n'est relié à ce compte.", - "RELATIONSHIPS_CAREGIVERS_ERROR": "Une erreur s'est produite lors du chargement des données.", - "RELATIONSHIPS_CAREGIVERS_DESCRIPTION": "Liste des proches aidants qui ont accès à vos données dans l'application Opal.", - "RELATIONSHIPS_PATIENTS_ACCESS": "Accès", - "RELATIONSHIPS_PATIENTS_STATUS_PEN": "En attente", - "RELATIONSHIPS_PATIENTS_STATUS_CON": "Confirmé", - "RELATIONSHIPS_PATIENTS_STATUS_DEN": "Refusé", - "RELATIONSHIPS_PATIENTS_STATUS_EXP": "Expiré", - "RELATIONSHIPS_PATIENTS_STATUS_REV": "Revoqué", - "RELATIONSHIPS_PATIENTS_AVAILABLE": "Dossiers de patient(es) disponibles", - "RELATIONSHIPS_PATIENTS_NOT_AVAILABLE": "Aucun profil disponible", - "RELATIONSHIPS_PATIENTS": "Mes patients", - "RELATIONSHIPS_PATIENTS_NONE": "Aucun patient n'est relié à ce compte.", - "RELATIONSHIPS_PATIENTS_DESCRIPTION": "Liste des patients auxquels vous avez accès dans l'application Opal.", - "RELATIONSHIP_TYPES_ERROR": "Une erreur s'est produite lors du chargement des informations.", - "RELATIONSHIPS_ERROR": "Une erreur s'est produite lors du chargement des données.", - "SAVING_QUESTIONNAIRE_ANSWER": "Enregistrement de vos réponses...", - "SCREENSHOTTAKEN": "Capture d'écran en cours. Si vous n'avez pas effectué la capture d'écran, veuillez quitter l'application.", - "SEARCH": "Recherche", - "SEARCH_EDU": "Recherche de titre", - "SECTION": "Section", - "SECURITYQUESTION": "Question de sécurité", - "SECURITY_QUESTIONS": "Questions de sécurité", - "SECURITY_QUESTION_ANSWER_UPDATE_SUCCESS": "Questions de sécurité mises à jour avec succès. Déconnection...", - "SECURITY_QUESTION_LENGTH_REQUIREMENT_1": "Votre réponse doit avoir une longueur minimale de", - "SECURITY_QUESTION_LENGTH_REQUIREMENT_2": "caractères", - "SECURITY_QUESTION_LOGOUT_WARNING": "Si vous faites des changements, vous serez déconnecté d'Opal et vous devez vous reconnecter.", - "SELECTFONTSIZE": "Choisissez une taille de police", - "SELECTLANGUAGE": "Sélectionner la langue", - "SELECT_3_SECURITY_QUESTIONS": "Vous pouvez modifier une ou plusieurs questions de sécurité ou réponses ici.", - "SELECT_DROPDOWN_QUESTION": "Sélectionnez une nouvelle question de sécurité", - "SEND": "Envoyer", - "SEND_ANOTHER": "Envoyer un autre", - "SENT_TO": "Envoyé à", - "SERVER_ERROR_MODIFY_SECURITY": "Problème de serveur: les questions de sécurité ou réponses ne peuvent pas être modifiées pour le moment. Veuillez réessayer plus tard.", - "SERVER_ERROR_SUBMIT_ANSWER": "Problème de serveur: cette réponse ne peut pas être soumise. Veuillez réessayer plus tard.", - "SERVER_ERROR_SUBMIT_QUESTIONNAIRE": "Problème de serveur: ce questionnaire ne peut pas être soumis. Veuillez réessayer plus tard.", - "SHARE": "Partager", - "SHOW": "Montrer", - "SIGNOUT": "Se déconnecter", - "SMALL": "Petit", - "SMARTDEVICES": "Appareils intelligents", - "SMARTDEVICES_BACK": "Retour à la liste des appareils", - "SMARTDEVICES_LIST_INFO": "Cette page affiche la liste des appareils compatibles avec Opal. Sélectionnez un appareil pour synchroniser ses données.", - "SMARTDEVICES_BLUETOOTH_DISABLED": "Bluetooth est désactivé", - "SMARTDEVICES_BLUETOOTH_PROMPT": "Veuillez l'activer et appuyer sur le bouton d'actualisation ci-dessous.", - "SMARTDEVICES_BLUETOOTH_REFRESH": "Actualiser", - "SMARTDEVICES_BLUETOOTH_UNAVAILABLE": "Les fonctions Bluetooth ne sont disponibles que sur appareil mobile", - "SMARTDEVICES_CONNECTING": "Connexion à l'appareil...", - "SMARTDEVICES_ERROR_BACKEND": "Erreur lors de l'envoi des données à l'hôpital", - "SMARTDEVICES_ERROR_NO_DATA": "Aucune donnée envoyée par l'appareil. Veuillez reprendre la mesure.", - "SMARTDEVICES_ETEKCITY": "Balance intelligente Etekcity (ESF24)", - "SMARTDEVICES_INFO_SUBMITTED": "Si vous avez des questions ou des préoccupations, veuillez en informer votre équipe clinique.", - "SMARTDEVICES_MULTIPLE": "Plusieurs appareils détectés. Veuillez choisir l'appareil à utiliser\u00A0:", - "SMARTDEVICES_SCALE_INSTRUCTIONS": "Veuillez monter sur la balance et vous peser. Une fois votre poids mesuré, appuyez sur le bouton «\u00A0Lire le poids\u00A0» ci-dessous.", - "SMARTDEVICES_SCALE_ERROR_NO_DEVICE": "Aucun appareil détecté. Veuillez reprendre la mesure et réessayer.", - "SMARTDEVICES_SCALE_READ": "Lire le poids", - "SMARTDEVICES_SCALE_SUBMIT": "Envoyer le poids à l'hôpital", - "SMARTDEVICES_SCALE_SUBMITTED": "Merci d'avoir enregistré votre poids.", - "SMARTDEVICES_SELECT": "Choisir", - "SMARTDEVICES_VITAL_SIGNS": "Fonctions vitales", - "SMARTDEVICES_VITALTRACER": "Montre VitalTracer", - "SMARTDEVICES_VITALTRACER_ERROR_NO_DEVICE": "Aucun appareil détecté. Veuillez activer l'écran de la montre et réessayer.", - "SMARTDEVICES_VITALTRACER_READ": "Lire les fonctions vitales", - "SMARTDEVICES_VITALTRACER_SUBMITTED": "Merci d'avoir enregistré vos fonctions vitales.", - "SMARTDEVICES_WEIGHT": "Poids", - "SMARTDEVICES_XIAOMI_SCALE": "Balance Xiaomi Mi", - "STAGE": "Étape", - "STAGEOF": "Étape {{index}} sur {{total}}", - "STUDIES": "Études", - "STUDIES_DESCRIPTION": "La section Études contient des informations sur les études de recherche auxquelles vous avez été invité à participer.", - "STUDIES_NONE": "Aucune étude", - "STUDY": "Étude", - "STUDY_STATUS_CONSENTED": "Vous participez à cette étude.", - "STUDY_STATUS_DECLINED": "Vous avez refusé cette étude.", - "STUDY_STATUS_INVITED": "Vous êtes invité à cette étude.", - "SUBMIT": "Soumettre", - "SUBMIT_AND_LOGOUT": "Soumettre et déconnecter", - "SUBMITANSWERS": "Soumettre les réponses", - "SUBMITCONSENT": "Soumettre le formulaire", - "SUBMITTING_QUESTIONNAIRE": "Enregistrement de votre questionnaire...", - "SUMMARY": "Résumé", - "TABLEOFCONTENTS": "Table des matières", - "TABLE_VIEW": "Vue de Tableau", - "TAPTOZOOM": "Appuyer sur l'ecran pour agrandir.", - "TEAMMESSAGES": "Messages", - "THANKYOUFORFEEDBACK": "Merci pour votre évaluation", - "TITLE": "Information", - "TO": "à", - "TODAY": "Rendez-vous aujourd'hui", - "TOO_MANY_REQUESTS_CONSENT": "Trop de tentatives de mot de passe erronées. Veuillez réessayer plus tard.", - "TREATINGTEAMNOTIFICATIONS": "Messages de l'équipe soignante", - "TREATMENTSESSION": "Sessions de Traitement", - "Tumor markers": "Marqueurs tumoraux", - "UNABLE_TO_SHARE_DOCUMENT": "Impossible de partager le document", - "UNATTENDED": "Ne laissez pas votre appareil sans surveillance.", - "UPCOMING_APPOINTMENTS": "Les rendez-vous à venir", - "UPDATE": "Mettre à jour", - "UPDATED_EMAIL": "Courriel mis à jour avec succès", - "UPDATEPASSWORDBUTTON": "Mettre à jour le mot de passe", - "UPDATEPASSWORDTITLE": "Mettre à jour le mot de passe", - "USER_DISABLED": "Votre compte a été bloqué. Veuillez contacter l'hôpital pour obtenir de l'aide.", - "WAITING_ROOM": "Salle d'attente:", - "WARNING": "Attention", - "YES": "Oui", - "YOU": "vous", - "VIDEO": "Vidéo" + "ADDED": "Reçu à", + "ANSWER": "Réponse", + "APPOINTMENT": "Rendez-vous", + "APPOINTMENTS": "Rendez-vous", + "APPOINTMENT_ABOUT": "À propos de ce rendez-vous", + "APPOINTMENT_CANCELLED": "Ce rendez-vous a été annulé.", + "APPOINTMENT_OPEN_ERROR": "Une erreur s'est produite en ouvrant ce rendez-vous.", + "AVAILABLE_DEVICES": "Disponible seulement sur un appareil mobile.", + "BEGIN": "Débuter", + "CARNET_SANTE": "Carnet santé Québec", + "CHARACTERS_LEFT": "caractères restants", + "CHART_ALL_RANGE_SELECTOR": "Tout", + "CHART_DESCRIPTION": "L'onglet Dossier contient toutes les données éléctroniques concernant votre santé.", + "CHART_NON_NUMERIC_VALUES": "Ces résultats ne peuvent pas être représentés car au moins l'un d'entre eux n'est pas un nombre", + "CHART_NO_PLOT_AVAILABLE": "Aucun graphique disponible", + "CHART_ONE_MONTH_SELECTOR": "1m", + "CHART_SIX_MONTHS_SELECTOR": "6m", + "CHART_THREE_MONTHS_SELECTOR": "3m", + "CHART_YEAR_SELECTOR": "1a", + "CHECKIN": "Enregistrement", + "CHECKIN_ALL_TODAY": "Enregistrer", + "CHECKIN_ERROR_GEOLOCATION": "Erreur de géolocalisation; vérifiez les paramètres d'autorisation de l'appli ou de l'appareil.", + "CHECKIN_ERROR_MULTIPLE": "Impossible de s'enregistrer pour votre/vos rendez-vous. Veuillez réessayer ou vous présenter à la réception.", + "CHECKIN_ERROR_ONE": "Impossible de s'enregistrer pour ce rendez-vous. Veuillez réessayer ou vous présenter à la réception.", + "CHECKIN_MESSAGE_AFTER": "Vous êtes enregistré(e) pour votre rendez-vous.", + "CHECKIN_MESSAGE_AFTER_PLURAL": "Vous êtes enregistré(e) pour vos rendez-vous.", + "CHECKIN_MESSAGE_BEFORE": "Enregistrez-vous pour votre rendez-vous.", + "CHECKIN_MESSAGE_BEFORE_PLURAL": "Enregistrez-vous pour vos rendez-vous.", + "CHECKIN_NONE": "Aucun rendez-vous disponible pour enregistrement aujourd'hui.", + "CHECKIN_NOT_ALLOWED": "L'enregistrement sera disponible dès l'arrivée à l'hôpital.", + "CHECKIN_PATIENT_HEADER_NON_SELF": "Rendez-vous de {name}", + "CHECKIN_PATIENT_HEADER_SELF": "Vos rendez-vous", + "CLINICAL_QUESTIONNAIRES": "Questionnaires cliniques", + "CLINICAL_REPORTS": "Rapports cliniques", + "COLLECTION_DATE": "Date de Collecte", + "CONFIRM_DOWNLOAD": "Le document doit temporairement être téléchargé sur votre appareil avant de continuer.", + "CONSENT": "Accepter", + "CONSENT_FORMS": "Formulaires de consentement", + "CONSENT_FORMS_NONE_COMPLETED": "Aucun formulaire rempli", + "CONSENT_FORMS_NONE_NEW": "Aucun nouveau formulaire", + "CONSENT_FORMS_NONE_PROGRESS": "Aucun formulaire en cours", + "CONSENT_FORM_ACKNOWLEDGEMENT": "Je consens à participer à ce projet de recherche selon les conditions mentionnées dans le formulaire de consentement.", + "CONSENT_FORM_BEGIN_INSTRUCTION": "Cliquez sur \"Débuter\" ou glissez vers la gauche pour répondre au formulaire de consentement.", + "CONSENT_FORM_GO_BACK_TO_LIST": "Retourner à la liste", + "CONSENT_FORM_PASSWORD_INSTRUCTION": "Veuillez entrer votre mot de passe pour confirmer votre consentement.", + "CONSENT_FORM_RESUME_INSTRUCTION": "Cliquez sur \"Reprendre\" ou glissez vers la gauche pour continuer le formulaire de consentement.", + "CONSENT_FORM_SUBMIT_INSTRUCTION": "Pour soummettre le formulaire de consentement, veuillez répondre à la question ci-dessous et appuyer sur le bouton \"Soumettre le formulaire\".", + "CONSENT_FORM_THANKS": "Merci d'avoir complété ce formulaire", + "DATE_END": "Date de fin", + "DATE_START": "Date de début", + "DAYS": "{ days } {days, plural, =0{jours} one{jour} other{jours}}", + "DEAR": "Chère/Cher", + "DECLINE": "Refuser", + "DETECTING_LOCATION": "Détection de votre emplacement...", + "DIAGNOSIS": "Diagnostic", + "DOCUMENT": "Document", + "DOC_ABOUT": "À propos de ce document", + "DOC_DATE_CREATED": "Créé le:", + "DOC_DATE_UPDATED": "Mis à jour le:", + "DOC_INFO": "Informations sur ce document", + "DOC_SIGNED_BY": "Signé par:", + "DONE": "Finir", + "EDUCATION_DESCRIPTION": "Cette section contient des informations spécifiques à votre traitement et à votre diagnostic en général.", + "EDU_OPEN_ERROR": "Erreur lors de l'ouverture du document de référence", + "ENTER_NEW_PASSWORD": "Entrez votre nouveau mot de passe :", + "ENTER_OLD_PASSWORD": "Entrez votre mot de passe actuel :", + "ENTER_OLD_PASSWORD_PLACEHOLDER": "Mot de passe actuel", + "ENTER_PASSWORD": "Entrez votre mot de passe:", + "ERROR_GETTING_EDU_MATERIAL": "Erreur. Le contenu de ce document de référence n'a pas pu être téléchargé du serveur.", + "ERROR_IN_VIDEO_URL_OR_FORMAT": "Erreur dans l'URL ou le format de la vidéo", + "ERROR_OBTAINING_DOCUMENT": "Erreur lors de l'obtention du document à partir du serveur", + "EXIT_APP": "Voulez-vous vraiment quitter Opal?", + "FEEDBACK_ERROR": "Une erreur s'est produite lors de l'envoi de vos commentaires. Veuillez réessayer plus tard.", + "FEEDBACK_LEAVE_MESSAGE": "Laissez-nous un message", + "FEEDBACK_MESSAGE": "Vos commentaires sont importants pour nous. S'il vous plaît, prenez le temps de nous faire savoir ce que vous pensez d'Opal. Chaque commentaire est apprécié.", + "FEEDBACK_RECEIVED": "Vos commentaires ont été reçus.", + "FEEDBACK_SUBMIT_AS": "Sera envoyé au nom de :", + "FIND_DOCTOR": "Accès à un médecin de famille", + "FONTSIZE": "Taille de la police", + "FOR": "Pour", + "FUTURE": "Rendez-vous à venir", + "GENERAL_ANNOUNCEMENTS": "Annonces générales", + "GENERAL_ANNOUNCEMENTS_HEADER": "Annonces", + "GENERAL_DESCRIPTION": "Dans l'onglet Général, vous trouverez des renseignements utiles pour faciliter votre visite à l'hôpital.", + "GO_TO_ROOM": "Salle de rendez-vous :", + "GO_TO_SUMMARY": "Aller au Résumé", + "HEADER_MESSAGE_HOME": "Accueil", + "HIDE": "Cacher", + "HOME_DESCRIPTION": "Dans l'onglet Accueil, vous pourrez accéder aux nouvelles concernant votre statut médical, vos documents, les annonces de l'hôpital et vos rendez-vous.", + "HOSPITAL_PARKING": "Stationnement", + "INDIVIDUAL_ANNOUNCEMENT_HEADER": "Annonce", + "INVALID_OLD_PASSWORD": "Mot de passe actuel invalide", + "INVALID_PASSWORD": "Mot de passe invalide.", + "INVESTIGATOR": "Chercheur(euse)", + "LABELS": "Étiquettes", + "LAB_BY_DATE": "Date", + "LAB_BY_TYPE": "Type", + "LAB_DELAY": "Paramètres de délai", + "LAB_DELAY_DEFAULTS_HEADER": "Les délais par défaut fixés par l'établissement sont :", + "LAB_DELAY_DEFAULTS_INTERPRETABLE": "Résultat interprétable ({ yesno, select, yes{oui} no{non} other{?} }) :", + "LAB_DELAY_INFO_HEADER": "Modification des paramètres de délai des résultats de laboratoire", + "LAB_DELAY_INFO_TEXT": "Les paramètres de délai des résultats de laboratoire peuvent être modifiés sur demande. Vous pouvez trouver un formulaire imprimable « d'Accès aux résultats de laboratoire » dans le menu Bibliothèque d'Opal ou en faisant la demande à l'hôpital.", + "LAB_DELAY_INTERPRETABLE": "Après avoir reçu l'enseignement de la part de votre équipe soignante vous serez en mesure d'interpréter ces résultats par vous-même.", + "LAB_DELAY_NON_INTERPRETABLE": "Non-interprétable : Ces résultats portent une part d'interprétation d'un professionnel de la santé et ne peuvent donc pas être interprétés par vous-même.", + "LAB_DISCLAIMER": "Pas pour usage clinique", + "LAB_INFO_CRITICAL_HEADER": "Valeurs critiques (C)", + "LAB_INFO_CRITICAL_TEXT": "Les résultats de vos tests sanguins sont considérablement en dehors de la plage normale. Le laboratoire communiquera généralement ces résultats à votre équipe soignante de manière accélérée. Votre équipe soignante les évaluera, et vous informera si des mesures doivent être prises en ce qui concerne vos résultats de tests sanguins anormaux.", + "LAB_INFO_FLAGS": "Les résultats en dehors de la plage de valeurs normales sont accompagnés d'un (L), d'un (H) ou d'un (C), où (L) indique une valeur faible, (H) indique une valeur élevée et (C) indique une valeur critique.", + "LAB_INFO_HIGH_LOW_HEADER": "Valeurs faibles (L) ou élevées (H)", + "LAB_INFO_HIGH_LOW_TEXT": "Les résultats de vos analyses de sang sont en dehors de la plage normale. Votre équipe de traitement les évaluera et ordonnera d'autres études ou traitements si nécessaire.", + "LAB_INFO_NORMAL_HEADER": "Valeurs normales", + "LAB_INFO_NORMAL_TEXT": "Les résultats de vos analyses de sang se situent dans la plage normale.", + "LAB_LEARN_ABOUT": "En savoir plus sur:", + "LAB_NAME": "Nom de l'analyse", + "LAB_NORM": "Valeurs normales", + "LAB_RECENT_RESULT": "Résultat récent", + "LAB_RESULTS": "Résultats de laboratoire", + "LAB_RESULTS_NONE": "Pas de résultats de laboratoire disponibles", + "LAB_RESULT_DELAY": "Délai :", + "LAB_RESULT_INTERPRETABLE": "Résultat interprétable :", + "LAB_TEST_INFO": "Détails de l'analyse", + "LAB_YOUR_RESULT": "Votre résultat", + "LANGUAGE": "Langue", + "LARGE": "Grand", + "LEAVING_APP": "Notez que vous quittez l'application et ne comptez plus sur Opal pour protéger votre document.", + "LEAVING_APP_LABS": "Veuillez noter que vous quittez l'application pour ouvrir un site Web externe. Ce site est offert à titre informatif seulement; ne fournissez aucune de vos données personnelles.", + "LOADING_APPOINTMENTS": "Chargement de vos rendez-vous...", + "LOADING_DATA": "Chargement de vos données", + "LOADING_DOCUMENT": "Chargement de votre document...", + "LOADING_ERROR": "Une erreur est survenue lors du chargement de vos données. Veuillez réessayer plus tard.", + "LOADING_LAB_RESULTS": "Chargement de vos résultats sanguins...", + "LOADING_MATERIAL": "Chargement de votre document de référence...", + "LOADING_QUESTIONNAIRE": "Chargement de votre questionnaire...", + "MARK_ALL_READ": "Tout marquer comme lu", + "MEDIUM": "Moyen", + "MESSAGE": "Message", + "MORE_EDU_MATERIAL": "Document de référence supplémentaire", + "NAME": "Nom", + "NO": "Non", + "NORMAL_RANGE": "Plage normale", + "NOTIFICATIONS": "Notifications", + "NOTIFICATION_OPEN_ERROR": "Une erreur s'est produite lors du chargement de cette notification.", + "NO_APPOINTMENTS": "Aucun rendez-vous", + "NO_APPOINTMENT_INFO": "Aucune information concernant ce rendez-vous n'est disponible pour le moment.", + "NO_DIAGNOSIS": "Pas de diagnostic", + "NO_GENERAL_ANNOUNCEMENTS": "Pas d’annonces générales", + "NO_NOTIFICATIONS": "Vous n'avez pas de nouvelles notifications", + "NO_PARKING_SITES": "Aucune information disponible sur le stationnement et le transport", + "NO_PATIENT_DOCUMENTS_AVAILABLE": "Vous n'avez aucun document de patient disponible", + "NO_TEAM_MESSAGES": "Pas de messages de l'équipe de traitement", + "NO_UPCOMING_APPOINTMENTS": "Vous n'avez aucun rendez-vous à venir.", + "OPEN_EXTERNAL_VIEWER": "Ouvrir dans une appli externe", + "OPEN_LINK": "Ouvrir le lien", + "OPEN_PDF": "Ouvrir le document", + "OPEN_PDF_ERROR": "Erreur lors de l'ouverture du PDF", + "OTHER": "Autres", + "PAST": "Rendez-vous complétés", + "PERSONAL": "Personnel", + "PHONE_NUMBER": "Téléphone", + "PLOT_VIEW": "Vue Graphique", + "PREFERENCES": "Préférences", + "QUEBEC_MEDICAL_SCHEDULER": "Rendez-vous santé Québec", + "QUESTION": "Question", + "QUESTIONNAIRES": "Questionnaires", + "QUESTIONNAIRE_ANSWERED_BY": "Complété par :", + "QUESTIONNAIRE_BEGIN_INSTRUCTION": "Cliquez sur \"Débuter\" ou glissez vers la gauche pour commencer le questionnaire.", + "QUESTIONNAIRE_CHECKBOX_CHOSEN": "Vous avez choisi", + "QUESTIONNAIRE_CHECKBOX_OPTION": "option(s)", + "QUESTIONNAIRE_COMPLETED": "Complétés", + "QUESTIONNAIRE_CONTACT": "Si vous avez des questions ou des préoccupations, veuillez en informer votre équipe soignante.", + "QUESTIONNAIRE_DATE_ADDED": "Ajouté le :", + "QUESTIONNAIRE_DATE_ANSWERED": "Complété le :", + "QUESTIONNAIRE_DATE_LAST_UPDATED": "Dernière mise à jour :", + "QUESTIONNAIRE_DESCRIPTION": "Description: ", + "QUESTIONNAIRE_GO_BACK_TO_LIST": "Retourner à la liste", + "QUESTIONNAIRE_GO_TO_QUESTION": "Aller à la question", + "QUESTIONNAIRE_HOME": "Accueil", + "QUESTIONNAIRE_INSTRUCTION": "Instruction: ", + "QUESTIONNAIRE_INSTRUCTIONS": "Répondez aux questions en rouge. Les questions en vert peuvent être modifiées. Une fois toutes les questions répondues, vous pouvez soumettre vos réponses.", + "QUESTIONNAIRE_IN_PROGRESS": "En cours", + "QUESTIONNAIRE_IN_PROGRESS_BY": "En cours par :", + "QUESTIONNAIRE_LOCKING_ERROR": "Ce questionnaire ne peut être complété car un autre utilisateur ayant access au dossier de ce patient l'a déjà commencé. Une fois le questionnaire complété, vous pourrez consulter les réponses sur l'onglet « Complétés ».", + "QUESTIONNAIRE_NEW": "Nouveaux", + "QUESTIONNAIRE_NONE_COMPLETED": "Pas de questionnaire rempli.", + "QUESTIONNAIRE_NONE_NEW": "Pas de nouveau questionnaire.", + "QUESTIONNAIRE_NONE_PROGRESS": "Pas de questionnaire en cours.", + "QUESTIONNAIRE_NOT_ALLOWED_TO_ANSWER": "Votre niveau d'accès aux données de ce patient ne permet pas de répondre aux questionnaires à sa place. Une fois le questionnaire complété par un autre utilisateur, vous pourrez en consulter les réponses sur l'onglet « Complétés ».", + "QUESTIONNAIRE_RESUME_INSTRUCTION": "Cliquez sur \"continuer\" ou glissez vers la gauche pour poursuivre le questionnaire.", + "QUESTIONNAIRE_SECTION_INSTRUCTION": "Instructions pour cette section", + "QUESTIONNAIRE_SELECT": "Choisissez", + "QUESTIONNAIRE_SUBMIT_AS_OTHER": "Soumission des réponses par : {userName} (au nom de {patientName})", + "QUESTIONNAIRE_SUBMIT_AS_SELF": "Soumission des réponses par : {userName}", + "QUESTIONNAIRE_SUBMIT_INSTRUCTION": "Veuillez appuyer sur le bouton \"Soumettre les réponses\" pour compléter le questionnaire.", + "QUESTIONNAIRE_THANKS": "Merci d'avoir complété ce questionnaire", + "RATE_IT": "Évaluer", + "RATE_THIS_MATERIAL": "Évaluer ce document de référence", + "REDIRECT_TO_QUESTIONNAIRE": "Redirection vers le questionnaire...", + "REFERENCE_MATERIAL_NONE": "Vous n’avez pas de documents de référence", + "REFRESH_ERROR": "Une erreur s'est produite en rafraichissant vos données.", + "RELATIONSHIPS": "Mes relations", + "RELATIONSHIPS_CAREGIVERS": "Mes proches aidants", + "RELATIONSHIPS_CAREGIVERS_DESCRIPTION": "Liste des proches aidants qui ont accès à vos données dans l'application Opal.", + "RELATIONSHIPS_CAREGIVERS_ERROR": "Une erreur s'est produite lors du chargement des données.", + "RELATIONSHIPS_CAREGIVERS_NONE": "Aucun proche aidant n'est relié à ce compte.", + "RELATIONSHIPS_ERROR": "Une erreur s'est produite lors du chargement des données.", + "RELATIONSHIPS_PATIENTS": "Mes patients", + "RELATIONSHIPS_PATIENTS_ACCESS": "Accès", + "RELATIONSHIPS_PATIENTS_AVAILABLE": "Dossiers de patient(es) disponibles", + "RELATIONSHIPS_PATIENTS_DESCRIPTION": "Liste des patients auxquels vous avez accès dans l'application Opal.", + "RELATIONSHIPS_PATIENTS_NONE": "Aucun patient n'est relié à ce compte.", + "RELATIONSHIPS_PATIENTS_NOT_AVAILABLE": "Aucun profil disponible", + "RELATIONSHIPS_PATIENTS_STATUS_CON": "Confirmé", + "RELATIONSHIPS_PATIENTS_STATUS_DEN": "Refusé", + "RELATIONSHIPS_PATIENTS_STATUS_EXP": "Expiré", + "RELATIONSHIPS_PATIENTS_STATUS_PEN": "En attente", + "RELATIONSHIPS_PATIENTS_STATUS_REV": "Revoqué", + "RELATIONSHIP_TYPES_ERROR": "Une erreur s'est produite lors du chargement des informations.", + "RESEARCH": "Recherche", + "RESEARCH_DESCRIPTION": "La section Recherche contient des informations sur les études de recherche auxquelles vous participez.", + "RESEARCH_FEEDBACK": "Commentaires sur la recherche", + "RESEARCH_FEEDBACK_MESSAGE": "Veuillez utiliser ce formulaire pour fournir des commentaires sur les études de recherche en cours dans Opal. Vous pouvez également utiliser ce formulaire pour révoquer votre consentement pour une étude de recherche à laquelle vous avez précédemment consenti en utilisant Opal.", + "RESEARCH_FEEDBACK_PLACEHOLDER": "Indiquez le nom complet de l'étude de recherche et la raison de vos commentaires (commentaires généraux ou révocation du consentement).", + "RESEARCH_QUESTIONNAIRES": "Questionnaires de recherche", + "RESEARCH_REFERENCE_MATERIAL": "Documents de référence de recherche", + "RESEARCH_REFERENCE_SHORT": "Référence recherche", + "RESULT": "Résultat", + "RESULTS": "Résultats", + "RESUME": "Continuer", + "SAVING_QUESTIONNAIRE_ANSWER": "Enregistrement de vos réponses...", + "SEARCH": "Recherche", + "SEARCH_EDU": "Recherche de titre", + "SECTION": "Section", + "SECURITY_QUESTIONS": "Questions de sécurité", + "SECURITY_QUESTION_ANSWER_UPDATE_SUCCESS": "Questions de sécurité mises à jour avec succès. Déconnection...", + "SECURITY_QUESTION_LENGTH_REQUIREMENT_1": "Votre réponse doit avoir une longueur minimale de", + "SECURITY_QUESTION_LENGTH_REQUIREMENT_2": "caractères", + "SECURITY_QUESTION_LOGOUT_WARNING": "Si vous faites des changements, vous serez déconnecté d'Opal et vous devez vous reconnecter.", + "SECURITY_QUESTIONS_INSTRUCTIONS": "Vous pouvez modifier une ou plusieurs questions de sécurité ou réponses ici.", + "SELECT_DROPDOWN_QUESTION": "Sélectionnez une nouvelle question de sécurité", + "SELECT_FONT_SIZE": "Choisissez une taille de police", + "SELECT_LANGUAGE": "Sélectionner la langue", + "SEND": "Envoyer", + "SEND_ANOTHER": "Envoyer un autre", + "SENT_TO": "Envoyé à", + "SERVER_ERROR_MODIFY_SECURITY": "Problème de serveur: les questions de sécurité ou réponses ne peuvent pas être modifiées pour le moment. Veuillez réessayer plus tard.", + "SERVER_ERROR_SUBMIT_ANSWER": "Problème de serveur: cette réponse ne peut pas être soumise. Veuillez réessayer plus tard.", + "SERVER_ERROR_SUBMIT_QUESTIONNAIRE": "Problème de serveur: ce questionnaire ne peut pas être soumis. Veuillez réessayer plus tard.", + "SHARE": "Partager", + "SHOW": "Montrer", + "SIGN_OUT": "Se déconnecter", + "SMALL": "Petit", + "SMART_DEVICES": "Appareils intelligents", + "SMART_DEVICES_BACK": "Retour à la liste des appareils", + "SMART_DEVICES_BLUETOOTH_DISABLED": "Bluetooth est désactivé", + "SMART_DEVICES_BLUETOOTH_PROMPT": "Veuillez l'activer et appuyer sur le bouton d'actualisation ci-dessous.", + "SMART_DEVICES_BLUETOOTH_REFRESH": "Actualiser", + "SMART_DEVICES_BLUETOOTH_UNAVAILABLE": "Les fonctions Bluetooth ne sont disponibles que sur appareil mobile", + "SMART_DEVICES_CONNECTING": "Connexion à l'appareil...", + "SMART_DEVICES_ERROR_BACKEND": "Erreur lors de l'envoi des données à l'hôpital", + "SMART_DEVICES_ERROR_NO_DATA": "Aucune donnée envoyée par l'appareil. Veuillez reprendre la mesure.", + "SMART_DEVICES_ETEKCITY": "Balance intelligente Etekcity (ESF24)", + "SMART_DEVICES_INFO_SUBMITTED": "Si vous avez des questions ou des préoccupations, veuillez en informer votre équipe clinique.", + "SMART_DEVICES_LIST_INFO": "Cette page affiche la liste des appareils compatibles avec Opal. Sélectionnez un appareil pour synchroniser ses données.", + "SMART_DEVICES_MULTIPLE": "Plusieurs appareils détectés. Veuillez choisir l'appareil à utiliser\u00A0:", + "SMART_DEVICES_SCALE_ERROR_NO_DEVICE": "Aucun appareil détecté. Veuillez reprendre la mesure et réessayer.", + "SMART_DEVICES_SCALE_INSTRUCTIONS": "Veuillez monter sur la balance et vous peser. Une fois votre poids mesuré, appuyez sur le bouton «\u00A0Lire le poids\u00A0» ci-dessous.", + "SMART_DEVICES_SCALE_READ": "Lire le poids", + "SMART_DEVICES_SCALE_SUBMIT": "Envoyer le poids à l'hôpital", + "SMART_DEVICES_SCALE_SUBMITTED": "Merci d'avoir enregistré votre poids.", + "SMART_DEVICES_SELECT": "Choisir", + "SMART_DEVICES_VITALTRACER": "Montre VitalTracer", + "SMART_DEVICES_VITALTRACER_ERROR_NO_DEVICE": "Aucun appareil détecté. Veuillez activer l'écran de la montre et réessayer.", + "SMART_DEVICES_VITALTRACER_READ": "Lire les fonctions vitales", + "SMART_DEVICES_VITALTRACER_SUBMITTED": "Merci d'avoir enregistré vos fonctions vitales.", + "SMART_DEVICES_VITAL_SIGNS": "Fonctions vitales", + "SMART_DEVICES_WEIGHT": "Poids", + "SMART_DEVICES_XIAOMI_SCALE": "Balance Xiaomi Mi", + "STUDIES": "Études", + "STUDIES_DESCRIPTION": "La section Études contient des informations sur les études de recherche auxquelles vous avez été invité à participer.", + "STUDIES_NONE": "Aucune étude", + "STUDY": "Étude", + "STUDY_STATUS_CONSENTED": "Vous participez à cette étude.", + "STUDY_STATUS_DECLINED": "Vous avez refusé cette étude.", + "STUDY_STATUS_INVITED": "Vous êtes invité à cette étude.", + "SUBMIT": "Soumettre", + "SUBMITTING_QUESTIONNAIRE": "Enregistrement de votre questionnaire...", + "SUBMIT_AND_LOGOUT": "Soumettre et déconnecter", + "SUBMIT_ANSWERS": "Soumettre les réponses", + "SUBMIT_CONSENT": "Soumettre le formulaire", + "SUMMARY": "Résumé", + "TABLE_OF_CONTENTS": "Table des matières", + "TABLE_VIEW": "Vue de Tableau", + "TAP_TO_ZOOM": "Appuyer sur l'ecran pour agrandir.", + "TEAM_MESSAGES": "Messages", + "THANK_YOU_FOR_FEEDBACK": "Merci pour votre évaluation", + "TITLE": "Information", + "TO": "à", + "TODAY": "Rendez-vous aujourd'hui", + "TOO_MANY_REQUESTS_CONSENT": "Trop de tentatives de mot de passe erronées. Veuillez réessayer plus tard.", + "TREATING_TEAM_NOTIFICATIONS": "Messages de l'équipe soignante", + "UNABLE_TO_SHARE_DOCUMENT": "Impossible de partager le document", + "UPCOMING_APPOINTMENTS": "Les rendez-vous à venir", + "UPDATE": "Mettre à jour", + "UPDATE_PASSWORD_BUTTON": "Mettre à jour le mot de passe", + "UPDATE_PASSWORD_TITLE": "Mettre à jour le mot de passe", + "WAITING_ROOM": "Salle d'attente:", + "WARNING": "Attention", + "YES": "Oui", + "YOU": "vous" } diff --git a/src/Languages/appTranslationTablesViews/login/en.json b/src/Languages/appTranslationTablesViews/login/en.json index 3761c623f..3499edec2 100644 --- a/src/Languages/appTranslationTablesViews/login/en.json +++ b/src/Languages/appTranslationTablesViews/login/en.json @@ -3,41 +3,35 @@ "ALERT": "Alert", "APP_LICENSE": "Unless otherwise stated, this software's source code is subject to the terms of the Apache License Version 2.0, a copy of which is linked below.", "APP_VERSION": "App Version", - "ATTENTION": "Attention!", "BACK": "Back", "BROWSER_OPEN_FAILED": "Error opening this link. Please try again later.", "CANCEL": "Cancel", - "CLOSE": "Close", + "CHART": "Chart", "CONFIRM": "Confirm", - "CONTACTHOSPITAL": "Contact the hospital for assistance", + "CONTACT_HOSPITAL": "Contact the hospital for assistance", "CONTINUE": "Continue", "CURRENT_VERSION": "Current version: ", "EDUCATION": "Clinical Reference Material", "EDUCATION_SHORT": "Clinical Reference", "EMAIL": "Email", "EMAIL_LOADING_ERROR": "Email loading error", - "ENTERANANSWER": "Enter an answer", - "ENTERANSWERPLACEHOLDER": "Enter your answer...", - "ENTEREMAIL": "Enter your Email Address:", - "ERROR": "Error", - "ERRORANSWERNOTMATCH": "Answer does not match our records", + "ENTER_ANSWER_PLACEHOLDER": "Enter your answer...", + "ENTER_AN_ANSWER": "Enter an answer", + "ENTER_EMAIL": "Enter your Email Address:", + "ERROR_ANSWER_NOT_MATCH": "Answer does not match our records", "ERROR_CONTACTING_HOSPITAL": "Error contacting the hospital. Try again later.", "ERROR_GENERIC": "Something went wrong", "ERROR_INIT_LINKS": "Error loading links in the app. Some links may not open.", - "ERROROBTAININGDOCUMENT": "Error obtaining document from server", "ERROR_NETWORK": "Could not connect to the internet", "ERROR_NO_CONFIRMED_PROFILES": "Access to your account has not yet been approved by Medical Records, or has been revoked. If you've recently requested access, please wait for it to be granted. Otherwise, please contact Opal support for assistance.", "ERROR_PAGE": "Error loading this page", "ERROR_SELECTING_HOSPITAL": "An error occurred while selecting a hospital. If this error persists, please contact Opal support for assistance.", "FEEDBACK": "Feedback", - "FEEDBACK_MESSAGE": "Your feedback is invaluable to us. Please take a moment to let us know what you think about Opal.", - "FEEDBACK_RECEIVED": "Your feedback has been received.", - "FORGOTPASSWORD": "Forgot Password?", - "FORGOTPASSWORD_NOQUESTION": "Forgot Password", + "FORGOT_PASSWORD": "Forgot Password?", + "FORGOT_PASSWORD_NO_QUESTION": "Forgot Password", "GENERAL": "General", - "GETTINGTOHOSPITAL": "Directions", + "GETTING_TO_HOSPITAL": "Directions", "GO_TO_LOGIN": "Go To Login", - "HEADER_MESSAGE_LOGIN": "Sign In", "HOME": "Home", "HOSPITAL": "Hospital", "INACTIVE": "For security purposes, you have been disconnected after 5 minutes of inactivity. Please log in again.", @@ -45,44 +39,33 @@ "INVALID_EMAIL": "Invalid email", "INVALID_EMAIL_OR_PWD": "Incorrect email or password", "INVALID_USER": "Invalid user", - "JAILBREAK_TITLE": "Jailbreak/Rooted Device Detected", - "JAILBREAK_MESSAGE": "Running this app on a jailbroken or rooted device is not supported.", - "KICKEDOUT": "You have logged in on another device.", - "LANGUAGE": "Language", - "LEAVEMESSAGE": "Leave us a message", + "KICKED_OUT": "You have logged in on another device.", "LICENSE": "License", "LOADING": "Loading", - "LOADINGDATA": "Retrieving your account", - "LOGGINGIN": "Logging In...", + "LOGGING_IN": "Logging In...", "LOGIN": "Login", "MUHC": "MUHC", "MUHC_FULL": "McGill University Health Centre", - "MYCHART": "Chart", "NEURO_ACRONYM": "NEURO", "NEURO_FULL": "Montreal Neurological Institute-Hospital", - "NEWPASSWORD": "Set Password", + "NEW_PASSWORD": "Set Password", "NO_PAGE_CONTENT": "There is currently no content available for this page. Please contact the hospital for more information.", - "NOINTERNETCONNECTION": "You are currently offline", - "OK": "Ok", "OK_BUTTON": "OK", "OMI": "OMI", "OMI_FULL": "Opal Medical Institution", - "OPAL_ABOUT": "About Opal", "OPAL_CONTRIBUTE": "Contribute to Opal Development", "OPAL_COPYRIGHT": "Opal Health Informatics Group at the RI-MUHC", "OPAL_DEMO_1": "OD1", - "OPAL_DEMO_2": "OD2", "OPAL_DEMO_1_FULL": "Opal Demo 1", + "OPAL_DEMO_2": "OD2", "OPAL_DEMO_2_FULL": "Opal Demo 2", "OPAL_OPEN_SOURCE": "Opal Open Source Community", "OPAL_SUPPORT": "Contact Opal Support", "OPAL_TOUR": "Show the Opal Tour", "OPAL_WEBSITE": "Opal's Website", - "OPALPROBLEMSUBJECT": "Found a Bug/Problem using Opal", - "OUTOFTRIES": "Too many failed attempts - Please try again later.", + "OUT_OF_TRIES": "Too many failed attempts - Please try again later.", "PAGE_ACCESS_ERROR": "Error accessing this page. Please try again later.", "PARKING": "Parking & Transport", - "PARTNERS": "Partners", "PASSWORD": "Password", "PASSWORD_CRITERIA": "This new password does not comply with the required criteria", "PASSWORD_INVALID_CAPITAL": "Password requires at least one capital letter", @@ -93,64 +76,49 @@ "PASSWORD_INVALID_NUMBER": "Password requires at least one number", "PASSWORD_INVALID_SPECIAL_CHAR": "Password requires at least one special character", "PASSWORD_INVALID_STRENGTH": "Password is not strong enough", - "PASSWORDRESETSERVERERROR": "There seems to be an issue on our end regarding resetting your password. Please try resetting your password again. We apologize for any inconvenience.", + "PASSWORD_RESET_SERVER_ERROR": "There seems to be an issue on our end regarding resetting your password. Please try resetting your password again. We apologize for any inconvenience.", "PASSWORD_SERVER_ERROR": "An issue occurred with your password, possibly due to a password reset error. Please use the button below to reset it again.", "PASSWORD_UPDATED": "Your password has been updated.", "PASSWORD_UPDATED_LOG_IN": "Your password has been updated; you will now be logged out of your current session.", - "SHOW_PASSWORD": "Show password", - "RATETHISAPP": "Rate This App", "RECONNECTING": "Reconnecting...", - "REENTERPASSWORDPLACEHOLDER": "Re-enter new password", - "REGISTER_OPAL": "Register for Opal", - "RESETERROR": "Password Reset Error", - "RESET_PASSWORD_SENT": "If your email address is in our system, an email will be sent to you to reset your password. Do not close the app while completing the password reset process.", - "RESETINSTRUCTIONS": "It should be at least 10 characters long, including a number, a lowercase letter, a capital letter and a special character.", - "RESETPASSWORD": "Reset Password", - "RESET_PASSWORD_CODE_INVALID": "The authorization code used to reset your password is invalid. Please try again.", + "REENTER_PASSWORD_PLACEHOLDER": "Re-enter new password", + "RESET_ERROR": "Password Reset Error", + "RESET_INSTRUCTIONS": "It should be at least 10 characters long, including a number, a lowercase letter, a capital letter and a special character.", + "RESET_PASSWORD": "Reset Password", "RESET_PASSWORD_CODE_EXPIRED": "You took too long to reset your password. Please try again.", + "RESET_PASSWORD_CODE_INVALID": "The authorization code used to reset your password is invalid. Please try again.", + "RESET_PASSWORD_SENT": "If your email address is in our system, an email will be sent to you to reset your password. Do not close the app while completing the password reset process.", "RETRY": "Retry", - "RETRYRESETMESSAGE": "Your password reset link is invalid or has expired. Please try resetting your password again.", - "SCREENSHOTTAKEN": "Screenshot taken. If it was not you, exit the app.", - "SECURE_PHONE": "Remember to secure your information by protecting your phone with a passphrase", + "RETRY_RESET_MESSAGE": "Your password reset link is invalid or has expired. Please try resetting your password again.", "SECURITY_AND_PRIVACY": "Security and Privacy", - "SERVICE_AGREEMENT": "Service Agreement", - "SECURITYQUESTION": "Security Question", + "SECURITY_QUESTION": "Security Question", "SELECT_HOSPITAL": "Select a hospital", - "SEND": "Send", - "SEND_ANOTHER": "Send another", - "SETNEWPASSWORDPLACEHOLDER": "New password", - "SETPASSWORDBUTTON": "Set Password", - "SETPASSWORDLABEL": "Set new password", + "SERVER_ERROR_ALERT": "Server problem: could not fetch data, try again later", + "SERVICE_AGREEMENT": "Service Agreement", + "SET_NEW_PASSWORD_PLACEHOLDER": "New password", + "SET_PASSWORD_BUTTON": "Set Password", + "SET_PASSWORD_LABEL": "Set new password", "SHOW_LICENSE_TEXT": "Show license text", - "SIGNOUT": "Sign out", - "SUBMITTING": "Submitting... Please do not leave this page.", + "SHOW_PASSWORD": "Show password", "SUCCESS": "Success", - "TECHNICAL_LEGAL": "Technical / Legal", + "TAP_TO_SELECT_HOSPITAL": "Tap to select", "TERMS_OF_USE": "Terms of Use", "THIRD_PARTY": "Third-Party Dependencies", "TOO_MANY_REQUESTS": "Too many unsuccessful login attempts. Please try again later.", "TOUR_ACCOUNT": "On the Account tab, you will be able to log out and make changes to your account settings, including selecting your preferred font size and app language, and changing your password and security answers.", + "TOUR_CHART": "On the Chart tab, you will have access to your medical data, including test results, appointments, documents, clinical questionnaires for you to fill out, and more.", "TOUR_EDUCATION": "In the \"Clinical Reference Material\" section of the Chart tab, you will receive reference materials as you progress through your medical journey. We will show you videos, booklets and documents specific to you.", "TOUR_END_DESC": "We hope that you enjoy your experience using Opal. If you need any more help with the app, feel free to contact us at %%HELP_EMAIL%% and we'll be happy to help. Thanks for using Opal!", "TOUR_END_TITLE": "That's it for this tour!", "TOUR_GENERAL": "On the General tab, you will find announcements, parking information, and other useful links. You can also provide us with feedback on the app.", "TOUR_HOME": "On the Home tab, you will be provided with your most important information at a glance, including your notifications, and a button to check-in to your appointments for the day.", "TOUR_INFO": "The Information button will appear on some pages to give you additional details if you need them.", - "TOUR_MODAL_INTRODUCTION": "To help you get started, a quick tour is available to guide you through the main sections of the app. If you choose to skip it or would like to visit it again later, the tour is always available under \"About Opal\" on the Home tab.", - "TOUR_MODAL_LATER_BUTTON": "Later", - "TOUR_MODAL_TAKE_TOUR_BUTTON": "Take the tour", - "TOUR_MYCHART": "On the Chart tab, you will have access to your medical data, including test results, appointments, documents, clinical questionnaires for you to fill out, and more.", "TOUR_NAME": "Opal Tour", - "TOUR_WELCOME": "Welcome to Opal!", - "TOUR_WELCOME_DESC": "Opal is a patient portal designed to provide you with some of your medical information right at your fingertips. To get started, tap the arrow or swipe the screen to change slides.", - "TOUR_SECURITY_TITLE": "Security", "TOUR_SECURITY_DESCRIPTION": "Remember to secure your information by protecting your phone with a passphrase, and do not leave your phone unattended.", + "TOUR_SECURITY_TITLE": "Security", + "TOUR_WELCOME_DESC": "Opal is a patient portal designed to provide you with some of your medical information right at your fingertips. To get started, tap the arrow or swipe the screen to change slides.", "TRUST_DEVICE": "Set this device as a trusted device?", - "UNATTENDED": "Do not leave your phone unattended.", "UNTRANSLATED_PAGE_DISCLAIMER": "This page has not yet been translated, but its original content is provided below for reference purposes. Thank you for your understanding.", - "USER_DISABLED": "User account has been disabled", - "WARNING": "Warning", - "SERVERERRORALERT": "Server problem: could not fetch data, try again later", - "TAP_TO_SELECT_HOSPITAL": "Tap to select", - "WHATSNEW": "What's New" + "USER_DISABLED": "Your account has been blocked, please contact Opal support for further assistance.", + "WHATS_NEW": "What's New" } diff --git a/src/Languages/appTranslationTablesViews/login/fr.json b/src/Languages/appTranslationTablesViews/login/fr.json index 31f76145a..ff927bce6 100644 --- a/src/Languages/appTranslationTablesViews/login/fr.json +++ b/src/Languages/appTranslationTablesViews/login/fr.json @@ -3,41 +3,35 @@ "ALERT": "Alerte", "APP_LICENSE": "À moins d'indication contraire, le code source de ce logiciel est soumis aux termes de la licence Apache version 2.0, dont le lien est fourni ci-dessous.", "APP_VERSION": "Version de l'application", - "ATTENTION": "Attention!", "BACK": "Retour", "BROWSER_OPEN_FAILED": "Erreur lors de l'ouverture de ce lien. Veuillez réessayer plus tard.", "CANCEL": "Annuler", - "CLOSE": "Fermer", + "CHART": "Dossier", "CONFIRM": "Confirmer", - "CONTACTHOSPITAL": "Contacter l'hôpital pour obtenir de l'aide", + "CONTACT_HOSPITAL": "Contactez l'hôpital pour obtenir de l'aide", "CONTINUE": "Continuer", "CURRENT_VERSION": "Version actuelle: ", "EDUCATION": "Documents de référence cliniques", "EDUCATION_SHORT": "Référence clinique", "EMAIL": "Courriel", "EMAIL_LOADING_ERROR": "Erreur de chargement de l'adresse", - "ENTERANANSWER": "Entrer une réponse", - "ENTERANSWERPLACEHOLDER": "Entrer votre réponse...", - "ENTEREMAIL": "Entrez votre adresse courriel:", - "ERROR": "Erreur", - "ERRORANSWERNOTMATCH": "Votre réponse ne correspond pas à celle de nos fichiers.", + "ENTER_ANSWER_PLACEHOLDER": "Entrer votre réponse...", + "ENTER_AN_ANSWER": "Entrer une réponse", + "ENTER_EMAIL": "Entrez votre adresse courriel:", + "ERROR_ANSWER_NOT_MATCH": "Votre réponse ne correspond pas à celle dans nos dossiers", "ERROR_CONTACTING_HOSPITAL": "Une erreur s'est produite en contactant l'hôpital. Réessayez plus tard.", "ERROR_GENERIC": "Une erreur s'est produite", "ERROR_INIT_LINKS": "Erreur de chargement des liens dans l'application. Certains liens pourraient ne pas s'ouvrir.", - "ERROROBTAININGDOCUMENT": "Erreur lors de l'obtention du document à partir du serveur", "ERROR_NETWORK": "Erreur de connection Internet", "ERROR_NO_CONFIRMED_PROFILES": "L'accès à votre compte n'a pas encore été approuvé par le bureau des archives médicales, ou il a été révoqué. Si votre inscription est récente, veuillez attendre que votre accès soit accordé. Sinon, veuillez contacter l'équipe de soutien d'Opal pour obtenir de l'aide.", "ERROR_PAGE": "Erreur lors du chargement de cette page", "ERROR_SELECTING_HOSPITAL": "Une erreur s'est produite lors de la sélection d'un hôpital. Si cette erreur persiste, veuillez contacter l'équipe de soutien d'Opal pour obtenir de l'aide.", "FEEDBACK": "Commentaires", - "FEEDBACK_MESSAGE": "Votre commentaire est important pour nous. S'il vous plaît, prenez le temps de nous faire savoir ce que vous pensez d'Opal. Chaque commentaire est apprécié.", - "FEEDBACK_RECEIVED": "Vos commentaires ont été reçus.", - "FORGOTPASSWORD": "Mot de passe oublié?", - "FORGOTPASSWORD_NOQUESTION": "Mot de passe oublié", + "FORGOT_PASSWORD": "Mot de passe oublié?", + "FORGOT_PASSWORD_NO_QUESTION": "Mot de passe oublié", "GENERAL": "Général", - "GETTINGTOHOSPITAL": "Directions", + "GETTING_TO_HOSPITAL": "Directions", "GO_TO_LOGIN": "Aller à la page de connexion", - "HEADER_MESSAGE_LOGIN": "Se connecter", "HOME": "Accueil", "HOSPITAL": "Hôpital", "INACTIVE": "Par mesure de sécurité, votre session a pris fin automatiquement après 5 minutes d'inactivité. Veuillez vous connecter de nouveau.", @@ -45,44 +39,33 @@ "INVALID_EMAIL": "Adresse courriel invalide", "INVALID_EMAIL_OR_PWD": "Adresse courriel ou mot de passe invalide", "INVALID_USER": "Utilisateur invalide", - "JAILBREAK_TITLE": "Appareil débridé détecté", - "JAILBREAK_MESSAGE": "L'exécution de cette application sur un appareil débridé n'est pas permise.", - "KICKEDOUT": "Votre compte a été ouvert sur un autre appareil.", - "LANGUAGE": "Langue", - "LEAVEMESSAGE": "Laissez-nous un message", + "KICKED_OUT": "Votre compte a été ouvert sur un autre appareil.", "LICENSE": "Licence", "LOADING": "Chargement", - "LOADINGDATA": "Chargement des données", - "LOGGINGIN": "Se Connecter...", + "LOGGING_IN": "Se Connecter...", "LOGIN": "Connexion", "MUHC": "CUSM", "MUHC_FULL": "Centre universitaire de santé McGill", - "MYCHART": "Dossier", "NEURO_ACRONYM": "NEURO", "NEURO_FULL": "Institut-hôpital neurologique de Montréal", - "NEWPASSWORD": "Créez un mot de passe", + "NEW_PASSWORD": "Créez un mot de passe", "NO_PAGE_CONTENT": "Il n'y a présentement aucun contenu sur cette page. Veuillez contacter l'hôpital pour plus d'information.", - "NOINTERNETCONNECTION": "Pas de connexion Internet", - "OK": "D'accord", "OK_BUTTON": "OK", "OMI": "ÉMO", "OMI_FULL": "Établissement médical Opal", - "OPAL_ABOUT": "À propos d'Opal", "OPAL_CONTRIBUTE": "Contribuer au développement d'Opal", "OPAL_COPYRIGHT": "Groupe Informatique Opal Santé à l'IR-CUSM", "OPAL_DEMO_1": "DO1", - "OPAL_DEMO_2": "DO2", "OPAL_DEMO_1_FULL": "Démo Opal 1", + "OPAL_DEMO_2": "DO2", "OPAL_DEMO_2_FULL": "Démo Opal 2", "OPAL_OPEN_SOURCE": "Communauté logiciel ouvert d'Opal", "OPAL_SUPPORT": "Contacter l'équipe de soutien d'Opal", "OPAL_TOUR": "Voir le guide d'Opal", "OPAL_WEBSITE": "Site Web d'Opal", - "OPALPROBLEMSUBJECT": "Trouvé un bogue / problème en utilisant Opal", - "OUTOFTRIES": "Trop de tentatives échouées - Veuillez réessayer plus tard.", + "OUT_OF_TRIES": "Trop de tentatives échouées - Veuillez réessayer plus tard.", "PAGE_ACCESS_ERROR": "Erreur d'accès à cette page. Veuillez réessayer plus tard.", "PARKING": "Stationnement et transport", - "PARTNERS": "Partenaires", "PASSWORD": "Mot de passe", "PASSWORD_CRITERIA": "Ce nouveau mot de passe ne respecte pas les conditions requises", "PASSWORD_INVALID_CAPITAL": "Mot de passe nécessite au moins une lettre majuscule", @@ -93,64 +76,49 @@ "PASSWORD_INVALID_NUMBER": "Mot de passe nécessite au moins un chiffre", "PASSWORD_INVALID_SPECIAL_CHAR": "Mot de passe nécessite au moins un symbole", "PASSWORD_INVALID_STRENGTH": "Mot de passe trop faible", - "PASSWORDRESETSERVERERROR": "Il semble y avoir un problème de notre part concernant la réinitialisation de votre mot de passe. Veuillez réessayer de réinitialiser votre mot de passe. Nous nous excusons pour tout inconvénient.", + "PASSWORD_RESET_SERVER_ERROR": "Il semble y avoir un problème de notre part concernant la réinitialisation de votre mot de passe. Veuillez réessayer de réinitialiser votre mot de passe. Nous nous excusons pour tout inconvénient.", "PASSWORD_SERVER_ERROR": "Un problème est survenu avec votre mot de passe, probablement en raison d'une erreur de réinitialisation. Veuillez utiliser le bouton ci-dessous pour le réinitialiser à nouveau.", "PASSWORD_UPDATED": "Votre mot de passe a été mis à jour.", "PASSWORD_UPDATED_LOG_IN": "Votre mot de passe a été mis à jour; vous serez maintenant déconnecté(e) de la session en cours.", - "SHOW_PASSWORD": "Afficher le mot de passe", - "RATETHISAPP": "Évaluer l'application", "RECONNECTING": "En cours de reconnexion...", - "REENTERPASSWORDPLACEHOLDER": "Confirmer le nouveau mot de passe", - "REGISTER_OPAL": "S'inscrire à Opal", - "RESETERROR": "Erreur de réinitialisation du mot de passe", - "RESET_PASSWORD_SENT": "Si votre adresse courriel est dans notre système, un courriel vous sera envoyé pour réinitialiser votre mot de passe. Ne fermez pas l'application pendant le processus de réinitialisation.", - "RESETINSTRUCTIONS": "Il doit comporter au moins 10 caractères, dont un chiffre, une lettre minuscule, une lettre majuscule et un caractère spécial.", - "RESETPASSWORD": "Réinitialiser le mot de passe", - "RESET_PASSWORD_CODE_INVALID": "Le code d'autorisation utilisé pour réinitialiser votre mot de passe n'est pas valide. Veuillez réessayer.", + "REENTER_PASSWORD_PLACEHOLDER": "Confirmer le nouveau mot de passe", + "RESET_ERROR": "Erreur de réinitialisation du mot de passe", + "RESET_INSTRUCTIONS": "Il doit comporter au moins 10 caractères, dont un chiffre, une lettre minuscule, une lettre majuscule et un caractère spécial.", + "RESET_PASSWORD": "Réinitialiser le mot de passe", "RESET_PASSWORD_CODE_EXPIRED": "Vous avez pris trop de temps pour réinitialiser votre mot de passe. Veuillez réessayer.", + "RESET_PASSWORD_CODE_INVALID": "Le code d'autorisation utilisé pour réinitialiser votre mot de passe n'est pas valide. Veuillez réessayer.", + "RESET_PASSWORD_SENT": "Si votre adresse courriel est dans notre système, un courriel vous sera envoyé pour réinitialiser votre mot de passe. Ne fermez pas l'application pendant le processus de réinitialisation.", "RETRY": "Réessayer", - "RETRYRESETMESSAGE": "Votre lien de réinitialisation est invalide ou expiré. Veuillez recommencer le processus de réinitialisation de votre mot de passe.", - "SCREENSHOTTAKEN": "Capture d'écran en cours. Si vous n'avez pas effectué la capture d'écran, veuillez quitter l'application.", - "SECURE_PHONE": "N'oubliez pas de protéger votre appareil avec un mot de passe.", + "RETRY_RESET_MESSAGE": "Votre lien de réinitialisation est invalide ou expiré. Veuillez recommencer le processus de réinitialisation de votre mot de passe.", "SECURITY_AND_PRIVACY": "Sécurité et confidentialité", - "SERVICE_AGREEMENT": "Accord de service", - "SECURITYQUESTION": "Question de sécurité", + "SECURITY_QUESTION": "Question de sécurité", "SELECT_HOSPITAL": "Sélectionnez un hôpital", - "SEND": "Envoyer", - "SEND_ANOTHER": "Envoyer un autre", - "SETNEWPASSWORDPLACEHOLDER": "Nouveau mot de passe", - "SETPASSWORDBUTTON": "Changer le mot de passe", - "SETPASSWORDLABEL": "Nouveau mot de passe", + "SERVER_ERROR_ALERT": "Problème de serveur: impossible de télécharger les données, veuillez réessayer plus tard", + "SERVICE_AGREEMENT": "Accord de service", + "SET_NEW_PASSWORD_PLACEHOLDER": "Nouveau mot de passe", + "SET_PASSWORD_BUTTON": "Changer le mot de passe", + "SET_PASSWORD_LABEL": "Nouveau mot de passe", "SHOW_LICENSE_TEXT": "Afficher la licence", - "SIGNOUT": "Se déconnecter", - "SUBMITTING": "Chargement... Veuillez ne pas quitter cette page.", + "SHOW_PASSWORD": "Afficher le mot de passe", "SUCCESS": "Succès", - "TECHNICAL_LEGAL": "Technique / Légal", + "TAP_TO_SELECT_HOSPITAL": "Appuyez pour choisir", "TERMS_OF_USE": "Conditions d'utilisation", "THIRD_PARTY": "Dépendances tierces", "TOO_MANY_REQUESTS": "Trop de tentatives de connexion erronées. Veuillez réessayer plus tard.", "TOUR_ACCOUNT": "Dans l'onglet «\u00A0Réglages\u00A0», vous pourrez vous déconnecter et modifier les paramètres de votre compte. Par exemple, vous pourrez sélectionner la taille de police et la langue de votre choix, ou modifier votre mot de passe et vos réponses aux questions de sécurité.", + "TOUR_CHART": "Dans l'onglet «\u00A0Dossier\u00A0», vous aurez accès à vos données médicales, y compris vos résultats de laboratoire, vos rendez-vous, des documents, des questionnaires cliniques à remplir, et plus encore.", "TOUR_EDUCATION": "Dans la section «\u00A0Documents de référence cliniques\u00A0» de l’onglet «\u00A0Dossier\u00A0», vous recevrez des documents au fur et à mesure que vous progresserez dans votre parcours médical. Nous vous enverrons des vidéos, des livrets et des documents personnalisés pour vous.", "TOUR_END_DESC": "Nous espérons que vous apprécierez votre expérience avec Opal. Si vous avez besoin d'aide supplémentaire avec l'application, n'hésitez pas à nous contacter à %%HELP_EMAIL%% et nous serons heureux de vous aider. Merci d'utiliser Opal!", "TOUR_END_TITLE": "C'est tout pour cette visite!", "TOUR_GENERAL": "Dans l'onglet «\u00A0Général\u00A0», vous trouverez des annonces, des informations sur le stationnement et autres liens utiles. Vous pourrez également nous faire part de vos commentaires sur l'application.", "TOUR_HOME": "Dans l'onglet «\u00A0Accueil\u00A0», vous verrez vos informations les plus importantes d'un coup d'œil, y compris vos notifications et un bouton pour vous enregistrer à vos rendez-vous de la journée.", "TOUR_INFO": "Le bouton «\u00A0Information\u00A0» apparaîtra sur certaines pages pour vous donner des détails supplémentaires si vous en avez besoin.", - "TOUR_MODAL_INTRODUCTION": "Pour vous aider à bien débuter, une visite rapide est disponible afin de vous guider parmi les sections principales de l'application. Si vous souhaitez l'ignorer ou reprendre la visite plus tard, celle-ci restera toujours disponible dans «\u00A0À propos d'Opal\u00A0» sur l'onglet Accueil.", - "TOUR_MODAL_LATER_BUTTON": "Plus tard", - "TOUR_MODAL_TAKE_TOUR_BUTTON": "Allons-y!", - "TOUR_MYCHART": "Dans l'onglet «\u00A0Dossier\u00A0», vous aurez accès à vos données médicales, y compris vos résultats de laboratoire, vos rendez-vous, des documents, des questionnaires cliniques à remplir, et plus encore.", "TOUR_NAME": "Guide d'Opal", - "TOUR_WELCOME": "Bienvenue à Opal!", - "TOUR_WELCOME_DESC": "Opal est un portail patient conçu pour vous fournir quelques unes de vos informations médicales à portée de main. Pour commencer, appuyez sur la flèche ou faites glisser l'écran pour changer de page.", - "TOUR_SECURITY_TITLE": "Sécurité", "TOUR_SECURITY_DESCRIPTION": "N'oubliez pas de protéger votre appareil avec un mot de passe, et ne laissez pas votre appareil sans surveillance.", + "TOUR_SECURITY_TITLE": "Sécurité", + "TOUR_WELCOME_DESC": "Opal est un portail patient conçu pour vous fournir quelques unes de vos informations médicales à portée de main. Pour commencer, appuyez sur la flèche ou faites glisser l'écran pour changer de page.", "TRUST_DEVICE": "Faire confiance à cet appareil?", - "UNATTENDED": "Ne laissez pas votre appareil sans surveillance.", "UNTRANSLATED_PAGE_DISCLAIMER": "La traduction de cette page n'est pas encore disponible, mais son contenu original est tout de même affiché ci-dessous à titre de référence. Merci de votre compréhension.", - "USER_DISABLED": "Le compte d'utilisateur a été désactivé", - "WARNING": "Attention", - "SERVERERRORALERT": "Problème de serveur: impossible de télécharger les données, veuillez réessayer plus tard", - "TAP_TO_SELECT_HOSPITAL": "Appuyez pour choisir", - "WHATSNEW": "Nouveautés" + "USER_DISABLED": "Votre compte a été bloqué. Veuillez contacter l'équipe de soutien d'Opal pour obtenir de l'aide.", + "WHATS_NEW": "Nouveautés" } diff --git a/src/Languages/appTranslationTablesViews/top-view/en.json b/src/Languages/appTranslationTablesViews/top-view/en.json index 8a830dad6..484a5708c 100644 --- a/src/Languages/appTranslationTablesViews/top-view/en.json +++ b/src/Languages/appTranslationTablesViews/top-view/en.json @@ -1,6 +1,24 @@ { - "LOADINGDATA":"Loading data", - "HOME":"Home", - "UPDATEMESSAGE":"This version of Opal is no longer supported. Please update Opal to log in.", - "UPDATEREQUIRED":"Update Required" + "ATTENTION": "Attention!", + "CLOSE": "Close", + "HEADER_MESSAGE_LOGIN": "Sign In", + "JAILBREAK_MESSAGE": "Running this app on a jailbroken or rooted device is not supported.", + "JAILBREAK_TITLE": "Jailbreak / Rooted Device Detected", + "LOADING_ACCOUNT": "Retrieving your account", + "NO_INTERNET_CONNECTION": "You are currently offline", + "OK": "Ok", + "OPAL_ABOUT": "About Opal", + "PARTNERS": "Partners", + "REGISTER_OPAL": "Register for Opal", + "SCREENSHOT_TAKEN": "Screenshot taken. If it was not you, exit the app.", + "SECURE_PHONE": "Remember to secure your information by protecting your phone with a passphrase", + "SUBMITTING": "Submitting... Please do not leave this page.", + "TECHNICAL_LEGAL": "Technical / Legal", + "TOUR_MODAL_INTRODUCTION": "To help you get started, a quick tour is available to guide you through the main sections of the app. If you choose to skip it or would like to visit it again later, the tour is always available under \"About Opal\" on the Home tab.", + "TOUR_MODAL_LATER_BUTTON": "Later", + "TOUR_MODAL_TAKE_TOUR_BUTTON": "Take the tour", + "TOUR_WELCOME": "Welcome to Opal!", + "UNATTENDED": "Do not leave your phone unattended.", + "UPDATE_MESSAGE": "This version of Opal is no longer supported. Please update Opal to log in.", + "UPDATE_REQUIRED": "Update Required" } diff --git a/src/Languages/appTranslationTablesViews/top-view/fr.json b/src/Languages/appTranslationTablesViews/top-view/fr.json index 2bd54057a..198855b60 100644 --- a/src/Languages/appTranslationTablesViews/top-view/fr.json +++ b/src/Languages/appTranslationTablesViews/top-view/fr.json @@ -1,6 +1,24 @@ { - "LOADINGDATA":"Chargement", - "HOME":"Accueil", - "UPDATEMESSAGE":"Cette version d'Opal n'est plus disponible. Veuillez installer la nouvelle version pour accéder à votre compte.", - "UPDATEREQUIRED":"Mise à jour requise" + "ATTENTION": "Attention!", + "CLOSE": "Fermer", + "HEADER_MESSAGE_LOGIN": "Se connecter", + "JAILBREAK_MESSAGE": "L'exécution de cette application sur un appareil débridé n'est pas permise.", + "JAILBREAK_TITLE": "Appareil débridé détecté", + "LOADING_ACCOUNT": "Chargement de votre compte", + "NO_INTERNET_CONNECTION": "Pas de connexion Internet", + "OK": "D'accord", + "OPAL_ABOUT": "À propos d'Opal", + "PARTNERS": "Partenaires", + "REGISTER_OPAL": "S'inscrire à Opal", + "SCREENSHOT_TAKEN": "Capture d'écran en cours. Si vous n'avez pas effectué une capture d'écran, veuillez quitter l'application.", + "SECURE_PHONE": "N'oubliez pas de protéger votre appareil avec un mot de passe.", + "SUBMITTING": "Chargement... Ne quittez pas cette page.", + "TECHNICAL_LEGAL": "Technique / Légal", + "TOUR_MODAL_INTRODUCTION": "Pour vous aider à bien débuter, une visite rapide est disponible afin de vous guider parmi les sections principales de l'application. Si vous souhaitez l'ignorer ou reprendre la visite plus tard, celle-ci restera toujours disponible dans «\u00A0À propos d'Opal\u00A0» sur l'onglet Accueil.", + "TOUR_MODAL_LATER_BUTTON": "Plus tard", + "TOUR_MODAL_TAKE_TOUR_BUTTON": "Allons-y!", + "TOUR_WELCOME": "Bienvenue à Opal!", + "UNATTENDED": "Ne laissez pas votre appareil sans surveillance.", + "UPDATE_MESSAGE": "Cette version d'Opal n'est plus disponible. Veuillez mettre à jour l'application pour accéder à votre compte.", + "UPDATE_REQUIRED": "Mise à jour requise" } diff --git a/src/css/views/security-question.view.css b/src/css/views/security-question.view.css index 3999e55e7..82b83d3ef 100644 --- a/src/css/views/security-question.view.css +++ b/src/css/views/security-question.view.css @@ -10,7 +10,6 @@ text-align: center; top: 0; width: 100%; - touch-action: manipulation; } .security-question--col { diff --git a/src/index.html b/src/index.html index 4beda2e65..156e47583 100644 --- a/src/index.html +++ b/src/index.html @@ -54,16 +54,16 @@


-

{{"LOADINGDATA"|translate}}...

+

{{"LOADING_ACCOUNT"|translate}}...

-

{{"UPDATEREQUIRED"|translate}}

+

{{"UPDATE_REQUIRED"|translate}}

-

{{"UPDATEMESSAGE"|translate}}

+

{{"UPDATE_MESSAGE"|translate}}

diff --git a/src/js/filters/filters.js b/src/js/filters/filters.js index 1a82195c3..db9613178 100644 --- a/src/js/filters/filters.js +++ b/src/js/filters/filters.js @@ -39,36 +39,6 @@ myApp.filter('trustThisUrl',['$sce',function($sce){ } }]); -myApp.filter('formatDateAppointmentTask', ['$filter', function($filter) { - return function(dateApp) - { - var today=new Date(); - if(typeof dateApp!=='undefined'){ - if(dateApp.getFullYear()==today.getFullYear()) - { - return $filter('date')(dateApp,"EEE MMM d 'at' h:mm a"); - }else{ - return $filter('date')(dateApp,"EEE MMM d yyyy"); - } - }else{ - return ''; - } - }; -}]); - -myApp.filter('formatDateToFirebaseString',function(){ - return function(date){ - var month=date.getMonth()+1; - var year=date.getFullYear(); - var day=date.getDate(); - var minutes=date.getMinutes(); - var seconds=date.getSeconds(); - var hours=date.getHours(); - return year + '-' + month + '-' + day + 'T' + hours + ':' + minutes + ':' + seconds + '.000' + 'Z'; - } -}); - - myApp.filter('formatDate',function(){ return function(str) { if(typeof str==='string'){ @@ -77,104 +47,6 @@ myApp.filter('formatDate',function(){ }; }); -myApp.filter('dateEmail', ['$filter', function($filter) { - return function(date){ - if(Object.prototype.toString.call(date) === '[object Date]') - { - var day=date.getDate(); - var month=date.getMonth(); - var year=date.getFullYear(); - var newDate=new Date(); - if(newDate.getMonth()==month&&newDate.getFullYear()==year) - { - if(day==newDate.getDate()) - { - return 'Today, ' +$filter('date')(date, 'h:mm a'); - }else if(day-newDate.getDate()==1){ - return 'Yesterday'; - }else{ - return $filter('date')(date, 'dd/MM/yyyy'); - } - }else{ - return $filter('date')(date, 'dd/MM/yyyy'); - } - }else{ - return date; - } - }; -}]); - -myApp.filter('limitLetters', ['$filter', function($filter) { - return function(string,num) - { - if(string&&typeof string!=='undefined'&&string.length>num) - { - string=$filter('limitTo')(string,num); - string=string+'...'; - } - return string; - }; -}]); - -myApp.filter('propsFilter', function() { - return function(items, props) { - var out = []; - if (angular.isArray(items)) { - items.forEach(function(item) { - var itemMatches = false; - var keys = Object.keys(props); - for (var i = 0; i < keys.length; i++) { - var prop = keys[i]; - var text = props[prop].toLowerCase(); - if (item[prop].toString().toLowerCase().indexOf(text) !== -1) { - itemMatches = true; - break; - } - } - if (itemMatches) { - out.push(item); - } - }); - } else { - // Let the output be the input untouched - out = items; - } - return out; - }; -}); - -myApp.filter('filterDateLabTests',function() -{ - return function(items,option) - { - var ret=[]; - if(option=='All') - { - return items; - }else if(option=='LastTwoMonths'){ - var lastTwoMonths=new Date(); - lastTwoMonths.setMonth(lastTwoMonths.getMonth()-2); - for (var i = 0; i < items.length; i++) { - if(items[i].testDateFormat > lastTwoMonths) - { - ret.push(items[i]); - } - } - return ret; - }else if(option=='LastTwelveMonths'){ - var lastTwelveMonths=new Date(); - lastTwelveMonths.setFullYear(lastTwelveMonths.getFullYear()-1); - for (var i = 0; i < items.length; i++) { - if(items[i].testDateFormat>lastTwelveMonths) - { - ret.push(items[i]); - } - } - return ret; - } - }; -}); - myApp.filter('FormatPhoneNumber',function(){ return function(phone) { @@ -190,12 +62,6 @@ myApp.filter('FormatPhoneNumber',function(){ }; }); -myApp.filter('standardDate', ['$filter', function($filter) { - return function (date) { - return $filter('date')(date, 'EEE MMM dd yyyy') - } -}]); - myApp.filter('capitalizeFirstLetter', function () { return function (name) { if(name){ @@ -204,37 +70,6 @@ myApp.filter('capitalizeFirstLetter', function () { } }); -myApp.filter('FormatEditPhoneNumber',function(){ - return function(phone) - { - if(typeof phone =='string') - { - var phoneLength = phone.length; - var firstDigits = ''; - var secondDigits = ''; - var thirdDigits = ''; - if(phoneLength === 0) - { - return ''; - }else if(phoneLength<=3) - { - firstDigits=phone.substring(0,3); - return "("+firstDigits+")"; - }else if(phoneLength>3&&phoneLength<=6) - { - firstDigits=phone.substring(0,3); - secondDigits=phone.substring(3,6); - return "("+firstDigits+")"+" "+secondDigits; - }else{ - firstDigits=phone.substring(0,3); - secondDigits=phone.substring(3,6); - thirdDigits=phone.substring(6,phone.length); - return "("+firstDigits+")"+" "+secondDigits+"-"+thirdDigits; - } - } - }; -}); - myApp.filter('trustHTML', ['$sce', function ($sce) { return function (value) { return $sce.trustAsHtml(value); diff --git a/src/js/services/announcementsService.js b/src/js/services/announcementsService.js index c10b65597..ee0c56de7 100644 --- a/src/js/services/announcementsService.js +++ b/src/js/services/announcementsService.js @@ -133,25 +133,20 @@ /** *@ngdoc method *@name setLanguage - *@param {Array} item Array or object with announcements + *@param {object[]|object} announcements Array of announcements, or single announcement object. *@description Translates the array parameter containing announcements to appropriate preferred language specified in {@link OpalApp.service:UserPreferences UserPreferences}. *@returns {Array} Returns array with translated values **/ - function setLanguage(item) { - var language = UserPreferences.getLanguage(); - if (Array.isArray( item )) { - for (var i = 0; i < item.length; i++) { - //set language - item[i].Title = (language === 'EN')? item[i].PostName_EN : item[i].PostName_FR; - item[i].Body = (language === 'EN')? item[i].Body_EN : item[i].Body_FR; - } - }else{ - //set language if string - item.Title = (language ==='EN')? item.PostName_EN : item.PostName_FR; - item.Body = (language === 'EN')? item.Body_EN: item.Body_FR; - } + function setLanguage(announcements) { + let language = UserPreferences.getLanguage(); + let announcementList = Array.isArray(announcements) ? announcements : [announcements]; + + announcementList.forEach(announcement => { + announcement.Title = announcement[`PostName_${language}`]; + announcement.Body = announcement[`Body_${language}`]; + }); - return item; + return announcements; } /** diff --git a/src/js/services/concurrent-login.service.js b/src/js/services/concurrent-login.service.js index 3afbda4ea..dde197c2e 100644 --- a/src/js/services/concurrent-login.service.js +++ b/src/js/services/concurrent-login.service.js @@ -88,7 +88,7 @@ // Show message "You have logged in on another device." Toast.showToast({ - message: $filter('translate')("KICKEDOUT"), + message: $filter('translate')("KICKED_OUT"), }); } }); diff --git a/src/js/services/documentsService.js b/src/js/services/documentsService.js index 7958cf871..2e50e501c 100644 --- a/src/js/services/documentsService.js +++ b/src/js/services/documentsService.js @@ -262,28 +262,21 @@ function(UserPreferences,UserAuthorizationInfo,$q,$filter,FileManagerService,Req /** *@ngdoc method *@name setDocumentsLanguage - *@param {Array} array Array with documents + *@param {object[]|object} documents Array of documents, or single document object. *@description Translates the array parameter containing documents to appropriate preferred language specified in {@link OpalApp.service:UserPreferences UserPreferences}. *@returns {Array} Returns array with translated values **/ - setDocumentsLanguage:function(array) + setDocumentsLanguage:function(documents) { - //Get language - var language = UserPreferences.getLanguage(); + let language = UserPreferences.getLanguage(); + let documentsList = Array.isArray(documents) ? documents : [documents]; - //Check if array - if (Object.prototype.toString.call( array ) === '[object Array]') { - for (var i = 0; i < array.length; i++) { - //set language - array[i].Title = (language=='EN')? array[i].AliasName_EN : array[i].AliasName_FR; - array[i].Description = (language == 'EN')? array[i].AliasDescription_EN : array[i].AliasDescription_FR; - } - }else{ - //set language if string - array.Description = (language == 'EN')? array.AliasDescription_EN : array.AliasDescription_FR; - array.Title = (language=='EN')? array.AliasName_EN : array.AliasName_FR; - } - return array; + documentsList.forEach(document => { + document.Title = document[`AliasName_${language}`]; + document.Description = document[`AliasDescription_${language}`]; + }); + + return documents; }, /** *@ngdoc method diff --git a/src/js/services/educationalMaterialService.js b/src/js/services/educationalMaterialService.js index 677cdc390..7e7eb2eb3 100644 --- a/src/js/services/educationalMaterialService.js +++ b/src/js/services/educationalMaterialService.js @@ -46,41 +46,21 @@ function ($q, $filter, LocalStorage, FileManagerService, UserPreferences, Reques **/ var educationalMaterialType = Params.educationalMaterial; - function setLanguageEduMaterial(array) + function setLanguageEduMaterial(materials) { - var language = UserPreferences.getLanguage(); - - if (!array.hasOwnProperty("Language")) { - array.Language = language; - } - - //Check if array - if (Object.prototype.toString.call( array ) === '[object Array]') { - if (array.Language != language) { - array.forEach(function (element) { - delete element.Content; - }); - array.Language = language; - } - for (var i = 0; i < array.length; i++) { - array[i].Url = (language ==='EN')?array[i].URL_EN:array[i].URL_FR; - array[i].Name =(language==='EN')? array[i].Name_EN : array[i].Name_FR; - array[i].ShareURL =(language ==='EN')? array[i].ShareURL_EN : array[i].ShareURL_FR; - array[i].Type = (language ==='EN')? array[i].EducationalMaterialType_EN : array[i].EducationalMaterialType_FR; - } - }else{ - //set language if string - if (array.Language != language) { - delete array.Content; - array.Language = language; - } - array.Url = (language ==='EN')?array.URL_EN:array.URL_FR; - array.Name =(language ==='EN')? array.Name_EN : array.Name_FR; - array.Type = (language ==='EN')? array.EducationalMaterialType_EN : array.EducationalMaterialType_FR; - } - //console.log('Set edu material language:'); - //console.log(array); - return array; + let language = UserPreferences.getLanguage(); + let materialList = Array.isArray(materials) ? materials : [materials]; + + materialList.forEach(material => { + // Delete content to be re-downloaded later in the right language (when switching languages) + delete material.Content; + material.Url = material[`URL_${language}`]; + material.Name = material[`Name_${language}`]; + material.ShareURL = material[`ShareURL_${language}`]; + material.Type = material[`EducationalMaterialType_${language}`]; + }); + + return materials; } /** @@ -119,10 +99,10 @@ function ($q, $filter, LocalStorage, FileManagerService, UserPreferences, Reques } } - //Formats the input dates and gets it ready for controllers, updates announcementsArray + //Formats the input dates and gets it ready for controllers, updates educationalMaterialArray function addEducationalMaterial(edumaterial) { - //If announcements are undefined simply return + //If educational materials are undefined simply return if(typeof edumaterial == 'undefined') return; for (var i = 0; i < edumaterial.length; i++) { //Format the date to javascript @@ -138,7 +118,7 @@ function ($q, $filter, LocalStorage, FileManagerService, UserPreferences, Reques edumaterial[i].Color = educationalMaterialType['Other'].color; } - //Add to my announcements array + //Add to educational material array educationalMaterialArray.push(edumaterial[i]); } diff --git a/src/js/services/fileManagerService.js b/src/js/services/fileManagerService.js index 737d9ed55..934cb855d 100644 --- a/src/js/services/fileManagerService.js +++ b/src/js/services/fileManagerService.js @@ -356,7 +356,7 @@ function ($filter, $injector, Browser, Constants, RequestToServer, Toast) { function share(name, url) { // Sharing is only available on mobile devices if (!Constants.app) { - ons.notification.alert({message: $filter('translate')('AVAILABLEDEVICES')}); + ons.notification.alert({message: $filter('translate')('AVAILABLE_DEVICES')}); return; } diff --git a/src/js/services/questionnairesService.js b/src/js/services/questionnairesService.js index 85639d576..e2925820b 100644 --- a/src/js/services/questionnairesService.js +++ b/src/js/services/questionnairesService.js @@ -93,10 +93,10 @@ }; const PURPOSE_SUBMIT_BUTTON_MAP = { - clinical: 'SUBMITANSWERS', - research: 'SUBMITANSWERS', - consent: 'SUBMITCONSENT', - default: 'SUBMITANSWERS', + clinical: 'SUBMIT_ANSWERS', + research: 'SUBMIT_ANSWERS', + consent: 'SUBMIT_CONSENT', + default: 'SUBMIT_ANSWERS', }; const PURPOSE_SUBMIT_INSTRUCTION_MAP = { diff --git a/src/js/services/txTeamMessagesService.js b/src/js/services/txTeamMessagesService.js index ffb4651c1..b09895a1f 100644 --- a/src/js/services/txTeamMessagesService.js +++ b/src/js/services/txTeamMessagesService.js @@ -160,26 +160,21 @@ myApp.service('TxTeamMessages', ['$filter','RequestToServer','LocalStorage', 'Us /** *@ngdoc method *@name setLanguageTxTeamMessages - *@param {Array} array Array with TxTeamMessages + *@param {object[]|object} messages Array of messages, or single message object. *@description Translates the array parameter containing announcements to appropriate preferred language specified in {@link OpalApp.service:UserPreferences UserPreferences}. *@returns {Array} Returns array with translated values **/ - setLanguageTxTeamMessages :function(array) + setLanguageTxTeamMessages :function(messages) { - var language = UserPreferences.getLanguage(); - //Check if array - if (Object.prototype.toString.call( array ) === '[object Array]') { - for (var i = 0; i < array.length; i++) { - //set language - array[i].Title = (language=='EN')? array[i].PostName_EN : array[i].PostName_FR; - array[i].Body = (language == 'EN')? array[i].Body_EN : array[i].Body_FR; - } - }else{ - //set language if string - array.Title = (language=='EN')? array.PostName_EN : array.PostName_FR; - array.Body = (language == 'EN')? array.Body_EN: array.Body_FR; - } - return array; + let language = UserPreferences.getLanguage(); + let messageList = Array.isArray(messages) ? messages : [messages]; + + messageList.forEach(message => { + message.Title = message[`PostName_${language}`]; + message.Body = message[`Body_${language}`]; + }); + + return messages; }, /** *@ngdoc method diff --git a/src/js/services/user-preferences.service.js b/src/js/services/user-preferences.service.js new file mode 100644 index 000000000..266f67c43 --- /dev/null +++ b/src/js/services/user-preferences.service.js @@ -0,0 +1,175 @@ +// SPDX-FileCopyrightText: Copyright (C) 2015 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +// +// SPDX-License-Identifier: Apache-2.0 + +import {Observer} from "../models/utility/observer"; + +/** + * @author Based on UserPreferences by David Herrera, Summer 2016, Email:davidfherrerar@gmail.com + * Refactored by Stacey Beard in July 2025. + */ +(function () { + 'use strict'; + + angular + .module('OpalApp') + .factory('UserPreferences', UserPreferences); + + UserPreferences.$inject = ['$rootScope', '$translate', 'Constants', 'tmhDynamicLocale', 'UserAuthorizationInfo']; + + /** + * @description Service that stores and manages user preferences. + */ + function UserPreferences($rootScope, $translate, Constants, tmhDynamicLocale, UserAuthorizationInfo) { + + /** + * @description The name of the user's chosen font size (medium, large, xlarge). + * @type {string} + */ + let fontSize = ''; + + /** + * @description The app's current language. + * @type {string} + */ + let language = ''; + + /** + * @description The list of languages supported by the system. Each language is a two-letter code in upper case (e.g. 'EN'). + * The first language in the list is considered the default. + * @type {string[]} + */ + let supportedLanguages = []; + + /** + * @description The locale for language files in the app. + * @type {string} + */ + let locale = 'ca'; + + /** + * @desc Observer object that notifies other parts of the app when the language changes. + * @type {Observer} + */ + const languageObserver = new Observer(); + + let service = { + clearUserPreferences: clearUserPreferences, + getDefaultLanguage: getDefaultLanguage, + getFontSize: () => fontSize, + getLanguage: () => language, + getSupportedLanguages: () => supportedLanguages, + initFontSize: initFontSize, + initializeLanguage: initializeLanguage, + observeLanguage: fun => languageObserver.attach(fun), + setFontSize: setFontSize, + setLanguage: setLanguage, + }; + + return service; + + /** + * @description Gets the default language based on the app's environment variables. + * @returns {string} Two-letter code for the default language in upper case (e.g. 'EN'). + */ + function getDefaultLanguage() { + return supportedLanguages[0]; + } + + /** + * @description Initializes the user's current font size based on the value stored in localStorage. + * If no value has been stored, defaults to 'large'. + */ + function initFontSize() { + let font = window.localStorage.getItem(UserAuthorizationInfo.getUsername() + 'fontSize'); + setFontSize(font || 'large'); + } + + /** + * @description Initializes the app's language. If this is the first time using the device, + * sets it to the mobile device's or browser's language. + * If language was already set and saved in localStorage, sets the app to that language. + * If no language was previously set and the device language is not supported, falls back on the app's default language. + * @returns {Promise} Resolves if the language was found and correctly set. + * If there was an error using the globalization plugin, falls back on the default language and resolves anyways. + **/ + function initializeLanguage() { + // Read the supported languages from the app's environment variables + supportedLanguages = CONFIG.settings.supportedLanguages.toUpperCase().replaceAll(' ','').split(','); + + // Initialize the app's language + return new Promise(resolve => { + let lang = window.localStorage.getItem('Language') || navigator.language; + lang = lang.substring(0, 2); + // If language is not defined and it's a device + if (!lang && Constants.app) { + // Finds out the language of the default storage + navigator.globalization.getPreferredLanguage(success => { + // Extract only the prefix for language + setLanguage(success.value.substring(0, 2).toUpperCase()); + resolve(language); + }, error => { + console.error('Error getting the language from the current device', error); + setLanguage(getDefaultLanguage()); + resolve(language); + }); + } else { + setLanguage(lang); + resolve(language); + } + }); + } + + /** + * @description Sets the app's language. + * @param {string} lang The language to which to set the app. + * @param {boolean} isAuthenticated Whether the language is being set from a logged-in state. + **/ + function setLanguage(lang, isAuthenticated = false) { + let languageLower = lang.toLowerCase(); + let languageUpper = lang.toUpperCase(); + + // Validate the language + if (!supportedLanguages.includes(languageUpper)) { + console.warn(`Language '${languageUpper}' is not supported; defaulting to '${getDefaultLanguage()}'`); + if (window.localStorage.getItem('Language') === languageUpper) window.localStorage.removeItem('Language'); + return setLanguage(getDefaultLanguage()); + } + + // Set the language + // Note: values set for tmhDynamicLocale correspond to those in the files inside the `angular-locales` directory + tmhDynamicLocale.set(`${languageLower}-${locale}`); + $translate.use(languageLower); + language = languageUpper; + + if (isAuthenticated) window.localStorage.setItem('Language', language); + languageObserver.notify(); + } + + /** + * @description Sets the app's font size. + * @param {string} size The name of the new font size to set; see `fontSize` variable for options. + */ + function setFontSize(size) { + let username = UserAuthorizationInfo.getUsername(); + window.localStorage.setItem(username + 'fontSize', size); + fontSize = size; + + // Format and save the font size class names + // Options: fontDescMedium, fontTitleMedium, fontDescLarge, fontTitleLarge, fontDescXlarge, fontTitleXlarge (see font.css) + let sizeText = fontSize.charAt(0).toUpperCase() + fontSize.slice(1); + $rootScope.fontSizeDesc = `fontDesc${sizeText}`; + $rootScope.fontSizeTitle = `fontTitle${sizeText}`; + } + + /** + * @description Clears the UserPreferences service. + * Note: The app's current language is not cleared due to the order in which data is initialized. + * The language is still needed after this service is cleared. + **/ + function clearUserPreferences() { + fontSize = ''; + languageObserver.clear(); + } + } +})(); diff --git a/src/js/services/userPreferencesService.js b/src/js/services/userPreferencesService.js deleted file mode 100644 index bc73acfe5..000000000 --- a/src/js/services/userPreferencesService.js +++ /dev/null @@ -1,140 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (C) 2015 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre -// -// SPDX-License-Identifier: Apache-2.0 - -// -// Author David Herrera on Summer 2016, Email:davidfherrerar@gmail.com -// -import {Observer} from "../models/utility/observer"; - -var myApp=angular.module('OpalApp'); -//This service will have the user preferences for language. To be used in account settings. -/** - *@ngdoc service - *@requires $rootScope - *@requires tmhDynamicLocale - *@requires $translate - *@description Service stores and manages user preferences - **/ -myApp.service('UserPreferences', ['UserAuthorizationInfo','$rootScope','tmhDynamicLocale','$translate','Constants', - function (UserAuthorizationInfo, $rootScope, tmhDynamicLocale, $translate, Constants) { - - //Fields for user preference and authentication - /** - *@ngdoc property - *@description Font size property - **/ - var fontSize = ''; - /** - *@ngdoc property - *@description Language property - **/ - var language = ''; - - /** - * @desc Observer object that notifies other parts of the app when the language changes. - * @type {Observer} - */ - const languageObserver = new Observer(); - - /** - *@ngdoc method - *@name setLanguage - *@param {String} lang Either 'EN' or 'FR' - *@param isAuthenticated - *@description Setter method for patient language of preference - **/ - function setLang(lang, isAuthenticated = false) { - if (lang == 'EN') { - tmhDynamicLocale.set('en-ca'); - $translate.use('en'); - language = 'EN'; - } else { - tmhDynamicLocale.set('fr-ca'); - $translate.use('fr'); - language = 'FR'; - } - if (isAuthenticated) window.localStorage.setItem('Language', language); - languageObserver.notify(); - } - - function setFontSize(size) { - let username = UserAuthorizationInfo.getUsername(); - window.localStorage.setItem(username + 'fontSize', size); - fontSize = size; - if (size === 'medium') { - $rootScope.fontSizeDesc = 'fontDescMedium'; - $rootScope.fontSizeTitle = 'fontTitleMedium'; - } else if (size === 'large') { - $rootScope.fontSizeDesc = 'fontDescLarge'; - $rootScope.fontSizeTitle = 'fontTitleLarge'; - } else if (size === 'xlarge') { - $rootScope.fontSizeDesc = 'fontDescXlarge'; - $rootScope.fontSizeTitle = 'fontTitleXlarge'; - } - } - - return { - setFontSize: setFontSize, - setLanguage: setLang, - observeLanguage: fun => languageObserver.attach(fun), - initFontSize: function() { - let font = window.localStorage.getItem(UserAuthorizationInfo.getUsername() + 'fontSize'); - setFontSize(font || 'large'); - }, - /** - *@ngdoc method - *@name getFontSize - *@returns {String} Returns font-size - **/ - getFontSize: function() { - var font = fontSize.charAt(0).toUpperCase() + fontSize.slice(1); - $rootScope.fontSizeDesc = 'fontDesc' + font; - $rootScope.fontSizeTitle = 'fontTitle' + font; - return fontSize; - }, - /** - *@ngdoc method - *@name initializeLanguage - *@description The method accesses the globalization plugin of the device to find the actual language of device and sets default to that language. - * If language was already set previously within the app, set default to that language. Otherwise it sets English as default. - *@returns {Promise} Returns a promise that fulfills if the language is been found and correctly set or rejects if there was a problem using the plugin. - **/ - initializeLanguage: function() { - return new Promise((resolve) => { - var lang = window.localStorage.getItem('Language') || navigator.language || navigator.userLanguage; - lang = lang.substring(0, 2).toLowerCase(); - //If language is not defined and its a device - if (!lang && Constants.app) { - //Finds out the language of the default storage - navigator.globalization.getPreferredLanguage(function (success) { - var lang = success.value; - //Extract only the prefix for language - setLang(lang.substring(0, 2).toUpperCase()); - resolve(language); - }, function (error) { - // TODO log error. - setLang('FR'); - resolve(language); - }); - } else { - setLang(lang.toUpperCase()); - resolve(language); - } - }); - }, - getLanguage: function() { - return language; - - }, - /** - *@ngdoc method - *@name clearUserPreferences - *@description Clears user preferences for logout functionality - **/ - clearUserPreferences: function() { - fontSize = ''; - languageObserver.clear(); - } - }; -}]); diff --git a/src/js/services/versionService.js b/src/js/services/versionService.js index 48b6b94c8..2e344b22f 100644 --- a/src/js/services/versionService.js +++ b/src/js/services/versionService.js @@ -56,10 +56,10 @@ versions.forEach(function(value) { if (versionCompare(value.VERSION, lastVersion) === 1 && versionCompare(value.VERSION, currentVersion) !== 1 && - value.DESCRIPTION_EN) + value[`DESCRIPTION_${language}`]) { let infoData = {}; - let description = language == 'EN' ? value.DESCRIPTION_EN : value.DESCRIPTION_FR; + let description = value[`DESCRIPTION_${language}`]; infoData.title = value.VERSION; infoData.content = description; updates.push(infoData); diff --git a/src/views/general/announcements/announcements.html b/src/views/general/announcements/announcements.html index de7410e74..2b2b6f0b6 100644 --- a/src/views/general/announcements/announcements.html +++ b/src/views/general/announcements/announcements.html @@ -5,7 +5,7 @@ --> - + @@ -43,6 +43,6 @@
-

{{"NOGENERALANNOUNCEMENTS"|translate}}

+

{{"NO_GENERAL_ANNOUNCEMENTS"|translate}}

diff --git a/src/views/general/feedback/feedback.html b/src/views/general/feedback/feedback.html index d8b894bc4..9e15c70be 100644 --- a/src/views/general/feedback/feedback.html +++ b/src/views/general/feedback/feedback.html @@ -45,7 +45,7 @@
-

{{"THANKYOUFORFEEDBACK"|translate}}

+

{{"THANK_YOU_FOR_FEEDBACK"|translate}}

{{"FEEDBACK_RECEIVED"|translate}}

{{"SEND_ANOTHER"|translate}}
diff --git a/src/views/general/general.html b/src/views/general/general.html index fdd1fd0dc..7fd76ad21 100644 --- a/src/views/general/general.html +++ b/src/views/general/general.html @@ -30,7 +30,7 @@
{{"GENERALANNOUNCEMENTS"|translate}} + ng-class="fontSizeTitle">{{"GENERAL_ANNOUNCEMENTS"|translate}}

diff --git a/src/views/general/parking/parking.html b/src/views/general/parking/parking.html index a69347f15..28c6d87c5 100644 --- a/src/views/general/parking/parking.html +++ b/src/views/general/parking/parking.html @@ -26,7 +26,7 @@ - {{"GETTINGTOHOSPITAL"|translate}} + {{"GETTING_TO_HOSPITAL"|translate}} @@ -39,7 +39,7 @@ - {{"HOSPITALPARKING"|translate}} + {{"HOSPITAL_PARKING"|translate}} diff --git a/src/views/home/checkin/checkin-list.html b/src/views/home/checkin/checkin-list.html index e75cf1fbb..237791419 100644 --- a/src/views/home/checkin/checkin-list.html +++ b/src/views/home/checkin/checkin-list.html @@ -9,7 +9,7 @@ - +
@@ -82,7 +82,7 @@

-

+

{{"WAITING_ROOM"|translate}} {{app["MapName_" + checkIn.language]}}

diff --git a/src/views/init/technical-legal.html b/src/views/init/technical-legal.html index 9e608c085..2072f7f20 100644 --- a/src/views/init/technical-legal.html +++ b/src/views/init/technical-legal.html @@ -9,7 +9,7 @@ - {{"RATETHISAPP"|translate}} + {{"FEEDBACK"|translate}} {{"SECURITY_AND_PRIVACY"|translate}} diff --git a/src/views/login/forgot-password.html b/src/views/login/forgot-password.html index 99f34e2aa..e684568b1 100644 --- a/src/views/login/forgot-password.html +++ b/src/views/login/forgot-password.html @@ -5,17 +5,17 @@ --> - +
- + {{vm.alert.message|translate}} diff --git a/src/views/login/login.html b/src/views/login/login.html index 0237fea53..6134d3150 100644 --- a/src/views/login/login.html +++ b/src/views/login/login.html @@ -43,14 +43,14 @@
diff --git a/src/views/login/new-password.html b/src/views/login/new-password.html index fd38ff2c5..15ab17cf4 100644 --- a/src/views/login/new-password.html +++ b/src/views/login/new-password.html @@ -5,7 +5,7 @@ --> - + {{"BACK"|translate}} @@ -15,8 +15,8 @@
- -

{{'RESETINSTRUCTIONS'|translate}}

+ +

{{'RESET_INSTRUCTIONS'|translate}}

@@ -26,7 +26,7 @@ name="text" ng-model="new.newValue" ng-change="new.passwordFieldChange()" - placeholder="{{'SETNEWPASSWORDPLACEHOLDER'|translate}}"/> + placeholder="{{'SET_NEW_PASSWORD_PLACEHOLDER'|translate}}"/> + placeholder="{{'REENTER_PASSWORD_PLACEHOLDER'|translate}}"/>

{{"PASSWORD_INVALID_MATCH" | translate}} @@ -57,7 +57,7 @@ ng-disabled="new.alert.type=='success' || !new.passwordIsValid || new.submitting || new.passwordConfirmationInvalid()" ng-if="!new.resetSuccess"> - {{"SETPASSWORDBUTTON"|translate}} + {{"SET_PASSWORD_BUTTON"|translate}} diff --git a/src/views/login/security-question.html b/src/views/login/security-question.html index a44d07faa..c9b9bad9d 100644 --- a/src/views/login/security-question.html +++ b/src/views/login/security-question.html @@ -6,13 +6,15 @@ -

- {{"BACK"|translate}} - {{"HOME"|translate}} +
+ {{"BACK"|translate}} + {{"HOME"|translate}}
-
-
{{"SECURITYQUESTION"|translate}}
-
{{"FORGOTPASSWORD_NOQUESTION"|translate}}
+
+
{{"SECURITY_QUESTION"|translate}}
+
{{"FORGOT_PASSWORD_NO_QUESTION"|translate}}
@@ -29,52 +31,48 @@
- + -
- -
- -
- - - -
- - - - {{security.alert.content|translate}} - +
+ + +
+ + +
+ + + + {{security.alert.content|translate}} +
-

{{"RESETERROR"|translate}}

+

{{"RESET_ERROR"|translate}}

-

{{"RETRYRESETMESSAGE"|translate}}

- {{"RETRY"|translate}} - {{"HOME"|translate}} +

{{"RETRY_RESET_MESSAGE"|translate}}

+ {{"RETRY"|translate}} + {{"HOME"|translate}}
diff --git a/src/views/modals/info-modal.html b/src/views/modals/info-modal.html index 1f52baac3..7706b06a4 100644 --- a/src/views/modals/info-modal.html +++ b/src/views/modals/info-modal.html @@ -7,7 +7,7 @@
-

{{"WHATSNEW"|translate}}

+

{{"WHATS_NEW"|translate}}

{{"CURRENT_VERSION"|translate}}{{infoModalVersion}}

Version: {{data.title}}

diff --git a/src/views/personal/appointments/appointments.html b/src/views/personal/appointments/appointments.html index 1a4286190..caf9562e8 100644 --- a/src/views/personal/appointments/appointments.html +++ b/src/views/personal/appointments/appointments.html @@ -60,7 +60,7 @@
{{"NOAPPOINTMENTS"|translate}}
+ ng-class="fontSizeTitle">{{"NO_APPOINTMENTS"|translate}}
diff --git a/src/views/personal/appointments/individual-appointment.html b/src/views/personal/appointments/individual-appointment.html index df87299f7..78526bd83 100644 --- a/src/views/personal/appointments/individual-appointment.html +++ b/src/views/personal/appointments/individual-appointment.html @@ -19,7 +19,7 @@

{{vm.app.ScheduledStartTime|date:'mediumNoSeconds'}}

- {{"GOTO_ROOM"|translate}} {{vm.app["RoomLocation_"+vm.language]}} + {{"GO_TO_ROOM"|translate}} {{vm.app["RoomLocation_"+vm.language]}}

@@ -53,6 +53,6 @@ -
{{"NOAPPOINTMENTINFO"|translate}}
+
{{"NO_APPOINTMENT_INFO"|translate}}
diff --git a/src/views/personal/diagnosis/diagnosis.html b/src/views/personal/diagnosis/diagnosis.html index 07a22b831..30f42c717 100644 --- a/src/views/personal/diagnosis/diagnosis.html +++ b/src/views/personal/diagnosis/diagnosis.html @@ -31,8 +31,6 @@ {{"DIAGNOSIS"|translate}} {{diagnosis["Description_" + diag.language]}}
-
@@ -40,6 +38,6 @@
- {{"NODIAGNOSIS"|translate}} + {{"NO_DIAGNOSIS"|translate}}
diff --git a/src/views/personal/documents/documents.html b/src/views/personal/documents/documents.html index abd804d5d..610a5c7ec 100644 --- a/src/views/personal/documents/documents.html +++ b/src/views/personal/documents/documents.html @@ -22,7 +22,7 @@
- {{"NOPATIENTDOCUMENTSAVAILABLE"|translate}} + {{"NO_PATIENT_DOCUMENTS_AVAILABLE"|translate}}
diff --git a/src/views/personal/documents/individual-document.html b/src/views/personal/documents/individual-document.html index 3c3be2f81..a28f66ea7 100644 --- a/src/views/personal/documents/individual-document.html +++ b/src/views/personal/documents/individual-document.html @@ -16,8 +16,8 @@ diff --git a/src/views/personal/documents/info-popover.html b/src/views/personal/documents/info-popover.html index df7eda8b4..941e162f4 100644 --- a/src/views/personal/documents/info-popover.html +++ b/src/views/personal/documents/info-popover.html @@ -12,7 +12,7 @@

{{"NAME"|translate}}: {{docParams.Title}}

{{"DOC_DATE_CREATED"|translate}} {{docParams.CreatedTimeStamp| date:'longDate'}}

{{"DOC_DATE_UPDATED"|translate}} {{docParams.ApprovedTimeStamp| date:'longDate'}}

-

{{"DOC_SIGNEDBY"|translate}} {{docParams.FirstName}} {{docParams.LastName}}

+

{{"DOC_SIGNED_BY"|translate}} {{docParams.FirstName}} {{docParams.LastName}}

@@ -28,7 +28,7 @@ - {{"OPENEXTERNALVIEWER"|translate}} + {{"OPEN_EXTERNAL_VIEWER"|translate}}
diff --git a/src/views/personal/education/education-booklet.html b/src/views/personal/education/education-booklet.html index baff4230d..bfb7a5d81 100644 --- a/src/views/personal/education/education-booklet.html +++ b/src/views/personal/education/education-booklet.html @@ -61,7 +61,7 @@ + loading-message="{{'LOADING_MATERIAL'|translate}}"> diff --git a/src/views/personal/education/individual-material.html b/src/views/personal/education/individual-material.html index bc4ad1c69..9d5ee7f7a 100644 --- a/src/views/personal/education/individual-material.html +++ b/src/views/personal/education/individual-material.html @@ -41,7 +41,7 @@ @@ -97,7 +97,7 @@ - {{"TABLEOFCONTENTS"|translate}} + {{"TABLE_OF_CONTENTS"|translate}} @@ -134,7 +134,7 @@ + loading-message="{{'LOADING_MATERIAL'|translate}}">
diff --git a/src/views/personal/education/material-rating-template.html b/src/views/personal/education/material-rating-template.html index c978ee06f..ee867b7c6 100644 --- a/src/views/personal/education/material-rating-template.html +++ b/src/views/personal/education/material-rating-template.html @@ -6,13 +6,13 @@
-

{{"RATETHISMATERIAL"|translate}}

+

{{"RATE_THIS_MATERIAL"|translate}}

- {{"RATEIT" | translate}} + {{"RATE_IT" | translate}}
-

{{"THANKYOUFORFEEDBACK"|translate}}

+

{{"THANK_YOU_FOR_FEEDBACK"|translate}}

diff --git a/src/views/personal/education/table-contents-popover.html b/src/views/personal/education/table-contents-popover.html index 3cd24cc45..d0871835c 100644 --- a/src/views/personal/education/table-contents-popover.html +++ b/src/views/personal/education/table-contents-popover.html @@ -9,7 +9,7 @@

{{contentsEduBooklet.Booklet.Name}}

- {{"TABLEOFCONTENTS"|translate}} + {{"TABLE_OF_CONTENTS"|translate}} diff --git a/src/views/personal/notifications/notifications.html b/src/views/personal/notifications/notifications.html index 2511c34a3..e37146a0b 100644 --- a/src/views/personal/notifications/notifications.html +++ b/src/views/personal/notifications/notifications.html @@ -59,6 +59,6 @@
-

{{"NONOTIFICATIONS"|translate}}

+

{{"NO_NOTIFICATIONS"|translate}}

diff --git a/src/views/personal/personal.html b/src/views/personal/personal.html index 27e31c785..c096857ef 100644 --- a/src/views/personal/personal.html +++ b/src/views/personal/personal.html @@ -98,7 +98,7 @@
{{"TREATINGTEAMNOTIFICATIONS"|translate}} + ng-class="fontSizeTitle">{{"TREATING_TEAM_NOTIFICATIONS"|translate}}

@@ -169,7 +169,7 @@
- {{"SMARTDEVICES"|translate}} + {{"SMART_DEVICES"|translate}}

diff --git a/src/views/personal/questionnaires/answeredQuestionnaire.html b/src/views/personal/questionnaires/answeredQuestionnaire.html index f314b6b75..4c14bf8ed 100644 --- a/src/views/personal/questionnaires/answeredQuestionnaire.html +++ b/src/views/personal/questionnaires/answeredQuestionnaire.html @@ -14,7 +14,7 @@ - +
{{vm.questionna
diff --git a/src/views/personal/questionnaires/questionnaires.html b/src/views/personal/questionnaires/questionnaires.html index 187868a4c..a92cc5d02 100644 --- a/src/views/personal/questionnaires/questionnaires.html +++ b/src/views/personal/questionnaires/questionnaires.html @@ -31,7 +31,7 @@ + loading-message="{{'LOADING_QUESTIONNAIRE'|translate}}">
@@ -291,7 +291,7 @@


diff --git a/src/views/personal/research/research-studies/individual-study.html b/src/views/personal/research/research-studies/individual-study.html index 16fb149a1..cdfd54916 100644 --- a/src/views/personal/research/research-studies/individual-study.html +++ b/src/views/personal/research/research-studies/individual-study.html @@ -38,7 +38,7 @@

{{stud.study["t ng-class="fontSizeDesc">
{{"EMAIL"|translate}}: {{stud.study["email"]}}

{{"PHONENUMBER"|translate}}:
{{"PHONE_NUMBER"|translate}}:
{{stud.study["phone"]|FormatPhoneNumber}}
x {{stud.study["phoneExt"]}} diff --git a/src/views/personal/test-results/test-results-by-datetime.html b/src/views/personal/test-results/test-results-by-datetime.html index c385bfb26..dcb84bf03 100755 --- a/src/views/personal/test-results/test-results-by-datetime.html +++ b/src/views/personal/test-results/test-results-by-datetime.html @@ -16,7 +16,7 @@ - +
diff --git a/src/views/personal/test-results/test-results-by-type.html b/src/views/personal/test-results/test-results-by-type.html index 9c05e6f1d..eeadaddb1 100755 --- a/src/views/personal/test-results/test-results-by-type.html +++ b/src/views/personal/test-results/test-results-by-type.html @@ -11,7 +11,7 @@ - +
diff --git a/src/views/personal/test-results/test-results.html b/src/views/personal/test-results/test-results.html index c70925186..4249b2962 100755 --- a/src/views/personal/test-results/test-results.html +++ b/src/views/personal/test-results/test-results.html @@ -30,12 +30,12 @@
-
{{'LAB_BYDATE'|translate}}
+
{{'LAB_BY_DATE'|translate}}
-
{{'LAB_BYTYPE'|translate}}
+
{{'LAB_BY_TYPE'|translate}}
diff --git a/src/views/personal/treatment-team-messages/team-messages.html b/src/views/personal/treatment-team-messages/team-messages.html index a097e46ae..940c33ac3 100644 --- a/src/views/personal/treatment-team-messages/team-messages.html +++ b/src/views/personal/treatment-team-messages/team-messages.html @@ -5,7 +5,7 @@ --> - + @@ -40,6 +40,6 @@
-

{{"NOTEAMMESSAGES"|translate}}

+

{{"NO_TEAM_MESSAGES"|translate}}

diff --git a/src/views/settings/caregivers.html b/src/views/settings/caregivers.html index a6ae56c81..994c89250 100644 --- a/src/views/settings/caregivers.html +++ b/src/views/settings/caregivers.html @@ -14,7 +14,7 @@ - +
diff --git a/src/views/settings/settings.html b/src/views/settings/settings.html index 203a407ad..fd515b10c 100644 --- a/src/views/settings/settings.html +++ b/src/views/settings/settings.html @@ -56,7 +56,7 @@
{{"PREFERENCES"|translate}}
- + {{"LANGUAGE"|translate}} {{Ctrl.Language}} @@ -66,7 +66,7 @@ - {{"SIGNOUT"|translate}} + {{"SIGN_OUT"|translate}} diff --git a/src/views/settings/update-account-field.html b/src/views/settings/update-account-field.html index 65f56e0e4..80abdecde 100644 --- a/src/views/settings/update-account-field.html +++ b/src/views/settings/update-account-field.html @@ -17,14 +17,14 @@ ng-minlength="1" type="password" ng-class="fontSizeDesc" - placeholder="{{'ENTEROLDPASSWORDPLACEHOLDER' | translate}}" + placeholder="{{'ENTER_OLD_PASSWORD_PLACEHOLDER' | translate}}" ng-model="Ctrl.oldValue" ng-change="Ctrl.passwordFieldChange()">

-

{{"RESETINSTRUCTIONS" | translate}}

+

{{"RESET_INSTRUCTIONS" | translate}}

@@ -34,7 +34,7 @@ type="password" ng-class="fontSizeDesc" class="style-4" - placeholder="{{'SETNEWPASSWORDPLACEHOLDER' | translate}}" + placeholder="{{'SET_NEW_PASSWORD_PLACEHOLDER' | translate}}" ng-model="Ctrl.newValue" ng-change="Ctrl.passwordFieldChange()"> @@ -55,7 +55,7 @@ type="password" ng-class="fontSizeDesc" class="style-4" - placeholder="{{'REENTERPASSWORDPLACEHOLDER' | translate}}" + placeholder="{{'REENTER_PASSWORD_PLACEHOLDER' | translate}}" ng-model="Ctrl.newValueValidate" ng-change="Ctrl.passwordFieldChange()"> @@ -65,7 +65,7 @@ diff --git a/src/views/settings/update-security-question.html b/src/views/settings/update-security-question.html index f6d621762..a8777b0a2 100644 --- a/src/views/settings/update-security-question.html +++ b/src/views/settings/update-security-question.html @@ -8,19 +8,19 @@ - +
-

{{"SELECT_3_SECURITY_QUESTIONS"|translate}}

+

{{"SECURITY_QUESTIONS_INSTRUCTIONS"|translate}}

{{"SECURITY_QUESTION_LOGOUT_WARNING"|translate}}


-

{{"ENTERPASSWORD"|translate}}

+

{{"ENTER_PASSWORD"|translate}}

diff --git a/src/views/smartdevices/devices/etekcity_scale.html b/src/views/smartdevices/devices/etekcity_scale.html index e53bfe42c..e6db8b21d 100644 --- a/src/views/smartdevices/devices/etekcity_scale.html +++ b/src/views/smartdevices/devices/etekcity_scale.html @@ -5,7 +5,7 @@ --> - + @@ -20,24 +20,24 @@
-

{{ "SMARTDEVICES_SCALE_INSTRUCTIONS" | translate }}

+

{{ "SMART_DEVICES_SCALE_INSTRUCTIONS" | translate }}

- +
-

{{ "SMARTDEVICES_WEIGHT" | translate }}

+

{{ "SMART_DEVICES_WEIGHT" | translate }}

{{ ctrl.weight }}kg

@@ -48,21 +48,21 @@ -->
-

{{ "SMARTDEVICES_SCALE_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_INFO_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_SCALE_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_INFO_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_MULTIPLE" | translate }}

+

{{ "SMART_DEVICES_MULTIPLE" | translate }}

@@ -78,7 +78,7 @@
diff --git a/src/views/smartdevices/devices/vitaltracer_watch.html b/src/views/smartdevices/devices/vitaltracer_watch.html index 841c000b1..d5ddbca37 100644 --- a/src/views/smartdevices/devices/vitaltracer_watch.html +++ b/src/views/smartdevices/devices/vitaltracer_watch.html @@ -5,7 +5,7 @@ --> - + @@ -22,18 +22,18 @@
- +
-

{{ "SMARTDEVICES_VITAL_SIGNS" | translate }}

+

{{ "SMART_DEVICES_VITAL_SIGNS" | translate }}

{{ ctrl.heartRate }}bpm {{ ctrl.bloodPressureSystolic }} / {{ ctrl.bloodPressureDiastolic }}mm Hg @@ -44,16 +44,16 @@

-

{{ "SMARTDEVICES_VITALTRACER_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_INFO_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_VITALTRACER_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_INFO_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_MULTIPLE" | translate }}

+

{{ "SMART_DEVICES_MULTIPLE" | translate }}

@@ -69,7 +69,7 @@
diff --git a/src/views/smartdevices/devices/xiaomi_scale.html b/src/views/smartdevices/devices/xiaomi_scale.html index 346c62ee2..1e1dac35c 100644 --- a/src/views/smartdevices/devices/xiaomi_scale.html +++ b/src/views/smartdevices/devices/xiaomi_scale.html @@ -5,7 +5,7 @@ --> - + @@ -20,24 +20,24 @@
-

{{ "SMARTDEVICES_SCALE_INSTRUCTIONS" | translate }}

+

{{ "SMART_DEVICES_SCALE_INSTRUCTIONS" | translate }}

- +
-

{{ "SMARTDEVICES_WEIGHT" | translate }}

+

{{ "SMART_DEVICES_WEIGHT" | translate }}

{{ ctrl.weight }}kg

@@ -48,21 +48,21 @@ -->
-

{{ "SMARTDEVICES_SCALE_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_INFO_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_SCALE_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_INFO_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_MULTIPLE" | translate }}

+

{{ "SMART_DEVICES_MULTIPLE" | translate }}

@@ -78,7 +78,7 @@

diff --git a/src/views/smartdevices/smartdevices-info.html b/src/views/smartdevices/smartdevices-info.html index 3e5717bb8..6e7ed5a59 100644 --- a/src/views/smartdevices/smartdevices-info.html +++ b/src/views/smartdevices/smartdevices-info.html @@ -5,11 +5,11 @@ --> - +
- {{'SMARTDEVICES_LIST_INFO'|translate}} + {{'SMART_DEVICES_LIST_INFO'|translate}}
diff --git a/src/views/smartdevices/smartdevices.html b/src/views/smartdevices/smartdevices.html index f08236a12..e3bd811f0 100644 --- a/src/views/smartdevices/smartdevices.html +++ b/src/views/smartdevices/smartdevices.html @@ -5,7 +5,7 @@ --> - + @@ -17,15 +17,15 @@
-

{{"SMARTDEVICES_BLUETOOTH_DISABLED"|translate}}

-

{{"SMARTDEVICES_BLUETOOTH_PROMPT"|translate}}

+

{{"SMART_DEVICES_BLUETOOTH_DISABLED"|translate}}

+

{{"SMART_DEVICES_BLUETOOTH_PROMPT"|translate}}

-

{{"SMARTDEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

+

{{"SMART_DEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

@@ -41,7 +41,7 @@

{{"SMARTDEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

style="color:red; display: inline-block">
-

{{"SMARTDEVICES_VITALTRACER"|translate}}

+

{{"SMART_DEVICES_VITALTRACER"|translate}}

@@ -55,7 +55,7 @@

{{"SMARTDEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

style="color:red; display: inline-block">
-

{{"SMARTDEVICES_ETEKCITY"|translate}}

+

{{"SMART_DEVICES_ETEKCITY"|translate}}

@@ -69,7 +69,7 @@

{{"SMARTDEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

style="color:red; display: inline-block">
-

{{"SMARTDEVICES_XIAOMI_SCALE"|translate}}

+

{{"SMART_DEVICES_XIAOMI_SCALE"|translate}}

diff --git a/src/views/tabs/tabs.html b/src/views/tabs/tabs.html index ee839ba75..d82f87db8 100644 --- a/src/views/tabs/tabs.html +++ b/src/views/tabs/tabs.html @@ -15,7 +15,7 @@
-
{{"MYCHART"|translate}}
+
{{"CHART"|translate}}
diff --git a/webpack.config.js b/webpack.config.js index 7b4d6332d..b4df24359 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -42,10 +42,10 @@ const config = env => { const OPAL_ENV_FOLDER = path.join(__dirname, (OPAL_ENV) ? `./env/${OPAL_ENV}` : './'); // Read environment settings from opal.config.js - let requiredSettingNames = ["externalContentFileURL", "serviceStatusURL", "useSourceMap", "webpackMode"]; + let requiredSettingNames = ['externalContentFileURL', 'serviceStatusURL', 'supportedLanguages', 'useSourceMap', 'webpackMode']; let settings = {}; requiredSettingNames.forEach(name => settings[name] = OpalEnv.getEnvSetting(name, OPAL_ENV)); - console.log("Environment settings:", settings); + console.log("Required environment settings:", settings); // Check whether to minimize the output (default = true) let minimize;