diff --git a/.devcontainer/mobile/container-compose-overrides.yml b/.devcontainer/mobile/container-compose-overrides.yml index d6cd95018f..99e41cbece 100644 --- a/.devcontainer/mobile/container-compose-overrides.yml +++ b/.devcontainer/mobile/container-compose-overrides.yml @@ -6,28 +6,35 @@ services: - IMMICH_SERVER_URL=http://127.0.0.1:2283/ volumes: !override # bind mount host to /workspaces/immich - ..:/workspaces/immich - - cli_node_modules:/workspaces/immich/cli/node_modules - - e2e_node_modules:/workspaces/immich/e2e/node_modules - - open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules - - server_node_modules:/workspaces/immich/server/node_modules - - web_node_modules:/workspaces/immich/web/node_modules - - ${UPLOAD_LOCATION}/photos:/data + - ${UPLOAD_LOCATION:-upload-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/data + - pnpm-store:/usr/src/app/.pnpm-store + - server-node_modules:/usr/src/app/server/node_modules + - web-node_modules:/usr/src/app/web/node_modules + - github-node_modules:/usr/src/app/.github/node_modules + - cli-node_modules:/usr/src/app/cli/node_modules + - docs-node_modules:/usr/src/app/docs/node_modules + - e2e-node_modules:/usr/src/app/e2e/node_modules + - sdk-node_modules:/usr/src/app/open-api/typescript-sdk/node_modules + - app-node_modules:/usr/src/app/node_modules + - sveltekit:/usr/src/app/web/.svelte-kit + - coverage:/usr/src/app/web/coverage - /etc/localtime:/etc/localtime:ro - + immich-web: + env_file: !reset [] + immich-machine-learning: + env_file: !reset [] database: + env_file: !reset [] + environment: !override + POSTGRES_PASSWORD: ${DB_PASSWORD-postgres} + POSTGRES_USER: ${DB_USERNAME-postgres} + POSTGRES_DB: ${DB_DATABASE_NAME-immich} + POSTGRES_INITDB_ARGS: '--data-checksums' + POSTGRES_HOST_AUTH_METHOD: md5 volumes: - - ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data - + - ${UPLOAD_LOCATION:-postgres-devcontainer-volume}${UPLOAD_LOCATION:+/postgres}:/var/lib/postgresql/data + redis: + env_file: !reset [] volumes: - # Node modules for each service to avoid conflicts and ensure consistent dependencies - cli_node_modules: - e2e_node_modules: - open_api_node_modules: - server_node_modules: - web_node_modules: - - # UPLOAD_LOCATION must be set to a absolute path or vol-upload - vol-upload: - - # DB_DATA_LOCATION must be set to a absolute path or vol-database - vol-database: + upload-devcontainer-volume: + postgres-devcontainer-volume: diff --git a/.devcontainer/mobile/devcontainer.json b/.devcontainer/mobile/devcontainer.json index 0dbcc8e9c8..140a2ecac3 100644 --- a/.devcontainer/mobile/devcontainer.json +++ b/.devcontainer/mobile/devcontainer.json @@ -40,7 +40,7 @@ "userEnvProbe": "loginInteractiveShell", "remoteEnv": { // The location where your uploaded files are stored - "UPLOAD_LOCATION": "${localEnv:UPLOAD_LOCATION:./Library}", + "UPLOAD_LOCATION": "${localEnv:UPLOAD_LOCATION:./library}", // Connection secret for postgres. You should change it to a random password // Please use only the characters `A-Za-z0-9`, without special characters or spaces "DB_PASSWORD": "${localEnv:DB_PASSWORD:postgres}", diff --git a/.github/.nvmrc b/.github/.nvmrc index e2228113dd..442c7587a9 100644 --- a/.github/.nvmrc +++ b/.github/.nvmrc @@ -1 +1 @@ -22.19.0 +22.20.0 diff --git a/.github/workflows/build-mobile.yml b/.github/workflows/build-mobile.yml index 0996c8eccb..f7e9ad5731 100644 --- a/.github/workflows/build-mobile.yml +++ b/.github/workflows/build-mobile.yml @@ -55,7 +55,7 @@ jobs: runs-on: mich steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: ref: ${{ inputs.ref || github.sha }} persist-credentials: false @@ -66,14 +66,14 @@ jobs: working-directory: ./mobile run: printf "%s" $KEY_JKS | base64 -d > android/key.jks - - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 + - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: 'zulu' java-version: '17' - name: Restore Gradle Cache id: cache-gradle-restore - uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: | ~/.gradle/caches @@ -130,7 +130,7 @@ jobs: - name: Save Gradle Cache id: cache-gradle-save - uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 if: github.ref == 'refs/heads/main' with: path: | diff --git a/.github/workflows/cache-cleanup.yml b/.github/workflows/cache-cleanup.yml index cdff8ed931..0b4366ba04 100644 --- a/.github/workflows/cache-cleanup.yml +++ b/.github/workflows/cache-cleanup.yml @@ -19,7 +19,7 @@ jobs: actions: write steps: - name: Check out code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false diff --git a/.github/workflows/cli.yml b/.github/workflows/cli.yml index 777f1898ec..1483b4312b 100644 --- a/.github/workflows/cli.yml +++ b/.github/workflows/cli.yml @@ -29,7 +29,7 @@ jobs: working-directory: ./cli steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -37,7 +37,7 @@ jobs: uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './cli/.nvmrc' registry-url: 'https://registry.npmjs.org' @@ -50,7 +50,7 @@ jobs: - run: pnpm install --frozen-lockfile - run: pnpm build - - run: pnpm publish + - run: pnpm publish --no-git-checks if: ${{ github.event_name == 'release' }} env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} @@ -65,7 +65,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -76,7 +76,7 @@ jobs: uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 - name: Login to GitHub Container Registry - uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 + uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 if: ${{ !github.event.pull_request.head.repo.fork }} with: registry: ghcr.io diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 503dd30d9a..cb50b650e2 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,13 +44,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 + uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -63,7 +63,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 + uses: github/codeql-action/autobuild@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -76,6 +76,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 + uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 with: category: '/language:${{matrix.language}}' diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 09528346fc..7a63fcc881 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -53,7 +53,7 @@ jobs: suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn'] steps: - name: Login to GitHub Container Registry - uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 + uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -82,7 +82,7 @@ jobs: suffix: [''] steps: - name: Login to GitHub Container Registry - uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 + uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 with: registry: ghcr.io username: ${{ github.repository_owner }} diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml index 0879c30386..1a29bebe47 100644 --- a/.github/workflows/docs-build.yml +++ b/.github/workflows/docs-build.yml @@ -47,7 +47,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -55,7 +55,7 @@ jobs: uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './docs/.nvmrc' cache: 'pnpm' diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index b504b811e3..6643c5abfd 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -20,7 +20,7 @@ jobs: run: echo 'The triggering workflow did not succeed' && exit 1 - name: Get artifact id: get-artifact - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ @@ -38,7 +38,7 @@ jobs: return { found: true, id: matchArtifact.id }; - name: Determine deploy parameters id: parameters - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: HEAD_SHA: ${{ github.event.workflow_run.head_sha }} with: @@ -108,13 +108,13 @@ jobs: if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }} steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Load parameters id: parameters - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: PARAM_JSON: ${{ needs.checks.outputs.parameters }} with: @@ -125,7 +125,7 @@ jobs: core.setOutput("shouldDeploy", parameters.shouldDeploy); - name: Download artifact - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: ARTIFACT_JSON: ${{ needs.checks.outputs.artifact }} with: diff --git a/.github/workflows/docs-destroy.yml b/.github/workflows/docs-destroy.yml index 37653c0990..c4b9a9fff3 100644 --- a/.github/workflows/docs-destroy.yml +++ b/.github/workflows/docs-destroy.yml @@ -14,7 +14,7 @@ jobs: pull-requests: write steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false diff --git a/.github/workflows/fix-format.yml b/.github/workflows/fix-format.yml index 849de79a47..1c57828b0c 100644 --- a/.github/workflows/fix-format.yml +++ b/.github/workflows/fix-format.yml @@ -22,7 +22,7 @@ jobs: private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: 'Checkout' - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: ref: ${{ github.event.pull_request.head.ref }} token: ${{ steps.generate-token.outputs.token }} @@ -32,7 +32,7 @@ jobs: uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './server/.nvmrc' cache: 'pnpm' @@ -48,7 +48,7 @@ jobs: message: 'chore: fix formatting' - name: Remove label - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 if: always() with: script: | diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index ad73c78cf8..af92a3e215 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -11,4 +11,4 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 + - uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1 diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 8b6dc0af1c..69934b953b 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -55,20 +55,20 @@ jobs: private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Checkout - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: token: ${{ steps.generate-token.outputs.token }} persist-credentials: true ref: main - name: Install uv - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2 + uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0 - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './server/.nvmrc' cache: 'pnpm' @@ -117,13 +117,13 @@ jobs: private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} - name: Checkout - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: token: ${{ steps.generate-token.outputs.token }} persist-credentials: false - name: Download APK - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: release-apk-signed diff --git a/.github/workflows/preview-label.yaml b/.github/workflows/preview-label.yaml index 1d9a0060ad..594214f820 100644 --- a/.github/workflows/preview-label.yaml +++ b/.github/workflows/preview-label.yaml @@ -24,7 +24,7 @@ jobs: permissions: pull-requests: write steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | github.rest.issues.removeLabel({ diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 460e7da4a7..a0d89be598 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -16,7 +16,7 @@ jobs: run: working-directory: ./open-api/typescript-sdk steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -24,7 +24,7 @@ jobs: uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 # Setup .npmrc file to publish to npm - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './open-api/typescript-sdk/.nvmrc' registry-url: 'https://registry.npmjs.org' @@ -35,6 +35,6 @@ jobs: - name: Build run: pnpm build - name: Publish - run: pnpm publish + run: pnpm publish --no-git-checks env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/static_analysis.yml b/.github/workflows/static_analysis.yml index d30f95422c..3e7223be74 100644 --- a/.github/workflows/static_analysis.yml +++ b/.github/workflows/static_analysis.yml @@ -42,7 +42,7 @@ jobs: working-directory: ./mobile steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ffc5b41f73..0180333309 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -56,13 +56,13 @@ jobs: working-directory: ./server steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './server/.nvmrc' cache: 'pnpm' @@ -93,13 +93,13 @@ jobs: working-directory: ./cli steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './cli/.nvmrc' cache: 'pnpm' @@ -133,13 +133,13 @@ jobs: working-directory: ./cli steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './cli/.nvmrc' cache: 'pnpm' @@ -168,13 +168,13 @@ jobs: working-directory: ./web steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './web/.nvmrc' cache: 'pnpm' @@ -185,7 +185,7 @@ jobs: - name: Run pnpm install run: pnpm rebuild && pnpm install --frozen-lockfile - name: Run linter - run: pnpm lint:p + run: pnpm lint if: ${{ !cancelled() }} - name: Run formatter run: pnpm format @@ -205,13 +205,13 @@ jobs: working-directory: ./web steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './web/.nvmrc' cache: 'pnpm' @@ -236,13 +236,13 @@ jobs: contents: read steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './web/.nvmrc' cache: 'pnpm' @@ -277,13 +277,13 @@ jobs: working-directory: ./e2e steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './e2e/.nvmrc' cache: 'pnpm' @@ -316,13 +316,13 @@ jobs: working-directory: ./server steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './server/.nvmrc' cache: 'pnpm' @@ -347,14 +347,14 @@ jobs: runner: [ubuntu-latest, ubuntu-24.04-arm] steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false submodules: 'recursive' - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './e2e/.nvmrc' cache: 'pnpm' @@ -395,14 +395,14 @@ jobs: runner: [ubuntu-latest, ubuntu-24.04-arm] steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false submodules: 'recursive' - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './e2e/.nvmrc' cache: 'pnpm' @@ -441,7 +441,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup Flutter SDK @@ -466,12 +466,12 @@ jobs: run: working-directory: ./machine-learning steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Install uv - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 # TODO: add caching when supported (https://github.com/actions/setup-python/pull/818) # with: # python-version: 3.11 @@ -503,13 +503,13 @@ jobs: working-directory: ./.github steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './.github/.nvmrc' cache: 'pnpm' @@ -525,7 +525,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Run ShellCheck @@ -540,13 +540,13 @@ jobs: contents: read steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './server/.nvmrc' cache: 'pnpm' @@ -595,13 +595,13 @@ jobs: working-directory: ./server steps: - name: Checkout code - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - name: Setup Node - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version-file: './server/.nvmrc' cache: 'pnpm' diff --git a/.vscode/launch.json b/.vscode/launch.json index 0cc9b256ca..9ed2bb77b8 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -18,6 +18,20 @@ "name": "Immich Workers", "remoteRoot": "/usr/src/app/server", "localRoot": "${workspaceFolder}/server" + }, + { + "type": "node", + "request": "launch", + "name": "Immich CLI", + "program": "${workspaceFolder}/cli/dist/index.js", + "args": ["upload", "--help"], + "runtimeArgs": ["--enable-source-maps"], + "console": "integratedTerminal", + "resolveSourceMapLocations": ["${workspaceFolder}/cli/dist/**/*.js.map"], + "sourceMaps": true, + "outFiles": ["${workspaceFolder}/cli/dist/**/*.js"], + "skipFiles": ["/**"], + "preLaunchTask": "Build Immich CLI" } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 119d6a961b..478a46b4bd 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -5,6 +5,7 @@ "label": "Fix Permissions, Install Dependencies", "type": "shell", "command": "[ -f /immich-devcontainer/container-start.sh ] && /immich-devcontainer/container-start.sh || exit 0", + "isBackground": true, "presentation": { "echo": true, "reveal": "always", @@ -25,6 +26,7 @@ "dependsOn": ["Fix Permissions, Install Dependencies"], "type": "shell", "command": "[ -f /immich-devcontainer/container-start-backend.sh ] && /immich-devcontainer/container-start-backend.sh || exit 0", + "isBackground": true, "presentation": { "echo": true, "reveal": "always", @@ -45,6 +47,7 @@ "dependsOn": ["Fix Permissions, Install Dependencies"], "type": "shell", "command": "[ -f /immich-devcontainer/container-start-frontend.sh ] && /immich-devcontainer/container-start-frontend.sh || exit 0", + "isBackground": true, "presentation": { "echo": true, "reveal": "always", @@ -67,6 +70,11 @@ "runOn": "folderOpen" }, "problemMatcher": [] + }, + { + "label": "Build Immich CLI", + "type": "shell", + "command": "pnpm --filter cli build:dev" } ] } diff --git a/Makefile b/Makefile index 34fb408c41..fc99170676 100644 --- a/Makefile +++ b/Makefile @@ -91,8 +91,6 @@ format-%: pnpm --filter $(call map-package,$*) run format:fix lint-%: pnpm --filter $(call map-package,$*) run lint:fix -lint-web: - pnpm --filter $(call map-package,$*) run lint:p check-%: pnpm --filter $(call map-package,$*) run check check-web: diff --git a/README.md b/README.md index 459cda481c..b540408475 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -38,26 +39,25 @@ ภาษาไทย

-## Disclaimer -- ⚠️ The project is under **very active** development. -- ⚠️ Expect bugs and breaking changes. -- ⚠️ **Do not use the app as the only way to store your photos and videos.** -- ⚠️ Always follow [3-2-1](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) backup plan for your precious photos and videos! +> [!WARNING] +> ⚠️ Always follow [3-2-1](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) backup plan for your precious photos and videos! +> + > [!NOTE] > You can find the main documentation, including installation guides, at https://immich.app/. ## Links -- [Documentation](https://immich.app/docs) -- [About](https://immich.app/docs/overview/introduction) -- [Installation](https://immich.app/docs/install/requirements) +- [Documentation](https://docs.immich.app/) +- [About](https://docs.immich.app/overview/introduction) +- [Installation](https://docs.immich.app/install/requirements) - [Roadmap](https://immich.app/roadmap) - [Demo](#demo) - [Features](#features) -- [Translations](https://immich.app/docs/developer/translations) -- [Contributing](https://immich.app/docs/overview/support-the-project) +- [Translations](https://docs.immich.app/developer/translations) +- [Contributing](https://docs.immich.app/overview/support-the-project) ## Demo @@ -106,7 +106,7 @@ Access the demo [here](https://demo.immich.app). For the mobile app, you can use ## Translations -Read more about translations [here](https://immich.app/docs/developer/translations). +Read more about translations [here](https://docs.immich.app/developer/translations). Translation status diff --git a/cli/.nvmrc b/cli/.nvmrc index e2228113dd..442c7587a9 100644 --- a/cli/.nvmrc +++ b/cli/.nvmrc @@ -1 +1 @@ -22.19.0 +22.20.0 diff --git a/cli/README.md b/cli/README.md index 8fa2ace483..b9d61fce09 100644 --- a/cli/README.md +++ b/cli/README.md @@ -1,30 +1,38 @@ A command-line interface for interfacing with the self-hosted photo manager [Immich](https://immich.app/). -Please see the [Immich CLI documentation](https://immich.app/docs/features/command-line-interface). +Please see the [Immich CLI documentation](https://docs.immich.app/features/command-line-interface). # For developers Before building the CLI, you must build the immich server and the open-api client. To build the server run the following in the server folder: - $ npm install - $ npm run build + $ pnpm install + $ pnpm run build Then, to build the open-api client run the following in the open-api folder: $ ./bin/generate-open-api.sh -To run the Immich CLI from source, run the following in the cli folder: +## Run from build - $ npm install - $ npm run build - $ ts-node . +Go to the cli folder and build it: -You'll need ts-node, the easiest way to install it is to use npm: + $ pnpm install + $ pnpm run build + $ node dist/index.js - $ npm i -g ts-node +## Run and Debug from source (VSCode) + +With VScode you can run and debug the Immich CLI. Go to the launch.json file, find the Immich CLI config and change this with the command you need to debug + +`"args": ["upload", "--help"],` + +replace that for the command of your choice. + +## Install from build You can also build and install the CLI using - $ npm run build - $ npm install -g . + $ pnpm run build + $ pnpm install -g . **** diff --git a/cli/package.json b/cli/package.json index d2ae9063b4..3fff0c1031 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.2.94", + "version": "2.2.96", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", @@ -20,7 +20,7 @@ "@types/lodash-es": "^4.17.12", "@types/micromatch": "^4.0.9", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.18.1", + "@types/node": "^22.18.8", "@vitest/coverage-v8": "^3.0.0", "byte-size": "^9.0.0", "cli-progress": "^3.12.0", @@ -43,6 +43,7 @@ }, "scripts": { "build": "vite build", + "build:dev": "vite build --sourcemap true", "lint": "eslint \"src/**/*.ts\" --max-warnings 0", "lint:fix": "npm run lint -- --fix", "prepack": "npm run build", @@ -68,6 +69,6 @@ "micromatch": "^4.0.8" }, "volta": { - "node": "22.19.0" + "node": "22.20.0" } } diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index bd41ed8d62..eba1f632c1 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -1,5 +1,5 @@ # -# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose +# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose # # Make sure to use the docker-compose.yml of the current release: # @@ -8,8 +8,8 @@ # The compose file on main may not be compatible with the latest release. # For development see: -# - https://immich.app/docs/developer/setup -# - https://immich.app/docs/developer/troubleshooting +# - https://docs.immich.app/developer/setup +# - https://docs.immich.app/developer/troubleshooting name: immich-dev @@ -55,8 +55,8 @@ services: IMMICH_BUILD_IMAGE_URL: https://github.com/immich-app/immich/pkgs/container/immich-server IMMICH_THIRD_PARTY_SOURCE_URL: https://github.com/immich-app/immich/ IMMICH_THIRD_PARTY_BUG_FEATURE_URL: https://github.com/immich-app/immich/issues - IMMICH_THIRD_PARTY_DOCUMENTATION_URL: https://immich.app/docs - IMMICH_THIRD_PARTY_SUPPORT_URL: https://immich.app/docs/community-guides + IMMICH_THIRD_PARTY_DOCUMENTATION_URL: https://docs.immich.app + IMMICH_THIRD_PARTY_SUPPORT_URL: https://docs.immich.app/community-guides ulimits: nofile: soft: 1048576 diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml index dcdfc72c82..e27012cf56 100644 --- a/docker/docker-compose.prod.yml +++ b/docker/docker-compose.prod.yml @@ -1,5 +1,5 @@ # -# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose +# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose # # Make sure to use the docker-compose.yml of the current release: # diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index c3ded93ba9..b4ff05f366 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,5 +1,5 @@ # -# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose +# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose # # Make sure to use the docker-compose.yml of the current release: # @@ -36,7 +36,7 @@ services: # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. # Example tag: ${IMMICH_VERSION:-release}-cuda image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} - # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration + # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: diff --git a/docker/example.env b/docker/example.env index 0450dc0805..6d6fd1e3fe 100644 --- a/docker/example.env +++ b/docker/example.env @@ -1,4 +1,4 @@ -# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables +# You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=./library diff --git a/docker/hwaccel.ml.yml b/docker/hwaccel.ml.yml index 111202d022..c95ac7ee4c 100644 --- a/docker/hwaccel.ml.yml +++ b/docker/hwaccel.ml.yml @@ -4,7 +4,7 @@ # you can inline the config for a backend by copying its contents # into the immich-machine-learning service in the docker-compose.yml file. -# See https://immich.app/docs/features/ml-hardware-acceleration for info on usage. +# See https://docs.immich.app/features/ml-hardware-acceleration for info on usage. services: armnn: diff --git a/docker/hwaccel.transcoding.yml b/docker/hwaccel.transcoding.yml index 60ee7e8fa3..0857faf465 100644 --- a/docker/hwaccel.transcoding.yml +++ b/docker/hwaccel.transcoding.yml @@ -4,7 +4,7 @@ # you can inline the config for a backend by copying its contents # into the immich-microservices service in the docker-compose.yml file. -# See https://immich.app/docs/features/hardware-transcoding for more info on using hardware transcoding. +# See https://docs.immich.app/features/hardware-transcoding for more info on using hardware transcoding. services: cpu: {} diff --git a/docs/.nvmrc b/docs/.nvmrc index e2228113dd..442c7587a9 100644 --- a/docs/.nvmrc +++ b/docs/.nvmrc @@ -1 +1 @@ -22.19.0 +22.20.0 diff --git a/docs/docs/administration/jobs-workers.md b/docs/docs/administration/jobs-workers.md index 75f50599a0..8ed3ba2694 100644 --- a/docs/docs/administration/jobs-workers.md +++ b/docs/docs/administration/jobs-workers.md @@ -55,3 +55,19 @@ Additionally, some jobs (such as memories generation) run on a schedule, which i :::note Some jobs ([External Libraries](/features/libraries) scanning, Database Dump) are configured in their own sections in System Settings. ::: + +## Job processing order + +The below diagram shows the job run order for newly uploaded files + +```mermaid +graph TD + A[Asset Upload] --> B[Metadata Extraction] + B --> C[Storage Template Migration] + C --> D["Thumbnail Generation (Large, small, blurred and person)"] + D --> E[Smart Search] + D --> F[Face Detection] + D --> G[Video Transcoding] + E --> H[Duplicate Detection] + F --> I[Facial Recognition] +``` diff --git a/docs/docs/features/libraries.md b/docs/docs/features/libraries.md index 08f37c6821..9f1cef0bc4 100644 --- a/docs/docs/features/libraries.md +++ b/docs/docs/features/libraries.md @@ -1,5 +1,9 @@ # External Libraries +:::info +Currently an external library can only belong to a single user which is selected when the library is initially created. +::: + External libraries track assets stored in the filesystem outside of Immich. When the external library is scanned, Immich will load videos and photos from disk and create the corresponding assets. These assets will then be shown in the main timeline, and they will look and behave like any other asset, including viewing on the map, adding to albums, etc. Later, if a file is modified outside of Immich, you need to scan the library for the changes to show up. If an external asset is deleted from disk, Immich will move it to trash on rescan. To restore the asset, you need to restore the original file. After 30 days the file will be removed from trash, and any changes to metadata within Immich will be lost. diff --git a/docs/docs/guides/external-library.md b/docs/docs/guides/external-library.md index ef467159e7..8ff45f2806 100644 --- a/docs/docs/guides/external-library.md +++ b/docs/docs/guides/external-library.md @@ -21,6 +21,10 @@ Restart Immich by running `docker compose up -d`. # Create the library +:::info +External library management requires administrator access and the steps below assume you are using an admin account. +::: + In the Immich web UI: - click the **Administration** link in the upper right corner. diff --git a/docs/docs/install/one-click.md b/docs/docs/install/one-click.md new file mode 100644 index 0000000000..53fcb20d21 --- /dev/null +++ b/docs/docs/install/one-click.md @@ -0,0 +1,32 @@ +--- +sidebar_position: 65 +--- + +# One-Click [Cloud Service] + +:::note +This version of Immich is provided via cloud service providers' one-click marketplaces. Hosting costs are set by the cloud service providers. +Support for these are provided by the individual cloud service providers. + +**Please report issues to the corresponding [Github Repository][github].** +::: + +## Installation + +Go to the provider's marketplace and choose Immich, then follow the provided instructions. + +## One-Click Immich marketplace providers + +### DigitalOcean + +https://marketplace.digitalocean.com/apps/immich + +### Vultr + +https://www.vultr.com/marketplace/apps/immich + +## Issues + +For issues, open an issue on the associated [GitHub Repository][github]. + +[github]: https://github.com/immich-app/immich/ diff --git a/docs/docs/install/synology.md b/docs/docs/install/synology.md index 463b9bde3c..6cf90b1619 100644 --- a/docs/docs/install/synology.md +++ b/docs/docs/install/synology.md @@ -16,7 +16,7 @@ Immich can easily be installed on a Synology NAS using Container Manager within ## Step 1 - Download the required files -Create a directory of your choice (e.g. `./immich-app`) to house Immich. In general, it's a best practice to have all Docker-based applications running under the `./docker` directory, so in this case, your directory structure will look like `./docker/immich-app`. +Create a directory of your choice (e.g. `./immich-app`) to house Immich. In general, it's best practice to have all Docker-based applications running under the `./docker` directory, so in this case, your directory structure will look like `./docker/immich-app`. Now create a `./postgres` and `./library` directory as sub-directories of the `./docker/immich-app`. @@ -25,7 +25,7 @@ When you're all done, you should have the following: - `./docker/immich-app/postgres` - `./docker/immich-app/library` -Download [`docker-compose.yml`](https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml) and [`example.env`](https://github.com/immich-app/immich/releases/latest/download/example.env) to your computer. Upload the files to the `./docker/immich-app` directory, and rename `example.env` to `.env`. +Download [`docker-compose.yml`](https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml) and [`example.env`](https://github.com/immich-app/immich/releases/latest/download/example.env) to your computer. Upload the files to the `./docker/immich-app` directory, and rename `example.env` to `.env`. Note: If you plan to use the Synology Text editor to edit the `.env` file on the NAS within File Station, you will need to rename it to a temporary name (e.g. `example.txt`) in order to see 'Open with Text Editor' in the file context menu. Once saved, rename it back to `.env`. ## Step 2 - Populate the .env file with custom values @@ -34,23 +34,23 @@ Follow [Step 2 in Docker Compose](/install/docker-compose#step-2---populate-the- ## Step 3 - Create a new project in Container Manager Open Container Manager, and select the "**Project**" action on the left navigation bar and then click "**Create**". -![Create Project](../../static/img/synology-container-manager-create-project.png) +![Create project](../../static/img/synology-container-manager-create-project.png) In the settings of your new project, set "**Project name**" to a name you'll remember, such as _immich-app_. When setting the "**Path**", select the `./docker/immich-app` directory you created earlier. Doing so will prompt a message to use the existing `docker-compose.yml` already present in the directory for your project. Click "**OK**" to continue. -![Set Path](../../static/img/synology-container-manager-set-path.png) +![Set path](../../static/img/synology-container-manager-set-path.png) -The following screen will give you the option to further customize your `docker-compose.yml` file, giving you a warning regarding the `start_interval` property. Under the `healthcheck` heading, remove the `start_interval: 30s` completely and click "**Next**". +The following screen will give you the option to further customize your `docker-compose.yml` file. Take note of `DB_STORAGE_TYPE: 'HDD'`and uncomment if applicable for your Synology setup. -![start interval](../../static/img/synology-container-manager-customize-docker-compose.png) +![DB storage](../../static/img/synology-container-manager-customize-docker-compose.png) Skip the section asking to set-up a portal for Web Station, and then complete the wizard which will build and start the containers for your project. Once your containers are successfully running, navigate to the "**Container**" section of Container Manager, right-click on the "**immich-server**" container, and choose the "**Details**". -Scroll to the bottom of the "**Details**" section, and find the `IP Address` of the container, located in the `Network` section. Take note of the container's IP address as you will need it for **Step 4**. +Scroll to the bottom of the "**Details**" section and find the `IP Address` listed in the `Network` section. Take note of the container's IP address as you will need it for **Step 4**. -![Container Details](../../static/img/synology-container-manager-container-details.png) +![Container details](../../static/img/synology-container-manager-container-details.png) ## Step 4 - Configure Firewall Settings @@ -63,8 +63,66 @@ Open "**Control Panel**" on your Synology NAS, and select "**Security**". Naviga Click "**Edit Rules**" and add the following firewall rules: - Add a "**Source IP**" rule for the IP address of your container that you obtained in Step 3 above + +![IP address rule](../../static/img/synology-ipaddress-firewall-rule.png) + - Add a "**Ports**" rule for the port specified in the `docker-compose.yml`, which should be `2283` +![Custom port rule](../../static/img/synology-custom-port-firewall-rule.png) + ## Next Steps Read the [Post Installation](/install/post-install.mdx) steps and [upgrade instructions](/install/upgrading.md). + +
+ Updating Immich using Container Manager +Check the post installation and upgrade instructions at the links above before proceeding with this section. + +## Step 1. Backup + +Ensure your photos and videos are backed up. Your `.env` settings will define where they are stored. There is no need to delete any files or folders within the `docker` folder when doing a release upgrade unless instructed in the release notes. + +## Step 2. Check release notes + +Always check the [release notes](https://github.com/immich-app/immich/releases) before proceeding with an update! + +## Step 3. Stop containers & clean up + +Open **Container Manager**. Select **Project** then your Immich app + +![Select project](../../static/img/synology-select-proj.png) + +Select **Stop** + +![Stop project](../../static/img/synology-project-stop.png) + +Select **Action** then **Clean**. This removes the containers. + +![Clean project](../../static/img/synology-action-clean.png) + +Go to **Image** and select **Remove Unused Images**. + +![Remove unused](../../static/img/synology-remove-unused.png) + +## Step 4. Build + +Go to **Project**, select **Action** then **Build**. This will download, unpack, install and start the containers. + +![Build](../../static/img/synology-build.png) + +## Step 5. Update firewall rule + +The default behavior is to automatically start the containers once installed. If `immich_server` runs for a few seconds and then stops, it may be because the firewall rule no longer matches the server IP address. + +Go to the **Container** section. Click on `immich_server` and scroll down on **General** to find the IP address. +![Container IP](../../static/img/synology-container-ip.png) + +Go to Synology **Control Panel**. Select **Security** and **Firewall**. + +![Firewall](../../static/img/synology-fw-rules.png) + +In this example, the IP addresses mismatch and the firewall rule needs to be edited to match above. + +![Edit IP](../../static/img/synology-fw-ipedit.png) + +
diff --git a/docs/docs/install/truenas.md b/docs/docs/install/truenas.md index 195651e8e2..9135b72fe6 100644 --- a/docs/docs/install/truenas.md +++ b/docs/docs/install/truenas.md @@ -387,27 +387,35 @@ To migrate from the old storage configuration to the new one, you will need to c 3. **Copy the data** from the old datasets to the new dataset. We advise using the `rsync` command to copy the data, as it will preserve the permissions and ownership of the files. The following commands are examples: ```bash -rsync -av /mnt/tank/immich/library/ /mnt/tank/immich/data/library/ -rsync -av /mnt/tank/immich/upload/ /mnt/tank/immich/data/upload/ -rsync -av /mnt/tank/immich/thumbs/ /mnt/tank/immich/data/thumbs/ -rsync -av /mnt/tank/immich/profile/ /mnt/tank/immich/data/profile/ -rsync -av /mnt/tank/immich/video/ /mnt/tank/immich/data/encoded-video/ -rsync -av /mnt/tank/immich/backups/ /mnt/tank/immich/data/backups/ +sudo rsync -av /mnt/tank/immich/library/ /mnt/tank/immich/data/library/ +sudo rsync -av /mnt/tank/immich/upload/ /mnt/tank/immich/data/upload/ +sudo rsync -av /mnt/tank/immich/thumbs/ /mnt/tank/immich/data/thumbs/ +sudo rsync -av /mnt/tank/immich/profile/ /mnt/tank/immich/data/profile/ +sudo rsync -av /mnt/tank/immich/video/ /mnt/tank/immich/data/encoded-video/ +sudo rsync -av /mnt/tank/immich/backups/ /mnt/tank/immich/data/backups/ ``` Make sure to replace `/mnt/tank/immich/` with the correct path to your old datasets and `/mnt/tank/immich/data/` with the correct path to your new dataset. :::tip -If you were using **ixVolume (dataset created automatically by the system)** for Immich data storage, the path to the data should be `/mnt/.ix-apps/app_mounts/immich/`. You have to use this path instead of `/mnt/tank/immich/` in the `rsync` command above, for example: +If you were using **ixVolume (dataset created automatically by the system)** for some of Immich data storage, the path to the data should be `/mnt/.ix-apps/app_mounts/immich/`. You have to use this path instead of `/mnt/tank/immich/` in the `rsync` command above, for example: ```bash -rsync -av /mnt/.ix-apps/app_mounts/immich/library/ /mnt/tank/immich/data/library/ +sudo rsync -av /mnt/.ix-apps/app_mounts/immich/library/ /mnt/tank/immich/data/library/ ``` +If you also were storing your files in the **ixVolume**, the **_upload_** folder is named `uploads` instead of `upload`, so the command to run should be: + +```bash +sudo rsync -av /mnt/.ix-apps/app_mounts/immich/uploads/ /mnt/tank/immich/data/upload/ +``` + +This means that depending on your old storage configuration, you might have to use a mix of paths in the `rsync` commands above. + If you were also using an ixVolume for Postgres data storage, you also should, first create the pgData dataset, as described in the [Setting up Storage Datasets](#setting-up-storage-datasets) section above, and then you can use the following command to copy the Postgres data: ```bash -rsync -av /mnt/.ix-apps/app_mounts/immich/pgData/ /mnt/tank/immich/pgData/ +sudo rsync -av /mnt/.ix-apps/app_mounts/immich/pgData/ /mnt/tank/immich/pgData/ ``` ::: @@ -416,7 +424,7 @@ rsync -av /mnt/.ix-apps/app_mounts/immich/pgData/ /mnt/tank/immich/pgData/ Make sure that for each folder, the `.immich` file is copied as well, as it contains important metadata for Immich. If for some reason the `.immich` file is not copied, you can copy it manually with the `rsync` command, for example: ```bash -rsync -av /mnt/tank/immich/library/.immich /mnt/tank/immich/data/library/ +sudo rsync -av /mnt/tank/immich/library/.immich /mnt/tank/immich/data/library/ ``` Replace `library` with the name of the folder where you are copying the file. @@ -437,38 +445,37 @@ This will recreate the Immich container with the new storage configuration and s If everything went well, you should now be able to access Immich with the new storage configuration. You can verify that the data has been copied correctly by checking the Immich web interface and ensuring that all your photos and videos are still available. You may delete the old datasets, if you no longer need them, using the TrueNAS web interface. +:::tip If you were using **ixVolume (dataset created automatically by the system)** or folders for Immich data storage, you can delete the old datasets using the following commands: ```bash -rm -r /mnt/.ix-apps/app_mounts/immich/library -rm -r /mnt/.ix-apps/app_mounts/immich/uploads -rm -r /mnt/.ix-apps/app_mounts/immich/thumbs -rm -r /mnt/.ix-apps/app_mounts/immich/profile -rm -r /mnt/.ix-apps/app_mounts/immich/video -rm -r /mnt/.ix-apps/app_mounts/immich/backups +sudo rm -r /mnt/.ix-apps/app_mounts/immich/* ``` +::: + - + To migrate from the old storage configuration to the new one without creating new datasets. + 1. **Stop the Immich app** from the TrueNAS web interface to ensure no data is being written while you are updating the app. -2. **Update the datasets permissions**: Ensure that the datasets used for Immich data storage (`library`, `upload`, `thumbs`, `profile`, `video`, `backups`) have the correct permissions set for the user who will run Immich. The user should have ***modify*** permissions on these datasets. The default user for Immich is `apps` (UID 568) and the default group is `apps` (GID 568). If you are using a different user, make sure to set the permissions accordingly. You can do this from the TrueNAS web interface by going to the **Datasets** screen, selecting each dataset, clicking on the **Edit** button next to **Permissions**, and adding the user with ***modify*** permissions. +2. **Update the datasets permissions**: Ensure that the datasets used for Immich data storage (`library`, `upload`, `thumbs`, `profile`, `video`, `backups`) have the correct permissions set for the user who will run Immich. The user should have **_modify_** permissions on these datasets. The default user for Immich is `apps` (UID 568) and the default group is `apps` (GID 568). If you are using a different user, make sure to set the permissions accordingly. You can do this from the TrueNAS web interface by going to the **Datasets** screen, selecting each dataset, clicking on the **Edit** button next to **Permissions**, and adding the user with **_modify_** permissions. 3. **Update the Immich app** to use the existing datasets: - - Go to the **Installed Applications** screen and select Immich from the list of installed applications. - - Click **Edit** on the **Application Info** widget. - - In the **Storage Configuration** section, untick the **Use Old Storage Configuration (Deprecated)** checkbox. - - For the **Data Storage**, you can keep the **ixVolume (dataset created automatically by the system)** as no data will be directly written to it. We recommend selecting **Host Path (Path that already exists on the system)** and then select a **new** dataset you created for Immich data storage, for example, `data`. - - For the **Postgres Data Storage**, keep **Host Path (Path that already exists on the system)** and then select the existing dataset you used for Postgres data storage, for example, `pgData`. - - Following the instructions in the [Multiple Datasets for Immich Storage](#additional-storage-advanced-users) section, you can add, **for each old dataset**, a new Additional Storage with the following settings: - - **Type**: `Host Path (Path that already exists on the system)` - - **Mount Path**: `/data/` (e.g. `/data/library`) - - **Host Path**: `/mnt//` (e.g. `/mnt/tank/immich/library`) - :::danger Ensure using the correct paths names - Make sure to replace `` with the actual name of the folder used by Immich: `library`, `upload`, `thumbs`, `profile`, `encoded-video`, and `backups`. Also, replace `` and `` with the actual names of your pool and dataset. - ::: - - **Read Only**: Keep it unticked as Immich needs to write to these datasets. - - Click **Update** at the bottom of the page to save changes. + - Go to the **Installed Applications** screen and select Immich from the list of installed applications. + - Click **Edit** on the **Application Info** widget. + - In the **Storage Configuration** section, untick the **Use Old Storage Configuration (Deprecated)** checkbox. + - For the **Data Storage**, you can keep the **ixVolume (dataset created automatically by the system)** as no data will be directly written to it. We recommend selecting **Host Path (Path that already exists on the system)** and then select a **new** dataset you created for Immich data storage, for example, `data`. + - For the **Postgres Data Storage**, keep **Host Path (Path that already exists on the system)** and then select the existing dataset you used for Postgres data storage, for example, `pgData`. + - Following the instructions in the [Multiple Datasets for Immich Storage](#additional-storage-advanced-users) section, you can add, **for each old dataset**, a new Additional Storage with the following settings: + - **Type**: `Host Path (Path that already exists on the system)` + - **Mount Path**: `/data/` (e.g. `/data/library`) + - **Host Path**: `/mnt//` (e.g. `/mnt/tank/immich/library`) + :::danger Ensure using the correct paths names + Make sure to replace `` with the actual name of the folder used by Immich: `library`, `upload`, `thumbs`, `profile`, `encoded-video`, and `backups`. Also, replace `` and `` with the actual names of your pool and dataset. + ::: + - **Read Only**: Keep it unticked as Immich needs to write to these datasets. + - Click **Update** at the bottom of the page to save changes. 4. **Start the Immich app** from the TrueNAS web interface. This will recreate the Immich container with the new storage configuration and start the app. If everything went well, you should now be able to access Immich with the new storage configuration. You can verify that the data is still available by checking the Immich web interface and ensuring that all your photos and videos are still accessible. diff --git a/docs/docs/install/upgrading.md b/docs/docs/install/upgrading.md index 305e61af57..da95222911 100644 --- a/docs/docs/install/upgrading.md +++ b/docs/docs/install/upgrading.md @@ -4,9 +4,7 @@ sidebar_position: 95 # Upgrading -:::danger Read the release notes -Immich is currently under heavy development, which means you can expect [breaking changes][breaking] and bugs. You should read the release notes prior to updating and take special care when using automated tools like [Watchtower][watchtower]. - +:::tip Breaking changes You can see versions that had breaking changes [here][breaking]. ::: diff --git a/docs/docs/partials/_server-backup.md b/docs/docs/partials/_server-backup.md index 34c93d78a1..34e09670e9 100644 --- a/docs/docs/partials/_server-backup.md +++ b/docs/docs/partials/_server-backup.md @@ -1,7 +1,6 @@ Now that you have imported some pictures, you should setup server backups to preserve your memories. You can do so by following our [backup guide](/administration/backup-and-restore.md). -:::danger -Immich is still under heavy development _and_ handles very important data. -It is essential that you set up good backups, and test them. +:::info +A 3-2-1 backup strategy is still crucial. The team has the responsibility to ensure that the application doesn’t cause loss of your precious memories; however, we cannot guarantee that hard drives will not fail, or an electrical event causes unexpected shutdown of your server/system, leading to data loss. Therefore, we still encourage users to follow best practices when safeguarding their data. Keep multiple copies of your most precious data: at least two local copies and one copy offsite in cold storage. ::: diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index d5bd02ca14..70e0189a00 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -65,11 +65,6 @@ const config = { themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ - announcementBar: { - id: 'site_announcement_immich', - content: `⚠️ The project is under very active development. Expect bugs and changes. Do not use it as the only way to store your photos and videos!`, - isCloseable: false, - }, docs: { sidebar: { autoCollapseCategories: false, diff --git a/docs/package.json b/docs/package.json index 151fe42e25..f45a4ec256 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,9 +17,9 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "~3.8.0", - "@docusaurus/preset-classic": "~3.8.0", - "@docusaurus/theme-common": "~3.8.0", + "@docusaurus/core": "~3.9.0", + "@docusaurus/preset-classic": "~3.9.0", + "@docusaurus/theme-common": "~3.9.0", "@mdi/js": "^7.3.67", "@mdi/react": "^1.6.1", "@mdx-js/react": "^3.0.0", @@ -35,7 +35,7 @@ "url": "^0.11.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "~3.8.0", + "@docusaurus/module-type-aliases": "~3.9.0", "@docusaurus/tsconfig": "^3.7.0", "@docusaurus/types": "^3.7.0", "prettier": "^3.2.4", @@ -57,6 +57,6 @@ "node": ">=20" }, "volta": { - "node": "22.19.0" + "node": "22.20.0" } } diff --git a/docs/src/components/community-projects.tsx b/docs/src/components/community-projects.tsx index efce831df0..6b74ae7ad8 100644 --- a/docs/src/components/community-projects.tsx +++ b/docs/src/components/community-projects.tsx @@ -23,11 +23,6 @@ const projects: CommunityProjectProps[] = [ description: 'A Python script to sync folders as albums.', url: 'https://git.orenit.solutions/open/immichalbumpull', }, - { - title: 'Remove offline files', - description: 'A simple way to remove orphaned offline assets from the Immich database', - url: 'https://github.com/Thoroslives/immich_remove_offline_files', - }, { title: 'Immich-Tools', description: 'Provides scripts for handling problems on the repair page.', @@ -120,6 +115,11 @@ const projects: CommunityProjectProps[] = [ description: 'Auto-stack photos with identical filenames and differing extensions (i.e. JPG+RAW)', url: 'https://github.com/sid3windr/immich-stack', }, + { + title: 'Immich Stack', + description: 'Automatically groups similar photos into stacks within the Immich photo management system.', + url: 'https://github.com/Majorfi/immich-stack/', + }, ]; function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element { diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index cd3d8e079a..46dec8c35e 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,4 +1,12 @@ [ + { + "label": "v2.0.1", + "url": "https://docs.v2.0.1.archive.immich.app" + }, + { + "label": "v2.0.0", + "url": "https://docs.v2.0.0.archive.immich.app" + }, { "label": "v1.144.1", "url": "https://docs.v1.144.1.archive.immich.app" diff --git a/docs/static/img/synology-action-clean.png b/docs/static/img/synology-action-clean.png new file mode 100644 index 0000000000..4d168b0bd8 Binary files /dev/null and b/docs/static/img/synology-action-clean.png differ diff --git a/docs/static/img/synology-build.png b/docs/static/img/synology-build.png new file mode 100644 index 0000000000..50c4d0fc98 Binary files /dev/null and b/docs/static/img/synology-build.png differ diff --git a/docs/static/img/synology-container-ip.png b/docs/static/img/synology-container-ip.png new file mode 100644 index 0000000000..21617d8c72 Binary files /dev/null and b/docs/static/img/synology-container-ip.png differ diff --git a/docs/static/img/synology-container-manager-customize-docker-compose.png b/docs/static/img/synology-container-manager-customize-docker-compose.png index 558557487a..2c0a40def0 100644 Binary files a/docs/static/img/synology-container-manager-customize-docker-compose.png and b/docs/static/img/synology-container-manager-customize-docker-compose.png differ diff --git a/docs/static/img/synology-custom-port-firewall-rule.png b/docs/static/img/synology-custom-port-firewall-rule.png new file mode 100644 index 0000000000..26ee17785c Binary files /dev/null and b/docs/static/img/synology-custom-port-firewall-rule.png differ diff --git a/docs/static/img/synology-fw-ipedit.png b/docs/static/img/synology-fw-ipedit.png new file mode 100644 index 0000000000..7f4e561395 Binary files /dev/null and b/docs/static/img/synology-fw-ipedit.png differ diff --git a/docs/static/img/synology-fw-rules.png b/docs/static/img/synology-fw-rules.png new file mode 100644 index 0000000000..2ec43a682f Binary files /dev/null and b/docs/static/img/synology-fw-rules.png differ diff --git a/docs/static/img/synology-ipaddress-firewall-rule.png b/docs/static/img/synology-ipaddress-firewall-rule.png new file mode 100644 index 0000000000..d1982b053d Binary files /dev/null and b/docs/static/img/synology-ipaddress-firewall-rule.png differ diff --git a/docs/static/img/synology-project-stop.png b/docs/static/img/synology-project-stop.png new file mode 100644 index 0000000000..8a77446dc2 Binary files /dev/null and b/docs/static/img/synology-project-stop.png differ diff --git a/docs/static/img/synology-remove-unused.png b/docs/static/img/synology-remove-unused.png new file mode 100644 index 0000000000..9b1a217902 Binary files /dev/null and b/docs/static/img/synology-remove-unused.png differ diff --git a/docs/static/img/synology-select-proj.png b/docs/static/img/synology-select-proj.png new file mode 100644 index 0000000000..21642d8713 Binary files /dev/null and b/docs/static/img/synology-select-proj.png differ diff --git a/e2e/.nvmrc b/e2e/.nvmrc index e2228113dd..442c7587a9 100644 --- a/e2e/.nvmrc +++ b/e2e/.nvmrc @@ -1 +1 @@ -22.19.0 +22.20.0 diff --git a/e2e/docker-compose.yml b/e2e/docker-compose.yml index 6aba8ff72a..baf63cfe9c 100644 --- a/e2e/docker-compose.yml +++ b/e2e/docker-compose.yml @@ -35,7 +35,7 @@ services: - 2285:2285 redis: - image: redis:6.2-alpine@sha256:7fe72c486b910f6b1a9769c937dad5d63648ddee82e056f47417542dd40825bb + image: redis:6.2-alpine@sha256:2185e741f4c1e7b0ea9ca1e163a3767c4270a73086b6bbea2049a7203212fb7f database: image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:11ced39d65a92a54d12890ced6a26cc2003f92697d6f0d4d944b98459dba7138 diff --git a/e2e/package.json b/e2e/package.json index 38b9ac949a..e783eded9e 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "1.144.1", + "version": "2.0.1", "description": "", "main": "index.js", "type": "module", @@ -25,7 +25,7 @@ "@playwright/test": "^1.44.1", "@socket.io/component-emitter": "^3.1.2", "@types/luxon": "^3.4.2", - "@types/node": "^22.18.1", + "@types/node": "^22.18.8", "@types/oidc-provider": "^9.0.0", "@types/pg": "^8.15.1", "@types/pngjs": "^6.0.4", @@ -43,7 +43,7 @@ "pngjs": "^7.0.0", "prettier": "^3.2.5", "prettier-plugin-organize-imports": "^4.0.0", - "sharp": "^0.34.3", + "sharp": "^0.34.4", "socket.io-client": "^4.7.4", "supertest": "^7.0.0", "typescript": "^5.3.3", @@ -52,6 +52,6 @@ "vitest": "^3.0.0" }, "volta": { - "node": "22.19.0" + "node": "22.20.0" } } diff --git a/i18n/ar.json b/i18n/ar.json index 5d43f61777..a94c920bec 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -28,6 +28,7 @@ "add_to_album": "إضافة إلى ألبوم", "add_to_album_bottom_sheet_added": "تمت الاضافة الى {album}", "add_to_album_bottom_sheet_already_exists": "موجود مسبقا في {album}", + "add_to_album_bottom_sheet_some_local_assets": "لا يمكن إضافة بعض الأصول المحلية إلى الألبوم", "add_to_album_toggle": "تبديل التحديد لـ{album}", "add_to_albums": "إضافة الى البومات", "add_to_albums_count": "إضافه إلى البومات ({count})", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "قم بتشغيل النسخ الاحتياطي المقدمة", "backup_controller_page_uploading_file_info": "تحميل معلومات الملف", "backup_err_only_album": "لا يمكن إزالة الألبوم الوحيد", + "backup_error_sync_failed": "فشل المزامنة. لا يمكن معالجة النسخ الاحتياطي.", "backup_info_card_assets": "أصول", "backup_manual_cancelled": "ملغي", "backup_manual_in_progress": "قيد التحميل حاول مره اخرى", diff --git a/i18n/az.json b/i18n/az.json index d0e97ca356..53e7f55db6 100644 --- a/i18n/az.json +++ b/i18n/az.json @@ -1,8 +1,8 @@ { "about": "Haqqında", "account": "Hesab", - "account_settings": "Hesab parametrləri", - "acknowledge": "Aydındır", + "account_settings": "Hesab Parametrləri", + "acknowledge": "Təsdiq et", "action": "Əməliyyat", "action_common_update": "Yenilə", "actions": "Əməliyyatlar", @@ -16,8 +16,8 @@ "add_a_title": "Başlıq əlavə et", "add_birthday": "Doğum günü əlavə et", "add_endpoint": "Son nöqtə əlavə et", - "add_exclusion_pattern": "İstisna nümunəsi əlavə et", - "add_import_path": "Import yolunu əlavə et", + "add_exclusion_pattern": "Çıxarma nümunəsi əlavə et", + "add_import_path": "İdxal yolu əlavə et", "add_location": "Məkan əlavə et", "add_more_users": "Daha çox istifadəçi əlavə et", "add_partner": "Partnyor əlavə et", @@ -25,20 +25,21 @@ "add_photos": "Şəkillər əlavə et", "add_tag": "Etiket əlavə et", "add_to": "Bura əlavə et…", - "add_to_album": "Albom əlavə et", + "add_to_album": "Alboma əlavə et", "add_to_album_bottom_sheet_added": "{album} albomuna əlavə edildi", "add_to_album_bottom_sheet_already_exists": "Artıq {album} albomunda var", + "add_to_album_bottom_sheet_some_local_assets": "Bəzi lokal resurslar alboma əlavə edilə bilmədi", "add_to_album_toggle": "{album} üçün seçimi dəyişin", "add_to_albums": "Albomlara əlavə et", - "add_to_albums_count": "Albomlara əlavə et ({count})", + "add_to_albums_count": "({count}) albomlarına əlavə et", "add_to_shared_album": "Paylaşılan alboma əlavə et", "add_url": "URL əlavə et", "added_to_archive": "Arxivə əlavə edildi", "added_to_favorites": "Sevimlilələrə əlavə edildi", "added_to_favorites_count": "{count, number} şəkil sevimlilələrə əlavə edildi", "admin": { - "add_exclusion_pattern_description": "İstisna şablonlarını əlavə edin. *, ** və ? ilə Globbing dəstəklənir. Məs.: \"Raw\" adlanan hər hansısa bir qovluqda bütün faylları saymamaq üçün \"**/Raw/**\"-dan istifadə edin. \".tif\" ilə bitən bütün faylları saymamaq üçün \"**/*.tif\"-dən istifadə edin. Faylı mütləq yoldan istifadə etməklə saymamaq istəyirsinizsə \"/path/to/ignore/**\"-dan istifadə edin.", - "admin_user": "Admin İstifadəçi", + "add_exclusion_pattern_description": "Çıxarma nümunələri əlavə et. *, ** və ? istifadə edilərək globbing dəstəklənir. Hər hansı bir \"Raw\" adlı qovluqdakı bütün faylları görməməzlikdən gəlmək üçün **/Raw/** istifadə et. “.tif” ilə bitən bütün faylları görməməzlikdən gəlmək üçün **/*.tif istifadə et. Tam yolu görməməzlikdən gəlmək üçün /path/to/ignore/** istifadə et.", + "admin_user": "İdarəçi İstifadəçi", "asset_offline_description": "Bu xarici kitabxana varlığı diskdə artıq tapılmadı və zibil qutusuna köçürüldü. Əgər fayl kitabxana içərisində köçürülübsə, zaman şkalanızı yeni uyğun gələn varlıq üçün yoxlayın. Varlığı yenidən qaytarmaq üçün aşağıda verilmiş fayl yolunun Immich tərəfindən əlçatan olduğundan əmin olduqdan sonra kitabxananı skan edin.", "authentication_settings": "Səlahiyyətləndirmə parametrləri", "authentication_settings_description": "Şifrə, OAuth və digər səlahiyyətləndirmə parametrləri", @@ -76,7 +77,7 @@ "image_thumbnail_title": "Önizləmə parametrləri", "job_concurrency": "{job}paralellik", "job_created": "Tapşırıq yaradıldı", - "job_not_concurrency_safe": "Bu tapşırıq parallel fəaliyyət üçün uyğun deyil", + "job_not_concurrency_safe": "Bu iş eyni vaxtda icra üçün təhlükəsiz deyil.", "job_settings": "Tapşırıq parametrləri", "job_settings_description": "Parallel şəkildə fəaliyyət göstərən tapşırıqları idarə et", "job_status": "Tapşırıq statusu", diff --git a/i18n/bg.json b/i18n/bg.json index e78b139d7b..a0ab4d0a80 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -28,6 +28,7 @@ "add_to_album": "Добави към албум", "add_to_album_bottom_sheet_added": "Добавено в {album}", "add_to_album_bottom_sheet_already_exists": "Вече е в {album}", + "add_to_album_bottom_sheet_some_local_assets": "Някои локални файлове не успяха да се добавят към албума", "add_to_album_toggle": "Сменете избора за {album}", "add_to_albums": "Добавяне в албуми", "add_to_albums_count": "Добавяне в албуми ({count})", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "Включи архивиране в активен режим", "backup_controller_page_uploading_file_info": "Инфо за архивирания файл", "backup_err_only_album": "Не може да се премахне единствения албум", + "backup_error_sync_failed": "Синхронизацията е неуспешна. Резервното копие не може да се обработи.", "backup_info_card_assets": "обекта", "backup_manual_cancelled": "Отменено", "backup_manual_in_progress": "Върви архивиране. Опитай след малко", @@ -1235,7 +1237,7 @@ "local": "Локално", "local_asset_cast_failed": "Не може да се предава обект, който още не е качен на сървъра", "local_assets": "Локални обекти", - "local_media_summary": "Обобщение на локалните медийни файлове", + "local_media_summary": "Обобщение на локалните файлове", "local_network": "Локална мрежа", "local_network_sheet_info": "Приложението ще се свърже със сървъра на този URL, когато устройството е свързано към зададената Wi-Fi мрежа", "location_permission": "Разрешение за местоположение", @@ -1344,7 +1346,7 @@ "missing": "Липсващи", "model": "Модел", "month": "Месец", - "monthly_title_text_date_format": "MMMM y", + "monthly_title_text_date_format": "MMMM г", "more": "Още", "move": "Премести", "move_off_locked_folder": "Извади от заключената папка", diff --git a/i18n/ca.json b/i18n/ca.json index 0e3d674557..5f3267f7ca 100644 --- a/i18n/ca.json +++ b/i18n/ca.json @@ -34,7 +34,7 @@ "add_to_albums_count": "Afegir als àlbums ({count})", "add_to_shared_album": "Afegir a un àlbum compartit", "add_url": "Afegir URL", - "added_to_archive": "Afegit als arxivats", + "added_to_archive": "Afegir a l'arxiu", "added_to_favorites": "Afegit als preferits", "added_to_favorites_count": "{count, number} afegits als preferits", "admin": { @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Activa la còpia de seguretat", "backup_controller_page_uploading_file_info": "S'està pujant la informació del fitxer", "backup_err_only_album": "No es pot eliminar l'únic àlbum", + "backup_error_sync_failed": "Sincronització malament, No es pot fer backup.", "backup_info_card_assets": "elements", "backup_manual_cancelled": "Cancel·lat", "backup_manual_in_progress": "La pujada ja està en curs. Torneu-ho a provar més tard", diff --git a/i18n/cs.json b/i18n/cs.json index ceebc9f401..4382629f89 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Povolit zálohování na popředí", "backup_controller_page_uploading_file_info": "Informace o nahraném souboru", "backup_err_only_album": "Nelze odstranit jediné vybrané album", + "backup_error_sync_failed": "Synchronizace selhala. Nelze zpracovat zálohu.", "backup_info_card_assets": "položek", "backup_manual_cancelled": "Zrušeno", "backup_manual_in_progress": "Nahrávání již probíhá. Zkuste to znovu později", diff --git a/i18n/da.json b/i18n/da.json index 61891e7ef8..c7aabf2b3c 100644 --- a/i18n/da.json +++ b/i18n/da.json @@ -28,6 +28,7 @@ "add_to_album": "Tilføj til album", "add_to_album_bottom_sheet_added": "Tilføjet til {album}", "add_to_album_bottom_sheet_already_exists": "Allerede i {album}", + "add_to_album_bottom_sheet_some_local_assets": "Nogle lokale elementer kunne ikke føjes til albummet", "add_to_album_toggle": "Skift selektion for {album}", "add_to_albums": "Tilføj til albummer", "add_to_albums_count": "Tilføj til albummer({count})", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "Slå sikkerhedskopiering til", "backup_controller_page_uploading_file_info": "Uploader filinformation", "backup_err_only_album": "Kan ikke slette det eneste album", + "backup_error_sync_failed": "Synkroniseringen mislykkedes. Sikkerhedskopieringen kunne ikke behandles.", "backup_info_card_assets": "objekter", "backup_manual_cancelled": "Annulleret", "backup_manual_in_progress": "Upload er allerede undervejs. Prøv igen efter noget tid", diff --git a/i18n/de.json b/i18n/de.json index 4af1675ffc..69e36be8e9 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Sicherung im Vordergrund einschalten", "backup_controller_page_uploading_file_info": "Informationen", "backup_err_only_album": "Das einzige Album kann nicht entfernt werden", + "backup_error_sync_failed": "Synchronisierung fehlgeschlagen. Backup kann nicht verarbeitet werden.", "backup_info_card_assets": "Elemente", "backup_manual_cancelled": "Abgebrochen", "backup_manual_in_progress": "Sicherung läuft bereits. Bitte versuche es später erneut", diff --git a/i18n/el.json b/i18n/el.json index 6e2f543c1f..6492ea0370 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -28,6 +28,7 @@ "add_to_album": "Προσθήκη σε άλμπουμ", "add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}", "add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}", + "add_to_album_bottom_sheet_some_local_assets": "Ορισμένοι τοπικά στοιχεία δεν μπόρεσαν να προστεθούν στο άλμπουμ", "add_to_album_toggle": "Εναλλαγή επιλογής για το {album}", "add_to_albums": "Προσθήκη στα άλμπουμ", "add_to_albums_count": "Προσθήκη στα άλμπουμ ({count})", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "Ενεργοποίηση δημιουργίας αντιγράφου ασφαλείας στο προσκήνιο", "backup_controller_page_uploading_file_info": "Μεταφόρτωση πληροφοριών αρχείου", "backup_err_only_album": "Δεν είναι δυνατή η αφαίρεση του μοναδικού άλμπουμ", + "backup_error_sync_failed": "Ο συγχρονισμός απέτυχε. Δεν είναι δυνατή η επεξεργασία του αντιγράφου ασφαλείας.", "backup_info_card_assets": "στοιχεία", "backup_manual_cancelled": "Ακυρώθηκε", "backup_manual_in_progress": "Μεταφόρτωση σε εξέλιξη. Δοκιμάστε αργότερα", diff --git a/i18n/en.json b/i18n/en.json index e86b56be85..bd59c37fac 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -33,6 +33,7 @@ "add_to_albums": "Add to albums", "add_to_albums_count": "Add to albums ({count})", "add_to_shared_album": "Add to shared album", + "add_upload_to_stack": "Add upload to stack", "add_url": "Add URL", "added_to_archive": "Added to archive", "added_to_favorites": "Added to favorites", diff --git a/i18n/es.json b/i18n/es.json index d2cd6924c4..626ae0540c 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Activar la copia de seguridad", "backup_controller_page_uploading_file_info": "Subiendo información del archivo", "backup_err_only_album": "No se puede eliminar el único álbum", + "backup_error_sync_failed": "Sincronización falló. No es posible procesar la copia de seguridad.", "backup_info_card_assets": "elementos", "backup_manual_cancelled": "Cancelado", "backup_manual_in_progress": "Subida ya en progreso. Vuelve a intentarlo más tarde", @@ -1088,7 +1089,7 @@ "folders": "Carpetas", "folders_feature_description": "Explorar la vista de carpetas para las fotos y los videos en el sistema de archivos", "forgot_pin_code_question": "¿Olvidaste tu código PIN?", - "forward": "Reenviar", + "forward": "Avanzar", "gcast_enabled": "Google Cast", "gcast_enabled_description": "Esta funcionalidad carga recursos externos desde Google para poder funcionar.", "general": "General", @@ -1905,7 +1906,7 @@ "skip_to_content": "Saltar al contenido", "skip_to_folders": "Ir a las carpetas", "skip_to_tags": "Ir a las etiquetas", - "slideshow": "Diapositivas", + "slideshow": "Pase de diapositivas", "slideshow_settings": "Ajustes de diapositivas", "sort_albums_by": "Ordenar álbumes por…", "sort_created": "Fecha de creación", diff --git a/i18n/fr.json b/i18n/fr.json index d5b6e10ba8..df0e9d1cc0 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -599,7 +599,7 @@ "backup_controller_page_turn_on": "Activer la sauvegarde au premier plan", "backup_controller_page_uploading_file_info": "Envoi des informations du fichier", "backup_err_only_album": "Impossible de retirer le seul album", - "backup_error_sync_failed": "Échec de la synchronisation. Impossible de démarrer la sauvegarde.", + "backup_error_sync_failed": "Échec de la synchronisation. Impossible d'exécuter la sauvegarde.", "backup_info_card_assets": "éléments", "backup_manual_cancelled": "Annulé", "backup_manual_in_progress": "Envoi déjà en cours. Réessayez plus tard", diff --git a/i18n/he.json b/i18n/he.json index 5f71e2c8a8..8138679cdd 100644 --- a/i18n/he.json +++ b/i18n/he.json @@ -28,9 +28,10 @@ "add_to_album": "הוספה לאלבום", "add_to_album_bottom_sheet_added": "נוסף ל {album}", "add_to_album_bottom_sheet_already_exists": "כבר ב {album}", + "add_to_album_bottom_sheet_some_local_assets": "לא ניתן היה להוסיף חלק מהקבצים המקומיים לאלבום", "add_to_album_toggle": "החלפת מצב בחירה עבור {album}", "add_to_albums": "הוספה לאלבומים", - "add_to_albums_count": "Add to albums ({count})", + "add_to_albums_count": "הוסף ({count}) לאלבום", "add_to_shared_album": "הוספה לאלבום משותף", "add_url": "הוספת קישור", "added_to_archive": "נוסף לארכיון", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "הפעל גיבוי חזית", "backup_controller_page_uploading_file_info": "מעלה מידע על הקובץ", "backup_err_only_album": "לא ניתן להסיר את האלבום היחיד", + "backup_error_sync_failed": "הסינכרון נכשל. לא ניתן להשלים את הגיבוי.", "backup_info_card_assets": "תמונות", "backup_manual_cancelled": "בוטל", "backup_manual_in_progress": "העלאה כבר בתהליך. נסה אחרי זמן מה", @@ -753,6 +755,7 @@ "create_user": "צור משתמש", "created": "נוצר", "created_at": "נוצר", + "creating_linked_albums": "יוצר אלבומים מקושרים...", "crop": "חתוך", "curated_object_page_title": "דברים", "current_device": "מכשיר נוכחי", @@ -1500,7 +1503,7 @@ "permission_onboarding_permission_limited": "הרשאה מוגבלת. כדי לתת ליישום לגבות ולנהל את כל אוסף הגלריה שלך, הענק הרשאה לתמונות וסרטונים בהגדרות.", "permission_onboarding_request": "היישום דורש הרשאה כדי לראות את התמונות והסרטונים שלך.", "person": "אדם", - "person_age_months": "בגיל {months, plural, one {חודש #} other {# חודשים}}", + "person_age_months": "{months, plural, one {חודש #} other {# חודשים}}", "person_age_year_months": "בגיל שנה ו{months, plural, one {חודש #} other {# חודשים}}", "person_age_years": "בגיל {years, plural, other {# שנים}}", "person_birthdate": "נולד בתאריך {date}", diff --git a/i18n/hu.json b/i18n/hu.json index f000e89517..081bc12f99 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -28,6 +28,7 @@ "add_to_album": "Felvétel albumba", "add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz", "add_to_album_bottom_sheet_already_exists": "Már benne van a(z) \"{album}\" albumban", + "add_to_album_bottom_sheet_some_local_assets": "Néhány helyi elem nem adható hozzá az albumhoz", "add_to_album_toggle": "{album} kijelölésének váltása", "add_to_albums": "Hozzáadás albumokhoz", "add_to_albums_count": "Hozzáadás albumokhoz ({count})", @@ -175,7 +176,7 @@ "map_settings_description": "Térkép beállítások kezelése", "map_style_description": "Egy style.json térképtémára mutató URL cím", "memory_cleanup_job": "Memória takarítás", - "memory_generate_job": "Emlék generálása", + "memory_generate_job": "Emlékek generálása", "metadata_extraction_job": "Metaadatok kinyerése", "metadata_extraction_job_description": "Metaadat információk (pl. GPS, arcok és felbontás) kinyerése minden elemből", "metadata_faces_import_setting": "Arc importálás engedélyezése", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "Előtérben mentés bekapcsolása", "backup_controller_page_uploading_file_info": "Fájl információk feltöltése", "backup_err_only_album": "Az utolsó albumot nem tudod törölni", + "backup_error_sync_failed": "A szinkronizálás nem sikerült. A biztonsági mentés nem elkészíthető.", "backup_info_card_assets": "elemek", "backup_manual_cancelled": "Megszakítva", "backup_manual_in_progress": "Feltöltés már folyamatban. Próbáld meg később", diff --git a/i18n/it.json b/i18n/it.json index a86dd78ca6..3f8d90eacc 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -177,7 +177,7 @@ "map_style_description": "URL per un tema della mappa style.json", "memory_cleanup_job": "Pulizia dei vecchi Ricordi", "memory_generate_job": "Generazione dei Ricordi", - "metadata_extraction_job": "Estrazione Metadata", + "metadata_extraction_job": "Estrazione Metadati", "metadata_extraction_job_description": "Estrai informazioni dai metadati di ciascuna risorsa, come coordinate GPS, volti e risoluzione", "metadata_faces_import_setting": "Abilita l'importazione dei volti", "metadata_faces_import_setting_description": "Importa i volti dai dati EXIF dell'immagine e dai file sidecar", @@ -308,11 +308,11 @@ "transcoding_acceleration_rkmpp": "RKMPP (Solo per SOC Rockchip)", "transcoding_acceleration_vaapi": "VAAPI", "transcoding_accepted_audio_codecs": "Codifiche audio accettate", - "transcoding_accepted_audio_codecs_description": "Seleziona quali codifiche audio non devono essere trascodificate. Solo usato per alcune politiche di trascodifica.", + "transcoding_accepted_audio_codecs_description": "Seleziona quali codifiche audio non devono essere transcodificate. Solo usato per alcune politiche di transcodifica.", "transcoding_accepted_containers": "Contenitori accettati", "transcoding_accepted_containers_description": "Seleziona quali formati non hanno bisogno di essere remuxati in MP4. Usato solo per certe politiche di transcodifica.", "transcoding_accepted_video_codecs": "Codifiche video accettate", - "transcoding_accepted_video_codecs_description": "Seleziona quali codifiche video non devono essere trascodificate. Usato solo per alcune politiche di trascodifica.", + "transcoding_accepted_video_codecs_description": "Seleziona quali codifiche video non devono essere transcodificate. Usato solo per alcune politiche di transcodifica.", "transcoding_advanced_options_description": "Impostazioni che la maggior parte degli utenti non dovrebbero cambiare", "transcoding_audio_codec": "Codifica Audio", "transcoding_audio_codec_description": "Opus è l'opzione con la qualità più alta, ma è meno compatibile con dispositivi o software vecchi.", @@ -345,7 +345,7 @@ "transcoding_reference_frames": "Frame di riferimento", "transcoding_reference_frames_description": "Il numero di frame da prendere in considerazione nel comprimere un determinato frame. Valori più alti migliorano l'efficienza di compressione, ma rallentano la codifica. 0 imposta questo valore automaticamente.", "transcoding_required_description": "Solo video che non sono in un formato accettato", - "transcoding_settings": "Impostazioni Trascodifica Video", + "transcoding_settings": "Impostazioni Transcodifica Video", "transcoding_settings_description": "Gestisci quali video transcodificare e come processarli", "transcoding_target_resolution": "Risoluzione desiderata", "transcoding_target_resolution_description": "Risoluzioni più elevate possono preservare più dettagli ma richiedono più tempo per la codifica, producono file di dimensioni maggiori e possono ridurre la reattività dell'applicazione.", @@ -356,11 +356,11 @@ "transcoding_tone_mapping": "Mappatura della tonalità", "transcoding_tone_mapping_description": "Tenta di preservare l'aspetto dei video HDR quando convertiti in SDR. Ciascun algoritmo fa diversi compromessi per colore, dettaglio e luminosità. Hable conserva il dettaglio, Mobius conserva il colore e Reinhard conserva la luminosità.", "transcoding_transcode_policy": "Politica di transcodifica", - "transcoding_transcode_policy_description": "Politica che determina quando un video deve essere trascodificato. I video HDR verranno sempre trascodificati (eccetto quando la trascodifica è disabilitata).", + "transcoding_transcode_policy_description": "Politica che determina quando un video deve essere transcodificato. I video HDR verranno sempre transcodificati (eccetto quando la transcodifica è disabilitata).", "transcoding_two_pass_encoding": "Codifica a due passaggi", - "transcoding_two_pass_encoding_setting_description": "Trascodifica in due passaggi per produrre video codificati migliori. Quando il bitrate massimo è abilitato (necessario affinché funzioni con H.264 e HEVC), questa modalità utilizza un intervallo di bitrate basato sul bitrate massimo e ignora CRF. Per VP9, CRF può essere utilizzato se il bitrate massimo è disabilitato.", + "transcoding_two_pass_encoding_setting_description": "Transcodifica in due passaggi per produrre video codificati migliori. Quando il bitrate massimo è abilitato (necessario affinché funzioni con H.264 e HEVC), questa modalità utilizza un intervallo di bitrate basato sul bitrate massimo e ignora CRF. Per VP9, CRF può essere utilizzato se il bitrate massimo è disabilitato.", "transcoding_video_codec": "Codec video", - "transcoding_video_codec_description": "VP9 ha alta efficienza e compatibilità web, ma richiede più tempo per la trascodifica. HEVC ha prestazioni simili, ma una minore compatibilità web. H.264 è ampiamente compatibile e veloce da transcodificare, ma produce file molto più grandi. AV1 è il codec più efficiente, ma non è supportato sui dispositivi più vecchi.", + "transcoding_video_codec_description": "VP9 ha alta efficienza e compatibilità web, ma richiede più tempo per la transcodifica. HEVC ha prestazioni simili, ma una minore compatibilità web. H.264 è ampiamente compatibile e veloce da transcodificare, ma produce file molto più grandi. AV1 è il codec più efficiente, ma non è supportato sui dispositivi più vecchi.", "trash_enabled_description": "Abilita Funzionalità Cestino", "trash_number_of_days": "Numero di giorni", "trash_number_of_days_description": "Numero di giorni per cui mantenere gli asset nel cestino prima di rimuoverli definitivamente", @@ -388,8 +388,8 @@ "version_check_implications": "La funzione di controllo della versione fa uso di una comunicazione periodica con github.com", "version_check_settings": "Controllo Versione", "version_check_settings_description": "Abilita/disabilita la notifica per nuove versioni", - "video_conversion_job": "Trascodifica video", - "video_conversion_job_description": "Trascodifica video per maggiore compatibilità con browser e dispositivi" + "video_conversion_job": "Transcodifica video", + "video_conversion_job_description": "Transcodifica video per maggiore compatibilità con browser e dispositivi" }, "admin_email": "Email Amministratore", "admin_password": "Password Amministratore", @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Attiva backup", "backup_controller_page_uploading_file_info": "Caricamento informazioni file", "backup_err_only_album": "Non è possibile rimuovere l'unico album", + "backup_error_sync_failed": "Sincronizzazione non riuscita. Impossibile elaborare il backup.", "backup_info_card_assets": "risorse", "backup_manual_cancelled": "Annullato", "backup_manual_in_progress": "Caricamento già in corso. Riprova più tardi", diff --git a/i18n/kn.json b/i18n/kn.json index 388f06704c..111c802a1e 100644 --- a/i18n/kn.json +++ b/i18n/kn.json @@ -8,11 +8,13 @@ "actions": "ಕ್ರಿಯೆಗಳು", "active": "ಸಕ್ರಿಯ", "activity": "ಚಟುವಟಿಕೆ", + "activity_changed": "ಚಟುವಟಿಕೆ {enabled, select, true{ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ} other {ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ}}", "add": "ಸೇರಿಸಿ", "add_a_description": "ವಿವರಣೆಯನ್ನು ಸೇರಿಸಿ", "add_a_location": "ಸ್ಥಳವನ್ನು ಸೇರಿಸಿ", "add_a_name": "ಹೆಸರನ್ನು ಸೇರಿಸಿ", "add_a_title": "ಶೀರ್ಷಿಕೆಯನ್ನು ಸೇರಿಸಿ", + "add_birthday": "ಜನ್ಮದಿನ ಸೇರಿಸಿ", "add_endpoint": "ಎಂಡ್‌ಪಾಯಿಂಟ್ ಸೇರಿಸಿ", "add_exclusion_pattern": "ಹೊರಗಿಡುವಿಕೆ ಮಾದರಿಯನ್ನು ಸೇರಿಸಿ", "add_import_path": "ಆಮದು ಮಾರ್ಗವನ್ನು ಸೇರಿಸಿ", @@ -22,5 +24,6 @@ "add_path": "ಹಾದಿಯನ್ನು ಸೇರಿಸಿ", "add_photos": "ಫೋಟೋಗಳನ್ನು ಸೇರಿಸಿ", "add_to": "ಸೇರಿಸಿ…", - "add_to_album": "ಆಲ್ಬಮ್‌ಗೆ ಸೇರಿಸಿ" + "add_to_album": "ಆಲ್ಬಮ್‌ಗೆ ಸೇರಿಸಿ", + "add_to_album_bottom_sheet_added": "{album}ಗೆ ಸೇರಿಸಿದೆ" } diff --git a/i18n/ko.json b/i18n/ko.json index 3707501ec8..0c01c03263 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -8,7 +8,7 @@ "actions": "작업", "active": "활성", "activity": "활동", - "activity_changed": "활동이 {enabled, select, true {활성화} other {비활성화}}되었습니다.", + "activity_changed": "활동이 {enabled, select, true {활성화} other {비활성화}}되었습니다", "add": "추가", "add_a_description": "설명 추가", "add_a_location": "위치 추가", @@ -34,15 +34,15 @@ "add_to_albums_count": "여러 앨범에 추가 ({count})", "add_to_shared_album": "공유 앨범에 추가", "add_url": "URL 추가", - "added_to_archive": "보관함으로 이동되었습니다.", - "added_to_favorites": "즐겨찾기에 추가되었습니다.", + "added_to_archive": "보관함으로 이동되었습니다", + "added_to_favorites": "즐겨찾기에 추가되었습니다", "added_to_favorites_count": "즐겨찾기에 항목 {count, number}개 추가됨", "admin": { "add_exclusion_pattern_description": "*, **, ? 등의 glob 패턴을 사용할 수 있습니다. 예를 들어 \"Raw\" 폴더 내 모든 파일을 제외하려면 \"**/Raw/**\"를, .tif 파일을 제외하려면 \"**/*.tif\", 특정한 절대 경로를 제외하려면 \"/path/to/ignore/**\" 처럼 사용합니다.", "admin_user": "관리자", "asset_offline_description": "이 항목은 외부 라이브러리에 등록되었으나 디스크에서 찾을 수 없어 휴지통으로 이동했습니다. 파일이 라이브러리 경로 내에서 이동된 경우 타임라인에서 새로 인식된 항목이 있는지 확인해보세요. 이 항목을 복원하려면 아래 경로에 Immich가 접근할 수 있는지 확인하고 라이브러리를 다시 스캔하세요.", "authentication_settings": "인증 설정", - "authentication_settings_description": "비밀번호, OAuth 및 기타 인증 설정을 관리합니다.", + "authentication_settings_description": "비밀번호, OAuth 및 기타 인증 설정을 관리합니다", "authentication_settings_disable_all": "모든 로그인 수단을 비활성화하시겠습니까? 더이상 로그인할 수 없습니다.", "authentication_settings_reenable": "다시 활성화하려면 서버 명령어를 사용하세요.", "background_task_job": "백그라운드 작업", @@ -50,7 +50,7 @@ "backup_database_enable_description": "데이터베이스 덤프 활성화", "backup_keep_last_amount": "보관할 이전 덤프 수", "backup_onboarding_1_description": "개는 클라우드나 다른 물리적 위치에 보관합니다.", - "backup_onboarding_2_description": "개는 서로 다른 로컬 장치에 보관하고,", + "backup_onboarding_2_description": "다른 기기의 로컬 사본. 메인 파일과 로컬 백업을 포함합니다.", "backup_onboarding_3_description": "개의 데이터 사본을 만듭니다.", "backup_onboarding_description": "소중한 데이터를 안전하게 보호하기 위해 3-2-1 백업 전략 사용을 권장합니다. Immich를 백업할 때 업로드한 사진 및 동영상뿐 아니라 데이터베이스도 함께 보관해야 한다는 점을 잊지 마세요.", "backup_onboarding_footer": "Immich 백업에 대한 자세한 내용은 공식 문서를 참조하세요.", @@ -59,10 +59,10 @@ "backup_settings": "데이터베이스 덤프 설정", "backup_settings_description": "데이터베이스 덤프 주기와 보관 기간을 설정합니다.", "cleared_jobs": "작업 중단: {job}", - "config_set_by_file": "설정이 구성 파일을 통해 관리되고 있습니다.", + "config_set_by_file": "설정이 구성 파일을 통해 관리되고 있습니다", "confirm_delete_library": "{library} 라이브러리를 삭제하시겠습니까?", "confirm_delete_library_assets": "이 라이브러리를 삭제하시겠습니까? Immich에서 {count, plural, one {항목 #개가} other {항목 #개가}} 삭제되며 되돌릴 수 없습니다. 원본 파일은 디스크에 남아 있습니다.", - "confirm_email_below": "계속하려면 아래에 \"{email}\"을(를) 입력하세요.", + "confirm_email_below": "계속하려면 아래에 \"{email}\"을(를) 입력하세요", "confirm_reprocess_all_faces": "모든 얼굴을 다시 처리하시겠습니까? 이름이 지정된 인물도 초기화됩니다.", "confirm_user_password_reset": "{user}님의 비밀번호를 초기화하시겠습니까?", "confirm_user_pin_code_reset": "{user}님의 PIN 코드를 초기화하시겠습니까?", @@ -71,7 +71,7 @@ "cron_expression_description": "Cron 표현식으로 스캔 주기를 설정합니다. 자세한 내용은 다음을 참조하세요, Crontab Guru", "cron_expression_presets": "Cron 표현식 프리셋", "disable_login": "로그인 비활성화", - "duplicate_detection_job_description": "기계 학습으로 유사한 이미지를 감지합니다. 스마트 검색이 활성화되어 있어야 합니다.", + "duplicate_detection_job_description": "기계 학습으로 유사한 이미지를 감지합니다. 스마트 검색이 활성화되어 있어야 합니다", "exclusion_pattern_description": "라이브러리 스캔에서 제외할 파일이나 폴더 규칙을 설정합니다. 폴더에 원하지 않는 파일(RAW 파일 등)이 함께 존재하는 경우 유용합니다.", "external_library_management": "외부 라이브러리 관리", "face_detection": "얼굴 감지", @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "활성화", "backup_controller_page_uploading_file_info": "파일 정보 업로드 중", "backup_err_only_album": "유일한 앨범은 삭제할 수 없습니다.", + "backup_error_sync_failed": "동기화에 실패했습니다. 백업을 진행할 수 없습니다.", "backup_info_card_assets": "항목", "backup_manual_cancelled": "취소됨", "backup_manual_in_progress": "업로드가 이미 진행 중입니다. 잠시 후 다시 시도하세요", @@ -1092,6 +1093,7 @@ "gcast_enabled": "구글 캐스트", "gcast_enabled_description": "이 기능은 Google의 외부 리소스를 사용하여 실행됩니다.", "general": "일반", + "geolocation_instruction_location": "GPS 좌표가 포함된 항목을 클릭해 위치를 사용하거나, 지도에서 직접 위치를 선택하세요", "get_help": "도움 얻기", "get_wifiname_error": "Wi-Fi 이름을 가져올 수 없습니다. 필수 권한이 부여되었는지, Wi-Fi 네트워크에 연결되어 있는지 확인하세요.", "getting_started": "시작하기", @@ -1387,20 +1389,25 @@ "no_assets_message": "여기를 클릭해 첫 사진을 업로드하세요.", "no_assets_to_show": "표시할 항목 없음", "no_cast_devices_found": "캐스트 기기 없음", + "no_checksum_local": "체크섬이 없습니다. 로컬 항목을 불러올 수 없습니다", + "no_checksum_remote": "체크섬이 없습니다. 외부 항목을 불러올 수 없습니다", "no_duplicates_found": "비슷한 항목이 없습니다.", "no_exif_info_available": "EXIF 정보 없음", "no_explore_results_message": "더 많은 사진을 업로드하여 탐색 기능을 사용하세요.", "no_favorites_message": "즐겨찾기에서 사진과 동영상을 빠르게 찾기", "no_libraries_message": "외부 라이브러리로 다른 경로의 사진과 동영상을 확인하세요.", + "no_local_assets_found": "체크섬에 맞는 로컬 항목을 찾을 수 없습니다", "no_locked_photos_message": "잠금 폴더의 사진 및 동영상은 숨겨지며 라이브러리를 탐색할 때 표시되지 않습니다.", "no_name": "이름 없음", "no_notifications": "알림 없음", "no_people_found": "일치하는 인물 없음", "no_places": "장소 없음", + "no_remote_assets_found": "체크섬에 맞는 외부 항목을 찾을 수 없습니다", "no_results": "결과 없음", "no_results_description": "동의어 또는 더 일반적인 단어를 사용해 보세요.", "no_shared_albums_message": "앨범을 만들어 주변 사람들과 사진 및 동영상을 공유하세요.", "no_uploads_in_progress": "진행 중인 업로드 없음", + "not_available": "없음", "not_in_any_album": "앨범에 없음", "not_selected": "선택되지 않음", "note_apply_storage_label_to_previously_uploaded assets": "참고: 이전에 업로드한 항목에도 스토리지 레이블을 적용하려면 다음을 실행합니다,", @@ -1435,6 +1442,8 @@ "open_the_search_filters": "검색 필터 열기", "options": "옵션", "or": "또는", + "organize_into_albums": "앨범으로 정리하기", + "organize_into_albums_description": "현재 동기화 설정을 사용하여 기존 사진을 앨범으로 정리합니다", "organize_your_library": "라이브러리 정리", "original": "원본", "other": "기타", @@ -1576,6 +1585,7 @@ "purchase_server_description_2": "서포터 배지", "purchase_server_title": "서버", "purchase_settings_server_activated": "서버 제품 키는 관리자가 제어합니다.", + "query_asset_id": "쿼리 항목 ID", "queue_status": "전체 {total}, {count} 대기 중", "rating": "등급", "rating_clear": "등급 초기화", @@ -1663,6 +1673,7 @@ "restore_user": "사용자 복원", "restored_asset": "항목이 복원되었습니다.", "resume": "재개", + "resume_paused_jobs": "재개 {count, plural, one {# 일시 중지된 작업} other {# 일시 중지된 작업}}", "retry_upload": "다시 시도", "review_duplicates": "비슷한 항목 확인", "review_large_files": "용량이 큰 파일 확인", @@ -1756,6 +1767,7 @@ "select_user_for_sharing_page_err_album": "앨범을 생성하지 못했습니다.", "selected": "선택됨", "selected_count": "{count, plural, other {#개 선택됨}}", + "selected_gps_coordinates": "선택한 GPS 좌표", "send_message": "메시지 전송", "send_welcome_email": "환영 이메일 전송", "server_endpoint": "서버 엔드포인트", diff --git a/i18n/lv.json b/i18n/lv.json index 941d1c59f7..db02cea147 100644 --- a/i18n/lv.json +++ b/i18n/lv.json @@ -65,9 +65,13 @@ "duplicate_detection_job_description": "Analizēt failus ar mašīnmācīšanos, lai noteiktu līdzīgus attēlus. Šī funkcija izmanto viedo meklēšanu", "external_library_management": "Ārējo bibliotēku pārvaldība", "face_detection": "Seju noteikšana", + "face_detection_description": "Atpazīt attēlos sejas, izmantojot mašīnmācīšanos. Video gadījumā tiek ņemta vērā tikai sīktēls. \"Atsvaidzināt\" atkārtoti apstrādā visus attēlus. \"Atiestatīt\" izdzēš visus pašreizējos seju datus. \"Trūkstošie\" ierindo attēlus, kas vēl nav apstrādāti. Pēc seju noteikšanas pabeigšanas atrastās sejas tiek ierindotas seju atpazīšanai, grupējot tās pēc esošas vai jauns personas.", + "facial_recognition_job_description": "Grupēt atpazītās sejas pēc cilvēkiem. Šis solis tiek veikts pēc seju noteikšanas pabeigšanas. \"Atiestatīt\" atkārtoti sagrupē visas sejas. \"Trūkstošie\" ierindo sejas, kurām nav piešķirta persona.", "image_format": "Formāts", "image_format_description": "WebP veido mazākus failus nekā JPEG, taču to kodēšana ir lēnāka.", - "image_fullsize_enabled_description": "Ģenerēt pilna izmēra attēlu formātiem, kas nav piemēroti izmantošanai tīmeklī. Ja ir iespējota opcija \"Priekšroka iegultajam priekšskatījumam\", tiks izmantoti iegultie priekšskatījumi bez konvertēšanas. Neietekmē tīmeklim draudzīgus formātus, piemēram, JPEG.", + "image_fullsize_description": "Pilnizmēra attēls ar noņemtiem metadatiem, ko izmanto, kad attēls ir tuvināts", + "image_fullsize_enabled": "Iespējot pilnizmēra attēlu ģenerēšanu", + "image_fullsize_enabled_description": "Ģenerēt pilnizmēra attēlu formātiem, kas nav piemēroti izmantošanai tīmeklī. Ja ir iespējota opcija \"Priekšroka iegultajam priekšskatījumam\", tiks izmantoti iegultie priekšskatījumi bez konvertēšanas. Neietekmē tīmeklim draudzīgus formātus, piemēram, JPEG.", "image_fullsize_quality_description": "Pilnizmēra attēlu kvalitāte no 1-100. Augstāka vērtība dos labāku kvalitāti, taču faili būs lielāka izmēra.", "image_fullsize_title": "Pilnizmēra attēlu iestatījumi", "image_prefer_embedded_preview": "Priekšroka iegultajam priekšskatījumam", @@ -92,15 +96,24 @@ "library_scanning_enable_description": "Iespējot periodisku bibliotēku skenēšanu", "library_settings": "Ārējā bibliotēka", "library_settings_description": "Ārējo bibliotēku iestatījumu pārvaldība", + "library_tasks_description": "Pārbaudīt ārējās bibliotēkas, lai atrastu jaunus un/vai mainītus failus", "library_watching_settings": "Bibliotēku uzraudzīšana (EKSPERIMENTĀLA)", "library_watching_settings_description": "Automātiski uzraudzīt, vai ir mainīti faili", + "machine_learning_availability_checks_enabled": "Iespējot pieejamības pārbaudes", "machine_learning_clip_model": "CLIP modelis", "machine_learning_duplicate_detection": "Dublikātu noteikšana", + "machine_learning_duplicate_detection_enabled": "Iespējot dublikātu noteikšanu", + "machine_learning_duplicate_detection_enabled_description": "Ja šī funkcija ir atspējota, joprojām tiks izlaisti identiski faili.", + "machine_learning_enabled": "Iespējot mašīnmācīšanos", + "machine_learning_enabled_description": "Ja funkcija ir atspējota, tiks atspējotas visas ML funkcijas neatkarīgi no zemāk esošajiem iestatījumiem.", "machine_learning_facial_recognition": "Seju atpazīšana", "machine_learning_facial_recognition_model": "Seju atpazīšanas modelis", + "machine_learning_facial_recognition_setting": "Iespējot seju atpazīšanu", "machine_learning_settings": "Mašīnmācīšanās iestatījumi", "machine_learning_settings_description": "Mašīnmācīšanās funkciju un iestatījumu pārvaldība", "machine_learning_smart_search": "Viedā meklēšana", + "machine_learning_smart_search_enabled": "Iespējot viedo meklēšanu", + "machine_learning_smart_search_enabled_description": "Ja funkcija ir atspējota, attēli netiks kodēti viedai meklēšanai.", "machine_learning_url_description": "Mašīnmācīšanās servera URL. Ja ir norādīts vairāk nekā viens URL, katrs serveris, sākot no pirmā līdz pēdējam, tiks pārbaudīts pa vienam, līdz kāds no tiem atbildēs veiksmīgi. Serveri, kas neatbild, tiks īslaicīgi ignorēti, līdz tie atkal būs pieejami tiešsaistē.", "manage_concurrency": "Vienlaicīgas darbības pārvaldība", "manage_log_settings": "Žurnāla iestatījumu pārvaldība", @@ -114,10 +127,14 @@ "map_settings": "Karte", "map_settings_description": "Kartes iestatījumu pārvaldība", "map_style_description": "URL uz style.json kartes tēmu", + "memory_generate_job": "Atmiņu ģenerēšana", "metadata_extraction_job": "Metadatu iegūšana", + "metadata_extraction_job_description": "iegūt metadatu informāciju no katra faila, piemēram, GPS, sejas un izšķirtspēju", + "metadata_faces_import_setting_description": "Importēt sejas no attēla EXIF datiem un blakusfailiem", "metadata_settings": "Metadatu iestatījumi", "metadata_settings_description": "Metadatu iestatījumu pārvaldība", "migration_job": "Migrācija", + "migration_job_description": "Pārvietot failu un seju sīktēlus uz jaunāko mapju struktūru", "nightly_tasks_cluster_faces_setting_description": "Veikt sejas atpazīšanu jaunatklātajām sejām", "nightly_tasks_cluster_new_faces_setting": "Sagrupēt jaunās sejas", "nightly_tasks_database_cleanup_setting": "Datubāzes apkopes uzdevumi", @@ -176,10 +193,15 @@ "server_settings_description": "Servera iestatījumu pārvaldība", "server_welcome_message": "Sveiciena ziņa", "server_welcome_message_description": "Ziņojums, kas tiek parādīts pieslēgšanās lapā.", + "sidecar_job": "Blakusfailu metadati", + "sidecar_job_description": "Atklāt vai sinhronizēt blakusfailu metadatus no failu sistēmas", + "slideshow_duration_description": "Katra attēla rādīšanas ilgums sekundēs", "smart_search_job_description": "Analizēt failus ar mašīnmācīšanos lai sagatavotu datus viedajai meklēšanai", "storage_template_date_time_sample": "Laika paraugs {date}", "storage_template_migration": "Krātuves veidņu migrācija", - "storage_template_migration_job": "Krātuves veidņu migrācijas uzdevums", + "storage_template_migration_description": "Piemēro pašreizējo {template} iepriekš augšupielādētajiem failiem", + "storage_template_migration_info": "Krātuves veidne pārveidos visus failu paplašinājumus uz mazajiem burtiem. Veidnes izmaiņas attieksies tikai uz jauniem failiem. Lai veidni piemērotu ar atpakaļejošu efektu iepriekš augšupielādētiem failiem, palaidiet {job}.", + "storage_template_migration_job": "Krātuves veidņu migrācijas uzdevumu", "storage_template_path_length": "Aptuvenais ceļa garuma ierobežojums: {length, number}/{limit, number}", "storage_template_settings": "Krātuves veidne", "system_settings": "Sistēmas iestatījumi", @@ -247,7 +269,7 @@ "age_years": "{years, plural, zero {# gadu} one {# gads} other {# gadi}}", "album_added": "Albums pievienots", "album_added_notification_setting_description": "Saņemt e-pasta paziņojumu, kad tevi pievieno kopīgam albumam", - "album_cover_updated": "Albuma attēls atjaunināts", + "album_cover_updated": "Albuma vāciņš atjaunināts", "album_delete_confirmation_description": "Ja šis albums tiek kopīgots, citi lietotāji vairs nevarēs tam piekļūt.", "album_deleted": "Albums dzēsts", "album_info_card_backup_album_excluded": "NEIEKĻAUTS", @@ -328,6 +350,7 @@ "automatic_endpoint_switching_title": "Automātiska URL pārslēgšana", "autoplay_slideshow": "Automātiska slaidrādes atskaņošana", "back": "Atpakaļ", + "background_backup_running_error": "Pašlaik darbojas dublēšana fonā, nevar uzsākt manuālu dublēšanu", "background_options": "Fona opcijas", "backup": "Dublēšana", "backup_album_selection_page_albums_device": "Albumi ierīcē ({count})", @@ -376,7 +399,7 @@ "backup_controller_page_remainder": "Atlikums", "backup_controller_page_remainder_sub": "Atlikušie fotoattēli un videoklipi, kurus dublēt no atlases", "backup_controller_page_server_storage": "Servera krātuve", - "backup_controller_page_start_backup": "Sākt Dublēšanu", + "backup_controller_page_start_backup": "Sākt dublēšanu", "backup_controller_page_status_off": "Automātiskā priekšplāna dublēšana ir izslēgta", "backup_controller_page_status_on": "Automātiskā priekšplāna dublēšana ir ieslēgta", "backup_controller_page_storage_format": "{used} no {total} tiek izmantots", @@ -393,20 +416,22 @@ "backup_manual_title": "Augšupielādes statuss", "backup_options_page_title": "Dublēšanas iestatījumi", "backup_settings_subtitle": "Pārvaldīt augšupielādes iestatījumus", - "backward": "Atpakaļejoši", + "backward": "Atpakaļejoša", "biometric_auth_enabled": "Ieslēgta biometriskā autentifikācija", "biometric_locked_out": "Biometriskā autentifikācija tev ir bloķēta", "biometric_no_options": "Nav pieejamas biometriskās autentifikācijas iespējas", "biometric_not_available": "Biometriskā autentifikācija šajā ierīcē nav pieejama", "birthdate_saved": "Dzimšanas datums veiksmīgi saglabāts", "birthdate_set_description": "Dzimšanas datums tiek izmantots, lai aprēķinātu šīs personas vecumu fotogrāfijas uzņemšanas brīdī.", + "blurred_background": "Izpludināts fons", "bugs_and_feature_requests": "Kļūdas un funkciju pieprasījumi", "build": "Būvējums", "build_image": "Būvējuma attēls", + "buy": "Iegādāties Immich", "cache_settings_clear_cache_button": "Iztīrīt kešatmiņu", "cache_settings_clear_cache_button_title": "Iztīra aplikācijas kešatmiņu. Tas būtiski ietekmēs lietotnes veiktspēju, līdz kešatmiņa būs pārbūvēta.", "cache_settings_duplicated_assets_clear_button": "NOTĪRĪT", - "cache_settings_duplicated_assets_subtitle": "Fotoattēli un videoklipi, kurus lietotne ir iekļāvusi melnajā sarakstā", + "cache_settings_duplicated_assets_subtitle": "Fotoattēli un videoklipi, kurus lietotne ir iekļāvusi ignorējamo sarakstā", "cache_settings_duplicated_assets_title": "Dublicētie faili ({count})", "cache_settings_statistics_album": "Bibliotēkas sīktēli", "cache_settings_statistics_full": "Pilni attēli", @@ -418,10 +443,14 @@ "cache_settings_tile_title": "Lokālā Krātuve", "cache_settings_title": "Kešdarbes iestatījumi", "camera": "Fotokamera", + "camera_brand": "Fotokameras zīmols", + "camera_model": "Fotokameras modelis", "cancel": "Atcelt", + "cancel_search": "Atcelt meklēšanu", "canceled": "Atcelts", "canceling": "Atceļ", "cannot_merge_people": "Nevar apvienot personas", + "cannot_undo_this_action": "Šo darbību nevar atcelt!", "cast": "Pārraidīt", "cast_description": "Konfigurēt pieejamos pārraides galamērķus", "change_date": "Mainīt datumu", @@ -432,6 +461,7 @@ "change_name": "Mainīt nosaukumu", "change_name_successfully": "Vārds veiksmīgi nomainīts", "change_password": "Nomainīt paroli", + "change_password_description": "Vai nu šī ir pirmā reize, kad pieslēdzaties sistēmai, vai arī ir iesniegts pieprasījums mainīt paroli. Lūdzu, ievadiet jauno paroli zemāk.", "change_password_form_confirm_password": "Apstiprināt Paroli", "change_password_form_description": "Sveiki {name},\n\nŠī ir pirmā reize, kad pierakstāties sistēmā, vai arī ir iesniegts pieprasījums mainīt paroli. Lūdzu, zemāk ievadiet jauno paroli.", "change_password_form_new_password": "Jauna Parole", @@ -445,7 +475,9 @@ "city": "Pilsēta", "clear": "Notīrīt", "clear_all": "Notīrīt visu", + "clear_all_recent_searches": "Notīrīt visas pēdējās meklēšanas", "clear_file_cache": "Notīrīt failu kešatmiņu", + "clear_message": "Notīrīt paziņojumu", "clear_value": "Notīrīt vērtību", "client_cert_dialog_msg_confirm": "Labi", "client_cert_enter_password": "Ievadi paroli", @@ -462,10 +494,14 @@ "color": "Krāsa", "color_theme": "Krāsu tēma", "comment_deleted": "Komentārs dzēsts", + "comment_options": "Komentāru iespējas", + "comments_and_likes": "Komentāri un tīkšķi", + "comments_are_disabled": "Komentāri ir atslēgti", "common_create_new_album": "Izveidot jaunu albumu", "common_server_error": "Lūdzu, pārbaudiet tīkla savienojumu, pārliecinieties, vai serveris ir sasniedzams un aplikācijas/servera versijas ir saderīgas.", "completed": "Pabeigts", "confirm": "Apstiprināt", + "confirm_admin_password": "Administratora paroles apstiprinājums", "confirm_new_pin_code": "Apstiprināt jauno PIN kodu", "confirm_password": "Apstiprināt paroli", "confirm_tag_face": "Vai vēlies atzīmēt šo seju kā {name}?", @@ -482,6 +518,8 @@ "copy_error": "Kopēšanas kļūda", "copy_to_clipboard": "Kopēt starpliktuvē", "country": "Valsts", + "cover": "Aizpildīts ekrāns", + "covers": "Vāciņi", "create": "Izveidot", "create_album": "Izveidot albumu", "create_album_page_untitled": "Bez nosaukuma", @@ -490,6 +528,7 @@ "create_link_to_share": "Izveidot kopīgošanas saiti", "create_new": "IZVEIDOT JAUNU", "create_new_person": "Izveidot jaunu personu", + "create_new_person_hint": "Piesaistīt izvēlētos failus jaunai personai", "create_new_user": "Izveidot jaunu lietotāju", "create_shared_album_page_share_add_assets": "PIEVIENOT AKTĪVUS", "create_shared_album_page_share_select_photos": "Fotoattēlu Izvēle", @@ -544,6 +583,8 @@ "details": "INFORMĀCIJA", "direction": "Secība", "discord": "Discord", + "discover": "Atklāt", + "discovered_devices": "Atrastās ierīces", "display_order": "Attēlošanas secība", "display_original_photos": "Rādīt oriģinālās fotogrāfijas", "documentation": "Dokumentācija", @@ -556,6 +597,8 @@ "download_error": "Lejupielādes kļūda", "download_failed": "Lejupielāde neizdevās", "download_finished": "Lejupielāde pabeigta", + "download_include_embedded_motion_videos": "Iegultie videoklipi", + "download_include_embedded_motion_videos_description": "Iekļaut video, kas iebūvēti kustīgos fotoattēlos, kā atsevišķu failu", "download_notfound": "Lejupielāde nav atrasta", "download_paused": "Lejupielāde nopauzēta", "download_settings": "Lejupielāde", @@ -607,6 +650,7 @@ "enter_your_pin_code_subtitle": "Ievadi savu PIN kodu, lai piekļūtu slēgtajai mapei", "error": "Kļūda", "error_change_sort_album": "Neizdevās nomainīt albuma kārtošanas secību", + "error_loading_image": "Kļūda, ielādējot attēlu", "error_loading_partners": "Kļūda, ielādējot partnerus: {error}", "error_saving_image": "Kļūda: {error}", "errors": { @@ -640,7 +684,8 @@ "unable_to_save_date_of_birth": "Neizdevās saglabāt dzimšanas datumu", "unable_to_scan_libraries": "Bibliotēku skenēšana neizdevās", "unable_to_scan_library": "Bibliotēkas skenēšana neizdevās", - "unable_to_trash_asset": "Neizdevās pārvietot failu uz atkritni" + "unable_to_trash_asset": "Neizdevās pārvietot failu uz atkritni", + "unable_to_update_album_cover": "Nevar atjaunināt albuma vāciņu" }, "exif": "Exif", "exif_bottom_sheet_description": "Pievienot Aprakstu...", @@ -712,6 +757,10 @@ "hashed_assets": "Faili ar jaucējvērtībām", "hashing": "Veido jaucējvērtības", "header_settings_field_validator_msg": "Vērtība nevar būt tukša", + "header_settings_header_name_input": "Galvenes lauks", + "header_settings_header_value_input": "Galvenes vērtība", + "headers_settings_tile_subtitle": "Norādiet starpniekservera galvenes, kuras lietotnei jānosūta ar katru tīkla pieprasījumu", + "headers_settings_tile_title": "Pielāgotas starpniekservera galvenes", "hide_all_people": "Paslēpt visas personas", "hide_gallery": "Paslēpt galeriju", "hide_named_person": "Paslēpt personu {name}", @@ -742,7 +791,7 @@ "ignore_icloud_photos_description": "iCloud uzglabātās fotogrāfijas netiks augšupielādētas Immich serverī", "image": "Attēls", "image_saved_successfully": "Attēls saglabāts", - "image_viewer_page_state_provider_download_started": "Lejupielāde Uzsākta", + "image_viewer_page_state_provider_download_started": "Lejupielāde uzsākta", "image_viewer_page_state_provider_download_success": "Lejupielāde izdevās", "image_viewer_page_state_provider_share_error": "Kopīgošanas Kļūda", "immich_logo": "Immich logo", @@ -908,6 +957,7 @@ "network_requirement_photos_upload": "Izmantot mobilo datu pārraidi, lai dublētu fotoattēlus", "network_requirement_videos_upload": "Izmantot mobilo datu pārraidi, lai dublētu video", "network_requirements": "Tīkla prasības", + "network_requirements_updated": "Tīkla prasības ir mainījušās, atiestata dublēšanas rindu", "networking_settings": "Tīkla iestatījumi", "networking_subtitle": "Pārvaldīt servera galapunktu iestatījumus", "never": "nekad", @@ -928,8 +978,12 @@ "no_archived_assets_message": "Arhivē fotoattēlus un videoklipus, lai paslēptu tos no Fotoattēli skata", "no_assets_message": "NOKLIKŠĶINIET, LAI AUGŠUPIELĀDĒTU SAVU PIRMO FOTOATTĒLU", "no_assets_to_show": "Nav uzrādāmo aktīvu", + "no_cast_devices_found": "Nav atrasta neviena pārraides ierīce", + "no_checksum_local": "Nav pieejama kontrolsumma - nevar iegūt vietējos failus", + "no_checksum_remote": "Nav pieejama kontrolsumma - nevar iegūt attālo failu", "no_duplicates_found": "Dublikāti netika atrasti.", "no_exif_info_available": "Nav pieejama exif informācija", + "no_explore_results_message": "Augšupielādē vairāk fotogrāfiju, lai iepazītu savu kolekciju.", "no_name": "Nav nosaukuma", "no_notifications": "Nav paziņojumu", "no_places": "Nav atrašanās vietu", @@ -1172,13 +1226,14 @@ "search_page_your_activity": "Jūsu aktivitāte", "search_page_your_map": "Jūsu Karte", "search_people": "Meklēt personas", + "search_rating": "Meklēt pēc vērtējuma...", "search_result_page_new_search_hint": "Jauns Meklējums", "search_settings": "Meklēt iestatījumos", "search_state": "Meklēt pēc štata...", "search_suggestion_list_smart_search_hint_1": "Viedā meklēšana pēc noklusējuma ir iespējota, lai meklētu metadatos, izmanto sintaksi ", "search_suggestion_list_smart_search_hint_2": "m:jūsu-meklēšanas-frāze", "search_type": "Meklēšanas veids", - "search_your_photos": "Meklēt Jūsu fotoattēlus", + "search_your_photos": "Meklēt fotoattēlos", "second": "Sekunde", "see_all_people": "Skatīt visas personas", "select_album_cover": "Izvēlieties albuma vāciņu", @@ -1200,6 +1255,8 @@ "server_privacy": "Servera privātums", "server_stats": "Servera statistika", "server_version": "Servera versija", + "set_as_album_cover": "Iestatīt kā albuma vāciņu", + "set_as_profile_picture": "Iestatīt kā profila attēlu", "set_date_of_birth": "Iestatīt dzimšanas datumu", "setting_image_viewer_help": "Detaļu skatītājs vispirms ielādē mazo sīktēlu, pēc tam ielādē vidēja lieluma priekšskatījumu (ja iespējots), visbeidzot ielādē oriģinālu (ja iespējots).", "setting_image_viewer_original_subtitle": "Iespējot sākotnējā pilnas izšķirtspējas attēla (liels!) ielādi. Atspējot, lai samazinātu datu lietojumu (gan tīklā, gan ierīces kešatmiņā).", @@ -1227,7 +1284,7 @@ "setup_pin_code": "Uzstādīt PIN kodu", "share": "Kopīgot", "share_add_photos": "Pievienot fotoattēlus", - "share_assets_selected": "{count} izvēlēti", + "share_assets_selected": "{count} atlasīti", "share_dialog_preparing": "Notiek sagatavošana...", "shared": "Kopīgots", "shared_album_activities_input_disable": "Komentāri atslēgti", @@ -1317,7 +1374,9 @@ "sort_title": "Nosaukums", "source": "Pirmkods", "stack": "Apvienot kaudzē", + "start": "Sākt", "start_date": "Sākuma datums", + "start_date_before_end_date": "Sākuma datumam jābūt pirms beigu datuma", "state": "Štats", "status": "Statuss", "stop_photo_sharing": "Beigt kopīgot jūsu fotogrāfijas?", @@ -1386,6 +1445,7 @@ "unlimited": "Neierobežots", "unnamed_album": "Albums bez nosaukuma", "unsaved_change": "Nesaglabāta izmaiņa", + "unselect_all": "Atcelt visu atlasi", "unstack": "At-Stekot", "updated_at": "Atjaunināts", "updated_password": "Parole ir atjaunināta", @@ -1426,6 +1486,7 @@ "version_history": "Versiju vēsture", "version_history_item": "{version} uzstādīta {date}", "video": "Videoklips", + "video_hover_setting_description": "Atskaņot video sīktēlu, kad peles kursors atrodas virs objekta. Pat ja funkcija ir atspējota, atskaņošanu var sākt, uzvirzot kursoru uz atskaņošanas ikonas.", "videos": "Videoklipi", "view": "Apskatīt", "view_album": "Skatīt Albumu", diff --git a/i18n/ml.json b/i18n/ml.json index 1ef0b46e66..0c85d53bd3 100644 --- a/i18n/ml.json +++ b/i18n/ml.json @@ -1,87 +1,2135 @@ { - "about": "വിഷയത്തെക്കുറിച്ച്", + "about": "കുറിച്ച്", "account": "അക്കൗണ്ട്", - "account_settings": "അക്കൗണ്ട് സെറ്റിംഗ്സ്", + "account_settings": "അക്കൗണ്ട് ക്രമീകരണങ്ങൾ", "acknowledge": "അംഗീകരിക്കുക", - "action": "ആക്ഷന്‍", - "action_common_update": "പുതുക്കുക", + "action": "പ്രവർത്തനം", + "action_common_update": "അപ്ഡേറ്റ് ചെയ്യുക", "actions": "പ്രവർത്തികൾ", - "active": "സജീവമായവ", - "activity": "പ്രവർത്തനങ്ങൾ", + "active": "സജീവം", + "activity": "പ്രവർത്തനം", + "activity_changed": "പ്രവർത്തനം {enabled, select, true {പ്രവർത്തനക്ഷമമാക്കി} other {നിർജ്ജീവമാക്കി}}", "add": "ചേർക്കുക", - "add_a_description": "ഒരു വിവരണം ചേർക്കുക", - "add_a_location": "ഒരു സ്ഥലം ചേർക്കുക", - "add_a_name": "ഒരു പേര് ചേർക്കുക", - "add_a_title": "ഒരു ശീർഷകം ചേർക്കുക", + "add_a_description": "വിവരണം ചേർക്കുക", + "add_a_location": "സ്ഥാനം ചേർക്കുക", + "add_a_name": "പേര് ചേർക്കുക", + "add_a_title": "ശീർഷകം ചേർക്കുക", "add_birthday": "ജന്മദിനം ചേർക്കുക", - "add_endpoint": "എൻഡ്പോയിന്റ് ചേർക്കുക", - "add_exclusion_pattern": "ഒഴിവാക്കാനുള്ള മാതൃക ചേർക്കുക", - "add_import_path": "ഇറക്കുമതി ചെയ്യുക", - "add_location": "സ്ഥലനാമം ചേര്‍ക്കുക", - "add_more_users": "കൂടുതല്‍ ഉപയോക്താക്കളെ ചേര്‍ക്കുക", - "add_partner": "പങ്കാളിയെ ചേര്‍ക്കുക", - "add_path": "പാത ചേര്‍ക്കുക", - "add_photos": "ചിത്രങ്ങള്‍ ചേര്‍ക്കുക", - "add_tag": "ടാഗ് ചേര്‍ക്കുക", - "add_to": "ചേര്‍ക്കുക…", - "add_to_album": "ആല്‍ബത്തിലേക്ക് ചേര്‍ക്കുക", - "add_to_album_bottom_sheet_added": "{album} - ലേക്ക് ചേര്‍ത്തു", - "add_to_album_bottom_sheet_already_exists": "{album} ആൽബത്തിൽ ഇപ്പോള്‍ തന്നെ ഉണ്ട്", - "add_to_albums": "ആൽബങ്ങളിൽ ചേർക്കുക", - "add_to_albums_count": "ആൽബങ്ങളിൽ ചേർക്കുക ({count})", + "add_endpoint": "എൻഡ്‌പോയിന്റ് ചേർക്കുക", + "add_exclusion_pattern": "ഒഴിവാക്കൽ പാറ്റേൺ ചേർക്കുക", + "add_import_path": "ഇമ്പോർട്ട് പാത്ത് ചേർക്കുക", + "add_location": "സ്ഥാനം ചേർക്കുക", + "add_more_users": "കൂടുതൽ ഉപയോക്താക്കളെ ചേർക്കുക", + "add_partner": "പങ്കാളിയെ ചേർക്കുക", + "add_path": "പാത്ത് ചേർക്കുക", + "add_photos": "ഫോട്ടോകൾ ചേർക്കുക", + "add_tag": "ടാഗ് ചേർക്കുക", + "add_to": "...ലേക്ക് ചേർക്കുക", + "add_to_album": "ആൽബത്തിലേക്ക് ചേർക്കുക", + "add_to_album_bottom_sheet_added": "{album} എന്നതിലേക്ക് ചേർത്തു", + "add_to_album_bottom_sheet_already_exists": "{album}-ൽ ഇതിനകം തന്നെയുണ്ട്", + "add_to_album_bottom_sheet_some_local_assets": "ചില പ്രാദേശിക അസറ്റുകൾ ആൽബത്തിലേക്ക് ചേർക്കാൻ കഴിഞ്ഞില്ല", + "add_to_album_toggle": "{album}-നുള്ള തിരഞ്ഞെടുപ്പ് ടോഗിൾ ചെയ്യുക", + "add_to_albums": "ആൽബങ്ങളിലേക്ക് ചേർക്കുക", + "add_to_albums_count": "ആൽബങ്ങളിലേക്ക് ചേർക്കുക ({count})", "add_to_shared_album": "പങ്കിട്ട ആൽബത്തിലേക്ക് ചേർക്കുക", - "add_url": "URL ചേര്‍ക്കുക", - "added_to_archive": "ചരിത്രരേഖയായി (ആര്‍ക്കൈവ്) ചേര്‍ത്തിരിക്കുന്നു", - "added_to_favorites": "ഇഷ്ടപ്പെട്ടവയിലേക്ക് ചേര്‍ത്തു", - "added_to_favorites_count": "{count, number} ഇഷ്ടപ്പെട്ടവയിലേക്ക് ചേര്‍ത്തു", + "add_url": "URL ചേർക്കുക", + "added_to_archive": "ആർക്കൈവിലേക്ക് ചേർത്തു", + "added_to_favorites": "പ്രിയപ്പെട്ടവയിലേക്ക് ചേർത്തു", + "added_to_favorites_count": "{count, number} എണ്ണം പ്രിയപ്പെട്ടവയിലേക്ക് ചേർത്തു", "admin": { - "add_exclusion_pattern_description": "ഒഴിവാക്കൽ ചിഹ്നങ്ങള്‍ ചേർക്കുക. *, **, ? എന്നിവ ഉപയോഗിച്ചുള്ള ഗ്ലോബിംഗ് പിന്തുണയ്ക്കുന്നു. \"Raw\" എന്ന് പേരുള്ള ഏതെങ്കിലും ഡയറക്ടറിയിലെ എല്ലാ ഫയലുകളും അവഗണിക്കാൻ, \"**/Raw/**\" ഉപയോഗിക്കുക. \".tif\" ൽ അവസാനിക്കുന്ന എല്ലാ ഫയലുകളും അവഗണിക്കാൻ, \"**/*.tif\" ഉപയോഗിക്കുക. ഒരു പരിപൂർണ്ണമായ പാത അവഗണിക്കാൻ, \"/path/to/ignore/**\" ഉപയോഗിക്കുക.", - "admin_user": "ഭരണാധികാരി", - "asset_offline_description": "ഈ പുറത്തുള്ള ശേഖരത്തിലെ വസ്തുക്കള്‍ ഇനി ഡിസ്കിൽ കാണുന്നില്ല, അവയെ ട്രാഷിലേക്ക് നീക്കിയിരിക്കുന്നു. ഫയൽ ലൈബ്രറിക്കുള്ളിൽ നിന്ന് നീക്കിയിട്ടുണ്ടെങ്കിൽ, പുതിയ അനുബന്ധ വസ്തുവിനായി നിങ്ങളുടെ സമയക്രമം (ടൈംലൈന്‍) പരിശോധിക്കുക. ഈ വസ്തു പുനഃസ്ഥാപിക്കാൻ, താഴെയുള്ള ഫയൽ പാത്ത് ഇമ്മിച്ചിന് എത്തിപ്പെടാന്‍ കഴിയുമെന്ന് ഉറപ്പാക്കുകയും ശേഖരം പുനഃപരിശോധിക്കുകയും (സ്കാൻ) ചെയ്യുക.", - "authentication_settings": "ആധികാരികതാ സജ്ജീകരണങ്ങൾ", - "authentication_settings_description": "പാസ്സ്‌വേര്‍ഡ്‌, OAuth തുടങ്ങിയ സജ്ജീകരണങ്ങള്‍", - "authentication_settings_disable_all": "എല്ലാ പ്രവേശന (ലോഗിൻ) രീതികളും പ്രവർത്തനരഹിതമാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? പ്രവേശനങ്ങള്‍ പൂർണ്ണമായും പ്രവർത്തനരഹിതമാക്കപ്പെടും.", - "background_task_job": "പശ്ചാത്തല പ്രവര്‍ത്തികള്‍", - "backup_database": "ഡാറ്റാബേസ് ഡംമ്പ് ഉണ്ടാക്കുക", - "backup_database_enable_description": "ഡാറ്റാബേസ് ഡമ്പുകൾ പ്രാപ്തമാക്കുക", - "backup_keep_last_amount": "പഴയ ഡാറ്റാബേസ് ഡമ്പുകൾ എത്രയെണ്ണം സൂക്ഷിക്കണം", - "backup_settings": "ഡാറ്റാബേസ് ഡമ്പ് ക്രമീകരണങ്ങള്‍", - "backup_settings_description": "ഡാറ്റാബേസ് ഡമ്പ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക.", - "cleared_jobs": "{job} - ന്‍റെ ജോലികള്‍ മായ്ച്ചിരിക്കുന്നു", - "config_set_by_file": "ക്രമീകരണങ്ങള്‍ ഇപ്പോള്‍ ഒരു ക്രമീകരണ ഫയല്‍ വഴിയാണ് നിശ്ചയിക്കുന്നത്", - "confirm_delete_library": "{library} മായ്ച്ചു കളയണം എന്നുറപ്പാണോ?", - "confirm_delete_library_assets": "ഈ ശേഖരം ഇല്ലാതാക്കണം എന്ന് ഉറപ്പാണോ? ഇത് ഇമ്മിച്ചിൽ നിന്ന് {count, plural, one {# contained asset} other {all # contained assets}} ഇല്ലാതാക്കും, ഇത് പഴയപടിയാക്കാൻ കഴിയില്ല. ഫയലുകൾ ഡിസ്കിൽ തന്നെ തുടരും.", - "confirm_email_below": "തീര്‍ച്ചപ്പെടുത്താന്‍ {email} താഴെ കൊടുക്കുക", - "confirm_reprocess_all_faces": "എല്ലാ മുഖങ്ങളും വീണ്ടും കണ്ടെത്തണം എന്ന് ഉറപ്പാണോ? ഇത് ഇതിനകം പേരു ചേര്‍ത്ത മുഖങ്ങളെയും ആളുകളെയും മായ്ക്കും.", - "confirm_user_password_reset": "{user} എന്ന ഉപയോക്താവിന്‍റെ പാസ്സ്‌വേര്‍ഡ്‌ പുനഃക്രമീകരിക്കണം എന്നുറപ്പാണോ?", - "confirm_user_pin_code_reset": "{user} എന്ന ഉപയോക്താവിന്‍റെ PIN പുനഃക്രമീകരിക്കണം എന്നുറപ്പാണോ?", - "create_job": "ജോലി സൃഷ്ടിക്കുക", - "cron_expression": "ക്രോണ്‍ (cron) പ്രയോഗശൈലി", - "cron_expression_description": "ക്രോൺ ഫോർമാറ്റ് ഉപയോഗിച്ച് സ്കാനിംഗ് ഇടവേള സജ്ജമാക്കുക. കൂടുതൽ വിവരങ്ങൾക്ക് Crontab Guru സന്ദര്‍ശിക്കുക", - "cron_expression_presets": "മുന്‍കൂട്ടി തയ്യാര്‍ ചെയ്ത ക്രോണ്‍ പ്രവര്‍ത്തനശൈലികള്‍", - "disable_login": "ലോഗിന്‍ തടയുക", - "duplicate_detection_job_description": "സമാനമായ ചിത്രങ്ങൾ കണ്ടെത്താൻ വസ്തുവഹകളില്‍ യന്ത്രപഠനം പ്രവർത്തിപ്പിക്കുക. ഇത് സ്മാർട്ട് സര്‍ച്ചിനെ ആശ്രയിക്കുന്നു", - "exclusion_pattern_description": "നിങ്ങളുടെ ലൈബ്രറി സ്കാൻ ചെയ്യുമ്പോൾ ഫയലുകളും ഫോൾഡറുകളും അവഗണിക്കാൻ ഒഴിവാക്കല്‍ മാതൃകകള്‍ നിങ്ങളെ അനുവദിക്കുന്നു. RAW ഫയലുകൾ പോലുള്ള നിങ്ങൾക്ക് ഇറക്കുമതി ചെയ്യാൻ താൽപ്പര്യമില്ലാത്ത ഫയലുകൾ അടങ്ങിയ ഫോൾഡറുകൾ ഉണ്ടെങ്കിൽ ഇത് ഉപയോഗപ്രദമാണ്.", - "external_library_management": "ബാഹ്യമായശേഖരങ്ങളുടെ നിയന്ത്രണം", - "face_detection": "മുഖങ്ങള്‍ കണ്ടെത്തുക", - "face_detection_description": "യന്ത്രപഠനം ഉപയോഗിച്ച് വസ്തുക്കളിലെ മുഖങ്ങൾ കണ്ടെത്തുക. വീഡിയോകൾക്ക്, തംബ്‌നെയിൽ മാത്രമേ പരിഗണിക്കൂ. \"Refresh\" എല്ലാ വസ്തുക്കളും (വീണ്ടും) പ്രോസസ്സ് ചെയ്യുന്നു. കൂടാതെ \"Reset\" നിലവിലുള്ള എല്ലാ മുഖളും വിവരങ്ങളും മായ്‌ക്കുന്നു. \"Missing\" ഇതുവരെ ക്രമീകരിക്കാത്ത വസ്തുക്കളെ വരിയിലേക്ക് നിർത്തുന്നു. മുഖം തിരിച്ചറിയൽ പൂർത്തിയായ ശേഷം കണ്ടെത്തിയ മുഖങ്ങൾ മുഖം തിരിച്ചറിയലിനായി ക്യൂവിൽ നിർത്തും, അവയെ നിലവിലുള്ളതോ പുതിയതോ ആയ ആളുകളിലേക്ക് ഗ്രൂപ്പുചെയ്യും.", - "facial_recognition_job_description": "കണ്ടെത്തിയ മുഖങ്ങളെ ആളുകളുടെ കൂട്ടം ആക്കുക. മുഖം കണ്ടെത്തല്‍ ഘട്ടത്തിനു ശേഷമേ ഇത് ഉണ്ടാകൂ. \"Reset\" വീണ്ടും കൂട്ടങ്ങളെ ഉണ്ടാക്കും. \"Missing\" ആളെ നിയോഗിക്കാത്ത മുഖങ്ങളെ വരിയിലേക്ക് ചേര്‍ക്കുന്നു.", - "failed_job_command": "{job} എന്ന ജോലിക്ക് വേണ്ടിയുള്ള ആജ്ഞ {command} പരാജയപ്പെട്ടിരിക്കുന്നു", - "force_delete_user_warning": "മുന്നറിയിപ്പ്: ഇത് ഉപയോക്താവിനെയും എല്ലാ വസ്തുക്കളേയും ഉടനടി നീക്കം ചെയ്യും. ഇത് പഴയപടിയാക്കാനോ ഫയലുകൾ വീണ്ടെടുക്കാനോ കഴിയില്ല.", - "image_format": "ഘടന", - "image_format_description": "WebP ഉണ്ടാക്കാന്‍ സമയം എടുക്കും എങ്കിലും JPEG ഫയലുകളെക്കാള്‍ ചെറുതായിരിക്കും.", - "image_fullsize_description": "അധികവിവരങ്ങള്‍ ഒഴിവാക്കിയ ചിത്രം, വലുതാക്കി കാണിക്കുമ്പോള്‍ ഉപയോഗിക്കപ്പെടുന്നു", - "image_fullsize_enabled": "പൂര്‍ണ വലുപ്പത്തില്‍ ഉള്ള ചിത്രങ്ങള്‍ ഉണ്ടാക്കാന്‍പ്രാപ്തമാക്കുക", - "image_fullsize_quality_description": "1 മുതൽ 100 വരെയുള്ള പൂർണ്ണ വലുപ്പത്തിലുള്ള ഇമേജ് നിലവാരം. ഉയർന്നതാണ് നല്ലത്, പക്ഷേ വലിയ ഫയലുകൾ ഉത്പാദിപ്പിക്കുന്നു.", - "image_fullsize_title": "പൂർണ്ണ വലുപ്പത്തിലുള്ള ഇമേജ് ക്രമീകരണങ്ങൾ", - "image_quality": "ഗുണനിലവാരം", + "add_exclusion_pattern_description": "ഒഴിവാക്കൽ പാറ്റേണുകൾ ചേർക്കുക. *, **, ? എന്നിവ ഉപയോഗിച്ചുള്ള ഗ്ലോബിംഗ് പിന്തുണയ്ക്കുന്നു. \"Raw\" എന്ന് പേരുള്ള ഏതെങ്കിലും ഡയറക്ടറിയിലെ എല്ലാ ഫയലുകളും ഒഴിവാക്കാൻ, \"**/Raw/**\" ഉപയോഗിക്കുക. \".tif\"-ൽ അവസാനിക്കുന്ന എല്ലാ ഫയലുകളും ഒഴിവാക്കാൻ, \"**/*.tif\" ഉപയോഗിക്കുക. ഒരു കേവല പാത്ത് ഒഴിവാക്കാൻ, \"/path/to/ignore/**\" ഉപയോഗിക്കുക.", + "admin_user": "അഡ്മിൻ ഉപയോക്താവ്", + "asset_offline_description": "ഈ എക്സ്റ്റേണൽ ലൈബ്രറി അസറ്റ് ഇപ്പോൾ ഡിസ്കിൽ ലഭ്യമല്ല, അത് ട്രാഷിലേക്ക് മാറ്റിയിരിക്കുന്നു. ഫയൽ ലൈബ്രറിക്കുള്ളിൽ നീക്കിയിട്ടുണ്ടെങ്കിൽ, പുതിയ അനുബന്ധ അസറ്റിനായി നിങ്ങളുടെ ടൈംലൈൻ പരിശോധിക്കുക. ഈ അസറ്റ് പുനഃസ്ഥാപിക്കാൻ, താഴെയുള്ള ഫയൽ പാത Immich-ന് ആക്സസ് ചെയ്യാൻ കഴിയുമെന്ന് ഉറപ്പാക്കുകയും ലൈബ്രറി സ്കാൻ ചെയ്യുകയും ചെയ്യുക.", + "authentication_settings": "പ്രാമാണീകരണ ക്രമീകരണങ്ങൾ", + "authentication_settings_description": "പാസ്‌വേഡ്, OAuth, മറ്റ് പ്രാമാണീകരണ ക്രമീകരണങ്ങൾ എന്നിവ കൈകാര്യം ചെയ്യുക", + "authentication_settings_disable_all": "എല്ലാ ലോഗിൻ രീതികളും പ്രവർത്തനരഹിതമാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ലോഗിൻ പൂർണ്ണമായും പ്രവർത്തനരഹിതമാകും.", + "authentication_settings_reenable": "വീണ്ടും പ്രവർത്തനക്ഷമമാക്കാൻ, ഒരു സെർവർ കമാൻഡ് ഉപയോഗിക്കുക.", + "background_task_job": "പശ്ചാത്തല ജോലികൾ", + "backup_database": "ഡാറ്റാബേസ് ഡംപ് ഉണ്ടാക്കുക", + "backup_database_enable_description": "ഡാറ്റാബേസ് ഡംപുകൾ പ്രവർത്തനക്ഷമമാക്കുക", + "backup_keep_last_amount": "സൂക്ഷിക്കേണ്ട പഴയ ഡംപുകളുടെ എണ്ണം", + "backup_onboarding_1_description": "ക്ലൗഡിലോ മറ്റൊരു ഭൗതിക സ്ഥാനത്തോ ഉള്ള ഓഫ്‌സൈറ്റ് പകർപ്പ്.", + "backup_onboarding_2_description": "വിവിധ ഉപകരണങ്ങളിലെ പ്രാദേശിക പകർപ്പുകൾ. ഇതിൽ പ്രധാന ഫയലുകളും ആ ഫയലുകളുടെ പ്രാദേശിക ബാക്കപ്പും ഉൾപ്പെടുന്നു.", + "backup_onboarding_3_description": "യഥാർത്ഥ ഫയലുകൾ ഉൾപ്പെടെ നിങ്ങളുടെ ഡാറ്റയുടെ ആകെ പകർപ്പുകൾ. ഇതിൽ 1 ഓഫ്‌സൈറ്റ് പകർപ്പും 2 പ്രാദേശിക പകർപ്പുകളും ഉൾപ്പെടുന്നു.", + "backup_onboarding_description": "നിങ്ങളുടെ ഡാറ്റ പരിരക്ഷിക്കാൻ 3-2-1 ബാക്കപ്പ് തന്ത്രം ശുപാർശ ചെയ്യുന്നു. സമഗ്രമായ ഒരു ബാക്കപ്പ് പരിഹാരത്തിനായി, നിങ്ങൾ അപ്‌ലോഡ് ചെയ്ത ഫോട്ടോകളുടെ/വീഡിയോകളുടെ പകർപ്പുകളും Immich ഡാറ്റാബേസും സൂക്ഷിക്കേണ്ടതാണ്.", + "backup_onboarding_footer": "Immich ബാക്കപ്പ് ചെയ്യുന്നതിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്കായി, ദയവായി ഡോക്യുമെന്റേഷൻ പരിശോധിക്കുക.", + "backup_onboarding_parts_title": "ഒരു 3-2-1 ബാക്കപ്പിൽ ഉൾപ്പെടുന്നവ:", + "backup_onboarding_title": "ബാക്കപ്പുകൾ", + "backup_settings": "ഡാറ്റാബേസ് ഡംപ് ക്രമീകരണങ്ങൾ", + "backup_settings_description": "ഡാറ്റാബേസ് ഡംപ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക.", + "cleared_jobs": "{job}-നുള്ള ജോലികൾ ക്ലിയർ ചെയ്തു", + "config_set_by_file": "കോൺഫിഗറേഷൻ നിലവിൽ ഒരു കോൺഫിഗറേഷൻ ഫയൽ വഴിയാണ് സജ്ജീകരിച്ചിരിക്കുന്നത്", + "confirm_delete_library": "{library} ലൈബ്രറി ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "confirm_delete_library_assets": "ഈ ലൈബ്രറി ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഇത് Immich-ൽ നിന്ന് {count, plural, one {അതിലുള്ള ഒരു അസറ്റ്} other {അതിലുള്ള എല്ലാ # അസറ്റുകളും}} ഇല്ലാതാക്കും, ഇത് പഴയപടിയാക്കാൻ കഴിയില്ല. ഫയലുകൾ ഡിസ്കിൽ തന്നെ തുടരും.", + "confirm_email_below": "സ്ഥിരീകരിക്കുന്നതിന്, താഴെ \"{email}\" എന്ന് ടൈപ്പ് ചെയ്യുക", + "confirm_reprocess_all_faces": "എല്ലാ മുഖങ്ങളും വീണ്ടും പ്രോസസ്സ് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഇത് പേരുള്ള ആളുകളെയും നീക്കം ചെയ്യും.", + "confirm_user_password_reset": "{user}-ന്റെ പാസ്‌വേഡ് റീസെറ്റ് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "confirm_user_pin_code_reset": "{user}-ന്റെ പിൻ കോഡ് റീസെറ്റ് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "create_job": "ജോലി ഉണ്ടാക്കുക", + "cron_expression": "ക്രോൺ എക്സ്പ്രഷൻ", + "cron_expression_description": "ക്രോൺ ഫോർമാറ്റ് ഉപയോഗിച്ച് സ്കാനിംഗ് ഇടവേള സജ്ജീകരിക്കുക. കൂടുതൽ വിവരങ്ങൾക്കായി ദയവായി ക്രോൺടാബ് ഗുരു പോലുള്ളവ പരിശോധിക്കുക", + "cron_expression_presets": "ക്രോൺ എക്സ്പ്രഷൻ പ്രീസെറ്റുകൾ", + "disable_login": "ലോഗിൻ പ്രവർത്തനരഹിതമാക്കുക", + "duplicate_detection_job_description": "സമാന ചിത്രങ്ങൾ കണ്ടെത്താൻ അസറ്റുകളിൽ മെഷീൻ ലേണിംഗ് പ്രവർത്തിപ്പിക്കുക. ഇത് സ്മാർട്ട് സെർച്ചിനെ ആശ്രയിച്ചിരിക്കുന്നു", + "exclusion_pattern_description": "നിങ്ങളുടെ ലൈബ്രറി സ്കാൻ ചെയ്യുമ്പോൾ ഫയലുകളും ഫോൾഡറുകളും ഒഴിവാക്കാൻ എക്സ്ക്ലൂഷൻ പാറ്റേണുകൾ നിങ്ങളെ സഹായിക്കുന്നു. നിങ്ങൾ ഇമ്പോർട്ട് ചെയ്യാൻ ആഗ്രഹിക്കാത്ത ഫയലുകൾ അടങ്ങിയ ഫോൾഡറുകൾ (ഉദാഹരണത്തിന് RAW ഫയലുകൾ) ഉണ്ടെങ്കിൽ ഇത് ഉപയോഗപ്രദമാണ്.", + "external_library_management": "എക്സ്റ്റേണൽ ലൈബ്രറി മാനേജ്മെന്റ്", + "face_detection": "മുഖം തിരിച്ചറിയൽ", + "face_detection_description": "മെഷീൻ ലേണിംഗ് ഉപയോഗിച്ച് അസറ്റുകളിലെ മുഖങ്ങൾ കണ്ടെത്തുക. വീഡിയോകൾക്കായി, തംബ്നെയിൽ മാത്രമേ പരിഗണിക്കൂ. \"റിഫ്രഷ്\" എല്ലാ അസറ്റുകളും വീണ്ടും പ്രോസസ്സ് ചെയ്യുന്നു. \"റീസെറ്റ്\" നിലവിലുള്ള എല്ലാ മുഖ ഡാറ്റയും നീക്കംചെയ്യുന്നു. \"മിസ്സിംഗ്\" ഇതുവരെ പ്രോസസ്സ് ചെയ്യാത്ത അസറ്റുകളെ ക്യൂവിലാക്കുന്നു. മുഖം തിരിച്ചറിയൽ പൂർത്തിയായ ശേഷം, കണ്ടെത്തിയ മുഖങ്ങൾ ഫേഷ്യൽ റെക്കഗ്നിഷനായി ക്യൂ ചെയ്യപ്പെടും, അവയെ നിലവിലുള്ളതോ പുതിയതോ ആയ ആളുകളായി തരംതിരിക്കും.", + "facial_recognition_job_description": "കണ്ടെത്തിയ മുഖങ്ങളെ ആളുകളായി ഗ്രൂപ്പ് ചെയ്യുക. മുഖം കണ്ടെത്തൽ പൂർത്തിയായതിന് ശേഷമാണ് ഈ ഘട്ടം പ്രവർത്തിക്കുന്നത്. \"റീസെറ്റ്\" എല്ലാ മുഖങ്ങളെയും വീണ്ടും ക്ലസ്റ്റർ ചെയ്യുന്നു. \"മിസ്സിംഗ്\" ഒരു വ്യക്തിയെയും അസൈൻ ചെയ്യാത്ത മുഖങ്ങളെ ക്യൂവിലാക്കുന്നു.", + "failed_job_command": "{job} എന്ന ജോലിക്കുള്ള കമാൻഡ് {command} പരാജയപ്പെട്ടു", + "force_delete_user_warning": "മുന്നറിയിപ്പ്: ഇത് ഉപയോക്താവിനെയും എല്ലാ അസറ്റുകളെയും ഉടനടി നീക്കം ചെയ്യും. ഇത് പഴയപടിയാക്കാൻ കഴിയില്ല, ഫയലുകൾ വീണ്ടെടുക്കാനും സാധിക്കില്ല.", + "image_format": "ഫോർമാറ്റ്", + "image_format_description": "WebP, JPEG-നെക്കാൾ ചെറിയ ഫയലുകൾ നിർമ്മിക്കുന്നു, പക്ഷേ എൻകോഡ് ചെയ്യാൻ വേഗത കുറവാണ്.", + "image_fullsize_description": "മെറ്റാഡാറ്റ നീക്കംചെയ്ത പൂർണ്ണ വലുപ്പത്തിലുള്ള ചിത്രം, സൂം ചെയ്യുമ്പോൾ ഉപയോഗിക്കുന്നു", + "image_fullsize_enabled": "പൂർണ്ണ വലുപ്പത്തിലുള്ള ചിത്ര നിർമ്മാണം പ്രവർത്തനക്ഷമമാക്കുക", + "image_fullsize_enabled_description": "വെബ്-ഫ്രണ്ട്ലി അല്ലാത്ത ഫോർമാറ്റുകൾക്കായി പൂർണ്ണ വലുപ്പത്തിലുള്ള ചിത്രം നിർമ്മിക്കുക. \"എംബഡഡ് പ്രിവ്യൂവിന് മുൻഗണന നൽകുക\" പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ, എംബഡഡ് പ്രിവ്യൂകൾ പരിവർത്തനം കൂടാതെ നേരിട്ട് ഉപയോഗിക്കുന്നു. JPEG പോലുള്ള വെബ്-ഫ്രണ്ട്ലി ഫോർമാറ്റുകളെ ഇത് ബാധിക്കില്ല.", + "image_fullsize_quality_description": "പൂർണ്ണ വലുപ്പത്തിലുള്ള ചിത്രത്തിന്റെ ഗുണമേന്മ 1-100 വരെ. ഉയർന്ന മൂല്യം മികച്ചതാണ്, പക്ഷേ വലിയ ഫയലുകൾ ഉണ്ടാക്കുന്നു.", + "image_fullsize_title": "പൂർണ്ണ വലുപ്പ ചിത്ര ക്രമീകരണങ്ങൾ", + "image_prefer_embedded_preview": "എംബഡഡ് പ്രിവ്യൂവിന് മുൻഗണന നൽകുക", + "image_prefer_embedded_preview_setting_description": "ലഭ്യമാകുമ്പോൾ, റോ (RAW) ഫോട്ടോകളിലെ എംബഡഡ് പ്രിവ്യൂകൾ ഇമേജ് പ്രോസസ്സിംഗിനുള്ള ഇൻപുട്ടായി ഉപയോഗിക്കുക. ഇത് ചില ചിത്രങ്ങൾക്ക് കൂടുതൽ കൃത്യമായ നിറങ്ങൾ നൽകിയേക്കാം, പക്ഷേ പ്രിവ്യൂവിൻ്റെ ഗുണനിലവാരം ക്യാമറയെ ആശ്രയിച്ചിരിക്കും, കൂടാതെ ചിത്രത്തിൽ കൂടുതൽ കംപ്രഷൻ ആർട്ടിഫാക്റ്റുകൾ ഉണ്ടാകാം.", + "image_prefer_wide_gamut": "വൈഡ് ഗാമറ്റിന് മുൻഗണന നൽകുക", + "image_prefer_wide_gamut_setting_description": "തംബ്നെയിലുകൾക്കായി ഡിസ്പ്ലേ P3 ഉപയോഗിക്കുക. ഇത് വൈഡ് കളർസ്പേസുകളുള്ള ചിത്രങ്ങളുടെ മിഴിവ് നന്നായി സംരക്ഷിക്കുന്നു, പക്ഷേ പഴയ ബ്രൗസർ പതിപ്പുള്ള പഴയ ഉപകരണങ്ങളിൽ ചിത്രങ്ങൾ വ്യത്യസ്തമായി കാണപ്പെട്ടേക്കാം. കളർ ഷിഫ്റ്റുകൾ ഒഴിവാക്കാൻ sRGB ചിത്രങ്ങൾ sRGB ആയി തന്നെ നിലനിർത്തുന്നു.", + "image_preview_description": "മെറ്റാഡാറ്റ നീക്കംചെയ്ത ഇടത്തരം വലുപ്പമുള്ള ചിത്രം, ഒരൊറ്റ അസറ്റ് കാണുമ്പോഴും മെഷീൻ ലേണിംഗിനും ഉപയോഗിക്കുന്നു", + "image_preview_quality_description": "പ്രിവ്യൂ ഗുണമേന്മ 1-100 വരെ. ഉയർന്ന മൂല്യം മികച്ചതാണ്, പക്ഷേ വലിയ ഫയലുകൾ ഉണ്ടാക്കുകയും ആപ്പിന്റെ പ്രതികരണശേഷി കുറയ്ക്കുകയും ചെയ്യും. കുറഞ്ഞ മൂല്യം സജ്ജീകരിക്കുന്നത് മെഷീൻ ലേണിംഗ് ഗുണമേന്മയെ ബാധിച്ചേക്കാം.", + "image_preview_title": "പ്രിവ്യൂ ക്രമീകരണങ്ങൾ", + "image_quality": "ഗുണമേന്മ", + "image_resolution": "റെസല്യൂഷൻ", + "image_resolution_description": "ഉയർന്ന റെസല്യൂഷനുകൾക്ക് കൂടുതൽ വിശദാംശങ്ങൾ സംരക്ഷിക്കാൻ കഴിയും, പക്ഷേ എൻകോഡ് ചെയ്യാൻ കൂടുതൽ സമയമെടുക്കും, വലിയ ഫയൽ വലുപ്പമുണ്ടാകും, കൂടാതെ ആപ്പിന്റെ പ്രതികരണശേഷി കുറയ്ക്കുകയും ചെയ്യും.", + "image_settings": "ചിത്ര ക്രമീകരണങ്ങൾ", + "image_settings_description": "നിർമ്മിച്ച ചിത്രങ്ങളുടെ ഗുണമേന്മയും റെസല്യൂഷനും കൈകാര്യം ചെയ്യുക", + "image_thumbnail_description": "മെറ്റാഡാറ്റ നീക്കംചെയ്ത ചെറിയ തംബ്നെയിൽ, പ്രധാന ടൈംലൈൻ പോലുള്ള ഫോട്ടോകളുടെ ഗ്രൂപ്പുകൾ കാണുമ്പോൾ ഉപയോഗിക്കുന്നു", + "image_thumbnail_quality_description": "തംബ്നെയിലിന്റെ ഗുണമേന്മ 1-100 വരെ. ഉയർന്ന മൂല്യം മികച്ചതാണ്, പക്ഷേ വലിയ ഫയലുകൾ ഉണ്ടാക്കുകയും ആപ്പിന്റെ പ്രതികരണശേഷി കുറയ്ക്കുകയും ചെയ്യും.", + "image_thumbnail_title": "തംബ്നെയിൽ ക്രമീകരണങ്ങൾ", + "job_concurrency": "{job} കോൺകറൻസി", "job_created": "ജോലി സൃഷ്ടിച്ചു", - "job_status": "ജോലി നില" + "job_not_concurrency_safe": "ഈ ജോലി കോൺകറൻസി-സേഫ് അല്ല.", + "job_settings": "ജോലി ക്രമീകരണങ്ങൾ", + "job_settings_description": "ജോലി കോൺകറൻസി കൈകാര്യം ചെയ്യുക", + "job_status": "ജോലിയുടെ നില", + "jobs_delayed": "{jobCount, plural, one {# ജോലി വൈകി} other {# ജോലികൾ വൈകി}}", + "jobs_failed": "{jobCount, plural, one {# ജോലി പരാജയപ്പെട്ടു} other {# ജോലികൾ പരാജയപ്പെട്ടു}}", + "library_created": "{library} എന്ന ലൈബ്രറി സൃഷ്ടിച്ചു", + "library_deleted": "ലൈബ്രറി ഇല്ലാതാക്കി", + "library_import_path_description": "ഇമ്പോർട്ടുചെയ്യാൻ ഒരു ഫോൾഡർ വ്യക്തമാക്കുക. സബ്ഫോൾഡറുകൾ ഉൾപ്പെടെ ഈ ഫോൾഡർ ചിത്രങ്ങൾക്കും വീഡിയോകൾക്കുമായി സ്കാൻ ചെയ്യും.", + "library_scanning": "ആനുകാലിക സ്കാനിംഗ്", + "library_scanning_description": "ആനുകാലിക ലൈബ്രറി സ്കാനിംഗ് കോൺഫിഗർ ചെയ്യുക", + "library_scanning_enable_description": "ആനുകാലിക ലൈബ്രറി സ്കാനിംഗ് പ്രവർത്തനക്ഷമമാക്കുക", + "library_settings": "എക്സ്റ്റേണൽ ലൈബ്രറി", + "library_settings_description": "എക്സ്റ്റേണൽ ലൈബ്രറി ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "library_tasks_description": "പുതിയതോ മാറ്റം വരുത്തിയതോ ആയ അസറ്റുകൾക്കായി എക്സ്റ്റേണൽ ലൈബ്രറികൾ സ്കാൻ ചെയ്യുക", + "library_watching_enable_description": "ഫയൽ മാറ്റങ്ങൾക്കായി എക്സ്റ്റേണൽ ലൈബ്രറികൾ നിരീക്ഷിക്കുക", + "library_watching_settings": "ലൈബ്രറി നിരീക്ഷിക്കൽ (പരീക്ഷണാടിസ്ഥാനത്തിൽ)", + "library_watching_settings_description": "മാറ്റം വന്ന ഫയലുകൾക്കായി യാന്ത്രികമായി നിരീക്ഷിക്കുക", + "logging_enable_description": "ലോഗിംഗ് പ്രവർത്തനക്ഷമമാക്കുക", + "logging_level_description": "പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ, ഏത് ലോഗ് ലെവൽ ഉപയോഗിക്കണം.", + "logging_settings": "ലോഗിംഗ്", + "machine_learning_availability_checks": "ലഭ്യത പരിശോധനകൾ", + "machine_learning_availability_checks_description": "ലഭ്യമായ മെഷീൻ ലേണിംഗ് സെർവറുകൾ യാന്ത്രികമായി കണ്ടെത്തുകയും മുൻഗണന നൽകുകയും ചെയ്യുക", + "machine_learning_availability_checks_enabled": "ലഭ്യത പരിശോധനകൾ പ്രവർത്തനക്ഷമമാക്കുക", + "machine_learning_availability_checks_interval": "പരിശോധന ഇടവേള", + "machine_learning_availability_checks_interval_description": "ലഭ്യത പരിശോധനകൾക്കിടയിലുള്ള ഇടവേള (മില്ലിസെക്കൻഡിൽ)", + "machine_learning_availability_checks_timeout": "അഭ്യർത്ഥനയുടെ സമയപരിധി", + "machine_learning_availability_checks_timeout_description": "ലഭ്യത പരിശോധനകൾക്കുള്ള സമയപരിധി (മില്ലിസെക്കൻഡിൽ)", + "machine_learning_clip_model": "CLIP മോഡൽ", + "machine_learning_clip_model_description": "ഇവിടെ ലിസ്റ്റ് ചെയ്തിട്ടുള്ള ഒരു CLIP മോഡലിന്റെ പേര്. ഒരു മോഡൽ മാറ്റുമ്പോൾ എല്ലാ ചിത്രങ്ങൾക്കുമായി 'സ്മാർട്ട് സെർച്ച്' ജോലി വീണ്ടും പ്രവർത്തിപ്പിക്കേണ്ടതുണ്ടെന്ന് ഓർമ്മിക്കുക.", + "machine_learning_duplicate_detection": "ഡ്യൂപ്ലിക്കേറ്റ് കണ്ടെത്തൽ", + "machine_learning_duplicate_detection_enabled": "ഡ്യൂപ്ലിക്കേറ്റ് കണ്ടെത്തൽ പ്രവർത്തനക്ഷമമാക്കുക", + "machine_learning_duplicate_detection_enabled_description": "പ്രവർത്തനരഹിതമാക്കിയാലും, തികച്ചും സമാനമായ അസറ്റുകളിലെ ഡ്യൂപ്ലിക്കേറ്റുകൾ ഒഴിവാക്കപ്പെടും.", + "machine_learning_duplicate_detection_setting_description": "സമാനമായ ഡ്യൂപ്ലിക്കേറ്റുകൾ കണ്ടെത്താൻ CLIP എംബെഡ്ഡിംഗ്‌സ് ഉപയോഗിക്കുക", + "machine_learning_enabled": "മെഷീൻ ലേണിംഗ് പ്രവർത്തനക്ഷമമാക്കുക", + "machine_learning_enabled_description": "പ്രവർത്തനരഹിതമാക്കിയാൽ, താഴെയുള്ള ക്രമീകരണങ്ങൾ പരിഗണിക്കാതെ എല്ലാ ML ഫീച്ചറുകളും പ്രവർത്തനരഹിതമാകും.", + "machine_learning_facial_recognition": "മുഖം തിരിച്ചറിയൽ", + "machine_learning_facial_recognition_description": "ചിത്രങ്ങളിലെ മുഖങ്ങൾ കണ്ടെത്തുക, തിരിച്ചറിയുക, ഗ്രൂപ്പ് ചെയ്യുക", + "machine_learning_facial_recognition_model": "മുഖം തിരിച്ചറിയൽ മോഡൽ", + "machine_learning_facial_recognition_model_description": "മോഡലുകൾ വലുപ്പത്തിന്റെ അവരോഹണ ക്രമത്തിലാണ് ലിസ്റ്റ് ചെയ്തിരിക്കുന്നത്. വലിയ മോഡലുകൾ വേഗത കുറഞ്ഞതും കൂടുതൽ മെമ്മറി ഉപയോഗിക്കുന്നവയുമാണ്, പക്ഷേ മികച്ച ഫലങ്ങൾ നൽകുന്നു. ഒരു മോഡൽ മാറ്റുമ്പോൾ എല്ലാ ചിത്രങ്ങൾക്കുമായി 'മുഖം കണ്ടെത്തൽ' ജോലി വീണ്ടും പ്രവർത്തിപ്പിക്കേണ്ടതുണ്ടെന്ന് ഓർമ്മിക്കുക.", + "machine_learning_facial_recognition_setting": "മുഖം തിരിച്ചറിയൽ പ്രവർത്തനക്ഷമമാക്കുക", + "machine_learning_facial_recognition_setting_description": "പ്രവർത്തനരഹിതമാക്കിയാൽ, മുഖം തിരിച്ചറിയലിനായി ചിത്രങ്ങൾ എൻകോഡ് ചെയ്യപ്പെടില്ല, കൂടാതെ എക്സ്പ്ലോർ പേജിലെ 'ആളുകൾ' വിഭാഗത്തിൽ അവ ദൃശ്യമാകുകയുമില്ല.", + "machine_learning_max_detection_distance": "പരമാവധി കണ്ടെത്തൽ ദൂരം", + "machine_learning_max_detection_distance_description": "രണ്ട് ചിത്രങ്ങളെ ഡ്യൂപ്ലിക്കേറ്റുകളായി കണക്കാക്കുന്നതിനുള്ള പരമാവധി ദൂരം, 0.001-0.1 വരെ. ഉയർന്ന മൂല്യങ്ങൾ കൂടുതൽ ഡ്യൂപ്ലിക്കേറ്റുകളെ കണ്ടെത്തും, പക്ഷേ തെറ്റായ ഫലങ്ങളിലേക്ക് നയിച്ചേക്കാം.", + "machine_learning_max_recognition_distance": "പരമാവധി തിരിച്ചറിയൽ ദൂരം", + "machine_learning_max_recognition_distance_description": "രണ്ട് മുഖങ്ങളെ ഒരേ വ്യക്തിയായി കണക്കാക്കുന്നതിനുള്ള പരമാവധി ദൂരം, 0-2 വരെ. ഇത് കുറയ്ക്കുന്നത് രണ്ട് പേരെ ഒരേ വ്യക്തിയായി ലേബൽ ചെയ്യുന്നത് തടയാൻ സഹായിക്കും, അതേസമയം ഇത് കൂട്ടുന്നത് ഒരേ വ്യക്തിയെ രണ്ട് വ്യത്യസ്ത ആളുകളായി ലേബൽ ചെയ്യുന്നത് തടയാനും സഹായിക്കും. ഒരാളെ രണ്ടായി വിഭജിക്കുന്നതിനേക്കാൾ എളുപ്പമാണ് രണ്ടുപേരെ ഒന്നാക്കുന്നത് എന്നത് ശ്രദ്ധിക്കുക, അതിനാൽ സാധ്യമാകുമ്പോൾ കുറഞ്ഞ പരിധി തിരഞ്ഞെടുക്കുന്നതാണ് ഉചിതം.", + "machine_learning_min_detection_score": "കുറഞ്ഞ കണ്ടെത്തൽ സ്കോർ", + "machine_learning_min_detection_score_description": "ഒരു മുഖം കണ്ടെത്തുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ കോൺഫിഡൻസ് സ്കോർ 0-1 വരെ. കുറഞ്ഞ മൂല്യങ്ങൾ കൂടുതൽ മുഖങ്ങളെ കണ്ടെത്തും, പക്ഷേ തെറ്റായ ഫലങ്ങളിലേക്ക് നയിച്ചേക്കാം.", + "machine_learning_min_recognized_faces": "തിരിച്ചറിഞ്ഞ മുഖങ്ങളുടെ കുറഞ്ഞ എണ്ണം", + "machine_learning_min_recognized_faces_description": "ഒരു വ്യക്തിയെ സൃഷ്ടിക്കുന്നതിന് ആവശ്യമായ തിരിച്ചറിഞ്ഞ മുഖങ്ങളുടെ ഏറ്റവും കുറഞ്ഞ എണ്ണം. ഇത് വർദ്ധിപ്പിക്കുന്നത് മുഖം തിരിച്ചറിയൽ കൂടുതൽ കൃത്യമാക്കുന്നു, എന്നാൽ ഒരു മുഖം ഒരു വ്യക്തിക്ക് നൽകാതിരിക്കാനുള്ള സാധ്യതയും വർദ്ധിപ്പിക്കുന്നു.", + "machine_learning_settings": "മെഷീൻ ലേണിംഗ് ക്രമീകരണങ്ങൾ", + "machine_learning_settings_description": "മെഷീൻ ലേണിംഗ് ഫീച്ചറുകളും ക്രമീകരണങ്ങളും കൈകാര്യം ചെയ്യുക", + "machine_learning_smart_search": "സ്മാർട്ട് സെർച്ച്", + "machine_learning_smart_search_description": "CLIP എംബെഡ്ഡിംഗ്‌സ് ഉപയോഗിച്ച് ചിത്രങ്ങൾക്കായി അർത്ഥപൂർവ്വം തിരയുക", + "machine_learning_smart_search_enabled": "സ്മാർട്ട് സെർച്ച് പ്രവർത്തനക്ഷമമാക്കുക", + "machine_learning_smart_search_enabled_description": "പ്രവർത്തനരഹിതമാക്കിയാൽ, സ്മാർട്ട് സെർച്ചിനായി ചിത്രങ്ങൾ എൻകോഡ് ചെയ്യപ്പെടില്ല.", + "machine_learning_url_description": "മെഷീൻ ലേണിംഗ് സെർവറിന്റെ URL. ഒന്നിൽ കൂടുതൽ URL-കൾ നൽകിയിട്ടുണ്ടെങ്കിൽ, ഓരോ സെർവറും ഒന്നിനു പുറകെ ഒന്നായി വിജയകരമായി പ്രതികരിക്കുന്നതുവരെ ശ്രമിക്കും. പ്രതികരിക്കാത്ത സെർവറുകൾ ഓൺലൈനിൽ തിരികെ വരുന്നതുവരെ താൽക്കാലികമായി അവഗണിക്കപ്പെടും.", + "manage_concurrency": "കോൺകറൻസി കൈകാര്യം ചെയ്യുക", + "manage_log_settings": "ലോഗ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "map_dark_style": "ഡാർക്ക് സ്റ്റൈൽ", + "map_enable_description": "മാപ്പ് ഫീച്ചറുകൾ പ്രവർത്തനക്ഷമമാക്കുക", + "map_gps_settings": "മാപ്പ് & GPS ക്രമീകരണങ്ങൾ", + "map_gps_settings_description": "മാപ്പ് & GPS (റിവേഴ്സ് ജിയോകോഡിംഗ്) ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "map_implications": "മാപ്പ് ഫീച്ചർ ഒരു ബാഹ്യ ടൈൽ സേവനത്തെ (tiles.immich.cloud) ആശ്രയിച്ചിരിക്കുന്നു", + "map_light_style": "ലൈറ്റ് സ്റ്റൈൽ", + "map_manage_reverse_geocoding_settings": "റിവേഴ്സ് ജിയോകോഡിംഗ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "map_reverse_geocoding": "റിവേഴ്സ് ജിയോകോഡിംഗ്", + "map_reverse_geocoding_enable_description": "റിവേഴ്സ് ജിയോകോഡിംഗ് പ്രവർത്തനക്ഷമമാക്കുക", + "map_reverse_geocoding_settings": "റിവേഴ്സ് ജിയോകോഡിംഗ് ക്രമീകരണങ്ങൾ", + "map_settings": "മാപ്പ്", + "map_settings_description": "മാപ്പ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "map_style_description": "ഒരു style.json മാപ്പ് തീമിലേക്കുള്ള URL", + "memory_cleanup_job": "മെമ്മറി ക്ലീനപ്പ്", + "memory_generate_job": "മെമ്മറി ജനറേഷൻ", + "metadata_extraction_job": "മെറ്റാഡാറ്റ എക്‌സ്‌ട്രാക്റ്റുചെയ്യുക", + "metadata_extraction_job_description": "ഓരോ അസറ്റിൽ നിന്നും GPS, മുഖങ്ങൾ, റെസല്യൂഷൻ തുടങ്ങിയ മെറ്റാഡാറ്റ വിവരങ്ങൾ എക്‌സ്‌ട്രാക്റ്റുചെയ്യുക", + "metadata_faces_import_setting": "മുഖം ഇമ്പോർട്ട് പ്രവർത്തനക്ഷമമാക്കുക", + "metadata_faces_import_setting_description": "ചിത്രത്തിന്റെ EXIF ഡാറ്റയിൽ നിന്നും സൈഡ്‌കാർ ഫയലുകളിൽ നിന്നും മുഖങ്ങൾ ഇമ്പോർട്ടുചെയ്യുക", + "metadata_settings": "മെറ്റാഡാറ്റ ക്രമീകരണങ്ങൾ", + "metadata_settings_description": "മെറ്റാഡാറ്റ ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "migration_job": "മൈഗ്രേഷൻ", + "migration_job_description": "അസറ്റുകളുടെയും മുഖങ്ങളുടെയും തംബ്നെയിലുകൾ ഏറ്റവും പുതിയ ഫോൾഡർ ഘടനയിലേക്ക് മൈഗ്രേറ്റ് ചെയ്യുക", + "nightly_tasks_cluster_faces_setting_description": "പുതുതായി കണ്ടെത്തിയ മുഖങ്ങളിൽ ഫേഷ്യൽ റെക്കഗ്നിഷൻ പ്രവർത്തിപ്പിക്കുക", + "nightly_tasks_cluster_new_faces_setting": "പുതിയ മുഖങ്ങളെ ക്ലസ്റ്റർ ചെയ്യുക", + "nightly_tasks_database_cleanup_setting": "ഡാറ്റാബേസ് ക്ലീനപ്പ് ടാസ്ക്കുകൾ", + "nightly_tasks_database_cleanup_setting_description": "ഡാറ്റാബേസിൽ നിന്ന് പഴയതും കാലഹരണപ്പെട്ടതുമായ ഡാറ്റ വൃത്തിയാക്കുക", + "nightly_tasks_generate_memories_setting": "മെമ്മറികൾ നിർമ്മിക്കുക", + "nightly_tasks_generate_memories_setting_description": "അസറ്റുകളിൽ നിന്ന് പുതിയ മെമ്മറികൾ സൃഷ്ടിക്കുക", + "nightly_tasks_missing_thumbnails_setting": "നഷ്ടപ്പെട്ട തംബ്നെയിലുകൾ നിർമ്മിക്കുക", + "nightly_tasks_missing_thumbnails_setting_description": "തംബ്നെയിലുകൾ ഇല്ലാത്ത അസറ്റുകളെ തംബ്നെയിൽ നിർമ്മാണത്തിനായി ക്യൂ ചെയ്യുക", + "nightly_tasks_settings": "രാത്രിയിലെ ടാസ്ക് ക്രമീകരണങ്ങൾ", + "nightly_tasks_settings_description": "രാത്രിയിലെ ടാസ്ക്കുകൾ കൈകാര്യം ചെയ്യുക", + "nightly_tasks_start_time_setting": "തുടങ്ങുന്ന സമയം", + "nightly_tasks_start_time_setting_description": "സെർവർ രാത്രിയിലെ ടാസ്ക്കുകൾ പ്രവർത്തിപ്പിക്കാൻ തുടങ്ങുന്ന സമയം", + "nightly_tasks_sync_quota_usage_setting": "ക്വാട്ട ഉപയോഗം സിങ്ക് ചെയ്യുക", + "nightly_tasks_sync_quota_usage_setting_description": "നിലവിലെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഉപയോക്താവിന്റെ സ്റ്റോറേജ് ക്വാട്ട അപ്ഡേറ്റ് ചെയ്യുക", + "no_paths_added": "പാത്തുകൾ ഒന്നും ചേർത്തിട്ടില്ല", + "no_pattern_added": "പാറ്റേൺ ഒന്നും ചേർത്തിട്ടില്ല", + "note_apply_storage_label_previous_assets": "കുറിപ്പ്: മുമ്പ് അപ്‌ലോഡ് ചെയ്ത അസറ്റുകളിൽ സ്റ്റോറേജ് ലേബൽ പ്രയോഗിക്കാൻ, ഇത് പ്രവർത്തിപ്പിക്കുക", + "note_cannot_be_changed_later": "കുറിപ്പ്: ഇത് പിന്നീട് മാറ്റാൻ കഴിയില്ല!", + "notification_email_from_address": "അയയ്ക്കുന്നയാളുടെ വിലാസം", + "notification_email_from_address_description": "അയയ്ക്കുന്നയാളുടെ ഇമെയിൽ വിലാസം, ഉദാഹരണത്തിന്: \"Immich Photo Server \". നിങ്ങൾക്ക് ഇമെയിലുകൾ അയയ്ക്കാൻ അനുവാദമുള്ള ഒരു വിലാസം ഉപയോഗിക്കുന്നുവെന്ന് ഉറപ്പാക്കുക.", + "notification_email_host_description": "ഇമെയിൽ സെർവറിന്റെ ഹോസ്റ്റ് (ഉദാ. smtp.immich.app)", + "notification_email_ignore_certificate_errors": "സർട്ടിഫിക്കറ്റ് പിശകുകൾ അവഗണിക്കുക", + "notification_email_ignore_certificate_errors_description": "TLS സർട്ടിഫിക്കറ്റ് സാധുതാ പിശകുകൾ അവഗണിക്കുക (ശുപാർശ ചെയ്യുന്നില്ല)", + "notification_email_password_description": "ഇമെയിൽ സെർവറുമായി പ്രാമാണീകരിക്കുമ്പോൾ ഉപയോഗിക്കേണ്ട പാസ്‌വേഡ്", + "notification_email_port_description": "ഇമെയിൽ സെർവറിന്റെ പോർട്ട് (ഉദാ. 25, 465, അല്ലെങ്കിൽ 587)", + "notification_email_sent_test_email_button": "പരിശോധനാ ഇമെയിൽ അയച്ച് സേവ് ചെയ്യുക", + "notification_email_setting_description": "ഇമെയിൽ അറിയിപ്പുകൾ അയക്കുന്നതിനുള്ള ക്രമീകരണങ്ങൾ", + "notification_email_test_email": "പരിശോധനാ ഇമെയിൽ അയക്കുക", + "notification_email_test_email_failed": "പരിശോധനാ ഇമെയിൽ അയക്കുന്നതിൽ പരാജയപ്പെട്ടു, നിങ്ങളുടെ മൂല്യങ്ങൾ പരിശോധിക്കുക", + "notification_email_test_email_sent": "{email} എന്ന വിലാസത്തിലേക്ക് ഒരു പരിശോധനാ ഇമെയിൽ അയച്ചിട്ടുണ്ട്. ദയവായി നിങ്ങളുടെ ഇൻബോക്സ് പരിശോധിക്കുക.", + "notification_email_username_description": "ഇമെയിൽ സെർവറുമായി പ്രാമാണീകരിക്കുമ്പോൾ ഉപയോഗിക്കേണ്ട ഉപയോക്തൃനാമം", + "notification_enable_email_notifications": "ഇമെയിൽ അറിയിപ്പുകൾ പ്രവർത്തനക്ഷമമാക്കുക", + "notification_settings": "അറിയിപ്പ് ക്രമീകരണങ്ങൾ", + "notification_settings_description": "ഇമെയിൽ ഉൾപ്പെടെയുള്ള അറിയിപ്പ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "oauth_auto_launch": "യാന്ത്രികമായി തുടങ്ങുക", + "oauth_auto_launch_description": "ലോഗിൻ പേജിലേക്ക് പോകുമ്പോൾ OAuth ലോഗിൻ ഫ്ലോ യാന്ത്രികമായി ആരംഭിക്കുക", + "oauth_auto_register": "യാന്ത്രികമായി രജിസ്റ്റർ ചെയ്യുക", + "oauth_auto_register_description": "OAuth ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്ത ശേഷം പുതിയ ഉപയോക്താക്കളെ യാന്ത്രികമായി രജിസ്റ്റർ ചെയ്യുക", + "oauth_button_text": "ബട്ടണിലെ വാചകം", + "oauth_client_secret_description": "OAuth ദാതാവ് PKCE (പ്രൂഫ് കീ ഫോർ കോഡ് എക്സ്ചേഞ്ച്) പിന്തുണയ്ക്കുന്നില്ലെങ്കിൽ ആവശ്യമാണ്", + "oauth_enable_description": "OAuth ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യുക", + "oauth_mobile_redirect_uri": "മൊബൈൽ റീഡയറക്ട് URI", + "oauth_mobile_redirect_uri_override": "മൊബൈൽ റീഡയറക്ട് URI ഓവർറൈഡ്", + "oauth_mobile_redirect_uri_override_description": "OAuth ദാതാവ് \"{callback}\" പോലുള്ള ഒരു മൊബൈൽ URI അനുവദിക്കാത്തപ്പോൾ പ്രവർത്തനക്ഷമമാക്കുക", + "oauth_role_claim": "റോൾ ക്ലെയിം", + "oauth_role_claim_description": "ഈ ക്ലെയിമിന്റെ സാന്നിധ്യത്തെ അടിസ്ഥാനമാക്കി യാന്ത്രികമായി അഡ്മിൻ ആക്സസ് നൽകുക. ക്ലെയിമിന് 'user' അല്ലെങ്കിൽ 'admin' എന്ന് ഉണ്ടാകാം.", + "oauth_settings": "OAuth", + "oauth_settings_description": "OAuth ലോഗിൻ ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "oauth_settings_more_details": "ഈ ഫീച്ചറിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, ഡോക്സ് പരിശോധിക്കുക.", + "oauth_storage_label_claim": "സ്റ്റോറേജ് ലേബൽ ക്ലെയിം", + "oauth_storage_label_claim_description": "ഉപയോക്താവിന്റെ സ്റ്റോറേജ് ലേബൽ ഈ ക്ലെയിമിന്റെ മൂല്യത്തിലേക്ക് യാന്ത്രികമായി സജ്ജമാക്കുക.", + "oauth_storage_quota_claim": "സ്റ്റോറേജ് ക്വാട്ട ക്ലെയിം", + "oauth_storage_quota_claim_description": "ഉപയോക്താവിന്റെ സ്റ്റോറേജ് ക്വാട്ട ഈ ക്ലെയിമിന്റെ മൂല്യത്തിലേക്ക് യാന്ത്രികമായി സജ്ജമാക്കുക.", + "oauth_storage_quota_default": "ഡിഫോൾട്ട് സ്റ്റോറേജ് ക്വാട്ട (GiB)", + "oauth_storage_quota_default_description": "ക്ലെയിം ഒന്നും നൽകാത്തപ്പോൾ ഉപയോഗിക്കേണ്ട ക്വാട്ട (GiB-യിൽ).", + "oauth_timeout": "അഭ്യർത്ഥനയുടെ സമയപരിധി", + "oauth_timeout_description": "അഭ്യർത്ഥനകൾക്കുള്ള സമയപരിധി (മില്ലിസെക്കൻഡിൽ)", + "password_enable_description": "ഇമെയിലും പാസ്‌വേഡും ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യുക", + "password_settings": "പാസ്‌വേഡ് ലോഗിൻ", + "password_settings_description": "പാസ്‌വേഡ് ലോഗിൻ ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "paths_validated_successfully": "എല്ലാ പാത്തുകളും വിജയകരമായി സാധൂകരിച്ചു", + "person_cleanup_job": "വ്യക്തി ക്ലീനപ്പ്", + "quota_size_gib": "ക്വാട്ട വലുപ്പം (GiB)", + "refreshing_all_libraries": "എല്ലാ ലൈബ്രറികളും പുതുക്കുന്നു", + "registration": "അഡ്മിൻ രജിസ്ട്രേഷൻ", + "registration_description": "നിങ്ങളാണ് സിസ്റ്റത്തിലെ ആദ്യത്തെ ഉപയോക്താവ് എന്നതിനാൽ, നിങ്ങളെ അഡ്മിൻ ആയി നിയമിക്കും. ഭരണപരമായ ജോലികൾക്ക് നിങ്ങൾ ഉത്തരവാദിയായിരിക്കും, കൂടാതെ അധിക ഉപയോക്താക്കളെ സൃഷ്ടിക്കുന്നത് നിങ്ങളായിരിക്കും.", + "require_password_change_on_login": "ആദ്യ ലോഗിൻ ചെയ്യുമ്പോൾ പാസ്‌വേഡ് മാറ്റാൻ ഉപയോക്താവിനോട് ആവശ്യപ്പെടുക", + "reset_settings_to_default": "ക്രമീകരണങ്ങൾ ഡിഫോൾട്ടിലേക്ക് പുനഃസജ്ജമാക്കുക", + "reset_settings_to_recent_saved": "അടുത്തിടെ സേവ് ചെയ്ത ക്രമീകരണങ്ങളിലേക്ക് പുനഃസജ്ജമാക്കുക", + "scanning_library": "ലൈബ്രറി സ്കാൻ ചെയ്യുന്നു", + "search_jobs": "ജോലികൾക്കായി തിരയുക…", + "send_welcome_email": "സ്വാഗത ഇമെയിൽ അയക്കുക", + "server_external_domain_settings": "ബാഹ്യ ഡൊമെയ്ൻ", + "server_external_domain_settings_description": "പൊതുവായി പങ്കിട്ട ലിങ്കുകൾക്കുള്ള ഡൊമെയ്ൻ, http(s):// ഉൾപ്പെടെ", + "server_public_users": "പൊതു ഉപയോക്താക്കൾ", + "server_public_users_description": "പങ്കിട്ട ആൽബങ്ങളിലേക്ക് ഒരു ഉപയോക്താവിനെ ചേർക്കുമ്പോൾ എല്ലാ ഉപയോക്താക്കളെയും (പേരും ഇമെയിലും) ലിസ്റ്റ് ചെയ്യും. പ്രവർത്തനരഹിതമാക്കുമ്പോൾ, ഉപയോക്തൃ ലിസ്റ്റ് അഡ്മിൻ ഉപയോക്താക്കൾക്ക് മാത്രമേ ലഭ്യമാകൂ.", + "server_settings": "സെർവർ ക്രമീകരണങ്ങൾ", + "server_settings_description": "സെർവർ ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "server_welcome_message": "സ്വാഗത സന്ദേശം", + "server_welcome_message_description": "ലോഗിൻ പേജിൽ പ്രദർശിപ്പിക്കുന്ന ഒരു സന്ദേശം.", + "sidecar_job": "സൈഡ്‌കാർ മെറ്റാഡാറ്റ", + "sidecar_job_description": "ഫയൽസിസ്റ്റത്തിൽ നിന്ന് സൈഡ്‌കാർ മെറ്റാഡാറ്റ കണ്ടെത്തുകയോ സിൻക്രൊണൈസ് ചെയ്യുകയോ ചെയ്യുക", + "slideshow_duration_description": "ഓരോ ചിത്രവും പ്രദർശിപ്പിക്കാനുള്ള സെക്കൻഡുകളുടെ എണ്ണം", + "smart_search_job_description": "സ്മാർട്ട് സെർച്ചിനെ പിന്തുണയ്ക്കുന്നതിനായി അസറ്റുകളിൽ മെഷീൻ ലേണിംഗ് പ്രവർത്തിപ്പിക്കുക", + "storage_template_date_time_description": "ഡേറ്റ്ടൈം വിവരങ്ങൾക്കായി അസറ്റിന്റെ ക്രിയേഷൻ ടൈംസ്റ്റാമ്പ് ഉപയോഗിക്കുന്നു", + "storage_template_date_time_sample": "സാമ്പിൾ സമയം {date}", + "storage_template_enable_description": "സ്റ്റോറേജ് ടെംപ്ലേറ്റ് എഞ്ചിൻ പ്രവർത്തനക്ഷമമാക്കുക", + "storage_template_hash_verification_enabled": "ഹാഷ് വെരിഫിക്കേഷൻ പ്രവർത്തനക്ഷമമാക്കി", + "storage_template_hash_verification_enabled_description": "ഹാഷ് വെരിഫിക്കേഷൻ പ്രവർത്തനക്ഷമമാക്കുന്നു, പ്രത്യാഘാതങ്ങളെക്കുറിച്ച് ഉറപ്പില്ലെങ്കിൽ ഇത് പ്രവർത്തനരഹിതമാക്കരുത്", + "storage_template_migration": "സ്റ്റോറേജ് ടെംപ്ലേറ്റ് മൈഗ്രേഷൻ", + "storage_template_migration_description": "മുമ്പ് അപ്‌ലോഡ് ചെയ്ത അസറ്റുകളിലേക്ക് നിലവിലെ {template} പ്രയോഗിക്കുക", + "storage_template_migration_info": "സ്റ്റോറേജ് ടെംപ്ലേറ്റ് എല്ലാ എക്സ്റ്റൻഷനുകളെയും ചെറിയക്ഷരത്തിലേക്ക് മാറ്റും. ടെംപ്ലേറ്റിലെ മാറ്റങ്ങൾ പുതിയ അസറ്റുകൾക്ക് മാത്രമേ ബാധകമാകൂ. മുമ്പ് അപ്‌ലോഡ് ചെയ്ത അസറ്റുകളിൽ ടെംപ്ലേറ്റ് മുൻകാല പ്രാബല്യത്തോടെ പ്രയോഗിക്കാൻ, {job} പ്രവർത്തിപ്പിക്കുക.", + "storage_template_migration_job": "സ്റ്റോറേജ് ടെംപ്ലേറ്റ് മൈഗ്രേഷൻ ജോലി", + "storage_template_more_details": "ഈ ഫീച്ചറിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, സ്റ്റോറേജ് ടെംപ്ലേറ്റ്-ഉം അതിൻ്റെ പ്രത്യാഘാതങ്ങളും പരിശോധിക്കുക", + "storage_template_onboarding_description_v2": "പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ, ഉപയോക്താവ് നിർവചിച്ച ടെംപ്ലേറ്റ് അടിസ്ഥാനമാക്കി ഈ ഫീച്ചർ ഫയലുകൾ യാന്ത്രികമായി ഓർഗനൈസ് ചെയ്യും. കൂടുതൽ വിവരങ്ങൾക്ക്, ദയവായി ഡോക്യുമെന്റേഷൻ കാണുക.", + "storage_template_path_length": "ഏകദേശ പാത്ത് ദൈർഘ്യ പരിധി: {length, number}/{limit, number}", + "storage_template_settings": "സ്റ്റോറേജ് ടെംപ്ലേറ്റ്", + "storage_template_settings_description": "അപ്‌ലോഡ് ചെയ്യുന്ന അസറ്റിന്റെ ഫോൾഡർ ഘടനയും ഫയൽ നാമവും കൈകാര്യം ചെയ്യുക", + "storage_template_user_label": "{label} എന്നത് ഉപയോക്താവിന്റെ സ്റ്റോറേജ് ലേബലാണ്", + "system_settings": "സിസ്റ്റം ക്രമീകരണങ്ങൾ", + "tag_cleanup_job": "ടാഗ് ക്ലീനപ്പ്", + "template_email_available_tags": "നിങ്ങളുടെ ടെംപ്ലേറ്റിൽ ഇനിപ്പറയുന്ന വേരിയബിളുകൾ ഉപയോഗിക്കാം: {tags}", + "template_email_if_empty": "ടെംപ്ലേറ്റ് ശൂന്യമാണെങ്കിൽ, ഡിഫോൾട്ട് ഇമെയിൽ ഉപയോഗിക്കും.", + "template_email_invite_album": "ആൽബം ക്ഷണിക്കാനുള്ള ടെംപ്ലേറ്റ്", + "template_email_preview": "പ്രിവ്യൂ", + "template_email_settings": "ഇമെയിൽ ടെംപ്ലേറ്റുകൾ", + "template_email_update_album": "ആൽബം അപ്ഡേറ്റ് ടെംപ്ലേറ്റ്", + "template_email_welcome": "സ്വാഗത ഇമെയിൽ ടെംപ്ലേറ്റ്", + "template_settings": "അറിയിപ്പ് ടെംപ്ലേറ്റുകൾ", + "template_settings_description": "അറിയിപ്പുകൾക്കായി ഇഷ്ടാനുസൃത ടെംപ്ലേറ്റുകൾ കൈകാര്യം ചെയ്യുക", + "theme_custom_css_settings": "കസ്റ്റം CSS", + "theme_custom_css_settings_description": "കാസ്കേഡിംഗ് സ്റ്റൈൽ ഷീറ്റുകൾ (CSS) Immich-ന്റെ ഡിസൈൻ ഇഷ്ടാനുസൃതമാക്കാൻ അനുവദിക്കുന്നു.", + "theme_settings": "തീം ക്രമീകരണങ്ങൾ", + "theme_settings_description": "Immich വെബ് ഇന്റർഫേസിന്റെ കസ്റ്റമൈസേഷൻ കൈകാര്യം ചെയ്യുക", + "thumbnail_generation_job": "തംബ്നെയിലുകൾ നിർമ്മിക്കുക", + "thumbnail_generation_job_description": "ഓരോ അസറ്റിനും വലുതും ചെറുതും മങ്ങിയതുമായ തംബ്നെയിലുകളും ഓരോ വ്യക്തിക്കും തംബ്നെയിലുകളും നിർമ്മിക്കുക", + "transcoding_acceleration_api": "ആക്സിലറേഷൻ API", + "transcoding_acceleration_api_description": "ട്രാൻസ്‌കോഡിംഗ് ത്വരിതപ്പെടുത്തുന്നതിന് നിങ്ങളുടെ ഉപകരണവുമായി സംവദിക്കുന്ന API. ഈ ക്രമീകരണം 'ബെസ്റ്റ് എഫേർട്ട്' ആണ്: പരാജയപ്പെട്ടാൽ സോഫ്റ്റ്‌വെയർ ട്രാൻസ്‌കോഡിംഗിലേക്ക് മാറും. നിങ്ങളുടെ ഹാർഡ്‌വെയർ അനുസരിച്ച് VP9 പ്രവർത്തിക്കുകയോ പ്രവർത്തിക്കാതിരിക്കുകയോ ചെയ്യാം.", + "transcoding_acceleration_nvenc": "NVENC (NVIDIA GPU ആവശ്യമാണ്)", + "transcoding_acceleration_qsv": "ക്വിക്ക് സിങ്ക് (7-ാം തലമുറ ഇന്റൽ സിപിയു അല്ലെങ്കിൽ അതിനുശേഷമുള്ളത് ആവശ്യമാണ്)", + "transcoding_acceleration_rkmpp": "RKMPP (Rockchip SOC-കളിൽ മാത്രം)", + "transcoding_acceleration_vaapi": "VAAPI", + "transcoding_accepted_audio_codecs": "അംഗീകൃത ഓഡിയോ കോഡെക്കുകൾ", + "transcoding_accepted_audio_codecs_description": "ട്രാൻസ്‌കോഡ് ചെയ്യേണ്ടാത്ത ഓഡിയോ കോഡെക്കുകൾ തിരഞ്ഞെടുക്കുക. ചില ട്രാൻസ്‌കോഡ് നയങ്ങൾക്ക് വേണ്ടി മാത്രം ഉപയോഗിക്കുന്നു.", + "transcoding_accepted_containers": "അംഗീകൃത കണ്ടെയ്‌നറുകൾ", + "transcoding_accepted_containers_description": "MP4-ലേക്ക് റീമക്സ് ചെയ്യേണ്ടാത്ത കണ്ടെയ്‌നർ ഫോർമാറ്റുകൾ തിരഞ്ഞെടുക്കുക. ചില ട്രാൻസ്‌കോഡ് നയങ്ങൾക്ക് വേണ്ടി മാത്രം ഉപയോഗിക്കുന്നു.", + "transcoding_accepted_video_codecs": "അംഗീകൃത വീഡിയോ കോഡെക്കുകൾ", + "transcoding_accepted_video_codecs_description": "ട്രാൻസ്‌കോഡ് ചെയ്യേണ്ടാത്ത വീഡിയോ കോഡെക്കുകൾ തിരഞ്ഞെടുക്കുക. ചില ട്രാൻസ്‌കോഡ് നയങ്ങൾക്ക് വേണ്ടി മാത്രം ഉപയോഗിക്കുന്നു.", + "transcoding_advanced_options_description": "മിക്ക ഉപയോക്താക്കളും മാറ്റം വരുത്തേണ്ടതില്ലാത്ത ഓപ്ഷനുകൾ", + "transcoding_audio_codec": "ഓഡിയോ കോഡെക്", + "transcoding_audio_codec_description": "Opus ഏറ്റവും ഉയർന്ന നിലവാരമുള്ള ഓപ്ഷനാണ്, പക്ഷേ പഴയ ഉപകരണങ്ങളുമായോ സോഫ്റ്റ്‌വെയറുമായോ ഇതിന് കുറഞ്ഞ അനുയോജ്യതയേ ഉള്ളൂ.", + "transcoding_bitrate_description": "പരമാവധി ബിറ്റ്റേറ്റിനേക്കാൾ ഉയർന്നതോ അംഗീകൃത ഫോർമാറ്റിൽ അല്ലാത്തതോ ആയ വീഡിയോകൾ", + "transcoding_codecs_learn_more": "ഇവിടെ ഉപയോഗിച്ചിരിക്കുന്ന പദങ്ങളെക്കുറിച്ച് കൂടുതലറിയാൻ, H.264 കോഡെക്, HEVC കോഡെക്, VP9 കോഡെക് എന്നിവയുടെ FFmpeg ഡോക്യുമെന്റേഷൻ പരിശോധിക്കുക.", + "transcoding_constant_quality_mode": "സ്ഥിരമായ ഗുണമേന്മ മോഡ്", + "transcoding_constant_quality_mode_description": "CQP-യെക്കാൾ മികച്ചതാണ് ICQ, എന്നാൽ ചില ഹാർഡ്‌വെയർ ആക്സിലറേഷൻ ഉപകരണങ്ങൾ ഈ മോഡിനെ പിന്തുണയ്ക്കുന്നില്ല. ഗുണമേന്മ അടിസ്ഥാനമാക്കിയുള്ള എൻകോഡിംഗ് ഉപയോഗിക്കുമ്പോൾ ഈ ഓപ്ഷൻ സജ്ജീകരിക്കുന്നത് നിർദ്ദിഷ്ട മോഡിന് മുൻഗണന നൽകും. ICQ പിന്തുണയ്ക്കാത്തതിനാൽ NVENC ഇത് അവഗണിക്കുന്നു.", + "transcoding_constant_rate_factor": "കോൺസ്റ്റന്റ് റേറ്റ് ഫാക്ടർ (-crf)", + "transcoding_constant_rate_factor_description": "വീഡിയോയുടെ ഗുണമേന്മ നില. സാധാരണ മൂല്യങ്ങൾ H.264-ന് 23, HEVC-ക്ക് 28, VP9-ന് 31, AV1-ന് 35 എന്നിങ്ങനെയാണ്. കുറഞ്ഞ മൂല്യം മികച്ചതാണ്, പക്ഷേ വലിയ ഫയലുകൾ ഉണ്ടാക്കുന്നു.", + "transcoding_disabled_description": "ഒരു വീഡിയോയും ട്രാൻസ്‌കോഡ് ചെയ്യരുത്, ഇത് ചില ക്ലയിന്റുകളിൽ പ്ലേബാക്ക് തടസ്സപ്പെടുത്തിയേക്കാം", + "transcoding_encoding_options": "എൻകോഡിംഗ് ഓപ്ഷനുകൾ", + "transcoding_encoding_options_description": "എൻകോഡ് ചെയ്ത വീഡിയോകൾക്കായി കോഡെക്കുകൾ, റെസല്യൂഷൻ, ഗുണമേന്മ, മറ്റ് ഓപ്ഷനുകൾ എന്നിവ സജ്ജമാക്കുക", + "transcoding_hardware_acceleration": "ഹാർഡ്‌വെയർ ആക്സിലറേഷൻ", + "transcoding_hardware_acceleration_description": "പരീക്ഷണാടിസ്ഥാനത്തിലുള്ളത്: വേഗതയേറിയ ട്രാൻസ്‌കോഡിംഗ്, എന്നാൽ ഒരേ ബിറ്റ്റേറ്റിൽ ഗുണമേന്മ കുറച്ചേക്കാം", + "transcoding_hardware_decoding": "ഹാർഡ്‌വെയർ ഡീകോഡിംഗ്", + "transcoding_hardware_decoding_setting_description": "എൻകോഡിംഗ് മാത്രം ത്വരിതപ്പെടുത്തുന്നതിന് പകരം എൻഡ്-ടു-എൻഡ് ആക്സിലറേഷൻ പ്രവർത്തനക്ഷമമാക്കുന്നു. എല്ലാ വീഡിയോകളിലും പ്രവർത്തിച്ചേക്കില്ല.", + "transcoding_max_b_frames": "പരമാവധി ബി-ഫ്രെയിമുകൾ", + "transcoding_max_b_frames_description": "ഉയർന്ന മൂല്യങ്ങൾ കംപ്രഷൻ കാര്യക്ഷമത മെച്ചപ്പെടുത്തുന്നു, പക്ഷേ എൻകോഡിംഗ് വേഗത കുറയ്ക്കുന്നു. പഴയ ഉപകരണങ്ങളിലെ ഹാർഡ്‌വെയർ ആക്സിലറേഷനുമായി പൊരുത്തപ്പെടണമെന്നില്ല. 0 ബി-ഫ്രെയിമുകൾ പ്രവർത്തനരഹിതമാക്കുന്നു, അതേസമയം -1 ഈ മൂല്യം യാന്ത്രികമായി സജ്ജീകരിക്കുന്നു.", + "transcoding_max_bitrate": "പരമാവധി ബിറ്റ്റേറ്റ്", + "transcoding_max_bitrate_description": "ഒരു പരമാവധി ബിറ്റ്റേറ്റ് സജ്ജീകരിക്കുന്നത് ഗുണമേന്മയിൽ ചെറിയൊരു വിട്ടുവീഴ്ചയോടെ ഫയൽ വലുപ്പങ്ങൾ കൂടുതൽ പ്രവചനാതീതമാക്കും. 720p-ൽ, സാധാരണ മൂല്യങ്ങൾ VP9 അല്ലെങ്കിൽ HEVC-ക്ക് 2600 kbit/s, അല്ലെങ്കിൽ H.264-ന് 4500 kbit/s ആണ്. 0 ആയി സജ്ജീകരിച്ചാൽ പ്രവർത്തനരഹിതമാകും.", + "transcoding_max_keyframe_interval": "പരമാവധി കീഫ്രെയിം ഇടവേള", + "transcoding_max_keyframe_interval_description": "കീഫ്രെയിമുകൾക്കിടയിലുള്ള പരമാവധി ഫ്രെയിം ദൂരം സജ്ജമാക്കുന്നു. കുറഞ്ഞ മൂല്യങ്ങൾ കംപ്രഷൻ കാര്യക്ഷമത കുറയ്ക്കുന്നു, പക്ഷേ സീക്ക് സമയം മെച്ചപ്പെടുത്തുകയും വേഗതയേറിയ ചലനമുള്ള രംഗങ്ങളിൽ ഗുണമേന്മ മെച്ചപ്പെടുത്തുകയും ചെയ്തേക്കാം. 0 ഈ മൂല്യം യാന്ത്രികമായി സജ്ജീകരിക്കുന്നു.", + "transcoding_optimal_description": "ലക്ഷ്യമിട്ട റെസല്യൂഷനേക്കാൾ ഉയർന്നതോ അംഗീകൃത ഫോർമാറ്റിൽ അല്ലാത്തതോ ആയ വീഡിയോകൾ", + "transcoding_policy": "ട്രാൻസ്‌കോഡ് നയം", + "transcoding_policy_description": "ഒരു വീഡിയോ എപ്പോൾ ട്രാൻസ്‌കോഡ് ചെയ്യണമെന്ന് സജ്ജമാക്കുക", + "transcoding_preferred_hardware_device": "തിരഞ്ഞെടുക്കുന്ന ഹാർഡ്‌വെയർ ഉപകരണം", + "transcoding_preferred_hardware_device_description": "VAAPI, QSV എന്നിവയ്ക്ക് മാത്രം ബാധകം. ഹാർഡ്‌വെയർ ട്രാൻസ്‌കോഡിംഗിനായി ഉപയോഗിക്കുന്ന dri നോഡ് സജ്ജമാക്കുന്നു.", + "transcoding_preset_preset": "പ്രീസെറ്റ് (-preset)", + "transcoding_preset_preset_description": "കംപ്രഷൻ വേഗത. വേഗത കുറഞ്ഞ പ്രീസെറ്റുകൾ ചെറിയ ഫയലുകൾ നിർമ്മിക്കുന്നു, ഒരു നിശ്ചിത ബിറ്റ്റേറ്റ് ലക്ഷ്യമിടുമ്പോൾ ഗുണമേന്മ വർദ്ധിപ്പിക്കുന്നു. 'faster'-നേക്കാൾ ഉയർന്ന വേഗത VP9 അവഗണിക്കുന്നു.", + "transcoding_reference_frames": "റഫറൻസ് ഫ്രെയിമുകൾ", + "transcoding_reference_frames_description": "നൽകിയിരിക്കുന്ന ഒരു ഫ്രെയിം കംപ്രസ് ചെയ്യുമ്പോൾ റഫറൻസ് ചെയ്യേണ്ട ഫ്രെയിമുകളുടെ എണ്ണം. ഉയർന്ന മൂല്യങ്ങൾ കംപ്രഷൻ കാര്യക്ഷമത മെച്ചപ്പെടുത്തുന്നു, പക്ഷേ എൻകോഡിംഗ് വേഗത കുറയ്ക്കുന്നു. 0 ഈ മൂല്യം യാന്ത്രികമായി സജ്ജീകരിക്കുന്നു.", + "transcoding_required_description": "അംഗീകൃത ഫോർമാറ്റിൽ അല്ലാത്ത വീഡിയോകൾ മാത്രം", + "transcoding_settings": "വീഡിയോ ട്രാൻസ്കോഡിംഗ് ക്രമീകരണങ്ങൾ", + "transcoding_settings_description": "ഏതൊക്കെ വീഡിയോകളാണ് ട്രാൻസ്‌കോഡ് ചെയ്യേണ്ടതെന്നും അവ എങ്ങനെ പ്രോസസ്സ് ചെയ്യണമെന്നും കൈകാര്യം ചെയ്യുക", + "transcoding_target_resolution": "ലക്ഷ്യമിടുന്ന റെസല്യൂഷൻ", + "transcoding_target_resolution_description": "ഉയർന്ന റെസല്യൂഷനുകൾക്ക് കൂടുതൽ വിശദാംശങ്ങൾ സംരക്ഷിക്കാൻ കഴിയും, പക്ഷേ എൻകോഡ് ചെയ്യാൻ കൂടുതൽ സമയമെടുക്കും, വലിയ ഫയൽ വലുപ്പമുണ്ടാകും, കൂടാതെ ആപ്പിന്റെ പ്രതികരണശേഷി കുറയ്ക്കുകയും ചെയ്യും.", + "transcoding_temporal_aq": "ടെമ്പറൽ AQ", + "transcoding_temporal_aq_description": "NVENC-ക്ക് മാത്രം ബാധകം. ഉയർന്ന വിശദാംശങ്ങളും കുറഞ്ഞ ചലനവുമുള്ള രംഗങ്ങളുടെ ഗുണമേന്മ വർദ്ധിപ്പിക്കുന്നു. പഴയ ഉപകരണങ്ങളുമായി പൊരുത്തപ്പെടണമെന്നില്ല.", + "transcoding_threads": "ത്രെഡുകൾ", + "transcoding_threads_description": "ഉയർന്ന മൂല്യങ്ങൾ വേഗതയേറിയ എൻകോഡിംഗിലേക്ക് നയിക്കുന്നു, പക്ഷേ സെർവറിന് മറ്റ് ജോലികൾ പ്രോസസ്സ് ചെയ്യാൻ കുറച്ച് ഇടം നൽകുന്നു. ഈ മൂല്യം സിപിയു കോറുകളുടെ എണ്ണത്തേക്കാൾ കൂടുതലാകരുത്. 0 ആയി സജ്ജീകരിച്ചാൽ ഉപയോഗം പരമാവധിയാക്കുന്നു.", + "transcoding_tone_mapping": "ടോൺ-മാപ്പിംഗ്", + "transcoding_tone_mapping_description": "HDR വീഡിയോകൾ SDR-ലേക്ക് പരിവർത്തനം ചെയ്യുമ്പോൾ അവയുടെ രൂപം നിലനിർത്താൻ ശ്രമിക്കുന്നു. ഓരോ അൽഗോരിതവും നിറം, വിശദാംശങ്ങൾ, തെളിച്ചം എന്നിവയ്ക്കായി വ്യത്യസ്ത വിട്ടുവീഴ്ചകൾ ചെയ്യുന്നു. Hable വിശദാംശങ്ങൾ സംരക്ഷിക്കുന്നു, Mobius നിറം സംരക്ഷിക്കുന്നു, Reinhard തെളിച്ചം സംരക്ഷിക്കുന്നു.", + "transcoding_transcode_policy": "ട്രാൻസ്‌കോഡ് നയം", + "transcoding_transcode_policy_description": "ഒരു വീഡിയോ എപ്പോൾ ട്രാൻസ്‌കോഡ് ചെയ്യണം എന്നതിനെക്കുറിച്ചുള്ള നയം. HDR വീഡിയോകൾ എല്ലായ്പ്പോഴും ട്രാൻസ്‌കോഡ് ചെയ്യപ്പെടും (ട്രാൻസ്‌കോഡിംഗ് പ്രവർത്തനരഹിതമാക്കിയിട്ടില്ലെങ്കിൽ).", + "transcoding_two_pass_encoding": "ടു-പാസ് എൻകോഡിംഗ്", + "transcoding_two_pass_encoding_setting_description": "മെച്ചപ്പെട്ട എൻകോഡ് ചെയ്ത വീഡിയോകൾ നിർമ്മിക്കുന്നതിന് രണ്ട് പാസുകളിലായി ട്രാൻസ്‌കോഡ് ചെയ്യുക. പരമാവധി ബിറ്റ്റേറ്റ് പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ (H.264, HEVC എന്നിവയ്‌ക്കൊപ്പം പ്രവർത്തിക്കാൻ ഇത് ആവശ്യമാണ്), ഈ മോഡ് പരമാവധി ബിറ്റ്റേറ്റിനെ അടിസ്ഥാനമാക്കി ഒരു ബിറ്റ്റേറ്റ് ശ്രേണി ഉപയോഗിക്കുകയും CRF അവഗണിക്കുകയും ചെയ്യുന്നു. VP9-നായി, പരമാവധി ബിറ്റ്റേറ്റ് പ്രവർത്തനരഹിതമാക്കിയിട്ടുണ്ടെങ്കിൽ CRF ഉപയോഗിക്കാം.", + "transcoding_video_codec": "വീഡിയോ കോഡെക്", + "transcoding_video_codec_description": "VP9-ന് ഉയർന്ന കാര്യക്ഷമതയും വെബ് അനുയോജ്യതയുമുണ്ട്, പക്ഷേ ട്രാൻസ്‌കോഡ് ചെയ്യാൻ കൂടുതൽ സമയമെടുക്കും. HEVC സമാനമായി പ്രവർത്തിക്കുന്നു, പക്ഷേ വെബ് അനുയോജ്യത കുറവാണ്. H.264 വ്യാപകമായി അനുയോജ്യവും വേഗത്തിൽ ട്രാൻസ്‌കോഡ് ചെയ്യാൻ കഴിയുന്നതുമാണ്, പക്ഷേ വളരെ വലിയ ഫയലുകൾ നിർമ്മിക്കുന്നു. AV1 ഏറ്റവും കാര്യക്ഷമമായ കോഡെക്കാണ്, പക്ഷേ പഴയ ഉപകരണങ്ങളിൽ ഇതിന് പിന്തുണയില്ല.", + "trash_enabled_description": "ട്രാഷ് ഫീച്ചറുകൾ പ്രവർത്തനക്ഷമമാക്കുക", + "trash_number_of_days": "ദിവസങ്ങളുടെ എണ്ണം", + "trash_number_of_days_description": "അസറ്റുകൾ ശാശ്വതമായി നീക്കം ചെയ്യുന്നതിനുമുമ്പ് ട്രാഷിൽ സൂക്ഷിക്കേണ്ട ദിവസങ്ങളുടെ എണ്ണം", + "trash_settings": "ട്രാഷ് ക്രമീകരണങ്ങൾ", + "trash_settings_description": "ട്രാഷ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "unlink_all_oauth_accounts": "എല്ലാ OAuth അക്കൗണ്ടുകളും അൺലിങ്ക് ചെയ്യുക", + "unlink_all_oauth_accounts_description": "ഒരു പുതിയ ദാതാവിലേക്ക് മാറുന്നതിന് മുമ്പ് എല്ലാ OAuth അക്കൗണ്ടുകളും അൺലിങ്ക് ചെയ്യാൻ ഓർമ്മിക്കുക.", + "unlink_all_oauth_accounts_prompt": "എല്ലാ OAuth അക്കൗണ്ടുകളും അൺലിങ്ക് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഇത് ഓരോ ഉപയോക്താവിന്റെയും OAuth ഐഡി റീസെറ്റ് ചെയ്യും, ഇത് പഴയപടിയാക്കാൻ കഴിയില്ല.", + "user_cleanup_job": "ഉപയോക്തൃ ക്ലീനപ്പ്", + "user_delete_delay": "{user}-ന്റെ അക്കൗണ്ടും അസറ്റുകളും {delay, plural, one {# ദിവസത്തിനുള്ളിൽ} other {# ദിവസങ്ങൾക്കുള്ളിൽ}} ശാശ്വതമായി ഇല്ലാതാക്കാൻ ഷെഡ്യൂൾ ചെയ്യും.", + "user_delete_delay_settings": "ഇല്ലാതാക്കാനുള്ള കാലതാമസം", + "user_delete_delay_settings_description": "ഒരു ഉപയോക്താവിന്റെ അക്കൗണ്ടും അസറ്റുകളും ശാശ്വതമായി ഇല്ലാതാക്കാൻ നീക്കം ചെയ്തതിന് ശേഷമുള്ള ദിവസങ്ങളുടെ എണ്ണം. ഇല്ലാതാക്കാൻ തയ്യാറായ ഉപയോക്താക്കളെ പരിശോധിക്കാൻ ഉപയോക്താവിനെ ഇല്ലാതാക്കാനുള്ള ജോലി അർദ്ധരാത്രിയിൽ പ്രവർത്തിക്കുന്നു. ഈ ക്രമീകരണത്തിലെ മാറ്റങ്ങൾ അടുത്ത എക്സിക്യൂഷനിൽ വിലയിരുത്തപ്പെടും.", + "user_delete_immediately": "{user}-ന്റെ അക്കൗണ്ടും അസറ്റുകളും ഉടനടി ശാശ്വതമായി ഇല്ലാതാക്കുന്നതിനായി ക്യൂ ചെയ്യും.", + "user_delete_immediately_checkbox": "ഉപയോക്താവിനെയും അസറ്റുകളെയും ഉടനടി ഇല്ലാതാക്കാൻ ക്യൂ ചെയ്യുക", + "user_details": "ഉപയോക്തൃ വിശദാംശങ്ങൾ", + "user_management": "ഉപയോക്തൃ മാനേജ്മെന്റ്", + "user_password_has_been_reset": "ഉപയോക്താവിന്റെ പാസ്‌വേഡ് റീസെറ്റ് ചെയ്തു:", + "user_password_reset_description": "ദയവായി ഉപയോക്താവിന് താൽക്കാലിക പാസ്‌വേഡ് നൽകുക, അടുത്ത ലോഗിൻ ചെയ്യുമ്പോൾ പാസ്‌വേഡ് മാറ്റേണ്ടിവരുമെന്ന് അവരെ അറിയിക്കുക.", + "user_restore_description": "{user}-ന്റെ അക്കൗണ്ട് പുനഃസ്ഥാപിക്കും.", + "user_restore_scheduled_removal": "ഉപയോക്താവിനെ പുനഃസ്ഥാപിക്കുക - {date, date, long}-ന് നീക്കംചെയ്യാൻ ഷെഡ്യൂൾ ചെയ്‌തിരിക്കുന്നു", + "user_settings": "ഉപയോക്താവിന്റെ ക്രമീകരണങ്ങൾ", + "user_settings_description": "ഉപയോക്തൃ ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "user_successfully_removed": "{email} എന്ന ഉപയോക്താവിനെ വിജയകരമായി നീക്കംചെയ്തു.", + "version_check_enabled_description": "പതിപ്പ് പരിശോധന പ്രവർത്തനക്ഷമമാക്കുക", + "version_check_implications": "പതിപ്പ് പരിശോധന ഫീച്ചർ github.com-മായി ആനുകാലിക ആശയവിനിമയത്തെ ആശ്രയിച്ചിരിക്കുന്നു", + "version_check_settings": "പതിപ്പ് പരിശോധന", + "version_check_settings_description": "പുതിയ പതിപ്പിന്റെ അറിയിപ്പ് പ്രവർത്തനക്ഷമമാക്കുക/പ്രവർത്തനരഹിതമാക്കുക", + "video_conversion_job": "വീഡിയോകൾ ട്രാൻസ്‌കോഡ് ചെയ്യുക", + "video_conversion_job_description": "ബ്രൗസറുകളുമായും ഉപകരണങ്ങളുമായും കൂടുതൽ അനുയോജ്യതയ്ക്കായി വീഡിയോകൾ ട്രാൻസ്‌കോഡ് ചെയ്യുക" }, + "admin_email": "അഡ്മിൻ ഇമെയിൽ", + "admin_password": "അഡ്മിൻ പാസ്‌വേഡ്", + "administration": "അഡ്മിനിസ്ട്രേഷൻ", + "advanced": "വിപുലമായത്", + "advanced_settings_enable_alternate_media_filter_subtitle": "ഇതര മാനദണ്ഡങ്ങളെ അടിസ്ഥാനമാക്കി സിങ്ക് സമയത്ത് മീഡിയ ഫിൽട്ടർ ചെയ്യാൻ ഈ ഓപ്ഷൻ ഉപയോഗിക്കുക. എല്ലാ ആൽബങ്ങളും കണ്ടെത്തുന്നതിൽ ആപ്പിന് പ്രശ്നങ്ങളുണ്ടെങ്കിൽ മാത്രം ഇത് പരീക്ഷിക്കുക.", + "advanced_settings_enable_alternate_media_filter_title": "[പരീക്ഷണാടിസ്ഥാനത്തിൽ] ഇതര ഉപകരണ ആൽബം സിങ്ക് ഫിൽട്ടർ ഉപയോഗിക്കുക", + "advanced_settings_log_level_title": "ലോഗ് ലെവൽ: {level}", + "advanced_settings_prefer_remote_subtitle": "ചില ഉപകരണങ്ങളിൽ പ്രാദേശിക അസറ്റുകളിൽ നിന്ന് തംബ്നെയിലുകൾ ലോഡുചെയ്യാൻ വളരെ വേഗത കുറവാണ്. പകരം റിമോട്ട് ചിത്രങ്ങൾ ലോഡുചെയ്യാൻ ഈ ക്രമീകരണം സജീവമാക്കുക.", + "advanced_settings_prefer_remote_title": "റിമോട്ട് ചിത്രങ്ങൾക്ക് മുൻഗണന നൽകുക", + "advanced_settings_proxy_headers_subtitle": "ഓരോ നെറ്റ്‌വർക്ക് അഭ്യർത്ഥനയ്‌ക്കൊപ്പവും Immich അയയ്‌ക്കേണ്ട പ്രോക്സി ഹെഡറുകൾ നിർവചിക്കുക", + "advanced_settings_proxy_headers_title": "പ്രോക്സി ഹെഡറുകൾ", + "advanced_settings_readonly_mode_subtitle": "ഫോട്ടോകൾ മാത്രം കാണാൻ കഴിയുന്ന റീഡ്-ഓൺലി മോഡ് പ്രവർത്തനക്ഷമമാക്കുന്നു. ഒന്നിലധികം ചിത്രങ്ങൾ തിരഞ്ഞെടുക്കൽ, പങ്കിടൽ, കാസ്റ്റിംഗ്, ഇല്ലാതാക്കൽ എന്നിവയെല്ലാം പ്രവർത്തനരഹിതമാകും. പ്രധാന സ്ക്രീനിലെ ഉപയോക്തൃ അവതാർ വഴി റീഡ്-ഓൺലി പ്രവർത്തനക്ഷമമാക്കുക/പ്രവർത്തനരഹിതമാക്കുക.", + "advanced_settings_readonly_mode_title": "റീഡ്-ഓൺലി മോഡ്", + "advanced_settings_self_signed_ssl_subtitle": "സെർവർ എൻഡ്‌പോയിന്റിനായുള്ള SSL സർട്ടിഫിക്കറ്റ് പരിശോധന ഒഴിവാക്കുന്നു. സ്വയം ഒപ്പിട്ട സർട്ടിഫിക്കറ്റുകൾക്ക് ആവശ്യമാണ്.", + "advanced_settings_self_signed_ssl_title": "സ്വയം ഒപ്പിട്ട SSL സർട്ടിഫിക്കറ്റുകൾ അനുവദിക്കുക", + "advanced_settings_sync_remote_deletions_subtitle": "വെബിൽ ആ പ്രവർത്തനം നടത്തുമ്പോൾ ഈ ഉപകരണത്തിലെ ഒരു അസറ്റ് യാന്ത്രികമായി ഇല്ലാതാക്കുകയോ പുനഃസ്ഥാപിക്കുകയോ ചെയ്യുക", + "advanced_settings_sync_remote_deletions_title": "റിമോട്ട് ഇല്ലാതാക്കലുകൾ സിങ്ക് ചെയ്യുക [പരീക്ഷണാടിസ്ഥാനത്തിൽ]", + "advanced_settings_tile_subtitle": "വിപുലമായ ഉപയോക്തൃ ക്രമീകരണങ്ങൾ", + "advanced_settings_troubleshooting_subtitle": "ട്രബിൾഷൂട്ടിംഗിനായി അധിക ഫീച്ചറുകൾ പ്രവർത്തനക്ഷമമാക്കുക", + "advanced_settings_troubleshooting_title": "ട്രബിൾഷൂട്ടിംഗ്", + "age_months": "പ്രായം {months, plural, one {# മാസം} other {# മാസം}}", + "age_year_months": "പ്രായം 1 വർഷം, {months, plural, one {# മാസം} other {# മാസം}}", + "age_years": "{years, plural, other {പ്രായം #}}", + "album_added": "ആൽബം ചേർത്തു", + "album_added_notification_setting_description": "നിങ്ങളെ ഒരു പങ്കിട്ട ആൽബത്തിലേക്ക് ചേർക്കുമ്പോൾ ഒരു ഇമെയിൽ അറിയിപ്പ് സ്വീകരിക്കുക", + "album_cover_updated": "ആൽബം കവർ അപ്ഡേറ്റ് ചെയ്തു", + "album_delete_confirmation": "നിങ്ങൾക്ക് {album} ആൽബം ഇല്ലാതാക്കണമെന്ന് ഉറപ്പാണോ?", + "album_delete_confirmation_description": "ഈ ആൽബം പങ്കിട്ടതാണെങ്കിൽ, മറ്റ് ഉപയോക്താക്കൾക്ക് ഇനി ഇത് ആക്‌സസ് ചെയ്യാൻ കഴിയില്ല.", + "album_deleted": "ആൽബം ഇല്ലാതാക്കി", + "album_info_card_backup_album_excluded": "ഒഴിവാക്കി", + "album_info_card_backup_album_included": "ഉൾപ്പെടുത്തി", + "album_info_updated": "ആൽബം വിവരങ്ങൾ അപ്ഡേറ്റ് ചെയ്തു", + "album_leave": "ആൽബം വിടുകയാണോ?", + "album_leave_confirmation": "{album} വിട്ടുപോകണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "album_name": "ആൽബത്തിന്റെ പേര്", + "album_options": "ആൽബം ഓപ്ഷനുകൾ", + "album_remove_user": "ഉപയോക്താവിനെ നീക്കം ചെയ്യണോ?", + "album_remove_user_confirmation": "{user}-നെ നീക്കം ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "album_search_not_found": "നിങ്ങളുടെ തിരയലുമായി പൊരുത്തപ്പെടുന്ന ആൽബങ്ങളൊന്നും കണ്ടെത്തിയില്ല", + "album_share_no_users": "നിങ്ങൾ ഈ ആൽബം എല്ലാ ഉപയോക്താക്കളുമായും പങ്കിട്ടു, അല്ലെങ്കിൽ നിങ്ങൾക്ക് പങ്കിടാൻ ഉപയോക്താക്കളാരും ഇല്ലെന്നു തോന്നുന്നു.", + "album_summary": "ആൽബത്തിന്റെ സംഗ്രഹം", + "album_updated": "ആൽബം അപ്ഡേറ്റ് ചെയ്തു", + "album_updated_setting_description": "ഒരു പങ്കിട്ട ആൽബത്തിൽ പുതിയ അസറ്റുകൾ ഉണ്ടാകുമ്പോൾ ഒരു ഇമെയിൽ അറിയിപ്പ് സ്വീകരിക്കുക", + "album_user_left": "{album} വിട്ടുപോയി", + "album_user_removed": "{user}-നെ നീക്കം ചെയ്തു", + "album_viewer_appbar_delete_confirm": "നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്ന് ഈ ആൽബം ഇല്ലാതാക്കണമെന്ന് ഉറപ്പാണോ?", + "album_viewer_appbar_share_err_delete": "ആൽബം ഇല്ലാതാക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "album_viewer_appbar_share_err_leave": "ആൽബം വിടുന്നതിൽ പരാജയപ്പെട്ടു", + "album_viewer_appbar_share_err_remove": "ആൽബത്തിൽ നിന്ന് അസറ്റുകൾ നീക്കം ചെയ്യുന്നതിൽ പ്രശ്നങ്ങളുണ്ട്", + "album_viewer_appbar_share_err_title": "ആൽബത്തിന്റെ ശീർഷകം മാറ്റുന്നതിൽ പരാജയപ്പെട്ടു", + "album_viewer_appbar_share_leave": "ആൽബം വിടുക", + "album_viewer_appbar_share_to": "ഇതിലേക്ക് പങ്കിടുക", + "album_viewer_page_share_add_users": "ഉപയോക്താക്കളെ ചേർക്കുക", + "album_with_link_access": "ലിങ്കുള്ള ആർക്കും ഈ ആൽബത്തിലെ ഫോട്ടോകളും ആളുകളെയും കാണാൻ അനുവദിക്കുക.", + "albums": "ആൽബങ്ങൾ", + "albums_count": "{count, plural, one {{count, number} ആൽബം} other {{count, number} ആൽബങ്ങൾ}}", + "albums_default_sort_order": "ഡിഫോൾട്ട് ആൽബം സോർട്ട് ഓർഡർ", + "albums_default_sort_order_description": "പുതിയ ആൽബങ്ങൾ സൃഷ്ടിക്കുമ്പോൾ പ്രാരംഭ അസറ്റ് സോർട്ട് ഓർഡർ.", + "albums_feature_description": "മറ്റ് ഉപയോക്താക്കളുമായി പങ്കിടാൻ കഴിയുന്ന അസറ്റുകളുടെ ശേഖരം.", + "albums_on_device_count": "ഉപകരണത്തിലെ ആൽബങ്ങൾ ({count})", + "all": "എല്ലാം", + "all_albums": "എല്ലാ ആൽബങ്ങളും", + "all_people": "എല്ലാ ആളുകളും", + "all_videos": "എല്ലാ വീഡിയോകളും", + "allow_dark_mode": "ഡാർക്ക് മോഡ് അനുവദിക്കുക", + "allow_edits": "എഡിറ്റുകൾ അനുവദിക്കുക", + "allow_public_user_to_download": "പൊതു ഉപയോക്താവിനെ ഡൗൺലോഡ് ചെയ്യാൻ അനുവദിക്കുക", + "allow_public_user_to_upload": "പൊതു ഉപയോക്താവിനെ അപ്‌ലോഡ് ചെയ്യാൻ അനുവദിക്കുക", + "alt_text_qr_code": "QR കോഡ് ചിത്രം", + "anti_clockwise": "അപ്രദക്ഷിണമായി", + "api_key": "API കീ", + "api_key_description": "ഈ മൂല്യം ഒരു തവണ മാത്രമേ കാണിക്കൂ. വിൻഡോ അടയ്ക്കുന്നതിന് മുമ്പ് ഇത് പകർത്തുന്നത് ഉറപ്പാക്കുക.", + "api_key_empty": "നിങ്ങളുടെ API കീയുടെ പേര് ശൂന്യമാകരുത്", + "api_keys": "API കീകൾ", + "app_bar_signout_dialog_content": "സൈൻ ഔട്ട് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "app_bar_signout_dialog_ok": "അതെ", + "app_bar_signout_dialog_title": "സൈൻ ഔട്ട്", + "app_settings": "ആപ്പ് ക്രമീകരണങ്ങൾ", + "appears_in": "ഇതിൽ കാണപ്പെടുന്നു", + "apply_count": "പ്രയോഗിക്കുക ({count, number})", + "archive": "ആർക്കൈവ്", + "archive_action_prompt": "{count} എണ്ണം ആർക്കൈവിലേക്ക് ചേർത്തു", + "archive_or_unarchive_photo": "ഫോട്ടോ ആർക്കൈവ് ചെയ്യുക അല്ലെങ്കിൽ അൺആർക്കൈവ് ചെയ്യുക", + "archive_page_no_archived_assets": "ആർക്കൈവുചെയ്‌ത അസറ്റുകളൊന്നും കണ്ടെത്തിയില്ല", + "archive_page_title": "ആർക്കൈവ് ({count})", + "archive_size": "ആർക്കൈവ് വലുപ്പം", + "archive_size_description": "ഡൗൺലോഡുകൾക്കായി ആർക്കൈവ് വലുപ്പം കോൺഫിഗർ ചെയ്യുക (GiB-യിൽ)", + "archived": "ആർക്കൈവുചെയ്‌തു", + "archived_count": "{count, plural, other {ആർക്കൈവുചെയ്‌തവ #}}", + "are_these_the_same_person": "ഇവർ ഒരേ വ്യക്തിയാണോ?", + "are_you_sure_to_do_this": "ഇത് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "asset_action_delete_err_read_only": "വായിക്കാൻ മാത്രമുള്ള അസറ്റ്(കൾ) ഇല്ലാതാക്കാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "asset_action_share_err_offline": "ഓഫ്‌ലൈൻ അസറ്റ്(കൾ) ലഭ്യമാക്കാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "asset_added_to_album": "ആൽബത്തിലേക്ക് ചേർത്തു", + "asset_adding_to_album": "ആൽബത്തിലേക്ക് ചേർത്തുകൊണ്ടിരിക്കുന്നു…", + "asset_description_updated": "അസറ്റിന്റെ വിവരണം അപ്ഡേറ്റ് ചെയ്തു", + "asset_filename_is_offline": "{filename} എന്ന അസറ്റ് ഓഫ്‌ലൈനാണ്", + "asset_has_unassigned_faces": "അസറ്റിൽ അസൈൻ ചെയ്യാത്ത മുഖങ്ങളുണ്ട്", + "asset_hashing": "ഹാഷിംഗ്…", + "asset_list_group_by_sub_title": "ഇതനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്യുക", + "asset_list_layout_settings_dynamic_layout_title": "ഡൈനാമിക് ലേഔട്ട്", + "asset_list_layout_settings_group_automatically": "യാന്ത്രികം", + "asset_list_layout_settings_group_by": "അസറ്റുകളെ ഇതനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്യുക", + "asset_list_layout_settings_group_by_month_day": "മാസം + ദിവസം", + "asset_list_layout_sub_title": "ലേഔട്ട്", + "asset_list_settings_subtitle": "ഫോട്ടോ ഗ്രിഡ് ലേഔട്ട് ക്രമീകരണങ്ങൾ", + "asset_list_settings_title": "ഫോട്ടോ ഗ്രിഡ്", + "asset_offline": "അസറ്റ് ഓഫ്‌ലൈൻ", + "asset_offline_description": "ഈ എക്സ്റ്റേണൽ അസറ്റ് ഇപ്പോൾ ഡിസ്കിൽ ലഭ്യമല്ല. സഹായത്തിനായി നിങ്ങളുടെ Immich അഡ്മിനിസ്ട്രേറ്ററുമായി ബന്ധപ്പെടുക.", + "asset_restored_successfully": "അസറ്റ് വിജയകരമായി പുനഃസ്ഥാപിച്ചു", + "asset_skipped": "ഒഴിവാക്കി", + "asset_skipped_in_trash": "ട്രാഷിൽ", + "asset_trashed": "അസറ്റ് ട്രാഷ് ചെയ്തു", + "asset_troubleshoot": "അസറ്റ് ട്രബിൾഷൂട്ട്", + "asset_uploaded": "അപ്‌ലോഡ് ചെയ്തു", + "asset_uploading": "അപ്‌ലോഡ് ചെയ്യുന്നു…", + "asset_viewer_settings_subtitle": "നിങ്ങളുടെ ഗാലറി വ്യൂവർ ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "asset_viewer_settings_title": "അസറ്റ് വ്യൂവർ", + "assets": "അസറ്റുകൾ", + "assets_added_count": "{count, plural, one {# അസറ്റ് ചേർത്തു} other {# അസറ്റുകൾ ചേർത്തു}}", + "assets_added_to_album_count": "ആൽബത്തിലേക്ക് {count, plural, one {# അസറ്റ് ചേർത്തു} other {# അസറ്റുകൾ ചേർത്തു}}", + "assets_added_to_albums_count": "{albumTotal, plural, one {# ആൽബത്തിലേക്ക്} other {# ആൽബങ്ങളിലേക്ക്}} {assetTotal, plural, one {# അസറ്റ് ചേർത്തു} other {# അസറ്റുകൾ ചേർത്തു}}", + "assets_cannot_be_added_to_album_count": "{count, plural, one {അസറ്റ്} other {അസറ്റുകൾ}} ആൽബത്തിലേക്ക് ചേർക്കാൻ കഴിയില്ല", + "assets_cannot_be_added_to_albums": "{count, plural, one {അസറ്റ്} other {അസറ്റുകൾ}} ഒരു ആൽബത്തിലേക്കും ചേർക്കാൻ കഴിയില്ല", + "assets_count": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}}", + "assets_deleted_permanently": "{count} അസറ്റ്(കൾ) ശാശ്വതമായി ഇല്ലാതാക്കി", + "assets_deleted_permanently_from_server": "{count} അസറ്റ്(കൾ) Immich സെർവറിൽ നിന്ന് ശാശ്വതമായി ഇല്ലാതാക്കി", + "assets_downloaded_failed": "{count, plural, one {# ഫയൽ ഡൗൺലോഡ് ചെയ്തു - {error} ഫയൽ പരാജയപ്പെട്ടു} other {# ഫയലുകൾ ഡൗൺലോഡ് ചെയ്തു - {error} ഫയലുകൾ പരാജയപ്പെട്ടു}}", + "assets_downloaded_successfully": "{count, plural, one {# ഫയൽ വിജയകരമായി ഡൗൺലോഡ് ചെയ്തു} other {# ഫയലുകൾ വിജയകരമായി ഡൗൺലോഡ് ചെയ്തു}}", + "assets_moved_to_trash_count": "{count, plural, one {# അസറ്റ് ട്രാഷിലേക്ക് മാറ്റി} other {# അസറ്റുകൾ ട്രാഷിലേക്ക് മാറ്റി}}", + "assets_permanently_deleted_count": "{count, plural, one {# അസറ്റ് ശാശ്വതമായി ഇല്ലാതാക്കി} other {# അസറ്റുകൾ ശാശ്വതമായി ഇല്ലാതാക്കി}}", + "assets_removed_count": "{count, plural, one {# അസറ്റ് നീക്കം ചെയ്തു} other {# അസറ്റുകൾ നീക്കം ചെയ്തു}}", + "assets_removed_permanently_from_device": "{count} അസറ്റ്(കൾ) നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് ശാശ്വതമായി നീക്കം ചെയ്തു", + "assets_restore_confirmation": "ട്രാഷ് ചെയ്ത എല്ലാ അസറ്റുകളും പുനഃസ്ഥാപിക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഈ പ്രവർത്തനം പഴയപടിയാക്കാൻ കഴിയില്ല! ഓഫ്‌ലൈൻ അസറ്റുകളൊന്നും ഈ രീതിയിൽ പുനഃസ്ഥാപിക്കാൻ കഴിയില്ലെന്ന കാര്യം ശ്രദ്ധിക്കുക.", + "assets_restored_count": "{count, plural, one {# അസറ്റ് പുനഃസ്ഥാപിച്ചു} other {# അസറ്റുകൾ പുനഃസ്ഥാപിച്ചു}}", + "assets_restored_successfully": "{count} അസറ്റ്(കൾ) വിജയകരമായി പുനഃസ്ഥാപിച്ചു", + "assets_trashed": "{count} അസറ്റ്(കൾ) ട്രാഷ് ചെയ്തു", + "assets_trashed_count": "{count, plural, one {# അസറ്റ് ട്രാഷ് ചെയ്തു} other {# അസറ്റുകൾ ട്രാഷ് ചെയ്തു}}", + "assets_trashed_from_server": "{count} അസറ്റ്(കൾ) Immich സെർവറിൽ നിന്ന് ട്രാഷ് ചെയ്തു", + "assets_were_part_of_album_count": "{count, plural, one {അസറ്റ് ഇതിനകം} other {അസറ്റുകൾ ഇതിനകം}} ആൽബത്തിന്റെ ഭാഗമായിരുന്നു", + "assets_were_part_of_albums_count": "{count, plural, one {അസറ്റ് ഇതിനകം} other {അസറ്റുകൾ ഇതിനകം}} ആൽബങ്ങളുടെ ഭാഗമായിരുന്നു", + "authorized_devices": "അംഗീകൃത ഉപകരണങ്ങൾ", + "automatic_endpoint_switching_subtitle": "ലഭ്യമാകുമ്പോൾ നിശ്ചിത വൈ-ഫൈ വഴി പ്രാദേശികമായി കണക്റ്റുചെയ്യുക, മറ്റ് സ്ഥലങ്ങളിൽ ഇതര കണക്ഷനുകൾ ഉപയോഗിക്കുക", + "automatic_endpoint_switching_title": "യാന്ത്രിക URL സ്വിച്ചിംഗ്", + "autoplay_slideshow": "സ്ലൈഡ്‌ഷോ യാന്ത്രികമായി പ്ലേ ചെയ്യുക", + "back": "തിരികെ", + "back_close_deselect": "പുറകോട്ട്, അടയ്ക്കുക, അല്ലെങ്കിൽ തിരഞ്ഞെടുത്തത് മാറ്റുക", + "background_backup_running_error": "പശ്ചാത്തല ബാക്കപ്പ് ഇപ്പോൾ പ്രവർത്തിക്കുന്നു, മാനുവൽ ബാക്കപ്പ് ആരംഭിക്കാൻ കഴിയില്ല", + "background_location_permission": "പശ്ചാത്തല ലൊക്കേഷൻ അനുമതി", + "background_location_permission_content": "പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കുമ്പോൾ നെറ്റ്‌വർക്കുകൾ മാറുന്നതിന്, Immich-ന് എപ്പോഴും കൃത്യമായ ലൊക്കേഷൻ ആക്‌സസ് ഉണ്ടായിരിക്കണം, അതുവഴി ആപ്പിന് വൈ-ഫൈ നെറ്റ്‌വർക്കിന്റെ പേര് വായിക്കാൻ കഴിയും", + "background_options": "പശ്ചാത്തല ഓപ്ഷനുകൾ", + "backup": "ബാക്കപ്പ്", + "backup_album_selection_page_albums_device": "ഉപകരണത്തിലെ ആൽബങ്ങൾ ({count})", + "backup_album_selection_page_albums_tap": "ഉൾപ്പെടുത്താൻ ടാപ്പുചെയ്യുക, ഒഴിവാക്കാൻ ഡബിൾ ടാപ്പുചെയ്യുക", + "backup_album_selection_page_assets_scatter": "അസറ്റുകൾ ഒന്നിലധികം ആൽബങ്ങളിലായി വ്യാപിച്ചുകിടക്കാം. അതിനാൽ, ബാക്കപ്പ് പ്രക്രിയയിൽ ആൽബങ്ങൾ ഉൾപ്പെടുത്തുകയോ ഒഴിവാക്കുകയോ ചെയ്യാം.", + "backup_album_selection_page_select_albums": "ആൽബങ്ങൾ തിരഞ്ഞെടുക്കുക", + "backup_album_selection_page_selection_info": "തിരഞ്ഞെടുക്കൽ വിവരം", + "backup_album_selection_page_total_assets": "ആകെ സവിശേഷമായ അസറ്റുകൾ", + "backup_albums_sync": "ബാക്കപ്പ് ആൽബം സിൻക്രൊണൈസേഷൻ", + "backup_all": "എല്ലാം ബാക്കപ്പ് ചെയ്യുക", + "backup_background_service_backup_failed_message": "അസറ്റുകൾ ബാക്കപ്പ് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു. വീണ്ടും ശ്രമിക്കുന്നു…", + "backup_background_service_connection_failed_message": "സെർവറിലേക്ക് കണക്റ്റുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു. വീണ്ടും ശ്രമിക്കുന്നു…", + "backup_background_service_current_upload_notification": "{filename} അപ്‌ലോഡ് ചെയ്യുന്നു", + "backup_background_service_default_notification": "പുതിയ അസറ്റുകൾക്കായി പരിശോധിക്കുന്നു…", + "backup_background_service_error_title": "ബാക്കപ്പ് പിശക്", + "backup_background_service_in_progress_notification": "നിങ്ങളുടെ അസറ്റുകൾ ബാക്കപ്പ് ചെയ്യുന്നു…", + "backup_background_service_upload_failure_notification": "{filename} അപ്‌ലോഡ് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "backup_controller_page_albums": "ബാക്കപ്പ് ആൽബങ്ങൾ", + "backup_controller_page_background_app_refresh_disabled_content": "പശ്ചാത്തല ബാക്കപ്പ് ഉപയോഗിക്കുന്നതിന്, ക്രമീകരണങ്ങൾ > പൊതുവായത് > പശ്ചാത്തല ആപ്പ് റിഫ്രഷ് എന്നതിൽ പശ്ചാത്തല ആപ്പ് റിഫ്രഷ് പ്രവർത്തനക്ഷമമാക്കുക.", + "backup_controller_page_background_app_refresh_disabled_title": "പശ്ചാത്തല ആപ്പ് റിഫ്രഷ് പ്രവർത്തനരഹിതമാക്കി", + "backup_controller_page_background_app_refresh_enable_button_text": "ക്രമീകരണങ്ങളിലേക്ക് പോകുക", + "backup_controller_page_background_battery_info_link": "എങ്ങനെയെന്ന് കാണിക്കുക", + "backup_controller_page_background_battery_info_message": "മികച്ച പശ്ചാത്തല ബാക്കപ്പ് അനുഭവത്തിനായി, Immich-ന്റെ പശ്ചാത്തല പ്രവർത്തനം നിയന്ത്രിക്കുന്ന ഏതെങ്കിലും ബാറ്ററി ഒപ്റ്റിമൈസേഷനുകൾ പ്രവർത്തനരഹിതമാക്കുക.\n\nഇത് ഉപകരണത്തെ ആശ്രയിച്ചിരിക്കുന്നതിനാൽ, നിങ്ങളുടെ ഉപകരണ നിർമ്മാതാവിനുള്ള ആവശ്യമായ വിവരങ്ങൾ ദയവായി കണ്ടെത്തുക.", + "backup_controller_page_background_battery_info_ok": "ശരി", + "backup_controller_page_background_battery_info_title": "ബാറ്ററി ഒപ്റ്റിമൈസേഷനുകൾ", + "backup_controller_page_background_charging": "ചാർജ് ചെയ്യുമ്പോൾ മാത്രം", + "backup_controller_page_background_configure_error": "പശ്ചാത്തല സേവനം കോൺഫിഗർ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "backup_controller_page_background_delay": "പുതിയ അസറ്റുകളുടെ ബാക്കപ്പ് വൈകിപ്പിക്കുക: {duration}", + "backup_controller_page_background_description": "ആപ്പ് തുറക്കാതെ തന്നെ പുതിയ അസറ്റുകൾ യാന്ത്രികമായി ബാക്കപ്പ് ചെയ്യാൻ പശ്ചാത്തല സേവനം ഓണാക്കുക", + "backup_controller_page_background_is_off": "യാന്ത്രിക പശ്ചാത്തല ബാക്കപ്പ് ഓഫാണ്", + "backup_controller_page_background_is_on": "യാന്ത്രിക പശ്ചാത്തല ബാക്കപ്പ് ഓണാണ്", + "backup_controller_page_background_turn_off": "പശ്ചാത്തല സേവനം ഓഫാക്കുക", + "backup_controller_page_background_turn_on": "പശ്ചാത്തല സേവനം ഓണാക്കുക", + "backup_controller_page_background_wifi": "വൈ-ഫൈയിൽ മാത്രം", + "backup_controller_page_backup": "ബാക്കപ്പ്", + "backup_controller_page_backup_selected": "തിരഞ്ഞെടുത്തവ: ", + "backup_controller_page_backup_sub": "ബാക്കപ്പ് ചെയ്ത ഫോട്ടോകളും വീഡിയോകളും", + "backup_controller_page_created": "സൃഷ്ടിച്ചത്: {date}", + "backup_controller_page_desc_backup": "ആപ്പ് തുറക്കുമ്പോൾ പുതിയ അസറ്റുകൾ യാന്ത്രികമായി സെർവറിലേക്ക് അപ്‌ലോഡ് ചെയ്യാൻ ഫോർഗ്രൗണ്ട് ബാക്കപ്പ് ഓണാക്കുക.", + "backup_controller_page_excluded": "ഒഴിവാക്കിയവ: ", + "backup_controller_page_failed": "പരാജയപ്പെട്ടു ({count})", + "backup_controller_page_filename": "ഫയലിന്റെ പേര്: {filename}[{size}]", + "backup_controller_page_id": "ഐഡി: {id}", + "backup_controller_page_info": "ബാക്കപ്പ് വിവരങ്ങൾ", + "backup_controller_page_none_selected": "ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല", + "backup_controller_page_remainder": "ശേഷിക്കുന്നത്", + "backup_controller_page_remainder_sub": "തിരഞ്ഞെടുത്തവയിൽ നിന്ന് ബാക്കപ്പ് ചെയ്യാനുള്ള ശേഷിക്കുന്ന ഫോട്ടോകളും വീഡിയോകളും", + "backup_controller_page_server_storage": "സെർവർ സ്റ്റോറേജ്", + "backup_controller_page_start_backup": "ബാക്കപ്പ് ആരംഭിക്കുക", + "backup_controller_page_status_off": "യാന്ത്രിക ഫോർഗ്രൗണ്ട് ബാക്കപ്പ് ഓഫാണ്", + "backup_controller_page_status_on": "യാന്ത്രിക ഫോർഗ്രൗണ്ട് ബാക്കപ്പ് ഓണാണ്", + "backup_controller_page_storage_format": "{total}-ൽ {used} ഉപയോഗിച്ചു", + "backup_controller_page_to_backup": "ബാക്കപ്പ് ചെയ്യേണ്ട ആൽബങ്ങൾ", + "backup_controller_page_total_sub": "തിരഞ്ഞെടുത്ത ആൽബങ്ങളിൽ നിന്നുള്ള എല്ലാ സവിശേഷമായ ഫോട്ടോകളും വീഡിയോകളും", + "backup_controller_page_turn_off": "ഫോർഗ്രൗണ്ട് ബാക്കപ്പ് ഓഫാക്കുക", + "backup_controller_page_turn_on": "ഫോർഗ്രൗണ്ട് ബാക്കപ്പ് ഓണാക്കുക", + "backup_controller_page_uploading_file_info": "ഫയൽ വിവരങ്ങൾ അപ്‌ലോഡ് ചെയ്യുന്നു", + "backup_err_only_album": "ഒരേയൊരു ആൽബം നീക്കം ചെയ്യാൻ കഴിയില്ല", + "backup_error_sync_failed": "സിങ്ക് പരാജയപ്പെട്ടു. ബാക്കപ്പ് പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല.", + "backup_info_card_assets": "അസറ്റുകൾ", + "backup_manual_cancelled": "റദ്ദാക്കി", + "backup_manual_in_progress": "അപ്‌ലോഡ് ഇതിനകം പുരോഗമിക്കുന്നു. കുറച്ച് സമയത്തിന് ശേഷം ശ്രമിക്കുക", + "backup_manual_success": "വിജയം", + "backup_manual_title": "അപ്‌ലോഡ് നില", + "backup_options": "ബാക്കപ്പ് ഓപ്ഷനുകൾ", + "backup_options_page_title": "ബാക്കപ്പ് ഓപ്ഷനുകൾ", + "backup_setting_subtitle": "പശ്ചാത്തല, മുൻനിര അപ്‌ലോഡ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "backup_settings_subtitle": "അപ്‌ലോഡ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "backward": "പിന്നോട്ട്", + "biometric_auth_enabled": "ബയോമെട്രിക് പ്രാമാണീകരണം പ്രവർത്തനക്ഷമമാക്കി", + "biometric_locked_out": "ബയോമെട്രിക് പ്രാമാണീകരണത്തിൽ നിന്ന് നിങ്ങളെ ലോക്ക് ഔട്ട് ചെയ്തിരിക്കുന്നു", + "biometric_no_options": "ബയോമെട്രിക് ഓപ്ഷനുകളൊന്നും ലഭ്യമല്ല", + "biometric_not_available": "ഈ ഉപകരണത്തിൽ ബയോമെട്രിക് പ്രാമാണീകരണം ലഭ്യമല്ല", + "birthdate_saved": "ജനനത്തീയതി വിജയകരമായി സേവ് ചെയ്തു", + "birthdate_set_description": "ഒരു ഫോട്ടോ എടുക്കുമ്പോഴുള്ള ഈ വ്യക്തിയുടെ പ്രായം കണക്കാക്കാൻ ജനനത്തീയതി ഉപയോഗിക്കുന്നു.", + "blurred_background": "മങ്ങിയ പശ്ചാത്തലം", + "bugs_and_feature_requests": "ബഗുകളും ഫീച്ചർ അഭ്യർത്ഥനകളും", + "build": "ബിൽഡ്", + "build_image": "ഇമേജ് നിർമ്മിക്കുക", + "bulk_delete_duplicates_confirmation": "നിങ്ങൾക്ക് {count, plural, one {# ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റ്} other {# ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റുകൾ}} ബൾക്കായി ഇല്ലാതാക്കണമെന്ന് ഉറപ്പാണോ? ഇത് ഓരോ ഗ്രൂപ്പിലെയും ഏറ്റവും വലിയ അസറ്റ് നിലനിർത്തുകയും മറ്റ് എല്ലാ ഡ്യൂപ്ലിക്കേറ്റുകളും ശാശ്വതമായി ഇല്ലാതാക്കുകയും ചെയ്യും. ഈ പ്രവർത്തനം പഴയപടിയാക്കാൻ കഴിയില്ല!", + "bulk_keep_duplicates_confirmation": "നിങ്ങൾക്ക് {count, plural, one {# ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റ്} other {# ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റുകൾ}} നിലനിർത്തണമെന്ന് ഉറപ്പാണോ? ഇത് ഒന്നും ഇല്ലാതാക്കാതെ എല്ലാ ഡ്യൂപ്ലിക്കേറ്റ് ഗ്രൂപ്പുകളെയും പരിഹരിക്കും.", + "bulk_trash_duplicates_confirmation": "നിങ്ങൾക്ക് {count, plural, one {# ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റ്} other {# ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റുകൾ}} ബൾക്കായി ട്രാഷ് ചെയ്യണമെന്ന് ഉറപ്പാണോ? ഇത് ഓരോ ഗ്രൂപ്പിലെയും ഏറ്റവും വലിയ അസറ്റ് നിലനിർത്തുകയും മറ്റ് എല്ലാ ഡ്യൂപ്ലിക്കേറ്റുകളും ട്രാഷ് ചെയ്യുകയും ചെയ്യും.", + "buy": "Immich വാങ്ങുക", + "cache_settings_clear_cache_button": "കാഷെ ക്ലിയർ ചെയ്യുക", + "cache_settings_clear_cache_button_title": "ആപ്പിന്റെ കാഷെ ക്ലിയർ ചെയ്യുന്നു. കാഷെ പുനർനിർമ്മിക്കുന്നതുവരെ ഇത് ആപ്പിന്റെ പ്രകടനത്തെ സാരമായി ബാധിക്കും.", + "cache_settings_duplicated_assets_clear_button": "ക്ലിയർ ചെയ്യുക", + "cache_settings_duplicated_assets_subtitle": "ആപ്പ് അവഗണിച്ച ഫോട്ടോകളും വീഡിയോകളും", + "cache_settings_duplicated_assets_title": "ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റുകൾ ({count})", + "cache_settings_statistics_album": "ലൈബ്രറി തംബ്നെയിലുകൾ", + "cache_settings_statistics_full": "പൂർണ്ണ ചിത്രങ്ങൾ", + "cache_settings_statistics_shared": "പങ്കിട്ട ആൽബം തംബ്നെയിലുകൾ", + "cache_settings_statistics_thumbnail": "തംബ്നെയിലുകൾ", + "cache_settings_statistics_title": "കാഷെ ഉപയോഗം", + "cache_settings_subtitle": "Immich മൊബൈൽ ആപ്ലിക്കേഷന്റെ കാഷിംഗ് സ്വഭാവം നിയന്ത്രിക്കുക", + "cache_settings_tile_subtitle": "പ്രാദേശിക സ്റ്റോറേജ് സ്വഭാവം നിയന്ത്രിക്കുക", + "cache_settings_tile_title": "പ്രാദേശിക സ്റ്റോറേജ്", + "cache_settings_title": "കാഷിംഗ് ക്രമീകരണങ്ങൾ", + "camera": "ക്യാമറ", + "camera_brand": "ക്യാമറ ബ്രാൻഡ്", + "camera_model": "ക്യാമറ മോഡൽ", + "cancel": "റദ്ദാക്കുക", + "cancel_search": "തിരയൽ റദ്ദാക്കുക", + "canceled": "റദ്ദാക്കി", + "canceling": "റദ്ദാക്കുന്നു", + "cannot_merge_people": "ആളുകളെ ലയിപ്പിക്കാൻ കഴിയില്ല", + "cannot_undo_this_action": "നിങ്ങൾക്ക് ഈ പ്രവർത്തനം പഴയപടിയാക്കാൻ കഴിയില്ല!", + "cannot_update_the_description": "വിവരണം അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല", + "cast": "കാസ്റ്റ്", + "cast_description": "ലഭ്യമായ കാസ്റ്റ് ഡെസ്റ്റിനേഷനുകൾ കോൺഫിഗർ ചെയ്യുക", + "change_date": "തീയതി മാറ്റുക", + "change_description": "വിവരണം മാറ്റുക", + "change_display_order": "പ്രദർശന ക്രമം മാറ്റുക", + "change_expiration_time": "കാലഹരണപ്പെടുന്ന സമയം മാറ്റുക", + "change_location": "സ്ഥാനം മാറ്റുക", + "change_name": "പേര് മാറ്റുക", + "change_name_successfully": "പേര് വിജയകരമായി മാറ്റി", + "change_password": "പാസ്‌വേഡ് മാറ്റുക", + "change_password_description": "ഇത് നിങ്ങൾ ആദ്യമായി സിസ്റ്റത്തിൽ സൈൻ ഇൻ ചെയ്യുന്നതുകൊണ്ടോ അല്ലെങ്കിൽ നിങ്ങളുടെ പാസ്‌വേഡ് മാറ്റാൻ ഒരു അഭ്യർത്ഥന നടത്തിയതുകൊണ്ടോ ആകാം. ദയവായി താഴെ പുതിയ പാസ്‌വേഡ് നൽകുക.", + "change_password_form_confirm_password": "പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക", + "change_password_form_description": "നമസ്കാരം {name},\n\nഇത് നിങ്ങൾ ആദ്യമായി സിസ്റ്റത്തിൽ സൈൻ ഇൻ ചെയ്യുന്നതുകൊണ്ടോ അല്ലെങ്കിൽ നിങ്ങളുടെ പാസ്‌വേഡ് മാറ്റാൻ ഒരു അഭ്യർത്ഥന നടത്തിയതുകൊണ്ടോ ആകാം. ദയവായി താഴെ പുതിയ പാസ്‌വേഡ് നൽകുക.", + "change_password_form_new_password": "പുതിയ പാസ്‌വേഡ്", + "change_password_form_password_mismatch": "പാസ്‌വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല", + "change_password_form_reenter_new_password": "പുതിയ പാസ്‌വേഡ് വീണ്ടും നൽകുക", + "change_pin_code": "പിൻ കോഡ് മാറ്റുക", + "change_your_password": "നിങ്ങളുടെ പാസ്‌വേഡ് മാറ്റുക", + "changed_visibility_successfully": "ദൃശ്യത വിജയകരമായി മാറ്റി", + "charging": "ചാർജ്ജ് ചെയ്യുന്നു", + "charging_requirement_mobile_backup": "പശ്ചാത്തല ബാക്കപ്പിന് ഉപകരണം ചാർജ് ചെയ്യേണ്ടതുണ്ട്", + "check_corrupt_asset_backup": "കേടായ അസറ്റ് ബാക്കപ്പുകൾ പരിശോധിക്കുക", + "check_corrupt_asset_backup_button": "പരിശോധന നടത്തുക", + "check_corrupt_asset_backup_description": "എല്ലാ അസറ്റുകളും ബാക്കപ്പ് ചെയ്ത ശേഷം, വൈ-ഫൈയിൽ മാത്രം ഈ പരിശോധന നടത്തുക. നടപടിക്രമത്തിന് കുറച്ച് മിനിറ്റുകൾ എടുത്തേക്കാം.", + "check_logs": "ലോഗുകൾ പരിശോധിക്കുക", + "choose_matching_people_to_merge": "ലയിപ്പിക്കാൻ പൊരുത്തപ്പെടുന്ന ആളുകളെ തിരഞ്ഞെടുക്കുക", + "city": "നഗരം", + "clear": "ക്ലിയർ ചെയ്യുക", + "clear_all": "എല്ലാം ക്ലിയർ ചെയ്യുക", + "clear_all_recent_searches": "അടുത്തിടെ നടത്തിയ എല്ലാ തിരയലുകളും ക്ലിയർ ചെയ്യുക", + "clear_file_cache": "ഫയൽ കാഷെ ക്ലിയർ ചെയ്യുക", + "clear_message": "സന്ദേശം ക്ലിയർ ചെയ്യുക", + "clear_value": "മൂല്യം ക്ലിയർ ചെയ്യുക", + "client_cert_dialog_msg_confirm": "ശരി", + "client_cert_enter_password": "പാസ്‌വേഡ് നൽകുക", + "client_cert_import": "ഇമ്പോർട്ട് ചെയ്യുക", + "client_cert_import_success_msg": "ക്ലയിന്റ് സർട്ടിഫിക്കറ്റ് ഇമ്പോർട്ടുചെയ്‌തു", + "client_cert_invalid_msg": "അസാധുവായ സർട്ടിഫിക്കറ്റ് ഫയൽ അല്ലെങ്കിൽ തെറ്റായ പാസ്‌വേഡ്", + "client_cert_remove_msg": "ക്ലയിന്റ് സർട്ടിഫിക്കറ്റ് നീക്കംചെയ്‌തു", + "client_cert_subtitle": "PKCS12 (.p12, .pfx) ഫോർമാറ്റ് മാത്രം പിന്തുണയ്ക്കുന്നു. ലോഗിൻ ചെയ്യുന്നതിന് മുമ്പ് മാത്രമേ സർട്ടിഫിക്കറ്റ് ഇമ്പോർട്ട്/നീക്കംചെയ്യൽ ലഭ്യമാകൂ", + "client_cert_title": "SSL ക്ലയിന്റ് സർട്ടിഫിക്കറ്റ്", + "clockwise": "പ്രദക്ഷിണമായി", + "close": "അടയ്ക്കുക", + "collapse": "ചുരുക്കുക", + "collapse_all": "എല്ലാം ചുരുക്കുക", + "color": "നിറം", + "color_theme": "കളർ തീം", + "comment_deleted": "അഭിപ്രായം ഇല്ലാതാക്കി", + "comment_options": "അഭിപ്രായത്തിനുള്ള ഓപ്ഷനുകൾ", + "comments_and_likes": "അഭിപ്രായങ്ങളും ലൈക്കുകളും", + "comments_are_disabled": "അഭിപ്രായങ്ങൾ പ്രവർത്തനരഹിതമാക്കി", + "common_create_new_album": "പുതിയ ആൽബം ഉണ്ടാക്കുക", + "common_server_error": "നിങ്ങളുടെ നെറ്റ്‌വർക്ക് കണക്ഷൻ പരിശോധിക്കുക, സെർവർ ലഭ്യമാണെന്നും ആപ്പ്/സെർവർ പതിപ്പുകൾ അനുയോജ്യമാണെന്നും ഉറപ്പാക്കുക.", + "completed": "പൂർത്തിയായി", + "confirm": "സ്ഥിരീകരിക്കുക", + "confirm_admin_password": "അഡ്മിൻ പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക", + "confirm_delete_face": "{name} എന്ന മുഖം അസറ്റിൽ നിന്ന് ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "confirm_delete_shared_link": "ഈ പങ്കിട്ട ലിങ്ക് ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "confirm_keep_this_delete_others": "ഈ അസറ്റ് ഒഴികെ സ്റ്റാക്കിലെ മറ്റെല്ലാ അസറ്റുകളും ഇല്ലാതാക്കപ്പെടും. തുടരണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "confirm_new_pin_code": "പുതിയ പിൻ കോഡ് സ്ഥിരീകരിക്കുക", + "confirm_password": "പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക", + "confirm_tag_face": "ഈ മുഖം {name} എന്ന് ടാഗ് ചെയ്യണോ?", + "confirm_tag_face_unnamed": "ഈ മുഖം ടാഗ് ചെയ്യണോ?", + "connected_device": "ബന്ധിപ്പിച്ച ഉപകരണം", + "connected_to": "ഇതുമായി ബന്ധിപ്പിച്ചു", + "contain": "ഉൾക്കൊള്ളുക", + "context": "സന്ദർഭം", + "continue": "തുടരുക", + "control_bottom_app_bar_create_new_album": "പുതിയ ആൽബം ഉണ്ടാക്കുക", + "control_bottom_app_bar_delete_from_immich": "Immich-ൽ നിന്ന് ഇല്ലാതാക്കുക", + "control_bottom_app_bar_delete_from_local": "ഉപകരണത്തിൽ നിന്ന് ഇല്ലാതാക്കുക", + "control_bottom_app_bar_edit_location": "സ്ഥാനം എഡിറ്റുചെയ്യുക", + "control_bottom_app_bar_edit_time": "തീയതിയും സമയവും എഡിറ്റുചെയ്യുക", + "control_bottom_app_bar_share_link": "ലിങ്ക് പങ്കിടുക", + "control_bottom_app_bar_share_to": "ഇതിലേക്ക് പങ്കിടുക", + "control_bottom_app_bar_trash_from_immich": "ട്രാഷിലേക്ക് മാറ്റുക", + "copied_image_to_clipboard": "ചിത്രം ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി.", + "copied_to_clipboard": "ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി!", + "copy_error": "പകർത്തുന്നതിൽ പിശക്", + "copy_file_path": "ഫയൽ പാത്ത് പകർത്തുക", + "copy_image": "ചിത്രം പകർത്തുക", + "copy_link": "ലിങ്ക് പകർത്തുക", + "copy_link_to_clipboard": "ലിങ്ക് ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക", + "copy_password": "പാസ്‌വേഡ് പകർത്തുക", + "copy_to_clipboard": "ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക", + "country": "രാജ്യം", + "cover": "കവർ", + "covers": "കവറുകൾ", + "create": "സൃഷ്ടിക്കുക", + "create_album": "ആൽബം ഉണ്ടാക്കുക", + "create_album_page_untitled": "പേരില്ലാത്തത്", + "create_library": "ലൈബ്രറി ഉണ്ടാക്കുക", + "create_link": "ലിങ്ക് ഉണ്ടാക്കുക", + "create_link_to_share": "പങ്കിടാൻ ലിങ്ക് ഉണ്ടാക്കുക", + "create_link_to_share_description": "തിരഞ്ഞെടുത്ത ഫോട്ടോ(കൾ) കാണാൻ ലിങ്കുള്ള ആർക്കും അനുവാദം നൽകുക", + "create_new": "പുതിയത് ഉണ്ടാക്കുക", + "create_new_person": "പുതിയ വ്യക്തിയെ ഉണ്ടാക്കുക", + "create_new_person_hint": "തിരഞ്ഞെടുത്ത അസറ്റുകൾ ഒരു പുതിയ വ്യക്തിക്ക് നൽകുക", + "create_new_user": "പുതിയ ഉപയോക്താവിനെ ഉണ്ടാക്കുക", + "create_shared_album_page_share_add_assets": "അസറ്റുകൾ ചേർക്കുക", + "create_shared_album_page_share_select_photos": "ഫോട്ടോകൾ തിരഞ്ഞെടുക്കുക", + "create_shared_link": "പങ്കിട്ട ലിങ്ക് ഉണ്ടാക്കുക", + "create_tag": "ടാഗ് ഉണ്ടാക്കുക", + "create_tag_description": "ഒരു പുതിയ ടാഗ് ഉണ്ടാക്കുക. നെസ്റ്റഡ് ടാഗുകൾക്കായി, ഫോർവേഡ് സ്ലാഷുകൾ ഉൾപ്പെടെ ടാഗിന്റെ പൂർണ്ണ പാത നൽകുക.", + "create_user": "ഉപയോക്താവിനെ ഉണ്ടാക്കുക", + "created": "സൃഷ്ടിച്ചത്", + "created_at": "സൃഷ്ടിച്ചത്", + "creating_linked_albums": "ബന്ധിപ്പിച്ച ആൽബങ്ങൾ ഉണ്ടാക്കുന്നു...", + "crop": "ക്രോപ്പ് ചെയ്യുക", + "curated_object_page_title": "വസ്തുക്കൾ", + "current_device": "നിലവിലെ ഉപകരണം", + "current_pin_code": "നിലവിലെ പിൻ കോഡ്", + "current_server_address": "നിലവിലെ സെർവർ വിലാസം", + "custom_locale": "കസ്റ്റം ലൊക്കേൽ", + "custom_locale_description": "ഭാഷയെയും പ്രദേശത്തെയും അടിസ്ഥാനമാക്കി തീയതികളും അക്കങ്ങളും ഫോർമാറ്റ് ചെയ്യുക", + "custom_url": "കസ്റ്റം URL", + "daily_title_text_date": "E, MMM dd", + "daily_title_text_date_year": "E, MMM dd, yyyy", + "dark": "ഇരുണ്ടത്", + "dark_theme": "ഡാർക്ക് തീം ടോഗിൾ ചെയ്യുക", + "date_after": "ഇതിനു ശേഷമുള്ള തീയതി", + "date_and_time": "തീയതിയും സമയവും", + "date_before": "ഇതിനു മുമ്പുള്ള തീയതി", + "date_format": "E, LLL d, y • h:mm a", + "date_of_birth_saved": "ജനനത്തീയതി വിജയകരമായി സേവ് ചെയ്തു", + "date_range": "തീയതി പരിധി", + "day": "ദിവസം", + "days": "ദിവസങ്ങൾ", + "deduplicate_all": "എല്ലാ ഡ്യൂപ്ലിക്കേറ്റുകളും ഒഴിവാക്കുക", + "deduplication_criteria_1": "ചിത്രത്തിന്റെ വലുപ്പം (ബൈറ്റുകളിൽ)", + "deduplication_criteria_2": "EXIF ഡാറ്റയുടെ എണ്ണം", + "deduplication_info": "ഡ്യൂപ്ലിക്കേഷൻ ഒഴിവാക്കൽ വിവരം", + "deduplication_info_description": "അസറ്റുകൾ യാന്ത്രികമായി മുൻകൂട്ടി തിരഞ്ഞെടുക്കുന്നതിനും ഡ്യൂപ്ലിക്കേറ്റുകൾ ബൾക്കായി നീക്കം ചെയ്യുന്നതിനും, ഞങ്ങൾ ഇവ പരിഗണിക്കുന്നു:", + "default_locale": "ഡിഫോൾട്ട് ലൊക്കേൽ", + "default_locale_description": "നിങ്ങളുടെ ബ്രൗസർ ലൊക്കേലിനെ അടിസ്ഥാനമാക്കി തീയതികളും അക്കങ്ങളും ഫോർമാറ്റ് ചെയ്യുക", + "delete": "ഇല്ലാതാക്കുക", + "delete_action_confirmation_message": "ഈ അസറ്റ് ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഈ പ്രവർത്തനം അസറ്റിനെ സെർവറിന്റെ ട്രാഷിലേക്ക് മാറ്റും, കൂടാതെ ഇത് പ്രാദേശികമായി ഇല്ലാതാക്കണോ എന്ന് ചോദിക്കുകയും ചെയ്യും", + "delete_action_prompt": "{count} എണ്ണം ഇല്ലാതാക്കി", + "delete_album": "ആൽബം ഇല്ലാതാക്കുക", + "delete_api_key_prompt": "ഈ API കീ ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "delete_dialog_alert": "ഈ ഇനങ്ങൾ Immich-ൽ നിന്നും നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്നും ശാശ്വതമായി ഇല്ലാതാക്കപ്പെടും", + "delete_dialog_alert_local": "ഈ ഇനങ്ങൾ നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് ശാശ്വതമായി നീക്കം ചെയ്യപ്പെടും, പക്ഷേ Immich സെർവറിൽ തുടർന്നും ലഭ്യമാകും", + "delete_dialog_alert_local_non_backed_up": "ചില ഇനങ്ങൾ Immich-ലേക്ക് ബാക്കപ്പ് ചെയ്തിട്ടില്ല, അവ നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് ശാശ്വതമായി നീക്കം ചെയ്യപ്പെടും", + "delete_dialog_alert_remote": "ഈ ഇനങ്ങൾ Immich സെർവറിൽ നിന്ന് ശാശ്വതമായി ഇല്ലാതാക്കപ്പെടും", + "delete_dialog_ok_force": "എന്തായാലും ഇല്ലാതാക്കുക", + "delete_dialog_title": "ശാശ്വതമായി ഇല്ലാതാക്കുക", + "delete_duplicates_confirmation": "ഈ ഡ്യൂപ്ലിക്കേറ്റുകൾ ശാശ്വതമായി ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "delete_face": "മുഖം ഇല്ലാതാക്കുക", + "delete_key": "കീ ഇല്ലാതാക്കുക", + "delete_library": "ലൈബ്രറി ഇല്ലാതാക്കുക", + "delete_link": "ലിങ്ക് ഇല്ലാതാക്കുക", + "delete_local_action_prompt": "{count} എണ്ണം പ്രാദേശികമായി ഇല്ലാതാക്കി", + "delete_local_dialog_ok_backed_up_only": "ബാക്കപ്പ് ചെയ്തവ മാത്രം ഇല്ലാതാക്കുക", + "delete_local_dialog_ok_force": "എന്തായാലും ഇല്ലാതാക്കുക", + "delete_others": "മറ്റുള്ളവ ഇല്ലാതാക്കുക", + "delete_permanently": "ശാശ്വതമായി ഇല്ലാതാക്കുക", + "delete_permanently_action_prompt": "{count} എണ്ണം ശാശ്വതമായി ഇല്ലാതാക്കി", + "delete_shared_link": "പങ്കിട്ട ലിങ്ക് ഇല്ലാതാക്കുക", + "delete_shared_link_dialog_title": "പങ്കിട്ട ലിങ്ക് ഇല്ലാതാക്കുക", + "delete_tag": "ടാഗ് ഇല്ലാതാക്കുക", + "delete_tag_confirmation_prompt": "{tagName} എന്ന ടാഗ് ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "delete_user": "ഉപയോക്താവിനെ ഇല്ലാതാക്കുക", + "deleted_shared_link": "പങ്കിട്ട ലിങ്ക് ഇല്ലാതാക്കി", + "deletes_missing_assets": "ഡിസ്കിൽ നിന്ന് കാണാതായ അസറ്റുകൾ ഇല്ലാതാക്കുന്നു", + "description": "വിവരണം", + "description_input_hint_text": "വിവരണം ചേർക്കുക...", + "description_input_submit_error": "വിവരണം അപ്ഡേറ്റ് ചെയ്യുന്നതിൽ പിശക്, കൂടുതൽ വിവരങ്ങൾക്ക് ലോഗ് പരിശോധിക്കുക", + "deselect_all": "എല്ലാം തിരഞ്ഞെടുത്തത് മാറ്റുക", + "details": "വിശദാംശങ്ങൾ", + "direction": "ദിശ", + "disabled": "പ്രവർത്തനരഹിതം", + "disallow_edits": "എഡിറ്റുകൾ അനുവദിക്കരുത്", + "discord": "ഡിസ്കോർഡ്", + "discover": "കണ്ടെത്തുക", + "discovered_devices": "കണ്ടെത്തിയ ഉപകരണങ്ങൾ", + "dismiss_all_errors": "എല്ലാ പിശകുകളും തള്ളിക്കളയുക", + "dismiss_error": "പിശക് തള്ളിക്കളയുക", + "display_options": "പ്രദർശന ഓപ്ഷനുകൾ", + "display_order": "പ്രദർശന ക്രമം", + "display_original_photos": "യഥാർത്ഥ ഫോട്ടോകൾ പ്രദർശിപ്പിക്കുക", + "display_original_photos_setting_description": "യഥാർത്ഥ അസറ്റ് വെബ്-അനുയോജ്യമാകുമ്പോൾ, തംബ്നെയിലുകൾക്ക് പകരം യഥാർത്ഥ ഫോട്ടോ പ്രദർശിപ്പിക്കാൻ മുൻഗണന നൽകുക. ഇത് ഫോട്ടോ പ്രദർശന വേഗത കുറയ്ക്കാൻ ഇടയാക്കും.", + "do_not_show_again": "ഈ സന്ദേശം വീണ്ടും കാണിക്കരുത്", + "documentation": "ഡോക്യുമെന്റേഷൻ", + "done": "പൂർത്തിയായി", + "download": "ഡൗൺലോഡ്", + "download_action_prompt": "{count} അസറ്റുകൾ ഡൗൺലോഡ് ചെയ്യുന്നു", + "download_canceled": "ഡൗൺലോഡ് റദ്ദാക്കി", + "download_complete": "ഡൗൺലോഡ് പൂർത്തിയായി", + "download_enqueue": "ഡൗൺലോഡ് ക്യൂവിൽ ചേർത്തു", + "download_error": "ഡൗൺലോഡ് പിശക്", + "download_failed": "ഡൗൺലോഡ് പരാജയപ്പെട്ടു", + "download_finished": "ഡൗൺലോഡ് കഴിഞ്ഞു", + "download_include_embedded_motion_videos": "ഉൾച്ചേർത്ത വീഡിയോകൾ", + "download_include_embedded_motion_videos_description": "ചലിക്കുന്ന ഫോട്ടോകളിൽ ഉൾച്ചേർത്ത വീഡിയോകൾ ഒരു പ്രത്യേക ഫയലായി ഉൾപ്പെടുത്തുക", + "download_notfound": "ഡൗൺലോഡ് കണ്ടെത്തിയില്ല", + "download_paused": "ഡൗൺലോഡ് താൽക്കാലികമായി നിർത്തി", + "download_settings": "ഡൗൺലോഡ് ക്രമീകരണങ്ങൾ", + "download_settings_description": "അസറ്റ് ഡൗൺലോഡുമായി ബന്ധപ്പെട്ട ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "download_started": "ഡൗൺലോഡ് ആരംഭിച്ചു", + "download_sucess": "ഡൗൺലോഡ് വിജയിച്ചു", + "download_sucess_android": "മീഡിയ DCIM/Immich എന്നതിലേക്ക് ഡൗൺലോഡ് ചെയ്തിരിക്കുന്നു", + "download_waiting_to_retry": "വീണ്ടും ശ്രമിക്കാൻ കാത്തിരിക്കുന്നു", + "downloading": "ഡൗൺലോഡ് ചെയ്യുന്നു", + "downloading_asset_filename": "{filename} എന്ന അസറ്റ് ഡൗൺലോഡ് ചെയ്യുന്നു", + "downloading_media": "മീഡിയ ഡൗൺലോഡ് ചെയ്യുന്നു", + "drop_files_to_upload": "അപ്‌ലോഡ് ചെയ്യാൻ ഫയലുകൾ എവിടെയും ഡ്രോപ്പ് ചെയ്യുക", + "duplicates": "ഡ്യൂപ്ലിക്കേറ്റുകൾ", + "duplicates_description": "ഏതാണ് ഡ്യൂപ്ലിക്കേറ്റ് എന്ന് സൂചിപ്പിച്ച് ഓരോ ഗ്രൂപ്പും പരിഹരിക്കുക", + "duration": "ദൈർഘ്യം", + "edit": "തിരുത്തുക", + "edit_album": "ആൽബം എഡിറ്റുചെയ്യുക", + "edit_avatar": "അവതാർ എഡിറ്റുചെയ്യുക", + "edit_birthday": "ജന്മദിനം എഡിറ്റുചെയ്യുക", + "edit_date": "തീയതി എഡിറ്റുചെയ്യുക", + "edit_date_and_time": "തീയതിയും സമയവും എഡിറ്റുചെയ്യുക", + "edit_date_and_time_action_prompt": "{count} എണ്ണത്തിന്റെ തീയതിയും സമയവും എഡിറ്റുചെയ്തു", + "edit_date_and_time_by_offset": "ഓഫ്സെറ്റ് ഉപയോഗിച്ച് തീയതി മാറ്റുക", + "edit_date_and_time_by_offset_interval": "പുതിയ തീയതി പരിധി: {from}-{to}", + "edit_description": "വിവരണം എഡിറ്റുചെയ്യുക", + "edit_description_prompt": "ദയവായി ഒരു പുതിയ വിവരണം തിരഞ്ഞെടുക്കുക:", + "edit_exclusion_pattern": "ഒഴിവാക്കൽ പാറ്റേൺ എഡിറ്റുചെയ്യുക", + "edit_faces": "മുഖങ്ങൾ എഡിറ്റുചെയ്യുക", + "edit_import_path": "ഇമ്പോർട്ട് പാത്ത് എഡിറ്റുചെയ്യുക", + "edit_import_paths": "ഇമ്പോർട്ട് പാത്തുകൾ എഡിറ്റുചെയ്യുക", + "edit_key": "കീ എഡിറ്റുചെയ്യുക", + "edit_link": "ലിങ്ക് എഡിറ്റുചെയ്യുക", + "edit_location": "സ്ഥാനം എഡിറ്റുചെയ്യുക", + "edit_location_action_prompt": "{count} എണ്ണത്തിന്റെ സ്ഥാനം എഡിറ്റുചെയ്തു", + "edit_location_dialog_title": "സ്ഥാനം", + "edit_name": "പേര് എഡിറ്റുചെയ്യുക", + "edit_people": "ആളുകളെ എഡിറ്റുചെയ്യുക", + "edit_tag": "ടാഗ് എഡിറ്റുചെയ്യുക", + "edit_title": "ശീർഷകം എഡിറ്റുചെയ്യുക", + "edit_user": "ഉപയോക്താവിനെ എഡിറ്റുചെയ്യുക", + "edited": "എഡിറ്റുചെയ്തു", + "editor": "എഡിറ്റർ", + "editor_close_without_save_prompt": "മാറ്റങ്ങൾ സേവ് ചെയ്യില്ല", + "editor_close_without_save_title": "എഡിറ്റർ അടയ്ക്കണോ?", + "editor_crop_tool_h2_aspect_ratios": "വീക്ഷണാനുപാതം", + "editor_crop_tool_h2_rotation": "റൊട്ടേഷൻ", + "email": "ഇമെയിൽ", + "email_notifications": "ഇമെയിൽ അറിയിപ്പുകൾ", + "empty_folder": "ഈ ഫോൾഡർ ശൂന്യമാണ്", + "empty_trash": "ട്രാഷ് ശൂന്യമാക്കുക", + "empty_trash_confirmation": "ട്രാഷ് ശൂന്യമാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഇത് ട്രാഷിലെ എല്ലാ അസറ്റുകളും Immich-ൽ നിന്ന് ശാശ്വതമായി നീക്കംചെയ്യും.\nനിങ്ങൾക്ക് ഈ പ്രവർത്തനം പഴയപടിയാക്കാൻ കഴിയില്ല!", + "enable": "പ്രവർത്തനക്ഷമമാക്കുക", + "enable_backup": "ബാക്കപ്പ് പ്രവർത്തനക്ഷമമാക്കുക", + "enable_biometric_auth_description": "ബയോമെട്രിക് പ്രാമാണീകരണം പ്രവർത്തനക്ഷമമാക്കാൻ നിങ്ങളുടെ പിൻ കോഡ് നൽകുക", + "enabled": "പ്രവർത്തനക്ഷമമാക്കി", + "end_date": "അവസാന തീയതി", + "enqueued": "ക്യൂവിൽ ചേർത്തു", + "enter_wifi_name": "വൈ-ഫൈയുടെ പേര് നൽകുക", + "enter_your_pin_code": "നിങ്ങളുടെ പിൻ കോഡ് നൽകുക", + "enter_your_pin_code_subtitle": "ലോക്ക് ചെയ്ത ഫോൾഡർ ആക്‌സസ് ചെയ്യാൻ നിങ്ങളുടെ പിൻ കോഡ് നൽകുക", + "error": "പിശക്", + "error_change_sort_album": "ആൽബത്തിന്റെ സോർട്ട് ഓർഡർ മാറ്റുന്നതിൽ പരാജയപ്പെട്ടു", + "error_delete_face": "അസറ്റിൽ നിന്ന് മുഖം ഇല്ലാതാക്കുന്നതിൽ പിശക്", + "error_getting_places": "സ്ഥലങ്ങൾ ലഭിക്കുന്നതിൽ പിശക്", + "error_loading_image": "ചിത്രം ലോഡുചെയ്യുന്നതിൽ പിശക്", + "error_loading_partners": "പങ്കാളികളെ ലോഡുചെയ്യുന്നതിൽ പിശക്: {error}", + "error_saving_image": "പിശക്: {error}", + "error_tag_face_bounding_box": "മുഖം ടാഗ് ചെയ്യുന്നതിൽ പിശക് - ബൗണ്ടിംഗ് ബോക്സ് കോർഡിനേറ്റുകൾ ലഭിക്കുന്നില്ല", + "error_title": "പിശക് - എന്തോ കുഴപ്പം സംഭവിച്ചു", + "errors": { + "cannot_navigate_next_asset": "അടുത്ത അസറ്റിലേക്ക് പോകാൻ കഴിയില്ല", + "cannot_navigate_previous_asset": "മുമ്പത്തെ അസറ്റിലേക്ക് പോകാൻ കഴിയില്ല", + "cant_apply_changes": "മാറ്റങ്ങൾ പ്രയോഗിക്കാൻ കഴിയില്ല", + "cant_change_activity": "പ്രവർത്തനം {enabled, select, true {പ്രവർത്തനരഹിതമാക്കാൻ} other {പ്രവർത്തനക്ഷമമാക്കാൻ}} കഴിയില്ല", + "cant_change_asset_favorite": "അസറ്റിന്റെ പ്രിയപ്പെട്ടവ മാറ്റാൻ കഴിയില്ല", + "cant_change_metadata_assets_count": "{count, plural, one {# അസറ്റിന്റെ} other {# അസറ്റുകളുടെ}} മെറ്റാഡാറ്റ മാറ്റാൻ കഴിയില്ല", + "cant_get_faces": "മുഖങ്ങൾ ലഭിക്കുന്നില്ല", + "cant_get_number_of_comments": "അഭിപ്രായങ്ങളുടെ എണ്ണം ലഭിക്കുന്നില്ല", + "cant_search_people": "ആളുകളെ തിരയാൻ കഴിയില്ല", + "cant_search_places": "സ്ഥലങ്ങൾ തിരയാൻ കഴിയില്ല", + "error_adding_assets_to_album": "ആൽബത്തിലേക്ക് അസറ്റുകൾ ചേർക്കുന്നതിൽ പിശക്", + "error_adding_users_to_album": "ആൽബത്തിലേക്ക് ഉപയോക്താക്കളെ ചേർക്കുന്നതിൽ പിശക്", + "error_deleting_shared_user": "പങ്കിട്ട ഉപയോക്താവിനെ ഇല്ലാതാക്കുന്നതിൽ പിശക്", + "error_downloading": "{filename} ഡൗൺലോഡ് ചെയ്യുന്നതിൽ പിശക്", + "error_hiding_buy_button": "വാങ്ങാനുള്ള ബട്ടൺ മറയ്ക്കുന്നതിൽ പിശക്", + "error_removing_assets_from_album": "ആൽബത്തിൽ നിന്ന് അസറ്റുകൾ നീക്കം ചെയ്യുന്നതിൽ പിശക്, കൂടുതൽ വിവരങ്ങൾക്ക് കൺസോൾ പരിശോധിക്കുക", + "error_selecting_all_assets": "എല്ലാ അസറ്റുകളും തിരഞ്ഞെടുക്കുന്നതിൽ പിശക്", + "exclusion_pattern_already_exists": "ഈ ഒഴിവാക്കൽ പാറ്റേൺ ഇതിനകം നിലവിലുണ്ട്.", + "failed_to_create_album": "ആൽബം ഉണ്ടാക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_create_shared_link": "പങ്കിട്ട ലിങ്ക് ഉണ്ടാക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_edit_shared_link": "പങ്കിട്ട ലിങ്ക് എഡിറ്റുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_get_people": "ആളുകളെ ലഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_keep_this_delete_others": "ഈ അസറ്റ് നിലനിർത്തി മറ്റ് അസറ്റുകൾ ഇല്ലാതാക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_load_asset": "അസറ്റ് ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_load_assets": "അസറ്റുകൾ ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_load_notifications": "അറിയിപ്പുകൾ ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_load_people": "ആളുകളെ ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_remove_product_key": "പ്രൊഡക്റ്റ് കീ നീക്കം ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_reset_pin_code": "പിൻ കോഡ് റീസെറ്റ് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_stack_assets": "അസറ്റുകൾ സ്റ്റാക്ക് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_unstack_assets": "അസറ്റുകൾ അൺ-സ്റ്റാക്ക് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_update_notification_status": "അറിയിപ്പിന്റെ നില അപ്ഡേറ്റ് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "import_path_already_exists": "ഈ ഇമ്പോർട്ട് പാത്ത് ഇതിനകം നിലവിലുണ്ട്.", + "incorrect_email_or_password": "തെറ്റായ ഇമെയിൽ അല്ലെങ്കിൽ പാസ്‌വേഡ്", + "paths_validation_failed": "{paths, plural, one {# പാത്ത്} other {# പാത്തുകൾ}} സാധൂകരണത്തിൽ പരാജയപ്പെട്ടു", + "profile_picture_transparent_pixels": "പ്രൊഫൈൽ ചിത്രങ്ങൾക്ക് സുതാര്യമായ പിക്സലുകൾ ഉണ്ടാകരുത്. ദയവായി സൂം ഇൻ ചെയ്യുക കൂടാതെ/അല്ലെങ്കിൽ ചിത്രം നീക്കുക.", + "quota_higher_than_disk_size": "ഡിസ്ക് വലുപ്പത്തേക്കാൾ ഉയർന്ന ക്വാട്ട നിങ്ങൾ സജ്ജമാക്കിയിരിക്കുന്നു", + "something_went_wrong": "എന്തോ കുഴപ്പം സംഭവിച്ചു", + "unable_to_add_album_users": "ആൽബത്തിലേക്ക് ഉപയോക്താക്കളെ ചേർക്കാൻ കഴിയില്ല", + "unable_to_add_assets_to_shared_link": "പങ്കിട്ട ലിങ്കിലേക്ക് അസറ്റുകൾ ചേർക്കാൻ കഴിയില്ല", + "unable_to_add_comment": "അഭിപ്രായം ചേർക്കാൻ കഴിയില്ല", + "unable_to_add_exclusion_pattern": "ഒഴിവാക്കൽ പാറ്റേൺ ചേർക്കാൻ കഴിയില്ല", + "unable_to_add_import_path": "ഇമ്പോർട്ട് പാത്ത് ചേർക്കാൻ കഴിയില്ല", + "unable_to_add_partners": "പങ്കാളികളെ ചേർക്കാൻ കഴിയില്ല", + "unable_to_add_remove_archive": "ആർക്കൈവിൽ {archived, select, true {നിന്ന് അസറ്റ് നീക്കംചെയ്യാൻ} other {ലേക്ക് അസറ്റ് ചേർക്കാൻ}} കഴിയില്ല", + "unable_to_add_remove_favorites": "പ്രിയപ്പെട്ടവയിലേക്ക് {favorite, select, true {അസറ്റ് ചേർക്കാൻ} other {നിന്ന് അസറ്റ് നീക്കംചെയ്യാൻ}} കഴിയില്ല", + "unable_to_archive_unarchive": "{archived, select, true {ആർക്കൈവ് ചെയ്യാൻ} other {അൺആർക്കൈവ് ചെയ്യാൻ}} കഴിയില്ല", + "unable_to_change_album_user_role": "ആൽബം ഉപയോക്താവിന്റെ റോൾ മാറ്റാൻ കഴിയില്ല", + "unable_to_change_date": "തീയതി മാറ്റാൻ കഴിയില്ല", + "unable_to_change_description": "വിവരണം മാറ്റാൻ കഴിയില്ല", + "unable_to_change_favorite": "അസറ്റിന്റെ പ്രിയപ്പെട്ടവ മാറ്റാൻ കഴിയില്ല", + "unable_to_change_location": "സ്ഥാനം മാറ്റാൻ കഴിയില്ല", + "unable_to_change_password": "പാസ്‌വേഡ് മാറ്റാൻ കഴിയില്ല", + "unable_to_change_visibility": "{count, plural, one {# വ്യക്തിയുടെ} other {# ആളുകളുടെ}} ദൃശ്യത മാറ്റാൻ കഴിയില്ല", + "unable_to_complete_oauth_login": "OAuth ലോഗിൻ പൂർത്തിയാക്കാൻ കഴിയില്ല", + "unable_to_connect": "ബന്ധിപ്പിക്കാൻ കഴിയില്ല", + "unable_to_copy_to_clipboard": "ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്താൻ കഴിയില്ല, നിങ്ങൾ https വഴിയാണ് പേജ് ആക്‌സസ് ചെയ്യുന്നതെന്ന് ഉറപ്പാക്കുക", + "unable_to_create_admin_account": "അഡ്മിൻ അക്കൗണ്ട് ഉണ്ടാക്കാൻ കഴിയില്ല", + "unable_to_create_api_key": "പുതിയ API കീ ഉണ്ടാക്കാൻ കഴിയില്ല", + "unable_to_create_library": "ലൈബ്രറി ഉണ്ടാക്കാൻ കഴിയില്ല", + "unable_to_create_user": "ഉപയോക്താവിനെ ഉണ്ടാക്കാൻ കഴിയില്ല", + "unable_to_delete_album": "ആൽബം ഇല്ലാതാക്കാൻ കഴിയില്ല", + "unable_to_delete_asset": "അസറ്റ് ഇല്ലാതാക്കാൻ കഴിയില്ല", + "unable_to_delete_assets": "അസറ്റുകൾ ഇല്ലാതാക്കുന്നതിൽ പിശക്", + "unable_to_delete_exclusion_pattern": "ഒഴിവാക്കൽ പാറ്റേൺ ഇല്ലാതാക്കാൻ കഴിയില്ല", + "unable_to_delete_import_path": "ഇമ്പോർട്ട് പാത്ത് ഇല്ലാതാക്കാൻ കഴിയില്ല", + "unable_to_delete_shared_link": "പങ്കിട്ട ലിങ്ക് ഇല്ലാതാക്കാൻ കഴിയില്ല", + "unable_to_delete_user": "ഉപയോക്താവിനെ ഇല്ലാതാക്കാൻ കഴിയില്ല", + "unable_to_download_files": "ഫയലുകൾ ഡൗൺലോഡ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_edit_exclusion_pattern": "ഒഴിവാക്കൽ പാറ്റേൺ എഡിറ്റുചെയ്യാൻ കഴിയില്ല", + "unable_to_edit_import_path": "ഇമ്പോർട്ട് പാത്ത് എഡിറ്റുചെയ്യാൻ കഴിയില്ല", + "unable_to_empty_trash": "ട്രാഷ് ശൂന്യമാക്കാൻ കഴിയില്ല", + "unable_to_enter_fullscreen": "ഫുൾസ്ക്രീനിൽ പ്രവേശിക്കാൻ കഴിയില്ല", + "unable_to_exit_fullscreen": "ഫുൾസ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കാൻ കഴിയില്ല", + "unable_to_get_comments_number": "അഭിപ്രായങ്ങളുടെ എണ്ണം ലഭിക്കുന്നില്ല", + "unable_to_get_shared_link": "പങ്കിട്ട ലിങ്ക് ലഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "unable_to_hide_person": "വ്യക്തിയെ മറയ്ക്കാൻ കഴിയില്ല", + "unable_to_link_motion_video": "ചലിക്കുന്ന വീഡിയോ ലിങ്ക് ചെയ്യാൻ കഴിയില്ല", + "unable_to_link_oauth_account": "OAuth അക്കൗണ്ട് ലിങ്ക് ചെയ്യാൻ കഴിയില്ല", + "unable_to_log_out_all_devices": "എല്ലാ ഉപകരണങ്ങളിൽ നിന്നും ലോഗ് ഔട്ട് ചെയ്യാൻ കഴിയില്ല", + "unable_to_log_out_device": "ഉപകരണത്തിൽ നിന്ന് ലോഗ് ഔട്ട് ചെയ്യാൻ കഴിയില്ല", + "unable_to_login_with_oauth": "OAuth ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യാൻ കഴിയില്ല", + "unable_to_play_video": "വീഡിയോ പ്ലേ ചെയ്യാൻ കഴിയില്ല", + "unable_to_reassign_assets_existing_person": "{name, select, null {നിലവിലുള്ള ഒരു വ്യക്തിക്ക്} other {{name}-ന്}} അസറ്റുകൾ വീണ്ടും നൽകാൻ കഴിയില്ല", + "unable_to_reassign_assets_new_person": "ഒരു പുതിയ വ്യക്തിക്ക് അസറ്റുകൾ വീണ്ടും നൽകാൻ കഴിയില്ല", + "unable_to_refresh_user": "ഉപയോക്താവിനെ പുതുക്കാൻ കഴിയില്ല", + "unable_to_remove_album_users": "ആൽബത്തിൽ നിന്ന് ഉപയോക്താക്കളെ നീക്കംചെയ്യാൻ കഴിയില്ല", + "unable_to_remove_api_key": "API കീ നീക്കംചെയ്യാൻ കഴിയില്ല", + "unable_to_remove_assets_from_shared_link": "പങ്കിട്ട ലിങ്കിൽ നിന്ന് അസറ്റുകൾ നീക്കംചെയ്യാൻ കഴിയില്ല", + "unable_to_remove_library": "ലൈബ്രറി നീക്കംചെയ്യാൻ കഴിയില്ല", + "unable_to_remove_partner": "പങ്കാളിയെ നീക്കംചെയ്യാൻ കഴിയില്ല", + "unable_to_remove_reaction": "പ്രതികരണം നീക്കംചെയ്യാൻ കഴിയില്ല", + "unable_to_reset_password": "പാസ്‌വേഡ് റീസെറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_reset_pin_code": "പിൻ കോഡ് റീസെറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_resolve_duplicate": "ഡ്യൂപ്ലിക്കേറ്റ് പരിഹരിക്കാൻ കഴിയില്ല", + "unable_to_restore_assets": "അസറ്റുകൾ പുനഃസ്ഥാപിക്കാൻ കഴിയില്ല", + "unable_to_restore_trash": "ട്രാഷ് പുനഃസ്ഥാപിക്കാൻ കഴിയില്ല", + "unable_to_restore_user": "ഉപയോക്താവിനെ പുനഃസ്ഥാപിക്കാൻ കഴിയില്ല", + "unable_to_save_album": "ആൽബം സേവ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_save_api_key": "API കീ സേവ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_save_date_of_birth": "ജനനത്തീയതി സേവ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_save_name": "പേര് സേവ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_save_profile": "പ്രൊഫൈൽ സേവ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_save_settings": "ക്രമീകരണങ്ങൾ സേവ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_scan_libraries": "ലൈബ്രറികൾ സ്കാൻ ചെയ്യാൻ കഴിയില്ല", + "unable_to_scan_library": "ലൈബ്രറി സ്കാൻ ചെയ്യാൻ കഴിയില്ല", + "unable_to_set_feature_photo": "ഫീച്ചർ ഫോട്ടോ സജ്ജമാക്കാൻ കഴിയില്ല", + "unable_to_set_profile_picture": "പ്രൊഫൈൽ ചിത്രം സജ്ജമാക്കാൻ കഴിയില്ല", + "unable_to_submit_job": "ജോലി സമർപ്പിക്കാൻ കഴിയില്ല", + "unable_to_trash_asset": "അസറ്റ് ട്രാഷ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_unlink_account": "അക്കൗണ്ട് അൺലിങ്ക് ചെയ്യാൻ കഴിയില്ല", + "unable_to_unlink_motion_video": "ചലിക്കുന്ന വീഡിയോ അൺലിങ്ക് ചെയ്യാൻ കഴിയില്ല", + "unable_to_update_album_cover": "ആൽബം കവർ അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_update_album_info": "ആൽബം വിവരങ്ങൾ അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_update_library": "ലൈബ്രറി അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_update_location": "സ്ഥാനം അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_update_settings": "ക്രമീകരണങ്ങൾ അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_update_timeline_display_status": "ടൈംലൈൻ പ്രദർശന നില അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_update_user": "ഉപയോക്താവിനെ അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല", + "unable_to_upload_file": "ഫയൽ അപ്‌ലോഡ് ചെയ്യാൻ കഴിയില്ല" + }, + "exif": "Exif", + "exif_bottom_sheet_description": "വിവരണം ചേർക്കുക...", + "exif_bottom_sheet_description_error": "വിവരണം അപ്ഡേറ്റ് ചെയ്യുന്നതിൽ പിശക്", + "exif_bottom_sheet_details": "വിശദാംശങ്ങൾ", + "exif_bottom_sheet_location": "സ്ഥാനം", + "exif_bottom_sheet_people": "ആളുകൾ", + "exif_bottom_sheet_person_add_person": "പേര് ചേർക്കുക", + "exit_slideshow": "സ്ലൈഡ്‌ഷോയിൽ നിന്ന് പുറത്തുകടക്കുക", + "expand_all": "എല്ലാം വികസിപ്പിക്കുക", + "experimental_settings_new_asset_list_subtitle": "പുരോഗതിയിലാണ്", + "experimental_settings_new_asset_list_title": "പരീക്ഷണാടിസ്ഥാനത്തിലുള്ള ഫോട്ടോ ഗ്രിഡ് പ്രവർത്തനക്ഷമമാക്കുക", + "experimental_settings_subtitle": "നിങ്ങളുടെ സ്വന്തം ഉത്തരവാദിത്വത്തിൽ ഉപയോഗിക്കുക!", + "experimental_settings_title": "പരീക്ഷണാടിസ്ഥാനത്തിലുള്ളത്", + "expire_after": "ഇതിന് ശേഷം കാലഹരണപ്പെടും", + "expired": "കാലഹരണപ്പെട്ടു", + "expires_date": "{date}-ന് കാലഹരണപ്പെടും", + "explore": "പര്യവേക്ഷണം ചെയ്യുക", + "explorer": "എക്സ്പ്ലോറർ", + "export": "കയറ്റുമതി ചെയ്യുക", + "export_as_json": "JSON ആയി കയറ്റുമതി ചെയ്യുക", + "export_database": "ഡാറ്റാബേസ് കയറ്റുമതി ചെയ്യുക", + "export_database_description": "SQLite ഡാറ്റാബേസ് കയറ്റുമതി ചെയ്യുക", + "extension": "എക്സ്റ്റൻഷൻ", + "external": "ബാഹ്യം", + "external_libraries": "ബാഹ്യ ലൈബ്രറികൾ", + "external_network": "ബാഹ്യ നെറ്റ്‌വർക്ക്", + "external_network_sheet_info": "തിരഞ്ഞെടുത്ത വൈ-ഫൈ നെറ്റ്‌വർക്കിൽ അല്ലാത്തപ്പോൾ, താഴെ നൽകിയിട്ടുള്ള URL-കളിൽ ആദ്യം ലഭ്യമാകുന്ന ഒന്നിലൂടെ, മുകളിൽ നിന്ന് താഴേക്കുള്ള ക്രമത്തിൽ, ആപ്പ് സെർവറുമായി ബന്ധിപ്പിക്കും", + "face_unassigned": "അസൈൻ ചെയ്തിട്ടില്ല", + "failed": "പരാജയപ്പെട്ടു", + "failed_to_authenticate": "പ്രാമാണീകരിക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_load_assets": "അസറ്റുകൾ ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "failed_to_load_folder": "ഫോൾഡർ ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "favorite": "പ്രിയം", + "favorite_action_prompt": "{count} എണ്ണം പ്രിയപ്പെട്ടവയിലേക്ക് ചേർത്തു", + "favorite_or_unfavorite_photo": "ഫോട്ടോ പ്രിയപ്പെട്ടതാക്കുക അല്ലെങ്കിൽ മാറ്റുക", + "favorites": "പ്രിയങ്ങൾ", + "favorites_page_no_favorites": "പ്രിയപ്പെട്ട അസറ്റുകളൊന്നും കണ്ടെത്തിയില്ല", + "feature_photo_updated": "ഫീച്ചർ ഫോട്ടോ അപ്ഡേറ്റ് ചെയ്തു", + "features": "ഫീച്ചറുകൾ", + "features_in_development": "വികസിപ്പിച്ചുകൊണ്ടിരിക്കുന്ന ഫീച്ചറുകൾ", + "features_setting_description": "ആപ്പ് ഫീച്ചറുകൾ കൈകാര്യം ചെയ്യുക", + "file_name": "ഫയലിന്റെ പേര്", + "file_name_or_extension": "ഫയലിന്റെ പേര് അല്ലെങ്കിൽ എക്സ്റ്റൻഷൻ", + "filename": "ഫയൽനാമം", + "filetype": "ഫയൽ തരം", + "filter": "ഫിൽട്ടർ ചെയ്യുക", + "filter_people": "ആളുകളെ ഫിൽട്ടർ ചെയ്യുക", + "filter_places": "സ്ഥലങ്ങൾ ഫിൽട്ടർ ചെയ്യുക", + "find_them_fast": "തിരയലിലൂടെ പേര് ഉപയോഗിച്ച് അവരെ വേഗത്തിൽ കണ്ടെത്തുക", + "first": "ആദ്യം", + "fix_incorrect_match": "തെറ്റായ പൊരുത്തം ശരിയാക്കുക", + "folder": "ഫോൾഡർ", + "folder_not_found": "ഫോൾഡർ കണ്ടെത്തിയില്ല", + "folders": "ഫോൾഡറുകൾ", + "folders_feature_description": "ഫയൽ സിസ്റ്റത്തിലെ ഫോട്ടോകൾക്കും വീഡിയോകൾക്കുമായി ഫോൾഡർ കാഴ്‌ച ബ്രൗസുചെയ്യുന്നു", + "forgot_pin_code_question": "നിങ്ങളുടെ പിൻ മറന്നോ?", + "forward": "മുന്നോട്ട്", + "gcast_enabled": "ഗൂഗിൾ കാസ്റ്റ്", + "gcast_enabled_description": "പ്രവർത്തിക്കുന്നതിനായി ഈ ഫീച്ചർ ഗൂഗിളിൽ നിന്ന് ബാഹ്യ ഉറവിടങ്ങൾ ലോഡുചെയ്യുന്നു.", + "general": "പൊതുവായത്", + "geolocation_instruction_location": "ലൊക്കേഷൻ ഉപയോഗിക്കുന്നതിന് GPS കോർഡിനേറ്റുകളുള്ള ഒരു അസറ്റിൽ ക്ലിക്കുചെയ്യുക, അല്ലെങ്കിൽ മാപ്പിൽ നിന്ന് നേരിട്ട് ഒരു സ്ഥലം തിരഞ്ഞെടുക്കുക", + "get_help": "സഹായം നേടുക", + "get_wifiname_error": "വൈ-ഫൈയുടെ പേര് ലഭിച്ചില്ല. നിങ്ങൾ ആവശ്യമായ അനുമതികൾ നൽകിയിട്ടുണ്ടെന്നും ഒരു വൈ-ഫൈ നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റുചെയ്‌തിട്ടുണ്ടെന്നും ഉറപ്പാക്കുക", + "getting_started": "ആരംഭിക്കുന്നു", + "go_back": "പിന്നോട്ട് പോകുക", + "go_to_folder": "ഫോൾഡറിലേക്ക് പോകുക", + "go_to_search": "തിരയലിലേക്ക് പോകുക", + "gps": "ജിപിഎസ്", + "gps_missing": "GPS ഇല്ല", + "grant_permission": "അനുമതി നൽകുക", + "group_albums_by": "ആൽബങ്ങളെ ഇതനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്യുക...", + "group_country": "രാജ്യം അനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്യുക", + "group_no": "ഗ്രൂപ്പിംഗ് ഇല്ല", + "group_owner": "ഉടമ അനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്യുക", + "group_places_by": "സ്ഥലങ്ങളെ ഇതനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്യുക...", + "group_year": "വർഷം അനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്യുക", + "haptic_feedback_switch": "ഹാപ്റ്റിക് ഫീഡ്‌ബാക്ക് പ്രവർത്തനക്ഷമമാക്കുക", + "haptic_feedback_title": "ഹാപ്റ്റിക് ഫീഡ്‌ബാക്ക്", + "has_quota": "ക്വാട്ടയുണ്ട്", + "hash_asset": "അസറ്റ് ഹാഷ് ചെയ്യുക", + "hashed_assets": "ഹാഷ് ചെയ്ത അസറ്റുകൾ", + "hashing": "ഹാഷിംഗ്", + "header_settings_add_header_tip": "ഹെഡർ ചേർക്കുക", + "header_settings_field_validator_msg": "മൂല്യം ശൂന്യമാകരുത്", + "header_settings_header_name_input": "ഹെഡറിന്റെ പേര്", + "header_settings_header_value_input": "ഹെഡറിന്റെ മൂല്യം", + "headers_settings_tile_subtitle": "ഓരോ നെറ്റ്‌വർക്ക് അഭ്യർത്ഥനയ്‌ക്കൊപ്പവും ആപ്പ് അയയ്‌ക്കേണ്ട പ്രോക്സി ഹെഡറുകൾ നിർവചിക്കുക", + "headers_settings_tile_title": "കസ്റ്റം പ്രോക്സി ഹെഡറുകൾ", + "hi_user": "നമസ്കാരം {name} ({email})", + "hide_all_people": "എല്ലാ ആളുകളെയും മറയ്ക്കുക", + "hide_gallery": "ഗാലറി മറയ്ക്കുക", + "hide_named_person": "{name} എന്ന വ്യക്തിയെ മറയ്ക്കുക", + "hide_password": "പാസ്‌വേഡ് മറയ്ക്കുക", + "hide_person": "വ്യക്തിയെ മറയ്ക്കുക", + "hide_unnamed_people": "പേരില്ലാത്ത ആളുകളെ മറയ്ക്കുക", + "home_page_add_to_album_conflicts": "{album} എന്ന ആൽബത്തിലേക്ക് {added} അസറ്റുകൾ ചേർത്തു. {failed} അസറ്റുകൾ ഇതിനകം ആൽബത്തിലുണ്ട്.", + "home_page_add_to_album_err_local": "പ്രാദേശിക അസറ്റുകൾ ഇപ്പോൾ ആൽബങ്ങളിലേക്ക് ചേർക്കാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_add_to_album_success": "{album} എന്ന ആൽബത്തിലേക്ക് {added} അസറ്റുകൾ ചേർത്തു.", + "home_page_album_err_partner": "പങ്കാളിയുടെ അസറ്റുകൾ ഇപ്പോൾ ഒരു ആൽബത്തിലേക്ക് ചേർക്കാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_archive_err_local": "പ്രാദേശിക അസറ്റുകൾ ഇപ്പോൾ ആർക്കൈവ് ചെയ്യാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_archive_err_partner": "പങ്കാളിയുടെ അസറ്റുകൾ ആർക്കൈവ് ചെയ്യാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_building_timeline": "ടൈംലൈൻ നിർമ്മിക്കുന്നു", + "home_page_delete_err_partner": "പങ്കാളിയുടെ അസറ്റുകൾ ഇല്ലാതാക്കാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_delete_remote_err_local": "റിമോട്ട് ഇല്ലാതാക്കൽ തിരഞ്ഞെടുപ്പിൽ പ്രാദേശിക അസറ്റുകൾ ഉണ്ട്, ഒഴിവാക്കുന്നു", + "home_page_favorite_err_local": "പ്രാദേശിക അസറ്റുകൾ ഇപ്പോൾ പ്രിയപ്പെട്ടതാക്കാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_favorite_err_partner": "പങ്കാളിയുടെ അസറ്റുകൾ ഇപ്പോൾ പ്രിയപ്പെട്ടതാക്കാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_first_time_notice": "നിങ്ങൾ ആദ്യമായിട്ടാണ് ഈ ആപ്പ് ഉപയോഗിക്കുന്നതെങ്കിൽ, ഒരു ബാക്കപ്പ് ആൽബം തിരഞ്ഞെടുക്കുന്നത് ഉറപ്പാക്കുക, അതുവഴി ടൈംലൈനിൽ ഫോട്ടോകളും വീഡിയോകളും ചേർക്കാൻ കഴിയും", + "home_page_locked_error_local": "പ്രാദേശിക അസറ്റുകൾ ലോക്ക് ചെയ്ത ഫോൾഡറിലേക്ക് മാറ്റാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_locked_error_partner": "പങ്കാളിയുടെ അസറ്റുകൾ ലോക്ക് ചെയ്ത ഫോൾഡറിലേക്ക് മാറ്റാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_share_err_local": "പ്രാദേശിക അസറ്റുകൾ ലിങ്ക് വഴി പങ്കിടാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "home_page_upload_err_limit": "ഒരു സമയം പരമാവധി 30 അസറ്റുകൾ മാത്രമേ അപ്‌ലോഡ് ചെയ്യാൻ കഴിയൂ, ഒഴിവാക്കുന്നു", + "host": "ഹോസ്റ്റ്", + "hour": "മണിക്കൂർ", + "hours": "മണിക്കൂറുകൾ", + "id": "ഐഡി", + "idle": "നിഷ്‌ക്രിയം", + "ignore_icloud_photos": "iCloud ഫോട്ടോകൾ അവഗണിക്കുക", + "ignore_icloud_photos_description": "iCloud-ൽ സംഭരിച്ചിരിക്കുന്ന ഫോട്ടോകൾ Immich സെർവറിലേക്ക് അപ്‌ലോഡ് ചെയ്യില്ല", + "image": "ചിത്രം", + "image_alt_text_date": "{date}-ന് എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_1_person": "{date}-ന് {person1}-നൊപ്പം എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_2_people": "{date}-ന് {person1}, {person2} എന്നിവർക്കൊപ്പം എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_3_people": "{date}-ന് {person1}, {person2}, {person3} എന്നിവർക്കൊപ്പം എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_4_or_more_people": "{date}-ന് {person1}, {person2}, കൂടാതെ മറ്റ് {additionalCount, number} പേർക്കുമൊപ്പം എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_place": "{date}-ന് {city}, {country} എന്നിവിടങ്ങളിൽ വെച്ച് എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_place_1_person": "{date}-ന് {city}, {country} എന്നിവിടങ്ങളിൽ വെച്ച് {person1}-നൊപ്പം എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_place_2_people": "{date}-ന് {city}, {country} എന്നിവിടങ്ങളിൽ വെച്ച് {person1}, {person2} എന്നിവർക്കൊപ്പം എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_place_3_people": "{date}-ന് {city}, {country} എന്നിവിടങ്ങളിൽ വെച്ച് {person1}, {person2}, {person3} എന്നിവർക്കൊപ്പം എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_alt_text_date_place_4_or_more_people": "{date}-ന് {city}, {country} എന്നിവിടങ്ങളിൽ വെച്ച് {person1}, {person2}, കൂടാതെ മറ്റ് {additionalCount, number} പേർക്കുമൊപ്പം എടുത്ത {isVideo, select, true {വീഡിയോ} other {ചിത്രം}}", + "image_saved_successfully": "ചിത്രം സേവ് ചെയ്തു", + "image_viewer_page_state_provider_download_started": "ഡൗൺലോഡ് ആരംഭിച്ചു", + "image_viewer_page_state_provider_download_success": "ഡൗൺലോഡ് വിജയിച്ചു", + "image_viewer_page_state_provider_share_error": "പങ്കിടുന്നതിൽ പിശക്", + "immich_logo": "Immich ലോഗോ", + "immich_web_interface": "Immich വെബ് ഇന്റർഫേസ്", + "import_from_json": "JSON-ൽ നിന്ന് ഇമ്പോർട്ടുചെയ്യുക", + "import_path": "ഇമ്പോർട്ട് പാത്ത്", + "in_albums": "{count, plural, one {# ആൽബത്തിൽ} other {# ആൽബങ്ങളിൽ}}", + "in_archive": "ആർക്കൈവിൽ", + "include_archived": "ആർക്കൈവുചെയ്‌തവ ഉൾപ്പെടുത്തുക", + "include_shared_albums": "പങ്കിട്ട ആൽബങ്ങൾ ഉൾപ്പെടുത്തുക", + "include_shared_partner_assets": "പങ്കിട്ട പങ്കാളിയുടെ അസറ്റുകൾ ഉൾപ്പെടുത്തുക", + "individual_share": "വ്യക്തിഗത പങ്കിടൽ", + "individual_shares": "വ്യക്തിഗത പങ്കിടലുകൾ", + "info": "വിവരങ്ങൾ", + "interval": { + "day_at_onepm": "എല്ലാ ദിവസവും ഉച്ചയ്ക്ക് 1 മണിക്ക്", + "hours": "{hours, plural, one {ഓരോ മണിക്കൂറിലും} other {ഓരോ {hours, number} മണിക്കൂറിലും}}", + "night_at_midnight": "എല്ലാ രാത്രിയും അർദ്ധരാത്രിക്ക്", + "night_at_twoam": "എല്ലാ രാത്രിയും പുലർച്ചെ 2 മണിക്ക്" + }, + "invalid_date": "അസാധുവായ തീയതി", + "invalid_date_format": "അസാധുവായ തീയതി ഫോർമാറ്റ്", + "invite_people": "ആളുകളെ ക്ഷണിക്കുക", + "invite_to_album": "ആൽബത്തിലേക്ക് ക്ഷണിക്കുക", + "ios_debug_info_fetch_ran_at": "ഫെച്ച് പ്രവർത്തിച്ചത് {dateTime}", + "ios_debug_info_last_sync_at": "അവസാന സിങ്ക് {dateTime}", + "ios_debug_info_no_processes_queued": "പശ്ചാത്തല പ്രോസസ്സുകളൊന്നും ക്യൂവിൽ ഇല്ല", + "ios_debug_info_no_sync_yet": "പശ്ചാത്തല സിങ്ക് ജോലി ഇതുവരെ പ്രവർത്തിച്ചിട്ടില്ല", + "ios_debug_info_processes_queued": "{count, plural, one {{count} പശ്ചാത്തല പ്രോസസ്സ് ക്യൂവിലുണ്ട്} other {{count} പശ്ചാത്തല പ്രോസസ്സുകൾ ക്യൂവിലുണ്ട്}}", + "ios_debug_info_processing_ran_at": "പ്രോസസ്സിംഗ് പ്രവർത്തിച്ചത് {dateTime}", + "items_count": "{count, plural, one {# ഇനം} other {# ഇനങ്ങൾ}}", + "jobs": "ജോലികൾ", + "keep": "സൂക്ഷിക്കുക", + "keep_all": "എല്ലാം സൂക്ഷിക്കുക", + "keep_this_delete_others": "ഇത് സൂക്ഷിച്ച് മറ്റുള്ളവ ഇല്ലാതാക്കുക", + "kept_this_deleted_others": "ഈ അസറ്റ് സൂക്ഷിക്കുകയും {count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} ഇല്ലാതാക്കുകയും ചെയ്തു", + "keyboard_shortcuts": "കീബോർഡ് കുറുക്കുവഴികൾ", + "language": "ഭാഷ", + "language_no_results_subtitle": "നിങ്ങളുടെ തിരയൽ പദം ക്രമീകരിച്ച് ശ്രമിക്കുക", + "language_no_results_title": "ഭാഷകളൊന്നും കണ്ടെത്തിയില്ല", + "language_search_hint": "ഭാഷകൾക്കായി തിരയുക...", + "language_setting_description": "നിങ്ങൾക്കിഷ്ടപ്പെട്ട ഭാഷ തിരഞ്ഞെടുക്കുക", + "large_files": "വലിയ ഫയലുകൾ", + "last": "അവസാനത്തേത്", + "last_seen": "അവസാനം കണ്ടത്", + "latest_version": "ഏറ്റവും പുതിയ പതിപ്പ്", + "latitude": "അക്ഷാംശം", + "leave": "വിടുക", + "leave_album": "ആൽബം വിടുക", + "lens_model": "ലെൻസ് മോഡൽ", + "let_others_respond": "മറ്റുള്ളവരെ പ്രതികരിക്കാൻ അനുവദിക്കുക", + "level": "തലം", + "library": "ലൈബ്രറി", + "library_options": "ലൈബ്രറി ഓപ്ഷനുകൾ", + "library_page_device_albums": "ഉപകരണത്തിലെ ആൽബങ്ങൾ", + "library_page_new_album": "പുതിയ ആൽബം", + "library_page_sort_asset_count": "അസറ്റുകളുടെ എണ്ണം", + "library_page_sort_created": "സൃഷ്ടിച്ച തീയതി", + "library_page_sort_last_modified": "അവസാനം മാറ്റം വരുത്തിയത്", + "library_page_sort_title": "ആൽബത്തിന്റെ ശീർഷകം", + "licenses": "ലൈസൻസുകൾ", + "light": "ലൈറ്റ്", + "like": "ഇഷ്ടപ്പെട്ടു", + "like_deleted": "ഇഷ്ടം നീക്കംചെയ്തു", + "link_motion_video": "ചലിക്കുന്ന വീഡിയോ ലിങ്ക് ചെയ്യുക", + "link_to_oauth": "OAuth-ലേക്ക് ലിങ്ക് ചെയ്യുക", + "linked_oauth_account": "ലിങ്ക് ചെയ്ത OAuth അക്കൗണ്ട്", + "list": "ലിസ്റ്റ്", + "loading": "ലോഡിംഗ്", + "loading_search_results_failed": "തിരയൽ ഫലങ്ങൾ ലോഡുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു", + "local": "പ്രാദേശികം", + "local_asset_cast_failed": "സെർവറിലേക്ക് അപ്‌ലോഡ് ചെയ്യാത്ത ഒരു അസറ്റ് കാസ്റ്റ് ചെയ്യാൻ കഴിയില്ല", + "local_assets": "പ്രാദേശിക അസറ്റുകൾ", + "local_media_summary": "പ്രാദേശിക മീഡിയ സംഗ്രഹം", + "local_network": "പ്രാദേശിക നെറ്റ്‌വർക്ക്", + "local_network_sheet_info": "നിർദ്ദിഷ്‌ട വൈ-ഫൈ നെറ്റ്‌വർക്ക് ഉപയോഗിക്കുമ്പോൾ ഈ URL വഴി ആപ്പ് സെർവറുമായി ബന്ധിപ്പിക്കും", + "location_permission": "ലൊക്കേഷൻ അനുമതി", + "location_permission_content": "യാന്ത്രിക-സ്വിച്ചിംഗ് ഫീച്ചർ ഉപയോഗിക്കുന്നതിന്, Immich-ന് കൃത്യമായ ലൊക്കേഷൻ അനുമതി ആവശ്യമാണ്, അതുവഴി നിലവിലെ വൈ-ഫൈ നെറ്റ്‌വർക്കിന്റെ പേര് വായിക്കാൻ കഴിയും", + "location_picker_choose_on_map": "മാപ്പിൽ തിരഞ്ഞെടുക്കുക", + "location_picker_latitude_error": "സാധുവായ അക്ഷാംശം നൽകുക", + "location_picker_latitude_hint": "നിങ്ങളുടെ അക്ഷാംശം ഇവിടെ നൽകുക", + "location_picker_longitude_error": "സാധുവായ രേഖാംശം നൽകുക", + "location_picker_longitude_hint": "നിങ്ങളുടെ രേഖാംശം ഇവിടെ നൽകുക", + "lock": "ലോക്ക് ചെയ്യുക", + "locked_folder": "ലോക്ക് ചെയ്ത ഫോൾഡർ", + "log_detail_title": "ലോഗ് വിശദാംശം", + "log_out": "ലോഗ് ഔട്ട്", + "log_out_all_devices": "എല്ലാ ഉപകരണങ്ങളിൽ നിന്നും ലോഗ് ഔട്ട് ചെയ്യുക", + "logged_in_as": "{user} ആയി ലോഗിൻ ചെയ്തു", + "logged_out_all_devices": "എല്ലാ ഉപകരണങ്ങളിൽ നിന്നും ലോഗ് ഔട്ട് ചെയ്തു", + "logged_out_device": "ഉപകരണത്തിൽ നിന്ന് ലോഗ് ഔട്ട് ചെയ്തു", + "login": "ലോഗിൻ", + "login_disabled": "ലോഗിൻ പ്രവർത്തനരഹിതമാക്കി", + "login_form_api_exception": "API എക്സെപ്ഷൻ. ദയവായി സെർവർ URL പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.", + "login_form_back_button_text": "തിരികെ", + "login_form_email_hint": "youremail@email.com", + "login_form_endpoint_hint": "http://your-server-ip:port", + "login_form_endpoint_url": "സെർവർ എൻഡ്‌പോയിന്റ് URL", + "login_form_err_http": "ദയവായി http:// അല്ലെങ്കിൽ https:// എന്ന് വ്യക്തമാക്കുക", + "login_form_err_invalid_email": "അസാധുവായ ഇമെയിൽ", + "login_form_err_invalid_url": "അസാധുവായ URL", + "login_form_err_leading_whitespace": "തുടക്കത്തിലെ ശൂന്യസ്ഥലം", + "login_form_err_trailing_whitespace": "അവസാനത്തെ ശൂന്യസ്ഥലം", + "login_form_failed_get_oauth_server_config": "OAuth ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യുന്നതിൽ പിശക്, സെർവർ URL പരിശോധിക്കുക", + "login_form_failed_get_oauth_server_disable": "ഈ സെർവറിൽ OAuth ഫീച്ചർ ലഭ്യമല്ല", + "login_form_failed_login": "നിങ്ങളെ ലോഗിൻ ചെയ്യുന്നതിൽ പിശക്, സെർവർ URL, ഇമെയിൽ, പാസ്‌വേഡ് എന്നിവ പരിശോധിക്കുക", + "login_form_handshake_exception": "സെർവറുമായി ഒരു ഹാൻഡ്‌ഷേക്ക് എക്സെപ്ഷൻ ഉണ്ടായി. നിങ്ങൾ ഒരു സ്വയം ഒപ്പിട്ട സർട്ടിഫിക്കറ്റാണ് ഉപയോഗിക്കുന്നതെങ്കിൽ ക്രമീകരണങ്ങളിൽ സ്വയം ഒപ്പിട്ട സർട്ടിഫിക്കറ്റ് പിന്തുണ പ്രവർത്തനക്ഷമമാക്കുക.", + "login_form_password_hint": "പാസ്‌വേഡ്", + "login_form_save_login": "ലോഗിൻ ആയി തുടരുക", + "login_form_server_empty": "ഒരു സെർവർ URL നൽകുക.", + "login_form_server_error": "സെർവറിലേക്ക് കണക്റ്റുചെയ്യാൻ കഴിഞ്ഞില്ല.", + "login_has_been_disabled": "ലോഗിൻ പ്രവർത്തനരഹിതമാക്കി.", + "login_password_changed_error": "നിങ്ങളുടെ പാസ്‌വേഡ് അപ്ഡേറ്റ് ചെയ്യുന്നതിൽ ഒരു പിശകുണ്ടായി", + "login_password_changed_success": "പാസ്‌വേഡ് വിജയകരമായി അപ്ഡേറ്റ് ചെയ്തു", + "logout_all_device_confirmation": "എല്ലാ ഉപകരണങ്ങളിൽ നിന്നും ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "logout_this_device_confirmation": "ഈ ഉപകരണത്തിൽ നിന്ന് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "logs": "ലോഗുകൾ", + "longitude": "രേഖാംശം", + "look": "കാഴ്ച", + "loop_videos": "വീഡിയോകൾ ലൂപ്പ് ചെയ്യുക", + "loop_videos_description": "വിശദാംശ വ്യൂവറിൽ ഒരു വീഡിയോ യാന്ത്രികമായി ലൂപ്പ് ചെയ്യാൻ പ്രവർത്തനക്ഷമമാക്കുക.", + "main_branch_warning": "നിങ്ങൾ ഒരു ഡെവലപ്‌മെന്റ് പതിപ്പാണ് ഉപയോഗിക്കുന്നത്; ഒരു റിലീസ് പതിപ്പ് ഉപയോഗിക്കാൻ ഞങ്ങൾ ശക്തമായി ശുപാർശ ചെയ്യുന്നു!", + "main_menu": "പ്രധാന മെനു", + "make": "നിർമ്മാതാവ്", + "manage_geolocation": "സ്ഥാനം കൈകാര്യം ചെയ്യുക", + "manage_shared_links": "പങ്കിട്ട ലിങ്കുകൾ കൈകാര്യം ചെയ്യുക", + "manage_sharing_with_partners": "പങ്കാളികളുമായുള്ള പങ്കിടൽ കൈകാര്യം ചെയ്യുക", + "manage_the_app_settings": "ആപ്പ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "manage_your_account": "നിങ്ങളുടെ അക്കൗണ്ട് കൈകാര്യം ചെയ്യുക", + "manage_your_api_keys": "നിങ്ങളുടെ API കീകൾ കൈകാര്യം ചെയ്യുക", + "manage_your_devices": "നിങ്ങൾ ലോഗിൻ ചെയ്ത ഉപകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "manage_your_oauth_connection": "നിങ്ങളുടെ OAuth കണക്ഷൻ കൈകാര്യം ചെയ്യുക", + "map": "മാപ്പ്", + "map_assets_in_bounds": "{count, plural, =0 {ഈ പ്രദേശത്ത് ഫോട്ടോകളൊന്നുമില്ല} one {# ഫോട്ടോ} other {# ഫോട്ടോകൾ}}", + "map_cannot_get_user_location": "ഉപയോക്താവിന്റെ സ്ഥാനം ലഭിക്കുന്നില്ല", + "map_location_dialog_yes": "അതെ", + "map_location_picker_page_use_location": "ഈ സ്ഥലം ഉപയോഗിക്കുക", + "map_location_service_disabled_content": "നിങ്ങളുടെ നിലവിലെ സ്ഥാനത്ത് നിന്നുള്ള അസറ്റുകൾ പ്രദർശിപ്പിക്കുന്നതിന് ലൊക്കേഷൻ സേവനം പ്രവർത്തനക്ഷമമാക്കേണ്ടതുണ്ട്. ഇപ്പോൾ പ്രവർത്തനക്ഷമമാക്കണോ?", + "map_location_service_disabled_title": "ലൊക്കേഷൻ സേവനം പ്രവർത്തനരഹിതമാക്കി", + "map_marker_for_images": "{city}, {country} എന്നിവിടങ്ങളിൽ എടുത്ത ചിത്രങ്ങൾക്കുള്ള മാപ്പ് മാർക്കർ", + "map_marker_with_image": "ചിത്രത്തോടുകൂടിയ മാപ്പ് മാർക്കർ", + "map_no_location_permission_content": "നിങ്ങളുടെ നിലവിലെ സ്ഥാനത്ത് നിന്നുള്ള അസറ്റുകൾ പ്രദർശിപ്പിക്കുന്നതിന് ലൊക്കേഷൻ അനുമതി ആവശ്യമാണ്. ഇപ്പോൾ അനുവദിക്കണോ?", + "map_no_location_permission_title": "ലൊക്കേഷൻ അനുമതി നിഷേധിച്ചു", + "map_settings": "മാപ്പ് ക്രമീകരണങ്ങൾ", + "map_settings_dark_mode": "ഡാർക്ക് മോഡ്", + "map_settings_date_range_option_day": "കഴിഞ്ഞ 24 മണിക്കൂർ", + "map_settings_date_range_option_days": "കഴിഞ്ഞ {days} ദിവസങ്ങൾ", + "map_settings_date_range_option_year": "കഴിഞ്ഞ വർഷം", + "map_settings_date_range_option_years": "കഴിഞ്ഞ {years} വർഷങ്ങൾ", + "map_settings_dialog_title": "മാപ്പ് ക്രമീകരണങ്ങൾ", + "map_settings_include_show_archived": "ആർക്കൈവുചെയ്‌തവ ഉൾപ്പെടുത്തുക", + "map_settings_include_show_partners": "പങ്കാളികളെ ഉൾപ്പെടുത്തുക", + "map_settings_only_show_favorites": "പ്രിയപ്പെട്ടവ മാത്രം കാണിക്കുക", + "map_settings_theme_settings": "മാപ്പ് തീം", + "map_zoom_to_see_photos": "ഫോട്ടോകൾ കാണാൻ സൂം ഔട്ട് ചെയ്യുക", + "mark_all_as_read": "എല്ലാം വായിച്ചതായി അടയാളപ്പെടുത്തുക", + "mark_as_read": "വായിച്ചതായി അടയാളപ്പെടുത്തുക", + "marked_all_as_read": "എല്ലാം വായിച്ചതായി അടയാളപ്പെടുത്തി", + "matches": "ചേർച്ചകൾ", + "matching_assets": "ചേർച്ചയുള്ള അസറ്റുകൾ", + "media_type": "മീഡിയ തരം", + "memories": "ഓർമ്മകൾ", + "memories_all_caught_up": "എല്ലാം കണ്ടുതീർത്തു", + "memories_check_back_tomorrow": "കൂടുതൽ ഓർമ്മകൾക്കായി നാളെ വീണ്ടും പരിശോധിക്കുക", + "memories_setting_description": "നിങ്ങളുടെ ഓർമ്മകളിൽ നിങ്ങൾ കാണുന്നത് കൈകാര്യം ചെയ്യുക", + "memories_start_over": "വീണ്ടും തുടങ്ങുക", + "memories_swipe_to_close": "അടയ്ക്കാൻ മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുക", + "memory": "മെമ്മറി", + "memory_lane_title": "ഓർമ്മകളുടെ പാത {title}", + "menu": "മെനു", + "merge": "ലയിപ്പിക്കുക", + "merge_people": "ആളുകളെ ലയിപ്പിക്കുക", + "merge_people_limit": "ഒരു സമയം 5 മുഖങ്ങൾ വരെ മാത്രമേ ലയിപ്പിക്കാൻ കഴിയൂ", + "merge_people_prompt": "ഈ ആളുകളെ ലയിപ്പിക്കണോ? ഈ പ്രവർത്തനം പഴയപടിയാക്കാൻ കഴിയില്ല.", + "merge_people_successfully": "ആളുകളെ വിജയകരമായി ലയിപ്പിച്ചു", + "merged_people_count": "{count, plural, one {# വ്യക്തിയെ ലയിപ്പിച്ചു} other {# ആളുകളെ ലയിപ്പിച്ചു}}", + "minimize": "ചെറുതാക്കുക", + "minute": "മിനിറ്റ്", + "minutes": "മിനിറ്റുകൾ", + "missing": "കാണാനില്ല", + "model": "മോഡൽ", + "month": "മാസം", + "monthly_title_text_date_format": "MMMM y", + "more": "കൂടുതൽ", + "move": "നീക്കുക", + "move_off_locked_folder": "ലോക്ക് ചെയ്ത ഫോൾഡറിൽ നിന്ന് മാറ്റുക", + "move_to_lock_folder_action_prompt": "{count} എണ്ണം ലോക്ക് ചെയ്ത ഫോൾഡറിലേക്ക് ചേർത്തു", + "move_to_locked_folder": "ലോക്ക് ചെയ്ത ഫോൾഡറിലേക്ക് മാറ്റുക", + "move_to_locked_folder_confirmation": "ഈ ഫോട്ടോകളും വീഡിയോയും എല്ലാ ആൽബങ്ങളിൽ നിന്നും നീക്കം ചെയ്യപ്പെടും, ലോക്ക് ചെയ്ത ഫോൾഡറിൽ നിന്ന് മാത്രമേ കാണാൻ കഴിയൂ", + "moved_to_archive": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} ആർക്കൈവിലേക്ക് മാറ്റി", + "moved_to_library": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} ലൈബ്രറിയിലേക്ക് മാറ്റി", + "moved_to_trash": "ട്രാഷിലേക്ക് മാറ്റി", + "multiselect_grid_edit_date_time_err_read_only": "വായിക്കാൻ മാത്രമുള്ള അസറ്റി(കളു)ടെ തീയതി എഡിറ്റുചെയ്യാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "multiselect_grid_edit_gps_err_read_only": "വായിക്കാൻ മാത്രമുള്ള അസറ്റി(കളു)ടെ സ്ഥാനം എഡിറ്റുചെയ്യാൻ കഴിയില്ല, ഒഴിവാക്കുന്നു", + "mute_memories": "ഓർമ്മകൾ നിശ്ശബ്ദമാക്കുക", + "my_albums": "എന്റെ ആൽബങ്ങൾ", + "name": "പേര്", + "name_or_nickname": "പേര് അല്ലെങ്കിൽ വിളിപ്പേര്", + "network_requirement_photos_upload": "ഫോട്ടോകൾ ബാക്കപ്പ് ചെയ്യാൻ സെല്ലുലാർ ഡാറ്റ ഉപയോഗിക്കുക", + "network_requirement_videos_upload": "വീഡിയോകൾ ബാക്കപ്പ് ചെയ്യാൻ സെല്ലുലാർ ഡാറ്റ ഉപയോഗിക്കുക", + "network_requirements": "നെറ്റ്‌വർക്ക് ആവശ്യകതകൾ", + "network_requirements_updated": "നെറ്റ്‌വർക്ക് ആവശ്യകതകൾ മാറി, ബാക്കപ്പ് ക്യൂ പുനഃസജ്ജമാക്കുന്നു", + "networking_settings": "നെറ്റ്‌വർക്കിംഗ്", + "networking_subtitle": "സെർവർ എൻഡ്‌പോയിന്റ് ക്രമീകരണങ്ങൾ കൈകാര്യം ചെയ്യുക", + "never": "ഒരിക്കലും ഇല്ല", + "new_album": "പുതിയ ആൽബം", + "new_api_key": "പുതിയ API കീ", + "new_password": "പുതിയ പാസ്‌വേഡ്", + "new_person": "പുതിയ വ്യക്തി", + "new_pin_code": "പുതിയ പിൻ കോഡ്", + "new_pin_code_subtitle": "നിങ്ങൾ ആദ്യമായിട്ടാണ് ലോക്ക് ചെയ്ത ഫോൾഡർ ആക്‌സസ് ചെയ്യുന്നത്. ഈ പേജ് സുരക്ഷിതമായി ആക്‌സസ് ചെയ്യാൻ ഒരു പിൻ കോഡ് ഉണ്ടാക്കുക", + "new_timeline": "പുതിയ ടൈംലൈൻ", + "new_user_created": "പുതിയ ഉപയോക്താവിനെ ഉണ്ടാക്കി", + "new_version_available": "പുതിയ പതിപ്പ് ലഭ്യമാണ്", + "newest_first": "ഏറ്റവും പുതിയത് ആദ്യം", + "next": "അടുത്തത്", + "next_memory": "അടുത്ത ഓർമ്മ", + "no": "ഇല്ല", + "no_albums_message": "നിങ്ങളുടെ ഫോട്ടോകളും വീഡിയോകളും ക്രമീകരിക്കാൻ ഒരു ആൽബം ഉണ്ടാക്കുക", + "no_albums_with_name_yet": "ഈ പേരിൽ നിങ്ങൾക്ക് ഇതുവരെ ആൽബങ്ങളൊന്നും ഇല്ലെന്ന് തോന്നുന്നു.", + "no_albums_yet": "നിങ്ങൾക്ക് ഇതുവരെ ആൽബങ്ങളൊന്നും ഇല്ലെന്ന് തോന്നുന്നു.", + "no_archived_assets_message": "നിങ്ങളുടെ ഫോട്ടോ കാഴ്‌ചയിൽ നിന്ന് മറയ്ക്കാൻ ഫോട്ടോകളും വീഡിയോകളും ആർക്കൈവ് ചെയ്യുക", + "no_assets_message": "നിങ്ങളുടെ ആദ്യ ഫോട്ടോ അപ്‌ലോഡ് ചെയ്യാൻ ക്ലിക്കുചെയ്യുക", + "no_assets_to_show": "കാണിക്കാൻ അസറ്റുകളൊന്നുമില്ല", + "no_cast_devices_found": "കാസ്റ്റ് ഉപകരണങ്ങളൊന്നും കണ്ടെത്തിയില്ല", + "no_checksum_local": "ചെക്ക്സം ലഭ്യമല്ല - പ്രാദേശിക അസറ്റുകൾ ലഭ്യമാക്കാൻ കഴിയില്ല", + "no_checksum_remote": "ചെക്ക്സം ലഭ്യമല്ല - റിമോട്ട് അസറ്റ് ലഭ്യമാക്കാൻ കഴിയില്ല", + "no_duplicates_found": "ഡ്യൂപ്ലിക്കേറ്റുകളൊന്നും കണ്ടെത്തിയില്ല.", + "no_exif_info_available": "Exif വിവരങ്ങൾ ലഭ്യമല്ല", + "no_explore_results_message": "നിങ്ങളുടെ ശേഖരം പര്യവേക്ഷണം ചെയ്യാൻ കൂടുതൽ ഫോട്ടോകൾ അപ്‌ലോഡ് ചെയ്യുക.", + "no_favorites_message": "നിങ്ങളുടെ മികച്ച ചിത്രങ്ങളും വീഡിയോകളും വേഗത്തിൽ കണ്ടെത്താൻ പ്രിയപ്പെട്ടവ ചേർക്കുക", + "no_libraries_message": "നിങ്ങളുടെ ഫോട്ടോകളും വീഡിയോകളും കാണുന്നതിന് ഒരു ബാഹ്യ ലൈബ്രറി ഉണ്ടാക്കുക", + "no_local_assets_found": "ഈ ചെക്ക്സം ഉപയോഗിച്ച് പ്രാദേശിക അസറ്റുകളൊന്നും കണ്ടെത്തിയില്ല", + "no_locked_photos_message": "ലോക്ക് ചെയ്‌ത ഫോൾഡറിലെ ഫോട്ടോകളും വീഡിയോകളും മറച്ചിരിക്കുന്നു, നിങ്ങൾ ലൈബ്രറി ബ്രൗസ് ചെയ്യുമ്പോഴോ തിരയുമ്പോഴോ അവ ദൃശ്യമാകില്ല.", + "no_name": "പേരില്ല", + "no_notifications": "അറിയിപ്പുകളൊന്നുമില്ല", + "no_people_found": "ചേർച്ചയുള്ള ആളുകളെ കണ്ടെത്തിയില്ല", + "no_places": "സ്ഥലങ്ങളില്ല", + "no_remote_assets_found": "ഈ ചെക്ക്സം ഉപയോഗിച്ച് റിമോട്ട് അസറ്റുകളൊന്നും കണ്ടെത്തിയില്ല", + "no_results": "ഫലങ്ങളൊന്നുമില്ല", + "no_results_description": "ഒരു പര്യായപദമോ കൂടുതൽ പൊതുവായ കീവേഡോ ഉപയോഗിച്ച് ശ്രമിക്കുക", + "no_shared_albums_message": "നിങ്ങളുടെ നെറ്റ്‌വർക്കിലെ ആളുകളുമായി ഫോട്ടോകളും വീഡിയോകളും പങ്കിടാൻ ഒരു ആൽബം ഉണ്ടാക്കുക", + "no_uploads_in_progress": "അപ്‌ലോഡുകളൊന്നും പുരോഗമിക്കുന്നില്ല", + "not_available": "ലഭ്യമല്ല", + "not_in_any_album": "ഒരു ആൽബത്തിലുമില്ല", + "not_selected": "തിരഞ്ഞെടുത്തിട്ടില്ല", + "note_apply_storage_label_to_previously_uploaded assets": "കുറിപ്പ്: മുമ്പ് അപ്‌ലോഡ് ചെയ്ത അസറ്റുകളിൽ സ്റ്റോറേജ് ലേബൽ പ്രയോഗിക്കാൻ, ഇത് പ്രവർത്തിപ്പിക്കുക", + "notes": "കുറിപ്പുകൾ", + "nothing_here_yet": "ഇവിടെ ഇതുവരെ ഒന്നുമില്ല", + "notification_permission_dialog_content": "അറിയിപ്പുകൾ പ്രവർത്തനക്ഷമമാക്കാൻ, ക്രമീകരണങ്ങളിലേക്ക് പോയി 'അനുവദിക്കുക' തിരഞ്ഞെടുക്കുക.", + "notification_permission_list_tile_content": "അറിയിപ്പുകൾ പ്രവർത്തനക്ഷമമാക്കാൻ അനുമതി നൽകുക.", + "notification_permission_list_tile_enable_button": "അറിയിപ്പുകൾ പ്രവർത്തനക്ഷമമാക്കുക", + "notification_permission_list_tile_title": "അറിയിപ്പ് അനുമതി", + "notification_toggle_setting_description": "ഇമെയിൽ അറിയിപ്പുകൾ പ്രവർത്തനക്ഷമമാക്കുക", + "notifications": "അറിയിപ്പുകൾ", + "notifications_setting_description": "അറിയിപ്പുകൾ കൈകാര്യം ചെയ്യുക", + "oauth": "OAuth", + "official_immich_resources": "Immich-ന്റെ ഔദ്യോഗിക ഉറവിടങ്ങൾ", + "offline": "ഓഫ്‌ലൈൻ", + "offset": "ഓഫ്സെറ്റ്", + "ok": "ശരി", + "oldest_first": "ഏറ്റവും പഴയത് ആദ്യം", + "on_this_device": "ഈ ഉപകരണത്തിൽ", + "onboarding": "ഓൺബോർഡിംഗ്", + "onboarding_locale_description": "നിങ്ങൾക്കിഷ്ടപ്പെട്ട ഭാഷ തിരഞ്ഞെടുക്കുക. ഇത് പിന്നീട് നിങ്ങളുടെ ക്രമീകരണങ്ങളിൽ മാറ്റാവുന്നതാണ്.", + "onboarding_privacy_description": "ഇനിപ്പറയുന്ന (ഓപ്ഷണൽ) ഫീച്ചറുകൾ ബാഹ്യ സേവനങ്ങളെ ആശ്രയിച്ചിരിക്കുന്നു, അവ എപ്പോൾ വേണമെങ്കിലും ക്രമീകരണങ്ങളിൽ പ്രവർത്തനരഹിതമാക്കാം.", + "onboarding_server_welcome_description": "ചില സാധാരണ ക്രമീകരണങ്ങൾ ഉപയോഗിച്ച് നിങ്ങളുടെ ഇൻസ്റ്റൻസ് സജ്ജമാക്കാം.", + "onboarding_theme_description": "നിങ്ങളുടെ ഇൻസ്റ്റൻസിനായി ഒരു കളർ തീം തിരഞ്ഞെടുക്കുക. ഇത് പിന്നീട് നിങ്ങളുടെ ക്രമീകരണങ്ങളിൽ മാറ്റാവുന്നതാണ്.", + "onboarding_user_welcome_description": "നമുക്ക് ആരംഭിക്കാം!", + "onboarding_welcome_user": "സ്വാഗതം, {user}", + "online": "ഓൺലൈൻ", + "only_favorites": "പ്രിയപ്പെട്ടവ മാത്രം", + "open": "തുറക്കുക", + "open_in_map_view": "മാപ്പ് കാഴ്‌ചയിൽ തുറക്കുക", + "open_in_openstreetmap": "OpenStreetMap-ൽ തുറക്കുക", + "open_the_search_filters": "തിരയൽ ഫിൽട്ടറുകൾ തുറക്കുക", + "options": "ഓപ്ഷനുകൾ", + "or": "അല്ലെങ്കിൽ", + "organize_into_albums": "ആൽബങ്ങളായി ക്രമീകരിക്കുക", + "organize_into_albums_description": "നിലവിലെ സിങ്ക് ക്രമീകരണങ്ങൾ ഉപയോഗിച്ച് നിലവിലുള്ള ഫോട്ടോകൾ ആൽബങ്ങളിലേക്ക് മാറ്റുക", + "organize_your_library": "നിങ്ങളുടെ ലൈബ്രറി ക്രമീകരിക്കുക", + "original": "യഥാർത്ഥം", + "other": "മറ്റുള്ളവ", + "other_devices": "മറ്റ് ഉപകരണങ്ങൾ", + "other_entities": "മറ്റ് എന്റിറ്റികൾ", + "other_variables": "മറ്റ് വേരിയബിളുകൾ", + "owned": "സ്വന്തമായുള്ളത്", + "owner": "ഉടമ", + "partner": "പങ്കാളി", + "partner_can_access": "{partner}-ക്ക് ആക്സസ് ചെയ്യാൻ കഴിയും", + "partner_can_access_assets": "ആർക്കൈവുചെയ്‌തതും ഇല്ലാതാക്കിയതുമായവ ഒഴികെ നിങ്ങളുടെ എല്ലാ ഫോട്ടോകളും വീഡിയോകളും", + "partner_can_access_location": "നിങ്ങളുടെ ഫോട്ടോകൾ എടുത്ത സ്ഥലം", + "partner_list_user_photos": "{user}-ന്റെ ഫോട്ടോകൾ", + "partner_list_view_all": "എല്ലാം കാണുക", + "partner_page_empty_message": "നിങ്ങളുടെ ഫോട്ടോകൾ ഇതുവരെ ഒരു പങ്കാളിയുമായും പങ്കിട്ടിട്ടില്ല.", + "partner_page_no_more_users": "ചേർക്കാൻ കൂടുതൽ ഉപയോക്താക്കളില്ല", + "partner_page_partner_add_failed": "പങ്കാളിയെ ചേർക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "partner_page_select_partner": "പങ്കാളിയെ തിരഞ്ഞെടുക്കുക", + "partner_page_shared_to_title": "ഇതിലേക്ക് പങ്കിട്ടു", + "partner_page_stop_sharing_content": "{partner}-ക്ക് ഇനി നിങ്ങളുടെ ഫോട്ടോകൾ ആക്‌സസ് ചെയ്യാൻ കഴിയില്ല.", + "partner_sharing": "പങ്കാളിയുമായി പങ്കിടൽ", + "partners": "പങ്കാളികൾ", + "password": "പാസ്‌വേർഡ്", + "password_does_not_match": "പാസ്‌വേഡ് പൊരുത്തപ്പെടുന്നില്ല", + "password_required": "പാസ്‌വേഡ് ആവശ്യമാണ്", + "password_reset_success": "പാസ്‌വേഡ് റീസെറ്റ് വിജയിച്ചു", + "past_durations": { + "days": "കഴിഞ്ഞ {days, plural, one {ദിവസം} other {# ദിവസങ്ങൾ}}", + "hours": "കഴിഞ്ഞ {hours, plural, one {മണിക്കൂർ} other {# മണിക്കൂറുകൾ}}", + "years": "കഴിഞ്ഞ {years, plural, one {വർഷം} other {# വർഷങ്ങൾ}}" + }, + "path": "പാത്ത്", + "pattern": "പാറ്റേൺ", + "pause": "താൽക്കാലികമായി നിർത്തുക", + "pause_memories": "ഓർമ്മകൾ താൽക്കാലികമായി നിർത്തുക", + "paused": "താൽക്കാലികമായി നിർത്തി", + "pending": "കാത്തിരിക്കുന്നു", + "people": "ആളുകൾ", + "people_edits_count": "{count, plural, one {# വ്യക്തിയെ എഡിറ്റുചെയ്തു} other {# ആളുകളെ എഡിറ്റുചെയ്തു}}", + "people_feature_description": "ആളുകളനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്ത ഫോട്ടോകളും വീഡിയോകളും ബ്രൗസുചെയ്യുന്നു", + "people_sidebar_description": "സൈഡ്‌ബാറിൽ 'ആളുകൾ' എന്നതിലേക്ക് ഒരു ലിങ്ക് പ്രദർശിപ്പിക്കുക", + "permanent_deletion_warning": "ശാശ്വതമായ ഇല്ലാതാക്കൽ മുന്നറിയിപ്പ്", + "permanent_deletion_warning_setting_description": "അസറ്റുകൾ ശാശ്വതമായി ഇല്ലാതാക്കുമ്പോൾ ഒരു മുന്നറിയിപ്പ് കാണിക്കുക", + "permanently_delete": "ശാശ്വതമായി ഇല്ലാതാക്കുക", + "permanently_delete_assets_count": "{count, plural, one {അസറ്റ്} other {അസറ്റുകൾ}} ശാശ്വതമായി ഇല്ലാതാക്കുക", + "permanently_delete_assets_prompt": "{count, plural, one {ഈ അസറ്റ് ശാശ്വതമായി ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?} other {ഈ # അസറ്റുകൾ ശാശ്വതമായി ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?}} ഇത് {count, plural, one {അതിനെ അതിന്റെ} other {അവയെ അവയുടെ}} ആൽബത്തിൽ(ങ്ങളിൽ) നിന്നും നീക്കം ചെയ്യും.", + "permanently_deleted_asset": "അസറ്റ് ശാശ്വതമായി ഇല്ലാതാക്കി", + "permanently_deleted_assets_count": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} ശാശ്വതമായി ഇല്ലാതാക്കി", + "permission": "അനുമതി", + "permission_empty": "നിങ്ങളുടെ അനുമതി ശൂന്യമാകരുത്", + "permission_onboarding_back": "തിരികെ", + "permission_onboarding_continue_anyway": "എന്തായാലും തുടരുക", + "permission_onboarding_get_started": "തുടങ്ങാം", + "permission_onboarding_go_to_settings": "ക്രമീകരണങ്ങളിലേക്ക് പോകുക", + "permission_onboarding_permission_denied": "അനുമതി നിഷേധിച്ചു. Immich ഉപയോഗിക്കുന്നതിന്, ക്രമീകരണങ്ങളിൽ ഫോട്ടോ, വീഡിയോ അനുമതികൾ നൽകുക.", + "permission_onboarding_permission_granted": "അനുമതി ലഭിച്ചു! നിങ്ങൾ തയ്യാറാണ്.", + "permission_onboarding_permission_limited": "അനുമതി പരിമിതമാണ്. Immich-ന് നിങ്ങളുടെ മുഴുവൻ ഗാലറി ശേഖരവും ബാക്കപ്പ് ചെയ്യാനും കൈകാര്യം ചെയ്യാനും അനുവദിക്കുന്നതിന്, ക്രമീകരണങ്ങളിൽ ഫോട്ടോ, വീഡിയോ അനുമതികൾ നൽകുക.", + "permission_onboarding_request": "നിങ്ങളുടെ ഫോട്ടോകളും വീഡിയോകളും കാണുന്നതിന് Immich-ന് അനുമതി ആവശ്യമാണ്.", + "person": "വ്യക്തി", + "person_age_months": "{months, plural, one {# മാസം} other {# മാസം}} പ്രായം", + "person_age_year_months": "1 വർഷവും {months, plural, one {# മാസവും} other {# മാസവും}} പ്രായം", + "person_age_years": "{years, plural, other {# വയസ്സ്}}", + "person_birthdate": "{date}-ന് ജനിച്ചു", + "person_hidden": "{name}{hidden, select, true { (മറച്ചത്)} other {}}", + "photo_shared_all_users": "നിങ്ങൾ എല്ലാ ഉപയോക്താക്കളുമായും ഫോട്ടോകൾ പങ്കിട്ടു, അല്ലെങ്കിൽ നിങ്ങൾക്ക് പങ്കിടാൻ ഉപയോക്താക്കളാരും ഇല്ലെന്നു തോന്നുന്നു.", + "photos": "ഫോട്ടോകൾ", + "photos_and_videos": "ഫോട്ടോകളും വീഡിയോകളും", + "photos_count": "{count, plural, one {{count, number} ഫോട്ടോ} other {{count, number} ഫോട്ടോകൾ}}", + "photos_from_previous_years": "മുൻ വർഷങ്ങളിലെ ഫോട്ടോകൾ", + "pick_a_location": "ഒരു സ്ഥലം തിരഞ്ഞെടുക്കുക", + "pin_code_changed_successfully": "പിൻ കോഡ് വിജയകരമായി മാറ്റി", + "pin_code_reset_successfully": "പിൻ കോഡ് വിജയകരമായി റീസെറ്റ് ചെയ്തു", + "pin_code_setup_successfully": "പിൻ കോഡ് വിജയകരമായി സജ്ജീകരിച്ചു", + "pin_verification": "പിൻ കോഡ് പരിശോധന", + "place": "സ്ഥലം", + "places": "സ്ഥലങ്ങൾ", + "places_count": "{count, plural, one {{count, number} സ്ഥലം} other {{count, number} സ്ഥലങ്ങൾ}}", + "play": "പ്ലേ ചെയ്യുക", + "play_memories": "ഓർമ്മകൾ പ്ലേ ചെയ്യുക", + "play_motion_photo": "ചലിക്കുന്ന ഫോട്ടോ പ്ലേ ചെയ്യുക", + "play_or_pause_video": "വീഡിയോ പ്ലേ ചെയ്യുക അല്ലെങ്കിൽ താൽക്കാലികമായി നിർത്തുക", + "please_auth_to_access": "ആക്‌സസ് ചെയ്യുന്നതിന് ദയവായി പ്രാമാണീകരിക്കുക", + "port": "പോർട്ട്", + "preferences_settings_subtitle": "ആപ്പിന്റെ മുൻഗണനകൾ കൈകാര്യം ചെയ്യുക", + "preferences_settings_title": "മുൻഗണനകൾ", + "preparing": "തയ്യാറാക്കുന്നു", + "preset": "പ്രീസെറ്റ്", + "preview": "പ്രിവ്യൂ", + "previous": "മുമ്പത്തെ", + "previous_memory": "മുമ്പത്തെ ഓർമ്മ", + "previous_or_next_day": "ദിവസം മുന്നോട്ട്/പുറകോട്ട്", + "previous_or_next_month": "മാസം മുന്നോട്ട്/പുറകോട്ട്", + "previous_or_next_photo": "ഫോട്ടോ മുന്നോട്ട്/പുറകോട്ട്", + "previous_or_next_year": "വർഷം മുന്നോട്ട്/പുറകോട്ട്", + "primary": "പ്രധാനമായത്", + "privacy": "സ്വകാര്യത", + "profile": "പ്രൊഫൈൽ", + "profile_drawer_app_logs": "ലോഗുകൾ", + "profile_drawer_client_out_of_date_major": "മൊബൈൽ ആപ്പ് കാലഹരണപ്പെട്ടു. ദയവായി ഏറ്റവും പുതിയ പ്രധാന പതിപ്പിലേക്ക് അപ്ഡേറ്റ് ചെയ്യുക.", + "profile_drawer_client_out_of_date_minor": "മൊബൈൽ ആപ്പ് കാലഹരണപ്പെട്ടു. ദയവായി ഏറ്റവും പുതിയ മൈനർ പതിപ്പിലേക്ക് അപ്ഡേറ്റ് ചെയ്യുക.", + "profile_drawer_client_server_up_to_date": "ക്ലയിന്റും സെർവറും ഏറ്റവും പുതിയതാണ്", + "profile_drawer_github": "ഗിറ്റ്ഹബ്", + "profile_drawer_readonly_mode": "റീഡ്-ഓൺലി മോഡ് പ്രവർത്തനക്ഷമമാക്കി. പുറത്തുകടക്കാൻ ഉപയോക്തൃ അവതാർ ഐക്കണിൽ ദീർഘനേരം അമർത്തുക.", + "profile_drawer_server_out_of_date_major": "സെർവർ കാലഹരണപ്പെട്ടു. ദയവായി ഏറ്റവും പുതിയ പ്രധാന പതിപ്പിലേക്ക് അപ്ഡേറ്റ് ചെയ്യുക.", + "profile_drawer_server_out_of_date_minor": "സെർവർ കാലഹരണപ്പെട്ടു. ദയവായി ഏറ്റവും പുതിയ മൈനർ പതിപ്പിലേക്ക് അപ്ഡേറ്റ് ചെയ്യുക.", + "profile_image_of_user": "{user}-ന്റെ പ്രൊഫൈൽ ചിത്രം", + "profile_picture_set": "പ്രൊഫൈൽ ചിത്രം സജ്ജീകരിച്ചു.", + "public_album": "പൊതു ആൽബം", + "public_share": "പൊതു പങ്കിടൽ", + "purchase_account_info": "സഹായി", + "purchase_activated_subtitle": "Immich-നെയും ഓപ്പൺ സോഴ്‌സ് സോഫ്റ്റ്‌വെയറിനെയും പിന്തുണച്ചതിന് നന്ദി", + "purchase_activated_time": "{date}-ന് സജീവമാക്കി", + "purchase_activated_title": "നിങ്ങളുടെ കീ വിജയകരമായി സജീവമാക്കി", + "purchase_button_activate": "സജീവമാക്കുക", + "purchase_button_buy": "വാങ്ങുക", + "purchase_button_buy_immich": "Immich വാങ്ങുക", + "purchase_button_never_show_again": "ഇനി കാണിക്കരുത്", + "purchase_button_reminder": "30 ദിവസത്തിനുള്ളിൽ ഓർമ്മിപ്പിക്കുക", + "purchase_button_remove_key": "കീ നീക്കം ചെയ്യുക", + "purchase_button_select": "തിരഞ്ഞെടുക്കുക", + "purchase_failed_activation": "സജീവമാക്കുന്നതിൽ പരാജയപ്പെട്ടു! ശരിയായ പ്രൊഡക്റ്റ് കീക്കായി ദയവായി നിങ്ങളുടെ ഇമെയിൽ പരിശോധിക്കുക!", + "purchase_individual_description_1": "ഒരു വ്യക്തിക്ക്", + "purchase_individual_description_2": "സഹായിയുടെ നില", + "purchase_individual_title": "വ്യക്തിഗതം", + "purchase_input_suggestion": "പ്രൊഡക്റ്റ് കീ ഉണ്ടോ? താഴെ കീ നൽകുക", + "purchase_license_subtitle": "സേവനത്തിന്റെ തുടർ വികസനത്തെ പിന്തുണയ്ക്കാൻ Immich വാങ്ങുക", + "purchase_lifetime_description": "ആജീവനാന്ത വാങ്ങൽ", + "purchase_option_title": "വാങ്ങാനുള്ള ഓപ്ഷനുകൾ", + "purchase_panel_info_1": "Immich നിർമ്മിക്കാൻ ധാരാളം സമയവും പ്രയത്നവും ആവശ്യമാണ്, അത് കഴിയുന്നത്ര മികച്ചതാക്കാൻ മുഴുവൻ സമയ എഞ്ചിനീയർമാർ പ്രവർത്തിക്കുന്നു. ഓപ്പൺ സോഴ്‌സ് സോഫ്റ്റ്‌വെയറും ധാർമ്മികമായ ബിസിനസ്സ് രീതികളും ഡെവലപ്പർമാർക്ക് സുസ്ഥിരമായ വരുമാന മാർഗ്ഗമാക്കുക, ചൂഷണപരമായ ക്ലൗഡ് സേവനങ്ങൾക്ക് യഥാർത്ഥ ബദലുകളുള്ള സ്വകാര്യതയെ മാനിക്കുന്ന ഒരു ആവാസവ്യവസ്ഥ സൃഷ്ടിക്കുക എന്നതാണ് ഞങ്ങളുടെ ദൗത്യം.", + "purchase_panel_info_2": "പേവാളുകൾ ചേർക്കില്ലെന്ന് ഞങ്ങൾ പ്രതിജ്ഞാബദ്ധരായതിനാൽ, ഈ വാങ്ങൽ നിങ്ങൾക്ക് Immich-ൽ അധിക ഫീച്ചറുകളൊന്നും നൽകില്ല. Immich-ന്റെ തുടർ വികസനത്തെ പിന്തുണയ്ക്കാൻ നിങ്ങളെപ്പോലുള്ള ഉപയോക്താക്കളെയാണ് ഞങ്ങൾ ആശ്രയിക്കുന്നത്.", + "purchase_panel_title": "പദ്ധതിയെ പിന്തുണയ്ക്കുക", + "purchase_per_server": "ഓരോ സെർവറിനും", + "purchase_per_user": "ഓരോ ഉപയോക്താവിനും", + "purchase_remove_product_key": "പ്രൊഡക്റ്റ് കീ നീക്കം ചെയ്യുക", + "purchase_remove_product_key_prompt": "പ്രൊഡക്റ്റ് കീ നീക്കം ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "purchase_remove_server_product_key": "സെർവർ പ്രൊഡക്റ്റ് കീ നീക്കം ചെയ്യുക", + "purchase_remove_server_product_key_prompt": "സെർവർ പ്രൊഡക്റ്റ് കീ നീക്കം ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "purchase_server_description_1": "മുഴുവൻ സെർവറിനും", + "purchase_server_description_2": "സഹായിയുടെ നില", + "purchase_server_title": "സെർവർ", + "purchase_settings_server_activated": "സെർവർ പ്രൊഡക്റ്റ് കീ അഡ്മിൻ ആണ് കൈകാര്യം ചെയ്യുന്നത്", + "query_asset_id": "അസറ്റ് ഐഡി അന്വേഷിക്കുക", + "queue_status": "ക്യൂ ചെയ്യുന്നു {count}/{total}", + "rating": "സ്റ്റാർ റേറ്റിംഗ്", + "rating_clear": "റേറ്റിംഗ് ക്ലിയർ ചെയ്യുക", + "rating_count": "{count, plural, one {# സ്റ്റാർ} other {# സ്റ്റാറുകൾ}}", + "rating_description": "വിവര പാനലിൽ EXIF റേറ്റിംഗ് പ്രദർശിപ്പിക്കുക", + "reaction_options": "പ്രതികരണ ഓപ്ഷനുകൾ", + "read_changelog": "മാറ്റങ്ങളുടെ ലോഗ് വായിക്കുക", + "readonly_mode_disabled": "റീഡ്-ഓൺലി മോഡ് പ്രവർത്തനരഹിതമാക്കി", + "readonly_mode_enabled": "റീഡ്-ഓൺലി മോഡ് പ്രവർത്തനക്ഷമമാക്കി", + "ready_for_upload": "അപ്‌ലോഡിനായി തയ്യാറാണ്", + "reassign": "വീണ്ടും നൽകുക", + "reassigned_assets_to_existing_person": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} {name, select, null {നിലവിലുള്ള ഒരു വ്യക്തിക്ക്} other {{name}-ന്}} വീണ്ടും നൽകി", + "reassigned_assets_to_new_person": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} ഒരു പുതിയ വ്യക്തിക്ക് വീണ്ടും നൽകി", + "reassing_hint": "തിരഞ്ഞെടുത്ത അസറ്റുകൾ നിലവിലുള്ള ഒരു വ്യക്തിക്ക് നൽകുക", + "recent": "സമീപകാലം", + "recent-albums": "സമീപകാല ആൽബങ്ങൾ", + "recent_searches": "സമീപകാല തിരയലുകൾ", + "recently_added": "അടുത്തിടെ ചേർത്തത്", + "recently_added_page_title": "അടുത്തിടെ ചേർത്തത്", + "recently_taken": "അടുത്തിടെ എടുത്തത്", + "recently_taken_page_title": "അടുത്തിടെ എടുത്തത്", + "refresh": "പുതുക്കുക", + "refresh_encoded_videos": "എൻകോഡ് ചെയ്ത വീഡിയോകൾ പുതുക്കുക", + "refresh_faces": "മുഖങ്ങൾ പുതുക്കുക", + "refresh_metadata": "മെറ്റാഡാറ്റ പുതുക്കുക", + "refresh_thumbnails": "തംബ്നെയിലുകൾ പുതുക്കുക", + "refreshed": "പുതുക്കി", + "refreshes_every_file": "നിലവിലുള്ളതും പുതിയതുമായ എല്ലാ ഫയലുകളും വീണ്ടും വായിക്കുന്നു", + "refreshing_encoded_video": "എൻകോഡ് ചെയ്ത വീഡിയോ പുതുക്കുന്നു", + "refreshing_faces": "മുഖങ്ങൾ പുതുക്കുന്നു", + "refreshing_metadata": "മെറ്റാഡാറ്റ പുതുക്കുന്നു", + "regenerating_thumbnails": "തംബ്നെയിലുകൾ പുനർനിർമ്മിക്കുന്നു", + "remote": "റിമോട്ട്", + "remote_assets": "റിമോട്ട് അസറ്റുകൾ", + "remote_media_summary": "റിമോട്ട് മീഡിയ സംഗ്രഹം", + "remove": "നീക്കം ചെയ്യുക", + "remove_assets_album_confirmation": "ആൽബത്തിൽ നിന്ന് {count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} നീക്കം ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "remove_assets_shared_link_confirmation": "ഈ പങ്കിട്ട ലിങ്കിൽ നിന്ന് {count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} നീക്കം ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "remove_assets_title": "അസറ്റുകൾ നീക്കം ചെയ്യണോ?", + "remove_custom_date_range": "കസ്റ്റം തീയതി പരിധി നീക്കം ചെയ്യുക", + "remove_deleted_assets": "ഇല്ലാതാക്കിയ അസറ്റുകൾ നീക്കം ചെയ്യുക", + "remove_from_album": "ആൽബത്തിൽ നിന്ന് നീക്കം ചെയ്യുക", + "remove_from_album_action_prompt": "{count} എണ്ണം ആൽബത്തിൽ നിന്ന് നീക്കം ചെയ്തു", + "remove_from_favorites": "പ്രിയപ്പെട്ടവയിൽ നിന്ന് നീക്കം ചെയ്യുക", + "remove_from_lock_folder_action_prompt": "{count} എണ്ണം ലോക്ക് ചെയ്ത ഫോൾഡറിൽ നിന്ന് നീക്കം ചെയ്തു", + "remove_from_locked_folder": "ലോക്ക് ചെയ്ത ഫോൾഡറിൽ നിന്ന് നീക്കം ചെയ്യുക", + "remove_from_locked_folder_confirmation": "ഈ ഫോട്ടോകളും വീഡിയോകളും ലോക്ക് ചെയ്ത ഫോൾഡറിൽ നിന്ന് മാറ്റണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? അവ നിങ്ങളുടെ ലൈബ്രറിയിൽ ദൃശ്യമാകും.", + "remove_from_shared_link": "പങ്കിട്ട ലിങ്കിൽ നിന്ന് നീക്കം ചെയ്യുക", + "remove_memory": "ഓർമ്മ നീക്കം ചെയ്യുക", + "remove_photo_from_memory": "ഈ ഓർമ്മയിൽ നിന്ന് ഫോട്ടോ നീക്കം ചെയ്യുക", + "remove_tag": "ടാഗ് നീക്കം ചെയ്യുക", + "remove_url": "URL നീക്കം ചെയ്യുക", + "remove_user": "ഉപയോക്താവിനെ നീക്കം ചെയ്യുക", + "removed_api_key": "API കീ നീക്കം ചെയ്തു: {name}", + "removed_from_archive": "ആർക്കൈവിൽ നിന്ന് നീക്കം ചെയ്തു", + "removed_from_favorites": "പ്രിയപ്പെട്ടവയിൽ നിന്ന് നീക്കം ചെയ്തു", + "removed_from_favorites_count": "{count, plural, other {# എണ്ണം}} പ്രിയപ്പെട്ടവയിൽ നിന്ന് നീക്കം ചെയ്തു", + "removed_memory": "ഓർമ്മ നീക്കം ചെയ്തു", + "removed_photo_from_memory": "ഓർമ്മയിൽ നിന്ന് ഫോട്ടോ നീക്കം ചെയ്തു", + "removed_tagged_assets": "{count, plural, one {# അസറ്റിൽ നിന്ന്} other {# അസറ്റുകളിൽ നിന്ന്}} ടാഗ് നീക്കം ചെയ്തു", + "rename": "പുനർനാമകരണം ചെയ്യുക", + "repair": "റിപ്പയർ ചെയ്യുക", + "repair_no_results_message": "ട്രാക്ക് ചെയ്യാത്തതും കാണാതായതുമായ ഫയലുകൾ ഇവിടെ കാണിക്കും", + "replace_with_upload": "അപ്‌ലോഡ് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക", + "repository": "റെപ്പോസിറ്ററി", + "require_password": "പാസ്‌വേഡ് ആവശ്യമാണ്", + "require_user_to_change_password_on_first_login": "ആദ്യ ലോഗിൻ ചെയ്യുമ്പോൾ പാസ്‌വേഡ് മാറ്റാൻ ഉപയോക്താവിനോട് ആവശ്യപ്പെടുക", + "rescan": "വീണ്ടും സ്കാൻ ചെയ്യുക", + "reset": "റീസെറ്റ് ചെയ്യുക", + "reset_password": "പാസ്‌വേഡ് റീസെറ്റ് ചെയ്യുക", + "reset_people_visibility": "ആളുകളുടെ ദൃശ്യത പുനഃസജ്ജമാക്കുക", + "reset_pin_code": "പിൻ കോഡ് റീസെറ്റ് ചെയ്യുക", + "reset_pin_code_description": "നിങ്ങൾ പിൻ കോഡ് മറന്നെങ്കിൽ, അത് പുനഃസജ്ജമാക്കാൻ നിങ്ങൾക്ക് സെർവർ അഡ്മിനിസ്ട്രേറ്ററുമായി ബന്ധപ്പെടാം", + "reset_pin_code_success": "പിൻ കോഡ് വിജയകരമായി റീസെറ്റ് ചെയ്തു", + "reset_pin_code_with_password": "നിങ്ങളുടെ പാസ്‌വേഡ് ഉപയോഗിച്ച് നിങ്ങൾക്ക് എപ്പോഴും പിൻ കോഡ് റീസെറ്റ് ചെയ്യാം", + "reset_sqlite": "SQLite ഡാറ്റാബേസ് റീസെറ്റ് ചെയ്യുക", + "reset_sqlite_confirmation": "SQLite ഡാറ്റാബേസ് റീസെറ്റ് ചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഡാറ്റ വീണ്ടും സിങ്ക് ചെയ്യുന്നതിന് നിങ്ങൾ ലോഗ് ഔട്ട് ചെയ്ത് വീണ്ടും ലോഗിൻ ചെയ്യേണ്ടിവരും", + "reset_sqlite_success": "SQLite ഡാറ്റാബേസ് വിജയകരമായി റീസെറ്റ് ചെയ്തു", + "reset_to_default": "ഡിഫോൾട്ടിലേക്ക് പുനഃസജ്ജമാക്കുക", + "resolve_duplicates": "ഡ്യൂപ്ലിക്കേറ്റുകൾ പരിഹരിക്കുക", + "resolved_all_duplicates": "എല്ലാ ഡ്യൂപ്ലിക്കേറ്റുകളും പരിഹരിച്ചു", + "restore": "പുനഃസ്ഥാപിക്കുക", + "restore_all": "എല്ലാം പുനഃസ്ഥാപിക്കുക", + "restore_trash_action_prompt": "{count} എണ്ണം ട്രാഷിൽ നിന്ന് പുനഃസ്ഥാപിച്ചു", + "restore_user": "ഉപയോക്താവിനെ പുനഃസ്ഥാപിക്കുക", + "restored_asset": "അസറ്റ് പുനഃസ്ഥാപിച്ചു", + "resume": "പുനരാരംഭിക്കുക", + "resume_paused_jobs": "{count, plural, one {താൽക്കാലികമായി നിർത്തിയ # ജോലി} other {താൽക്കാലികമായി നിർത്തിയ # ജോലികൾ}} പുനരാരംഭിക്കുക", + "retry_upload": "അപ്‌ലോഡ് വീണ്ടും ശ്രമിക്കുക", + "review_duplicates": "ഡ്യൂപ്ലിക്കേറ്റുകൾ അവലോകനം ചെയ്യുക", + "review_large_files": "വലിയ ഫയലുകൾ അവലോകനം ചെയ്യുക", + "role": "റോൾ", + "role_editor": "എഡിറ്റർ", + "role_viewer": "കാണുന്നയാൾ", + "running": "പ്രവർത്തിക്കുന്നു", + "save": "സേവ് ചെയ്യുക", + "save_to_gallery": "ഗാലറിയിലേക്ക് സേവ് ചെയ്യുക", + "saved_api_key": "API കീ സേവ് ചെയ്തു", + "saved_profile": "പ്രൊഫൈൽ സേവ് ചെയ്തു", + "saved_settings": "ക്രമീകരണങ്ങൾ സേവ് ചെയ്തു", + "say_something": "എന്തെങ്കിലും പറയൂ", + "scaffold_body_error_occurred": "പിശക് സംഭവിച്ചു", + "scan_all_libraries": "എല്ലാ ലൈബ്രറികളും സ്കാൻ ചെയ്യുക", + "scan_library": "സ്കാൻ ചെയ്യുക", + "scan_settings": "സ്കാൻ ക്രമീകരണങ്ങൾ", + "scanning_for_album": "ആൽബത്തിനായി സ്കാൻ ചെയ്യുന്നു...", + "search": "തിരയുക", + "search_albums": "ആൽബങ്ങൾക്കായി തിരയുക", + "search_by_context": "സന്ദർഭം അനുസരിച്ച് തിരയുക", + "search_by_description": "വിവരണം അനുസരിച്ച് തിരയുക", + "search_by_description_example": "സപ്പയിലെ ഹൈക്കിംഗ് ദിനം", + "search_by_filename": "ഫയൽ നാമം അല്ലെങ്കിൽ എക്സ്റ്റൻഷൻ ഉപയോഗിച്ച് തിരയുക", + "search_by_filename_example": "ഉദാ. IMG_1234.JPG അല്ലെങ്കിൽ PNG", + "search_camera_make": "ക്യാമറ നിർമ്മാതാവിനായി തിരയുക...", + "search_camera_model": "ക്യാമറ മോഡലിനായി തിരയുക...", + "search_city": "നഗരത്തിനായി തിരയുക...", + "search_country": "രാജ്യത്തിനായി തിരയുക...", + "search_filter_apply": "ഫിൽട്ടർ പ്രയോഗിക്കുക", + "search_filter_camera_title": "ക്യാമറ തരം തിരഞ്ഞെടുക്കുക", + "search_filter_date": "തീയതി", + "search_filter_date_interval": "{start} മുതൽ {end} വരെ", + "search_filter_date_title": "ഒരു തീയതി പരിധി തിരഞ്ഞെടുക്കുക", + "search_filter_display_option_not_in_album": "ആൽബത്തിൽ ഇല്ല", + "search_filter_display_options": "പ്രദർശന ഓപ്ഷനുകൾ", + "search_filter_filename": "ഫയൽ നാമം ഉപയോഗിച്ച് തിരയുക", + "search_filter_location": "സ്ഥാനം", + "search_filter_location_title": "സ്ഥാനം തിരഞ്ഞെടുക്കുക", + "search_filter_media_type": "മീഡിയ തരം", + "search_filter_media_type_title": "മീഡിയ തരം തിരഞ്ഞെടുക്കുക", + "search_filter_people_title": "ആളുകളെ തിരഞ്ഞെടുക്കുക", + "search_for": "ഇതിനായി തിരയുക", + "search_for_existing_person": "നിലവിലുള്ള വ്യക്തിക്കായി തിരയുക", + "search_no_more_result": "കൂടുതൽ ഫലങ്ങളില്ല", + "search_no_people": "ആളുകളില്ല", + "search_no_people_named": "\"{name}\" എന്ന് പേരുള്ള ആളുകളില്ല", + "search_no_result": "ഫലങ്ങളൊന്നും കണ്ടെത്തിയില്ല, മറ്റൊരു തിരയൽ പദമോ സംയോജനമോ ഉപയോഗിച്ച് ശ്രമിക്കുക", + "search_options": "തിരയൽ ഓപ്ഷനുകൾ", + "search_page_categories": "വിഭാഗങ്ങൾ", + "search_page_motion_photos": "ചലിക്കുന്ന ഫോട്ടോകൾ", + "search_page_no_objects": "വസ്തുക്കളുടെ വിവരങ്ങൾ ലഭ്യമല്ല", + "search_page_no_places": "സ്ഥലങ്ങളുടെ വിവരങ്ങൾ ലഭ്യമല്ല", + "search_page_screenshots": "സ്ക്രീൻഷോട്ടുകൾ", + "search_page_search_photos_videos": "നിങ്ങളുടെ ഫോട്ടോകൾക്കും വീഡിയോകൾക്കുമായി തിരയുക", + "search_page_selfies": "സെൽഫികൾ", + "search_page_things": "വസ്തുക്കൾ", + "search_page_view_all_button": "എല്ലാം കാണുക", + "search_page_your_activity": "നിങ്ങളുടെ പ്രവർത്തനം", + "search_page_your_map": "നിങ്ങളുടെ മാപ്പ്", + "search_people": "ആളുകളെ തിരയുക", + "search_places": "സ്ഥലങ്ങൾ തിരയുക", + "search_rating": "റേറ്റിംഗ് അനുസരിച്ച് തിരയുക...", + "search_result_page_new_search_hint": "പുതിയ തിരയൽ", + "search_settings": "തിരയൽ ക്രമീകരണങ്ങൾ", + "search_state": "സംസ്ഥാനം തിരയുക...", + "search_suggestion_list_smart_search_hint_1": "സ്മാർട്ട് സെർച്ച് ഡിഫോൾട്ടായി പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുന്നു, മെറ്റാഡാറ്റയ്ക്കായി തിരയാൻ ഈ വാക്യഘടന ഉപയോഗിക്കുക ", + "search_suggestion_list_smart_search_hint_2": "m:നിങ്ങളുടെ-തിരയൽ-പദം", + "search_tags": "ടാഗുകൾക്കായി തിരയുക...", + "search_timezone": "സമയമേഖലയ്ക്കായി തിരയുക...", + "search_type": "തിരയൽ തരം", + "search_your_photos": "നിങ്ങളുടെ ഫോട്ടോകൾ തിരയുക", + "searching_locales": "ലൊക്കേലുകൾക്കായി തിരയുന്നു...", + "second": "സെക്കന്റ്", + "see_all_people": "എല്ലാ ആളുകളെയും കാണുക", + "select": "തിരഞ്ഞെടുക്കുക", + "select_album_cover": "ആൽബം കവർ തിരഞ്ഞെടുക്കുക", + "select_all": "എല്ലാം തിരഞ്ഞെടുക്കുക", + "select_all_duplicates": "എല്ലാ ഡ്യൂപ്ലിക്കേറ്റുകളും തിരഞ്ഞെടുക്കുക", + "select_all_in": "{group}-ലെ എല്ലാം തിരഞ്ഞെടുക്കുക", + "select_avatar_color": "അവതാർ നിറം തിരഞ്ഞെടുക്കുക", + "select_face": "മുഖം തിരഞ്ഞെടുക്കുക", + "select_featured_photo": "ഫീച്ചർ ചെയ്ത ഫോട്ടോ തിരഞ്ഞെടുക്കുക", + "select_from_computer": "കമ്പ്യൂട്ടറിൽ നിന്ന് തിരഞ്ഞെടുക്കുക", + "select_keep_all": "എല്ലാം സൂക്ഷിക്കാൻ തിരഞ്ഞെടുക്കുക", + "select_library_owner": "ലൈബ്രറി ഉടമയെ തിരഞ്ഞെടുക്കുക", + "select_new_face": "പുതിയ മുഖം തിരഞ്ഞെടുക്കുക", + "select_person_to_tag": "ടാഗ് ചെയ്യാൻ ഒരു വ്യക്തിയെ തിരഞ്ഞെടുക്കുക", + "select_photos": "ഫോട്ടോകൾ തിരഞ്ഞെടുക്കുക", + "select_trash_all": "എല്ലാം ട്രാഷ് ചെയ്യാൻ തിരഞ്ഞെടുക്കുക", + "select_user_for_sharing_page_err_album": "ആൽബം ഉണ്ടാക്കുന്നതിൽ പരാജയപ്പെട്ടു", + "selected": "തിരഞ്ഞെടുത്തു", + "selected_count": "{count, plural, other {# എണ്ണം തിരഞ്ഞെടുത്തു}}", + "selected_gps_coordinates": "തിരഞ്ഞെടുത്ത GPS കോർഡിനേറ്റുകൾ", + "send_message": "സന്ദേശം അയക്കുക", + "send_welcome_email": "സ്വാഗത ഇമെയിൽ അയക്കുക", + "server_endpoint": "സെർവർ എൻഡ്‌പോയിന്റ്", + "server_info_box_app_version": "ആപ്പ് പതിപ്പ്", + "server_info_box_server_url": "സെർവർ URL", + "server_offline": "സെർവർ ഓഫ്‌ലൈൻ", + "server_online": "സെർവർ ഓൺലൈൻ", + "server_privacy": "സെർവർ സ്വകാര്യത", + "server_stats": "സെർവർ സ്ഥിതിവിവരക്കണക്കുകൾ", + "server_version": "സെർവർ പതിപ്പ്", + "set": "സജ്ജമാക്കുക", + "set_as_album_cover": "ആൽബം കവറായി സജ്ജമാക്കുക", + "set_as_featured_photo": "ഫീച്ചർ ചെയ്ത ഫോട്ടോയായി സജ്ജമാക്കുക", + "set_as_profile_picture": "പ്രൊഫൈൽ ചിത്രമായി സജ്ജമാക്കുക", + "set_date_of_birth": "ജനനത്തീയതി സജ്ജമാക്കുക", + "set_profile_picture": "പ്രൊഫൈൽ ചിത്രം സജ്ജമാക്കുക", + "set_slideshow_to_fullscreen": "സ്ലൈഡ്‌ഷോ ഫുൾസ്ക്രീനായി സജ്ജമാക്കുക", + "set_stack_primary_asset": "പ്രധാന അസറ്റായി സജ്ജമാക്കുക", + "setting_image_viewer_help": "വിശദാംശ വ്യൂവർ ആദ്യം ചെറിയ തംബ്നെയിൽ ലോഡുചെയ്യുന്നു, തുടർന്ന് ഇടത്തരം പ്രിവ്യൂ (പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ), ഒടുവിൽ യഥാർത്ഥ ചിത്രം (പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ) ലോഡുചെയ്യുന്നു.", + "setting_image_viewer_original_subtitle": "യഥാർത്ഥ പൂർണ്ണ-റെസല്യൂഷൻ ചിത്രം (വലുത്!) ലോഡുചെയ്യാൻ പ്രവർത്തനക്ഷമമാക്കുക. ഡാറ്റ ഉപയോഗം (നെറ്റ്‌വർക്കും ഉപകരണ കാഷെയും) കുറയ്ക്കാൻ പ്രവർത്തനരഹിതമാക്കുക.", + "setting_image_viewer_original_title": "യഥാർത്ഥ ചിത്രം ലോഡുചെയ്യുക", + "setting_image_viewer_preview_subtitle": "ഇടത്തരം റെസല്യൂഷനുള്ള ചിത്രം ലോഡുചെയ്യാൻ പ്രവർത്തനക്ഷമമാക്കുക. ഒന്നുകിൽ യഥാർത്ഥ ചിത്രം നേരിട്ട് ലോഡുചെയ്യുന്നതിനോ അല്ലെങ്കിൽ തംബ്നെയിൽ മാത്രം ഉപയോഗിക്കുന്നതിനോ പ്രവർത്തനരഹിതമാക്കുക.", + "setting_image_viewer_preview_title": "പ്രിവ്യൂ ചിത്രം ലോഡുചെയ്യുക", + "setting_image_viewer_title": "ചിത്രങ്ങൾ", + "setting_languages_apply": "പ്രയോഗിക്കുക", + "setting_languages_subtitle": "ആപ്പിന്റെ ഭാഷ മാറ്റുക", + "setting_notifications_notify_failures_grace_period": "പശ്ചാത്തല ബാക്കപ്പ് പരാജയങ്ങൾ അറിയിക്കുക: {duration}", + "setting_notifications_notify_hours": "{count} മണിക്കൂർ", + "setting_notifications_notify_immediately": "ഉടനടി", + "setting_notifications_notify_minutes": "{count} മിനിറ്റ്", + "setting_notifications_notify_never": "ഒരിക്കലും", + "setting_notifications_notify_seconds": "{count} സെക്കൻഡ്", + "setting_notifications_single_progress_subtitle": "ഓരോ അസറ്റിന്റെയും വിശദമായ അപ്‌ലോഡ് പുരോഗതി വിവരം", + "setting_notifications_single_progress_title": "പശ്ചാത്തല ബാക്കപ്പിന്റെ വിശദമായ പുരോഗതി കാണിക്കുക", + "setting_notifications_subtitle": "നിങ്ങളുടെ അറിയിപ്പ് മുൻഗണനകൾ ക്രമീകരിക്കുക", + "setting_notifications_total_progress_subtitle": "മൊത്തത്തിലുള്ള അപ്‌ലോഡ് പുരോഗതി (ചെയ്തത്/ആകെ അസറ്റുകൾ)", + "setting_notifications_total_progress_title": "പശ്ചാത്തല ബാക്കപ്പിന്റെ മൊത്തം പുരോഗതി കാണിക്കുക", + "setting_video_viewer_looping_title": "ലൂപ്പിംഗ്", + "setting_video_viewer_original_video_subtitle": "സെർവറിൽ നിന്ന് ഒരു വീഡിയോ സ്ട്രീം ചെയ്യുമ്പോൾ, ഒരു ട്രാൻസ്‌കോഡ് ലഭ്യമാണെങ്കിലും യഥാർത്ഥ വീഡിയോ പ്ലേ ചെയ്യുക. ഇത് ബഫറിംഗിന് കാരണമായേക്കാം. പ്രാദേശികമായി ലഭ്യമായ വീഡിയോകൾ ഈ ക്രമീകരണം പരിഗണിക്കാതെ തന്നെ യഥാർത്ഥ ഗുണമേന്മയിൽ പ്ലേ ചെയ്യും.", + "setting_video_viewer_original_video_title": "യഥാർത്ഥ വീഡിയോ നിർബന്ധമാക്കുക", + "settings": "ക്രമീകരണങ്ങൾ", + "settings_require_restart": "ഈ ക്രമീകരണം പ്രയോഗിക്കാൻ ദയവായി Immich പുനരാരംഭിക്കുക", + "settings_saved": "ക്രമീകരണങ്ങൾ സേവ് ചെയ്തു", + "setup_pin_code": "ഒരു പിൻ കോഡ് സജ്ജീകരിക്കുക", + "share": "പങ്കിടുക", + "share_action_prompt": "{count} അസറ്റുകൾ പങ്കിട്ടു", + "share_add_photos": "ഫോട്ടോകൾ ചേർക്കുക", + "share_assets_selected": "{count} എണ്ണം തിരഞ്ഞെടുത്തു", + "share_dialog_preparing": "തയ്യാറാക്കുന്നു...", + "share_link": "ലിങ്ക് പങ്കിടുക", + "shared": "പങ്കിട്ടത്", + "shared_album_activities_input_disable": "അഭിപ്രായം പ്രവർത്തനരഹിതമാക്കി", + "shared_album_activity_remove_content": "ഈ പ്രവർത്തനം ഇല്ലാതാക്കണോ?", + "shared_album_activity_remove_title": "പ്രവർത്തനം ഇല്ലാതാക്കുക", + "shared_album_section_people_action_error": "ആൽബത്തിൽ നിന്ന് വിട്ടുപോകുന്നതിനോ/നീക്കംചെയ്യുന്നതിനോ പിശക്", + "shared_album_section_people_action_leave": "ആൽബത്തിൽ നിന്ന് ഉപയോക്താവിനെ നീക്കം ചെയ്യുക", + "shared_album_section_people_action_remove_user": "ആൽബത്തിൽ നിന്ന് ഉപയോക്താവിനെ നീക്കം ചെയ്യുക", + "shared_album_section_people_title": "ആളുകൾ", + "shared_by": "പങ്കിട്ടത്", + "shared_by_user": "{user} പങ്കിട്ടു", + "shared_by_you": "നിങ്ങൾ പങ്കിട്ടത്", + "shared_from_partner": "{partner}-ൽ നിന്നുള്ള ഫോട്ടോകൾ", + "shared_intent_upload_button_progress_text": "{current}/{total} അപ്‌ലോഡ് ചെയ്തു", + "shared_link_app_bar_title": "പങ്കിട്ട ലിങ്കുകൾ", + "shared_link_clipboard_copied_massage": "ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി", + "shared_link_clipboard_text": "ലിങ്ക്: {link}\nപാസ്‌വേഡ്: {password}", + "shared_link_create_error": "പങ്കിട്ട ലിങ്ക് ഉണ്ടാക്കുന്നതിൽ പിശക്", + "shared_link_custom_url_description": "ഒരു കസ്റ്റം URL ഉപയോഗിച്ച് ഈ പങ്കിട്ട ലിങ്ക് ആക്‌സസ് ചെയ്യുക", + "shared_link_edit_description_hint": "പങ്കിടലിന്റെ വിവരണം നൽകുക", + "shared_link_edit_expire_after_option_day": "1 ദിവസം", + "shared_link_edit_expire_after_option_days": "{count} ദിവസങ്ങൾ", + "shared_link_edit_expire_after_option_hour": "1 മണിക്കൂർ", + "shared_link_edit_expire_after_option_hours": "{count} മണിക്കൂറുകൾ", + "shared_link_edit_expire_after_option_minute": "1 മിനിറ്റ്", + "shared_link_edit_expire_after_option_minutes": "{count} മിനിറ്റുകൾ", + "shared_link_edit_expire_after_option_months": "{count} മാസങ്ങൾ", + "shared_link_edit_expire_after_option_year": "{count} വർഷം", + "shared_link_edit_password_hint": "പങ്കിടലിന്റെ പാസ്‌വേഡ് നൽകുക", + "shared_link_edit_submit_button": "ലിങ്ക് അപ്ഡേറ്റ് ചെയ്യുക", + "shared_link_error_server_url_fetch": "സെർവർ url ലഭ്യമാക്കാൻ കഴിയില്ല", + "shared_link_expires_day": "{count} ദിവസത്തിനുള്ളിൽ കാലഹരണപ്പെടും", + "shared_link_expires_days": "{count} ദിവസങ്ങൾക്കുള്ളിൽ കാലഹരണപ്പെടും", + "shared_link_expires_hour": "{count} മണിക്കൂറിനുള്ളിൽ കാലഹരണപ്പെടും", + "shared_link_expires_hours": "{count} മണിക്കൂറുകൾക്കുള്ളിൽ കാലഹരണപ്പെടും", + "shared_link_expires_minute": "{count} മിനിറ്റിനുള്ളിൽ കാലഹരണപ്പെടും", + "shared_link_expires_minutes": "{count} മിനിറ്റുകൾക്കുള്ളിൽ കാലഹരണപ്പെടും", + "shared_link_expires_never": "കാലഹരണപ്പെടില്ല ∞", + "shared_link_expires_second": "{count} സെക്കൻഡിനുള്ളിൽ കാലഹരണപ്പെടും", + "shared_link_expires_seconds": "{count} സെക്കൻഡുകൾക്കുള്ളിൽ കാലഹരണപ്പെടും", + "shared_link_individual_shared": "വ്യക്തിഗതമായി പങ്കിട്ടത്", + "shared_link_info_chip_metadata": "EXIF", + "shared_link_manage_links": "പങ്കിട്ട ലിങ്കുകൾ കൈകാര്യം ചെയ്യുക", + "shared_link_options": "പങ്കിട്ട ലിങ്ക് ഓപ്ഷനുകൾ", + "shared_link_password_description": "ഈ പങ്കിട്ട ലിങ്ക് ആക്‌സസ് ചെയ്യാൻ ഒരു പാസ്‌വേഡ് ആവശ്യമാണ്", + "shared_links": "പങ്കിട്ട ലിങ്കുകൾ", + "shared_links_description": "ഒരു ലിങ്ക് ഉപയോഗിച്ച് ഫോട്ടോകളും വീഡിയോകളും പങ്കിടുക", + "shared_photos_and_videos_count": "{assetCount, plural, other {പങ്കിട്ട # ഫോട്ടോകളും വീഡിയോകളും.}}", + "shared_with_me": "എനിക്കായി പങ്കിട്ടത്", + "shared_with_partner": "{partner}-മായി പങ്കിട്ടു", + "sharing": "പങ്കിടൽ", + "sharing_enter_password": "ഈ പേജ് കാണുന്നതിന് ദയവായി പാസ്‌വേഡ് നൽകുക.", + "sharing_page_album": "പങ്കിട്ട ആൽബങ്ങൾ", + "sharing_page_description": "നിങ്ങളുടെ നെറ്റ്‌വർക്കിലെ ആളുകളുമായി ഫോട്ടോകളും വീഡിയോകളും പങ്കിടാൻ പങ്കിട്ട ആൽബങ്ങൾ ഉണ്ടാക്കുക.", + "sharing_page_empty_list": "ശൂന്യമായ ലിസ്റ്റ്", + "sharing_sidebar_description": "സൈഡ്‌ബാറിൽ 'പങ്കിടൽ' എന്നതിലേക്ക് ഒരു ലിങ്ക് പ്രദർശിപ്പിക്കുക", + "sharing_silver_appbar_create_shared_album": "പുതിയ പങ്കിട്ട ആൽബം", + "sharing_silver_appbar_share_partner": "പങ്കാളിയുമായി പങ്കിടുക", + "shift_to_permanent_delete": "അസറ്റ് ശാശ്വതമായി ഇല്ലാതാക്കാൻ ⇧ അമർത്തുക", + "show_album_options": "ആൽബം ഓപ്ഷനുകൾ കാണിക്കുക", + "show_albums": "ആൽബങ്ങൾ കാണിക്കുക", + "show_all_people": "എല്ലാ ആളുകളെയും കാണിക്കുക", + "show_and_hide_people": "ആളുകളെ കാണിക്കുകയും മറയ്ക്കുകയും ചെയ്യുക", + "show_file_location": "ഫയലിന്റെ സ്ഥാനം കാണിക്കുക", + "show_gallery": "ഗാലറി കാണിക്കുക", + "show_hidden_people": "മറച്ച ആളുകളെ കാണിക്കുക", + "show_in_timeline": "ടൈംലൈനിൽ കാണിക്കുക", + "show_in_timeline_setting_description": "ഈ ഉപയോക്താവിൽ നിന്നുള്ള ഫോട്ടോകളും വീഡിയോകളും നിങ്ങളുടെ ടൈംലൈനിൽ കാണിക്കുക", + "show_keyboard_shortcuts": "കീബോർഡ് കുറുക്കുവഴികൾ കാണിക്കുക", + "show_metadata": "മെറ്റാഡാറ്റ കാണിക്കുക", + "show_or_hide_info": "വിവരങ്ങൾ കാണിക്കുക അല്ലെങ്കിൽ മറയ്ക്കുക", + "show_password": "പാസ്‌വേഡ് കാണിക്കുക", + "show_person_options": "വ്യക്തിയുടെ ഓപ്ഷനുകൾ കാണിക്കുക", + "show_progress_bar": "പുരോഗതി ബാർ കാണിക്കുക", + "show_search_options": "തിരയൽ ഓപ്ഷനുകൾ കാണിക്കുക", + "show_shared_links": "പങ്കിട്ട ലിങ്കുകൾ കാണിക്കുക", + "show_slideshow_transition": "സ്ലൈഡ്‌ഷോ സംക്രമണം കാണിക്കുക", + "show_supporter_badge": "സഹായിയുടെ ബാഡ്ജ്", + "show_supporter_badge_description": "ഒരു സഹായിയുടെ ബാഡ്ജ് കാണിക്കുക", + "show_text_search_menu": "ടെക്സ്റ്റ് തിരയൽ മെനു കാണിക്കുക", + "shuffle": "ഷഫിൾ ചെയ്യുക", + "sidebar": "സൈഡ്‌ബാർ", + "sidebar_display_description": "സൈഡ്‌ബാറിലെ കാഴ്‌ചയിലേക്ക് ഒരു ലിങ്ക് പ്രദർശിപ്പിക്കുക", + "sign_out": "സൈൻ ഔട്ട്", + "sign_up": "സൈൻ അപ്പ് ചെയ്യുക", + "size": "വലിപ്പം", + "skip_to_content": "ഉള്ളടക്കത്തിലേക്ക് പോകുക", + "skip_to_folders": "ഫോൾഡറുകളിലേക്ക് പോകുക", + "skip_to_tags": "ടാഗുകളിലേക്ക് പോകുക", + "slideshow": "സ്ലൈഡ്‌ഷോ", + "slideshow_settings": "സ്ലൈഡ്‌ഷോ ക്രമീകരണങ്ങൾ", + "sort_albums_by": "ആൽബങ്ങളെ ഇതനുസരിച്ച് ക്രമീകരിക്കുക...", + "sort_created": "സൃഷ്ടിച്ച തീയതി", + "sort_items": "ഇനങ്ങളുടെ എണ്ണം", + "sort_modified": "മാറ്റം വരുത്തിയ തീയതി", + "sort_newest": "ഏറ്റവും പുതിയ ഫോട്ടോ", + "sort_oldest": "ഏറ്റവും പഴയ ഫോട്ടോ", + "sort_people_by_similarity": "സാമ്യം അനുസരിച്ച് ആളുകളെ ക്രമീകരിക്കുക", + "sort_recent": "ഏറ്റവും പുതിയ ഫോട്ടോ", + "sort_title": "ശീർഷകം", + "source": "ഉറവിടം", + "stack": "സ്റ്റാക്ക്", + "stack_action_prompt": "{count} എണ്ണം സ്റ്റാക്ക് ചെയ്തു", + "stack_duplicates": "ഡ്യൂപ്ലിക്കേറ്റുകൾ സ്റ്റാക്ക് ചെയ്യുക", + "stack_select_one_photo": "സ്റ്റാക്കിനായി ഒരു പ്രധാന ഫോട്ടോ തിരഞ്ഞെടുക്കുക", + "stack_selected_photos": "തിരഞ്ഞെടുത്ത ഫോട്ടോകൾ സ്റ്റാക്ക് ചെയ്യുക", + "stacked_assets_count": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} സ്റ്റാക്ക് ചെയ്തു", + "stacktrace": "സ്റ്റാക്ക്ട്രേസ്", + "start": "ആരംഭിക്കുക", + "start_date": "ആരംഭ തീയതി", + "start_date_before_end_date": "ആരംഭ തീയതി അവസാന തീയതിക്ക് മുമ്പായിരിക്കണം", + "state": "സംസ്ഥാനം", + "status": "നില", + "stop_casting": "കാസ്റ്റിംഗ് നിർത്തുക", + "stop_motion_photo": "ചലിക്കുന്ന ഫോട്ടോ നിർത്തുക", + "stop_photo_sharing": "നിങ്ങളുടെ ഫോട്ടോകൾ പങ്കിടുന്നത് നിർത്തണോ?", + "stop_photo_sharing_description": "{partner}-ക്ക് ഇനി നിങ്ങളുടെ ഫോട്ടോകൾ ആക്‌സസ് ചെയ്യാൻ കഴിയില്ല.", + "stop_sharing_photos_with_user": "ഈ ഉപയോക്താവുമായി നിങ്ങളുടെ ഫോട്ടോകൾ പങ്കിടുന്നത് നിർത്തുക", + "storage": "സംഭരണ സ്ഥലം", + "storage_label": "സ്റ്റോറേജ് ലേബൽ", + "storage_quota": "സ്റ്റോറേജ് ക്വാട്ട", + "storage_usage": "{available}-ൽ {used} ഉപയോഗിച്ചു", + "submit": "സമർപ്പിക്കുക", + "success": "വിജയം", + "suggestions": "നിർദ്ദേശങ്ങൾ", + "sunrise_on_the_beach": "ബീച്ചിലെ സൂര്യോദയം", + "support": "പിന്തുണ", + "support_and_feedback": "പിന്തുണയും അഭിപ്രായവും", + "support_third_party_description": "നിങ്ങളുടെ Immich ഇൻസ്റ്റാളേഷൻ ഒരു മൂന്നാം കക്ഷി പാക്കേജ് ചെയ്തതാണ്. നിങ്ങൾ അനുഭവിക്കുന്ന പ്രശ്നങ്ങൾ ആ പാക്കേജ് കാരണമാകാം, അതിനാൽ താഴെയുള്ള ലിങ്കുകൾ ഉപയോഗിച്ച് ആദ്യം അവരുമായി പ്രശ്നങ്ങൾ ഉന്നയിക്കുക.", + "swap_merge_direction": "ലയിപ്പിക്കൽ ദിശ മാറ്റുക", + "sync": "സിങ്ക്", + "sync_albums": "ആൽബങ്ങൾ സിങ്ക് ചെയ്യുക", + "sync_albums_manual_subtitle": "അപ്‌ലോഡ് ചെയ്ത എല്ലാ വീഡിയോകളും ഫോട്ടോകളും തിരഞ്ഞെടുത്ത ബാക്കപ്പ് ആൽബങ്ങളിലേക്ക് സിങ്ക് ചെയ്യുക", + "sync_local": "പ്രാദേശികമായി സിങ്ക് ചെയ്യുക", + "sync_remote": "റിമോട്ടായി സിങ്ക് ചെയ്യുക", + "sync_status": "സിങ്ക് നില", + "sync_status_subtitle": "സിങ്ക് സിസ്റ്റം കാണുക, കൈകാര്യം ചെയ്യുക", + "sync_upload_album_setting_subtitle": "നിങ്ങളുടെ ഫോട്ടോകളും വീഡിയോകളും Immich-ലെ തിരഞ്ഞെടുത്ത ആൽബങ്ങളിലേക്ക് ഉണ്ടാക്കി അപ്‌ലോഡ് ചെയ്യുക", + "tag": "ടാഗ്", + "tag_assets": "അസറ്റുകൾ ടാഗ് ചെയ്യുക", + "tag_created": "{tag} എന്ന ടാഗ് ഉണ്ടാക്കി", + "tag_feature_description": "യുക്തിസഹമായ ടാഗ് വിഷയങ്ങൾ അനുസരിച്ച് ഗ്രൂപ്പ് ചെയ്ത ഫോട്ടോകളും വീഡിയോകളും ബ്രൗസുചെയ്യുന്നു", + "tag_not_found_question": "ഒരു ടാഗ് കണ്ടെത്താൻ കഴിയുന്നില്ലേ? ഒരു പുതിയ ടാഗ് ഉണ്ടാക്കുക.", + "tag_people": "ആളുകളെ ടാഗ് ചെയ്യുക", + "tag_updated": "{tag} എന്ന ടാഗ് അപ്ഡേറ്റ് ചെയ്തു", + "tagged_assets": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} ടാഗ് ചെയ്തു", + "tags": "ടാഗുകൾ", + "tap_to_run_job": "ജോലി പ്രവർത്തിപ്പിക്കാൻ ടാപ്പുചെയ്യുക", + "template": "ടെംപ്ലേറ്റ്", + "theme": "തീം", + "theme_selection": "തീം തിരഞ്ഞെടുക്കൽ", + "theme_selection_description": "നിങ്ങളുടെ ബ്രൗസറിന്റെ സിസ്റ്റം മുൻഗണന അനുസരിച്ച് തീം ലൈറ്റ് അല്ലെങ്കിൽ ഡാർക്ക് ആയി യാന്ത്രികമായി സജ്ജമാക്കുക", + "theme_setting_asset_list_storage_indicator_title": "അസറ്റ് ടൈലുകളിൽ സ്റ്റോറേജ് ഇൻഡിക്കേറ്റർ കാണിക്കുക", + "theme_setting_asset_list_tiles_per_row_title": "ഓരോ വരിയിലും അസറ്റുകളുടെ എണ്ണം ({count})", + "theme_setting_colorful_interface_subtitle": "പശ്ചാത്തല പ്രതലങ്ങളിൽ പ്രധാന നിറം പ്രയോഗിക്കുക.", + "theme_setting_colorful_interface_title": "വർണ്ണാഭമായ ഇന്റർഫേസ്", + "theme_setting_image_viewer_quality_subtitle": "വിശദാംശ ഇമേജ് വ്യൂവറിന്റെ ഗുണമേന്മ ക്രമീകരിക്കുക", + "theme_setting_image_viewer_quality_title": "ഇമേജ് വ്യൂവർ ഗുണമേന്മ", + "theme_setting_primary_color_subtitle": "പ്രധാന പ്രവർത്തനങ്ങൾക്കും ആക്‌സന്റുകൾക്കുമായി ഒരു നിറം തിരഞ്ഞെടുക്കുക.", + "theme_setting_primary_color_title": "പ്രധാന നിറം", + "theme_setting_system_primary_color_title": "സിസ്റ്റം നിറം ഉപയോഗിക്കുക", + "theme_setting_system_theme_switch": "യാന്ത്രികം (സിസ്റ്റം ക്രമീകരണം പിന്തുടരുക)", + "theme_setting_theme_subtitle": "ആപ്പിന്റെ തീം ക്രമീകരണം തിരഞ്ഞെടുക്കുക", + "theme_setting_three_stage_loading_subtitle": "മൂന്ന്-ഘട്ട ലോഡിംഗ് പ്രകടനം വർദ്ധിപ്പിച്ചേക്കാം, പക്ഷേ നെറ്റ്‌വർക്ക് ലോഡ് ഗണ്യമായി വർദ്ധിപ്പിക്കുന്നു", + "theme_setting_three_stage_loading_title": "മൂന്ന്-ഘട്ട ലോഡിംഗ് പ്രവർത്തനക്ഷമമാക്കുക", + "they_will_be_merged_together": "അവയെ ഒരുമിച്ച് ലയിപ്പിക്കും", + "third_party_resources": "മൂന്നാം കക്ഷി ഉറവിടങ്ങൾ", + "time_based_memories": "സമയം അടിസ്ഥാനമാക്കിയുള്ള ഓർമ്മകൾ", + "timeline": "ടൈംലൈൻ", + "timezone": "സമയമേഖല", + "to_archive": "ആർക്കൈവ് ചെയ്യുക", + "to_change_password": "പാസ്‌വേഡ് മാറ്റുക", + "to_favorite": "പ്രിയപ്പെട്ടതാക്കുക", + "to_login": "ലോഗിൻ", + "to_multi_select": "ഒന്നിലധികം തിരഞ്ഞെടുക്കാൻ", + "to_parent": "പാരന്റിലേക്ക് പോകുക", + "to_select": "തിരഞ്ഞെടുക്കാൻ", + "to_trash": "ട്രാഷ് ചെയ്യുക", + "toggle_settings": "ക്രമീകരണങ്ങൾ ടോഗിൾ ചെയ്യുക", + "total": "ആകെ", + "total_usage": "ആകെ ഉപയോഗം", + "trash": "ട്രാഷ്", + "trash_action_prompt": "{count} എണ്ണം ട്രാഷിലേക്ക് മാറ്റി", + "trash_all": "എല്ലാം ട്രാഷ് ചെയ്യുക", + "trash_count": "ട്രാഷ് ({count, number})", + "trash_delete_asset": "അസറ്റ് ട്രാഷ് ചെയ്യുക/ഇല്ലാതാക്കുക", + "trash_emptied": "ട്രാഷ് ശൂന്യമാക്കി", + "trash_no_results_message": "ട്രാഷ് ചെയ്ത ഫോട്ടോകളും വീഡിയോകളും ഇവിടെ കാണിക്കും.", + "trash_page_delete_all": "എല്ലാം ഇല്ലാതാക്കുക", + "trash_page_empty_trash_dialog_content": "നിങ്ങളുടെ ട്രാഷ് ചെയ്ത അസറ്റുകൾ ശൂന്യമാക്കണോ? ഈ ഇനങ്ങൾ Immich-ൽ നിന്ന് ശാശ്വതമായി നീക്കം ചെയ്യപ്പെടും", + "trash_page_info": "ട്രാഷ് ചെയ്ത ഇനങ്ങൾ {days} ദിവസങ്ങൾക്ക് ശേഷം ശാശ്വതമായി ഇല്ലാതാക്കപ്പെടും", + "trash_page_no_assets": "ട്രാഷ് ചെയ്ത അസറ്റുകളൊന്നുമില്ല", + "trash_page_restore_all": "എല്ലാം പുനഃസ്ഥാപിക്കുക", + "trash_page_select_assets_btn": "അസറ്റുകൾ തിരഞ്ഞെടുക്കുക", + "trash_page_title": "ട്രാഷ് ({count})", + "trashed_items_will_be_permanently_deleted_after": "ട്രാഷ് ചെയ്ത ഇനങ്ങൾ {days, plural, one {# ദിവസത്തിന്} other {# ദിവസങ്ങൾക്ക്}} ശേഷം ശാശ്വതമായി ഇല്ലാതാക്കപ്പെടും.", + "troubleshoot": "ട്രബിൾഷൂട്ട്", + "type": "തരം", + "unable_to_change_pin_code": "പിൻ കോഡ് മാറ്റാൻ കഴിയില്ല", + "unable_to_setup_pin_code": "പിൻ കോഡ് സജ്ജീകരിക്കാൻ കഴിയില്ല", + "unarchive": "അൺആർക്കൈവ് ചെയ്യുക", + "unarchive_action_prompt": "{count} എണ്ണം ആർക്കൈവിൽ നിന്ന് നീക്കം ചെയ്തു", + "unarchived_count": "{count, plural, other {അൺആർക്കൈവ് ചെയ്തവ #}}", + "undo": "തിരികെചെയ്യുക", + "unfavorite": "പ്രിയപ്പെട്ടതല്ലാതാക്കുക", + "unfavorite_action_prompt": "{count} എണ്ണം പ്രിയപ്പെട്ടവയിൽ നിന്ന് നീക്കം ചെയ്തു", + "unhide_person": "വ്യക്തിയെ മറവിൽനിന്ന് മാറ്റുക", + "unknown": "അജ്ഞാതം", + "unknown_country": "അജ്ഞാത രാജ്യം", + "unknown_year": "അജ്ഞാത വർഷം", + "unlimited": "പരിധിയില്ലാത്തത്", + "unlink_motion_video": "ചലിക്കുന്ന വീഡിയോ അൺലിങ്ക് ചെയ്യുക", + "unlink_oauth": "OAuth അൺലിങ്ക് ചെയ്യുക", + "unlinked_oauth_account": "അൺലിങ്ക് ചെയ്ത OAuth അക്കൗണ്ട്", + "unmute_memories": "ഓർമ്മകൾ ശബ്ദമുള്ളതാക്കുക", + "unnamed_album": "പേരില്ലാത്ത ആൽബം", + "unnamed_album_delete_confirmation": "ഈ ആൽബം ഇല്ലാതാക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "unnamed_share": "പേരില്ലാത്ത പങ്കിടൽ", + "unsaved_change": "സേവ് ചെയ്യാത്ത മാറ്റം", + "unselect_all": "എല്ലാം തിരഞ്ഞെടുത്തത് മാറ്റുക", + "unselect_all_duplicates": "എല്ലാ ഡ്യൂപ്ലിക്കേറ്റുകളും തിരഞ്ഞെടുത്തത് മാറ്റുക", + "unselect_all_in": "{group}-ലെ എല്ലാം തിരഞ്ഞെടുത്തത് മാറ്റുക", + "unstack": "അൺ-സ്റ്റാക്ക് ചെയ്യുക", + "unstack_action_prompt": "{count} എണ്ണം അൺ-സ്റ്റാക്ക് ചെയ്തു", + "unstacked_assets_count": "{count, plural, one {# അസറ്റ്} other {# അസറ്റുകൾ}} അൺ-സ്റ്റാക്ക് ചെയ്തു", + "untagged": "ടാഗ് ചെയ്തിട്ടില്ല", + "up_next": "അടുത്തത്", + "update_location_action_prompt": "തിരഞ്ഞെടുത്ത {count} അസറ്റുകളുടെ സ്ഥാനം ഇതുപയോഗിച്ച് അപ്ഡേറ്റ് ചെയ്യുക:", + "updated_at": "അപ്ഡേറ്റ് ചെയ്തത്", + "updated_password": "പാസ്‌വേഡ് അപ്ഡേറ്റ് ചെയ്തു", + "upload": "അപ്‌ലോഡ്", + "upload_action_prompt": "{count} എണ്ണം അപ്‌ലോഡിനായി ക്യൂവിൽ ചേർത്തു", + "upload_concurrency": "അപ്‌ലോഡ് കോൺകറൻസി", + "upload_details": "അപ്‌ലോഡ് വിശദാംശങ്ങൾ", + "upload_dialog_info": "തിരഞ്ഞെടുത്ത അസറ്റ്(കൾ) സെർവറിലേക്ക് ബാക്കപ്പ് ചെയ്യണോ?", + "upload_dialog_title": "അസറ്റ് അപ്‌ലോഡ് ചെയ്യുക", + "upload_errors": "അപ്‌ലോഡ് {count, plural, one {# പിശകോടെ} other {# പിശകുകളോടെ}} പൂർത്തിയായി, പുതിയ അപ്‌ലോഡ് അസറ്റുകൾ കാണുന്നതിന് പേജ് പുതുക്കുക.", + "upload_finished": "അപ്‌ലോഡ് കഴിഞ്ഞു", + "upload_progress": "ശേഷിക്കുന്നത് {remaining, number} - പ്രോസസ്സ് ചെയ്തത് {processed, number}/{total, number}", + "upload_skipped_duplicates": "{count, plural, one {# ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റ്} other {# ഡ്യൂപ്ലിക്കേറ്റ് അസറ്റുകൾ}} ഒഴിവാക്കി", + "upload_status_duplicates": "ഡ്യൂപ്ലിക്കേറ്റുകൾ", + "upload_status_errors": "പിശകുകൾ", + "upload_status_uploaded": "അപ്‌ലോഡ് ചെയ്തു", + "upload_success": "അപ്‌ലോഡ് വിജയിച്ചു, പുതിയ അപ്‌ലോഡ് അസറ്റുകൾ കാണുന്നതിന് പേജ് പുതുക്കുക.", + "upload_to_immich": "Immich-ലേക്ക് അപ്‌ലോഡ് ചെയ്യുക ({count})", + "uploading": "അപ്‌ലോഡ് ചെയ്യുന്നു", + "uploading_media": "മീഡിയ അപ്‌ലോഡ് ചെയ്യുന്നു", + "url": "യുആർഎൽ", + "usage": "ഉപയോഗം", + "use_biometric": "ബയോമെട്രിക് ഉപയോഗിക്കുക", + "use_current_connection": "നിലവിലെ കണക്ഷൻ ഉപയോഗിക്കുക", + "use_custom_date_range": "പകരം കസ്റ്റം തീയതി പരിധി ഉപയോഗിക്കുക", + "user": "ഉപയോക്താവ്", + "user_has_been_deleted": "ഈ ഉപയോക്താവിനെ ഇല്ലാതാക്കി.", + "user_id": "ഉപയോക്തൃ ഐഡി", + "user_liked": "{user} {type, select, photo {ഈ ഫോട്ടോ} video {ഈ വീഡിയോ} asset {ഈ അസറ്റ്} other {ഇത്}} ഇഷ്ടപ്പെട്ടു", + "user_pin_code_settings": "പിൻ കോഡ്", + "user_pin_code_settings_description": "നിങ്ങളുടെ പിൻ കോഡ് കൈകാര്യം ചെയ്യുക", + "user_privacy": "ഉപയോക്തൃ സ്വകാര്യത", + "user_purchase_settings": "വാങ്ങൽ", + "user_purchase_settings_description": "നിങ്ങളുടെ വാങ്ങൽ കൈകാര്യം ചെയ്യുക", + "user_role_set": "{user}-നെ {role} ആയി സജ്ജമാക്കി", + "user_usage_detail": "ഉപയോക്തൃ ഉപയോഗ വിശദാംശം", + "user_usage_stats": "അക്കൗണ്ട് ഉപയോഗ സ്ഥിതിവിവരക്കണക്കുകൾ", + "user_usage_stats_description": "അക്കൗണ്ട് ഉപയോഗ സ്ഥിതിവിവരക്കണക്കുകൾ കാണുക", + "username": "ഉപയോക്തൃനാമം", + "users": "ഉപയോക്താക്കൾ", + "users_added_to_album_count": "{count, plural, one {# ഉപയോക്താവിനെ} other {# ഉപയോക്താക്കളെ}} ആൽബത്തിലേക്ക് ചേർത്തു", + "utilities": "യൂട്ടിലിറ്റികൾ", + "validate": "സാധൂകരിക്കുക", + "validate_endpoint_error": "ദയവായി സാധുവായ ഒരു URL നൽകുക", + "variables": "വേരിയബിളുകൾ", + "version": "പതിപ്പ്", + "version_announcement_closing": "നിങ്ങളുടെ സുഹൃത്ത്, അലക്സ്", + "version_announcement_message": "നമസ്കാരം! Immich-ന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്. നിങ്ങളുടെ സജ്ജീകരണം ഏറ്റവും പുതിയതാണെന്ന് ഉറപ്പാക്കാൻ ദയവായി റിലീസ് നോട്ടുകൾ വായിക്കാൻ കുറച്ച് സമയമെടുക്കുക. ഇത് തെറ്റായ കോൺഫിഗറേഷനുകൾ ഒഴിവാക്കാൻ സഹായിക്കും, പ്രത്യേകിച്ചും നിങ്ങൾ വാച്ച്ടവർ അല്ലെങ്കിൽ നിങ്ങളുടെ Immich ഇൻസ്റ്റൻസ് യാന്ത്രികമായി അപ്ഡേറ്റ് ചെയ്യുന്ന ഏതെങ്കിലും സംവിധാനം ഉപയോഗിക്കുന്നുണ്ടെങ്കിൽ.", + "version_history": "പതിപ്പ് ചരിത്രം", + "version_history_item": "{date}-ന് {version} ഇൻസ്റ്റാൾ ചെയ്തു", + "video": "വീഡിയോ", + "video_hover_setting": "ഹോവർ ചെയ്യുമ്പോൾ വീഡിയോ തംബ്നെയിൽ പ്ലേ ചെയ്യുക", + "video_hover_setting_description": "മൗസ് ഒരു ഇനത്തിന് മുകളിലൂടെ ഹോവർ ചെയ്യുമ്പോൾ വീഡിയോ തംബ്നെയിൽ പ്ലേ ചെയ്യുക. പ്രവർത്തനരഹിതമാക്കിയാലും, പ്ലേ ഐക്കണിന് മുകളിലൂടെ ഹോവർ ചെയ്ത് പ്ലേബാക്ക് ആരംഭിക്കാൻ കഴിയും.", + "videos": "വീഡിയോകൾ", + "videos_count": "{count, plural, one {# വീഡിയോ} other {# വീഡിയോകൾ}}", + "view": "കാണുക", + "view_album": "ആൽബം കാണുക", + "view_all": "എല്ലാം കാണുക", + "view_all_users": "എല്ലാ ഉപയോക്താക്കളെയും കാണുക", + "view_details": "വിശദാംശങ്ങൾ കാണുക", + "view_in_timeline": "ടൈംലൈനിൽ കാണുക", + "view_link": "ലിങ്ക് കാണുക", + "view_links": "ലിങ്കുകൾ കാണുക", + "view_name": "കാണുക", + "view_next_asset": "അടുത്ത അസറ്റ് കാണുക", + "view_previous_asset": "മുമ്പത്തെ അസറ്റ് കാണുക", + "view_qr_code": "QR കോഡ് കാണുക", + "view_similar_photos": "സമാനമായ ഫോട്ടോകൾ കാണുക", + "view_stack": "സ്റ്റാക്ക് കാണുക", + "view_user": "ഉപയോക്താവിനെ കാണുക", + "viewer_remove_from_stack": "സ്റ്റാക്കിൽ നിന്ന് നീക്കം ചെയ്യുക", + "viewer_stack_use_as_main_asset": "പ്രധാന അസറ്റായി ഉപയോഗിക്കുക", + "viewer_unstack": "അൺ-സ്റ്റാക്ക് ചെയ്യുക", + "visibility_changed": "{count, plural, one {# വ്യക്തിയുടെ} other {# ആളുകളുടെ}} ദൃശ്യത മാറ്റി", "waiting": "കാത്തിരിക്കുന്നു", "warning": "മുന്നറിയിപ്പ്", "week": "ആഴ്ച", "welcome": "സ്വാഗതം", + "welcome_to_immich": "Immich-ലേക്ക് സ്വാഗതം", + "wifi_name": "വൈ-ഫൈയുടെ പേര്", + "wrong_pin_code": "തെറ്റായ പിൻ കോഡ്", "year": "വർഷം", - "yes": "അതെ" + "years_ago": "{years, plural, one {# വർഷം} other {# വർഷങ്ങൾ}} മുമ്പ്", + "yes": "അതെ", + "you_dont_have_any_shared_links": "നിങ്ങൾക്ക് പങ്കിട്ട ലിങ്കുകളൊന്നുമില്ല", + "your_wifi_name": "നിങ്ങളുടെ വൈ-ഫൈയുടെ പേര്", + "zoom_image": "ചിത്രം വലുതാക്കുക", + "zoom_to_bounds": "പരിധികളിലേക്ക് സൂം ചെയ്യുക" } diff --git a/i18n/nb_NO.json b/i18n/nb_NO.json index 4162170885..621f67e1aa 100644 --- a/i18n/nb_NO.json +++ b/i18n/nb_NO.json @@ -23,23 +23,24 @@ "add_partner": "Legg til partner", "add_path": "Legg til sti", "add_photos": "Legg til bilder", - "add_tag": "Legg til tagg", + "add_tag": "Legg til merkelapp", "add_to": "Legg til i…", "add_to_album": "Legg til album", "add_to_album_bottom_sheet_added": "Lagt til i {album}", "add_to_album_bottom_sheet_already_exists": "Allerede i {album}", + "add_to_album_bottom_sheet_some_local_assets": "Noen lokale elementer kunne ikke legges til i albumet", "add_to_album_toggle": "Avhuking for {album}", "add_to_albums": "Legg til i album", "add_to_albums_count": "Legg til i albumer ({count})", "add_to_shared_album": "Legg til delt album", "add_url": "Legg til URL", - "added_to_archive": "Lagt til i arkiv", - "added_to_favorites": "Lagt til i favoritter", + "added_to_archive": "Lagt til i arkivet", + "added_to_favorites": "Lagt til favoritter", "added_to_favorites_count": "Lagt til {count, number} i favoritter", "admin": { "add_exclusion_pattern_description": "Legg til ekskluderingsmønstre. Globbing med *, ** og ? støttes. For å ignorere alle filer i en hvilken som helst mappe som heter \"Raw\", bruk \"**/Raw/**\". For å ignorere alle filer som slutter på \".tif\", bruk \"**/*.tif\". For å ignorere en absolutt filplassering, bruk \"/filsti/til/ignorer/**\".", "admin_user": "Administrasjonsbruker", - "asset_offline_description": "Dette eksterne biblioteksobjektet finnes ikke lenger på disk og har blitt flyttet til papirkurven. Hvis filen ble flyttet innad i biblioteket, se etter det tilsvarende objektet i tidslinjen din. For å gjenopprette objektet, vennligst sørg for at filstien under er tilgjengelig for Immich og skann biblioteket.", + "asset_offline_description": "Dette eksterne bibliotekselementet finnes ikke lenger på disk og har blitt flyttet til papirkurven. Hvis filen ble flyttet innad i biblioteket, se etter det tilsvarende elementet i tidslinjen din. For å gjenopprette elementet, vennligst sørg for at filstien under er tilgjengelig for Immich og skann biblioteket.", "authentication_settings": "Godkjenningsinnstillinger", "authentication_settings_description": "Administrer passord, OAuth, og andre innstillinger for autentisering", "authentication_settings_disable_all": "Er du sikker på at du ønsker å deaktivere alle innloggingsmetoder? Innlogging vil bli fullstendig deaktivert.", @@ -59,12 +60,12 @@ "backup_settings_description": "Håndter innstillinger for database-dump.", "cleared_jobs": "Ryddet opp jobber for: {job}", "config_set_by_file": "Konfigurasjonen er for øyeblikket satt av en konfigurasjonsfil", - "confirm_delete_library": "Er du sikker på at du vil slette biblioteket {library}?", - "confirm_delete_library_assets": "Er du sikker på at du vil slette dette biblioteket? Dette vil slette alt innhold ({count, plural, one {# objekt} other {# objekter}}) og tilhørende eiendeler fra Immich og kan ikke angres. Filene vil forbli på disken.", + "confirm_delete_library": "Vil du virkelig slette biblioteket {library}?", + "confirm_delete_library_assets": "Vil du virkelig slette dette biblioteket? Dette vil slette alt innhold ({count, plural, one {# element} other {# elementer}}) og tilhørende eiendeler fra Immich og kan ikke angres. Filene vil forbli på disken.", "confirm_email_below": "For å bekrefte, skriv inn \"{email}\" nedenfor", - "confirm_reprocess_all_faces": "Er du sikker på at du vil behandle alle ansikter på nytt? Dette vil også fjerne navngitte personer.", - "confirm_user_password_reset": "Er du sikker på at du vil tilbakestille passordet til {user}?", - "confirm_user_pin_code_reset": "Er du sikker på at du vil tilbakestille PIN-koden til {user} ?", + "confirm_reprocess_all_faces": "Vil du virkelig behandle alle ansikter på nytt? Dette vil også fjerne navngitte personer.", + "confirm_user_password_reset": "Vil du virkelig tilbakestille passordet til {user}?", + "confirm_user_pin_code_reset": "Vil du virkelig tilbakestille PIN-koden til {user} ?", "create_job": "Lag jobb", "cron_expression": "Cron uttrykk", "cron_expression_description": "Still inn skanneintervallet med cron-formatet. For mer informasjon henvises til f.eks. Crontab Guru", @@ -189,9 +190,9 @@ "nightly_tasks_database_cleanup_setting": "Opprydningsjobber for databasen", "nightly_tasks_database_cleanup_setting_description": "Rydder opp i gamle, utgåtte data fra databasen", "nightly_tasks_generate_memories_setting": "Genererer minner", - "nightly_tasks_generate_memories_setting_description": "Generer nye minner fra objekter", + "nightly_tasks_generate_memories_setting_description": "Generer nye minner fra elementer", "nightly_tasks_missing_thumbnails_setting": "Generer manglende miniatyrbilder", - "nightly_tasks_missing_thumbnails_setting_description": "Legg til objekter i kø som mangler miniatyrbilder for generering", + "nightly_tasks_missing_thumbnails_setting_description": "Legg til elementer i kø som mangler miniatyrbilder for generering", "nightly_tasks_settings": "Innstillinger for nattjobber", "nightly_tasks_settings_description": "Endre på nattjobber", "nightly_tasks_start_time_setting": "Starttid", @@ -275,7 +276,7 @@ "storage_template_hash_verification_enabled_description": "Aktiver hasjverifisering. Ikke deaktiver dette med mindre du er sikker på konsekvensene", "storage_template_migration": "Implementer lagringsmal", "storage_template_migration_description": "Bruk gjeldende {template} på tidligere opplastede bilder", - "storage_template_migration_info": "Lagringsmalen vil endre filtypen til små bokstaver. Malendringer vil kun gjelde nye objekter. For å anvende malen på tidligere opplastede objekter, kjør {job}.", + "storage_template_migration_info": "Lagringsmalen vil endre filtypen til små bokstaver. Malendringer vil kun gjelde nye elementer. For å anvende malen på tidligere opplastede elementer, kjør {job}.", "storage_template_migration_job": "Migreringsjobb for lagringsmal", "storage_template_more_details": "For mer informasjon om denne funksjonen, se lagringsmalen og dens konsekvenser", "storage_template_onboarding_description_v2": "Når aktivert vil denne funksjonen automatisk organisere filer basert på en brukerdefinert mal. For mer informasjon, se denne linken dokumentasjon.", @@ -367,7 +368,7 @@ "trash_settings_description": "Administrer papirkurv-innstillinger", "unlink_all_oauth_accounts": "Koble fra alle OAuth-kontoer", "unlink_all_oauth_accounts_description": "Husk å koble fra alle OAuth-kontoer før du migrerer til ny leverandør.", - "unlink_all_oauth_accounts_prompt": "Er du sikker på at du vil koble fra alle OAuth-kontoer? Dette vil nullstille OAuth ID for hver bruker, og kan ikke angres.", + "unlink_all_oauth_accounts_prompt": "Vil du virkelig koble fra alle OAuth-kontoer? Dette vil nullstille OAuth ID for hver bruker, og kan ikke angres.", "user_cleanup_job": "Bruker opprydning", "user_delete_delay": "{user}s konto og elementer vil legges i kø for permanent sletting om {delay, plural, one {# dag} other {# dager}}.", "user_delete_delay_settings": "Sletteforsinkelse", @@ -390,8 +391,8 @@ "video_conversion_job": "Transkod videoer", "video_conversion_job_description": "Konverter videoer for bedre kompatibilitet med nettlesere og enheter" }, - "admin_email": "Administrator E-post", - "admin_password": "Administrator Passord", + "admin_email": "Administrator e-post", + "admin_password": "Administratorpassord", "administration": "Administrasjon", "advanced": "Avansert", "advanced_settings_enable_alternate_media_filter_subtitle": "Bruk denne innstillingen for å filtrere mediefiler under synkronisering basert på alternative kriterier. Bruk kun denne innstillingen dersom man opplever problemer med at applikasjonen ikke oppdager alle album.", @@ -413,33 +414,33 @@ "age_months": "Alder {months, plural, one {# måned} other {# måneder}}", "age_year_months": "Alder 1 år, {months, plural, one {# måned} other {# måneder}}", "age_years": "{years, plural, other {Alder #}}", - "album_added": "Album lagt til", + "album_added": "Album opprettet", "album_added_notification_setting_description": "Motta en e-postvarsling når du legges til i et delt album", "album_cover_updated": "Albumomslag oppdatert", - "album_delete_confirmation": "Er du sikker på at du vil slette albumet {album}?", + "album_delete_confirmation": "Vil du virkelig slette albumet {album}?", "album_delete_confirmation_description": "Hvis dette albumet deles, vil andre brukere miste tilgangen til dette.", "album_deleted": "Album slettet", "album_info_card_backup_album_excluded": "EKSKLUDERT", "album_info_card_backup_album_included": "INKLUDERT", "album_info_updated": "Albuminformasjon oppdatert", "album_leave": "Forlate album?", - "album_leave_confirmation": "Er du sikker på at du vil forlate {album}?", - "album_name": "Album Navn", + "album_leave_confirmation": "Vil du virkelig forlate {album}?", + "album_name": "Albumnavn", "album_options": "Albumalternativer", "album_remove_user": "Fjerne bruker?", - "album_remove_user_confirmation": "Er du sikker på at du vil fjerne {user}?", + "album_remove_user_confirmation": "Vil du virkelig fjerne {user}?", "album_search_not_found": "Ingen album ble funnet som traff ditt søk", - "album_share_no_users": "Ser ut til at du har delt dette albumet med alle brukere, eller du ikke har noen brukere å dele det med.", + "album_share_no_users": "Dette albumet er allerede delt med du har delt dette albumet med alle brukere, eller du ikke har noen brukere å dele det med.", "album_summary": "Oppsummering av album", "album_updated": "Album oppdatert", "album_updated_setting_description": "Motta e-postvarsling når et delt album får nye filer", "album_user_left": "Forlot {album}", "album_user_removed": "Fjernet {user}", - "album_viewer_appbar_delete_confirm": "Er du sikker på at du vil slette dette albumet fra kontoen din?", + "album_viewer_appbar_delete_confirm": "Vil du virkelig slette dette albumet fra kontoen din?", "album_viewer_appbar_share_err_delete": "Kunne ikke slette albumet", "album_viewer_appbar_share_err_leave": "Kunne ikke forlate albumet", - "album_viewer_appbar_share_err_remove": "Det oppstod et problem ved fjerning av objekter fra albumet", - "album_viewer_appbar_share_err_title": "Feilet ved endring av albumtittel", + "album_viewer_appbar_share_err_remove": "Det oppstod et problem ved fjerning av elementer fra albumet", + "album_viewer_appbar_share_err_title": "Mislyktes ved endring av albumtittel", "album_viewer_appbar_share_leave": "Forlat album", "album_viewer_appbar_share_to": "Del til", "album_viewer_page_share_add_users": "Legg til brukere", @@ -460,11 +461,11 @@ "allow_public_user_to_upload": "Tillat uautentiserte brukere å laste opp", "alt_text_qr_code": "QR-kodebilde", "anti_clockwise": "Mot klokken", - "api_key": "API Nøkkel", + "api_key": "API-nøkkel", "api_key_description": "Denne verdien vil vises kun én gang. Pass på å kopiere den før du lukker vinduet.", "api_key_empty": "API-nøkkelnavnet bør ikke være tomt", "api_keys": "API-nøkler", - "app_bar_signout_dialog_content": "Er du sikker på at du vil logge ut?", + "app_bar_signout_dialog_content": "Vil du virkelig logge ut?", "app_bar_signout_dialog_ok": "Ja", "app_bar_signout_dialog_title": "Logg ut", "app_settings": "Appinstillinger", @@ -473,16 +474,16 @@ "archive": "Arkiv", "archive_action_prompt": "{count} lagt til i arkivet", "archive_or_unarchive_photo": "Arkiver eller ta ut av arkivet", - "archive_page_no_archived_assets": "Ingen arkiverte objekter funnet", + "archive_page_no_archived_assets": "Ingen arkiverte elementer funnet", "archive_page_title": "Arkiv ({count})", "archive_size": "Arkivstørrelse", "archive_size_description": "Konfigurer arkivstørrelsen for nedlastinger (i GiB)", "archived": "Arkivert", "archived_count": "{count, plural, other {Arkivert #}}", "are_these_the_same_person": "Er disse samme person?", - "are_you_sure_to_do_this": "Er du sikker på at du vil gjøre dette?", - "asset_action_delete_err_read_only": "Kan ikke slette objekt(er) med kun lese-rettighet, hopper over", - "asset_action_share_err_offline": "Kan ikke hente offline objekt(er), hopper over", + "are_you_sure_to_do_this": "Vil du virkelig gjøre dette?", + "asset_action_delete_err_read_only": "Kunne ikke slette element(er) med kun lese-rettighet, hopper over", + "asset_action_share_err_offline": "Kunne ikke hente offline element(er), hopper over", "asset_added_to_album": "Lagt til i album", "asset_adding_to_album": "Legger til i album…", "asset_description_updated": "Elementbeskrivelse har blitt oppdatert", @@ -498,37 +499,37 @@ "asset_list_settings_subtitle": "Innstillinger for layout av fotorutenett", "asset_list_settings_title": "Fotorutenett", "asset_offline": "Fil utilgjengelig", - "asset_offline_description": "Dette elementet er offline. Immich kan ikke aksessere dets lokasjon. Vennlist påse at elementet er tilgijengelig og skann så biblioteket på nytt.", + "asset_offline_description": "Dette elementet er offline. Immich kan ikke aksessere dets lokasjon. Vennligst påse at elementet er tilgjengelig og skann så biblioteket på nytt.", "asset_restored_successfully": "Objekt(er) gjenopprettet", "asset_skipped": "Hoppet over", - "asset_skipped_in_trash": "I søppelbøtten", + "asset_skipped_in_trash": "I papirkurven", "asset_trashed": "Objekt slettet", - "asset_troubleshoot": "Feilsøk objekt", + "asset_troubleshoot": "Feilsøk element", "asset_uploaded": "Lastet opp", "asset_uploading": "Laster opp…", "asset_viewer_settings_subtitle": "Endre dine visningsinnstillinger for galleriet", "asset_viewer_settings_title": "Objektviser", "assets": "Filer", - "assets_added_count": "Lagt til {count, plural, one {# objekt} other {# objekter}}", - "assets_added_to_album_count": "Lagt til {count, plural, one {# objekter} other {# objekt}} i album", + "assets_added_count": "Lagt til {count, plural, one {# element} other {# elementer}}", + "assets_added_to_album_count": "Lagt til {count, plural, one {# elementer} other {# element}} i album", "assets_added_to_albums_count": "Lagt til {assetTotal, plural, one {# asset} other {# assets}} til {albumTotal, plural, one {# album} other {# albums}}", "assets_cannot_be_added_to_album_count": "{count, plural, one {Objektet} other {Objektene}} kan ikke legges til i albumet", "assets_cannot_be_added_to_albums": "{count, plural, one {Asset} other {Assets}} kan ikke legges til i noen av albumene", "assets_count": "{count, plural, one {# fil} other {# filer}}", - "assets_deleted_permanently": "{count} objekt(er) slettet permanent", - "assets_deleted_permanently_from_server": "{count} objekt(er) slettet permanent fra Immich-serveren", + "assets_deleted_permanently": "{count} element(er) slettet permanent", + "assets_deleted_permanently_from_server": "{count} element(er) slettet permanent fra Immich-serveren", "assets_downloaded_failed": "{count, plural, one {Nedlasting av # fil - {error} fil feilet} other {Nedlastede # filer - {error} filer feilet}}", "assets_downloaded_successfully": "{count, plural, one {Nedlastet # fil vellykket} other {Nedlastede # filer vellykket}}", - "assets_moved_to_trash_count": "Flyttet {count, plural, one {# objekt} other {# objekter}} til søppel", - "assets_permanently_deleted_count": "Slettet {count, plural, one {# objekt} other {# objekter}} permanent", - "assets_removed_count": "Slettet {count, plural, one {# objekt} other {# objekter}}", - "assets_removed_permanently_from_device": "{count} objekt(er) slettet permanent fra enheten din", - "assets_restore_confirmation": "Er du sikker på at du vil gjenopprette alle slettede eiendeler? Denne handlingen kan ikke angres! Vær oppmerksom på at frakoblede ressurser ikke kan gjenopprettes på denne måten.", - "assets_restored_count": "Gjenopprettet {count, plural, one {# objekt} other {# objekter}}", - "assets_restored_successfully": "{count} objekt(er) gjenopprettet", - "assets_trashed": "{count} objekt(er) slettet", - "assets_trashed_count": "Kastet {count, plural, one {# objekt} other {# objekter}}", - "assets_trashed_from_server": "{count} objekt(er) slettet fra Immich serveren", + "assets_moved_to_trash_count": "Flyttet {count, plural, one {# element} other {# elementer}} til søppel", + "assets_permanently_deleted_count": "Slettet {count, plural, one {# element} other {# elementer}} permanent", + "assets_removed_count": "Slettet {count, plural, one {# element} other {# elementer}}", + "assets_removed_permanently_from_device": "{count} element(er) slettet permanent fra enheten din", + "assets_restore_confirmation": "Vil du virkelig gjenopprette alle slettede eiendeler? Denne handlingen kan ikke angres! Vær oppmerksom på at frakoblede ressurser ikke kan gjenopprettes på denne måten.", + "assets_restored_count": "Gjenopprettet {count, plural, one {# element} other {# elementer}}", + "assets_restored_successfully": "{count} element(er) gjenopprettet", + "assets_trashed": "{count} element(er) slettet", + "assets_trashed_count": "Kastet {count, plural, one {# element} other {# elementer}}", + "assets_trashed_from_server": "{count} element(er) slettet fra Immich serveren", "assets_were_part_of_album_count": "{count, plural, one {Objektet} other {Objektene}} er allerede lagt til i albumet", "assets_were_part_of_albums_count": "{count, plural, one {Asset was} other {Assets were}} allerede inkludert i albumet", "authorized_devices": "Autoriserte enheter", @@ -547,15 +548,15 @@ "backup_album_selection_page_assets_scatter": "Objekter kan bli spredd over flere album. Album kan derfor bli inkludert eller ekskludert under sikkerhetskopieringen.", "backup_album_selection_page_select_albums": "Velg album", "backup_album_selection_page_selection_info": "Valginformasjon", - "backup_album_selection_page_total_assets": "Totalt antall unike objekter", + "backup_album_selection_page_total_assets": "Totalt antall unike elementer", "backup_albums_sync": "Synkronisering av sikkerhetskopialbum", "backup_all": "Alle", - "backup_background_service_backup_failed_message": "Sikkerhetskopiering av objekter feilet. Prøver på nytt…", + "backup_background_service_backup_failed_message": "Sikkerhetskopiering av elementer feilet. Prøver på nytt…", "backup_background_service_connection_failed_message": "Tilkobling til server feilet. Prøver på nytt…", "backup_background_service_current_upload_notification": "Laster opp {filename}", - "backup_background_service_default_notification": "Ser etter nye objekter…", - "backup_background_service_error_title": "Sikkerhetskopieringsfeil", - "backup_background_service_in_progress_notification": "Sikkerhetskopierer objekter…", + "backup_background_service_default_notification": "Ser etter nye elementer…", + "backup_background_service_error_title": "Feil under sikkerhetskopiering", + "backup_background_service_in_progress_notification": "Sikkerhetskopierer elementer…", "backup_background_service_upload_failure_notification": "Opplasting feilet {filename}", "backup_controller_page_albums": "Sikkerhetskopier albumer", "backup_controller_page_background_app_refresh_disabled_content": "Aktiver bakgrunnsoppdatering i Innstillinger > Generelt > Bakgrunnsoppdatering for å bruke sikkerhetskopiering i bakgrunnen.", @@ -567,8 +568,8 @@ "backup_controller_page_background_battery_info_title": "Batterioptimalisering", "backup_controller_page_background_charging": "Kun ved lading", "backup_controller_page_background_configure_error": "Konfigurering av bakgrunnstjenesten feilet", - "backup_controller_page_background_delay": "Forsink sikkerhetskopiering av nye objekter: {duration}", - "backup_controller_page_background_description": "Skru på bakgrunnstjenesten for å automatisk sikkerhetskopiere alle nye objekter uten å måtte åpne appen", + "backup_controller_page_background_delay": "Forsink sikkerhetskopiering av nye elementer: {duration}", + "backup_controller_page_background_description": "Skru på bakgrunnstjenesten for å automatisk sikkerhetskopiere alle nye elementer uten å måtte åpne appen", "backup_controller_page_background_is_off": "Automatisk sikkerhetskopiering i bakgrunnen er deaktivert", "backup_controller_page_background_is_on": "Automatisk sikkerhetskopiering i bakgrunnen er aktivert", "backup_controller_page_background_turn_off": "Skru av bakgrunnstjenesten", @@ -578,9 +579,9 @@ "backup_controller_page_backup_selected": "Valgte: ", "backup_controller_page_backup_sub": "Opplastede bilder og videoer", "backup_controller_page_created": "Opprettet: {date}", - "backup_controller_page_desc_backup": "Slå på sikkerhetskopiering i forgrunnen for automatisk å laste opp nye objekter til serveren når du åpner appen.", + "backup_controller_page_desc_backup": "Slå på sikkerhetskopiering i forgrunnen for automatisk å laste opp nye elementer til serveren når du åpner appen.", "backup_controller_page_excluded": "Ekskludert: ", - "backup_controller_page_failed": "Feilet ({count})", + "backup_controller_page_failed": "Mislyktes ({count})", "backup_controller_page_filename": "Filnavn: {filename} [{size}]", "backup_controller_page_id": "ID: {id}", "backup_controller_page_info": "Informasjon om sikkerhetskopi", @@ -597,8 +598,9 @@ "backup_controller_page_turn_off": "Slå av sikkerhetskopiering i forgrunnen", "backup_controller_page_turn_on": "Slå på sikkerhetskopiering i forgrunnen", "backup_controller_page_uploading_file_info": "Laster opp filinformasjon", - "backup_err_only_album": "Kan ikke fjerne det eneste albumet", - "backup_info_card_assets": "objekter", + "backup_err_only_album": "Kunne ikke fjerne det eneste albumet", + "backup_error_sync_failed": "Synkronisering feilet. Kunne ikke fortsette sikkerhetskopiering.", + "backup_info_card_assets": "elementer", "backup_manual_cancelled": "Avbrutt", "backup_manual_in_progress": "Opplasting er allerede i gang. Prøv igjen om litt", "backup_manual_success": "Vellykket", @@ -618,15 +620,15 @@ "bugs_and_feature_requests": "Feil og funksjonsforespørsler", "build": "Bygg", "build_image": "Lag Bilde", - "bulk_delete_duplicates_confirmation": "Er du sikker på at du vil slette {count, plural, one {# duplisert fil} other {# dupliserte filer}}? Dette vil beholde største filen fra hver gruppe og vil permanent slette alle andre duplikater. Du kan ikke angre denne handlingen!", - "bulk_keep_duplicates_confirmation": "Er du sikker på at du vil beholde {count, plural, one {# duplikat} other {# duplikater}}? Dette vil løse alle duplikatgrupper uten å slette noe.", - "bulk_trash_duplicates_confirmation": "Er du sikker på ønsker å slette {count, plural, one {# duplisert objekt} other {# dupliserte objekter}}? Dette vil beholde største filen fra hver gruppe, samt slette alle andre duplikater.", + "bulk_delete_duplicates_confirmation": "Vil du virkelig slette {count, plural, one {# duplisert fil} other {# dupliserte filer}}? Dette vil beholde største filen fra hver gruppe og vil permanent slette alle andre duplikater. Du kan ikke angre denne handlingen!", + "bulk_keep_duplicates_confirmation": "Vil du virkelig beholde {count, plural, one {# duplikat} other {# duplikater}}? Dette vil løse alle duplikatgrupper uten å slette noe.", + "bulk_trash_duplicates_confirmation": "Vil du virkelig å slette {count, plural, one {# duplisert element} other {# dupliserte elementer}}? Dette vil beholde største filen fra hver gruppe, samt slette alle andre duplikater.", "buy": "Kjøp Immich", "cache_settings_clear_cache_button": "Tøm buffer", "cache_settings_clear_cache_button_title": "Tømmer app-ens buffer. Dette vil ha betydelig innvirkning på appens ytelse inntil bufferen er gjenoppbygd.", "cache_settings_duplicated_assets_clear_button": "TØM", "cache_settings_duplicated_assets_subtitle": "Bilder og videoer som er ignorert av app'en", - "cache_settings_duplicated_assets_title": "Dupliserte objekter ({count})", + "cache_settings_duplicated_assets_title": "Dupliserte elementer ({count})", "cache_settings_statistics_album": "Bibliotekminiatyrbilder", "cache_settings_statistics_full": "Originalbilder", "cache_settings_statistics_shared": "Delte albumminiatyrbilder", @@ -643,9 +645,9 @@ "cancel_search": "Avbryt søk", "canceled": "Avbrutt", "canceling": "Avbryter", - "cannot_merge_people": "Kan ikke slå sammen personer", + "cannot_merge_people": "Kunne ikke slå sammen personer", "cannot_undo_this_action": "Du kan ikke gjøre om denne handlingen!", - "cannot_update_the_description": "Kan ikke oppdatere beskrivelsen", + "cannot_update_the_description": "Kunne ikke oppdatere beskrivelsen", "cast": "Strøm", "cast_description": "Konfigurer tilgjengelige cast-destinasjoner", "change_date": "Endre dato", @@ -655,21 +657,21 @@ "change_location": "Endre sted", "change_name": "Endre navn", "change_name_successfully": "Navneendring vellykket", - "change_password": "Endre Passord", + "change_password": "Endre passord", "change_password_description": "Dette er enten første gang du logger inn i systemet, eller det har blitt gjort en forespørsel om å endre passordet ditt. Vennligst skriv inn det nye passordet nedenfor.", "change_password_form_confirm_password": "Bekreft passord", "change_password_form_description": "Hei {name}!\n\nDette er enten første gang du logger på systemet, eller det er sendt en forespørsel om å endre passordet ditt. Vennligst skriv inn det nye passordet nedenfor.", "change_password_form_new_password": "Nytt passord", "change_password_form_password_mismatch": "Passordene stemmer ikke", "change_password_form_reenter_new_password": "Skriv nytt passord igjen", - "change_pin_code": "Endre PIN kode", + "change_pin_code": "Endre PIN-kode", "change_your_password": "Endre passordet ditt", "changed_visibility_successfully": "Endret synlighet vellykket", "charging": "Lading", "charging_requirement_mobile_backup": "Bakgrunnsbackup krever at enheten lader", - "check_corrupt_asset_backup": "Sjekk etter korrupte backupobjekter", + "check_corrupt_asset_backup": "Sjekk etter korrupte backupelementer", "check_corrupt_asset_backup_button": "Utfør sjekk", - "check_corrupt_asset_backup_description": "Kjør denne sjekken kun over Wi-Fi og når alle objekter har blitt lastet opp. Denne sjekken kan ta noen minutter.", + "check_corrupt_asset_backup_description": "Kjør denne sjekken kun over Wi-Fi og når alle elementer har blitt lastet opp. Denne sjekken kan ta noen minutter.", "check_logs": "Sjekk Logger", "choose_matching_people_to_merge": "Velg personer som skal slås sammen", "city": "By", @@ -702,8 +704,8 @@ "completed": "Fullført", "confirm": "Bekreft", "confirm_admin_password": "Bekreft administratorpassord", - "confirm_delete_face": "Er du sikker på at du vil slette {name} sitt ansikt fra ativia?", - "confirm_delete_shared_link": "Er du sikker på at du vil slette denne delte lenken?", + "confirm_delete_face": "Vil du virkelig slette {name} sitt ansikt fra ativia?", + "confirm_delete_shared_link": "Vil du virkelig slette denne delte lenken?", "confirm_keep_this_delete_others": "Alle andre ressurser i denne stabelen vil bli slettet bortsett fra denne ressursen. Er du sikker på at du vil fortsette?", "confirm_new_pin_code": "Bekreft ny PIN kode", "confirm_password": "Bekreft passord", @@ -721,7 +723,7 @@ "control_bottom_app_bar_edit_time": "Endre Dato og tid", "control_bottom_app_bar_share_link": "Del Lenke", "control_bottom_app_bar_share_to": "Del til", - "control_bottom_app_bar_trash_from_immich": "Flytt til søppelkasse", + "control_bottom_app_bar_trash_from_immich": "Flytt til papirkurv", "copied_image_to_clipboard": "Bildet er kopiert til utklippstavlen.", "copied_to_clipboard": "Kopiert til utklippstavlen!", "copy_error": "Kopi feil", @@ -736,9 +738,9 @@ "covers": "Omslag", "create": "Opprett", "create_album": "Opprett album", - "create_album_page_untitled": "Uten navn", + "create_album_page_untitled": "Navnløst", "create_library": "Opprett Bibliotek", - "create_link": "Opprett link", + "create_link": "Opprett lenke", "create_link_to_share": "Opprett delelink", "create_link_to_share_description": "La alle med lenken se de(t) valgte bildet/bildene", "create_new": "LAG NY", @@ -747,8 +749,8 @@ "create_new_user": "Opprett ny bruker", "create_shared_album_page_share_add_assets": "LEGG TIL OBJEKTER", "create_shared_album_page_share_select_photos": "Velg bilder", - "create_shared_link": "Opprett delt link", - "create_tag": "Lag tag", + "create_shared_link": "Opprett delt lenke", + "create_tag": "Lag merkelapp", "create_tag_description": "Lag en ny tag. For undertag, vennligst fullfør hele stien til taggen, inkludert forovervendt skråstrek.", "create_user": "Opprett Bruker", "created": "Opprettet", @@ -782,23 +784,23 @@ "default_locale": "Standard språkinnstilling", "default_locale_description": "Formater datoer og tall basert på nettleserens språkinnstilling", "delete": "Slett", - "delete_action_confirmation_message": "Er du sikker på at du vil slette dette objektet? Dette vil flytte objektet til søppelkassen og vil gi deg beskjed om du vil slette det lokalt", + "delete_action_confirmation_message": "Vil du virkelig slette dette elementet? Dette vil flytte elementet til papirkurvn og vil gi deg beskjed om du vil slette det lokalt", "delete_action_prompt": "{count} slettet", "delete_album": "Slett album", - "delete_api_key_prompt": "Er du sikker på at du vil slette denne API-nøkkelen?", - "delete_dialog_alert": "Disse objektene vil bli slettet permanent fra Immich og fra enheten din", - "delete_dialog_alert_local": "Disse objektene vil bli permanent slettet fra enheten din, men vil fortsatt være tilgjengelige fra Immich serveren", - "delete_dialog_alert_local_non_backed_up": "Noen av objektene er ikke sikkerhetskopiert til Immich og vil bli permanent fjernet fra enheten din", - "delete_dialog_alert_remote": "Disse objektene vil bli permanent slettet fra Immich serveren", + "delete_api_key_prompt": "Vil du virkelig slette denne API-nøkkelen?", + "delete_dialog_alert": "Disse elementene vil bli slettet permanent fra Immich og fra enheten din", + "delete_dialog_alert_local": "Disse elementene vil bli permanent slettet fra enheten din, men vil fortsatt være tilgjengelige fra Immich serveren", + "delete_dialog_alert_local_non_backed_up": "Noen av elementene er ikke sikkerhetskopiert til Immich og vil bli permanent fjernet fra enheten din", + "delete_dialog_alert_remote": "Disse elementene vil bli permanent slettet fra Immich serveren", "delete_dialog_ok_force": "Slett uansett", "delete_dialog_title": "Slett permanent", - "delete_duplicates_confirmation": "Er du sikker på at du vil slette disse duplikatene permanent?", + "delete_duplicates_confirmation": "Vil du virkelig slette disse duplikatene permanent?", "delete_face": "Slett ansik", "delete_key": "Slett nøkkel", "delete_library": "Slett bibliotek", "delete_link": "Slett lenke", "delete_local_action_prompt": "{count} slettet lokalt", - "delete_local_dialog_ok_backed_up_only": "Slett kun sikkerhetskopierte objekter", + "delete_local_dialog_ok_backed_up_only": "Slett kun sikkerhetskopierte elementer", "delete_local_dialog_ok_force": "Slett uansett", "delete_others": "Slett andre", "delete_permanently": "Slett permanent", @@ -806,7 +808,7 @@ "delete_shared_link": "Slett delt lenke", "delete_shared_link_dialog_title": "Slett delt link", "delete_tag": "Slett tag", - "delete_tag_confirmation_prompt": "Er du sikker på at du vil slette {tagName} tag?", + "delete_tag_confirmation_prompt": "Vil du virkelig slette {tagName} tag?", "delete_user": "Slett bruker", "deleted_shared_link": "Slettet delt lenke", "deletes_missing_assets": "Slett eiendeler som mangler fra disk", @@ -831,7 +833,7 @@ "documentation": "Dokumentasjon", "done": "Ferdig", "download": "Last ned", - "download_action_prompt": "Laster ned {count} objekter", + "download_action_prompt": "Laster ned {count} elementer", "download_canceled": "Nedlasting avbrutt", "download_complete": "Nedlasting fullført", "download_enqueue": "Nedlasting satt i kø", @@ -890,7 +892,7 @@ "email_notifications": "Epostvarsler", "empty_folder": "Denne mappen er tom", "empty_trash": "Tøm papirkurv", - "empty_trash_confirmation": "Er du sikker på at du vil tømme søppelbøtta? Dette vil slette alle filene i søppelbøtta permanent fra Immich.\nDu kan ikke angre denne handlingen!", + "empty_trash_confirmation": "Vil du virkelig Tømme søppelbøtta? Dette vil slette alle filene i søppelbøtta permanent fra Immich.\nDu kan ikke angre denne handlingen!", "enable": "Aktivere", "enable_backup": "Aktiver backup", "enable_biometric_auth_description": "Skriv inn PINkoden for å aktivere biometrisk autentisering", @@ -901,7 +903,7 @@ "enter_your_pin_code": "Skriv inn din PIN kode", "enter_your_pin_code_subtitle": "Skriv inn din PIN kode for å få tilgang til låst mappe", "error": "Feil", - "error_change_sort_album": "Feilet ved endring av sorteringsrekkefølge på albumer", + "error_change_sort_album": "Mislyktes ved endring av sorteringsrekkefølge på albumer", "error_delete_face": "Feil ved sletting av ansikt fra aktivia", "error_getting_places": "Feil ved henting av steder", "error_loading_image": "Feil ved lasting av bilde", @@ -910,16 +912,16 @@ "error_tag_face_bounding_box": "Feil ved merking av ansikt - klarte ikke å få koordinatene på omrisset", "error_title": "Feil - Noe gikk galt", "errors": { - "cannot_navigate_next_asset": "Kan ikke navigere til neste fil", - "cannot_navigate_previous_asset": "Kan ikke navigere til forrige fil", - "cant_apply_changes": "Kan ikke legge til endringene", - "cant_change_activity": "Kan ikke {enabled, select, true {disable} other {enable}} aktivitet", - "cant_change_asset_favorite": "Kan ikke endre favoritt til filen", - "cant_change_metadata_assets_count": "Kan ikke endre metadata for {count, plural, one {# objekt} other {# objekter}}", - "cant_get_faces": "Kan ikke finne ansikter", - "cant_get_number_of_comments": "Kan ikke hente antall kommentarer", - "cant_search_people": "Kan ikke søke etter mennesker", - "cant_search_places": "Kan ikke søke etter plasser", + "cannot_navigate_next_asset": "Kunne ikke navigere til neste fil", + "cannot_navigate_previous_asset": "Kunne ikke navigere til forrige fil", + "cant_apply_changes": "Kunne ikke legge til endringene", + "cant_change_activity": "Kunne ikke {enabled, select, true {disable} other {enable}} aktivitet", + "cant_change_asset_favorite": "Kunne ikke endre favoritt til filen", + "cant_change_metadata_assets_count": "Kunne ikke endre metadata for {count, plural, one {# element} other {# elementer}}", + "cant_get_faces": "Kunne ikke finne ansikter", + "cant_get_number_of_comments": "Kunne ikke hente antall kommentarer", + "cant_search_people": "Kunne ikke søke etter mennesker", + "cant_search_places": "Kunne ikke søke etter plasser", "error_adding_assets_to_album": "Feil med å legge til bilder til album", "error_adding_users_to_album": "Feil, kan ikke legge til brukere til album", "error_deleting_shared_user": "Feil med å slette delt bruker", @@ -930,17 +932,17 @@ "exclusion_pattern_already_exists": "Dette eksklusjonsmønsteret eksisterer allerede.", "failed_to_create_album": "Feil med å lage album", "failed_to_create_shared_link": "Feil med å lage delt lenke", - "failed_to_edit_shared_link": "Feilet med å redigere delt lenke", - "failed_to_get_people": "Feilet med å finne mennesker", - "failed_to_keep_this_delete_others": "Feilet med å beholde dette bilde og slette de andre", - "failed_to_load_asset": "Feilet med å laste bilder", - "failed_to_load_assets": "Feilet med å laste bilde", + "failed_to_edit_shared_link": "Mislyktes med å redigere delt lenke", + "failed_to_get_people": "Mislyktes med å finne mennesker", + "failed_to_keep_this_delete_others": "Mislyktes med å beholde dette bilde og slette de andre", + "failed_to_load_asset": "Mislyktes med å laste bilder", + "failed_to_load_assets": "Mislyktes med å laste bilde", "failed_to_load_notifications": "Kunne ikke laste inn varsler", "failed_to_load_people": "Feilen med å laste mennesker", - "failed_to_remove_product_key": "Feilet med å ta bort produkt nøkkel", + "failed_to_remove_product_key": "Mislyktes med å ta bort produkt nøkkel", "failed_to_reset_pin_code": "Kunne ikke tilbakestille PIN-koden", - "failed_to_stack_assets": "Feilet med å stable bilder", - "failed_to_unstack_assets": "Feilet med å avstable bilder", + "failed_to_stack_assets": "Mislyktes med å stable bilder", + "failed_to_unstack_assets": "Mislyktes med å avstable bilder", "failed_to_update_notification_status": "Kunne ikke oppdatere varslingsstatusen", "import_path_already_exists": "Denne importstien eksisterer allerede.", "incorrect_email_or_password": "Feil epost eller passord", @@ -948,87 +950,87 @@ "profile_picture_transparent_pixels": "Profil bilde kan ikke ha gjennomsiktige piksler. Vennligst zoom inn og/eller flytt bilde.", "quota_higher_than_disk_size": "Du har satt kvoten større enn diskstørrelsen", "something_went_wrong": "Noe gikk galt", - "unable_to_add_album_users": "Kan ikke legge til brukere i albumet", - "unable_to_add_assets_to_shared_link": "Kan ikke legge til bilder til delt lenke", - "unable_to_add_comment": "Kan ikke legge til kommentar", - "unable_to_add_exclusion_pattern": "Kan ikke legge til eksklusjonsmønster", - "unable_to_add_import_path": "Kan ikke legge til importsti", - "unable_to_add_partners": "Kan ikke legge til partnere", - "unable_to_add_remove_archive": "Kan ikke {archived, select, true {fjerne objekt fra} other {flytte objekt til}} arkivet", - "unable_to_add_remove_favorites": "Kan ikke {favorite, select, true {legge til objekt til} other {fjerne objekt fra}} favoritter", - "unable_to_archive_unarchive": "Kan ikke {archived, select, true {archive} other {unarchive}}", - "unable_to_change_album_user_role": "Kan ikke endre brukerens rolle i albumet", - "unable_to_change_date": "Kan ikke endre dato", + "unable_to_add_album_users": "Kunne ikke legge til brukere i albumet", + "unable_to_add_assets_to_shared_link": "Kunne ikke legge til bilder til delt lenke", + "unable_to_add_comment": "Kunne ikke legge til kommentar", + "unable_to_add_exclusion_pattern": "Kunne ikke legge til eksklusjonsmønster", + "unable_to_add_import_path": "Kunne ikke legge til importsti", + "unable_to_add_partners": "Kunne ikke legge til partnere", + "unable_to_add_remove_archive": "Kunne ikke {archived, select, true {fjerne element fra} other {flytte element til}} arkivet", + "unable_to_add_remove_favorites": "Kunne ikke {favorite, select, true {legge til element til} other {fjerne element fra}} favoritter", + "unable_to_archive_unarchive": "Kunne ikke {archived, select, true {archive} other {unarchive}}", + "unable_to_change_album_user_role": "Kunne ikke endre brukerens rolle i albumet", + "unable_to_change_date": "Kunne ikke endre dato", "unable_to_change_description": "Klarte ikke å oppdatere beskrivelse", - "unable_to_change_favorite": "Kan ikke endre favoritt for bildet", - "unable_to_change_location": "Kan ikke endre plassering", - "unable_to_change_password": "Kan ikke endre passord", - "unable_to_change_visibility": "Kan ikke endre synlighet for {count, plural, one {# person} other {# people}}", + "unable_to_change_favorite": "Kunne ikke endre favoritt for bildet", + "unable_to_change_location": "Kunne ikke endre plassering", + "unable_to_change_password": "Kunne ikke endre passord", + "unable_to_change_visibility": "Kunne ikke endre synlighet for {count, plural, one {# person} other {# people}}", "unable_to_complete_oauth_login": "Kunne ikke fullføre OAuth innlogging", - "unable_to_connect": "Kan ikke koble til", - "unable_to_copy_to_clipboard": "Kan ikke kopiere til utklippstavlen, sørg for at du får tilgang til siden via HTTPS", - "unable_to_create_admin_account": "Kan ikke opprette administrator bruker", - "unable_to_create_api_key": "Kan ikke opprette en ny API-nøkkel", - "unable_to_create_library": "Kan ikke opprette bibliotek", - "unable_to_create_user": "Kan ikke opprette bruker", - "unable_to_delete_album": "Kan ikke slette album", - "unable_to_delete_asset": "Kan ikke slette filen", + "unable_to_connect": "Kunne ikke koble til", + "unable_to_copy_to_clipboard": "Kunne ikke kopiere til utklippstavlen, sørg for at du får tilgang til siden via HTTPS", + "unable_to_create_admin_account": "Kunne ikke opprette administrator bruker", + "unable_to_create_api_key": "Kunne ikke opprette en ny API-nøkkel", + "unable_to_create_library": "Kunne ikke opprette bibliotek", + "unable_to_create_user": "Kunne ikke opprette bruker", + "unable_to_delete_album": "Kunne ikke slette album", + "unable_to_delete_asset": "Kunne ikke slette filen", "unable_to_delete_assets": "Feil med å slette bilde", - "unable_to_delete_exclusion_pattern": "Kan ikke slette eksklusjonsmønster", - "unable_to_delete_import_path": "Kan ikke slette importsti", - "unable_to_delete_shared_link": "Kan ikke slette delt lenke", - "unable_to_delete_user": "Kan ikke slette bruker", - "unable_to_download_files": "Kan ikke laste ned filer", - "unable_to_edit_exclusion_pattern": "Kan ikke redigere eksklusjonsmønster", - "unable_to_edit_import_path": "Kan ikke redigere importsti", - "unable_to_empty_trash": "Kan ikke tømme papirkurven", - "unable_to_enter_fullscreen": "Kan ikke gå inn i fullskjerm", - "unable_to_exit_fullscreen": "Kan ikke gå ut fra fullskjerm", - "unable_to_get_comments_number": "Kan ikke hente antall kommentarer", - "unable_to_get_shared_link": "Kan ikke hente delt lenke", - "unable_to_hide_person": "Kan ikke skjule person", - "unable_to_link_motion_video": "Kan ikke lenke bevegelig video", - "unable_to_link_oauth_account": "Kan ikke lenke til OAuth-konto", - "unable_to_log_out_all_devices": "Kan ikke logge ut fra alle enheter", - "unable_to_log_out_device": "Kan ikke logge ut av enhet", - "unable_to_login_with_oauth": "Kan ikke logge inn med OAuth", - "unable_to_play_video": "Kan ikke spille av video", + "unable_to_delete_exclusion_pattern": "Kunne ikke slette eksklusjonsmønster", + "unable_to_delete_import_path": "Kunne ikke slette importsti", + "unable_to_delete_shared_link": "Kunne ikke slette delt lenke", + "unable_to_delete_user": "Kunne ikke slette bruker", + "unable_to_download_files": "Kunne ikke laste ned filer", + "unable_to_edit_exclusion_pattern": "Kunne ikke redigere eksklusjonsmønster", + "unable_to_edit_import_path": "Kunne ikke redigere importsti", + "unable_to_empty_trash": "Kunne ikke Tømme papirkurven", + "unable_to_enter_fullscreen": "Kunne ikke gå inn i fullskjerm", + "unable_to_exit_fullscreen": "Kunne ikke gå ut fra fullskjerm", + "unable_to_get_comments_number": "Kunne ikke hente antall kommentarer", + "unable_to_get_shared_link": "Kunne ikke hente delt lenke", + "unable_to_hide_person": "Kunne ikke skjule person", + "unable_to_link_motion_video": "Kunne ikke lenke bevegelig video", + "unable_to_link_oauth_account": "Kunne ikke lenke til OAuth-konto", + "unable_to_log_out_all_devices": "Kunne ikke logge ut fra alle enheter", + "unable_to_log_out_device": "Kunne ikke logge ut av enhet", + "unable_to_login_with_oauth": "Kunne ikke logge inn med OAuth", + "unable_to_play_video": "Kunne ikke spille av video", "unable_to_reassign_assets_existing_person": "Kunne ikke endre bruker på bildene til {name, select, null {an existing person} other {{name}}}", "unable_to_reassign_assets_new_person": "Kunne ikke tildele bildene til en ny person", - "unable_to_refresh_user": "Kan ikke oppdatere bruker", - "unable_to_remove_album_users": "Kan ikke fjerne brukere fra album", - "unable_to_remove_api_key": "Kan ikke fjerne API-nøkkel", + "unable_to_refresh_user": "Kunne ikke oppdatere bruker", + "unable_to_remove_album_users": "Kunne ikke fjerne brukere fra album", + "unable_to_remove_api_key": "Kunne ikke fjerne API-nøkkel", "unable_to_remove_assets_from_shared_link": "Kunne ikke fjerne bilder fra delt lenke", - "unable_to_remove_library": "Kan ikke fjerne bibliotek", - "unable_to_remove_partner": "Kan ikke fjerne partner", - "unable_to_remove_reaction": "Kan ikke fjerne reaksjon", - "unable_to_reset_password": "Kan ikke tilbakestille passord", + "unable_to_remove_library": "Kunne ikke fjerne bibliotek", + "unable_to_remove_partner": "Kunne ikke fjerne partner", + "unable_to_remove_reaction": "Kunne ikke fjerne reaksjon", + "unable_to_reset_password": "Kunne ikke tilbakestille passord", "unable_to_reset_pin_code": "Klarte ikke å resette PIN kode", - "unable_to_resolve_duplicate": "Kan ikke løse duplikat", - "unable_to_restore_assets": "Kan ikke gjenopprette filer", - "unable_to_restore_trash": "Kan ikke gjenopprette papirkurven", - "unable_to_restore_user": "Kan ikke gjenopprette bruker", - "unable_to_save_album": "Kan ikke lagre album", - "unable_to_save_api_key": "Kan ikke lagre API-nøkkel", + "unable_to_resolve_duplicate": "Kunne ikke løse duplikat", + "unable_to_restore_assets": "Kunne ikke gjenopprette filer", + "unable_to_restore_trash": "Kunne ikke gjenopprette papirkurven", + "unable_to_restore_user": "Kunne ikke gjenopprette bruker", + "unable_to_save_album": "Kunne ikke lagre album", + "unable_to_save_api_key": "Kunne ikke lagre API-nøkkel", "unable_to_save_date_of_birth": "Kunne ikke lagre bursdag", - "unable_to_save_name": "Kan ikke lagre navn", - "unable_to_save_profile": "Kan ikke lagre profil", - "unable_to_save_settings": "Kan ikke lagre instillinger", - "unable_to_scan_libraries": "Kan ikke skanne biblioteker", - "unable_to_scan_library": "Kan ikke skanne bibliotek", + "unable_to_save_name": "Kunne ikke lagre navn", + "unable_to_save_profile": "Kunne ikke lagre profil", + "unable_to_save_settings": "Kunne ikke lagre instillinger", + "unable_to_scan_libraries": "Kunne ikke skanne biblioteker", + "unable_to_scan_library": "Kunne ikke skanne bibliotek", "unable_to_set_feature_photo": "Kunne ikke sette funksjonsbilde", - "unable_to_set_profile_picture": "Kan ikke sette profilbilde", - "unable_to_submit_job": "Kan ikke sende inn jobb", - "unable_to_trash_asset": "Kan ikke flytte filen til papirkurven", - "unable_to_unlink_account": "Kan ikke fjerne kobling til konto", + "unable_to_set_profile_picture": "Kunne ikke sette profilbilde", + "unable_to_submit_job": "Kunne ikke sende inn jobb", + "unable_to_trash_asset": "Kunne ikke flytte filen til papirkurven", + "unable_to_unlink_account": "Kunne ikke fjerne kobling til konto", "unable_to_unlink_motion_video": "Kunne ikke ta på kobling på bevegelig video", "unable_to_update_album_cover": "Kunne ikke oppdatere album bilde", "unable_to_update_album_info": "Kunne ikke oppdatere informasjon i album", - "unable_to_update_library": "Kan ikke oppdatere bibliotek", - "unable_to_update_location": "Kan ikke oppdatere plassering", - "unable_to_update_settings": "Kan ikke oppdatere innstillinger", - "unable_to_update_timeline_display_status": "Kan ikke oppdatere visningsstatus for tidslinje", - "unable_to_update_user": "Kan ikke oppdatere bruker", + "unable_to_update_library": "Kunne ikke oppdatere bibliotek", + "unable_to_update_location": "Kunne ikke oppdatere plassering", + "unable_to_update_settings": "Kunne ikke oppdatere innstillinger", + "unable_to_update_timeline_display_status": "Kunne ikke oppdatere visningsstatus for tidslinje", + "unable_to_update_user": "Kunne ikke oppdatere bruker", "unable_to_upload_file": "Kunne ikke laste opp fil" }, "exif": "EXIF", @@ -1059,15 +1061,15 @@ "external_network": "Eksternt nettverk", "external_network_sheet_info": "Når du ikke er på det foretrukne Wi-Fi-nettverket, vil appen koble seg til serveren via den første av URL-ene nedenfor den kan nå, fra topp til bunn", "face_unassigned": "Ikke tilordnet", - "failed": "Feilet", + "failed": "Mislyktes", "failed_to_authenticate": "Kunne ikke autentisere", - "failed_to_load_assets": "Feilet med å laste fil", + "failed_to_load_assets": "Mislyktes med å laste fil", "failed_to_load_folder": "Kunne ikke laste inn mappe", "favorite": "Favoritt", "favorite_action_prompt": "{count} lagt til i favoritter", "favorite_or_unfavorite_photo": "Merk som favoritt eller fjern som favoritt", "favorites": "Favoritter", - "favorites_page_no_favorites": "Ingen favorittobjekter funnet", + "favorites_page_no_favorites": "Ingen favorittelementer funnet", "feature_photo_updated": "Fremhevet bilde oppdatert", "features": "Funksjoner", "features_in_development": "Funksjoner under utvikling", @@ -1091,7 +1093,7 @@ "gcast_enabled": "Google Cast", "gcast_enabled_description": "Denne funksjonen laster eksterne ressurser fra Google for å fungere.", "general": "Generelt", - "geolocation_instruction_location": "Klikk på et objekt med GPS-koordinater for å bruke posisjonen, eller velg en posisjon direkte fra kartet", + "geolocation_instruction_location": "Klikk på et element med GPS-koordinater for å bruke posisjonen, eller velg en posisjon direkte fra kartet", "get_help": "Få Hjelp", "get_wifiname_error": "Kunne ikke hente Wi-Fi-navnet. Sørg for at du har gitt de nødvendige tillatelsene og er koblet til et Wi-Fi-nettverk", "getting_started": "Kom i gang", @@ -1110,8 +1112,8 @@ "haptic_feedback_switch": "Aktivert haptisk tilbakemelding", "haptic_feedback_title": "Haptisk tilbakemelding", "has_quota": "Kvote", - "hash_asset": "Hash objekter", - "hashed_assets": "Hashede objekter", + "hash_asset": "Hash elementer", + "hashed_assets": "Hashede elementer", "hashing": "Hasher", "header_settings_add_header_tip": "Legg til header", "header_settings_field_validator_msg": "Verdi kan ikke være null", @@ -1126,22 +1128,22 @@ "hide_password": "Skjul passord", "hide_person": "Skjul person", "hide_unnamed_people": "Skjul mennesker uten navn", - "home_page_add_to_album_conflicts": "Lagt til {added} objekter til album {album}. {failed} objekter er allerede i albumet.", - "home_page_add_to_album_err_local": "Kan ikke legge til lokale objekter til album enda, hopper over", - "home_page_add_to_album_success": "Lagt til {added} objekter til album {album}.", - "home_page_album_err_partner": "Kan ikke legge til partnerobjekter i album enda, hopper over", - "home_page_archive_err_local": "Kan ikke arkivere lokale objekter enda, hopper over", - "home_page_archive_err_partner": "Kan ikke arkivere partnerobjekter, hopper over", + "home_page_add_to_album_conflicts": "Lagt til {added} elementer til album {album}. {failed} elementer er allerede i albumet.", + "home_page_add_to_album_err_local": "Kunne ikke legge til lokale elementer til album enda, hopper over", + "home_page_add_to_album_success": "Lagt til {added} elementer til album {album}.", + "home_page_album_err_partner": "Kunne ikke legge til partnerelementer i album enda, hopper over", + "home_page_archive_err_local": "Kunne ikke arkivere lokale elementer enda, hopper over", + "home_page_archive_err_partner": "Kunne ikke arkivere partnerelementer, hopper over", "home_page_building_timeline": "Genererer tidslinjen", - "home_page_delete_err_partner": "Kan ikke slette partnerobjekter, hopper over", - "home_page_delete_remote_err_local": "Lokale objekter i fjernslettingsvalgene, hopper over", - "home_page_favorite_err_local": "Kan ikke sette favoritt på lokale objekter enda, hopper over", - "home_page_favorite_err_partner": "Kan ikke merke partnerobjekter som favoritt enda, hopper over", + "home_page_delete_err_partner": "Kunne ikke slette partnerelementer, hopper over", + "home_page_delete_remote_err_local": "Lokale elementer i fjernslettingsvalgene, hopper over", + "home_page_favorite_err_local": "Kunne ikke sette favoritt på lokale elementer enda, hopper over", + "home_page_favorite_err_partner": "Kunne ikke merke partnerelementer som favoritt enda, hopper over", "home_page_first_time_notice": "Hvis dette er første gangen du benytter appen, velg et album (eller flere) for sikkerhetskopiering, slik at tidslinjen kan fylles med dine bilder og videoer", - "home_page_locked_error_local": "Kunne ikke flytte lokale objekter til låst mappe, hopper over", - "home_page_locked_error_partner": "Kunne ikke flytte partner objekter til låst mappe, hopper over", - "home_page_share_err_local": "Kan ikke dele lokale objekter via link, hopper over", - "home_page_upload_err_limit": "Maksimalt 30 objekter kan lastes opp om gangen, hopper over", + "home_page_locked_error_local": "Kunne ikke flytte lokale elementer til låst mappe, hopper over", + "home_page_locked_error_partner": "Kunne ikke flytte partner elementer til låst mappe, hopper over", + "home_page_share_err_local": "Kunne ikke dele lokale elementer via link, hopper over", + "home_page_upload_err_limit": "Maksimalt 30 elementer kan lastes opp om gangen, hopper over", "host": "Vert", "hour": "Time", "hours": "Timer", @@ -1197,7 +1199,7 @@ "keep": "Behold", "keep_all": "Behold alle", "keep_this_delete_others": "Behold denne, slett de andre", - "kept_this_deleted_others": "Behold denne filen og slett {count, plural, one {# objekt} other {# objekter}}", + "kept_this_deleted_others": "Behold denne filen og slett {count, plural, one {# element} other {# elementer}}", "keyboard_shortcuts": "Tastatursnarveier", "language": "Språk", "language_no_results_subtitle": "Prøv å endre søkeord", @@ -1218,7 +1220,7 @@ "library_options": "Bibliotekalternativer", "library_page_device_albums": "Albumer på enheten", "library_page_new_album": "Nytt album", - "library_page_sort_asset_count": "Antall objekter", + "library_page_sort_asset_count": "Antall elementer", "library_page_sort_created": "Nylig opplastet", "library_page_sort_last_modified": "Sist endret", "library_page_sort_title": "Albumtittel", @@ -1233,8 +1235,8 @@ "loading": "Laster", "loading_search_results_failed": "Klarte ikke å laste inn søkeresultater", "local": "Lokal", - "local_asset_cast_failed": "Kan ikke caste et bilde som ikke er lastet opp til serveren", - "local_assets": "Lokale objekter", + "local_asset_cast_failed": "Kunne ikke caste et bilde som ikke er lastet opp til serveren", + "local_assets": "Lokale elementer", "local_media_summary": "Oppsummering av lokale media", "local_network": "Lokalt nettverk", "local_network_sheet_info": "Appen vil koble til serveren via denne URL-en når du bruker det angitte Wi-Fi-nettverket", @@ -1272,12 +1274,12 @@ "login_form_password_hint": "passord", "login_form_save_login": "Forbli innlogget", "login_form_server_empty": "Skriv inn en server-URL.", - "login_form_server_error": "Kan ikke koble til server.", + "login_form_server_error": "Kunne ikke koble til server.", "login_has_been_disabled": "Innlogging har blitt deaktivert.", "login_password_changed_error": "Det skjedde en feil ved oppdatering av passordet", "login_password_changed_success": "Passord oppdatert", - "logout_all_device_confirmation": "Er du sikker på at du vil logge ut av alle enheter?", - "logout_this_device_confirmation": "Er du sikker på at du vil logge ut av denne enheten?", + "logout_all_device_confirmation": "Vil du virkelig logge ut av alle enheter?", + "logout_this_device_confirmation": "Vil du virkelig logge ut av denne enheten?", "logs": "Logger", "longitude": "Lengdegrad", "look": "Se", @@ -1296,14 +1298,14 @@ "manage_your_oauth_connection": "Administrer tilkoblingen din med OAuth", "map": "Kart", "map_assets_in_bounds": "{count, plural, =0 {Ingen bilder i dette området} one {# photo} other {# photos}}", - "map_cannot_get_user_location": "Kan ikke hente brukerlokasjon", + "map_cannot_get_user_location": "Kunne ikke hente brukerlokasjon", "map_location_dialog_yes": "Ja", "map_location_picker_page_use_location": "Bruk denne lokasjonen", - "map_location_service_disabled_content": "Lokasjonstjeneste må være aktivert for å vise objekter fra din nåværende lokasjon. Vil du aktivere det nå?", + "map_location_service_disabled_content": "Lokasjonstjeneste må være aktivert for å vise elementer fra din nåværende lokasjon. Vil du aktivere det nå?", "map_location_service_disabled_title": "Lokasjonstjeneste deaktivert", "map_marker_for_images": "Kart makeringer for bilder tatt i {city}, {country}", "map_marker_with_image": "Kartmarkør med bilde", - "map_no_location_permission_content": "Lokasjonstilgang er påkrevet for å vise objekter fra din nåværende lokasjon. Vil du tillate det nå?", + "map_no_location_permission_content": "Lokasjonstilgang er påkrevet for å vise elementer fra din nåværende lokasjon. Vil du tillate det nå?", "map_no_location_permission_title": "Lokasjonstilgang avvist", "map_settings": "Kartinnstillinger", "map_settings_dark_mode": "Mørk modus", @@ -1321,7 +1323,7 @@ "mark_as_read": "Merk som lest", "marked_all_as_read": "Merket alle som lest", "matches": "Samsvarende", - "matching_assets": "Matchende objekter", + "matching_assets": "Matchende elementer", "media_type": "Mediatype", "memories": "Minner", "memories_all_caught_up": "Alt utført", @@ -1351,11 +1353,11 @@ "move_to_lock_folder_action_prompt": "{count} lagt til i låst mappe", "move_to_locked_folder": "Flytt til låst mappe", "move_to_locked_folder_confirmation": "Disse bildene og videoene vil bli fjernet fra alle albumer, og kun tilgjengelige via den låste mappen", - "moved_to_archive": "Flyttet {count, plural, one {# objekt} other {# objekter}} til arkivet", - "moved_to_library": "Flyttet {count, plural, one {# objekt} other {# objekter}} til biblioteket", + "moved_to_archive": "Flyttet {count, plural, one {# element} other {# elementer}} til arkivet", + "moved_to_library": "Flyttet {count, plural, one {# element} other {# elementer}} til biblioteket", "moved_to_trash": "Flyttet til papirkurven", - "multiselect_grid_edit_date_time_err_read_only": "Kan ikke endre dato på objekt(er) med kun lese-rettigheter, hopper over", - "multiselect_grid_edit_gps_err_read_only": "Kan ikke endre lokasjon på objekt(er) med kun lese-rettigheter, hopper over", + "multiselect_grid_edit_date_time_err_read_only": "Kunne ikke endre dato på element(er) med kun lese-rettigheter, hopper over", + "multiselect_grid_edit_gps_err_read_only": "Kunne ikke endre lokasjon på element(er) med kun lese-rettigheter, hopper over", "mute_memories": "Demp minner", "my_albums": "Mine album", "name": "Navn", @@ -1385,22 +1387,22 @@ "no_albums_yet": "Det ser ut som om du ikke har noen album enda.", "no_archived_assets_message": "Arkiver bilder og videoer for å skjule dem fra visningen av bildene dine", "no_assets_message": "KLIKK FOR Å LASTE OPP DITT FØRSTE BILDE", - "no_assets_to_show": "Ingen objekter å vise", + "no_assets_to_show": "Ingen elementer å vise", "no_cast_devices_found": "Ingen caste-enheter oppdaget", - "no_checksum_local": "Ingen sjekksum tilgjengelig - Kan ikke hente lokale objekter", - "no_checksum_remote": "Ingen sjekksum tilgjengelig - Kan ikke hente eksterne objekter", + "no_checksum_local": "Ingen sjekksum tilgjengelig - Kunne ikke hente lokale elementer", + "no_checksum_remote": "Ingen sjekksum tilgjengelig - Kunne ikke hente eksterne elementer", "no_duplicates_found": "Ingen duplikater ble funnet.", "no_exif_info_available": "Ingen EXIF-informasjon tilgjengelig", "no_explore_results_message": "Last opp flere bilder for å utforske samlingen din.", "no_favorites_message": "Legg til favoritter for å finne dine beste bilder og videoer raskt", "no_libraries_message": "Opprett et eksternt bibliotek for å se bildene og videoene dine", - "no_local_assets_found": "Ingen lokale objekter funnet med denne sjekksummen", + "no_local_assets_found": "Ingen lokale elementer funnet med denne sjekksummen", "no_locked_photos_message": "Bilder og videoer i den låste mappen er skjult og vil ikke vises når du blar i biblioteket.", "no_name": "Ingen navn", "no_notifications": "Ingen varsler", "no_people_found": "Ingen samsvarende personer funnet", "no_places": "Ingen steder", - "no_remote_assets_found": "Ingen eksterne objekter funnet med denne sjekksummen", + "no_remote_assets_found": "Ingen eksterne elementer funnet med denne sjekksummen", "no_results": "Ingen resultater", "no_results_description": "Prøv et synonym eller mer generelt søkeord", "no_shared_albums_message": "Opprett et album for å dele bilder og videoer med personer i nettverket ditt", @@ -1446,7 +1448,7 @@ "original": "original", "other": "Annet", "other_devices": "Andre enheter", - "other_entities": "Andre objekter", + "other_entities": "Andre elementer", "other_variables": "Andre variabler", "owned": "Dine", "owner": "Eier", @@ -1486,10 +1488,10 @@ "permanent_deletion_warning": "Advarsel om permanent sletting", "permanent_deletion_warning_setting_description": "Vis en advarsel ved permanent sletting av filer", "permanently_delete": "Slett permanent", - "permanently_delete_assets_count": "Slett {count, plural, one {objekt} other {objekter}} permanent", - "permanently_delete_assets_prompt": "Er du sikker på at du vil permanent slette {count, plural, one {dette objektet?} other {disse # objektene?}} Dette vil også slette {count, plural, one {det fra dets} other {de fra deres}} album(er).", + "permanently_delete_assets_count": "Slett {count, plural, one {element} other {elementer}} permanent", + "permanently_delete_assets_prompt": "Vil du virkelig permanent slette {count, plural, one {dette elementet?} other {disse # elementene?}} Dette vil også slette {count, plural, one {det fra dets} other {de fra deres}} album(er).", "permanently_deleted_asset": "Filen har blitt permanent slettet", - "permanently_deleted_assets_count": "Permanent slett {count, plural, one {# objekt} other {# objekter}}", + "permanently_deleted_assets_count": "Permanent slett {count, plural, one {# element} other {# elementer}}", "permission": "Tillatelse", "permission_empty": "Dine tillatelser burde ikke være tomme", "permission_onboarding_back": "Tilbake", @@ -1562,7 +1564,7 @@ "purchase_button_reminder": "Påminn meg om 30 dager", "purchase_button_remove_key": "Ta bort produktnøkkel", "purchase_button_select": "Velg", - "purchase_failed_activation": "Feilet med å aktivere! Vennligst sjekk eposten for riktig produktnøkkel!", + "purchase_failed_activation": "Mislyktes med å aktivere! Vennligst sjekk eposten for riktig produktnøkkel!", "purchase_individual_description_1": "For en person", "purchase_individual_description_2": "Støttespiller status", "purchase_individual_title": "Individuell", @@ -1576,14 +1578,14 @@ "purchase_per_server": "For hver server", "purchase_per_user": "For hver bruker", "purchase_remove_product_key": "Ta bor Produktnøkkel", - "purchase_remove_product_key_prompt": "Er du sikker på at du vil ta bort produktnøkkelen?", + "purchase_remove_product_key_prompt": "Vil du virkelig ta bort produktnøkkelen?", "purchase_remove_server_product_key": "Ta bort Server Produktnøkkel", - "purchase_remove_server_product_key_prompt": "Er du sikker på at du vil ta bort Server Produktnøkkelen?", + "purchase_remove_server_product_key_prompt": "Vil du virkelig ta bort Server Produktnøkkelen?", "purchase_server_description_1": "For hele serveren", "purchase_server_description_2": "Støttespiller status", "purchase_server_title": "Server", "purchase_settings_server_activated": "Produktnøkkel for server er administrert av administratoren", - "query_asset_id": "Forespør objektID", + "query_asset_id": "Forespør elementID", "queue_status": "Kø {count}/{total}", "rating": "Stjernevurdering", "rating_clear": "Slett vurdering", @@ -1595,8 +1597,8 @@ "readonly_mode_enabled": "Skrivebeskyttet modus aktivert", "ready_for_upload": "Klar for opplasting", "reassign": "Tilordne på nytt", - "reassigned_assets_to_existing_person": "Flyttet {count, plural, one {# objekt} other {# objekter}} to {name, select, null {en eksisterende person} other {{name}}}", - "reassigned_assets_to_new_person": "Flyttet {count, plural, one {# objekt} other {# objekter}} til en ny person", + "reassigned_assets_to_existing_person": "Flyttet {count, plural, one {# element} other {# elementer}} to {name, select, null {en eksisterende person} other {{name}}}", + "reassigned_assets_to_new_person": "Flyttet {count, plural, one {# element} other {# elementer}} til en ny person", "reassing_hint": "Tilordne valgte eiendeler til en eksisterende person", "recent": "Nylig", "recent-albums": "Nylige album", @@ -1617,11 +1619,11 @@ "refreshing_metadata": "Oppdaterer matadata", "regenerating_thumbnails": "Regenererer miniatyrbilder", "remote": "Eksternt", - "remote_assets": "Eksterne objekter", + "remote_assets": "Eksterne elementer", "remote_media_summary": "Oppsummering av eksterne media", "remove": "Fjern", - "remove_assets_album_confirmation": "Er du sikker på at du fil slette {count, plural, one {# objekt} other {# objekter}} fra albumet?", - "remove_assets_shared_link_confirmation": "Er du sikker på at du vil slette {count, plural, one {# objekt} other {# objekter}} fra den delte lenken?", + "remove_assets_album_confirmation": "Er du sikker på at du fil slette {count, plural, one {# element} other {# elementer}} fra albumet?", + "remove_assets_shared_link_confirmation": "Vil du virkelig slette {count, plural, one {# element} other {# elementer}} fra den delte lenken?", "remove_assets_title": "Vil du fjerne eiendeler?", "remove_custom_date_range": "Fjern egendefinert datoperiode", "remove_deleted_assets": "Fjern fra frakoblede filer", @@ -1630,7 +1632,7 @@ "remove_from_favorites": "Fjern fra favoritter", "remove_from_lock_folder_action_prompt": "{count} fjernet fra låst mappe", "remove_from_locked_folder": "Fjern fra låst mappe", - "remove_from_locked_folder_confirmation": "Er du sikker på at du vil flytte disse bildene og videoene ut av den låste mappen? De vil bli synlige i biblioteket.", + "remove_from_locked_folder_confirmation": "Vil du virkelig flytte disse bildene og videoene ut av den låste mappen? De vil bli synlige i biblioteket.", "remove_from_shared_link": "Fjern fra delt lenke", "remove_memory": "Slett minne", "remove_photo_from_memory": "Slett bilde fra dette minne", @@ -1643,7 +1645,7 @@ "removed_from_favorites_count": "{count, plural, other {Removed #}} fra favoritter", "removed_memory": "Slettet minne", "removed_photo_from_memory": "Slettet bilde fra minne", - "removed_tagged_assets": "Fjern tag fra {count, plural, one {# objekt} other {# objekter}}", + "removed_tagged_assets": "Fjern tag fra {count, plural, one {# element} other {# elementer}}", "rename": "Gi nytt navn", "repair": "Reparer", "repair_no_results_message": "Usporrede og savnede filer vil vises her", @@ -1660,14 +1662,14 @@ "reset_pin_code_success": "PIN-koden er tilbakestilt", "reset_pin_code_with_password": "Du kan alltid tilbakestiller PIN-koden med passordet ditt", "reset_sqlite": "Reset SQLite Databasen", - "reset_sqlite_confirmation": "Er du sikker på at du vil resette SQLite databasen? Du blir nødt til å logge ut og inn igjen for å resynkronisere data", + "reset_sqlite_confirmation": "Vil du virkelig resette SQLite databasen? Du blir nødt til å logge ut og inn igjen for å resynkronisere data", "reset_sqlite_success": "Vellykket resetting av SQLite databasen", "reset_to_default": "Tilbakestill til standard", "resolve_duplicates": "Løs duplikater", "resolved_all_duplicates": "Løste alle duplikater", "restore": "Gjenopprett", "restore_all": "Gjenopprett alle", - "restore_trash_action_prompt": "{count} gjenopprettet fra søppelbøtten", + "restore_trash_action_prompt": "{count} gjenopprettet fra papirkurven", "restore_user": "Gjenopprett bruker", "restored_asset": "Gjenopprettet ressurs", "resume": "Fortsett", @@ -1723,7 +1725,7 @@ "search_options": "Søke alternativer", "search_page_categories": "Kategorier", "search_page_motion_photos": "Bevegelige bilder", - "search_page_no_objects": "Ingen objektinfo tilgjengelig", + "search_page_no_objects": "Ingen elementinfo tilgjengelig", "search_page_no_places": "Ingen stedsinformasjon er tilgjengelig", "search_page_screenshots": "Skjermbilder", "search_page_search_photos_videos": "Søk etter dine bilder og videoer", @@ -1762,7 +1764,7 @@ "select_person_to_tag": "Velg en person å tagge", "select_photos": "Velg bilder", "select_trash_all": "Velg å flytte alt til papirkurven", - "select_user_for_sharing_page_err_album": "Feilet ved oppretting av album", + "select_user_for_sharing_page_err_album": "Mislyktes ved oppretting av album", "selected": "Valgt", "selected_count": "{count, plural, other {# valgt}}", "selected_gps_coordinates": "Valgte GPS-koordinater", @@ -1798,10 +1800,10 @@ "setting_notifications_notify_minutes": "{count} minutter", "setting_notifications_notify_never": "aldri", "setting_notifications_notify_seconds": "{count} sekunder", - "setting_notifications_single_progress_subtitle": "Detaljert opplastingsinformasjon per objekt", + "setting_notifications_single_progress_subtitle": "Detaljert opplastingsinformasjon per element", "setting_notifications_single_progress_title": "Vis detaljert status på sikkerhetskopiering i bakgrunnen", "setting_notifications_subtitle": "Juster notifikasjonsinnstillinger", - "setting_notifications_total_progress_subtitle": "Total opplastingsstatus (fullført/totalt objekter)", + "setting_notifications_total_progress_subtitle": "Total opplastingsstatus (fullført/totalt elementer)", "setting_notifications_total_progress_title": "Vis status på sikkerhetskopiering i bakgrunnen", "setting_video_viewer_looping_title": "Looping", "setting_video_viewer_original_video_subtitle": "Når det streames en video fra serveren, spill originalkvaliteten selv om en omkodet versjon finnes. Dette kan medføre buffring. Videoer som er lagret lokalt på enheten spilles i originalkvalitet uavhengig av denne innstillingen.", @@ -1811,7 +1813,7 @@ "settings_saved": "Innstillinger lagret", "setup_pin_code": "Sett opp en PINkode", "share": "Del", - "share_action_prompt": "Delte {count} objekter", + "share_action_prompt": "Delte {count} elementer", "share_add_photos": "Legg til bilder", "share_assets_selected": "{count} valgt", "share_dialog_preparing": "Forbereder ...", @@ -1845,7 +1847,7 @@ "shared_link_edit_expire_after_option_year": "{count} år", "shared_link_edit_password_hint": "Skriv inn dele-passord", "shared_link_edit_submit_button": "Oppdater link", - "shared_link_error_server_url_fetch": "Kan ikke hente server-url", + "shared_link_error_server_url_fetch": "Kunne ikke hente server-url", "shared_link_expires_day": "Utgår om {count} dag", "shared_link_expires_days": "Utgår om {count} dager", "shared_link_expires_hour": "Utgår om {count} time", @@ -1921,7 +1923,7 @@ "stack_duplicates": "Stable duplikater", "stack_select_one_photo": "Velg hovedbilde for bildestabbel", "stack_selected_photos": "Stable valgte bilder", - "stacked_assets_count": "Stable {count, plural, one {# objekt} other {# objekter}}", + "stacked_assets_count": "Stable {count, plural, one {# element} other {# elementer}}", "stacktrace": "Stakkspor", "start": "Start", "start_date": "Startdato", @@ -1960,15 +1962,15 @@ "tag_not_found_question": "Finner du ikke en merke? Opprett en nytt merke.", "tag_people": "Tag Folk", "tag_updated": "Oppdater merke: {tag}", - "tagged_assets": "Merket {count, plural, one {# objekt} other {# objekter}}", + "tagged_assets": "Merket {count, plural, one {# element} other {# elementer}}", "tags": "Merker", "tap_to_run_job": "Trykk for å kjøre jobben", "template": "Mal", "theme": "Tema", "theme_selection": "Temavalg", "theme_selection_description": "Automatisk sett tema til lys eller mørk basert på nettleserens systeminnstilling", - "theme_setting_asset_list_storage_indicator_title": "Vis lagringsindiaktor på objekter i fotorutenettet", - "theme_setting_asset_list_tiles_per_row_title": "Antall objekter per rad ({count})", + "theme_setting_asset_list_storage_indicator_title": "Vis lagringsindiaktor på elementer i fotorutenettet", + "theme_setting_asset_list_tiles_per_row_title": "Antall elementer per rad ({count})", "theme_setting_colorful_interface_subtitle": "Angi primærfarge til bakgrunner.", "theme_setting_colorful_interface_title": "Fargefullt grensesnitt", "theme_setting_image_viewer_quality_subtitle": "Juster kvaliteten på bilder i detaljvisning", @@ -2000,15 +2002,15 @@ "trash_action_prompt": "{count} flyttet til søppel", "trash_all": "Slett alt", "trash_count": "Slett {count, number}", - "trash_delete_asset": "Slett objekt", - "trash_emptied": "Søppelbøtte tømt", + "trash_delete_asset": "Slett element", + "trash_emptied": "Søppelbøtte Tømt", "trash_no_results_message": "Her vises bilder og videoer som er flyttet til papirkurven.", "trash_page_delete_all": "Slett alt", - "trash_page_empty_trash_dialog_content": "Vil du tømme søppelbøtten? Objektene vil bli permanent fjernet fra Immich", - "trash_page_info": "Objekter i søppelbøtten blir permanent fjernet etter {days} dager", - "trash_page_no_assets": "Ingen forkastede objekter", + "trash_page_empty_trash_dialog_content": "Vil du Tømme papirkurven? Objektene vil bli permanent fjernet fra Immich", + "trash_page_info": "Objekter i papirkurven blir permanent fjernet etter {days} dager", + "trash_page_no_assets": "Ingen forkastede elementer", "trash_page_restore_all": "Gjenopprett alt", - "trash_page_select_assets_btn": "Velg objekter", + "trash_page_select_assets_btn": "Velg elementer", "trash_page_title": "Søppelbøtte ({count})", "trashed_items_will_be_permanently_deleted_after": "Elementer i papirkurven vil bli permanent slettet etter {days, plural, one {# dag} other {# dager}}.", "troubleshoot": "Feilsøk", @@ -2031,7 +2033,7 @@ "unlinked_oauth_account": "Koblet fra OAuth-konto", "unmute_memories": "Opphev demping av minner", "unnamed_album": "Navnløst album", - "unnamed_album_delete_confirmation": "Er du sikker på at du vil slette dette albumet?", + "unnamed_album_delete_confirmation": "Vil du virkelig slette dette albumet?", "unnamed_share": "Deling uten navn", "unsaved_change": "Ulagrede endringer", "unselect_all": "Fjern alle valg", @@ -2039,22 +2041,22 @@ "unselect_all_in": "Fjern velging av alle i {group}", "unstack": "avstable", "unstack_action_prompt": "{count} ustakket", - "unstacked_assets_count": "Ikke stablet {count, plural, one {# objekt} other {# objekter}}", + "unstacked_assets_count": "Ikke stablet {count, plural, one {# element} other {# elementer}}", "untagged": "Umerket", "up_next": "Neste", - "update_location_action_prompt": "Oppdater plasseringen til {count} valgte objekter med:", + "update_location_action_prompt": "Oppdater plasseringen til {count} valgte elementer med:", "updated_at": "Oppdatert", "updated_password": "Passord oppdatert", "upload": "Last opp", "upload_action_prompt": "{count} i kø for opplasting", "upload_concurrency": "Samtidig opplastning", "upload_details": "Opplastingsdetaljer", - "upload_dialog_info": "Vil du utføre backup av valgte objekt(er) til serveren?", - "upload_dialog_title": "Last opp objekt", + "upload_dialog_info": "Vil du utføre backup av valgte element(er) til serveren?", + "upload_dialog_title": "Last opp element", "upload_errors": "Opplasting fullført med {count, plural, one {# error} other {# errors}}, oppdater siden for å se nye opplastingsressurser.", "upload_finished": "Opplasting fullført", "upload_progress": "Gjenstående {remaining, number} – behandlet {processed, number}/{total, number}", - "upload_skipped_duplicates": "Hoppet over {count, plural, one {# duplisert objekt} other {# dupliserte objekter}}", + "upload_skipped_duplicates": "Hoppet over {count, plural, one {# duplisert element} other {# dupliserte elementer}}", "upload_status_duplicates": "Duplikater", "upload_status_errors": "Feil", "upload_status_uploaded": "Opplastet", @@ -2070,7 +2072,7 @@ "user": "Bruker", "user_has_been_deleted": "Denne brukeren har blitt slettet.", "user_id": "Bruker ID", - "user_liked": "{user} likte {type, select, photo {dette bildet} video {denne videoen} asset {dette objektet} other {dette}}", + "user_liked": "{user} likte {type, select, photo {dette bildet} video {denne videoen} asset {dette elementet} other {dette}}", "user_pin_code_settings": "PINkode", "user_pin_code_settings_description": "Håndter din PINkode", "user_privacy": "Personverninnstillinger", @@ -2113,7 +2115,7 @@ "view_stack": "Vis stabel", "view_user": "Vis bruker", "viewer_remove_from_stack": "Fjern fra stabling", - "viewer_stack_use_as_main_asset": "Bruk som hovedobjekt", + "viewer_stack_use_as_main_asset": "Bruk som hovedelement", "viewer_unstack": "avstable", "visibility_changed": "Synlighet endret for {count, plural, one {# person} other {# people}}", "waiting": "Venter", diff --git a/i18n/nl.json b/i18n/nl.json index 82846668d8..55e934736c 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -416,7 +416,7 @@ "age_years": "{years, plural, other {Leeftijd #}}", "album_added": "Album toegevoegd", "album_added_notification_setting_description": "Ontvang een e-mailmelding wanneer je aan een gedeeld album wordt toegevoegd", - "album_cover_updated": "Album cover is bijgewerkt", + "album_cover_updated": "Albumomslag is bijgewerkt", "album_delete_confirmation": "Weet je zeker dat je het album {album} wilt verwijderen?", "album_delete_confirmation_description": "Als dit album gedeeld is, hebben andere gebruikers er geen toegang meer toe.", "album_deleted": "Album verwijderd", @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Back-up op de voorgrond aanzetten", "backup_controller_page_uploading_file_info": "Bestandsgegevens uploaden", "backup_err_only_album": "Kan het enige album niet verwijderen", + "backup_error_sync_failed": "Synchronisatie mislukt. Kan back-up niet verwerken.", "backup_info_card_assets": "bestanden", "backup_manual_cancelled": "Geannuleerd", "backup_manual_in_progress": "Het uploaden is al bezig. Probeer het na een tijdje", @@ -734,7 +735,7 @@ "copy_to_clipboard": "Kopiëren naar klembord", "country": "Land", "cover": "Bedekken", - "covers": "Covers", + "covers": "Omslagen", "create": "Aanmaken", "create_album": "Album aanmaken", "create_album_page_untitled": "Naamloos", @@ -820,7 +821,7 @@ "disabled": "Uitgeschakeld", "disallow_edits": "Geen bewerkingen toestaan", "discord": "Discord", - "discover": "Zoeken", + "discover": "Zoek", "discovered_devices": "Gevonden apparaten", "dismiss_all_errors": "Negeer alle fouten", "dismiss_error": "Negeer fout", @@ -840,7 +841,7 @@ "download_failed": "Download mislukt", "download_finished": "Download voltooid", "download_include_embedded_motion_videos": "Ingesloten video's", - "download_include_embedded_motion_videos_description": "Voeg video's toe die ingesloten zijn in bewegende foto's als een apart bestand", + "download_include_embedded_motion_videos_description": "Voeg video's die in bewegingsfoto's zijn ingebed toe als een apart bestand", "download_notfound": "Download niet gevonden", "download_paused": "Download gepauseerd", "download_settings": "Downloaden", @@ -1023,7 +1024,7 @@ "unable_to_trash_asset": "Kan item niet naar prullenbak verplaatsen", "unable_to_unlink_account": "Kan account niet ontkoppelen", "unable_to_unlink_motion_video": "Kan bewegende video niet ontkoppelen", - "unable_to_update_album_cover": "Kan album cover niet bijwerken", + "unable_to_update_album_cover": "Kan albumomslag niet bijwerken", "unable_to_update_album_info": "Kan albumgegevens niet bijwerken", "unable_to_update_library": "Kan bibliotheek niet bijwerken", "unable_to_update_location": "Kan locatie niet bijwerken", @@ -1749,7 +1750,7 @@ "second": "Seconde", "see_all_people": "Bekijk alle mensen", "select": "Selecteer", - "select_album_cover": "Selecteer album cover", + "select_album_cover": "Selecteer albumomslag", "select_all": "Alles selecteren", "select_all_duplicates": "Selecteer alle duplicaten", "select_all_in": "Selecteer alles in {group}", @@ -1778,7 +1779,7 @@ "server_stats": "Serverstatistieken", "server_version": "Serverversie", "set": "Instellen", - "set_as_album_cover": "Stel in als album cover", + "set_as_album_cover": "Stel in als albumomslag", "set_as_featured_photo": "Instellen als uitgelichte foto", "set_as_profile_picture": "Instellen als profielfoto", "set_date_of_birth": "Geboortedatum instellen", diff --git a/i18n/pl.json b/i18n/pl.json index f2016bd1ce..a97ea701d0 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Włącz kopię zapasową na pierwszym planie", "backup_controller_page_uploading_file_info": "Informacje o przesyłanym pliku", "backup_err_only_album": "Nie można usunąć jedynego albumu", + "backup_error_sync_failed": "Synchronizacja nie powiodła się. Nie można wykonać kopii zapasowej.", "backup_info_card_assets": "zasoby", "backup_manual_cancelled": "Anulowano", "backup_manual_in_progress": "Przesyłanie już trwa. Spróbuj po pewnym czasie", diff --git a/i18n/pt.json b/i18n/pt.json index b05c9288a8..6bd4a786dd 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -368,7 +368,7 @@ "trash_settings_description": "Gerir definições da reciclagem", "unlink_all_oauth_accounts": "Desvincular todas as contas OAuth", "unlink_all_oauth_accounts_description": "Lembre-se de desvincular todas as contas OAuth antes de migrar para um novo provedor.", - "unlink_all_oauth_accounts_prompt": "Tem a certeza de que deseja desvincular todas as contas OAuth? Isso redefinirá o ID OAuth de cada utilizador e não poderá ser desfeito.", + "unlink_all_oauth_accounts_prompt": "Tem a certeza de que deseja desvincular todas as contas OAuth? Isto irá redefinir o ID OAuth de cada utilizador e não poderá ser anulado.", "user_cleanup_job": "Limpeza de utilizadores", "user_delete_delay": "A conta e os ficheiros de {user} serão agendados para eliminação permanente dentro de {delay, plural, one {# dia} other {# dias}}.", "user_delete_delay_settings": "Atraso de eliminação", @@ -402,8 +402,8 @@ "advanced_settings_prefer_remote_title": "Preferir imagens do servidor", "advanced_settings_proxy_headers_subtitle": "Defina os cabeçalhos do proxy que o Immich deve enviar em todas comunicações com a rede", "advanced_settings_proxy_headers_title": "Cabeçalhos do Proxy", - "advanced_settings_readonly_mode_subtitle": "Ativa o modo somente leitura, onde as fotos podem ser visualizadas. Recursos como selecionar várias imagens, partilhar, transmitir e excluir ficam deactivados. Ativar/Desativar o modo somente leitura via avatar do utilizador na janela principal", - "advanced_settings_readonly_mode_title": "Modo somente leitura", + "advanced_settings_readonly_mode_subtitle": "Ativa o modo só de leitura, onde as fotos apenas podem ser visualizadas. Funções como selecionar várias imagens, partilhar, transmitir e eliminar ficam deactivadas. Pode ativar ou desativar o modo só de leitura através da imagem de perfil do utilizador na janela principal", + "advanced_settings_readonly_mode_title": "Modo só de leitura", "advanced_settings_self_signed_ssl_subtitle": "Não validar o certificado SSL com o endereço do servidor. Isto é necessário para certificados auto-assinados.", "advanced_settings_self_signed_ssl_title": "Permitir certificados SSL auto-assinados", "advanced_settings_sync_remote_deletions_subtitle": "Automaticamente eliminar ou restaurar um ficheiro neste dispositivo quando essa mesma ação for efetuada na web", @@ -512,9 +512,9 @@ "assets": "Ficheiros", "assets_added_count": "{count, plural, one {# ficheiro adicionado} other {# ficheiros adicionados}}", "assets_added_to_album_count": "{count, plural, one {# ficheiro adicionado} other {# ficheiros adicionados}} ao álbum", - "assets_added_to_albums_count": "Adicionado {assetTotal, plural, one {# asset} other {# assets}} a {albumTotal, plural, one {# album} other {# albums}}", + "assets_added_to_albums_count": "{assetTotal, plural, one {Foi adicionado # ficheiro} other {Foram adiciondos # ficheiros}} a {albumTotal, plural, one {# álbum} other {# albuns}}", "assets_cannot_be_added_to_album_count": "Não foi possível adicionar {count, plural, one {ficheiro} other {ficheiros}} ao álbum", - "assets_cannot_be_added_to_albums": "{count, plural, one {Asset} other {Assets}} não pode ser adicionado a nenhum dos álbuns", + "assets_cannot_be_added_to_albums": "{count, plural, one {Ficheiro não pode ser adicionado} other {Ficheiros não podem ser adiciondos}} a nenhum dos álbuns", "assets_count": "{count, plural, one {# ficheiro} other {# ficheiros}}", "assets_deleted_permanently": "{count} ficheiro(s) eliminado(s) permanentemente", "assets_deleted_permanently_from_server": "{count} ficheiro(s) eliminado(s) permanentemente do servidor Immich", @@ -531,7 +531,7 @@ "assets_trashed_count": "{count, plural, one {# ficheiro enviado} other {# ficheiros enviados}} para a reciclagem", "assets_trashed_from_server": "{count} ficheiro(s) do servidor Immich foi/foram enviados para a reciclagem", "assets_were_part_of_album_count": "{count, plural, one {O ficheiro já fazia} other {Os ficheiros já faziam}} parte do álbum", - "assets_were_part_of_albums_count": "{count, plural, one {Asset was} other {Assets were}} já faz parte dos álbuns", + "assets_were_part_of_albums_count": "{count, plural, one {Ficheiro já fazia} other {Ficheiros já faziam}} parte dos álbuns", "authorized_devices": "Dispositivos Autorizados", "automatic_endpoint_switching_subtitle": "Conecte-se localmente quando estiver em uma rede uma Wi-Fi específica e use conexões alternativas em outras redes", "automatic_endpoint_switching_title": "Troca automática de URL", @@ -589,7 +589,7 @@ "backup_controller_page_remainder": "Restante", "backup_controller_page_remainder_sub": "Fotos e vídeos selecionados restantes para fazer backup", "backup_controller_page_server_storage": "Armazenamento no servidor", - "backup_controller_page_start_backup": "Iniciar Backup", + "backup_controller_page_start_backup": "Iniciar Cópia de Segurança", "backup_controller_page_status_off": "Backup automático desativado", "backup_controller_page_status_on": "Backup automático ativado", "backup_controller_page_storage_format": "{used} de {total} utilizado", @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Ativar backup", "backup_controller_page_uploading_file_info": "Enviando arquivo", "backup_err_only_album": "Não é possível remover apenas o álbum", + "backup_error_sync_failed": "A sincronização falhou. Não é possível fazer cópia de segurança.", "backup_info_card_assets": "arquivos", "backup_manual_cancelled": "Cancelado", "backup_manual_in_progress": "Envio já está em progresso. Tente novamente mais tarde", @@ -667,7 +668,7 @@ "change_your_password": "Alterar a sua palavra-passe", "changed_visibility_successfully": "Visibilidade alterada com sucesso", "charging": "A carregar", - "charging_requirement_mobile_backup": "Cópia de segurança de fundo necesssita que o dispositivo esteja a carregar", + "charging_requirement_mobile_backup": "Cópia de segurança de fundo necessita que o dispositivo esteja a carregar", "check_corrupt_asset_backup": "Verificar por backups corrompidos", "check_corrupt_asset_backup_button": "Verificar", "check_corrupt_asset_backup_description": "Execute esta verificação somente em uma rede Wi-Fi e quando o backup de todos os arquivos já estiver concluído. O processo demora alguns minutos.", @@ -906,7 +907,7 @@ "error_delete_face": "Falha ao remover rosto do ficheiro", "error_getting_places": "Erro ao obter locais", "error_loading_image": "Erro ao carregar a imagem", - "error_loading_partners": "Erro a carregar parceiros: {error}", + "error_loading_partners": "Erro ao carregar parceiros: {error}", "error_saving_image": "Erro: {error}", "error_tag_face_bounding_box": "Erro ao marcar o rosto - não foi possível localizar o rosto", "error_title": "Erro - Algo correu mal", @@ -939,7 +940,7 @@ "failed_to_load_notifications": "Ocorreu um erro ao carregar notificações", "failed_to_load_people": "Ocorreu um erro ao carregar pessoas", "failed_to_remove_product_key": "Ocorreu um erro ao remover chave de produto", - "failed_to_reset_pin_code": "Falha ao repor o código PIN", + "failed_to_reset_pin_code": "Ocorreu um erro ao repor o código PIN", "failed_to_stack_assets": "Ocorreu um erro ao empilhar os ficheiros", "failed_to_unstack_assets": "Ocorreu um erro ao desempilhar ficheiros", "failed_to_update_notification_status": "Ocorreu um erro ao atualizar o estado das notificações", @@ -948,7 +949,7 @@ "paths_validation_failed": "Ocorreu um erro na validação de {paths, plural, one {# caminho} other {# caminhos}}", "profile_picture_transparent_pixels": "Imagem de perfil não pode ter pixeis transparentes. Por favor amplie e/ou mova a imagem.", "quota_higher_than_disk_size": "Definiu uma quota maior do que o tamanho do disco", - "something_went_wrong": "Algo deu errado", + "something_went_wrong": "Algo correu mal", "unable_to_add_album_users": "Não foi possível adicionar utilizadores ao álbum", "unable_to_add_assets_to_shared_link": "Não foi possível adicionar os ficheiros ao link partilhado", "unable_to_add_comment": "Não foi possível adicionar o comentário", @@ -1087,12 +1088,12 @@ "folder_not_found": "Pasta não encontrada", "folders": "Pastas", "folders_feature_description": "Navegar na vista de pastas por fotos e vídeos no sistema de ficheiros", - "forgot_pin_code_question": "Esqueceu o seu PIN?", + "forgot_pin_code_question": "Esqueceu-se do seu PIN?", "forward": "Para a frente", "gcast_enabled": "Google Cast", "gcast_enabled_description": "Esta funcionalidade requer o carregamento de recursos externos da Google para poder funcionar.", "general": "Geral", - "geolocation_instruction_location": "Clique num ativo com coordenadas GPS para usar a sua localização ou seleccione um local diretamente do mapa", + "geolocation_instruction_location": "Clique num ficheiro com coordenadas GPS para usar a sua localização ou selecione um local diretamente do mapa", "get_help": "Obter Ajuda", "get_wifiname_error": "Não foi possível obter o nome do Wi-Fi. Verifique se concedeu as permissões necessárias e se está conectado a uma rede Wi-Fi", "getting_started": "Primeiros Passos", @@ -1225,7 +1226,7 @@ "library_page_sort_title": "Título do álbum", "licenses": "Licenças", "light": "Claro", - "like": "Gostar", + "like": "Gosto", "like_deleted": "Gosto removido", "link_motion_video": "Relacionar video animado", "link_to_oauth": "Link do OAuth", @@ -1254,7 +1255,7 @@ "logged_in_as": "Utilizador atual: {user}", "logged_out_all_devices": "Sessão terminada em todos os dispositivos", "logged_out_device": "Sessão terminada no dispositivo", - "login": "Iniciar sessão", + "login": "Iniciar Sessão", "login_disabled": "Login desativado", "login_form_api_exception": "Erro de API. Verifique a URL do servidor e tente novamente.", "login_form_back_button_text": "Voltar", @@ -1284,7 +1285,7 @@ "look": "Estilo", "loop_videos": "Repetir vídeos", "loop_videos_description": "Ativar para repetir os vídeos automaticamente durante a exibição.", - "main_branch_warning": "Está a utilizar uma versão de desenvolvimento, recomendamos vivamente que utilize uma versão estável!", + "main_branch_warning": "Está a usar uma versão de desenvolvimento; recomendamos vivamente que use uma versão de lançamento!", "main_menu": "Menu Principal", "make": "Marca", "manage_geolocation": "Gerir localização", @@ -1296,7 +1297,7 @@ "manage_your_devices": "Gerir os seus dispositivos com sessão iniciada", "manage_your_oauth_connection": "Gerir a sua ligação ao OAuth", "map": "Mapa", - "map_assets_in_bounds": "{count, plural, =0 {No photos in this area} one {# photo} other {# photos}}", + "map_assets_in_bounds": "{count, plural, =0 {Sem fotos nesta área} one {# foto} other {# fotos}}", "map_cannot_get_user_location": "Impossível obter a sua localização", "map_location_dialog_yes": "Sim", "map_location_picker_page_use_location": "Utilizar esta localização", @@ -1361,12 +1362,12 @@ "my_albums": "Os meus álbuns", "name": "Nome", "name_or_nickname": "Nome ou alcunha", - "network_requirement_photos_upload": "Usar dados móveis para fazer backup de fotos", - "network_requirement_videos_upload": "Usar dados móveis para fazer backup de vídeos", + "network_requirement_photos_upload": "Usar dados móveis para fazer cópia de segurança de fotos", + "network_requirement_videos_upload": "Usar dados móveis para fazer cópia de segurança de vídeos", "network_requirements": "Requisitos de rede", - "network_requirements_updated": "Requisitos de rede alterados, redefinindo fila de backup", - "networking_settings": "Conexões", - "networking_subtitle": "Gerencie a conexão do servidor", + "network_requirements_updated": "Requisitos de rede alterados, a redefinir fila de cópia de segurança", + "networking_settings": "Ligações", + "networking_subtitle": "Gerir as ligações de rede do servidor", "never": "Nunca", "new_album": "Novo Álbum", "new_api_key": "Nova Chave de API", @@ -1389,16 +1390,19 @@ "no_assets_to_show": "Não há arquivos para exibir", "no_cast_devices_found": "Nenhum dispositivo de transmissão encontrado", "no_checksum_local": "Sem cálculo de verificação disponível - não pode capturar conteúdos locais", + "no_checksum_remote": "Soma de verificação (checksum) não disponível - não é possível obter o recurso remoto", "no_duplicates_found": "Nenhum item duplicado foi encontrado.", "no_exif_info_available": "Sem informações exif disponíveis", "no_explore_results_message": "Carregue mais fotos para explorar a sua coleção.", "no_favorites_message": "Adicione aos favoritos para encontrar as suas melhores fotos e vídeos rapidamente", "no_libraries_message": "Crie uma biblioteca externa para ver as suas fotos e vídeos", + "no_local_assets_found": "Sem cálculo de verificação disponível", "no_locked_photos_message": "Fotos e vídeos na pasta trancada estão ocultos e não serão exibidos enquanto explora ou pesquisa na biblioteca.", "no_name": "Sem nome", "no_notifications": "Sem notificações", "no_people_found": "Nenhuma pessoa encontrada", "no_places": "Sem lugares", + "no_remote_assets_found": "Soma de verificação (checksum) não disponível - não é possível obter o recurso remoto", "no_results": "Sem resultados", "no_results_description": "Tente um sinónimo ou uma palavra-chave mais comum", "no_shared_albums_message": "Crie um álbum para partilhar fotos e vídeos com pessoas na sua rede", @@ -1499,9 +1503,9 @@ "permission_onboarding_permission_limited": "Permissão limitada. Para permitir que o Immich faça backups e gerencie sua galeria, conceda permissões para fotos e vídeos nas configurações.", "permission_onboarding_request": "O Immich requer autorização para ver as suas fotos e vídeos.", "person": "Pessoa", - "person_age_months": "{months, plural, one {# month} other {# months}} idade", - "person_age_year_months": "1 ano, {months, plural, one {# month} other {# months}} idade", - "person_age_years": "{years, plural, other {# years}} idade", + "person_age_months": "{months, plural, one {# month} other {# months}} de idade", + "person_age_year_months": "1 ano, {months, plural, one {# month} other {# months}} de idade", + "person_age_years": "{years, plural, other {# anos}} de idade", "person_birthdate": "Nasceu a {date}", "person_hidden": "{name}{hidden, select, true { (oculto)} other {}}", "photo_shared_all_users": "Parece que partilhou as suas fotos com todos os utilizadores ou não tem nenhum utilizador para partilhar.", @@ -1542,7 +1546,7 @@ "profile_drawer_client_out_of_date_minor": "O aplicativo está desatualizado. Por favor, atualize para a versão mais recente.", "profile_drawer_client_server_up_to_date": "Cliente e Servidor atualizados", "profile_drawer_github": "GitHub", - "profile_drawer_readonly_mode": "Modo somente leitura ativado. Toque duas vezes no ícone do avatar do utilizador para sair.", + "profile_drawer_readonly_mode": "Modo só de leitura ativado. Faça um toque longo no ícone do perfil do utilizador para sair.", "profile_drawer_server_out_of_date_major": "O servidor está desatualizado. Atualize para a versão principal mais recente.", "profile_drawer_server_out_of_date_minor": "O servidor está desatualizado. Atualize para a versão mais recente.", "profile_image_of_user": "Imagem de perfil de {user}", @@ -1569,7 +1573,7 @@ "purchase_lifetime_description": "Compra vitalícia", "purchase_option_title": "OPÇÕES DE COMPRA", "purchase_panel_info_1": "O desenvolvimento do Immich requer muito tempo e esforço, e temos engenheiros a tempo inteiro a trabalhar nele para melhorá-lo quanto possível. A nossa missão é para que o software de código aberto e práticas de negócio éticas se tornem numa fonte de rendimento sustentável para os desenvolvedores e criar um ecossistema que respeite a privacidade dos utilizadores e que ofereça alternativas reais a serviços cloud explorativos.", - "purchase_panel_info_2": "Como estamos comprometidos a não adicionar acesso pago, esta compra não lhe dará acesso a nenhuma funcionalidade adicional do Immich. Contamos com utilizadores como você para dar suporte ao desenvolvimento contínuo do Immich.", + "purchase_panel_info_2": "Uma vez que estamos empenhados em não adicionar barreiras de pagamento, esta compra não lhe dará quaisquer funcionalidades adicionais no Immich. Contamos com utilizadores como você para apoiar o desenvolvimento contínuo do Immich.", "purchase_panel_title": "Apoie o projeto", "purchase_per_server": "Por servidor", "purchase_per_user": "Por utilizador", @@ -1581,7 +1585,7 @@ "purchase_server_description_2": "Status de apoiante", "purchase_server_title": "Servidor", "purchase_settings_server_activated": "A chave de produto do servidor é gerida pelo administrador", - "query_asset_id": "Consultar ID do recurso", + "query_asset_id": "Consultar ID do ficheiro", "queue_status": "Em fila {count}/{total}", "rating": "Classificação por estrelas", "rating_clear": "Limpar classificação", @@ -1589,8 +1593,8 @@ "rating_description": "Mostrar a classificação EXIF no painel de informações", "reaction_options": "Opções de reação", "read_changelog": "Ler Novidades", - "readonly_mode_disabled": "Modo somente leitura desativado", - "readonly_mode_enabled": "Modo somente leitura ativado", + "readonly_mode_disabled": "Modo só de leitura desativado", + "readonly_mode_enabled": "Modo só de leitura ativado", "ready_for_upload": "Pronto para upload", "reassign": "Reatribuir", "reassigned_assets_to_existing_person": "Reatribuir {count, plural, one {# ficheiro} other {# ficheiros}} para {name, select, null {uma pessoa existente} other {{name}}}", @@ -1616,6 +1620,7 @@ "regenerating_thumbnails": "A atualizar miniaturas", "remote": "Remoto", "remote_assets": "Ficheiros Remotos", + "remote_media_summary": "Sumário de Ficheiros Remotos", "remove": "Remover", "remove_assets_album_confirmation": "Tem a certeza de que deseja remover {count, plural, one {# ficheiro} other {# ficheiros}} do álbum?", "remove_assets_shared_link_confirmation": "Tem certeza de que deseja remover {count, plural, one {# ficheiro} other {# ficheiros}} deste link partilhado?", @@ -1653,9 +1658,9 @@ "reset_password": "Redefinir palavra-passe", "reset_people_visibility": "Redefinir pessoas ocultas", "reset_pin_code": "Repor código PIN", - "reset_pin_code_description": "Se esqueceu o seu código PIN, pode entrar em contato com o administrador do servidor para o repor", + "reset_pin_code_description": "Se esqueceu o seu código PIN, pode entrar em contacto com o administrador do servidor para o repor", "reset_pin_code_success": "Código PIN redefinido com sucesso", - "reset_pin_code_with_password": "Pode sempre repor o seu código PIN com a sua senha", + "reset_pin_code_with_password": "Pode sempre repor o seu código PIN com a sua palavra-passe", "reset_sqlite": "Reiniciar Base de Dados SQLite", "reset_sqlite_confirmation": "Tem a certeza de que quer reiniciar a base de dados SQLite? Vai ter de terminar a sessão e entrar outra vez para sincronizar os dados de novo", "reset_sqlite_success": "Base de dados SQLite reiniciada com sucesso", @@ -1668,10 +1673,10 @@ "restore_user": "Restaurar utilizador", "restored_asset": "Ficheiro restaurado", "resume": "Continuar", - "resume_paused_jobs": "Continuar {count, plural, one {# trabalho em pausa} other {# trabalhos pausados}}", + "resume_paused_jobs": "Continuar {count, plural, one {# trabalho em pausa} other {# trabalhos em pausa}}", "retry_upload": "Tentar carregar novamente", "review_duplicates": "Rever itens duplicados", - "review_large_files": "Rever arquivos grandes", + "review_large_files": "Rever ficheiros grandes", "role": "Função", "role_editor": "Editor", "role_viewer": "Visualizador", @@ -1856,7 +1861,7 @@ "shared_link_info_chip_metadata": "EXIF", "shared_link_manage_links": "Gerenciar links compartilhados", "shared_link_options": "Opções de link partilhado", - "shared_link_password_description": "Exigir uma senha para aceder a este link partilhado", + "shared_link_password_description": "Exigir uma palavra-passe para aceder a este link partilhado", "shared_links": "Links partilhados", "shared_links_description": "Partilhar fotos e videos com um link", "shared_photos_and_videos_count": "{assetCount, plural, other {# Fotos & videos partilhados.}}", @@ -1947,7 +1952,7 @@ "sync_albums_manual_subtitle": "Sincronizar todas as fotos e vídeos enviados para o álbum de backup selecionado", "sync_local": "Sincronização Local", "sync_remote": "Sincronização Remota", - "sync_status": "Status da sincronização", + "sync_status": "Estado da sincronização", "sync_status_subtitle": "Ver e gerir o sistema de sincronização", "sync_upload_album_setting_subtitle": "Crie e envie suas fotos e vídeos para o álbum selecionado no Immich", "tag": "Etiqueta", @@ -2125,5 +2130,6 @@ "yes": "Sim", "you_dont_have_any_shared_links": "Não tem links partilhados", "your_wifi_name": "Nome da sua rede Wi-Fi", - "zoom_image": "Ampliar/Reduzir imagem" + "zoom_image": "Ampliar/Reduzir imagem", + "zoom_to_bounds": "Aproximar aos limites" } diff --git a/i18n/pt_BR.json b/i18n/pt_BR.json index 03471cef46..a4d590bc2c 100644 --- a/i18n/pt_BR.json +++ b/i18n/pt_BR.json @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Ativar backup automático", "backup_controller_page_uploading_file_info": "Informações do arquivo", "backup_err_only_album": "Não é possível remover o único álbum", + "backup_error_sync_failed": "A sincronização falhou. Não foi possível processar o backup.", "backup_info_card_assets": "arquivos", "backup_manual_cancelled": "Cancelado", "backup_manual_in_progress": "Envio já está em progresso. Tente novamente mais tarde", diff --git a/i18n/ro.json b/i18n/ro.json index 76e87c0cb6..71784cfcf9 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -468,7 +468,7 @@ "app_bar_signout_dialog_content": "Ești sigur că vrei să te deconectezi?", "app_bar_signout_dialog_ok": "Da", "app_bar_signout_dialog_title": "Deconectare", - "app_settings": "Setări Aplicație", + "app_settings": "Setări aplicație", "appears_in": "Apare în", "apply_count": "Aplică ({count, number})", "archive": "Arhivă", @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Activează backup-ul în prim-plan", "backup_controller_page_uploading_file_info": "Informații încărcare fișier", "backup_err_only_album": "Nu poți șterge singurul album", + "backup_error_sync_failed": "Sincronizarea a eșuat. Nu se poate procesa copia de rezervă.", "backup_info_card_assets": "resurse", "backup_manual_cancelled": "Anulat", "backup_manual_in_progress": "Încărcarea este deja în curs. Încearcă din nou mai târziu", diff --git a/i18n/ru.json b/i18n/ru.json index f17b5ce364..51d80614d3 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -599,7 +599,7 @@ "backup_controller_page_turn_on": "Включить", "backup_controller_page_uploading_file_info": "Информация о загружаемом файле", "backup_err_only_album": "Невозможно удалить единственный альбом", - "backup_error_sync_failed": "Сбой синхронизации. Невозможно запустить резервное копирование.", + "backup_error_sync_failed": "Сбой синхронизации. Невозможно выполнить резервное копирование.", "backup_info_card_assets": "объектов", "backup_manual_cancelled": "Отменено", "backup_manual_in_progress": "Загрузка в процессе. Попробуйте позже", @@ -732,7 +732,7 @@ "copy_link": "Копировать ссылку", "copy_link_to_clipboard": "Скопировать ссылку в буфер обмена", "copy_password": "Скопировать пароль", - "copy_to_clipboard": "Скопировать настройки в буфер обмена", + "copy_to_clipboard": "Скопировать в буфер обмена", "country": "Страна", "cover": "Обложка", "covers": "Обложки", @@ -1779,7 +1779,7 @@ "server_stats": "Статистика сервера", "server_version": "Версия сервера", "set": "Установить", - "set_as_album_cover": "Установить в качестве обложки альбома", + "set_as_album_cover": "Установить как обложку альбома", "set_as_featured_photo": "Установить как основное фото", "set_as_profile_picture": "Установить как фото профиля", "set_date_of_birth": "Установить дату рождения", @@ -1969,7 +1969,7 @@ "theme": "Тема", "theme_selection": "Выбор темы", "theme_selection_description": "Автоматически устанавливать светлую или тёмную тему в зависимости от настроек вашего браузера", - "theme_setting_asset_list_storage_indicator_title": "Показать индикатор хранилища на плитках объектов", + "theme_setting_asset_list_storage_indicator_title": "Отображать индикатор хранилища на плитках объектов", "theme_setting_asset_list_tiles_per_row_title": "Количество объектов в строке ({count})", "theme_setting_colorful_interface_subtitle": "Добавить оттенок к фону.", "theme_setting_colorful_interface_title": "Цвет фона", diff --git a/i18n/sk.json b/i18n/sk.json index 2fdd6ca07a..de8f12dfa5 100644 --- a/i18n/sk.json +++ b/i18n/sk.json @@ -497,7 +497,7 @@ "asset_list_layout_settings_group_by_month_day": "Mesiac + deň", "asset_list_layout_sub_title": "Rozvrhnutie", "asset_list_settings_subtitle": "Nastavenia rozloženia mriežky fotografií", - "asset_list_settings_title": "Fotografická mriežka", + "asset_list_settings_title": "Mriežka fotografií", "asset_offline": "Médium je offline", "asset_offline_description": "Toto externý obsah sa už nenachádza na disku. Požiadajte o pomoc svojho správcu Immich.", "asset_restored_successfully": "Položky boli úspešne obnovené", @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Povoliť zálohovanie na popredí", "backup_controller_page_uploading_file_info": "Nahrávaný súbor", "backup_err_only_album": "Nie je možné odstrániť jediný vybraný album", + "backup_error_sync_failed": "Synchronizácia sa nepodarila. Nie je možné spracovať zálohu.", "backup_info_card_assets": "položiek", "backup_manual_cancelled": "Zrušené", "backup_manual_in_progress": "Nahrávanie už prebieha. Vyskúšajte neskôr", diff --git a/i18n/sl.json b/i18n/sl.json index 7a1aef509a..bcea0de5cf 100644 --- a/i18n/sl.json +++ b/i18n/sl.json @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "Vklopite varnostno kopiranje v ospredju", "backup_controller_page_uploading_file_info": "Nalaganje podatkov o datoteki", "backup_err_only_album": "Edinega albuma ni mogoče odstraniti", + "backup_error_sync_failed": "Sinhronizacija ni uspela. Varnostne kopije ni mogoče obdelati.", "backup_info_card_assets": "sredstva", "backup_manual_cancelled": "Preklicano", "backup_manual_in_progress": "Nalaganje že poteka. Poskusite čez nekaj časa", diff --git a/i18n/sv.json b/i18n/sv.json index 6acee96f66..fba673610a 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -28,6 +28,7 @@ "add_to_album": "Lägg till i album", "add_to_album_bottom_sheet_added": "Tillagd till {album}", "add_to_album_bottom_sheet_already_exists": "Redan i {album}", + "add_to_album_bottom_sheet_some_local_assets": "Vissa lokala tillgångar kunde inte läggas till i albumet", "add_to_album_toggle": "Växla val för {album}", "add_to_albums": "Lägg till i album", "add_to_albums_count": "Lägg till i album ({count})", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "Aktivera automatisk säkerhetskopiering", "backup_controller_page_uploading_file_info": "Laddar upp filinformation", "backup_err_only_album": "Kan inte ta bort det enda albumet", + "backup_error_sync_failed": "Synkroniseringen misslyckades. Det går inte att bearbeta säkerhetskopian.", "backup_info_card_assets": "objekt", "backup_manual_cancelled": "Avbrutet", "backup_manual_in_progress": "Uppladdning pågår redan. Försök igen om en liten stund", diff --git a/i18n/ta.json b/i18n/ta.json index f8996ad44b..e97b4b4b72 100644 --- a/i18n/ta.json +++ b/i18n/ta.json @@ -28,6 +28,7 @@ "add_to_album": "ஆல்பமில் சேர்க்க", "add_to_album_bottom_sheet_added": "{album}-இல் சேர்க்கப்பட்டது", "add_to_album_bottom_sheet_already_exists": "ஏற்கனவே {album}-இல் உள்ளது", + "add_to_album_bottom_sheet_some_local_assets": "சில உள்ளக சொத்துக்களை ஆல்பத்தில் சேர்க்க முடியவில்லை", "add_to_album_toggle": "{album} க்கான தேர்வை மாற்று", "add_to_albums": "ஆல்பத்தில் சேர்", "add_to_albums_count": "ஆல்பங்களில் சேர்({count})", @@ -39,16 +40,16 @@ "admin": { "add_exclusion_pattern_description": "விலக்கு வடிவங்களைச் சேர்க்கவும். *, **, மற்றும் ? ஆதரிக்கப்படுகிறது. \"Raw\" என்ற பெயரிடப்பட்ட எந்த கோப்பகத்திலும் உள்ள எல்லா கோப்புகளையும் புறக்கணிக்க, \"**/Raw/**\" ஐப் பயன்படுத்தவும். \".tif\" இல் முடியும் எல்லா கோப்புகளையும் புறக்கணிக்க, \"**/*.tif\" ஐப் பயன்படுத்தவும். ஒரு முழுமையான பாதையை புறக்கணிக்க, \"/path/to/ignore/**\" ஐப் பயன்படுத்தவும்.", "admin_user": "நிர்வாக பயனர்", - "asset_offline_description": "இந்த வெளிப்புற நூலக சொத்து இனி வட்டில் காணப்படவில்லை மற்றும் குப்பைக்கு நகர்த்தப்பட்டுள்ளது. கோப்பு நூலகத்திற்குள் நகர்த்தப்பட்டிருந்தால், புதிய தொடர்புடைய சொத்துக்கான உங்கள் காலவரிசையை சரிபார்க்கவும். இந்த சொத்தை மீட்டெடுக்க, கீழேயுள்ள கோப்பு பாதையை இம்மிச் மூலம் அணுகலாம் மற்றும் நூலகத்தை ச்கேன் செய்ய முடியும் என்பதை உறுதிப்படுத்தவும்.", - "authentication_settings": "அடையாள உறுதிப்படுத்தல் அமைப்புகள் (செட்டிங்ஸ்)", - "authentication_settings_description": "கடவுச்சொல், OAuth, மற்றும் பிற அடையாள அமைப்புகள்", - "authentication_settings_disable_all": "எல்லா உள்நுழைவு முறைகளையும் நிச்சயமாக முடக்க விரும்புகிறீர்களா? உள்நுழைவு முற்றிலும் முடக்கப்படும்.", - "authentication_settings_reenable": "மீண்டும் இயக்க, சர்வர் கட்டளை பயன்படுத்தவும்.", + "asset_offline_description": "இந்த வெளிப்புற நூலகச் சொத்து (external library asset) இனி கோப்புப் பதிப்பில் காணப்படவில்லை மற்றும் குப்பைத்தொட்டியில் (trash) நகர்த்தப்பட்டுள்ளது.கோப்பு நூலகத்தில் உள்ளே நகர்த்தப்பட்டிருந்தால், புதிய இணை சொத்தை (corresponding asset) கண்டுபிடிக்க உங்கள் காலவரிசையை (timeline) சரிபார்க்கவும். இந்த சொத்தை மீட்டமைக்க, கீழே உள்ள கோப்புப் பாதை Immich மூலம் அணுகக்கூடியதா என்பதை உறுதி செய்து, நூலகத்தை (library) மீண்டும் ஸ்கேன் செய்யவும்.", + "authentication_settings": "அங்கீகார அமைப்புகள்", + "authentication_settings_description": "அடையாளச் சொல்லுகள் (Password), OAuth மற்றும் பிற அங்கீகார அமைப்புகளை நிர்வகிக்கவும்", + "authentication_settings_disable_all": "நீங்கள் உண்மையில் அனைத்து உள்நுழைவு முறைகளையும் முடக்க விரும்புகிறீர்களா? உள்நுழைவு முழுமையாக முடக்கப்படும்.", + "authentication_settings_reenable": "மீண்டும் செயல்படுத்த, சேவையகம் கட்டளை பயன்படுத்தவும்.", "background_task_job": "பின்னணி பணிகள்", - "backup_database": "தரவுத்தள காப்புப்பிரதியை உருவாக்கு", - "backup_database_enable_description": "தரவுத்தள திணிப்புகள் இயக்கவும்", - "backup_keep_last_amount": "வைத்திருக்க முந்தைய திணிப்புகள் அளவு", - "backup_onboarding_1_description": "மேகக்கட்டத்தில் அல்லது மற்றொரு உடல் இடத்தில் ஆஃப்சைட் நகல்.", + "backup_database": "தரவுத்தள நகல் உருவாக்கவும்", + "backup_database_enable_description": "தரவுத்தள நகல்களை இயக்கவும்", + "backup_keep_last_amount": "வைத்திருக்க முந்தைய நகல்களின் அளவு", + "backup_onboarding_1_description": "மேகம் அல்லது வேறு இடத்தில் நகல்.", "backup_onboarding_2_description": "வெவ்வேறு சாதனங்களில் உள்ள நகல் பிரதிகள். இதில் முக்கிய கோப்புகள் மற்றும் அந்தக் கோப்புகளின் நகல் காப்புப்பிரதி ஆகியவை அடங்கும்.", "backup_onboarding_3_description": "உங்கள் தரவின் மொத்த கோப்புகள் அசல் மற்றும் நகல்கள் உட்பட. இதில் 1 வெளிப்புற நகல் மற்றும் 2 சாதனப் பிரதிகள் அடங்கும்.", "backup_onboarding_description": "உங்கள் தரவை பாதுகாப்பதற்காக ஒரு 3-2-1 காப்புப் பிரதி பரிந்துரைக்கப்படுகிறது. முழுமையான காப்பு பாதுகாப்பு தீர்விற்காக, நீங்கள் பதிவேற்றிய புகைப்படங்கள்/வீடியோக்கள் மற்றும் Immich தரவுத்தளத்தின் நகல்களையும் வைத்திருக்க வேண்டும்.", @@ -56,7 +57,7 @@ "backup_onboarding_parts_title": "3-2-1 காப்புப்பிரதியில் பின்வருவன அடங்கும்:", "backup_onboarding_title": "காப்புப்பிரதிகள்", "backup_settings": "தரவுத்தள திணிப்பு அமைப்புகள்", - "backup_settings_description": "தரவுத்தள திணிப்பு அமைப்புகளை நிர்வகிக்கவும்", + "backup_settings_description": "தரவுத்தள நகல் அமைப்புகளை நிர்வகிக்கவும்", "cleared_jobs": "முடித்த வேலைகள்: {job}", "config_set_by_file": "கட்டமைப்பு, தற்போது ஒரு கட்டமைப்பு கோப்பு மூலம் அமைக்கப்பட்டுள்ளது", "confirm_delete_library": "{library} படங்கள் நூலகத்தை நிச்சயமாக நீக்க விரும்புகிறீர்களா?", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "முன்புற காப்புப்பிரதியை இயக்கவும்", "backup_controller_page_uploading_file_info": "கோப்பு தகவலைப் பதிவேற்றுகிறது", "backup_err_only_album": "ஒரே ஆல்பத்தை அகற்ற முடியாது", + "backup_error_sync_failed": "ஒத்திசைவு தோல்வியுற்றது. காப்புப்பிரதியை செயலாக்க முடியாது.", "backup_info_card_assets": "சொத்துக்கள்", "backup_manual_cancelled": "ரத்து செய்யப்பட்டது", "backup_manual_in_progress": "ஏற்கனவே முன்னேற்றத்தில் பதிவேற்றவும். சிறிது நேரம் கழித்து முயற்சிக்கவும்", diff --git a/i18n/tr.json b/i18n/tr.json index 38d1a4c227..a962420980 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -28,6 +28,7 @@ "add_to_album": "Albüme ekle", "add_to_album_bottom_sheet_added": "{album} albümüne eklendi", "add_to_album_bottom_sheet_already_exists": "Zaten {album} albümüne ekli", + "add_to_album_bottom_sheet_some_local_assets": "Bazı yerel öğeler albüme eklenemedi", "add_to_album_toggle": "{album} için seçimi değiştir", "add_to_albums": "Albümlere ekle", "add_to_albums_count": "{count} albümlerine ekle", @@ -574,16 +575,16 @@ "backup_controller_page_background_turn_off": "Arka plan hizmetini kapat", "backup_controller_page_background_turn_on": "Arka plan hizmetini aç", "backup_controller_page_background_wifi": "Sadece Wi-Fi", - "backup_controller_page_backup": "Yedekle", + "backup_controller_page_backup": "Yedek", "backup_controller_page_backup_selected": "Seçilen: ", - "backup_controller_page_backup_sub": "Yedeklenen öğeler", + "backup_controller_page_backup_sub": "Yedeklenen fotoğraflar ve videolar", "backup_controller_page_created": "Oluşturma tarihi: {date}", "backup_controller_page_desc_backup": "Uygulamayı açtığınızda yeni öğelerin sunucuya otomatik olarak yüklenmesi için ön planda yedeklemeyi açın.", "backup_controller_page_excluded": "Hariç tutuldu: ", "backup_controller_page_failed": "Başarısız ({count})", "backup_controller_page_filename": "Dosya adı: {filename} [{size}]", "backup_controller_page_id": "KNu: {id}", - "backup_controller_page_info": "Yedekleme bilgileri", + "backup_controller_page_info": "Yedekleme Bilgileri", "backup_controller_page_none_selected": "Hiçbiri seçilmedi", "backup_controller_page_remainder": "Kalan", "backup_controller_page_remainder_sub": "Seçili albümlerden yedeklenecek kalan öğeler", @@ -598,6 +599,7 @@ "backup_controller_page_turn_on": "Ön planda yedeklemeyi aç", "backup_controller_page_uploading_file_info": "Dosya bilgisi yükleniyor", "backup_err_only_album": "Tek albüm kaldırılamaz", + "backup_error_sync_failed": "Senkronizasyon başarısız. Yedekleme işlemi gerçekleştirilemiyor.", "backup_info_card_assets": "öğeler", "backup_manual_cancelled": "İptal Edildi", "backup_manual_in_progress": "Yükleme halihazırda devam ediyor. Bir süre sonra deneyin", diff --git a/i18n/zh_Hant.json b/i18n/zh_Hant.json index fe9108c116..1f57b2a7ae 100644 --- a/i18n/zh_Hant.json +++ b/i18n/zh_Hant.json @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "開啟前台備份", "backup_controller_page_uploading_file_info": "上傳中的檔案資訊", "backup_err_only_album": "不能移除唯一的相簿", + "backup_error_sync_failed": "同步失敗。 無法處理備份。", "backup_info_card_assets": "個媒體", "backup_manual_cancelled": "已取消", "backup_manual_in_progress": "上傳正在進行中,請稍後再試", diff --git a/i18n/zh_SIMPLIFIED.json b/i18n/zh_SIMPLIFIED.json index 1f1455aa19..3ed4a14a2b 100644 --- a/i18n/zh_SIMPLIFIED.json +++ b/i18n/zh_SIMPLIFIED.json @@ -599,6 +599,7 @@ "backup_controller_page_turn_on": "开启前台备份", "backup_controller_page_uploading_file_info": "正在上传中的文件信息", "backup_err_only_album": "不能移除唯一的一个相册", + "backup_error_sync_failed": "同步失败。无法处理备份。", "backup_info_card_assets": "项", "backup_manual_cancelled": "已取消", "backup_manual_in_progress": "上传正在进行中,请稍后再试", diff --git a/machine-learning/immich_ml/__main__.py b/machine-learning/immich_ml/__main__.py index d15b0fb321..8d575a58d5 100644 --- a/machine-learning/immich_ml/__main__.py +++ b/machine-learning/immich_ml/__main__.py @@ -1,6 +1,7 @@ import os import signal import subprocess +from ipaddress import ip_address from pathlib import Path from .config import log, non_prefixed_settings, settings @@ -12,6 +13,19 @@ else: module_dir = Path(__file__).parent + +def is_ipv6(host: str) -> bool: + try: + return ip_address(host).version == 6 + except ValueError: + return False + + +bind_host = non_prefixed_settings.immich_host +if is_ipv6(bind_host): + bind_host = f"[{bind_host}]" +bind_address = f"{bind_host}:{non_prefixed_settings.immich_port}" + try: with subprocess.Popen( [ @@ -24,7 +38,7 @@ try: "-c", module_dir / "gunicorn_conf.py", "-b", - f"{non_prefixed_settings.immich_host}:{non_prefixed_settings.immich_port}", + bind_address, "-w", str(settings.workers), "-t", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index 3eee4a5e2d..9eb4f7c0f6 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "immich-ml" -version = "1.144.1" +version = "2.0.1" description = "" authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] requires-python = ">=3.10,<4.0" diff --git a/machine-learning/scripts/healthcheck.py b/machine-learning/scripts/healthcheck.py index 82c6cad790..38c0a522f1 100644 --- a/machine-learning/scripts/healthcheck.py +++ b/machine-learning/scripts/healthcheck.py @@ -1,12 +1,22 @@ import os import sys +from ipaddress import ip_address import requests port = os.getenv("IMMICH_PORT", 3003) host = os.getenv("IMMICH_HOST", "0.0.0.0") + +def is_ipv6(host: str) -> bool: + try: + return ip_address(host).version == 6 + except ValueError: + return False + + host = "localhost" if host == "0.0.0.0" else host +host = f"[{host}]" if is_ipv6(host) else host try: response = requests.get(f"http://{host}:{port}/ping", timeout=2) diff --git a/mise.toml b/mise.toml index 2f98f2e9d5..ac6bcdb816 100644 --- a/mise.toml +++ b/mise.toml @@ -1,7 +1,7 @@ [tools] -node = "22.19.0" -flutter = "3.35.4" -pnpm = "10.15.1" +node = "22.20.0" +flutter = "3.35.5" +pnpm = "10.18.0" [tools."github:CQLabs/homebrew-dcm"] version = "1.30.0" @@ -278,12 +278,7 @@ run = "prettier --write ." [tasks."web:lint"] env._.path = "web/node_modules/.bin" dir = "web" -run = "eslint . --max-warnings 0" - -[tasks."web:lint-p"] -env._.path = "web/node_modules/.bin" -dir = "web" -run = "eslint-p . --max-warnings 0 --concurrency=4" +run = "eslint . --max-warnings 0 --concurrency 4" [tasks."web:lint-fix"] run = "mise run web:lint --fix" diff --git a/mobile/README.md b/mobile/README.md index 436b0a4c34..59b2d9340c 100644 --- a/mobile/README.md +++ b/mobile/README.md @@ -84,4 +84,4 @@ Below is how your code needs to be structured: ## Contributing -Please refer to the [architecture](https://immich.app/docs/developer/architecture/) for contributing to the mobile app! +Please refer to the [architecture](https://docs.immich.app/developer/architecture/) for contributing to the mobile app! diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/ImmichApp.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/ImmichApp.kt index 5a3b0e1f3d..4474c63e09 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/ImmichApp.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/ImmichApp.kt @@ -1,8 +1,11 @@ package app.alextran.immich import android.app.Application +import android.os.Handler +import android.os.Looper import androidx.work.Configuration import androidx.work.WorkManager +import app.alextran.immich.background.BackgroundEngineLock import app.alextran.immich.background.BackgroundWorkerApiImpl class ImmichApp : Application() { @@ -17,6 +20,11 @@ class ImmichApp : Application() { // As a workaround, we also run a backup check when initializing the application ContentObserverWorker.startBackupWorker(context = this, delayMilliseconds = 0) - BackgroundWorkerApiImpl.enqueueBackgroundWorker(this) + Handler(Looper.getMainLooper()).postDelayed({ + // We can only check the engine count and not the status of the lock here, + // as the previous start might have been killed without unlocking. + if (BackgroundEngineLock.connectEngines > 0) return@postDelayed + BackgroundWorkerApiImpl.enqueueBackgroundWorker(this) + }, 5000) } } diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundEngineLock.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundEngineLock.kt index d8afe32b5c..504267a4e5 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundEngineLock.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundEngineLock.kt @@ -8,43 +8,46 @@ import java.util.concurrent.atomic.AtomicInteger private const val TAG = "BackgroundEngineLock" class BackgroundEngineLock(context: Context) : BackgroundWorkerLockApi, FlutterPlugin { - private val ctx: Context = context.applicationContext + private val ctx: Context = context.applicationContext - companion object { + companion object { - private var engineCount = AtomicInteger(0) + private var engineCount = AtomicInteger(0) - private fun checkAndEnforceBackgroundLock(ctx: Context) { - // work manager task is running while the main app is opened, cancel the worker - if (BackgroundWorkerPreferences(ctx).isLocked() && - engineCount.get() > 1 && - BackgroundWorkerApiImpl.isBackgroundWorkerRunning() - ) { - Log.i(TAG, "Background worker is locked, cancelling the background worker") - BackgroundWorkerApiImpl.cancelBackgroundWorker(ctx) - } - } + val connectEngines: Int + get() = engineCount.get() + + private fun checkAndEnforceBackgroundLock(ctx: Context) { + // work manager task is running while the main app is opened, cancel the worker + if (BackgroundWorkerPreferences(ctx).isLocked() && + connectEngines > 1 && + BackgroundWorkerApiImpl.isBackgroundWorkerRunning() + ) { + Log.i(TAG, "Background worker is locked, cancelling the background worker") + BackgroundWorkerApiImpl.cancelBackgroundWorker(ctx) + } } + } - override fun lock() { - BackgroundWorkerPreferences(ctx).setLocked(true) - checkAndEnforceBackgroundLock(ctx) - Log.i(TAG, "Background worker is locked") - } + override fun lock() { + BackgroundWorkerPreferences(ctx).setLocked(true) + checkAndEnforceBackgroundLock(ctx) + Log.i(TAG, "Background worker is locked") + } - override fun unlock() { - BackgroundWorkerPreferences(ctx).setLocked(false) - Log.i(TAG, "Background worker is unlocked") - } + override fun unlock() { + BackgroundWorkerPreferences(ctx).setLocked(false) + Log.i(TAG, "Background worker is unlocked") + } - override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { - checkAndEnforceBackgroundLock(binding.applicationContext) - engineCount.incrementAndGet() - Log.i(TAG, "Flutter engine attached. Attached Engines count: $engineCount") - } + override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { + checkAndEnforceBackgroundLock(binding.applicationContext) + engineCount.incrementAndGet() + Log.i(TAG, "Flutter engine attached. Attached Engines count: $engineCount") + } - override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { - engineCount.decrementAndGet() - Log.i(TAG, "Flutter engine detached. Attached Engines count: $engineCount") - } + override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { + engineCount.decrementAndGet() + Log.i(TAG, "Flutter engine detached. Attached Engines count: $engineCount") + } } diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.g.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.g.kt index 052395c172..5857453ad3 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.g.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.g.kt @@ -136,6 +136,7 @@ private open class BackgroundWorkerPigeonCodec : StandardMessageCodec() { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ interface BackgroundWorkerFgHostApi { fun enable() + fun saveNotificationMessage(title: String, body: String) fun configure(settings: BackgroundWorkerSettings) fun disable() @@ -164,6 +165,25 @@ interface BackgroundWorkerFgHostApi { channel.setMessageHandler(null) } } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.saveNotificationMessage$separatedMessageChannelSuffix", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val titleArg = args[0] as String + val bodyArg = args[1] as String + val wrapped: List = try { + api.saveNotificationMessage(titleArg, bodyArg) + listOf(null) + } catch (exception: Throwable) { + BackgroundWorkerPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } run { val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.configure$separatedMessageChannelSuffix", codec) if (api != null) { @@ -204,7 +224,6 @@ interface BackgroundWorkerFgHostApi { /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ interface BackgroundWorkerBgHostApi { fun onInitialized() - fun showNotification(title: String, content: String) fun close() companion object { @@ -232,25 +251,6 @@ interface BackgroundWorkerBgHostApi { channel.setMessageHandler(null) } } - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.showNotification$separatedMessageChannelSuffix", codec) - if (api != null) { - channel.setMessageHandler { message, reply -> - val args = message as List - val titleArg = args[0] as String - val contentArg = args[1] as String - val wrapped: List = try { - api.showNotification(titleArg, contentArg) - listOf(null) - } catch (exception: Throwable) { - BackgroundWorkerPigeonUtils.wrapError(exception) - } - reply.reply(wrapped) - } - } else { - channel.setMessageHandler(null) - } - } run { val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.close$separatedMessageChannelSuffix", codec) if (api != null) { diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.kt index 71d9f5ffe3..e59cee2c16 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.kt @@ -73,6 +73,8 @@ class BackgroundWorker(context: Context, params: WorkerParameters) : NotificationManager.IMPORTANCE_LOW ) notificationManager.createNotificationChannel(notificationChannel) + val notificationConfig = BackgroundWorkerPreferences(ctx).getNotificationConfig() + showNotification(notificationConfig.first, notificationConfig.second) loader.ensureInitializationCompleteAsync(ctx, null, Handler(Looper.getMainLooper())) { engine = FlutterEngine(ctx) @@ -109,7 +111,7 @@ class BackgroundWorker(context: Context, params: WorkerParameters) : } // TODO: Move this to a separate NotificationManager class - override fun showNotification(title: String, content: String) { + private fun showNotification(title: String, content: String) { val notification = NotificationCompat.Builder(applicationContext, NOTIFICATION_CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setOnlyAlertOnce(true) diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerApiImpl.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerApiImpl.kt index 78f2e9e461..a78db3c5ea 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerApiImpl.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerApiImpl.kt @@ -20,6 +20,10 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi { enqueueMediaObserver(ctx) } + override fun saveNotificationMessage(title: String, body: String) { + BackgroundWorkerPreferences(ctx).updateNotificationConfig(title, body) + } + override fun configure(settings: BackgroundWorkerSettings) { BackgroundWorkerPreferences(ctx).updateSettings(settings) enqueueMediaObserver(ctx) diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerPreferences.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerPreferences.kt index cfceb06c1d..450113e5b0 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerPreferences.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerPreferences.kt @@ -10,9 +10,13 @@ class BackgroundWorkerPreferences(private val ctx: Context) { private const val SHARED_PREF_MIN_DELAY_KEY = "BackgroundWorker::minDelaySeconds" private const val SHARED_PREF_REQUIRE_CHARGING_KEY = "BackgroundWorker::requireCharging" private const val SHARED_PREF_LOCK_KEY = "BackgroundWorker::isLocked" + private const val SHARED_PREF_NOTIF_TITLE_KEY = "BackgroundWorker::notificationTitle" + private const val SHARED_PREF_NOTIF_MSG_KEY = "BackgroundWorker::notificationMessage" private const val DEFAULT_MIN_DELAY_SECONDS = 30L private const val DEFAULT_REQUIRE_CHARGING = false + private const val DEFAULT_NOTIF_TITLE = "Uploading media" + private const val DEFAULT_NOTIF_MSG = "Checking for new assets…" } private val sp: SharedPreferences by lazy { @@ -38,6 +42,20 @@ class BackgroundWorkerPreferences(private val ctx: Context) { ) } + fun updateNotificationConfig(title: String, message: String) { + sp.edit { + putString(SHARED_PREF_NOTIF_TITLE_KEY, title) + putString(SHARED_PREF_NOTIF_MSG_KEY, message) + } + } + + fun getNotificationConfig(): Pair { + val title = + sp.getString(SHARED_PREF_NOTIF_TITLE_KEY, DEFAULT_NOTIF_TITLE) ?: DEFAULT_NOTIF_TITLE + val message = sp.getString(SHARED_PREF_NOTIF_MSG_KEY, DEFAULT_NOTIF_MSG) ?: DEFAULT_NOTIF_MSG + return Pair(title, message) + } + fun setLocked(paused: Boolean) { sp.edit { putBoolean(SHARED_PREF_LOCK_KEY, paused) diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index 25a366957e..cbc2440fa9 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 3019, - "android.injected.version.name" => "1.144.1", + "android.injected.version.code" => 3021, + "android.injected.version.name" => "2.0.1", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/Podfile.lock b/mobile/ios/Podfile.lock index 502fd9008f..9bff8cd8e2 100644 --- a/mobile/ios/Podfile.lock +++ b/mobile/ios/Podfile.lock @@ -64,7 +64,7 @@ PODS: - Flutter - integration_test (0.0.1): - Flutter - - isar_flutter_libs (1.0.0): + - isar_community_flutter_libs (1.0.0): - Flutter - local_auth_darwin (0.0.1): - Flutter @@ -149,7 +149,7 @@ DEPENDENCIES: - home_widget (from `.symlinks/plugins/home_widget/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - integration_test (from `.symlinks/plugins/integration_test/ios`) - - isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`) + - isar_community_flutter_libs (from `.symlinks/plugins/isar_community_flutter_libs/ios`) - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - maplibre_gl (from `.symlinks/plugins/maplibre_gl/ios`) - native_video_player (from `.symlinks/plugins/native_video_player/ios`) @@ -210,8 +210,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/image_picker_ios/ios" integration_test: :path: ".symlinks/plugins/integration_test/ios" - isar_flutter_libs: - :path: ".symlinks/plugins/isar_flutter_libs/ios" + isar_community_flutter_libs: + :path: ".symlinks/plugins/isar_community_flutter_libs/ios" local_auth_darwin: :path: ".symlinks/plugins/local_auth_darwin/darwin" maplibre_gl: @@ -264,7 +264,7 @@ SPEC CHECKSUMS: home_widget: f169fc41fd807b4d46ab6615dc44d62adbf9f64f image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e - isar_flutter_libs: bc909e72c3d756c2759f14c8776c13b5b0556e26 + isar_community_flutter_libs: bede843185a61a05ff364a05c9b23209523f7e0d local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391 MapLibre: 69e572367f4ef6287e18246cfafc39c80cdcabcd maplibre_gl: 3c924e44725147b03dda33430ad216005b40555f diff --git a/mobile/ios/Runner.xcodeproj/project.pbxproj b/mobile/ios/Runner.xcodeproj/project.pbxproj index 09f749bcd2..6403a0ab4b 100644 --- a/mobile/ios/Runner.xcodeproj/project.pbxproj +++ b/mobile/ios/Runner.xcodeproj/project.pbxproj @@ -705,7 +705,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; CUSTOM_GROUP_ID = group.app.immich.share; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_BITCODE = NO; @@ -849,7 +849,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; CUSTOM_GROUP_ID = group.app.immich.share; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_BITCODE = NO; @@ -879,7 +879,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; CUSTOM_GROUP_ID = group.app.immich.share; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_BITCODE = NO; @@ -913,7 +913,7 @@ CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -956,7 +956,7 @@ CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -996,7 +996,7 @@ CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -1035,7 +1035,7 @@ CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; CUSTOM_GROUP_ID = group.app.immich.share; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1079,7 +1079,7 @@ CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; CUSTOM_GROUP_ID = group.app.immich.share; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1120,7 +1120,7 @@ CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 227; + CURRENT_PROJECT_VERSION = 230; CUSTOM_GROUP_ID = group.app.immich.share; DEVELOPMENT_TEAM = 2F67MQ8R79; ENABLE_USER_SCRIPT_SANDBOXING = YES; diff --git a/mobile/ios/Runner/Background/BackgroundWorker.g.swift b/mobile/ios/Runner/Background/BackgroundWorker.g.swift index ece5cd5f64..e339f150e7 100644 --- a/mobile/ios/Runner/Background/BackgroundWorker.g.swift +++ b/mobile/ios/Runner/Background/BackgroundWorker.g.swift @@ -182,6 +182,7 @@ class BackgroundWorkerPigeonCodec: FlutterStandardMessageCodec, @unchecked Senda /// Generated protocol from Pigeon that represents a handler of messages from Flutter. protocol BackgroundWorkerFgHostApi { func enable() throws + func saveNotificationMessage(title: String, body: String) throws func configure(settings: BackgroundWorkerSettings) throws func disable() throws } @@ -205,6 +206,22 @@ class BackgroundWorkerFgHostApiSetup { } else { enableChannel.setMessageHandler(nil) } + let saveNotificationMessageChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.saveNotificationMessage\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + saveNotificationMessageChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let titleArg = args[0] as! String + let bodyArg = args[1] as! String + do { + try api.saveNotificationMessage(title: titleArg, body: bodyArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + saveNotificationMessageChannel.setMessageHandler(nil) + } let configureChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.configure\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { configureChannel.setMessageHandler { message, reply in @@ -238,7 +255,6 @@ class BackgroundWorkerFgHostApiSetup { /// Generated protocol from Pigeon that represents a handler of messages from Flutter. protocol BackgroundWorkerBgHostApi { func onInitialized() throws - func showNotification(title: String, content: String) throws func close() throws } @@ -261,22 +277,6 @@ class BackgroundWorkerBgHostApiSetup { } else { onInitializedChannel.setMessageHandler(nil) } - let showNotificationChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.showNotification\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) - if let api = api { - showNotificationChannel.setMessageHandler { message, reply in - let args = message as! [Any?] - let titleArg = args[0] as! String - let contentArg = args[1] as! String - do { - try api.showNotification(title: titleArg, content: contentArg) - reply(wrapResult(nil)) - } catch { - reply(wrapError(error)) - } - } - } else { - showNotificationChannel.setMessageHandler(nil) - } let closeChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.close\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { closeChannel.setMessageHandler { _, reply in diff --git a/mobile/ios/Runner/Background/BackgroundWorker.swift b/mobile/ios/Runner/Background/BackgroundWorker.swift index c3268b4a2b..15df971203 100644 --- a/mobile/ios/Runner/Background/BackgroundWorker.swift +++ b/mobile/ios/Runner/Background/BackgroundWorker.swift @@ -119,10 +119,6 @@ class BackgroundWorker: BackgroundWorkerBgHostApi { }) } - func showNotification(title: String, content: String) throws { - // No-op on iOS for the time being - } - /** * Cancels the currently running background task, either due to timeout or external request. * Sends a cancel signal to the Flutter side and sets up a fallback timer to ensure diff --git a/mobile/ios/Runner/Background/BackgroundWorkerApiImpl.swift b/mobile/ios/Runner/Background/BackgroundWorkerApiImpl.swift index f7f8f69989..a7bbc31ceb 100644 --- a/mobile/ios/Runner/Background/BackgroundWorkerApiImpl.swift +++ b/mobile/ios/Runner/Background/BackgroundWorkerApiImpl.swift @@ -12,6 +12,10 @@ class BackgroundWorkerApiImpl: BackgroundWorkerFgHostApi { // Android only } + func saveNotificationMessage(title: String, body: String) throws { + // Android only + } + func disable() throws { BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: BackgroundWorkerApiImpl.refreshTaskID); BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: BackgroundWorkerApiImpl.processingTaskID); diff --git a/mobile/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist index f32980bb38..fb89490550 100644 --- a/mobile/ios/Runner/Info.plist +++ b/mobile/ios/Runner/Info.plist @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.144.0 + 2.0.1 CFBundleSignature ???? CFBundleURLTypes @@ -107,7 +107,7 @@ CFBundleVersion - 227 + 230 FLTEnableImpeller ITSAppUsesNonExemptEncryption diff --git a/mobile/ios/fastlane/Fastfile b/mobile/ios/fastlane/Fastfile index cd3310e9a2..f72597fe33 100644 --- a/mobile/ios/fastlane/Fastfile +++ b/mobile/ios/fastlane/Fastfile @@ -22,7 +22,7 @@ platform :ios do path: "./Runner.xcodeproj", ) increment_version_number( - version_number: "1.144.1" + version_number: "2.0.1" ) increment_build_number( build_number: latest_testflight_build_number + 1, diff --git a/mobile/lib/domain/models/search_result.model.dart b/mobile/lib/domain/models/search_result.model.dart index bae8b8e821..947bc6192f 100644 --- a/mobile/lib/domain/models/search_result.model.dart +++ b/mobile/lib/domain/models/search_result.model.dart @@ -3,27 +3,30 @@ import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; class SearchResult { final List assets; + final double scrollOffset; final int? nextPage; - const SearchResult({required this.assets, this.nextPage}); + const SearchResult({required this.assets, this.scrollOffset = 0.0, this.nextPage}); - int get totalAssets => assets.length; - - SearchResult copyWith({List? assets, int? nextPage}) { - return SearchResult(assets: assets ?? this.assets, nextPage: nextPage ?? this.nextPage); + SearchResult copyWith({List? assets, int? nextPage, double? scrollOffset}) { + return SearchResult( + assets: assets ?? this.assets, + nextPage: nextPage ?? this.nextPage, + scrollOffset: scrollOffset ?? this.scrollOffset, + ); } @override - String toString() => 'SearchResult(assets: $assets, nextPage: $nextPage)'; + String toString() => 'SearchResult(assets: ${assets.length}, nextPage: $nextPage, scrollOffset: $scrollOffset)'; @override bool operator ==(covariant SearchResult other) { if (identical(this, other)) return true; final listEquals = const DeepCollectionEquality().equals; - return listEquals(other.assets, assets) && other.nextPage == nextPage; + return listEquals(other.assets, assets) && other.nextPage == nextPage && other.scrollOffset == scrollOffset; } @override - int get hashCode => assets.hashCode ^ nextPage.hashCode; + int get hashCode => assets.hashCode ^ nextPage.hashCode ^ scrollOffset.hashCode; } diff --git a/mobile/lib/domain/services/asset.service.dart b/mobile/lib/domain/services/asset.service.dart index 84f675f68b..7f8ade313c 100644 --- a/mobile/lib/domain/services/asset.service.dart +++ b/mobile/lib/domain/services/asset.service.dart @@ -84,8 +84,8 @@ class AssetService { return 1.0; } - Future> getPlaces() { - return _remoteAssetRepository.getPlaces(); + Future> getPlaces(String userId) { + return _remoteAssetRepository.getPlaces(userId); } Future<(int local, int remote)> getAssetCounts() async { diff --git a/mobile/lib/domain/services/background_worker.service.dart b/mobile/lib/domain/services/background_worker.service.dart index 0548a45bf7..d95b1d4951 100644 --- a/mobile/lib/domain/services/background_worker.service.dart +++ b/mobile/lib/domain/services/background_worker.service.dart @@ -11,8 +11,6 @@ import 'package:immich_mobile/domain/services/log.service.dart'; import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/extensions/network_capability_extensions.dart'; import 'package:immich_mobile/extensions/platform_extensions.dart'; -import 'package:immich_mobile/extensions/translate_extensions.dart'; -import 'package:immich_mobile/generated/intl_keys.g.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/logger_db.repository.dart'; import 'package:immich_mobile/platform/background_worker_api.g.dart'; @@ -44,6 +42,9 @@ class BackgroundWorkerFgService { // TODO: Move this call to native side once old timeline is removed Future enable() => _foregroundHostApi.enable(); + Future saveNotificationMessage(String title, String body) => + _foregroundHostApi.saveNotificationMessage(title, body); + Future configure({int? minimumDelaySeconds, bool? requireCharging}) => _foregroundHostApi.configure( BackgroundWorkerSettings( minimumDelaySeconds: @@ -112,13 +113,6 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi { configureFileDownloaderNotifications(); - if (Platform.isAndroid) { - await _backgroundHostApi.showNotification( - IntlKeys.uploading_media.t(), - IntlKeys.backup_background_service_default_notification.t(), - ); - } - // Notify the host that the background worker service has been initialized and is ready to use _backgroundHostApi.onInitialized(); } catch (error, stack) { diff --git a/mobile/lib/domain/services/timeline.service.dart b/mobile/lib/domain/services/timeline.service.dart index ab623720b7..6a7a1a22b2 100644 --- a/mobile/lib/domain/services/timeline.service.dart +++ b/mobile/lib/domain/services/timeline.service.dart @@ -59,7 +59,8 @@ class TimelineFactory { TimelineService fromAssets(List assets) => TimelineService(_timelineRepository.fromAssets(assets)); - TimelineService map(LatLngBounds bounds) => TimelineService(_timelineRepository.map(bounds, groupBy)); + TimelineService map(String userId, LatLngBounds bounds) => + TimelineService(_timelineRepository.map(userId, bounds, groupBy)); } class TimelineService { @@ -202,7 +203,7 @@ class TimelineService { Future dispose() async { await _bucketSubscription?.cancel(); _bucketSubscription = null; - _buffer.clear(); + _buffer = []; _bufferOffset = 0; } } diff --git a/mobile/lib/domain/utils/background_sync.dart b/mobile/lib/domain/utils/background_sync.dart index b2f2fe54e1..38e249b9f1 100644 --- a/mobile/lib/domain/utils/background_sync.dart +++ b/mobile/lib/domain/utils/background_sync.dart @@ -6,11 +6,12 @@ import 'package:immich_mobile/utils/isolate.dart'; import 'package:worker_manager/worker_manager.dart'; typedef SyncCallback = void Function(); +typedef SyncCallbackWithResult = void Function(T result); typedef SyncErrorCallback = void Function(String error); class BackgroundSyncManager { final SyncCallback? onRemoteSyncStart; - final SyncCallback? onRemoteSyncComplete; + final SyncCallbackWithResult? onRemoteSyncComplete; final SyncErrorCallback? onRemoteSyncError; final SyncCallback? onLocalSyncStart; @@ -156,15 +157,18 @@ class BackgroundSyncManager { debugLabel: 'remote-sync', ); return _syncTask! - .then((result) => result ?? false) - .whenComplete(() { - onRemoteSyncComplete?.call(); - _syncTask = null; + .then((result) { + final success = result ?? false; + onRemoteSyncComplete?.call(success); + return success; }) .catchError((error) { onRemoteSyncError?.call(error.toString()); _syncTask = null; return false; + }) + .whenComplete(() { + _syncTask = null; }); } diff --git a/mobile/lib/entities/album.entity.g.dart b/mobile/lib/entities/album.entity.g.dart index e6ecde7f9a..ecbbab48c2 100644 --- a/mobile/lib/entities/album.entity.g.dart +++ b/mobile/lib/entities/album.entity.g.dart @@ -132,7 +132,7 @@ const AlbumSchema = CollectionSchema( getId: _albumGetId, getLinks: _albumGetLinks, attach: _albumAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _albumEstimateSize( diff --git a/mobile/lib/entities/android_device_asset.entity.g.dart b/mobile/lib/entities/android_device_asset.entity.g.dart index 9034709b8e..f8b1e32c72 100644 --- a/mobile/lib/entities/android_device_asset.entity.g.dart +++ b/mobile/lib/entities/android_device_asset.entity.g.dart @@ -47,7 +47,7 @@ const AndroidDeviceAssetSchema = CollectionSchema( getId: _androidDeviceAssetGetId, getLinks: _androidDeviceAssetGetLinks, attach: _androidDeviceAssetAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _androidDeviceAssetEstimateSize( diff --git a/mobile/lib/entities/asset.entity.g.dart b/mobile/lib/entities/asset.entity.g.dart index be5b427d01..db6bc72331 100644 --- a/mobile/lib/entities/asset.entity.g.dart +++ b/mobile/lib/entities/asset.entity.g.dart @@ -168,7 +168,7 @@ const AssetSchema = CollectionSchema( getId: _assetGetId, getLinks: _assetGetLinks, attach: _assetAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _assetEstimateSize( diff --git a/mobile/lib/entities/backup_album.entity.g.dart b/mobile/lib/entities/backup_album.entity.g.dart index ed98503119..583aa55c4d 100644 --- a/mobile/lib/entities/backup_album.entity.g.dart +++ b/mobile/lib/entities/backup_album.entity.g.dart @@ -43,7 +43,7 @@ const BackupAlbumSchema = CollectionSchema( getId: _backupAlbumGetId, getLinks: _backupAlbumGetLinks, attach: _backupAlbumAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _backupAlbumEstimateSize( diff --git a/mobile/lib/entities/duplicated_asset.entity.g.dart b/mobile/lib/entities/duplicated_asset.entity.g.dart index 6cf08ad9cc..80d2f344e6 100644 --- a/mobile/lib/entities/duplicated_asset.entity.g.dart +++ b/mobile/lib/entities/duplicated_asset.entity.g.dart @@ -32,7 +32,7 @@ const DuplicatedAssetSchema = CollectionSchema( getId: _duplicatedAssetGetId, getLinks: _duplicatedAssetGetLinks, attach: _duplicatedAssetAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _duplicatedAssetEstimateSize( diff --git a/mobile/lib/entities/etag.entity.g.dart b/mobile/lib/entities/etag.entity.g.dart index b1abba6bb7..03b4ea9918 100644 --- a/mobile/lib/entities/etag.entity.g.dart +++ b/mobile/lib/entities/etag.entity.g.dart @@ -52,7 +52,7 @@ const ETagSchema = CollectionSchema( getId: _eTagGetId, getLinks: _eTagGetLinks, attach: _eTagAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _eTagEstimateSize( diff --git a/mobile/lib/entities/ios_device_asset.entity.g.dart b/mobile/lib/entities/ios_device_asset.entity.g.dart index 8d8fec945b..252fe127bb 100644 --- a/mobile/lib/entities/ios_device_asset.entity.g.dart +++ b/mobile/lib/entities/ios_device_asset.entity.g.dart @@ -60,7 +60,7 @@ const IOSDeviceAssetSchema = CollectionSchema( getId: _iOSDeviceAssetGetId, getLinks: _iOSDeviceAssetGetLinks, attach: _iOSDeviceAssetAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _iOSDeviceAssetEstimateSize( diff --git a/mobile/lib/infrastructure/entities/device_asset.entity.g.dart b/mobile/lib/infrastructure/entities/device_asset.entity.g.dart index 87ae54ad40..b6c30aca6f 100644 --- a/mobile/lib/infrastructure/entities/device_asset.entity.g.dart +++ b/mobile/lib/infrastructure/entities/device_asset.entity.g.dart @@ -65,7 +65,7 @@ const DeviceAssetEntitySchema = CollectionSchema( getId: _deviceAssetEntityGetId, getLinks: _deviceAssetEntityGetLinks, attach: _deviceAssetEntityAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _deviceAssetEntityEstimateSize( diff --git a/mobile/lib/infrastructure/entities/exif.entity.g.dart b/mobile/lib/infrastructure/entities/exif.entity.g.dart index d2f9ebda27..ffbfd0d8f0 100644 --- a/mobile/lib/infrastructure/entities/exif.entity.g.dart +++ b/mobile/lib/infrastructure/entities/exif.entity.g.dart @@ -68,7 +68,7 @@ const ExifInfoSchema = CollectionSchema( getId: _exifInfoGetId, getLinks: _exifInfoGetLinks, attach: _exifInfoAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _exifInfoEstimateSize( diff --git a/mobile/lib/infrastructure/entities/store.entity.g.dart b/mobile/lib/infrastructure/entities/store.entity.g.dart index 7da92cf778..626c3084fe 100644 --- a/mobile/lib/infrastructure/entities/store.entity.g.dart +++ b/mobile/lib/infrastructure/entities/store.entity.g.dart @@ -37,7 +37,7 @@ const StoreValueSchema = CollectionSchema( getId: _storeValueGetId, getLinks: _storeValueGetLinks, attach: _storeValueAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _storeValueEstimateSize( diff --git a/mobile/lib/infrastructure/entities/user.entity.g.dart b/mobile/lib/infrastructure/entities/user.entity.g.dart index bb87051731..7e0af41b77 100644 --- a/mobile/lib/infrastructure/entities/user.entity.g.dart +++ b/mobile/lib/infrastructure/entities/user.entity.g.dart @@ -95,7 +95,7 @@ const UserSchema = CollectionSchema( getId: _userGetId, getLinks: _userGetLinks, attach: _userAttach, - version: '3.1.8', + version: '3.3.0-dev.3', ); int _userEstimateSize( diff --git a/mobile/lib/infrastructure/repositories/remote_album.repository.dart b/mobile/lib/infrastructure/repositories/remote_album.repository.dart index 5dfe4ac9b3..22d4715c1e 100644 --- a/mobile/lib/infrastructure/repositories/remote_album.repository.dart +++ b/mobile/lib/infrastructure/repositories/remote_album.repository.dart @@ -62,7 +62,7 @@ class DriftRemoteAlbumRepository extends DriftDatabaseRepository { .toDto( assetCount: row.read(assetCount) ?? 0, ownerName: row.read(_db.userEntity.name)!, - isShared: row.read(_db.remoteAlbumUserEntity.userId.count(distinct: true))! > 2, + isShared: row.read(_db.remoteAlbumUserEntity.userId.count(distinct: true))! > 0, ), ) .get(); @@ -107,7 +107,7 @@ class DriftRemoteAlbumRepository extends DriftDatabaseRepository { .toDto( assetCount: row.read(assetCount) ?? 0, ownerName: row.read(_db.userEntity.name)!, - isShared: row.read(_db.remoteAlbumUserEntity.userId.count(distinct: true))! > 2, + isShared: row.read(_db.remoteAlbumUserEntity.userId.count(distinct: true))! > 0, ), ) .getSingleOrNull(); @@ -305,8 +305,9 @@ class DriftRemoteAlbumRepository extends DriftDatabaseRepository { .readTable(_db.remoteAlbumEntity) .toDto( ownerName: row.read(_db.userEntity.name)!, - isShared: row.read(_db.remoteAlbumUserEntity.userId.count(distinct: true))! > 2, + isShared: row.read(_db.remoteAlbumUserEntity.userId.count(distinct: true))! > 0, ); + return album; }).watchSingleOrNull(); } diff --git a/mobile/lib/infrastructure/repositories/remote_asset.repository.dart b/mobile/lib/infrastructure/repositories/remote_asset.repository.dart index 092bb728d9..be55c21afc 100644 --- a/mobile/lib/infrastructure/repositories/remote_asset.repository.dart +++ b/mobile/lib/infrastructure/repositories/remote_asset.repository.dart @@ -81,9 +81,11 @@ class RemoteAssetRepository extends DriftDatabaseRepository { .getSingleOrNull(); } - Future> getPlaces() { + Future> getPlaces(String userId) { final asset = Subquery( - _db.remoteAssetEntity.select()..orderBy([(row) => OrderingTerm.desc(row.createdAt)]), + _db.remoteAssetEntity.select() + ..where((row) => row.ownerId.equals(userId)) + ..orderBy([(row) => OrderingTerm.desc(row.createdAt)]), "asset", ); diff --git a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart index f4720fb110..3f74fe25d1 100644 --- a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart +++ b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart @@ -51,6 +51,7 @@ class SyncStreamRepository extends DriftDatabaseRepository { await _db.remoteAssetEntity.deleteAll(); await _db.remoteExifEntity.deleteAll(); await _db.stackEntity.deleteAll(); + await _db.authUserEntity.deleteAll(); await _db.userEntity.deleteAll(); await _db.userMetadataEntity.deleteAll(); }); diff --git a/mobile/lib/infrastructure/repositories/timeline.repository.dart b/mobile/lib/infrastructure/repositories/timeline.repository.dart index 14ffafa646..05928d938f 100644 --- a/mobile/lib/infrastructure/repositories/timeline.repository.dart +++ b/mobile/lib/infrastructure/repositories/timeline.repository.dart @@ -431,12 +431,16 @@ class DriftTimelineRepository extends DriftDatabaseRepository { return query.map((row) => row.readTable(_db.remoteAssetEntity).toDto()).get(); } - TimelineQuery map(LatLngBounds bounds, GroupAssetsBy groupBy) => ( - bucketSource: () => _watchMapBucket(bounds, groupBy: groupBy), - assetSource: (offset, count) => _getMapBucketAssets(bounds, offset: offset, count: count), + TimelineQuery map(String userId, LatLngBounds bounds, GroupAssetsBy groupBy) => ( + bucketSource: () => _watchMapBucket(userId, bounds, groupBy: groupBy), + assetSource: (offset, count) => _getMapBucketAssets(userId, bounds, offset: offset, count: count), ); - Stream> _watchMapBucket(LatLngBounds bounds, {GroupAssetsBy groupBy = GroupAssetsBy.day}) { + Stream> _watchMapBucket( + String userId, + LatLngBounds bounds, { + GroupAssetsBy groupBy = GroupAssetsBy.day, + }) { if (groupBy == GroupAssetsBy.none) { // TODO: Support GroupAssetsBy.none throw UnsupportedError("GroupAssetsBy.none is not supported for _watchMapBucket"); @@ -455,7 +459,8 @@ class DriftTimelineRepository extends DriftDatabaseRepository { ), ]) ..where( - _db.remoteExifEntity.inBounds(bounds) & + _db.remoteAssetEntity.ownerId.equals(userId) & + _db.remoteExifEntity.inBounds(bounds) & _db.remoteAssetEntity.visibility.equalsValue(AssetVisibility.timeline) & _db.remoteAssetEntity.deletedAt.isNull(), ) @@ -469,7 +474,12 @@ class DriftTimelineRepository extends DriftDatabaseRepository { }).watch(); } - Future> _getMapBucketAssets(LatLngBounds bounds, {required int offset, required int count}) { + Future> _getMapBucketAssets( + String userId, + LatLngBounds bounds, { + required int offset, + required int count, + }) { final query = _db.remoteAssetEntity.select().join([ innerJoin( @@ -479,7 +489,8 @@ class DriftTimelineRepository extends DriftDatabaseRepository { ), ]) ..where( - _db.remoteExifEntity.inBounds(bounds) & + _db.remoteAssetEntity.ownerId.equals(userId) & + _db.remoteExifEntity.inBounds(bounds) & _db.remoteAssetEntity.visibility.equalsValue(AssetVisibility.timeline) & _db.remoteAssetEntity.deletedAt.isNull(), ) diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index 712ee0bd83..263a5ef769 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -15,7 +15,9 @@ import 'package:immich_mobile/constants/locales.dart'; import 'package:immich_mobile/domain/services/background_worker.service.dart'; import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/extensions/build_context_extensions.dart'; +import 'package:immich_mobile/extensions/translate_extensions.dart'; import 'package:immich_mobile/generated/codegen_loader.g.dart'; +import 'package:immich_mobile/generated/intl_keys.g.dart'; import 'package:immich_mobile/platform/background_worker_lock_api.g.dart'; import 'package:immich_mobile/providers/app_life_cycle.provider.dart'; import 'package:immich_mobile/providers/asset_viewer/share_intent_upload.provider.dart'; @@ -210,6 +212,14 @@ class ImmichAppState extends ConsumerState with WidgetsBindingObserve if (Store.isBetaTimelineEnabled) { ref.read(backgroundServiceProvider).disableService(); ref.read(backgroundWorkerFgServiceProvider).enable(); + if (Platform.isAndroid) { + ref + .read(backgroundWorkerFgServiceProvider) + .saveNotificationMessage( + IntlKeys.uploading_media.t(), + IntlKeys.backup_background_service_default_notification.t(), + ); + } } else { ref.read(backgroundWorkerFgServiceProvider).disable(); ref.read(backgroundServiceProvider).resumeServiceIfEnabled(); diff --git a/mobile/lib/pages/backup/drift_backup.page.dart b/mobile/lib/pages/backup/drift_backup.page.dart index 5a2cab8dd6..2e7c3e946c 100644 --- a/mobile/lib/pages/backup/drift_backup.page.dart +++ b/mobile/lib/pages/backup/drift_backup.page.dart @@ -49,9 +49,6 @@ class _DriftBackupPageState extends ConsumerState { ref.read(driftBackupProvider.notifier).updateSyncing(true); syncSuccess = await ref.read(backgroundSyncProvider).syncRemote(); - ref - .read(driftBackupProvider.notifier) - .updateError(syncSuccess == true ? BackupError.none : BackupError.syncFailed); ref.read(driftBackupProvider.notifier).updateSyncing(false); if (mounted) { @@ -94,7 +91,6 @@ class _DriftBackupPageState extends ConsumerState { if (syncSuccess == false) { Logger("DriftBackupPage").warning("Remote sync did not complete successfully, skipping backup"); - backupNotifier.updateError(BackupError.syncFailed); return; } await backupNotifier.startBackup(currentUser.id); diff --git a/mobile/lib/pages/backup/drift_backup_album_selection.page.dart b/mobile/lib/pages/backup/drift_backup_album_selection.page.dart index d49f71ce52..cae9f0a408 100644 --- a/mobile/lib/pages/backup/drift_backup_album_selection.page.dart +++ b/mobile/lib/pages/backup/drift_backup_album_selection.page.dart @@ -120,7 +120,6 @@ class _DriftBackupAlbumSelectionPageState extends ConsumerState { if (Store.isBetaTimelineEnabled) { bool syncSuccess = false; await Future.wait([ - backgroundManager.syncLocal(full: true), + backgroundManager.syncLocal(), backgroundManager.syncRemote().then((success) => syncSuccess = success), ]); @@ -76,7 +76,6 @@ class SplashScreenPageState extends ConsumerState { _resumeBackup(backupProvider), ]); } else { - backupProvider.updateError(BackupError.syncFailed); await backgroundManager.hashAssets(); } diff --git a/mobile/lib/platform/background_worker_api.g.dart b/mobile/lib/platform/background_worker_api.g.dart index af7c78fd4b..22325603c0 100644 --- a/mobile/lib/platform/background_worker_api.g.dart +++ b/mobile/lib/platform/background_worker_api.g.dart @@ -138,6 +138,29 @@ class BackgroundWorkerFgHostApi { } } + Future saveNotificationMessage(String title, String body) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.saveNotificationMessage$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send([title, body]); + final List? pigeonVar_replyList = await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + Future configure(BackgroundWorkerSettings settings) async { final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.configure$pigeonVar_messageChannelSuffix'; @@ -221,29 +244,6 @@ class BackgroundWorkerBgHostApi { } } - Future showNotification(String title, String content) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.showNotification$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final Future pigeonVar_sendFuture = pigeonVar_channel.send([title, content]); - final List? pigeonVar_replyList = await pigeonVar_sendFuture as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - Future close() async { final String pigeonVar_channelName = 'dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.close$pigeonVar_messageChannelSuffix'; diff --git a/mobile/lib/presentation/pages/drift_remote_album.page.dart b/mobile/lib/presentation/pages/drift_remote_album.page.dart index e0fe5ee62b..34d8919674 100644 --- a/mobile/lib/presentation/pages/drift_remote_album.page.dart +++ b/mobile/lib/presentation/pages/drift_remote_album.page.dart @@ -300,7 +300,7 @@ class _EditAlbumDialogState extends ConsumerState<_EditAlbumDialog> { await ref .read(remoteAlbumProvider.notifier) - .updateAlbum(widget.album.id, name: newTitle, description: newDescription.isEmpty ? null : newDescription); + .updateAlbum(widget.album.id, name: newTitle, description: newDescription); if (mounted) { Navigator.of( diff --git a/mobile/lib/presentation/pages/drift_trash.page.dart b/mobile/lib/presentation/pages/drift_trash.page.dart index 43e9217cdf..8713166027 100644 --- a/mobile/lib/presentation/pages/drift_trash.page.dart +++ b/mobile/lib/presentation/pages/drift_trash.page.dart @@ -44,10 +44,7 @@ class DriftTrashPage extends StatelessWidget { return SliverPadding( padding: const EdgeInsets.all(16.0), sliver: SliverToBoxAdapter( - child: SizedBox( - height: 24.0, - child: const Text("trash_page_info").t(context: context, args: {"days": "$trashDays"}), - ), + child: const Text("trash_page_info").t(context: context, args: {"days": "$trashDays"}), ), ); }, diff --git a/mobile/lib/presentation/pages/editing/drift_edit.page.dart b/mobile/lib/presentation/pages/editing/drift_edit.page.dart index da62d49b49..e24a1967f2 100644 --- a/mobile/lib/presentation/pages/editing/drift_edit.page.dart +++ b/mobile/lib/presentation/pages/editing/drift_edit.page.dart @@ -50,6 +50,11 @@ class DriftEditImagePage extends ConsumerWidget { return completer.future; } + void _exitEditing(BuildContext context) { + // this assumes that the only way to get to this page is from the AssetViewerRoute + context.navigator.popUntil((route) => route.data?.name == AssetViewerRoute.name); + } + Future _saveEditedImage(BuildContext context, BaseAsset asset, Image image, WidgetRef ref) async { try { final Uint8List imageData = await _imageToUint8List(image); @@ -66,7 +71,7 @@ class DriftEditImagePage extends ConsumerWidget { } ref.read(backgroundSyncProvider).syncLocal(full: true); - context.navigator.popUntil((route) => route.isFirst); + _exitEditing(context); ImmichToast.show(durationInSecond: 3, context: context, msg: 'Image Saved!'); if (localAsset == null) { @@ -91,7 +96,7 @@ class DriftEditImagePage extends ConsumerWidget { backgroundColor: context.scaffoldBackgroundColor, leading: IconButton( icon: Icon(Icons.close_rounded, color: context.primaryColor, size: 24), - onPressed: () => context.navigator.popUntil((route) => route.isFirst), + onPressed: () => _exitEditing(context), ), actions: [ TextButton( diff --git a/mobile/lib/presentation/pages/search/drift_search.page.dart b/mobile/lib/presentation/pages/search/drift_search.page.dart index 7e70ebf8ff..92716144f3 100644 --- a/mobile/lib/presentation/pages/search/drift_search.page.dart +++ b/mobile/lib/presentation/pages/search/drift_search.page.dart @@ -599,9 +599,9 @@ class _SearchResultGrid extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final searchResult = ref.watch(paginatedSearchProvider); + final assets = ref.watch(paginatedSearchProvider.select((s) => s.assets)); - if (searchResult.totalAssets == 0) { + if (assets.isEmpty) { return const _SearchEmptyContent(); } @@ -615,6 +615,7 @@ class _SearchResultGrid extends ConsumerWidget { if (metrics.pixels >= metrics.maxScrollExtent && isVerticalScroll && !isBottomSheetNotification) { onScrollEnd(); + ref.read(paginatedSearchProvider.notifier).setScrollOffset(metrics.maxScrollExtent); } return true; @@ -623,17 +624,18 @@ class _SearchResultGrid extends ConsumerWidget { child: ProviderScope( overrides: [ timelineServiceProvider.overrideWith((ref) { - final timelineService = ref.watch(timelineFactoryProvider).fromAssets(searchResult.assets); + final timelineService = ref.watch(timelineFactoryProvider).fromAssets(assets); ref.onDispose(timelineService.dispose); return timelineService; }), ], child: Timeline( - key: ValueKey(searchResult.totalAssets), + key: ValueKey(assets.length), groupBy: GroupAssetsBy.none, appBar: null, bottomSheet: const GeneralBottomSheet(minChildSize: 0.20), snapToMonth: false, + initialScrollOffset: ref.read(paginatedSearchProvider.select((s) => s.scrollOffset)), ), ), ), diff --git a/mobile/lib/presentation/pages/search/paginated_search.provider.dart b/mobile/lib/presentation/pages/search/paginated_search.provider.dart index 718a241ba4..c0c822198d 100644 --- a/mobile/lib/presentation/pages/search/paginated_search.provider.dart +++ b/mobile/lib/presentation/pages/search/paginated_search.provider.dart @@ -24,12 +24,20 @@ class PaginatedSearchNotifier extends StateNotifier { return false; } - state = SearchResult(assets: [...state.assets, ...result.assets], nextPage: result.nextPage); + state = SearchResult( + assets: [...state.assets, ...result.assets], + nextPage: result.nextPage, + scrollOffset: state.scrollOffset, + ); return true; } + void setScrollOffset(double offset) { + state = state.copyWith(scrollOffset: offset); + } + clear() { - state = const SearchResult(assets: [], nextPage: 1); + state = const SearchResult(assets: [], nextPage: 1, scrollOffset: 0.0); } } diff --git a/mobile/lib/presentation/widgets/action_buttons/edit_image_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/edit_image_action_button.widget.dart index cde0db8e18..4c7b6ffbdc 100644 --- a/mobile/lib/presentation/widgets/action_buttons/edit_image_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/edit_image_action_button.widget.dart @@ -1,11 +1,11 @@ +import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart'; -import 'package:immich_mobile/presentation/pages/editing/drift_edit.page.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/base_action_button.widget.dart'; import 'package:immich_mobile/presentation/widgets/images/image_provider.dart'; import 'package:immich_mobile/providers/infrastructure/asset_viewer/current_asset.provider.dart'; +import 'package:immich_mobile/routing/router.dart'; class EditImageActionButton extends ConsumerWidget { const EditImageActionButton({super.key}); @@ -20,12 +20,7 @@ class EditImageActionButton extends ConsumerWidget { } final image = Image(image: getFullImageProvider(currentAsset)); - - context.navigator.push( - MaterialPageRoute( - builder: (context) => DriftEditImagePage(asset: currentAsset, image: image, isEdited: false), - ), - ); + context.pushRoute(DriftEditImageRoute(asset: currentAsset, image: image, isEdited: false)); } return BaseActionButton( diff --git a/mobile/lib/presentation/widgets/album/album_selector.widget.dart b/mobile/lib/presentation/widgets/album/album_selector.widget.dart index f79b4bd7b1..bffe3d3941 100644 --- a/mobile/lib/presentation/widgets/album/album_selector.widget.dart +++ b/mobile/lib/presentation/widgets/album/album_selector.widget.dart @@ -512,7 +512,7 @@ class _AlbumList extends ConsumerWidget { } return SliverPadding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), + padding: const EdgeInsets.only(left: 16.0, right: 16, bottom: 64), sliver: SliverList.builder( itemBuilder: (_, index) { final album = albums[index]; diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart index 7ac8cf34d5..e3106c7f7f 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart @@ -221,10 +221,8 @@ class _AssetViewerState extends ConsumerState { context.scaffoldMessenger.hideCurrentSnackBar(); // send image to casting if the server has it - if (asset.hasRemote) { - final remoteAsset = asset as RemoteAsset; - - ref.read(castProvider.notifier).loadMedia(remoteAsset, false); + if (asset is RemoteAsset) { + ref.read(castProvider.notifier).loadMedia(asset, false); } else { // casting cannot show local assets context.scaffoldMessenger.clearSnackBars(); diff --git a/mobile/lib/presentation/widgets/asset_viewer/bottom_sheet.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/bottom_sheet.widget.dart index 2586789beb..bdd7fb9b48 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/bottom_sheet.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/bottom_sheet.widget.dart @@ -51,7 +51,7 @@ class AssetDetailBottomSheet extends ConsumerWidget { isArchived: isArchived, isTrashEnabled: isTrashEnable, isInLockedView: isInLockedView, - isStacked: asset.hasRemote && (asset as RemoteAsset).stackId != null, + isStacked: asset is RemoteAsset && asset.stackId != null, currentAlbum: currentAlbum, advancedTroubleshooting: advancedTroubleshooting, source: ActionSource.viewer, @@ -186,6 +186,7 @@ class _AssetDetailBottomSheet extends ConsumerWidget { color: context.textTheme.bodyMedium?.color?.withAlpha(155), ), ), + const SizedBox(height: 64), ], ); } diff --git a/mobile/lib/presentation/widgets/asset_viewer/bottom_sheet/sheet_people_details.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/bottom_sheet/sheet_people_details.widget.dart index fee34bca1b..64f22eca92 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/bottom_sheet/sheet_people_details.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/bottom_sheet/sheet_people_details.widget.dart @@ -11,8 +11,8 @@ import 'package:immich_mobile/providers/infrastructure/people.provider.dart'; import 'package:immich_mobile/providers/routes.provider.dart'; import 'package:immich_mobile/routing/router.dart'; import 'package:immich_mobile/services/api.service.dart'; -import 'package:immich_mobile/utils/people.utils.dart'; import 'package:immich_mobile/utils/image_url_builder.dart'; +import 'package:immich_mobile/utils/people.utils.dart'; class SheetPeopleDetails extends ConsumerStatefulWidget { const SheetPeopleDetails({super.key}); @@ -158,11 +158,14 @@ class _PeopleAvatar extends StatelessWidget { maxLines: 1, ), if (person.birthDate != null) - Text( - formatAge(person.birthDate!, assetFileCreatedAt), - textAlign: TextAlign.center, - style: context.textTheme.bodyMedium?.copyWith( - color: context.textTheme.bodyMedium?.color?.withAlpha(175), + FittedBox( + fit: BoxFit.scaleDown, + child: Text( + formatAge(person.birthDate!, assetFileCreatedAt), + textAlign: TextAlign.center, + style: context.textTheme.bodyMedium?.copyWith( + color: context.textTheme.bodyMedium?.color?.withAlpha(175), + ), ), ), ], diff --git a/mobile/lib/presentation/widgets/asset_viewer/top_app_bar.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/top_app_bar.widget.dart index 10c9821eb0..149252ab17 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/top_app_bar.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/top_app_bar.widget.dart @@ -44,7 +44,8 @@ class ViewerTopAppBar extends ConsumerWidget implements PreferredSizeWidget { final showViewInTimelineButton = (previousRouteName != TabShellRoute.name || tabRoute == TabEnum.search) && previousRouteName != AssetViewerRoute.name && - previousRouteName != null; + previousRouteName != null && + previousRouteName != LocalTimelineRoute.name; final isShowingSheet = ref.watch(assetViewerProvider.select((state) => state.showingBottomSheet)); int opacity = ref.watch(assetViewerProvider.select((state) => state.backgroundOpacity)); diff --git a/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart index fa7f204596..2bab507e3f 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart @@ -88,10 +88,18 @@ class NativeVideoViewer extends HookConsumerWidget { } final videoAsset = await ref.read(assetServiceProvider).getAsset(asset) ?? asset; + if (!context.mounted) { + return null; + } + try { if (videoAsset.hasLocal && videoAsset.livePhotoVideoId == null) { final id = videoAsset is LocalAsset ? videoAsset.id : (videoAsset as RemoteAsset).localId!; final file = await const StorageRepository().getFileForAsset(id); + if (!context.mounted) { + return null; + } + if (file == null) { throw Exception('No file found for the video'); } @@ -289,7 +297,7 @@ class NativeVideoViewer extends HookConsumerWidget { ref.read(videoPlaybackValueProvider.notifier).reset(); final source = await videoSource; - if (source == null) { + if (source == null || !context.mounted) { return; } @@ -314,6 +322,9 @@ class NativeVideoViewer extends HookConsumerWidget { removeListeners(playerController); } + if (value != null) { + isVisible.value = _isCurrentAsset(value, asset); + } final curAsset = currentAsset.value; if (curAsset == asset) { return; diff --git a/mobile/lib/presentation/widgets/bottom_sheet/favorite_bottom_sheet.widget.dart b/mobile/lib/presentation/widgets/bottom_sheet/favorite_bottom_sheet.widget.dart index c7a0fbab40..b2502127d4 100644 --- a/mobile/lib/presentation/widgets/bottom_sheet/favorite_bottom_sheet.widget.dart +++ b/mobile/lib/presentation/widgets/bottom_sheet/favorite_bottom_sheet.widget.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/enums.dart'; +import 'package:immich_mobile/domain/models/album/album.model.dart'; +import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; +import 'package:immich_mobile/extensions/translate_extensions.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/archive_action_button.widget.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/delete_local_action_button.widget.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/delete_permanent_action_button.widget.dart'; @@ -15,9 +18,12 @@ import 'package:immich_mobile/presentation/widgets/action_buttons/trash_action_b import 'package:immich_mobile/presentation/widgets/action_buttons/unfavorite_action_button.widget.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/unstack_action_button.widget.dart'; import 'package:immich_mobile/presentation/widgets/action_buttons/upload_action_button.widget.dart'; +import 'package:immich_mobile/presentation/widgets/album/album_selector.widget.dart'; import 'package:immich_mobile/presentation/widgets/bottom_sheet/base_bottom_sheet.widget.dart'; +import 'package:immich_mobile/providers/infrastructure/album.provider.dart'; import 'package:immich_mobile/providers/server_info.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; +import 'package:immich_mobile/widgets/common/immich_toast.dart'; class FavoriteBottomSheet extends ConsumerWidget { const FavoriteBottomSheet({super.key}); @@ -27,9 +33,42 @@ class FavoriteBottomSheet extends ConsumerWidget { final multiselect = ref.watch(multiSelectProvider); final isTrashEnable = ref.watch(serverInfoProvider.select((state) => state.serverFeatures.trash)); + Future addAssetsToAlbum(RemoteAlbum album) async { + final selectedAssets = multiselect.selectedAssets; + if (selectedAssets.isEmpty) { + return; + } + + final remoteAssets = selectedAssets.whereType(); + final addedCount = await ref + .read(remoteAlbumProvider.notifier) + .addAssets(album.id, remoteAssets.map((e) => e.id).toList()); + + if (selectedAssets.length != remoteAssets.length) { + ImmichToast.show( + context: context, + msg: 'add_to_album_bottom_sheet_some_local_assets'.t(context: context), + ); + } + + if (addedCount != remoteAssets.length) { + ImmichToast.show( + context: context, + msg: 'add_to_album_bottom_sheet_already_exists'.t(args: {"album": album.name}), + ); + } else { + ImmichToast.show( + context: context, + msg: 'add_to_album_bottom_sheet_added'.t(args: {"album": album.name}), + ); + } + + ref.read(multiSelectProvider.notifier).reset(); + } + return BaseBottomSheet( - initialChildSize: 0.25, - maxChildSize: 0.4, + initialChildSize: 0.4, + maxChildSize: 0.7, shouldCloseOnMinExtent: false, actions: [ const ShareActionButton(source: ActionSource.timeline), @@ -52,6 +91,9 @@ class FavoriteBottomSheet extends ConsumerWidget { const UploadActionButton(source: ActionSource.timeline), ], ], + slivers: multiselect.hasRemote + ? [const AddToAlbumHeader(), AlbumSelector(onAlbumSelected: addAssetsToAlbum)] + : [], ); } } diff --git a/mobile/lib/presentation/widgets/bottom_sheet/map_bottom_sheet.widget.dart b/mobile/lib/presentation/widgets/bottom_sheet/map_bottom_sheet.widget.dart index dc5fdbe78d..ac3772a02b 100644 --- a/mobile/lib/presentation/widgets/bottom_sheet/map_bottom_sheet.widget.dart +++ b/mobile/lib/presentation/widgets/bottom_sheet/map_bottom_sheet.widget.dart @@ -5,6 +5,7 @@ import 'package:immich_mobile/presentation/widgets/bottom_sheet/base_bottom_shee import 'package:immich_mobile/presentation/widgets/map/map.state.dart'; import 'package:immich_mobile/presentation/widgets/timeline/timeline.widget.dart'; import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart'; +import 'package:immich_mobile/providers/user.provider.dart'; class MapBottomSheet extends StatelessWidget { const MapBottomSheet({super.key}); @@ -32,8 +33,13 @@ class _ScopedMapTimeline extends StatelessWidget { return ProviderScope( overrides: [ timelineServiceProvider.overrideWith((ref) { + final user = ref.watch(currentUserProvider); + if (user == null) { + throw Exception('User must be logged in to access archive'); + } + final bounds = ref.watch(mapStateProvider).bounds; - final timelineService = ref.watch(timelineFactoryProvider).map(bounds); + final timelineService = ref.watch(timelineFactoryProvider).map(user.id, bounds); ref.onDispose(timelineService.dispose); return timelineService; }), diff --git a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart index a0163a7220..5359391261 100644 --- a/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart +++ b/mobile/lib/presentation/widgets/images/thumbnail_tile.widget.dart @@ -16,7 +16,7 @@ class ThumbnailTile extends ConsumerWidget { this.asset, { this.size = kThumbnailResolution, this.fit = BoxFit.cover, - this.showStorageIndicator, + this.showStorageIndicator = false, this.lockSelection = false, this.heroOffset, super.key, @@ -25,7 +25,7 @@ class ThumbnailTile extends ConsumerWidget { final BaseAsset? asset; final Size size; final BoxFit fit; - final bool? showStorageIndicator; + final bool showStorageIndicator; final bool lockSelection; final int? heroOffset; @@ -55,7 +55,7 @@ class ThumbnailTile extends ConsumerWidget { : const BoxDecoration(); final bool storageIndicator = - showStorageIndicator ?? ref.watch(settingsProvider.select((s) => s.get(Setting.showStorageIndicator))); + ref.watch(settingsProvider.select((s) => s.get(Setting.showStorageIndicator))) && showStorageIndicator; return Stack( children: [ diff --git a/mobile/lib/presentation/widgets/map/map.widget.dart b/mobile/lib/presentation/widgets/map/map.widget.dart index 1d285f0441..c1d5bf6464 100644 --- a/mobile/lib/presentation/widgets/map/map.widget.dart +++ b/mobile/lib/presentation/widgets/map/map.widget.dart @@ -185,6 +185,8 @@ class _Map extends StatelessWidget { initialCameraPosition: initialLocation == null ? const CameraPosition(target: LatLng(0, 0), zoom: 0) : CameraPosition(target: initialLocation, zoom: MapUtils.mapZoomToAssetLevel), + compassEnabled: false, + rotateGesturesEnabled: false, styleString: style, onMapCreated: onMapCreated, onStyleLoadedCallback: onMapReady, diff --git a/mobile/lib/presentation/widgets/timeline/timeline.state.dart b/mobile/lib/presentation/widgets/timeline/timeline.state.dart index b3aec23f7f..1e1d4130f7 100644 --- a/mobile/lib/presentation/widgets/timeline/timeline.state.dart +++ b/mobile/lib/presentation/widgets/timeline/timeline.state.dart @@ -14,7 +14,7 @@ class TimelineArgs { final double maxHeight; final double spacing; final int columnCount; - final bool? showStorageIndicator; + final bool showStorageIndicator; final bool withStack; final GroupAssetsBy? groupBy; @@ -23,7 +23,7 @@ class TimelineArgs { required this.maxHeight, this.spacing = kTimelineSpacing, this.columnCount = kTimelineColumnCount, - this.showStorageIndicator, + this.showStorageIndicator = false, this.withStack = false, this.groupBy, }); diff --git a/mobile/lib/presentation/widgets/timeline/timeline.widget.dart b/mobile/lib/presentation/widgets/timeline/timeline.widget.dart index 83e679b8c1..5f1e7f27b0 100644 --- a/mobile/lib/presentation/widgets/timeline/timeline.widget.dart +++ b/mobile/lib/presentation/widgets/timeline/timeline.widget.dart @@ -36,10 +36,11 @@ class Timeline extends StatelessWidget { this.showStorageIndicator = false, this.withStack = false, this.appBar = const ImmichSliverAppBar(floating: true, pinned: false, snap: false), - this.bottomSheet = const GeneralBottomSheet(minChildSize: 0.18), + this.bottomSheet = const GeneralBottomSheet(minChildSize: 0.23), this.groupBy, this.withScrubber = true, this.snapToMonth = true, + this.initialScrollOffset, }); final Widget? topSliverWidget; @@ -51,6 +52,7 @@ class Timeline extends StatelessWidget { final GroupAssetsBy? groupBy; final bool withScrubber; final bool snapToMonth; + final double? initialScrollOffset; @override Widget build(BuildContext context) { @@ -78,6 +80,7 @@ class Timeline extends StatelessWidget { bottomSheet: bottomSheet, withScrubber: withScrubber, snapToMonth: snapToMonth, + initialScrollOffset: initialScrollOffset, ), ), ), @@ -93,6 +96,7 @@ class _SliverTimeline extends ConsumerStatefulWidget { this.bottomSheet, this.withScrubber = true, this.snapToMonth = true, + this.initialScrollOffset, }); final Widget? topSliverWidget; @@ -101,6 +105,7 @@ class _SliverTimeline extends ConsumerStatefulWidget { final Widget? bottomSheet; final bool withScrubber; final bool snapToMonth; + final double? initialScrollOffset; @override ConsumerState createState() => _SliverTimelineState(); @@ -124,7 +129,10 @@ class _SliverTimelineState extends ConsumerState<_SliverTimeline> { @override void initState() { super.initState(); - _scrollController = ScrollController(onAttach: _restoreScalePosition); + _scrollController = ScrollController( + initialScrollOffset: widget.initialScrollOffset ?? 0.0, + onAttach: _restoreScalePosition, + ); _eventSubscription = EventStream.shared.listen(_onEvent); final currentTilesPerRow = ref.read(settingsProvider).get(Setting.tilesPerRow); diff --git a/mobile/lib/providers/app_life_cycle.provider.dart b/mobile/lib/providers/app_life_cycle.provider.dart index 29de09fd33..3b51874ab5 100644 --- a/mobile/lib/providers/app_life_cycle.provider.dart +++ b/mobile/lib/providers/app_life_cycle.provider.dart @@ -161,7 +161,6 @@ class AppLifeCycleNotifier extends StateNotifier { _resumeBackup(), ]); } else { - _ref.read(driftBackupProvider.notifier).updateError(BackupError.syncFailed); await _safeRun(backgroundManager.hashAssets(), "hashAssets"); } diff --git a/mobile/lib/providers/background_sync.provider.dart b/mobile/lib/providers/background_sync.provider.dart index e6e83b64df..a61cd93022 100644 --- a/mobile/lib/providers/background_sync.provider.dart +++ b/mobile/lib/providers/background_sync.provider.dart @@ -1,12 +1,21 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/domain/utils/background_sync.dart'; +import 'package:immich_mobile/providers/backup/drift_backup.provider.dart'; import 'package:immich_mobile/providers/sync_status.provider.dart'; final backgroundSyncProvider = Provider((ref) { final syncStatusNotifier = ref.read(syncStatusProvider.notifier); + final backupProvider = ref.read(driftBackupProvider.notifier); + final manager = BackgroundSyncManager( - onRemoteSyncStart: syncStatusNotifier.startRemoteSync, - onRemoteSyncComplete: syncStatusNotifier.completeRemoteSync, + onRemoteSyncStart: () { + syncStatusNotifier.startRemoteSync(); + backupProvider.updateError(BackupError.none); + }, + onRemoteSyncComplete: (isSuccess) { + syncStatusNotifier.completeRemoteSync(); + backupProvider.updateError(isSuccess == true ? BackupError.none : BackupError.syncFailed); + }, onRemoteSyncError: syncStatusNotifier.errorRemoteSync, onLocalSyncStart: syncStatusNotifier.startLocalSync, onLocalSyncComplete: syncStatusNotifier.completeLocalSync, diff --git a/mobile/lib/providers/infrastructure/action.provider.dart b/mobile/lib/providers/infrastructure/action.provider.dart index 77ac6595a7..21d76201c1 100644 --- a/mobile/lib/providers/infrastructure/action.provider.dart +++ b/mobile/lib/providers/infrastructure/action.provider.dart @@ -77,11 +77,14 @@ class ActionNotifier extends Notifier { return _getAssets(source).whereType().toIds().toList(growable: false); } - List _getLocalIdsForSource(ActionSource source) { + List _getLocalIdsForSource(ActionSource source, {bool ignoreLocalOnly = false}) { final Set assets = _getAssets(source); final List localIds = []; for (final asset in assets) { + if (ignoreLocalOnly && asset.storage != AssetState.merged) { + continue; + } if (asset is LocalAsset) { localIds.add(asset.id); } else if (asset is RemoteAsset && asset.localId != null) { @@ -189,7 +192,7 @@ class ActionNotifier extends Notifier { Future moveToLockFolder(ActionSource source) async { final ids = _getOwnedRemoteIdsForSource(source); - final localIds = _getLocalIdsForSource(source); + final localIds = _getLocalIdsForSource(source, ignoreLocalOnly: true); try { await _service.moveToLockFolder(ids, localIds); return ActionResult(count: ids.length, success: true); diff --git a/mobile/lib/providers/infrastructure/asset.provider.dart b/mobile/lib/providers/infrastructure/asset.provider.dart index 102e6aa60c..4b51ce33bd 100644 --- a/mobile/lib/providers/infrastructure/asset.provider.dart +++ b/mobile/lib/providers/infrastructure/asset.provider.dart @@ -3,6 +3,7 @@ import 'package:immich_mobile/domain/services/asset.service.dart'; import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/remote_asset.repository.dart'; import 'package:immich_mobile/providers/infrastructure/db.provider.dart'; +import 'package:immich_mobile/providers/user.provider.dart'; final localAssetRepository = Provider( (ref) => DriftLocalAssetRepository(ref.watch(driftProvider)), @@ -19,9 +20,13 @@ final assetServiceProvider = Provider( ), ); -final placesProvider = FutureProvider>( - (ref) => AssetService( - remoteAssetRepository: ref.watch(remoteAssetRepositoryProvider), - localAssetRepository: ref.watch(localAssetRepository), - ).getPlaces(), -); +final placesProvider = FutureProvider>((ref) { + final assetService = ref.watch(assetServiceProvider); + final auth = ref.watch(currentUserProvider); + + if (auth == null) { + return Future.value(const []); + } + + return assetService.getPlaces(auth.id); +}); diff --git a/mobile/lib/repositories/asset_media.repository.dart b/mobile/lib/repositories/asset_media.repository.dart index bfcf7060e0..8336d2341d 100644 --- a/mobile/lib/repositories/asset_media.repository.dart +++ b/mobile/lib/repositories/asset_media.repository.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/widgets.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; @@ -8,6 +9,7 @@ import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/entities/asset.entity.dart' as asset_entity; import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/extensions/build_context_extensions.dart'; +import 'package:immich_mobile/extensions/platform_extensions.dart'; import 'package:immich_mobile/extensions/response_extensions.dart'; import 'package:immich_mobile/repositories/asset_api.repository.dart'; import 'package:immich_mobile/utils/hash.dart'; @@ -24,7 +26,28 @@ class AssetMediaRepository { const AssetMediaRepository(this._assetApiRepository); - Future> deleteAll(List ids) => PhotoManager.editor.deleteWithIds(ids); + Future _androidSupportsTrash() async { + if (Platform.isAndroid) { + DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); + AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; + int sdkVersion = androidInfo.version.sdkInt; + return sdkVersion >= 31; + } + return false; + } + + Future> deleteAll(List ids) async { + if (CurrentPlatform.isAndroid) { + if (await _androidSupportsTrash()) { + return PhotoManager.editor.android.moveToTrash( + ids.map((e) => AssetEntity(id: e, width: 1, height: 1, typeInt: 0)).toList(), + ); + } else { + return PhotoManager.editor.deleteWithIds(ids); + } + } + return PhotoManager.editor.deleteWithIds(ids); + } Future get(String id) async { final entity = await AssetEntity.fromId(id); @@ -72,6 +95,7 @@ class AssetMediaRepository { // TODO: make this more efficient Future shareAssets(List assets, BuildContext context) async { final downloadedXFiles = []; + final tempFiles = []; for (var asset in assets) { final localId = (asset is LocalAsset) @@ -82,6 +106,9 @@ class AssetMediaRepository { if (localId != null) { File? f = await AssetEntity(id: localId, width: 1, height: 1, typeInt: 0).originFile; downloadedXFiles.add(XFile(f!.path)); + if (CurrentPlatform.isIOS) { + tempFiles.add(f); + } } else if (asset is RemoteAsset) { final tempDir = await getTemporaryDirectory(); final name = asset.name; @@ -95,6 +122,7 @@ class AssetMediaRepository { await tempFile.writeAsBytes(res.bodyBytes); downloadedXFiles.add(XFile(tempFile.path)); + tempFiles.add(tempFile); } else { _log.warning("Asset type not supported for sharing: $asset"); continue; @@ -113,9 +141,9 @@ class AssetMediaRepository { downloadedXFiles, sharePositionOrigin: Rect.fromPoints(Offset.zero, Offset(size.width / 3, size.height)), ).then((result) async { - for (var file in downloadedXFiles) { + for (var file in tempFiles) { try { - await File(file.path).delete(); + await file.delete(); } catch (e) { _log.warning("Failed to delete temporary file: ${file.path}", e); } diff --git a/mobile/lib/repositories/download.repository.dart b/mobile/lib/repositories/download.repository.dart index 1ac9410fc6..c578746a4c 100644 --- a/mobile/lib/repositories/download.repository.dart +++ b/mobile/lib/repositories/download.repository.dart @@ -121,7 +121,7 @@ class DownloadRepository { _dummyMetadata['part'] = LivePhotosPart.video.index; tasks[taskIndex++] = DownloadTask( taskId: livePhotoVideoId, - url: url, + url: getOriginalUrlForRemoteId(livePhotoVideoId), headers: headers, filename: asset.name.toUpperCase().replaceAll(RegExp(r"\.(JPG|HEIC)$"), '.MOV'), updates: Updates.statusAndProgress, diff --git a/mobile/lib/widgets/common/immich_sliver_app_bar.dart b/mobile/lib/widgets/common/immich_sliver_app_bar.dart index 23d64ecfcd..90c213599c 100644 --- a/mobile/lib/widgets/common/immich_sliver_app_bar.dart +++ b/mobile/lib/widgets/common/immich_sliver_app_bar.dart @@ -162,48 +162,32 @@ class _ProfileIndicator extends ConsumerWidget { } } +const double _kBadgeWidgetSize = 30.0; + class _BackupIndicator extends ConsumerWidget { const _BackupIndicator(); @override Widget build(BuildContext context, WidgetRef ref) { - const widgetSize = 30.0; - final hasError = ref.watch(driftBackupProvider.select((state) => state.error != BackupError.none)); - final indicatorIcon = hasError - ? Icon( - Icons.warning_rounded, - size: 12, - color: context.colorScheme.error, - semanticLabel: 'backup_controller_page_backup'.tr(), - ) - : _getBackupBadgeIcon(context, ref); - final badgeBackground = hasError ? context.colorScheme.errorContainer : context.colorScheme.surfaceContainer; + final indicatorIcon = _getBackupBadgeIcon(context, ref); return InkWell( onTap: () => context.pushRoute(const DriftBackupRoute()), borderRadius: const BorderRadius.all(Radius.circular(12)), child: Badge( - label: Container( - width: widgetSize / 2, - height: widgetSize / 2, - decoration: BoxDecoration( - color: badgeBackground, - border: Border.all(color: context.colorScheme.outline.withValues(alpha: .3)), - borderRadius: BorderRadius.circular(widgetSize / 2), - ), - child: indicatorIcon, - ), + label: indicatorIcon, backgroundColor: Colors.transparent, alignment: Alignment.bottomRight, isLabelVisible: indicatorIcon != null, offset: const Offset(-2, -12), - child: Icon(Icons.backup_rounded, size: widgetSize, color: context.primaryColor), + child: Icon(Icons.backup_rounded, size: _kBadgeWidgetSize, color: context.primaryColor), ), ); } Widget? _getBackupBadgeIcon(BuildContext context, WidgetRef ref) { final backupStateStream = ref.watch(settingsProvider).watch(Setting.enableBackup); + final hasError = ref.watch(driftBackupProvider.select((state) => state.error != BackupError.none)); final isDarkTheme = context.isDarkTheme; final iconColor = isDarkTheme ? Colors.white : Colors.black; final isUploading = ref.watch(driftBackupProvider.select((state) => state.uploadItems.isNotEmpty)); @@ -215,42 +199,76 @@ class _BackupIndicator extends ConsumerWidget { final backupEnabled = snapshot.data ?? false; if (!backupEnabled) { - return Icon( - Icons.cloud_off_rounded, - size: 9, - color: iconColor, - semanticLabel: 'backup_controller_page_backup'.tr(), + return _BadgeLabel( + Icon( + Icons.cloud_off_rounded, + size: 9, + color: iconColor, + semanticLabel: 'backup_controller_page_backup'.tr(), + ), + ); + } + + if (hasError) { + return _BadgeLabel( + Icon( + Icons.warning_rounded, + size: 12, + color: context.colorScheme.error, + semanticLabel: 'backup_controller_page_backup'.tr(), + ), + backgroundColor: context.colorScheme.errorContainer, ); } if (isUploading) { - return Container( - padding: const EdgeInsets.all(3.5), - child: Theme( - data: context.themeData.copyWith( - progressIndicatorTheme: context.themeData.progressIndicatorTheme.copyWith(year2023: true), - ), - child: CircularProgressIndicator( - strokeWidth: 2, - strokeCap: StrokeCap.round, - valueColor: AlwaysStoppedAnimation(iconColor), - semanticsLabel: 'backup_controller_page_backup'.tr(), + return _BadgeLabel( + Container( + padding: const EdgeInsets.all(3.5), + child: Theme( + data: context.themeData.copyWith( + progressIndicatorTheme: context.themeData.progressIndicatorTheme.copyWith(year2023: true), + ), + child: CircularProgressIndicator( + strokeWidth: 2, + strokeCap: StrokeCap.round, + valueColor: AlwaysStoppedAnimation(iconColor), + semanticsLabel: 'backup_controller_page_backup'.tr(), + ), ), ), ); } - return Icon( - Icons.check_outlined, - size: 9, - color: iconColor, - semanticLabel: 'backup_controller_page_backup'.tr(), + return _BadgeLabel( + Icon(Icons.check_outlined, size: 9, color: iconColor, semanticLabel: 'backup_controller_page_backup'.tr()), ); }, ); } } +class _BadgeLabel extends StatelessWidget { + final Widget indicator; + final Color? backgroundColor; + + const _BadgeLabel(this.indicator, {this.backgroundColor}); + + @override + Widget build(BuildContext context) { + return Container( + width: _kBadgeWidgetSize / 2, + height: _kBadgeWidgetSize / 2, + decoration: BoxDecoration( + color: backgroundColor ?? context.colorScheme.surfaceContainer, + border: Border.all(color: context.colorScheme.outline.withValues(alpha: .3)), + borderRadius: BorderRadius.circular(_kBadgeWidgetSize / 2), + ), + child: indicator, + ); + } +} + class _SyncStatusIndicator extends ConsumerStatefulWidget { const _SyncStatusIndicator(); diff --git a/mobile/lib/widgets/settings/beta_timeline_list_tile.dart b/mobile/lib/widgets/settings/beta_timeline_list_tile.dart index 326d6c49d1..1fefb3dcfa 100644 --- a/mobile/lib/widgets/settings/beta_timeline_list_tile.dart +++ b/mobile/lib/widgets/settings/beta_timeline_list_tile.dart @@ -1,12 +1,10 @@ import 'package:auto_route/auto_route.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart'; import 'package:immich_mobile/providers/app_settings.provider.dart'; import 'package:immich_mobile/providers/auth.provider.dart'; -import 'package:immich_mobile/providers/server_info.provider.dart'; import 'package:immich_mobile/routing/router.dart'; import 'package:immich_mobile/services/app_settings.service.dart'; @@ -16,10 +14,9 @@ class BetaTimelineListTile extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final betaTimelineValue = ref.watch(appSettingsServiceProvider).getSetting(AppSettingsEnum.betaTimeline); - final serverInfo = ref.watch(serverInfoProvider); final auth = ref.watch(authProvider); - if (!auth.isAuthenticated || (serverInfo.serverVersion.minor < 136 && kReleaseMode)) { + if (!auth.isAuthenticated) { return const SizedBox.shrink(); } diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 84140a882d..4a7d516a9d 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 1.144.1 +- API version: 2.0.1 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pigeon/background_worker_api.dart b/mobile/pigeon/background_worker_api.dart index 6f6c781de2..a40d290199 100644 --- a/mobile/pigeon/background_worker_api.dart +++ b/mobile/pigeon/background_worker_api.dart @@ -22,6 +22,8 @@ class BackgroundWorkerSettings { abstract class BackgroundWorkerFgHostApi { void enable(); + void saveNotificationMessage(String title, String body); + void configure(BackgroundWorkerSettings settings); void disable(); @@ -33,8 +35,6 @@ abstract class BackgroundWorkerBgHostApi { // required platform channels to notify the native side to start the background upload void onInitialized(); - void showNotification(String title, String content); - // Called from the background flutter engine to request the native side to cleanup void close(); } diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index e5f972743c..125e4d46e2 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -317,10 +317,10 @@ packages: dependency: "direct main" description: name: connectivity_plus - sha256: "04bf81bb0b77de31557b58d052b24b3eee33f09a6e7a8c68a3e247c7df19ec27" + sha256: b5e72753cf63becce2c61fd04dfe0f1c430cc5278b53a1342dc5ad839eab29ec url: "https://pub.dev" source: hosted - version: "6.1.3" + version: "6.1.5" connectivity_plus_platform_interface: dependency: transitive description: @@ -437,18 +437,18 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "306b78788d1bb569edb7c55d622953c2414ca12445b41c9117963e03afc5c513" + sha256: "49413c8ca514dea7633e8def233b25efdf83ec8522955cc2c0e3ad802927e7c6" url: "https://pub.dev" source: hosted - version: "11.3.3" + version: "12.1.0" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2" + sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f url: "https://pub.dev" source: hosted - version: "7.0.2" + version: "7.0.3" drift: dependency: "direct main" description: @@ -1022,25 +1022,34 @@ packages: isar: dependency: "direct main" description: - name: isar - sha256: e17a9555bc7f22ff26568b8c64d019b4ffa2dc6bd4cb1c8d9b269aefd32e53ad - url: "https://pub.isar-community.dev" - source: hosted + path: "packages/isar" + ref: bb1dca40fe87a001122e5d43bc6254718cb49f3a + resolved-ref: bb1dca40fe87a001122e5d43bc6254718cb49f3a + url: "https://github.com/immich-app/isar" + source: git version: "3.1.8" - isar_flutter_libs: + isar_community: + dependency: transitive + description: + name: isar_community + sha256: "28f59e54636c45ba0bb1b3b7f2656f1c50325f740cea6efcd101900be3fba546" + url: "https://pub.dev" + source: hosted + version: "3.3.0-dev.3" + isar_community_flutter_libs: dependency: "direct main" description: - name: isar_flutter_libs - sha256: "78710781e658ce4bff59b3f38c5b2735e899e627f4e926e1221934e77b95231a" - url: "https://pub.isar-community.dev" + name: isar_community_flutter_libs + sha256: c2934fe755bb3181cb67602fd5df0d080b3d3eb52799f98623aa4fc5acbea010 + url: "https://pub.dev" source: hosted - version: "3.1.8" + version: "3.3.0-dev.3" isar_generator: dependency: "direct dev" description: path: "packages/isar_generator" - ref: v3 - resolved-ref: ad574f60ed6f39d2995cd16fc7dc3de9a646ef30 + ref: bb1dca40fe87a001122e5d43bc6254718cb49f3a + resolved-ref: bb1dca40fe87a001122e5d43bc6254718cb49f3a url: "https://github.com/immich-app/isar" source: git version: "3.1.8" diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index b0b6399b67..7dc34807b1 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,14 +2,12 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 1.144.1+3019 +version: 2.0.1+3021 environment: sdk: '>=3.8.0 <4.0.0' flutter: 3.35.4 -isar_version: &isar_version 3.1.8 - dependencies: flutter: sdk: flutter @@ -24,7 +22,7 @@ dependencies: connectivity_plus: ^6.1.3 crop_image: ^1.0.16 crypto: ^3.0.6 - device_info_plus: ^11.3.3 + device_info_plus: ^12.0.0 dynamic_color: ^1.7.0 easy_image_viewer: ^1.5.1 easy_localization: ^3.0.7+1 @@ -81,11 +79,11 @@ dependencies: openapi: path: openapi isar: - version: *isar_version - hosted: https://pub.isar-community.dev/ - isar_flutter_libs: # contains Isar Core - version: *isar_version - hosted: https://pub.isar-community.dev/ + git: + url: https://github.com/immich-app/isar + ref: 'bb1dca40fe87a001122e5d43bc6254718cb49f3a' + path: packages/isar/ + isar_community_flutter_libs: 3.3.0-dev.3 # DB drift: ^2.23.1 drift_flutter: ^0.2.4 @@ -101,7 +99,7 @@ dev_dependencies: isar_generator: git: url: https://github.com/immich-app/isar - ref: v3 + ref: 'bb1dca40fe87a001122e5d43bc6254718cb49f3a' path: packages/isar_generator/ integration_test: sdk: flutter diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 9c5e6c6c60..b574bc6624 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -9858,7 +9858,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "1.144.1", + "version": "2.0.1", "contact": {} }, "tags": [], diff --git a/open-api/typescript-sdk/.nvmrc b/open-api/typescript-sdk/.nvmrc index e2228113dd..442c7587a9 100644 --- a/open-api/typescript-sdk/.nvmrc +++ b/open-api/typescript-sdk/.nvmrc @@ -1 +1 @@ -22.19.0 +22.20.0 diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index ed568efac5..05f0b320e0 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "1.144.1", + "version": "2.0.1", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", @@ -19,7 +19,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.18.1", + "@types/node": "^22.18.8", "typescript": "^5.3.3" }, "repository": { @@ -28,6 +28,6 @@ "directory": "open-api/typescript-sdk" }, "volta": { - "node": "22.19.0" + "node": "22.20.0" } } diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 2a786c33f8..c8a69dfe8c 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 1.144.1 + * 2.0.1 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/package.json b/package.json index 18610fe4bc..ac281d42a2 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "description": "Monorepo for Immich", "private": true, - "packageManager": "pnpm@10.15.1+sha512.34e538c329b5553014ca8e8f4535997f96180a1d0f614339357449935350d924e22f8614682191264ec33d1462ac21561aff97f6bb18065351c162c7e8f6de67", + "packageManager": "pnpm@10.18.0+sha512.e804f889f1cecc40d572db084eec3e4881739f8dec69c0ff10d2d1beff9a4e309383ba27b5b750059d7f4c149535b6cd0d2cb1ed3aeb739239a4284a68f40cfa", "engines": { "pnpm": ">=10.0.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 75e1e5808d..3ef694e5fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: overrides: canvas: 2.11.2 - sharp: ^0.34.3 + sharp: ^0.34.4 packageExtensionsChecksum: sha256-DAYr0FTkvKYnvBH4muAER9UE1FVGKhqfRU4/QwA2xPQ= @@ -43,7 +43,7 @@ importers: devDependencies: '@eslint/js': specifier: ^9.8.0 - version: 9.35.0 + version: 9.37.0 '@immich/sdk': specifier: file:../open-api/typescript-sdk version: link:../open-api/typescript-sdk @@ -63,11 +63,11 @@ importers: specifier: ^4.13.1 version: 4.13.4 '@types/node': - specifier: ^22.18.1 - version: 22.18.5 + specifier: ^22.18.8 + version: 22.18.9 '@vitest/coverage-v8': specifier: ^3.0.0 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) byte-size: specifier: ^9.0.0 version: 9.0.1 @@ -79,16 +79,16 @@ importers: version: 12.1.0 eslint: specifier: ^9.14.0 - version: 9.35.0(jiti@2.5.1) + version: 9.37.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + version: 10.1.8(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(prettier@3.6.2) eslint-plugin-unicorn: specifier: ^60.0.0 - version: 60.0.0(eslint@9.35.0(jiti@2.5.1)) + version: 60.0.0(eslint@9.37.0(jiti@2.6.1)) globals: specifier: ^16.0.0 version: 16.4.0 @@ -100,25 +100,25 @@ importers: version: 3.6.2 prettier-plugin-organize-imports: specifier: ^4.0.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) + version: 4.3.0(prettier@3.6.2)(typescript@5.9.3) typescript: specifier: ^5.3.3 - version: 5.9.2 + version: 5.9.3 typescript-eslint: specifier: ^8.28.0 - version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^7.0.0 - version: 7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + version: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) vite-tsconfig-paths: specifier: ^5.0.0 - version: 5.1.4(typescript@5.9.2)(vite@7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) vitest: specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) vitest-fetch-mock: specifier: ^0.4.0 - version: 0.4.5(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 0.4.5(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) yaml: specifier: ^2.3.1 version: 2.8.1 @@ -126,14 +126,14 @@ importers: docs: dependencies: '@docusaurus/core': - specifier: ~3.8.0 - version: 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) + specifier: ~3.9.0 + version: 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) '@docusaurus/preset-classic': - specifier: ~3.8.0 - version: 3.8.1(@algolia/client-search@5.29.0)(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(@types/react@19.1.13)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.2) + specifier: ~3.9.0 + version: 3.9.1(@algolia/client-search@5.40.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(@types/react@19.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3) '@docusaurus/theme-common': - specifier: ~3.8.0 - version: 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ~3.9.0 + version: 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdi/js': specifier: ^7.3.67 version: 7.4.47 @@ -142,13 +142,13 @@ importers: version: 1.6.1 '@mdx-js/react': specifier: ^3.0.0 - version: 3.1.1(@types/react@19.1.13)(react@18.3.1) + version: 3.1.1(@types/react@19.2.2)(react@18.3.1) autoprefixer: specifier: ^10.4.17 version: 10.4.21(postcss@8.5.6) docusaurus-lunr-search: specifier: ^3.3.2 - version: 3.6.0(@docusaurus/core@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.6.0(@docusaurus/core@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) lunr: specifier: ^2.3.9 version: 2.3.9 @@ -160,7 +160,7 @@ importers: version: 2.4.1(react@18.3.1) raw-loader: specifier: ^4.0.2 - version: 4.0.2(webpack@5.100.2) + version: 4.0.2(webpack@5.102.1) react: specifier: ^18.0.0 version: 18.3.1 @@ -169,32 +169,32 @@ importers: version: 18.3.1(react@18.3.1) tailwindcss: specifier: ^3.2.4 - version: 3.4.17 + version: 3.4.18(yaml@2.8.1) url: specifier: ^0.11.0 version: 0.11.4 devDependencies: '@docusaurus/module-type-aliases': - specifier: ~3.8.0 - version: 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ~3.9.0 + version: 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/tsconfig': specifier: ^3.7.0 - version: 3.8.1 + version: 3.9.1 '@docusaurus/types': specifier: ^3.7.0 - version: 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) prettier: specifier: ^3.2.4 version: 3.6.2 typescript: specifier: ^5.1.6 - version: 5.9.2 + version: 5.9.3 e2e: devDependencies: '@eslint/js': specifier: ^9.8.0 - version: 9.35.0 + version: 9.37.0 '@immich/cli': specifier: file:../cli version: link:../cli @@ -203,7 +203,7 @@ importers: version: link:../open-api/typescript-sdk '@playwright/test': specifier: ^1.44.1 - version: 1.55.0 + version: 1.55.1 '@socket.io/component-emitter': specifier: ^3.1.2 version: 3.1.2 @@ -211,8 +211,8 @@ importers: specifier: ^3.4.2 version: 3.7.1 '@types/node': - specifier: ^22.18.1 - version: 22.18.5 + specifier: ^22.18.8 + version: 22.18.9 '@types/oidc-provider': specifier: ^9.0.0 version: 9.5.0 @@ -227,16 +227,16 @@ importers: version: 6.0.3 eslint: specifier: ^9.14.0 - version: 9.35.0(jiti@2.5.1) + version: 9.37.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + version: 10.1.8(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(prettier@3.6.2) eslint-plugin-unicorn: specifier: ^60.0.0 - version: 60.0.0(eslint@9.35.0(jiti@2.5.1)) + version: 60.0.0(eslint@9.37.0(jiti@2.6.1)) exiftool-vendored: specifier: ^28.3.1 version: 28.8.0 @@ -263,10 +263,10 @@ importers: version: 3.6.2 prettier-plugin-organize-imports: specifier: ^4.0.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) + version: 4.3.0(prettier@3.6.2)(typescript@5.9.3) sharp: - specifier: ^0.34.3 - version: 0.34.3 + specifier: ^0.34.4 + version: 0.34.4 socket.io-client: specifier: ^4.7.4 version: 4.8.1 @@ -275,16 +275,16 @@ importers: version: 7.1.4 typescript: specifier: ^5.3.3 - version: 5.9.2 + version: 5.9.3 typescript-eslint: specifier: ^8.28.0 - version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) utimes: specifier: ^5.2.1 version: 5.2.1(encoding@0.1.13) vitest: specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) open-api/typescript-sdk: dependencies: @@ -293,17 +293,17 @@ importers: version: 1.0.4 devDependencies: '@types/node': - specifier: ^22.18.1 - version: 22.18.5 + specifier: ^22.18.8 + version: 22.18.9 typescript: specifier: ^5.3.3 - version: 5.9.2 + version: 5.9.3 server: dependencies: '@nestjs/bullmq': specifier: ^11.0.1 - version: 11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(bullmq@5.58.5) + version: 11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(bullmq@5.60.0) '@nestjs/common': specifier: ^11.0.4 version: 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -318,7 +318,7 @@ importers: version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.6)(rxjs@7.8.2) '@nestjs/schedule': specifier: ^6.0.0 - version: 6.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6) + version: 6.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6) '@nestjs/swagger': specifier: ^11.0.2 version: 11.2.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2) @@ -339,13 +339,13 @@ importers: version: 0.205.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-ioredis': specifier: ^0.53.0 - version: 0.53.0(@opentelemetry/api@1.9.0) + version: 0.53.3(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-nestjs-core': - specifier: ^0.51.0 - version: 0.51.0(@opentelemetry/api@1.9.0) + specifier: ^0.52.0 + version: 0.52.2(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-pg': specifier: ^0.58.0 - version: 0.58.0(@opentelemetry/api@1.9.0) + version: 0.58.3(@opentelemetry/api@1.9.0) '@opentelemetry/resources': specifier: ^2.0.1 version: 2.1.0(@opentelemetry/api@1.9.0) @@ -360,10 +360,10 @@ importers: version: 1.37.0 '@react-email/components': specifier: ^0.5.0 - version: 0.5.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 0.5.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@react-email/render': specifier: ^1.1.2 - version: 1.2.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 1.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@socket.io/redis-adapter': specifier: ^8.3.0 version: 8.3.0(socket.io-adapter@2.5.5) @@ -381,7 +381,7 @@ importers: version: 2.2.0 bullmq: specifier: ^5.51.0 - version: 5.58.5 + version: 5.60.0 chokidar: specifier: ^4.0.3 version: 4.0.3 @@ -401,8 +401,8 @@ importers: specifier: ^1.4.7 version: 1.4.7 cron: - specifier: 4.3.0 - version: 4.3.0 + specifier: 4.3.3 + version: 4.3.3 exiftool-vendored: specifier: ^28.8.0 version: 28.8.0 @@ -426,7 +426,7 @@ importers: version: 7.14.0 ioredis: specifier: ^5.3.2 - version: 5.7.0 + version: 5.8.0 js-yaml: specifier: ^4.1.0 version: 4.1.0 @@ -450,22 +450,22 @@ importers: version: 2.0.2 nest-commander: specifier: ^3.16.0 - version: 3.19.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@types/inquirer@8.2.11)(@types/node@22.18.5)(typescript@5.9.2) + version: 3.20.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@types/inquirer@8.2.11)(@types/node@22.18.9)(typescript@5.9.3) nestjs-cls: specifier: ^5.0.0 version: 5.4.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(reflect-metadata@0.2.2)(rxjs@7.8.2) nestjs-kysely: - specifier: ^3.0.0 + specifier: 3.0.0 version: 3.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(kysely@0.28.2)(reflect-metadata@0.2.2) nestjs-otel: specifier: ^7.0.0 version: 7.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6) nodemailer: specifier: ^7.0.0 - version: 7.0.6 + version: 7.0.7 openid-client: specifier: ^6.3.3 - version: 6.8.0 + version: 6.8.1 pg: specifier: ^8.11.3 version: 8.16.3 @@ -480,13 +480,13 @@ importers: version: 3.4.7 react: specifier: ^19.0.0 - version: 19.1.1 + version: 19.2.0 react-dom: specifier: ^19.0.0 - version: 19.1.1(react@19.1.1) + version: 19.2.0(react@19.2.0) react-email: specifier: ^4.0.0 - version: 4.2.11 + version: 4.2.12 reflect-metadata: specifier: ^0.2.0 version: 0.2.2 @@ -501,10 +501,10 @@ importers: version: 2.17.0 semver: specifier: ^7.6.2 - version: 7.7.2 + version: 7.7.3 sharp: - specifier: ^0.34.3 - version: 0.34.3 + specifier: ^0.34.4 + version: 0.34.4 sirv: specifier: ^3.0.0 version: 3.0.2 @@ -513,7 +513,7 @@ importers: version: 4.8.1 tailwindcss-preset-email: specifier: ^1.4.0 - version: 1.4.0(tailwindcss@3.4.17) + version: 1.4.0(tailwindcss@3.4.18(yaml@2.8.1)) thumbhash: specifier: ^0.1.1 version: 0.1.1 @@ -529,13 +529,13 @@ importers: devDependencies: '@eslint/js': specifier: ^9.8.0 - version: 9.35.0 + version: 9.37.0 '@nestjs/cli': specifier: ^11.0.2 - version: 11.0.10(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@22.18.5) + version: 11.0.10(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@22.18.9) '@nestjs/schematics': specifier: ^11.0.0 - version: 11.0.7(chokidar@4.0.3)(typescript@5.9.2) + version: 11.0.8(chokidar@4.0.3)(typescript@5.9.3) '@nestjs/testing': specifier: ^11.0.4 version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-express@11.1.6) @@ -582,11 +582,11 @@ importers: specifier: ^2.0.0 version: 2.0.0 '@types/node': - specifier: ^22.18.1 - version: 22.18.5 + specifier: ^22.18.8 + version: 22.18.9 '@types/nodemailer': specifier: ^7.0.0 - version: 7.0.1 + version: 7.0.2 '@types/picomatch': specifier: ^4.0.0 version: 4.0.2 @@ -595,7 +595,7 @@ importers: version: 6.0.5 '@types/react': specifier: ^19.0.0 - version: 19.1.13 + version: 19.2.2 '@types/sanitize-html': specifier: ^2.13.0 version: 2.16.0 @@ -613,19 +613,19 @@ importers: version: 13.15.3 '@vitest/coverage-v8': specifier: ^3.0.0 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) eslint: specifier: ^9.14.0 - version: 9.35.0(jiti@2.5.1) + version: 9.37.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + version: 10.1.8(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(prettier@3.6.2) eslint-plugin-unicorn: specifier: ^60.0.0 - version: 60.0.0(eslint@9.35.0(jiti@2.5.1)) + version: 60.0.0(eslint@9.37.0(jiti@2.6.1)) globals: specifier: ^16.0.0 version: 16.4.0 @@ -643,46 +643,46 @@ importers: version: 3.6.2 prettier-plugin-organize-imports: specifier: ^4.0.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) + version: 4.3.0(prettier@3.6.2)(typescript@5.9.3) sql-formatter: specifier: ^15.0.0 - version: 15.6.9 + version: 15.6.10 supertest: specifier: ^7.1.0 version: 7.1.4 tailwindcss: specifier: ^3.4.0 - version: 3.4.17 + version: 3.4.18(yaml@2.8.1) testcontainers: specifier: ^11.0.0 - version: 11.5.1 + version: 11.7.1 typescript: specifier: ^5.9.2 - version: 5.9.2 + version: 5.9.3 typescript-eslint: specifier: ^8.28.0 - version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) unplugin-swc: specifier: ^1.4.5 - version: 1.5.7(@swc/core@1.13.5(@swc/helpers@0.5.17))(rollup@4.50.1) + version: 1.5.7(@swc/core@1.13.5(@swc/helpers@0.5.17))(rollup@4.52.4) vite-tsconfig-paths: specifier: ^5.0.0 - version: 5.1.4(typescript@5.9.2)(vite@7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) vitest: specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) web: dependencies: '@formatjs/icu-messageformat-parser': specifier: ^2.9.8 - version: 2.11.2 + version: 2.11.3 '@immich/sdk': specifier: file:../open-api/typescript-sdk version: link:../open-api/typescript-sdk '@immich/ui': - specifier: ^0.29.0 - version: 0.29.0(@internationalized/date@3.8.2)(svelte@5.38.10) + specifier: ^0.34.0 + version: 0.34.2(@internationalized/date@3.8.2)(svelte@5.39.11) '@mapbox/mapbox-gl-rtl-text': specifier: 0.2.3 version: 0.2.3(mapbox-gl@1.13.3) @@ -709,10 +709,10 @@ importers: version: 7946.0.16 '@zoom-image/core': specifier: ^0.41.0 - version: 0.41.0 + version: 0.41.3 '@zoom-image/svelte': specifier: ^0.3.0 - version: 0.3.4(svelte@5.38.10) + version: 0.3.7(svelte@5.39.11) async-mutex: specifier: ^0.5.0 version: 0.5.0 @@ -736,7 +736,7 @@ importers: version: 18.0.1 intl-messageformat: specifier: ^10.7.11 - version: 10.7.16 + version: 10.7.17 justified-layout: specifier: ^4.1.0 version: 4.1.0 @@ -748,7 +748,7 @@ importers: version: 3.7.2 maplibre-gl: specifier: ^5.6.2 - version: 5.7.1 + version: 5.8.0 pmtiles: specifier: ^4.3.0 version: 4.3.0 @@ -757,7 +757,7 @@ importers: version: 1.5.4 simple-icons: specifier: ^15.15.0 - version: 15.15.0 + version: 15.16.0 socket.io-client: specifier: ~4.8.0 version: 4.8.1 @@ -766,13 +766,13 @@ importers: version: 5.2.2 svelte-i18n: specifier: ^4.0.1 - version: 4.0.1(svelte@5.38.10) + version: 4.0.1(svelte@5.39.11) svelte-maplibre: specifier: ^1.2.0 - version: 1.2.1(svelte@5.38.10) + version: 1.2.1(svelte@5.39.11) svelte-persisted-store: specifier: ^0.12.0 - version: 0.12.0(svelte@5.38.10) + version: 0.12.0(svelte@5.39.11) tabbable: specifier: ^6.2.0 version: 6.2.0 @@ -781,38 +781,38 @@ importers: version: 0.1.1 devDependencies: '@eslint/js': - specifier: ^9.18.0 - version: 9.35.0 + specifier: ^9.36.0 + version: 9.37.0 '@faker-js/faker': specifier: ^10.0.0 version: 10.0.0 '@koddsson/eslint-plugin-tscompat': specifier: ^0.2.0 - version: 0.2.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 0.2.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@socket.io/component-emitter': specifier: ^3.1.0 version: 3.1.2 '@sveltejs/adapter-static': specifier: ^3.0.8 - version: 3.0.9(@sveltejs/kit@2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))) + version: 3.0.10(@sveltejs/kit@2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))) '@sveltejs/enhanced-img': specifier: ^0.8.0 - version: 0.8.1(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(rollup@4.50.1)(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 0.8.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(rollup@4.52.4)(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@sveltejs/kit': specifier: ^2.27.1 - version: 2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@sveltejs/vite-plugin-svelte': - specifier: 6.2.0 - version: 6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + specifier: 6.2.1 + version: 6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@tailwindcss/vite': specifier: ^4.1.7 - version: 4.1.13(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 4.1.14(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@testing-library/jest-dom': specifier: ^6.4.2 version: 6.8.0 '@testing-library/svelte': specifier: ^5.2.8 - version: 5.2.8(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 5.2.8(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@testing-library/user-event': specifier: ^14.5.2 version: 14.6.1(@testing-library/dom@10.4.0) @@ -836,28 +836,25 @@ importers: version: 1.5.5 '@vitest/coverage-v8': specifier: ^3.0.0 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) dotenv: specifier: ^17.0.0 - version: 17.2.2 + version: 17.2.3 eslint: - specifier: ^9.18.0 - version: 9.35.0(jiti@2.5.1) + specifier: ^9.36.0 + version: 9.37.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.35.0(jiti@2.5.1)) - eslint-p: - specifier: ^0.26.0 - version: 0.26.0(jiti@2.5.1) + version: 10.1.8(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-compat: specifier: ^6.0.2 - version: 6.0.2(eslint@9.35.0(jiti@2.5.1)) + version: 6.0.2(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-svelte: - specifier: ^3.9.0 - version: 3.12.3(eslint@9.35.0(jiti@2.5.1))(svelte@5.38.10) + specifier: ^3.12.4 + version: 3.12.4(eslint@9.37.0(jiti@2.6.1))(svelte@5.39.11) eslint-plugin-unicorn: - specifier: ^60.0.0 - version: 60.0.0(eslint@9.35.0(jiti@2.5.1)) + specifier: ^61.0.2 + version: 61.0.2(eslint@9.37.0(jiti@2.6.1)) factory.ts: specifier: ^1.4.1 version: 1.4.2 @@ -869,46 +866,50 @@ importers: version: 3.6.2 prettier-plugin-organize-imports: specifier: ^4.0.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) + version: 4.3.0(prettier@3.6.2)(typescript@5.9.3) prettier-plugin-sort-json: specifier: ^4.1.1 version: 4.1.1(prettier@3.6.2) prettier-plugin-svelte: specifier: ^3.3.3 - version: 3.4.0(prettier@3.6.2)(svelte@5.38.10) + version: 3.4.0(prettier@3.6.2)(svelte@5.39.11) rollup-plugin-visualizer: specifier: ^6.0.0 - version: 6.0.3(rollup@4.50.1) + version: 6.0.4(rollup@4.52.4) svelte: - specifier: 5.38.10 - version: 5.38.10 + specifier: 5.39.11 + version: 5.39.11 svelte-check: specifier: ^4.1.5 - version: 4.3.1(picomatch@4.0.3)(svelte@5.38.10)(typescript@5.9.2) + version: 4.3.2(picomatch@4.0.3)(svelte@5.39.11)(typescript@5.9.3) svelte-eslint-parser: - specifier: ^1.2.0 - version: 1.3.2(svelte@5.38.10) + specifier: ^1.3.3 + version: 1.3.3(svelte@5.39.11) tailwindcss: specifier: ^4.1.7 - version: 4.1.13 + version: 4.1.14 typescript: specifier: ^5.8.3 - version: 5.9.2 + version: 5.9.3 typescript-eslint: - specifier: ^8.28.0 - version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^8.45.0 + version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^7.1.2 - version: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + version: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) vitest: specifier: ^3.0.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@algolia/abtesting@1.6.0': + resolution: {integrity: sha512-c4M/Z/KWkEG+RHpZsWKDTTlApXu3fe4vlABNcpankWBhdMe4oPZ/r4JxEr2zKUP6K+BT66tnp8UbHmgOd/vvqQ==} + engines: {node: '>= 14.0.0'} + '@algolia/autocomplete-core@1.17.9': resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==} @@ -929,59 +930,59 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.29.0': - resolution: {integrity: sha512-AM/6LYMSTnZvAT5IarLEKjYWOdV+Fb+LVs8JRq88jn8HH6bpVUtjWdOZXqX1hJRXuCAY8SdQfb7F8uEiMNXdYQ==} + '@algolia/client-abtesting@5.40.0': + resolution: {integrity: sha512-qegVlgHtmiS8m9nEsuKUVhlw1FHsIshtt5nhNnA6EYz3g+tm9+xkVZZMzkrMLPP7kpoheHJZAwz2MYnHtwFa9A==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.29.0': - resolution: {integrity: sha512-La34HJh90l0waw3wl5zETO8TuukeUyjcXhmjYZL3CAPLggmKv74mobiGRIb+mmBENybiFDXf/BeKFLhuDYWMMQ==} + '@algolia/client-analytics@5.40.0': + resolution: {integrity: sha512-Dw2c+6KGkw7mucnnxPyyMsIGEY8+hqv6oB+viYB612OMM3l8aNaWToBZMnNvXsyP+fArwq7XGR+k3boPZyV53A==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.29.0': - resolution: {integrity: sha512-T0lzJH/JiCxQYtCcnWy7Jf1w/qjGDXTi2npyF9B9UsTvXB97GRC6icyfXxe21mhYvhQcaB1EQ/J2575FXxi2rA==} + '@algolia/client-common@5.40.0': + resolution: {integrity: sha512-dbE4+MJIDsTghG3hUYWBq7THhaAmqNqvW9g2vzwPf5edU4IRmuYpKtY3MMotes8/wdTasWG07XoaVhplJBlvdg==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.29.0': - resolution: {integrity: sha512-A39F1zmHY9aev0z4Rt3fTLcGN5AG1VsVUkVWy6yQG5BRDScktH+U5m3zXwThwniBTDV1HrPgiGHZeWb67GkR2Q==} + '@algolia/client-insights@5.40.0': + resolution: {integrity: sha512-SH6zlROyGUCDDWg71DlCnbbZ/zEHYPZC8k901EAaBVhvY43Ju8Wa6LAcMPC4tahcDBgkG2poBy8nJZXvwEWAlQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.29.0': - resolution: {integrity: sha512-ibxmh2wKKrzu5du02gp8CLpRMeo+b/75e4ORct98CT7mIxuYFXowULwCd6cMMkz/R0LpKXIbTUl15UL5soaiUQ==} + '@algolia/client-personalization@5.40.0': + resolution: {integrity: sha512-EgHjJEEf7CbUL9gJHI1ULmAtAFeym2cFNSAi1uwHelWgLPcnLjYW2opruPxigOV7NcetkGu+t2pcWOWmZFuvKQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.29.0': - resolution: {integrity: sha512-VZq4/AukOoJC2WSwF6J5sBtt+kImOoBwQc1nH3tgI+cxJBg7B77UsNC+jT6eP2dQCwGKBBRTmtPLUTDDnHpMgA==} + '@algolia/client-query-suggestions@5.40.0': + resolution: {integrity: sha512-HvE1jtCag95DR41tDh7cGwrMk4X0aQXPOBIhZRmsBPolMeqRJz0kvfVw8VCKvA1uuoAkjFfTG0X0IZED+rKXoA==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.29.0': - resolution: {integrity: sha512-cZ0Iq3OzFUPpgszzDr1G1aJV5UMIZ4VygJ2Az252q4Rdf5cQMhYEIKArWY/oUjMhQmosM8ygOovNq7gvA9CdCg==} + '@algolia/client-search@5.40.0': + resolution: {integrity: sha512-nlr/MMgoLNUHcfWC5Ns2ENrzKx9x51orPc6wJ8Ignv1DsrUmKm0LUih+Tj3J+kxYofzqQIQRU495d4xn3ozMbg==} engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - '@algolia/ingestion@1.29.0': - resolution: {integrity: sha512-scBXn0wO5tZCxmO6evfa7A3bGryfyOI3aoXqSQBj5SRvNYXaUlFWQ/iKI70gRe/82ICwE0ICXbHT/wIvxOW7vw==} + '@algolia/ingestion@1.40.0': + resolution: {integrity: sha512-OfHnhE+P0f+p3i90Kmshf9Epgesw5oPV1IEUOY4Mq1HV7cQk16gvklVN1EaY/T9sVavl+Vc3g4ojlfpIwZFA4g==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.29.0': - resolution: {integrity: sha512-FGWWG9jLFhsKB7YiDjM2dwQOYnWu//7Oxrb2vT96N7+s+hg1mdHHfHNRyEudWdxd4jkMhBjeqNA21VbTiOIPVg==} + '@algolia/monitoring@1.40.0': + resolution: {integrity: sha512-SWANV32PTKhBYvwKozeWP9HOnVabOixAuPdFFGoqtysTkkwutrtGI/rrh80tvG+BnQAmZX0vUmD/RqFZVfr/Yg==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.29.0': - resolution: {integrity: sha512-xte5+mpdfEARAu61KXa4ewpjchoZuJlAlvQb8ptK6hgHlBHDnYooy1bmOFpokaAICrq/H9HpoqNUX71n+3249A==} + '@algolia/recommend@5.40.0': + resolution: {integrity: sha512-1Qxy9I5bSb3mrhPk809DllMa561zl5hLsMR6YhIqNkqQ0OyXXQokvJ2zApSxvd39veRZZnhN+oGe+XNoNwLgkw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.29.0': - resolution: {integrity: sha512-og+7Em75aPHhahEUScq2HQ3J7ULN63Levtd87BYMpn6Im5d5cNhaC4QAUsXu6LWqxRPgh4G+i+wIb6tVhDhg2A==} + '@algolia/requester-browser-xhr@5.40.0': + resolution: {integrity: sha512-MGt94rdHfkrVjfN/KwUfWcnaeohYbWGINrPs96f5J7ZyRYpVLF+VtPQ2FmcddFvK4gnKXSu8BAi81hiIhUpm3w==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.29.0': - resolution: {integrity: sha512-JCxapz7neAy8hT/nQpCvOrI5JO8VyQ1kPvBiaXWNC1prVq0UMYHEL52o1BsPvtXfdQ7BVq19OIq6TjOI06mV/w==} + '@algolia/requester-fetch@5.40.0': + resolution: {integrity: sha512-wXQ05JZZ10Dr642QVAkAZ4ZZlU+lh5r6dIBGmm9WElz+1EaQ6BNYtEOTV6pkXuFYsZpeJA89JpDOiwBOP9j24w==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.29.0': - resolution: {integrity: sha512-lVBD81RBW5VTdEYgnzCz7Pf9j2H44aymCP+/eHGJu4vhU+1O8aKf3TVBgbQr5UM6xoe8IkR/B112XY6YIG2vtg==} + '@algolia/requester-node-http@5.40.0': + resolution: {integrity: sha512-5qCRoySnzpbQVg2IPLGFCm4LF75pToxI5tdjOYgUMNL/um91aJ4dH3SVdBEuFlVsalxl8mh3bWPgkUmv6NpJiQ==} engines: {node: '>= 14.0.0'} '@alloc/quick-lru@5.2.0': @@ -1001,6 +1002,15 @@ packages: chokidar: optional: true + '@angular-devkit/core@19.2.17': + resolution: {integrity: sha512-Ah008x2RJkd0F+NLKqIpA34/vUGwjlprRCkvddjDopAWRzYn6xCkz1Tqwuhn0nR1Dy47wTLKYD999TYl5ONOAQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^4.0.0 + peerDependenciesMeta: + chokidar: + optional: true + '@angular-devkit/schematics-cli@19.2.15': resolution: {integrity: sha512-1ESFmFGMpGQmalDB3t2EtmWDGv6gOFYBMxmHO2f1KI/UDl8UmZnCGL4mD3EWo8Hv0YIsZ9wOH9Q7ZHNYjeSpzg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1010,6 +1020,10 @@ packages: resolution: {integrity: sha512-kNOJ+3vekJJCQKWihNmxBkarJzNW09kP5a9E1SRNiQVNOUEeSwcRR0qYotM65nx821gNzjjhJXnAZ8OazWldrg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/schematics@19.2.17': + resolution: {integrity: sha512-ADfbaBsrG8mBF6Mfs+crKA/2ykB8AJI50Cv9tKmZfwcUcyAdmTr+vVvhsBCfvUAEokigSsgqgpYxfkJVxhJYeg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} @@ -1026,103 +1040,103 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-sesv2@3.890.0': - resolution: {integrity: sha512-AM9Lt4QkNet8xKgCwJxfkyqlorwG9S+tvtpSfHYCVq0j2Z6PbkDaUBnvwjGOMBV7Um5IzZ7yhvQXrBg7omZciQ==} + '@aws-sdk/client-sesv2@3.907.0': + resolution: {integrity: sha512-r0NV1gxN3OO5l3gnxdQPS+STQHh+q9CRoEf9EG1273nOb1TwzrOIE34A0LO0Ow88XL5amgx/e9MdfuopJH9j+g==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.890.0': - resolution: {integrity: sha512-vefYNwh/K5V5YiJpFJfoMPNqsoiRTqD7ZnkvR0cjJdwhOIwFnSKN1vz0OMjySTQmVMcG4JKGVul82ou7ErtOhQ==} + '@aws-sdk/client-sso@3.907.0': + resolution: {integrity: sha512-ANuu0duNTcQHv0g5YrEuWImT8o9t6li3A+MtAaKxIbTA3eFQnl6xHDxyrbsrU19FtKPg3CWhvfY04j6DaDvR8g==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.890.0': - resolution: {integrity: sha512-CT+yjhytHdyKvV3Nh/fqBjnZ8+UiQZVz4NMm4LrPATgVSOdfygXHqrWxrPTVgiBtuJWkotg06DF7+pTd5ekLBw==} + '@aws-sdk/core@3.907.0': + resolution: {integrity: sha512-vuIHL8qUcA5oNi7IWSZauCMaXstWTcSsnK1iHcvg92ddGDo1LMd2kQNo0G9UANa8vOfc908+8xKO40gfL8+M7w==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.890.0': - resolution: {integrity: sha512-BtsUa2y0Rs8phmB2ScZ5RuPqZVmxJJXjGfeiXctmLFTxTwoayIK1DdNzOWx6SRMPVc3s2RBGN4vO7T1TwN+ajA==} + '@aws-sdk/credential-provider-env@3.907.0': + resolution: {integrity: sha512-orqT6djon57y09Ci5q0kezisrEvr78Z+7WvZbq0ZC0Ncul4RgJfCmhcgmzNPaWA18NEI0wGytaxYh3YFE7kIBQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.890.0': - resolution: {integrity: sha512-0sru3LVwsuGYyzbD90EC/d5HnCZ9PL4O9BA2LYT6b9XceC005Oj86uzE47LXb+mDhTAt3T6ZO0+ZcVQe0DDi8w==} + '@aws-sdk/credential-provider-http@3.907.0': + resolution: {integrity: sha512-CKG/0hT4o8K2aQKOe+xwGP3keSNOyryhZNmKuHPuMRVlsJfO6wNxlu37HcUPzihJ+S2pOmTVGUbeVMCxJVUJmw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.890.0': - resolution: {integrity: sha512-Mxv7ByftHKH7dE6YXu9gQ6ODXwO1iSO32t8tBrZLS3g8K1knWADIqDFv3yErQtJ8hp27IDxbAbVH/1RQdSkmhA==} + '@aws-sdk/credential-provider-ini@3.907.0': + resolution: {integrity: sha512-Clz1YdXrgQ5WIlcRE7odHbgM/INBxy49EA3csDITafHaDPtPRL39zkQtB5+Lwrrt/Gg0xBlyTbvP5Snan+0lqA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.890.0': - resolution: {integrity: sha512-zbPz3mUtaBdch0KoH8/LouRDcYSzyT2ecyCOo5OAFVil7AxT1jvsn4vX78FlnSVpZ4mLuHY8pHTVGi235XiyBA==} + '@aws-sdk/credential-provider-node@3.907.0': + resolution: {integrity: sha512-w6Hhc4rV/CFaBliIh9Ph/T59xdGcTF6WmPGzzpykjl68+jcJyUem82hbTVIGaMCpvhx8VRqEr5AEXCXdbDbojw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.890.0': - resolution: {integrity: sha512-dWZ54TI1Q+UerF5YOqGiCzY+x2YfHsSQvkyM3T4QDNTJpb/zjiVv327VbSOULOlI7gHKWY/G3tMz0D9nWI7YbA==} + '@aws-sdk/credential-provider-process@3.907.0': + resolution: {integrity: sha512-MBWpZqZtKkpM/LOGD5quXvlHJJN8YIP4GKo2ad8y1fEEVydwI8cggyXuauMPV7GllW8d0u3kQUs+4rxm1VaS4w==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.890.0': - resolution: {integrity: sha512-ajYCZ6f2+98w8zG/IXcQ+NhWYoI5qPUDovw+gMqMWX/jL1cmZ9PFAwj2Vyq9cbjum5RNWwPLArWytTCgJex4AQ==} + '@aws-sdk/credential-provider-sso@3.907.0': + resolution: {integrity: sha512-F8I7xwIt0mhdg8NrC70HDmhDRx3ValBvmWH3YkWsjZltWIFozhQCCDISRPhanMkXVhSFmZY0FJ5Lo+B/SZvAAA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.890.0': - resolution: {integrity: sha512-qZ2Mx7BeYR1s0F/H6wePI0MAmkFswmBgrpgMCOt2S4b2IpQPnUa2JbxY3GwW2WqX3nV0KjPW08ctSLMmlq/tKA==} + '@aws-sdk/credential-provider-web-identity@3.907.0': + resolution: {integrity: sha512-1CmRE/M8LJ/joXm5vUsKkQS35MoWA4xvUH9J1jyCuL3J9A8M+bnTe6ER8fnNLgmEs6ikdmYEIdfijPpBjBpFig==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-host-header@3.887.0': - resolution: {integrity: sha512-ulzqXv6NNqdu/kr0sgBYupWmahISHY+azpJidtK6ZwQIC+vBUk9NdZeqQpy7KVhIk2xd4+5Oq9rxapPwPI21CA==} + '@aws-sdk/middleware-host-header@3.901.0': + resolution: {integrity: sha512-yWX7GvRmqBtbNnUW7qbre3GvZmyYwU0WHefpZzDTYDoNgatuYq6LgUIQ+z5C04/kCRoFkAFrHag8a3BXqFzq5A==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-logger@3.887.0': - resolution: {integrity: sha512-YbbgLI6jKp2qSoAcHnXrQ5jcuc5EYAmGLVFgMVdk8dfCfJLfGGSaOLxF4CXC7QYhO50s+mPPkhBYejCik02Kug==} + '@aws-sdk/middleware-logger@3.901.0': + resolution: {integrity: sha512-UoHebjE7el/tfRo8/CQTj91oNUm+5Heus5/a4ECdmWaSCHCS/hXTsU3PTTHAY67oAQR8wBLFPfp3mMvXjB+L2A==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-recursion-detection@3.887.0': - resolution: {integrity: sha512-tjrUXFtQnFLo+qwMveq5faxP5MQakoLArXtqieHphSqZTXm21wDJM73hgT4/PQQGTwgYjDKqnqsE1hvk0hcfDw==} + '@aws-sdk/middleware-recursion-detection@3.901.0': + resolution: {integrity: sha512-Wd2t8qa/4OL0v/oDpCHHYkgsXJr8/ttCxrvCKAt0H1zZe2LlRhY9gpDVKqdertfHrHDj786fOvEQA28G1L75Dg==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.890.0': - resolution: {integrity: sha512-58P1lrE606zpp29xH9Keh3j2BWfa2ciGBtygJTpulRMlqPL3U1gFfU2g5nDYJbjKgRtCgNIBqfmtkL4eikCb9w==} + '@aws-sdk/middleware-sdk-s3@3.907.0': + resolution: {integrity: sha512-8VVxcZPmJOKI8P08v5ARvoXbLV41abpAIIkt388fp/lwtfzbnXt6sWhhAk/pHgvCR1NnuvkbGuXGVcux59648Q==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.890.0': - resolution: {integrity: sha512-x4+gLrOFGN7PnfxCaQbs3QEF8bMQE4CVxcOp066UEJqr2Pn4yB12Q3O+YntOtESK5NcTxIh7JlhGss95EHzNng==} + '@aws-sdk/middleware-user-agent@3.907.0': + resolution: {integrity: sha512-j/h3lk4X6AAXvusx/h8rr0zlo7G0l0quZM4k4rS/9jzatI53HCsrMaiGu6YXbxuVqtfMqv0MAj0MVhaMsAIs4A==} engines: {node: '>=18.0.0'} - '@aws-sdk/nested-clients@3.890.0': - resolution: {integrity: sha512-D5qVNd+qlqdL8duJShzffAqPllGRA4tG7n/GEpL13eNfHChPvGkkUFBMrxSgCAETaTna13G6kq+dMO+SAdbm1A==} + '@aws-sdk/nested-clients@3.907.0': + resolution: {integrity: sha512-LycXsdC5sMIc+Az5z1Mo2eYShr2kLo2gUgx7Rja3udG0GdqgdR/NNJ6ArmDCeKk2O5RFS5EgEg89bT55ecl5Uw==} engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.890.0': - resolution: {integrity: sha512-VfdT+tkF9groRYNzKvQCsCGDbOQdeBdzyB1d6hWiq22u13UafMIoskJ1ec0i0H1X29oT6mjTitfnvPq1UiKwzQ==} + '@aws-sdk/region-config-resolver@3.901.0': + resolution: {integrity: sha512-7F0N888qVLHo4CSQOsnkZ4QAp8uHLKJ4v3u09Ly5k4AEStrSlFpckTPyUx6elwGL+fxGjNE2aakK8vEgzzCV0A==} engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.890.0': - resolution: {integrity: sha512-il8kb2/wDLXhemN3p7v4MvbvqoMuo7Ug3ihuIUIhPtSVjcnn+BISJU0S+5YTl8TXf6qxML9VrfxL0pmuhO3BsA==} + '@aws-sdk/signature-v4-multi-region@3.907.0': + resolution: {integrity: sha512-f5XHRu6MTbjB/ud5RwBZzntYMgThRaDur5PJRZ1CaYAL8gZLNuEpJLzUA7o3queeSfE9JboO+cm1gZnOfnYJkg==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.890.0': - resolution: {integrity: sha512-+pK/0iQEpPmnztbAw0NNmb+B5pPy8VLu+Ab4SJLgVp41RE9NO13VQtrzUbh61TTAVMrzqWlLQ2qmAl2Fk4VNgw==} + '@aws-sdk/token-providers@3.907.0': + resolution: {integrity: sha512-HjPbNft1Ad8X1lHQG21QXy9pitdXA+OKH6NtcXg57A31002tM+SkyUmU6ty1jbsRBEScxziIVe5doI1NmkHheA==} engines: {node: '>=18.0.0'} - '@aws-sdk/types@3.887.0': - resolution: {integrity: sha512-fmTEJpUhsPsovQ12vZSpVTEP/IaRoJAMBGQXlQNjtCpkBp6Iq3KQDa/HDaPINE+3xxo6XvTdtibsNOd5zJLV9A==} + '@aws-sdk/types@3.901.0': + resolution: {integrity: sha512-FfEM25hLEs4LoXsLXQ/q6X6L4JmKkKkbVFpKD4mwfVHtRVQG6QxJiCPcrkcPISquiy6esbwK2eh64TWbiD60cg==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-arn-parser@3.873.0': - resolution: {integrity: sha512-qag+VTqnJWDn8zTAXX4wiVioa0hZDQMtbZcGRERVnLar4/3/VIKBhxX2XibNQXFu1ufgcRn4YntT/XEPecFWcg==} + '@aws-sdk/util-arn-parser@3.893.0': + resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.890.0': - resolution: {integrity: sha512-nJ8v1x9ZQKzMRK4dS4oefOMIHqb6cguctTcx1RB9iTaFOR5pP7bvq+D4mvNZ6vBxiHg1dQGBUUgl5XJmdR7atQ==} + '@aws-sdk/util-endpoints@3.901.0': + resolution: {integrity: sha512-5nZP3hGA8FHEtKvEQf4Aww5QZOkjLW1Z+NixSd+0XKfHvA39Ah5sZboScjLx0C9kti/K3OGW1RCx5K9Zc3bZqg==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-locate-window@3.873.0': - resolution: {integrity: sha512-xcVhZF6svjM5Rj89T1WzkjQmrTF6dpR2UvIHPMTnSZoNe6CixejPZ6f0JJ2kAhO8H+dUHwNBlsUgOTIKiK/Syg==} + '@aws-sdk/util-locate-window@3.893.0': + resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-user-agent-browser@3.887.0': - resolution: {integrity: sha512-X71UmVsYc6ZTH4KU6hA5urOzYowSXc3qvroagJNLJYU1ilgZ529lP4J9XOYfEvTXkLR1hPFSRxa43SrwgelMjA==} + '@aws-sdk/util-user-agent-browser@3.907.0': + resolution: {integrity: sha512-Hus/2YCQmtCEfr4Ls88d07Q99Ex59uvtktiPTV963Q7w7LHuIT/JBjrbwNxtSm2KlJR9PHNdqxwN+fSuNsMGMQ==} - '@aws-sdk/util-user-agent-node@3.890.0': - resolution: {integrity: sha512-s85NkCxKoAlUvx7UP7OelxLqwTi27Tps9/Q+4N+9rEUjThxEnDsqJSStJ1XiYhddz1xc/vxMvPjYN0qX6EKPtA==} + '@aws-sdk/util-user-agent-node@3.907.0': + resolution: {integrity: sha512-r2Bc8VCU6ymkuem+QWT6oDdGvaYnK0YHg77SGUF47k+JsztSt1kZR0Y0q8jRH97bOsXldThyEcYsNbqDERa1Uw==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1130,8 +1144,8 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.887.0': - resolution: {integrity: sha512-lMwgWK1kNgUhHGfBvO/5uLe7TKhycwOn3eRCqsKPT9aPCx/HWuTlpcQp8oW2pCRGLS7qzcxqpQulcD+bbUL7XQ==} + '@aws-sdk/xml-builder@3.901.0': + resolution: {integrity: sha512-pxFCkuAP7Q94wMTNPAwi6hEtNrp/BdFf+HOrIEeFQsk4EoOmpKY3I6S+u6A9Wg295J80Kh74LqDWM22ux3z6Aw==} engines: {node: '>=18.0.0'} '@aws/lambda-invoke-store@0.0.1': @@ -1998,120 +2012,120 @@ packages: search-insights: optional: true - '@docusaurus/babel@3.8.1': - resolution: {integrity: sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==} - engines: {node: '>=18.0'} + '@docusaurus/babel@3.9.1': + resolution: {integrity: sha512-/uoi3oG+wvbVWNBRfPrzrEslOSeLxrQEyWMywK51TLDFTANqIRivzkMusudh5bdDty8fXzCYUT+tg5t697jYqg==} + engines: {node: '>=20.0'} - '@docusaurus/bundler@3.8.1': - resolution: {integrity: sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==} - engines: {node: '>=18.0'} + '@docusaurus/bundler@3.9.1': + resolution: {integrity: sha512-E1c9DgNmAz4NqbNtiJVp4UgjLtr8O01IgtXD/NDQ4PZaK8895cMiTOgb3k7mN0qX8A3lb8vqyrPJ842+yMpuUg==} + engines: {node: '>=20.0'} peerDependencies: '@docusaurus/faster': '*' peerDependenciesMeta: '@docusaurus/faster': optional: true - '@docusaurus/core@3.8.1': - resolution: {integrity: sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==} - engines: {node: '>=18.0'} + '@docusaurus/core@3.9.1': + resolution: {integrity: sha512-FWDk1LIGD5UR5Zmm9rCrXRoxZUgbwuP6FBA7rc50DVfzqDOMkeMe3NyJhOsA2dF0zBE3VbHEIMmTjKwTZJwbaA==} + engines: {node: '>=20.0'} hasBin: true peerDependencies: '@mdx-js/react': ^3.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/cssnano-preset@3.8.1': - resolution: {integrity: sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==} - engines: {node: '>=18.0'} + '@docusaurus/cssnano-preset@3.9.1': + resolution: {integrity: sha512-2y7+s7RWQMqBg+9ejeKwvZs7Bdw/hHIVJIodwMXbs2kr+S48AhcmAfdOh6Cwm0unJb0hJUshN0ROwRoQMwl3xg==} + engines: {node: '>=20.0'} - '@docusaurus/logger@3.8.1': - resolution: {integrity: sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==} - engines: {node: '>=18.0'} + '@docusaurus/logger@3.9.1': + resolution: {integrity: sha512-C9iFzXwHzwvGlisE4bZx+XQE0JIqlGAYAd5LzpR7fEDgjctu7yL8bE5U4nTNywXKHURDzMt4RJK8V6+stFHVkA==} + engines: {node: '>=20.0'} - '@docusaurus/mdx-loader@3.8.1': - resolution: {integrity: sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==} - engines: {node: '>=18.0'} + '@docusaurus/mdx-loader@3.9.1': + resolution: {integrity: sha512-/1PY8lqry8jCt0qZddJSpc0U2sH6XC27kVJZfpA7o2TiQ3mdBQyH5AVbj/B2m682B1ounE+XjI0LdpOkAQLPoA==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/module-type-aliases@3.8.1': - resolution: {integrity: sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==} + '@docusaurus/module-type-aliases@3.9.1': + resolution: {integrity: sha512-YBce3GbJGGcMbJTyHcnEOMvdXqg41pa5HsrMCGA5Rm4z0h0tHS6YtEldj0mlfQRhCG7Y0VD66t2tb87Aom+11g==} peerDependencies: react: '*' react-dom: '*' - '@docusaurus/plugin-content-blog@3.8.1': - resolution: {integrity: sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-content-blog@3.9.1': + resolution: {integrity: sha512-vT6kIimpJLWvW9iuWzH4u7VpTdsGlmn4yfyhq0/Kb1h4kf9uVouGsTmrD7WgtYBUG1P+TSmQzUUQa+ALBSRTig==} + engines: {node: '>=20.0'} peerDependencies: '@docusaurus/plugin-content-docs': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-content-docs@3.8.1': - resolution: {integrity: sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-content-docs@3.9.1': + resolution: {integrity: sha512-DyLk9BIA6I9gPIuia8XIL+XIEbNnExam6AHzRsfrEq4zJr7k/DsWW7oi4aJMepDnL7jMRhpVcdsCxdjb0/A9xg==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-content-pages@3.8.1': - resolution: {integrity: sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-content-pages@3.9.1': + resolution: {integrity: sha512-/1wFzRnXYASI+Nv9ck9IVPIMw0O5BGQ8ZVhDzEwhkL+tl44ycvSnY6PIe6rW2HLxsw61Z3WFwAiU8+xMMtMZpg==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-css-cascade-layers@3.8.1': - resolution: {integrity: sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-css-cascade-layers@3.9.1': + resolution: {integrity: sha512-/QyW2gRCk/XE3ttCK/ERIgle8KJ024dBNKMu6U5SmpJvuT2il1n5jR/48Pp/9wEwut8WVml4imNm6X8JsL5A0Q==} + engines: {node: '>=20.0'} - '@docusaurus/plugin-debug@3.8.1': - resolution: {integrity: sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-debug@3.9.1': + resolution: {integrity: sha512-qPeAuk0LccC251d7jg2MRhNI+o7niyqa924oEM/AxnZJvIpMa596aAxkRImiAqNN6+gtLE1Hkrz/RHUH2HDGsA==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-analytics@3.8.1': - resolution: {integrity: sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-google-analytics@3.9.1': + resolution: {integrity: sha512-k4Qq2HphqOrIU/CevGPdEO1yJnWUI8m0zOJsYt5NfMJwNsIn/gDD6gv/DKD+hxHndQT5pacsfBd4BWHZVNVroQ==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-gtag@3.8.1': - resolution: {integrity: sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-google-gtag@3.9.1': + resolution: {integrity: sha512-n9BURBiQyJKI/Ecz35IUjXYwXcgNCSq7/eA07+ZYcDiSyH2p/EjPf8q/QcZG3CyEJPZ/SzGkDHePfcVPahY4Gg==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-google-tag-manager@3.8.1': - resolution: {integrity: sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-google-tag-manager@3.9.1': + resolution: {integrity: sha512-rZAQZ25ZuXaThBajxzLjXieTDUCMmBzfAA6ThElQ3o7Q+LEpOjCIrwGFau0KLY9HeG6x91+FwwsAM8zeApYDrg==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-sitemap@3.8.1': - resolution: {integrity: sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-sitemap@3.9.1': + resolution: {integrity: sha512-k/bf5cXDxAJUYTzqatgFJwmZsLUbIgl6S8AdZMKGG2Mv2wcOHt+EQNN9qPyWZ5/9cFj+Q8f8DN+KQheBMYLong==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/plugin-svgr@3.8.1': - resolution: {integrity: sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==} - engines: {node: '>=18.0'} + '@docusaurus/plugin-svgr@3.9.1': + resolution: {integrity: sha512-TeZOXT2PSdTNR1OpDJMkYqFyX7MMhbd4t16hQByXksgZQCXNyw3Dio+KaDJ2Nj+LA4WkOvsk45bWgYG5MAaXSQ==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/preset-classic@3.8.1': - resolution: {integrity: sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==} - engines: {node: '>=18.0'} + '@docusaurus/preset-classic@3.9.1': + resolution: {integrity: sha512-ZHga2xsxxsyd0dN1BpLj8S889Eu9eMBuj2suqxdw/vaaXu/FjJ8KEGbcaeo6nHPo8VQcBBnPEdkBtSDm2TfMNw==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 @@ -2121,52 +2135,52 @@ packages: peerDependencies: react: '*' - '@docusaurus/theme-classic@3.8.1': - resolution: {integrity: sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==} - engines: {node: '>=18.0'} + '@docusaurus/theme-classic@3.9.1': + resolution: {integrity: sha512-LrAIu/mQ04nG6s1cssC0TMmICD8twFIIn/hJ5Pd9uIPQvtKnyAKEn12RefopAul5KfMo9kixPaqogV5jIJr26w==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-common@3.8.1': - resolution: {integrity: sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==} - engines: {node: '>=18.0'} + '@docusaurus/theme-common@3.9.1': + resolution: {integrity: sha512-j9adi961F+6Ps9d0jcb5BokMcbjXAAJqKkV43eo8nh4YgmDj7KUNDX4EnOh/MjTQeO06oPY5cxp3yUXdW/8Ggw==} + engines: {node: '>=20.0'} peerDependencies: '@docusaurus/plugin-content-docs': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-search-algolia@3.8.1': - resolution: {integrity: sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==} - engines: {node: '>=18.0'} + '@docusaurus/theme-search-algolia@3.9.1': + resolution: {integrity: sha512-WjM28bzlgfT6nHlEJemkwyGVpvGsZWPireV/w+wZ1Uo64xCZ8lNOb4xwQRukDaLSed3oPBN0gSnu06l5VuCXHg==} + engines: {node: '>=20.0'} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/theme-translations@3.8.1': - resolution: {integrity: sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==} - engines: {node: '>=18.0'} + '@docusaurus/theme-translations@3.9.1': + resolution: {integrity: sha512-mUQd49BSGKTiM6vP9+JFgRJL28lMIN3PUvXjF3rzuOHMByUZUBNwCt26Z23GkKiSIOrRkjKoaBNTipR/MHdYSQ==} + engines: {node: '>=20.0'} - '@docusaurus/tsconfig@3.8.1': - resolution: {integrity: sha512-XBWCcqhRHhkhfolnSolNL+N7gj3HVE3CoZVqnVjfsMzCoOsuQw2iCLxVVHtO+rePUUfouVZHURDgmqIySsF66A==} + '@docusaurus/tsconfig@3.9.1': + resolution: {integrity: sha512-stdzM1dNDgRO0OvxeznXlE3N1igUoeHPNJjiKqyffLizgpVgNXJBAWeG6fuoYiCH4udGUBqy2dyM+1+kG2/UPQ==} - '@docusaurus/types@3.8.1': - resolution: {integrity: sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==} + '@docusaurus/types@3.9.1': + resolution: {integrity: sha512-ElekJ29sk39s5LTEZMByY1c2oH9FMtw7KbWFU3BtuQ1TytfIK39HhUivDEJvm5KCLyEnnfUZlvSNDXeyk0vzAA==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@docusaurus/utils-common@3.8.1': - resolution: {integrity: sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==} - engines: {node: '>=18.0'} + '@docusaurus/utils-common@3.9.1': + resolution: {integrity: sha512-4M1u5Q8Zn2CYL2TJ864M51FV4YlxyGyfC3x+7CLuR6xsyTVNBNU4QMcPgsTHRS9J2+X6Lq7MyH6hiWXyi/sXUQ==} + engines: {node: '>=20.0'} - '@docusaurus/utils-validation@3.8.1': - resolution: {integrity: sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==} - engines: {node: '>=18.0'} + '@docusaurus/utils-validation@3.9.1': + resolution: {integrity: sha512-5bzab5si3E1udrlZuVGR17857Lfwe8iFPoy5AvMP9PXqDfoyIKT7gDQgAmxdRDMurgHaJlyhXEHHdzDKkOxxZQ==} + engines: {node: '>=20.0'} - '@docusaurus/utils@3.8.1': - resolution: {integrity: sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==} - engines: {node: '>=18.0'} + '@docusaurus/utils@3.9.1': + resolution: {integrity: sha512-YAL4yhhWLl9DXuf5MVig260a6INz4MehrBGFU/CZu8yXmRiYEuQvRFWh9ZsjfAOyaG7za1MNmBVZ4VVAi/CiJA==} + engines: {node: '>=20.0'} '@emnapi/runtime@1.5.0': resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} @@ -2177,8 +2191,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.9': - resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} + '@esbuild/aix-ppc64@0.25.10': + resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -2189,8 +2203,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.9': - resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + '@esbuild/android-arm64@0.25.10': + resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -2201,8 +2215,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.9': - resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + '@esbuild/android-arm@0.25.10': + resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -2213,8 +2227,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.9': - resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + '@esbuild/android-x64@0.25.10': + resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -2225,8 +2239,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.9': - resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + '@esbuild/darwin-arm64@0.25.10': + resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -2237,8 +2251,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.9': - resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + '@esbuild/darwin-x64@0.25.10': + resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2249,8 +2263,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.9': - resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + '@esbuild/freebsd-arm64@0.25.10': + resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2261,8 +2275,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.9': - resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + '@esbuild/freebsd-x64@0.25.10': + resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2273,8 +2287,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.9': - resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + '@esbuild/linux-arm64@0.25.10': + resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2285,8 +2299,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.9': - resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + '@esbuild/linux-arm@0.25.10': + resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2297,8 +2311,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.9': - resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + '@esbuild/linux-ia32@0.25.10': + resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2309,8 +2323,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.9': - resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + '@esbuild/linux-loong64@0.25.10': + resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2321,8 +2335,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.9': - resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + '@esbuild/linux-mips64el@0.25.10': + resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2333,8 +2347,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.9': - resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + '@esbuild/linux-ppc64@0.25.10': + resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2345,8 +2359,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.9': - resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + '@esbuild/linux-riscv64@0.25.10': + resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -2357,8 +2371,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.9': - resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + '@esbuild/linux-s390x@0.25.10': + resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -2369,14 +2383,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.9': - resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + '@esbuild/linux-x64@0.25.10': + resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.9': - resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + '@esbuild/netbsd-arm64@0.25.10': + resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -2387,14 +2401,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.9': - resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + '@esbuild/netbsd-x64@0.25.10': + resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.9': - resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + '@esbuild/openbsd-arm64@0.25.10': + resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -2405,14 +2419,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.9': - resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + '@esbuild/openbsd-x64@0.25.10': + resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.9': - resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} + '@esbuild/openharmony-arm64@0.25.10': + resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2423,8 +2437,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.9': - resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + '@esbuild/sunos-x64@0.25.10': + resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2435,8 +2449,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.9': - resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + '@esbuild/win32-arm64@0.25.10': + resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2447,8 +2461,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.9': - resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + '@esbuild/win32-ia32@0.25.10': + resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2459,8 +2473,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.9': - resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + '@esbuild/win32-x64@0.25.10': + resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2479,20 +2493,24 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.1': - resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} + '@eslint/config-helpers@0.4.0': + resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.15.2': resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.35.0': - resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} + '@eslint/js@9.37.0': + resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -2503,6 +2521,10 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.4.0': + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@faker-js/faker@10.0.0': resolution: {integrity: sha512-UollFEUkVXutsaP+Vndjxar40Gs5JL2HeLcl8xO1QAjJgOdhc3OmBFWyEylS+RddWaaBiAzH+5/17PLQJwDiLw==} engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} @@ -2521,29 +2543,29 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@formatjs/ecma402-abstract@2.3.4': - resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==} + '@formatjs/ecma402-abstract@2.3.5': + resolution: {integrity: sha512-1HTESOq1IUa23g1lFZEGIXsfZKZOwWmB9RROwGn+xariiQnd++wwTMvlRAbZ8wtXRHFUamJPxsKcxpSzeCvFWQ==} '@formatjs/fast-memoize@2.2.7': resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} - '@formatjs/icu-messageformat-parser@2.11.2': - resolution: {integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==} + '@formatjs/icu-messageformat-parser@2.11.3': + resolution: {integrity: sha512-H/KfWSosaiDiOaW4nHe1Fn4Cgzm+oFQ8giTmB5RJzTBNSMmd+j2NVrvvZHAmlxJHcuOelzKBLjQ2EDcyH4NSWw==} - '@formatjs/icu-skeleton-parser@1.8.14': - resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==} + '@formatjs/icu-skeleton-parser@1.8.15': + resolution: {integrity: sha512-qNrKxWJmnWxin5U4A4Evy7C0rgRiNw3IqXu9OGuT31B8lDxBGl+OgT8kcq0ZVKK0gqA4l4SQB9x+SFAvLT5hcQ==} - '@formatjs/intl-localematcher@0.6.1': - resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} + '@formatjs/intl-localematcher@0.6.2': + resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} - '@golevelup/nestjs-discovery@4.0.3': - resolution: {integrity: sha512-8w3CsXHN7+7Sn2i419Eal1Iw/kOjAd6Kb55M/ZqKBBwACCMn4WiEuzssC71LpBMI1090CiDxuelfPRwwIrQK+A==} + '@golevelup/nestjs-discovery@5.0.0': + resolution: {integrity: sha512-NaIWLCLI+XvneUK05LH2idHLmLNITYT88YnpOuUQmllKtiJNIS3woSt7QXrMZ5k3qUWuZpehEVz1JtlX4I1KyA==} peerDependencies: - '@nestjs/common': ^10.x || ^11.0.0 - '@nestjs/core': ^10.x || ^11.0.0 + '@nestjs/common': ^11.0.20 + '@nestjs/core': ^11.0.20 - '@grpc/grpc-js@1.13.4': - resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + '@grpc/grpc-js@1.14.0': + resolution: {integrity: sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==} engines: {node: '>=12.10.0'} '@grpc/proto-loader@0.7.15': @@ -2551,6 +2573,11 @@ packages: engines: {node: '>=6'} hasBin: true + '@grpc/proto-loader@0.8.0': + resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} + engines: {node: '>=6'} + hasBin: true + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -2573,130 +2600,134 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@img/sharp-darwin-arm64@0.34.3': - resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.4': + resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.3': - resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} + '@img/sharp-darwin-x64@0.34.4': + resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.0': - resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} + '@img/sharp-libvips-darwin-arm64@1.2.3': + resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.0': - resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} + '@img/sharp-libvips-darwin-x64@1.2.3': + resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.0': - resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} + '@img/sharp-libvips-linux-arm64@1.2.3': + resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.2.0': - resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} + '@img/sharp-libvips-linux-arm@1.2.3': + resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.2.0': - resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} + '@img/sharp-libvips-linux-ppc64@1.2.3': + resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.0': - resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} + '@img/sharp-libvips-linux-s390x@1.2.3': + resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.2.0': - resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} + '@img/sharp-libvips-linux-x64@1.2.3': + resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.2.0': - resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.2.0': - resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} + '@img/sharp-libvips-linuxmusl-x64@1.2.3': + resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.3': - resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} + '@img/sharp-linux-arm64@0.34.4': + resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.3': - resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} + '@img/sharp-linux-arm@0.34.4': + resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-ppc64@0.34.3': - resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} + '@img/sharp-linux-ppc64@0.34.4': + resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - '@img/sharp-linux-s390x@0.34.3': - resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} + '@img/sharp-linux-s390x@0.34.4': + resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.3': - resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} + '@img/sharp-linux-x64@0.34.4': + resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.3': - resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} + '@img/sharp-linuxmusl-arm64@0.34.4': + resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.3': - resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} + '@img/sharp-linuxmusl-x64@0.34.4': + resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.3': - resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} + '@img/sharp-wasm32@0.34.4': + resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.3': - resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} + '@img/sharp-win32-arm64@0.34.4': + resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.3': - resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} + '@img/sharp-win32-ia32@0.34.4': + resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.3': - resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} + '@img/sharp-win32-x64@0.34.4': + resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - '@immich/ui@0.29.0': - resolution: {integrity: sha512-An9cf1L4nMO6+C1Tkktd+qjGmZvyGz/Un33cGsKQa2I7IdZHd67KbbC2v3wN3bQMiTjxtFJ8YR9EONohJ8jDtQ==} + '@immich/ui@0.34.2': + resolution: {integrity: sha512-tWjEV1prSZ9VLes69Ha9jnnZj6tbv/9+PdQjsK+5zK7sQok/l7kyzAobj5z4XRD11XtGk/cAqi/ZOlqRWvZilA==} peerDependencies: svelte: ^5.0.0 @@ -2842,8 +2873,8 @@ packages: '@internationalized/date@3.8.2': resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==} - '@ioredis/commands@1.3.0': - resolution: {integrity: sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==} + '@ioredis/commands@1.4.0': + resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==} '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} @@ -2889,12 +2920,48 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.30': - resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/buffers@1.2.0': + resolution: {integrity: sha512-6RX+W5a+ZUY/c/7J5s5jK9UinLfJo5oWKh84fb4X0yK2q4WXEWUWZWuEMjvCb1YNUQhEAhUfr5scEGOH7jC4YQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/codegen@1.0.0': + resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.20.0': + resolution: {integrity: sha512-adcXFVorSQULtT4XDL0giRLr2EVGIcyWm6eQKZWTrRA4EEydGOY8QVQtL0PaITQpUyu+lOd/QOicw6vdy1v8QQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pointer@1.0.2': + resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.9.0': + resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@koa/cors@5.0.0': resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} engines: {node: '>= 14.0.0'} @@ -2966,8 +3033,8 @@ packages: resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} engines: {node: '>=6.0.0'} - '@maplibre/maplibre-gl-style-spec@23.3.0': - resolution: {integrity: sha512-IGJtuBbaGzOUgODdBRg66p8stnwj9iDXkgbYKoYcNiiQmaez5WVRfXm4b03MCDwmZyX93csbfHFWEJJYHnn5oA==} + '@maplibre/maplibre-gl-style-spec@24.2.0': + resolution: {integrity: sha512-cE80g83fRcBbZbQC70siOUxUK6YJ/5ZkClDZbmm+hzrUbv+J6yntkMmcpdz9DbOrWOM7FHKR5rruc6Q/hWx5cA==} hasBin: true '@maplibre/vt-pbf@4.0.3': @@ -2985,8 +3052,8 @@ packages: '@mdn/browser-compat-data@6.0.27': resolution: {integrity: sha512-s5kTuDih5Ysb7DS2T2MhvneFLvDS0NwnLY5Jv6dL+zBXbcNVcyFcGdjwn3rttiHvcbb/qF02HP9ywufdwHZbIw==} - '@mdx-js/mdx@3.1.0': - resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} '@mdx-js/react@3.1.1': resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} @@ -3113,14 +3180,14 @@ packages: '@nestjs/websockets': ^11.0.0 rxjs: ^7.1.0 - '@nestjs/schedule@6.0.0': - resolution: {integrity: sha512-aQySMw6tw2nhitELXd3EiRacQRgzUKD9mFcUZVOJ7jPLqIBvXOyvRWLsK9SdurGA+jjziAlMef7iB5ZEFFoQpw==} + '@nestjs/schedule@6.0.1': + resolution: {integrity: sha512-v3yO6cSPAoBSSyH67HWnXHzuhPhSNZhRmLY38JvCt2sqY8sPMOODpcU1D79iUMFf7k16DaMEbL4Mgx61ZhiC8Q==} peerDependencies: '@nestjs/common': ^10.0.0 || ^11.0.0 '@nestjs/core': ^10.0.0 || ^11.0.0 - '@nestjs/schematics@11.0.7': - resolution: {integrity: sha512-t8dNYYMwEeEsrlwc2jbkfwCfXczq4AeNEgx1KVQuJ6wYibXk0ZbXbPdfp8scnEAaQv1grpncNV5gWgzi7ZwbvQ==} + '@nestjs/schematics@11.0.8': + resolution: {integrity: sha512-HKunkzfBYLpNyL/qP5wu0OBKVPrISJLnrB4r6S53fT99pEvopDcJAeIuznSAD1Dx1njUqpbTR/uGyD0xL1y0nw==} peerDependencies: typescript: '>=4.8.2' @@ -3296,20 +3363,20 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-ioredis@0.53.0': - resolution: {integrity: sha512-Ah2wU347vOJYbE563Tgm3UX2J3DAXoI8gsr8qH0OOO4uDuEv3kVS/eDCfXApt11bvvDDPlOoc60/TGn6m9IoPw==} + '@opentelemetry/instrumentation-ioredis@0.53.3': + resolution: {integrity: sha512-afCzr4OSHWDfvVRx5ni92zEgNPoq2akoe+/nubWkGPKHFLsJwYO/ihAaky1i6m9d3tBO571g9rlnUvDlvoKSoQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-nestjs-core@0.51.0': - resolution: {integrity: sha512-Se/m4887W94OO12pjKMjI3398L7HCoWeCjcbwoPvNOWpSpMkljBOHA9vE/fyo63CaVG1XAM5xA4ad60wmJKl9A==} + '@opentelemetry/instrumentation-nestjs-core@0.52.2': + resolution: {integrity: sha512-kL91hPGEjUI08VcDJeNwYKP2EpynAnymF0wr4Irqp5uHeyvE/hTX4R3DmpDP80IZ/aQ5WVxuWiaBlVP7cERu/w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-pg@0.58.0': - resolution: {integrity: sha512-WHntZAorf6CZ0n5a3oHlwGkSeu5Xa4AiCmXkNTKg24TbYSFWzJUtWvPQSkxePvQ3ku71lhAY/M20WgwHlvpZpQ==} + '@opentelemetry/instrumentation-pg@0.58.3': + resolution: {integrity: sha512-eGyrTHDx3WA9JiCbBQO1OUc8B9InqCJvC87uY1hSuOXU6HtawCEml1epuAVQY3cizK7Tc3IH0EYSR/q4w/kHyw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -3350,8 +3417,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/redis-common@0.38.0': - resolution: {integrity: sha512-4Wc0AWURII2cfXVVoZ6vDqK+s5n4K5IssdrlVrvGsx6OEOKdghKtJZqXAHWFiZv4nTDLH2/2fldjIHY8clMOjQ==} + '@opentelemetry/redis-common@0.38.2': + resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==} engines: {node: ^18.19.0 || >=20.6.0} '@opentelemetry/resources@2.1.0': @@ -3394,8 +3461,8 @@ packages: resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==} engines: {node: '>=14'} - '@opentelemetry/sql-common@0.41.0': - resolution: {integrity: sha512-pmzXctVbEERbqSfiAgdes9Y63xjoOyXcD7B6IXBkVb+vbM7M9U98mn33nGXxPf4dfYR0M+vhcKRZmbSJ7HfqFA==} + '@opentelemetry/sql-common@0.41.2': + resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -3439,8 +3506,8 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.55.0': - resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==} + '@playwright/test@1.55.1': + resolution: {integrity: sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==} engines: {node: '>=18'} hasBin: true @@ -3518,8 +3585,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/components@0.5.3': - resolution: {integrity: sha512-8G5vsoMehuGOT4cDqaYLdpagtqCYPl4vThXNylClxO6SrN2w9Mh1+i2RNGj/rdqh/woamHORjlXMYCA/kzDMew==} + '@react-email/components@0.5.5': + resolution: {integrity: sha512-+utnip1DiXTq5TQKvL8qztWy0EC3L+qdRIeJkBZXJA4WGIukbaqimWCTBGIMW19Pj+1iKvDYk2JQHEQDLiq7uQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -3583,8 +3650,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/render@1.2.3': - resolution: {integrity: sha512-qu3XYNkHGao3teJexVD5CrcgFkNLrzbZvpZN17a7EyQYUN3kHkTkE9saqY4VbvGx6QoNU3p8rsk/Xm++D/+pTw==} + '@react-email/render@1.3.1': + resolution: {integrity: sha512-BOc/kanieEVyiuldFFvceriiBGBBVhe4JWWXCXE2ehLIqz+gSWD4rgCoXAGbJRnnVyyp4joPqK62bSfa88yonA==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -3623,108 +3690,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.50.1': - resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==} + '@rollup/rollup-android-arm-eabi@4.52.4': + resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.50.1': - resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==} + '@rollup/rollup-android-arm64@4.52.4': + resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.50.1': - resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==} + '@rollup/rollup-darwin-arm64@4.52.4': + resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.50.1': - resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==} + '@rollup/rollup-darwin-x64@4.52.4': + resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.50.1': - resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==} + '@rollup/rollup-freebsd-arm64@4.52.4': + resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.50.1': - resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==} + '@rollup/rollup-freebsd-x64@4.52.4': + resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.50.1': - resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': + resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.50.1': - resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==} + '@rollup/rollup-linux-arm-musleabihf@4.52.4': + resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.50.1': - resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==} + '@rollup/rollup-linux-arm64-gnu@4.52.4': + resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.50.1': - resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==} + '@rollup/rollup-linux-arm64-musl@4.52.4': + resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.50.1': - resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==} + '@rollup/rollup-linux-loong64-gnu@4.52.4': + resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.50.1': - resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==} + '@rollup/rollup-linux-ppc64-gnu@4.52.4': + resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.50.1': - resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==} + '@rollup/rollup-linux-riscv64-gnu@4.52.4': + resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.50.1': - resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==} + '@rollup/rollup-linux-riscv64-musl@4.52.4': + resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.50.1': - resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==} + '@rollup/rollup-linux-s390x-gnu@4.52.4': + resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.50.1': - resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==} + '@rollup/rollup-linux-x64-gnu@4.52.4': + resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.50.1': - resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==} + '@rollup/rollup-linux-x64-musl@4.52.4': + resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.50.1': - resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==} + '@rollup/rollup-openharmony-arm64@4.52.4': + resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.50.1': - resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==} + '@rollup/rollup-win32-arm64-msvc@4.52.4': + resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.50.1': - resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==} + '@rollup/rollup-win32-ia32-msvc@4.52.4': + resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.50.1': - resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==} + '@rollup/rollup-win32-x64-gnu@4.52.4': + resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.4': + resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} cpu: [x64] os: [win32] @@ -3763,172 +3835,176 @@ packages: '@slorber/remark-comment@1.0.0': resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} - '@smithy/abort-controller@4.1.1': - resolution: {integrity: sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg==} + '@smithy/abort-controller@4.2.0': + resolution: {integrity: sha512-PLUYa+SUKOEZtXFURBu/CNxlsxfaFGxSBPcStL13KpVeVWIfdezWyDqkz7iDLmwnxojXD0s5KzuB5HGHvt4Aeg==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.2.2': - resolution: {integrity: sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ==} + '@smithy/config-resolver@4.3.0': + resolution: {integrity: sha512-9oH+n8AVNiLPK/iK/agOsoWfrKZ3FGP3502tkksd6SRsKMYiu7AFX0YXo6YBADdsAj7C+G/aLKdsafIJHxuCkQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.11.0': - resolution: {integrity: sha512-Abs5rdP1o8/OINtE49wwNeWuynCu0kme1r4RI3VXVrHr4odVDG7h7mTnw1WXXfN5Il+c25QOnrdL2y56USfxkA==} + '@smithy/core@3.15.0': + resolution: {integrity: sha512-VJWncXgt+ExNn0U2+Y7UywuATtRYaodGQKFo9mDyh70q+fJGedfrqi2XuKU1BhiLeXgg6RZrW7VEKfeqFhHAJA==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.1.2': - resolution: {integrity: sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg==} + '@smithy/credential-provider-imds@4.2.0': + resolution: {integrity: sha512-SOhFVvFH4D5HJZytb0bLKxCrSnwcqPiNlrw+S4ZXjMnsC+o9JcUQzbZOEQcA8yv9wJFNhfsUiIUKiEnYL68Big==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.2.1': - resolution: {integrity: sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng==} + '@smithy/fetch-http-handler@5.3.1': + resolution: {integrity: sha512-3AvYYbB+Dv5EPLqnJIAgYw/9+WzeBiUYS8B+rU0pHq5NMQMvrZmevUROS4V2GAt0jEOn9viBzPLrZE+riTNd5Q==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.1.1': - resolution: {integrity: sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA==} + '@smithy/hash-node@4.2.0': + resolution: {integrity: sha512-ugv93gOhZGysTctZh9qdgng8B+xO0cj+zN0qAZ+Sgh7qTQGPOJbMdIuyP89KNfUyfAqFSNh5tMvC+h2uCpmTtA==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.1.1': - resolution: {integrity: sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg==} + '@smithy/invalid-dependency@4.2.0': + resolution: {integrity: sha512-ZmK5X5fUPAbtvRcUPtk28aqIClVhbfcmfoS4M7UQBTnDdrNxhsrxYVv0ZEl5NaPSyExsPWqL4GsPlRvtlwg+2A==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/is-array-buffer@4.1.0': - resolution: {integrity: sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==} + '@smithy/is-array-buffer@4.2.0': + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.1.1': - resolution: {integrity: sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w==} + '@smithy/middleware-content-length@4.2.0': + resolution: {integrity: sha512-6ZAnwrXFecrA4kIDOcz6aLBhU5ih2is2NdcZtobBDSdSHtE9a+MThB5uqyK4XXesdOCvOcbCm2IGB95birTSOQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.2.2': - resolution: {integrity: sha512-M51KcwD+UeSOFtpALGf5OijWt915aQT5eJhqnMKJt7ZTfDfNcvg2UZgIgTZUoiORawb6o5lk4n3rv7vnzQXgsA==} + '@smithy/middleware-endpoint@4.3.1': + resolution: {integrity: sha512-JtM4SjEgImLEJVXdsbvWHYiJ9dtuKE8bqLlvkvGi96LbejDL6qnVpVxEFUximFodoQbg0Gnkyff9EKUhFhVJFw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.2.2': - resolution: {integrity: sha512-KZJueEOO+PWqflv2oGx9jICpHdBYXwCI19j7e2V3IMwKgFcXc9D9q/dsTf4B+uCnYxjNoS1jpyv6pGNGRsKOXA==} + '@smithy/middleware-retry@4.4.1': + resolution: {integrity: sha512-wXxS4ex8cJJteL0PPQmWYkNi9QKDWZIpsndr0wZI2EL+pSSvA/qqxXU60gBOJoIc2YgtZSWY/PE86qhKCCKP1w==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.1.1': - resolution: {integrity: sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg==} + '@smithy/middleware-serde@4.2.0': + resolution: {integrity: sha512-rpTQ7D65/EAbC6VydXlxjvbifTf4IH+sADKg6JmAvhkflJO2NvDeyU9qsWUNBelJiQFcXKejUHWRSdmpJmEmiw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.1.1': - resolution: {integrity: sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A==} + '@smithy/middleware-stack@4.2.0': + resolution: {integrity: sha512-G5CJ//eqRd9OARrQu9MK1H8fNm2sMtqFh6j8/rPozhEL+Dokpvi1Og+aCixTuwDAGZUkJPk6hJT5jchbk/WCyg==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.2.2': - resolution: {integrity: sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A==} + '@smithy/node-config-provider@4.3.0': + resolution: {integrity: sha512-5QgHNuWdT9j9GwMPPJCKxy2KDxZ3E5l4M3/5TatSZrqYVoEiqQrDfAq8I6KWZw7RZOHtVtCzEPdYz7rHZixwcA==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.2.1': - resolution: {integrity: sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw==} + '@smithy/node-http-handler@4.3.0': + resolution: {integrity: sha512-RHZ/uWCmSNZ8cneoWEVsVwMZBKy/8123hEpm57vgGXA3Irf/Ja4v9TVshHK2ML5/IqzAZn0WhINHOP9xl+Qy6Q==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.1.1': - resolution: {integrity: sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg==} + '@smithy/property-provider@4.2.0': + resolution: {integrity: sha512-rV6wFre0BU6n/tx2Ztn5LdvEdNZ2FasQbPQmDOPfV9QQyDmsCkOAB0osQjotRCQg+nSKFmINhyda0D3AnjSBJw==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.2.1': - resolution: {integrity: sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw==} + '@smithy/protocol-http@5.3.0': + resolution: {integrity: sha512-6POSYlmDnsLKb7r1D3SVm7RaYW6H1vcNcTWGWrF7s9+2noNYvUsm7E4tz5ZQ9HXPmKn6Hb67pBDRIjrT4w/d7Q==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.1.1': - resolution: {integrity: sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA==} + '@smithy/querystring-builder@4.2.0': + resolution: {integrity: sha512-Q4oFD0ZmI8yJkiPPeGUITZj++4HHYCW3pYBYfIobUCkYpI6mbkzmG1MAQQ3lJYYWj3iNqfzOenUZu+jqdPQ16A==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.1.1': - resolution: {integrity: sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng==} + '@smithy/querystring-parser@4.2.0': + resolution: {integrity: sha512-BjATSNNyvVbQxOOlKse0b0pSezTWGMvA87SvoFoFlkRsKXVsN3bEtjCxvsNXJXfnAzlWFPaT9DmhWy1vn0sNEA==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.1.1': - resolution: {integrity: sha512-Iam75b/JNXyDE41UvrlM6n8DNOa/r1ylFyvgruTUx7h2Uk7vDNV9AAwP1vfL1fOL8ls0xArwEGVcGZVd7IO/Cw==} + '@smithy/service-error-classification@4.2.0': + resolution: {integrity: sha512-Ylv1ttUeKatpR0wEOMnHf1hXMktPUMObDClSWl2TpCVT4DwtJhCeighLzSLbgH3jr5pBNM0LDXT5yYxUvZ9WpA==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.2.0': - resolution: {integrity: sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw==} + '@smithy/shared-ini-file-loader@4.3.0': + resolution: {integrity: sha512-VCUPPtNs+rKWlqqntX0CbVvWyjhmX30JCtzO+s5dlzzxrvSfRh5SY0yxnkirvc1c80vdKQttahL71a9EsdolSQ==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.2.1': - resolution: {integrity: sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA==} + '@smithy/signature-v4@5.3.0': + resolution: {integrity: sha512-MKNyhXEs99xAZaFhm88h+3/V+tCRDQ+PrDzRqL0xdDpq4gjxcMmf5rBA3YXgqZqMZ/XwemZEurCBQMfxZOWq/g==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.6.2': - resolution: {integrity: sha512-u82cjh/x7MlMat76Z38TRmEcG6JtrrxN4N2CSNG5o2v2S3hfLAxRgSgFqf0FKM3dglH41Evknt/HOX+7nfzZ3g==} + '@smithy/smithy-client@4.7.1': + resolution: {integrity: sha512-WXVbiyNf/WOS/RHUoFMkJ6leEVpln5ojCjNBnzoZeMsnCg3A0BRhLK3WYc4V7PmYcYPZh9IYzzAg9XcNSzYxYQ==} engines: {node: '>=18.0.0'} - '@smithy/types@4.5.0': - resolution: {integrity: sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg==} + '@smithy/types@4.6.0': + resolution: {integrity: sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.1.1': - resolution: {integrity: sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg==} + '@smithy/url-parser@4.2.0': + resolution: {integrity: sha512-AlBmD6Idav2ugmoAL6UtR6ItS7jU5h5RNqLMZC7QrLCoITA9NzIN3nx9GWi8g4z1pfWh2r9r96SX/jHiNwPJ9A==} engines: {node: '>=18.0.0'} - '@smithy/util-base64@4.1.0': - resolution: {integrity: sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==} + '@smithy/util-base64@4.3.0': + resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-browser@4.1.0': - resolution: {integrity: sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==} + '@smithy/util-body-length-browser@4.2.0': + resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-node@4.1.0': - resolution: {integrity: sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==} + '@smithy/util-body-length-node@4.2.1': + resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} - '@smithy/util-buffer-from@4.1.0': - resolution: {integrity: sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==} + '@smithy/util-buffer-from@4.2.0': + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} engines: {node: '>=18.0.0'} - '@smithy/util-config-provider@4.1.0': - resolution: {integrity: sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==} + '@smithy/util-config-provider@4.2.0': + resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.1.2': - resolution: {integrity: sha512-QKrOw01DvNHKgY+3p4r9Ut4u6EHLVZ01u6SkOMe6V6v5C+nRPXJeWh72qCT1HgwU3O7sxAIu23nNh+FOpYVZKA==} + '@smithy/util-defaults-mode-browser@4.3.0': + resolution: {integrity: sha512-H4MAj8j8Yp19Mr7vVtGgi7noJjvjJbsKQJkvNnLlrIFduRFT5jq5Eri1k838YW7rN2g5FTnXpz5ktKVr1KVgPQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.1.2': - resolution: {integrity: sha512-l2yRmSfx5haYHswPxMmCR6jGwgPs5LjHLuBwlj9U7nNBMS43YV/eevj+Xq1869UYdiynnMrCKtoOYQcwtb6lKg==} + '@smithy/util-defaults-mode-node@4.2.1': + resolution: {integrity: sha512-PuDcgx7/qKEMzV1QFHJ7E4/MMeEjaA7+zS5UNcHCLPvvn59AeZQ0DSDGMpqC2xecfa/1cNGm4l8Ec/VxCuY7Ug==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.1.2': - resolution: {integrity: sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q==} + '@smithy/util-endpoints@3.2.0': + resolution: {integrity: sha512-TXeCn22D56vvWr/5xPqALc9oO+LN+QpFjrSM7peG/ckqEPoI3zaKZFp+bFwfmiHhn5MGWPaLCqDOJPPIixk9Wg==} engines: {node: '>=18.0.0'} - '@smithy/util-hex-encoding@4.1.0': - resolution: {integrity: sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==} + '@smithy/util-hex-encoding@4.2.0': + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.1.1': - resolution: {integrity: sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg==} + '@smithy/util-middleware@4.2.0': + resolution: {integrity: sha512-u9OOfDa43MjagtJZ8AapJcmimP+K2Z7szXn8xbty4aza+7P1wjFmy2ewjSbhEiYQoW1unTlOAIV165weYAaowA==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.1.1': - resolution: {integrity: sha512-jGeybqEZ/LIordPLMh5bnmnoIgsqnp4IEimmUp5c5voZ8yx+5kAlN5+juyr7p+f7AtZTgvhmInQk4Q0UVbrZ0Q==} + '@smithy/util-retry@4.2.0': + resolution: {integrity: sha512-BWSiuGbwRnEE2SFfaAZEX0TqaxtvtSYPM/J73PFVm+A29Fg1HTPiYFb8TmX1DXp4hgcdyJcNQmprfd5foeORsg==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.3.1': - resolution: {integrity: sha512-khKkW/Jqkgh6caxMWbMuox9+YfGlsk9OnHOYCGVEdYQb/XVzcORXHLYUubHmmda0pubEDncofUrPNniS9d+uAA==} + '@smithy/util-stream@4.5.0': + resolution: {integrity: sha512-0TD5M5HCGu5diEvZ/O/WquSjhJPasqv7trjoqHyWjNh/FBeBl7a0ztl9uFMOsauYtRfd8jvpzIAQhDHbx+nvZw==} engines: {node: '>=18.0.0'} - '@smithy/util-uri-escape@4.1.0': - resolution: {integrity: sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==} + '@smithy/util-uri-escape@4.2.0': + resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} engines: {node: '>=18.0.0'} '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@smithy/util-utf8@4.1.0': - resolution: {integrity: sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==} + '@smithy/util-utf8@4.2.0': + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + engines: {node: '>=18.0.0'} + + '@smithy/uuid@1.1.0': + resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} engines: {node: '>=18.0.0'} '@socket.io/component-emitter@3.1.2': @@ -3943,18 +4019,18 @@ packages: '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@sveltejs/acorn-typescript@1.0.5': - resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} + '@sveltejs/acorn-typescript@1.0.6': + resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==} peerDependencies: acorn: ^8.9.0 - '@sveltejs/adapter-static@3.0.9': - resolution: {integrity: sha512-aytHXcMi7lb9ljsWUzXYQ0p5X1z9oWud2olu/EpmH7aCu4m84h7QLvb5Wp+CFirKcwoNnYvYWhyP/L8Vh1ztdw==} + '@sveltejs/adapter-static@3.0.10': + resolution: {integrity: sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==} peerDependencies: '@sveltejs/kit': ^2.0.0 - '@sveltejs/enhanced-img@0.8.1': - resolution: {integrity: sha512-Ibom8j6F9vdmOeR+ljQ4q7TEJV0FWN1kB5wJZ2S/GuDVgCrKYrsXBw5gpSKcHwGYpKA3o9EoijPhep/GHgRUWQ==} + '@sveltejs/enhanced-img@0.8.3': + resolution: {integrity: sha512-UM56PSQHbXBvRw5/Ah7R4vxrTR4xbB5/7gTE/7bypVGOGx0pBwTloWXsnLfJXEFI+YYR7IU4jtbYcp4pBXaUSg==} peerDependencies: '@sveltejs/vite-plugin-svelte': ^6.0.0 svelte: ^5.0.0 @@ -3981,8 +4057,8 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || ^7.0.0 - '@sveltejs/vite-plugin-svelte@6.2.0': - resolution: {integrity: sha512-nJsV36+o7rZUDlrnSduMNl11+RoDE1cKqOI0yUEBCcqFoAZOk47TwD3dPKS2WmRutke9StXnzsPBslY7prDM9w==} + '@sveltejs/vite-plugin-svelte@6.2.1': + resolution: {integrity: sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==} engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: svelte: ^5.0.0 @@ -4148,65 +4224,65 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tailwindcss/node@4.1.13': - resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==} + '@tailwindcss/node@4.1.14': + resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==} - '@tailwindcss/oxide-android-arm64@4.1.13': - resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==} + '@tailwindcss/oxide-android-arm64@4.1.14': + resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.13': - resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==} + '@tailwindcss/oxide-darwin-arm64@4.1.14': + resolution: {integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.13': - resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==} + '@tailwindcss/oxide-darwin-x64@4.1.14': + resolution: {integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.13': - resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==} + '@tailwindcss/oxide-freebsd-x64@4.1.14': + resolution: {integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': - resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': + resolution: {integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': - resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': + resolution: {integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.13': - resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.14': + resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.13': - resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.14': + resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.13': - resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==} + '@tailwindcss/oxide-linux-x64-musl@4.1.14': + resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.13': - resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==} + '@tailwindcss/oxide-wasm32-wasi@4.1.14': + resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -4217,24 +4293,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': - resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': + resolution: {integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.13': - resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.14': + resolution: {integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.13': - resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==} + '@tailwindcss/oxide@4.1.14': + resolution: {integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==} engines: {node: '>= 10'} - '@tailwindcss/vite@4.1.13': - resolution: {integrity: sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==} + '@tailwindcss/vite@4.1.14': + resolution: {integrity: sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 @@ -4366,8 +4442,8 @@ packages: '@types/docker-modem@3.0.6': resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} - '@types/dockerode@3.3.42': - resolution: {integrity: sha512-U1jqHMShibMEWHdxYhj3rCMNCiLx5f35i4e3CEUuW+JSSszc/tVqc6WCAPdhwBymG5R/vgbcceagK0St7Cq6Eg==} + '@types/dockerode@3.3.44': + resolution: {integrity: sha512-fUpIHlsbYpxAJb285xx3vp7q5wf5mjqSn3cYwl/MhiM+DB99OdO5sOCPlO0PjO+TyOtphPs7tMVLU/RtOo/JjA==} '@types/dom-to-image@2.6.7': resolution: {integrity: sha512-me5VbCv+fcXozblWwG13krNBvuEOm6kA5xoa4RrjDJCNFOZSWR3/QLtOXimBHk1Fisq69Gx3JtOoXtg1N1tijg==} @@ -4480,9 +4556,6 @@ packages: '@types/lodash@4.17.20': resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} - '@types/luxon@3.6.2': - resolution: {integrity: sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==} - '@types/luxon@3.7.1': resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==} @@ -4516,20 +4589,20 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@18.19.126': - resolution: {integrity: sha512-8AXQlBfrGmtYJEJUPs63F/uZQqVeFiN9o6NUjbDJYfxNxFnArlZufANPw4h6dGhYGKxcyw+TapXFvEsguzIQow==} + '@types/node@18.19.130': + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} '@types/node@20.19.2': resolution: {integrity: sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==} - '@types/node@22.18.5': - resolution: {integrity: sha512-g9BpPfJvxYBXUWI9bV37j6d6LTMNQ88hPwdWWUeYZnMhlo66FIg9gCc1/DZb15QylJSKwOZjwrckvOTWpOiChg==} + '@types/node@22.18.9': + resolution: {integrity: sha512-5yBtK0k/q8PjkMXbTfeIEP/XVYnz1R9qZJ3yUicdEW7ppdDJfe+MqXEhpqDL3mtn4Wvs1u0KLEG0RXzCgNpsSg==} - '@types/node@24.5.1': - resolution: {integrity: sha512-/SQdmUP2xa+1rdx7VwB9yPq8PaKej8TD5cQ+XfKDPWWC+VDJU4rvVVagXqKUzhKjtFoNA8rXDJAkCxQPAe00+Q==} + '@types/node@24.7.1': + resolution: {integrity: sha512-CmyhGZanP88uuC5GpWU9q+fI61j2SkhO3UGMUdfYRE6Bcy0ccyzn1Rqj9YAB/ZY4kOXmNf0ocah5GtphmLMP6Q==} - '@types/nodemailer@7.0.1': - resolution: {integrity: sha512-UfHAghPmGZVzaL8x9y+mKZMWyHC399+iq0MOmya5tIyenWX3lcdSb60vOmp0DocR6gCDTYTozv/ULQnREyyjkg==} + '@types/nodemailer@7.0.2': + resolution: {integrity: sha512-Zo6uOA9157WRgBk/ZhMpTQ/iCWLMk7OIs/Q9jvHarMvrzUUP/MDdPHL2U1zpf57HrrWGv4nYQn5uIxna0xY3xw==} '@types/oidc-provider@9.5.0': resolution: {integrity: sha512-eEzCRVTSqIHD9Bo/qRJ4XQWQ5Z/zBcG+Z2cGJluRsSuWx1RJihqRyPxhIEpMXTwPzHYRTQkVp7hwisQOwzzSAg==} @@ -4570,14 +4643,14 @@ packages: '@types/react-router@5.1.20': resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - '@types/react@19.1.13': - resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} + '@types/react@19.2.2': + resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} '@types/readdir-glob@1.1.5': resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==} - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} '@types/sanitize-html@2.16.0': resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==} @@ -4630,9 +4703,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/uuid@9.0.8': - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/validator@13.15.3': resolution: {integrity: sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==} @@ -4648,63 +4718,63 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.43.0': - resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} + '@typescript-eslint/eslint-plugin@8.45.0': + resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.43.0 + '@typescript-eslint/parser': ^8.45.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.43.0': - resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} + '@typescript-eslint/parser@8.45.0': + resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.43.0': - resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} + '@typescript-eslint/project-service@8.45.0': + resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.43.0': - resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} + '@typescript-eslint/scope-manager@8.45.0': + resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.43.0': - resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} + '@typescript-eslint/tsconfig-utils@8.45.0': + resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.43.0': - resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} + '@typescript-eslint/type-utils@8.45.0': + resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.43.0': - resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} + '@typescript-eslint/types@8.45.0': + resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.43.0': - resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} + '@typescript-eslint/typescript-estree@8.45.0': + resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.43.0': - resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} + '@typescript-eslint/utils@8.45.0': + resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.43.0': - resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} + '@typescript-eslint/visitor-keys@8.45.0': + resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -4799,11 +4869,11 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - '@zoom-image/core@0.41.0': - resolution: {integrity: sha512-LAxGru91286gFmyiQB4RjM277YOWxJX+OZcwtIH/N0dyo73y4NfaAE1eGVdnhjxEYv7yVV3xToMyYnm+uQboTw==} + '@zoom-image/core@0.41.3': + resolution: {integrity: sha512-yW2sZRP6FnZZ7vREpYucDpSCsVFgMSWq22Sp1kabsMPz5+6LSs+sBPPDCVs/ahVYSHa9YOX8rlGHM5iiTFPZLA==} - '@zoom-image/svelte@0.3.4': - resolution: {integrity: sha512-8cPkFUjh+t3/eYkoT2krvz8hoFiXoiYZKpcHOnYCHLhEwaHr1yjgXg/ttWehotVH9V3Z51JQgIcGF3uhYWKB/Q==} + '@zoom-image/svelte@0.3.7': + resolution: {integrity: sha512-vCgA2ClH8J2JBTzpJEgzy03yTi5uJE0963cUjBwc5fi7q8g1wxbbj4/W7YHwQfDmdh9uqHxlX0VcmUQqV44d+w==} peerDependencies: svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -4911,8 +4981,8 @@ packages: peerDependencies: algoliasearch: '>= 3.1 < 6' - algoliasearch@5.29.0: - resolution: {integrity: sha512-E2l6AlTWGznM2e7vEE6T6hzObvEyXukxMOlBmVlMyixZyK1umuO/CiVc6sDBbzVH0oEviCE5IfVY1oZBmccYPQ==} + algoliasearch@5.40.0: + resolution: {integrity: sha512-a9aIL2E3Z7uYUPMCmjMFFd5MWhn+ccTubEvnMy7rOTZCB62dXBJtz0R5BZ/TPuX3R9ocBsgWuAbGWQ+Ph4Fmlg==} engines: {node: '>= 14.0.0'} ansi-align@3.0.1: @@ -5096,11 +5166,11 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.6.1: - resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==} + bare-events@2.7.0: + resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} - bare-fs@4.2.0: - resolution: {integrity: sha512-oRfrw7gwwBVAWx9S5zPMo2iiOjxyiZE12DmblmMQREgcogbNO0AFaZ+QBxxkEXiPspcpvO/Qtqn8LabUx4uYXg==} + bare-fs@4.4.7: + resolution: {integrity: sha512-huJQxUWc2d1T+6dxnC/FoYpBgEHzJp33mYZqFtQqTTPPyP9xPvmjC16VpR4wTte4ZKd5VxkFAcfDYi51iwWMcg==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -5108,8 +5178,8 @@ packages: bare-buffer: optional: true - bare-os@3.6.1: - resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + bare-os@3.6.2: + resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: @@ -5126,6 +5196,9 @@ packages: bare-events: optional: true + bare-url@2.2.2: + resolution: {integrity: sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -5133,6 +5206,10 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + baseline-browser-mapping@2.8.15: + resolution: {integrity: sha512-qsJ8/X+UypqxHXN75M7dF88jNK37dLBRW7LeUzCPz+TNs37G8cfWy9nWzS+LS//g600zrt2le9KuXt0rWfDz5Q==} + hasBin: true + batch-cluster@13.0.0: resolution: {integrity: sha512-EreW0Vi8TwovhYUHBXXRA5tthuU2ynGsZFlboyMJHCCUXYa2AjgwnE3ubBOJs2xJLcuXFJbi6c/8pH5+FVj8Og==} engines: {node: '>=14'} @@ -5202,8 +5279,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.3: - resolution: {integrity: sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==} + browserslist@4.26.3: + resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -5228,8 +5305,12 @@ packages: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} - bullmq@5.58.5: - resolution: {integrity: sha512-0A6Qjxdn8j7aOcxfRZY798vO/aMuwvoZwfE6a9EOXHb1pzpBVAogsc/OfRWeUf+5wMBoYB5nthstnJo/zrQOeQ==} + bullmq@5.60.0: + resolution: {integrity: sha512-hQPfUOLE7/aidCiQSMc5K1EYF6eAuOYSGNdKoLbTpYuRsjYsY0uGUBNX7VrESvAerUpklrsgPLqbunySUxWh5Q==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} @@ -5310,8 +5391,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001735: - resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} + caniuse-lite@1.0.30001749: + resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==} canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -5489,17 +5570,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} @@ -5555,8 +5629,8 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - comment-json@4.2.5: - resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + comment-json@4.4.1: + resolution: {integrity: sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg==} engines: {node: '>= 6'} common-path-prefix@3.0.0: @@ -5658,10 +5732,6 @@ packages: resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} - copy-text-to-clipboard@3.2.0: - resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==} - engines: {node: '>=12'} - copy-webpack-plugin@11.0.0: resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} engines: {node: '>= 14.15.0'} @@ -5710,8 +5780,8 @@ packages: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} - cron@4.3.0: - resolution: {integrity: sha512-ciiYNLfSlF9MrDqnbMdRWFiA6oizSF7kA1osPP9lRzNu0Uu+AWog1UKy7SkckiDY2irrNjeO6qLyKnXC8oxmrw==} + cron@4.3.3: + resolution: {integrity: sha512-B/CJj5yL3sjtlun6RtYHvoSB26EmQ2NUmhq9ZiJSyKIM4K/fqfh9aelDFlIayD2YMeFZqWLi9hHV+c+pq2Djkw==} engines: {node: '>=18.x'} cross-spawn@7.0.6: @@ -5952,9 +6022,13 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -5971,6 +6045,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -6005,8 +6083,8 @@ packages: detect-europe-js@0.1.2: resolution: {integrity: sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==} - detect-libc@2.1.0: - resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} detect-node@2.1.0: @@ -6053,16 +6131,16 @@ packages: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} - docker-compose@1.2.0: - resolution: {integrity: sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w==} + docker-compose@1.3.0: + resolution: {integrity: sha512-7Gevk/5eGD50+eMD+XDnFnOrruFkL0kSd7jEG4cjmqweDSUhB7i0g8is/nBdVpl+Bx338SqIB2GLKm32M+Vs6g==} engines: {node: '>= 6.0.0'} docker-modem@5.0.6: resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==} engines: {node: '>= 8.0'} - dockerode@4.0.7: - resolution: {integrity: sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==} + dockerode@4.0.9: + resolution: {integrity: sha512-iND4mcOWhPaCNh54WmK/KoSb35AFqPAUWFMffTQcp52uQt36b5uNwEJTSXntJZBbeGad72Crbi/hvDIv6us/6Q==} engines: {node: '>= 8.0'} docusaurus-lunr-search@3.6.0: @@ -6120,8 +6198,8 @@ packages: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} - dotenv@17.2.2: - resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==} + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -6143,8 +6221,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.207: - resolution: {integrity: sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==} + electron-to-chromium@1.5.233: + resolution: {integrity: sha512-iUdTQSf7EFXsDdQsp8MwJz5SVk4APEFqXU/S47OtQ0YLqacSwPXdZ5vRlMX3neb07Cy2vgioNuRnWUXFwuslkg==} emoji-regex@10.5.0: resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} @@ -6259,8 +6337,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.9: - resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} + esbuild@0.25.10: + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} engines: {node: '>=18'} hasBin: true @@ -6298,12 +6376,6 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-p@0.26.0: - resolution: {integrity: sha512-Y5bDWKIFEUE7dZrbBbq5SiHWadYC4h3+Q+xBAUNNAqU1VMokleoGGfK92Qsmi+EBOLUBbxrtOCND5BSqQn8NaQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - deprecated: ESLint has built-in support for multithread linting now. This package is no longer needed. - hasBin: true - eslint-plugin-compat@6.0.2: resolution: {integrity: sha512-1ME+YfJjmOz1blH0nPZpHgjMGK4kjgEeoYqGCqoBPQ/mGu/dJzdoP0f1C8H2jcWZjzhZjAMccbM/VdXhPORIfA==} engines: {node: '>=18.x'} @@ -6324,8 +6396,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-svelte@3.12.3: - resolution: {integrity: sha512-YVNhKsHZeXVvsjZcSMjnce9gO31frICu453p5JjFiXNszHoG9k8WvsA/LAoLi4K8T69G7DIrgg1AqasDJLpgoQ==} + eslint-plugin-svelte@3.12.4: + resolution: {integrity: sha512-hD7wPe+vrPgx3U2X2b/wyTMtWobm660PygMGKrWWYTc9lvtY8DpNFDaU2CJQn1szLjGbn/aJ3g8WiXuKakrEkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 @@ -6340,6 +6412,12 @@ packages: peerDependencies: eslint: '>=9.29.0' + eslint-plugin-unicorn@61.0.2: + resolution: {integrity: sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==} + engines: {node: ^20.10.0 || >=21.0.0} + peerDependencies: + eslint: '>=9.29.0' + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -6356,8 +6434,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.35.0: - resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} + eslint@9.37.0: + resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -6458,6 +6536,9 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -6538,8 +6619,8 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fast-xml-parser@5.2.5: resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} @@ -6803,6 +6884,12 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regex.js@1.2.0: + resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -6897,10 +6984,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-own-prop@2.0.0: - resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} - engines: {node: '>=8'} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -6978,6 +7061,10 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} @@ -6999,9 +7086,6 @@ packages: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} - html-entities@2.6.0: - resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -7106,6 +7190,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + i18n-iso-countries@7.14.0: resolution: {integrity: sha512-nXHJZYtNrfsi1UQbyRqm3Gou431elgLjKl//CYlnBGt5aTWdRPH1PiS2T/p/n8Q8LnqYqzQJik3Q7mkwvLokeg==} engines: {node: '>= 12'} @@ -7155,8 +7243,8 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-in-the-middle@1.14.2: - resolution: {integrity: sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==} + import-in-the-middle@1.14.4: + resolution: {integrity: sha512-eWjxh735SJLFJJDs5X82JQ2405OdJeAHDBnaoFCfdr5GVc7AWc9xU7KbrF+3Xd5F2ccP1aQFKtY+65X6EfKZ7A==} import-lazy@4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} @@ -7206,14 +7294,14 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - intl-messageformat@10.7.16: - resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==} + intl-messageformat@10.7.17: + resolution: {integrity: sha512-0Ugaf65B2J76rb31drgNF1l6bGEDkbIiYc2Glx6jaZINHnwa5kDRGy8KXYuA+/8P4G0c9prAFhfVhQJJfzUuvQ==} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ioredis@5.7.0: - resolution: {integrity: sha512-NUcA93i1lukyXU+riqEyPtSEkyFq8tX90uL659J+qpCZ3rEdViB/APC58oAhIh3+bJln2hzdlZbBZsGNrlsR8g==} + ioredis@5.8.0: + resolution: {integrity: sha512-AUXbKn9gvo9hHKvk6LbZJQSKn/qIfkWXrnsyL9Yrf+oeXmla9Nmf6XEumOddyhM8neynpK5oAV6r9r99KBuwzA==} engines: {node: '>=12.22.0'} ip-address@10.0.1: @@ -7237,9 +7325,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -7268,6 +7353,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -7287,6 +7377,11 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} @@ -7299,6 +7394,10 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} + is-network-error@1.3.0: + resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} + engines: {node: '>=16'} + is-npm@6.0.0: resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7381,6 +7480,10 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + is-yarn-global@0.4.1: resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} engines: {node: '>=12'} @@ -7449,8 +7552,8 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true joi@17.13.3: @@ -7692,8 +7795,8 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} loader-utils@2.0.4: @@ -7793,10 +7896,6 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - luxon@3.6.1: - resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==} - engines: {node: '>=12'} - luxon@3.7.2: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} @@ -7830,8 +7929,8 @@ packages: resolution: {integrity: sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==} engines: {node: '>=6.4.0'} - maplibre-gl@5.7.1: - resolution: {integrity: sha512-iCOQB6W/EGgQx8aU4SyfU5a5/GR2E+ELF92NMsqYfs3x+vnY+8mARmz4gor6XZHCz3tv19mnotVDRlRTMNKyGw==} + maplibre-gl@5.8.0: + resolution: {integrity: sha512-zLblPFK+z5sxeitDF8RL2cnqfRaivNwxbGoQMfwAm9st6d1lRGTxgI7NNNr/U1AEPkp5+X+wjROagiHvJD8aqg==} engines: {node: '>=16.14.0', npm: '>=8.1.0'} mark.js@8.11.1: @@ -7933,6 +8032,9 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} + memfs@4.49.0: + resolution: {integrity: sha512-L9uC9vGuc4xFybbdOpRLoOAOq1YEBBsocCs5NVW32DfU+CZWWIn3OVF+lB8Gp4ttBVSMazwrTrjv8ussX/e3VQ==} + memoizee@0.4.17: resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} engines: {node: '>=0.12'} @@ -8203,8 +8305,8 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} mkdirp-classic@0.5.3: @@ -8223,11 +8325,6 @@ packages: engines: {node: '>=10'} hasBin: true - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - mnemonist@0.40.3: resolution: {integrity: sha512-Vjyr90sJ23CKKH/qPAgUKicw/v6pRoamxIEDFOF8uSgFME7DqPRpHgRTejWVjkdGg5dXj0/NyxZHZ9bcjH+2uQ==} @@ -8318,8 +8415,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - nest-commander@3.19.1: - resolution: {integrity: sha512-Pn6xcMeSnidlzZozNLnbe7P4TqXL7g0JuxqTAtJ89KT4S63ntJZKtRU6g/56h/aHUQa+m98j/c9OxBSduK7EPg==} + nest-commander@3.20.1: + resolution: {integrity: sha512-LRI7z6UlWy2vWyQR0PYnAXsaRyJvpfiuvOCmx2jk2kLXJH9+y/omPDl9NE3fq4WMaE0/AhviuUjA12eC/zDqXw==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 @@ -8398,11 +8495,11 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.23: + resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} - nodemailer@7.0.6: - resolution: {integrity: sha512-F44uVzgwo49xboqbFgBGkRaiMgtoBrBEWCVincJPK9+S9Adkzt/wXCLKbf7dxucmxfTI5gHGB+bEmdyzN6QKjw==} + nodemailer@7.0.7: + resolution: {integrity: sha512-jGOaRznodf62TVzdyhKt/f1Q/c3kYynk8629sgJHpRzGZj01ezbgMMWJSAjHADcwTKxco3B68/R+KHJY2T5BaA==} engines: {node: '>=6.0.0'} nopt@1.0.10: @@ -8465,8 +8562,8 @@ packages: engines: {node: ^14.16.0 || >=16.10.0} hasBin: true - oauth4webapi@3.8.1: - resolution: {integrity: sha512-olkZDELNycOWQf9LrsELFq8n05LwJgV8UkrS0cburk6FOwf8GvLam+YB+Uj5Qvryee+vwWOfQVeI5Vm0MVg7SA==} + oauth4webapi@3.8.2: + resolution: {integrity: sha512-FzZZ+bht5X0FKe7Mwz3DAVAmlH1BV5blSak/lHMBKz0/EBMhX6B10GlQYI51+oRp8ObJaX0g6pXrAxZh5s8rjw==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -8516,6 +8613,10 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -8524,8 +8625,8 @@ packages: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true - openid-client@6.8.0: - resolution: {integrity: sha512-oG1d1nAVhIIE+JSjLS+7E9wY1QOJpZltkzlJdbZ7kEn7Hp3hqur2TEeQ8gLOHoHkhbRAGZJKoOnEQcLOQJuIyg==} + openid-client@6.8.1: + resolution: {integrity: sha512-VoYT6enBo6Vj2j3Q5Ec0AezS+9YGzQo1f5Xc42lreMGlfP4ljiXPKVDvCADh+XHCV/bqPu/wWSiCVXbJKvrODw==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -8583,9 +8684,9 @@ packages: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} p-timeout@3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} @@ -8776,13 +8877,13 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.55.0: - resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==} + playwright-core@1.55.1: + resolution: {integrity: sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==} engines: {node: '>=18'} hasBin: true - playwright@1.55.0: - resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==} + playwright@1.55.1: + resolution: {integrity: sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==} engines: {node: '>=18'} hasBin: true @@ -8974,16 +9075,22 @@ packages: ts-node: optional: true - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} peerDependencies: + jiti: '>=1.21.0' postcss: '>=8.0.9' - ts-node: '>=9.0.0' + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: + jiti: + optional: true postcss: optional: true - ts-node: + tsx: + optional: true + yaml: optional: true postcss-loader@7.3.4: @@ -9286,8 +9393,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier-plugin-organize-imports@4.2.0: - resolution: {integrity: sha512-Zdy27UhlmyvATZi67BTnLcKTo8fm6Oik59Sz6H64PgZJVs6NJpPD1mT240mmJn62c98/QaL+r3kx9Q3gRpDajg==} + prettier-plugin-organize-imports@4.3.0: + resolution: {integrity: sha512-FxFz0qFhyBsGdIsb697f/EkvHzi5SZOhWAjxcx2dLt+Q532bAlhswcXGYB1yzjZ69kW8UoadFBw7TyNwlq96Iw==} peerDependencies: prettier: '>=2.0' typescript: '>=2.9' @@ -9476,13 +9583,13 @@ packages: peerDependencies: react: ^18.3.1 - react-dom@19.1.1: - resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} + react-dom@19.2.0: + resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} peerDependencies: - react: ^19.1.1 + react: ^19.2.0 - react-email@4.2.11: - resolution: {integrity: sha512-/7TXRgsTrXcV1u7kc5ZXDVlPvZqEBaYcflMhE2FgWIJh3OHLjj2FqctFTgYcp0iwzbR59a7gzJLmSKyD0wYJEQ==} + react-email@4.2.12: + resolution: {integrity: sha512-Cp6nYAG9uL4//X/96wDSKxGqVTXsaRMuD1ub0G0iBcfTqLel4VVre3kicq7RraplDuj+ATlqSZu47d7P2ULP5w==} engines: {node: '>=18.0.0'} hasBin: true @@ -9531,8 +9638,8 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - react@19.1.1: - resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -9563,8 +9670,10 @@ packages: recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - recma-jsx@1.0.0: - resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 recma-parse@1.0.0: resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} @@ -9643,8 +9752,8 @@ packages: remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - remark-mdx@3.1.0: - resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==} + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} @@ -9741,8 +9850,8 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup-plugin-visualizer@6.0.3: - resolution: {integrity: sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw==} + rollup-plugin-visualizer@6.0.4: + resolution: {integrity: sha512-q8Q7J/6YofkmaGW1sH/fPRAz37x/+pd7VBuaUU7lwvOS/YikuiiEU9jeb9PH8XHiq50XFrUsBbOxeAMYQ7KZkg==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -9754,8 +9863,8 @@ packages: rollup: optional: true - rollup@4.50.1: - resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==} + rollup@4.52.4: + resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -9771,6 +9880,10 @@ packages: engines: {node: '>=12.0.0'} hasBin: true + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -9821,8 +9934,8 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} schema-dts@1.1.5: resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==} @@ -9831,8 +9944,8 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.3.2: - resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} search-insights@2.17.3: @@ -9860,8 +9973,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true @@ -9918,8 +10031,8 @@ packages: resolution: {integrity: sha512-rLGSWeK2ufzCVx05wYd+xrWnOOdSV7xNUW5/XFgx3Bc02hBkpMlrd2F1dDII7/jhWzv0MSyBFh5uJIy9hLdfuw==} hasBin: true - sharp@0.34.3: - resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} + sharp@0.34.4: + resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -9966,13 +10079,10 @@ packages: simple-get@3.1.1: resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} - simple-icons@15.15.0: - resolution: {integrity: sha512-ohh1Uo9AjH10WN5wpPmtjnmbSLv6MjiULHS4dYA821uIsPAp0Q3XoluPnjBnQAFsztasmM6z2dezJBrQbtserg==} + simple-icons@15.16.0: + resolution: {integrity: sha512-AeyYdQ5BsFe7ONruVRClZ+2921tQIEcHuP9AZdNUR0in1jFeakH0pA9Rkjj0T/RkTH7Icx2jprXxWWY3aaCDJQ==} engines: {node: '>=0.12.18'} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -10056,6 +10166,10 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} @@ -10079,8 +10193,8 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sql-formatter@15.6.9: - resolution: {integrity: sha512-r9VKnkRfKW7jbhTgytwbM+JqmFclQYN9L58Z3UTktuy9V1f1Y+rGK3t70Truh2wIOJzvZkzobAQ2PwGjjXsr6Q==} + sql-formatter@15.6.10: + resolution: {integrity: sha512-0bJOPQrRO/JkjQhiThVayq0hOKnI1tHI+2OTkmT7TGtc6kqS+V7kveeMzRW+RNQGxofmTmet9ILvztyuxv0cJQ==} hasBin: true srcset@4.0.0: @@ -10090,8 +10204,8 @@ packages: ssh-remote-port-forward@1.0.4: resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} - ssh2@1.16.0: - resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} + ssh2@1.17.0: + resolution: {integrity: sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==} engines: {node: '>=10.16.0'} ssri@12.0.0: @@ -10130,8 +10244,8 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - streamx@2.22.1: - resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + streamx@2.23.0: + resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -10247,16 +10361,16 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte-check@4.3.1: - resolution: {integrity: sha512-lkh8gff5gpHLjxIV+IaApMxQhTGnir2pNUAqcNgeKkvK5bT/30Ey/nzBxNLDlkztCH4dP7PixkMt9SWEKFPBWg==} + svelte-check@4.3.2: + resolution: {integrity: sha512-71udP5w2kaSTcX8iV0hn3o2FWlabQHhJTJLIQrCqMsrcOeDUO2VhCQKKCA8AMVHSPwdxLEWkUWh9OKxns5PD9w==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 typescript: '>=5.0.0' - svelte-eslint-parser@1.3.2: - resolution: {integrity: sha512-whla4VlUbwJidn/bNyC3Ho3pBrXnR2CBEkuJwtaURW+wfwgKHPaYtZAmwAkp6HWWKCw1ILZL6iKsFdVY11rpDA==} + svelte-eslint-parser@1.3.3: + resolution: {integrity: sha512-oTrDR8Z7Wnguut7QH3YKh7JR19xv1seB/bz4dxU5J/86eJtZOU4eh0/jZq4dy6tAlz/KROxnkRQspv5ZEt7t+Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 @@ -10267,6 +10381,9 @@ packages: svelte-gestures@5.2.2: resolution: {integrity: sha512-Y+chXPaSx8OsPoFppUwPk8PJzgrZ7xoDJKXeiEc7JBqyKKzXer9hlf8F9O34eFuAWB4/WQEvccACvyBplESL7A==} + svelte-highlight@7.8.4: + resolution: {integrity: sha512-aVp+Q0hH9kI7PlSDrklmFTF4Uj7wYj7UGuqkREnkXlqpEffxr2g6esZcMMaTgECdg5rb2mJqM88+nwS10ecoTg==} + svelte-i18n@4.0.1: resolution: {integrity: sha512-jaykGlGT5PUaaq04JWbJREvivlCnALtT+m87Kbm0fxyYHynkQaxQMnIKHLm2WeIuBRoljzwgyvz0Z6/CMwfdmQ==} engines: {node: '>= 16'} @@ -10306,8 +10423,8 @@ packages: peerDependencies: svelte: ^5.30.2 - svelte@5.38.10: - resolution: {integrity: sha512-UY+OhrWK7WI22bCZ00P/M3HtyWgwJPi9IxSRkoAE2MeAy6kl7ZlZWJZ8RaB+X4KD/G+wjis+cGVnVYaoqbzBqg==} + svelte@5.39.11: + resolution: {integrity: sha512-8MxWVm2+3YwrFbPaxOlT1bbMi6OTenrAgks6soZfiaS8Fptk4EVyRIFhJc3RpO264EeSNwgjWAdki0ufg4zkGw==} engines: {node: '>=18'} svg-parser@2.0.4: @@ -10371,23 +10488,23 @@ packages: peerDependencies: tailwindcss: '>=3.4.17' - tailwindcss@3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + tailwindcss@3.4.18: + resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.1.13: - resolution: {integrity: sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==} + tailwindcss@4.1.14: + resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==} - tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - tar-fs@2.1.3: - resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} + tar-fs@2.1.4: + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.1.0: - resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==} + tar-fs@3.1.1: + resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -10400,8 +10517,8 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + tar@7.5.1: + resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} engines: {node: '>=18'} terser-webpack-plugin@5.3.14: @@ -10429,8 +10546,8 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - testcontainers@11.5.1: - resolution: {integrity: sha512-YSSP4lSJB8498zTeu4HYTZYgSky54ozBmIDdC8PFU5inj+vBo5hPpilhcYTgmsqsYjrXOJGV7jl0MWByS7GwuA==} + testcontainers@11.7.1: + resolution: {integrity: sha512-fjut+07G4Avp6Lly/6hQePpUpQFv9ZyQd+7JC5iCDKg+dWa2Sw7fXD3pBrkzslYFfKqGx9M6kyIaLpg9VeMsjw==} text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} @@ -10446,6 +10563,12 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thingies@2.5.0: + resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + three@0.179.1: resolution: {integrity: sha512-5y/elSIQbrvKOISxpwXCR4sQqHtGiOI+MKLc3SsBdDXA2hz3Mdp3X59aUp8DyybMa34aeBwbFTpdoLJaUDEWSw==} @@ -10551,6 +10674,12 @@ packages: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} + tree-dump@1.1.0: + resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -10637,8 +10766,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.43.0: - resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} + typescript-eslint@8.45.0: + resolution: {integrity: sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10649,8 +10778,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -10684,8 +10813,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.12.0: - resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} + undici-types@7.14.0: + resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} undici@7.16.0: resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} @@ -10846,10 +10975,6 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - validator@13.15.15: resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} engines: {node: '>= 0.10'} @@ -10870,8 +10995,8 @@ packages: vfile-message@2.0.4: resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@4.2.1: resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} @@ -10896,8 +11021,8 @@ packages: vite: optional: true - vite@7.1.5: - resolution: {integrity: sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==} + vite@7.1.9: + resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -11017,18 +11142,21 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true - webpack-dev-middleware@5.3.4: - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} + webpack-dev-middleware@7.4.5: + resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==} + engines: {node: '>= 18.12.0'} peerDependencies: - webpack: ^4.0.0 || ^5.0.0 + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true - webpack-dev-server@4.15.2: - resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} - engines: {node: '>= 12.13.0'} + webpack-dev-server@5.2.2: + resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==} + engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: - webpack: ^4.37.0 || ^5.0.0 + webpack: ^5.0.0 webpack-cli: '*' peerDependenciesMeta: webpack: @@ -11065,6 +11193,16 @@ packages: webpack-cli: optional: true + webpack@5.102.1: + resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpackbar@6.0.1: resolution: {integrity: sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==} engines: {node: '>=14.21.3'} @@ -11199,6 +11337,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} @@ -11284,8 +11426,8 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} - zimmerframe@1.1.2: - resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} @@ -11301,119 +11443,126 @@ snapshots: '@adobe/css-tools@4.4.4': {} - '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0)(search-insights@2.17.3)': + '@algolia/abtesting@1.6.0': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0) + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 + + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0)': + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0) - '@algolia/client-search': 5.29.0 - algoliasearch: 5.29.0 + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0) + '@algolia/client-search': 5.40.0 + algoliasearch: 5.40.0 - '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0)': + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0)': dependencies: - '@algolia/client-search': 5.29.0 - algoliasearch: 5.29.0 + '@algolia/client-search': 5.40.0 + algoliasearch: 5.40.0 - '@algolia/client-abtesting@5.29.0': + '@algolia/client-abtesting@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 - '@algolia/client-analytics@5.29.0': + '@algolia/client-analytics@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 - '@algolia/client-common@5.29.0': {} + '@algolia/client-common@5.40.0': {} - '@algolia/client-insights@5.29.0': + '@algolia/client-insights@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 - '@algolia/client-personalization@5.29.0': + '@algolia/client-personalization@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 - '@algolia/client-query-suggestions@5.29.0': + '@algolia/client-query-suggestions@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 - '@algolia/client-search@5.29.0': + '@algolia/client-search@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 '@algolia/events@4.0.1': {} - '@algolia/ingestion@1.29.0': + '@algolia/ingestion@1.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 - '@algolia/monitoring@1.29.0': + '@algolia/monitoring@1.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 - '@algolia/recommend@5.29.0': + '@algolia/recommend@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/client-common': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 - '@algolia/requester-browser-xhr@5.29.0': + '@algolia/requester-browser-xhr@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 + '@algolia/client-common': 5.40.0 - '@algolia/requester-fetch@5.29.0': + '@algolia/requester-fetch@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 + '@algolia/client-common': 5.40.0 - '@algolia/requester-node-http@5.29.0': + '@algolia/requester-node-http@5.40.0': dependencies: - '@algolia/client-common': 5.29.0 + '@algolia/client-common': 5.40.0 '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@angular-devkit/core@19.2.15(chokidar@4.0.3)': dependencies: @@ -11426,11 +11575,22 @@ snapshots: optionalDependencies: chokidar: 4.0.3 - '@angular-devkit/schematics-cli@19.2.15(@types/node@22.18.5)(chokidar@4.0.3)': + '@angular-devkit/core@19.2.17(chokidar@4.0.3)': + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + jsonc-parser: 3.3.1 + picomatch: 4.0.2 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 4.0.3 + + '@angular-devkit/schematics-cli@19.2.15(@types/node@22.18.9)(chokidar@4.0.3)': dependencies: '@angular-devkit/core': 19.2.15(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) - '@inquirer/prompts': 7.3.2(@types/node@22.18.5) + '@inquirer/prompts': 7.3.2(@types/node@22.18.9) ansi-colors: 4.1.3 symbol-observable: 4.0.0 yargs-parser: 21.1.1 @@ -11448,6 +11608,16 @@ snapshots: transitivePeerDependencies: - chokidar + '@angular-devkit/schematics@19.2.17(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.2.17(chokidar@4.0.3) + jsonc-parser: 3.3.1 + magic-string: 0.30.17 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + '@asamuzakjp/css-color@3.2.0': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) @@ -11462,15 +11632,15 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.887.0 - '@aws-sdk/util-locate-window': 3.873.0 + '@aws-sdk/types': 3.901.0 + '@aws-sdk/util-locate-window': 3.893.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.887.0 + '@aws-sdk/types': 3.901.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -11479,366 +11649,365 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.887.0 + '@aws-sdk/types': 3.901.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-sesv2@3.890.0': + '@aws-sdk/client-sesv2@3.907.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.890.0 - '@aws-sdk/credential-provider-node': 3.890.0 - '@aws-sdk/middleware-host-header': 3.887.0 - '@aws-sdk/middleware-logger': 3.887.0 - '@aws-sdk/middleware-recursion-detection': 3.887.0 - '@aws-sdk/middleware-user-agent': 3.890.0 - '@aws-sdk/region-config-resolver': 3.890.0 - '@aws-sdk/signature-v4-multi-region': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@aws-sdk/util-endpoints': 3.890.0 - '@aws-sdk/util-user-agent-browser': 3.887.0 - '@aws-sdk/util-user-agent-node': 3.890.0 - '@smithy/config-resolver': 4.2.2 - '@smithy/core': 3.11.0 - '@smithy/fetch-http-handler': 5.2.1 - '@smithy/hash-node': 4.1.1 - '@smithy/invalid-dependency': 4.1.1 - '@smithy/middleware-content-length': 4.1.1 - '@smithy/middleware-endpoint': 4.2.2 - '@smithy/middleware-retry': 4.2.2 - '@smithy/middleware-serde': 4.1.1 - '@smithy/middleware-stack': 4.1.1 - '@smithy/node-config-provider': 4.2.2 - '@smithy/node-http-handler': 4.2.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 - '@smithy/url-parser': 4.1.1 - '@smithy/util-base64': 4.1.0 - '@smithy/util-body-length-browser': 4.1.0 - '@smithy/util-body-length-node': 4.1.0 - '@smithy/util-defaults-mode-browser': 4.1.2 - '@smithy/util-defaults-mode-node': 4.1.2 - '@smithy/util-endpoints': 3.1.2 - '@smithy/util-middleware': 4.1.1 - '@smithy/util-retry': 4.1.1 - '@smithy/util-utf8': 4.1.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/credential-provider-node': 3.907.0 + '@aws-sdk/middleware-host-header': 3.901.0 + '@aws-sdk/middleware-logger': 3.901.0 + '@aws-sdk/middleware-recursion-detection': 3.901.0 + '@aws-sdk/middleware-user-agent': 3.907.0 + '@aws-sdk/region-config-resolver': 3.901.0 + '@aws-sdk/signature-v4-multi-region': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@aws-sdk/util-endpoints': 3.901.0 + '@aws-sdk/util-user-agent-browser': 3.907.0 + '@aws-sdk/util-user-agent-node': 3.907.0 + '@smithy/config-resolver': 4.3.0 + '@smithy/core': 3.15.0 + '@smithy/fetch-http-handler': 5.3.1 + '@smithy/hash-node': 4.2.0 + '@smithy/invalid-dependency': 4.2.0 + '@smithy/middleware-content-length': 4.2.0 + '@smithy/middleware-endpoint': 4.3.1 + '@smithy/middleware-retry': 4.4.1 + '@smithy/middleware-serde': 4.2.0 + '@smithy/middleware-stack': 4.2.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/node-http-handler': 4.3.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 + '@smithy/url-parser': 4.2.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.0 + '@smithy/util-defaults-mode-node': 4.2.1 + '@smithy/util-endpoints': 3.2.0 + '@smithy/util-middleware': 4.2.0 + '@smithy/util-retry': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.890.0': + '@aws-sdk/client-sso@3.907.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.890.0 - '@aws-sdk/middleware-host-header': 3.887.0 - '@aws-sdk/middleware-logger': 3.887.0 - '@aws-sdk/middleware-recursion-detection': 3.887.0 - '@aws-sdk/middleware-user-agent': 3.890.0 - '@aws-sdk/region-config-resolver': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@aws-sdk/util-endpoints': 3.890.0 - '@aws-sdk/util-user-agent-browser': 3.887.0 - '@aws-sdk/util-user-agent-node': 3.890.0 - '@smithy/config-resolver': 4.2.2 - '@smithy/core': 3.11.0 - '@smithy/fetch-http-handler': 5.2.1 - '@smithy/hash-node': 4.1.1 - '@smithy/invalid-dependency': 4.1.1 - '@smithy/middleware-content-length': 4.1.1 - '@smithy/middleware-endpoint': 4.2.2 - '@smithy/middleware-retry': 4.2.2 - '@smithy/middleware-serde': 4.1.1 - '@smithy/middleware-stack': 4.1.1 - '@smithy/node-config-provider': 4.2.2 - '@smithy/node-http-handler': 4.2.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 - '@smithy/url-parser': 4.1.1 - '@smithy/util-base64': 4.1.0 - '@smithy/util-body-length-browser': 4.1.0 - '@smithy/util-body-length-node': 4.1.0 - '@smithy/util-defaults-mode-browser': 4.1.2 - '@smithy/util-defaults-mode-node': 4.1.2 - '@smithy/util-endpoints': 3.1.2 - '@smithy/util-middleware': 4.1.1 - '@smithy/util-retry': 4.1.1 - '@smithy/util-utf8': 4.1.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/middleware-host-header': 3.901.0 + '@aws-sdk/middleware-logger': 3.901.0 + '@aws-sdk/middleware-recursion-detection': 3.901.0 + '@aws-sdk/middleware-user-agent': 3.907.0 + '@aws-sdk/region-config-resolver': 3.901.0 + '@aws-sdk/types': 3.901.0 + '@aws-sdk/util-endpoints': 3.901.0 + '@aws-sdk/util-user-agent-browser': 3.907.0 + '@aws-sdk/util-user-agent-node': 3.907.0 + '@smithy/config-resolver': 4.3.0 + '@smithy/core': 3.15.0 + '@smithy/fetch-http-handler': 5.3.1 + '@smithy/hash-node': 4.2.0 + '@smithy/invalid-dependency': 4.2.0 + '@smithy/middleware-content-length': 4.2.0 + '@smithy/middleware-endpoint': 4.3.1 + '@smithy/middleware-retry': 4.4.1 + '@smithy/middleware-serde': 4.2.0 + '@smithy/middleware-stack': 4.2.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/node-http-handler': 4.3.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 + '@smithy/url-parser': 4.2.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.0 + '@smithy/util-defaults-mode-node': 4.2.1 + '@smithy/util-endpoints': 3.2.0 + '@smithy/util-middleware': 4.2.0 + '@smithy/util-retry': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.890.0': + '@aws-sdk/core@3.907.0': dependencies: - '@aws-sdk/types': 3.887.0 - '@aws-sdk/xml-builder': 3.887.0 - '@smithy/core': 3.11.0 - '@smithy/node-config-provider': 4.2.2 - '@smithy/property-provider': 4.1.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/signature-v4': 5.2.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 - '@smithy/util-base64': 4.1.0 - '@smithy/util-body-length-browser': 4.1.0 - '@smithy/util-middleware': 4.1.1 - '@smithy/util-utf8': 4.1.0 - fast-xml-parser: 5.2.5 + '@aws-sdk/types': 3.901.0 + '@aws-sdk/xml-builder': 3.901.0 + '@smithy/core': 3.15.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/property-provider': 4.2.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/signature-v4': 5.3.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-middleware': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.890.0': + '@aws-sdk/credential-provider-env@3.907.0': dependencies: - '@aws-sdk/core': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/property-provider': 4.1.1 - '@smithy/types': 4.5.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/property-provider': 4.2.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.890.0': + '@aws-sdk/credential-provider-http@3.907.0': dependencies: - '@aws-sdk/core': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/fetch-http-handler': 5.2.1 - '@smithy/node-http-handler': 4.2.1 - '@smithy/property-provider': 4.1.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 - '@smithy/util-stream': 4.3.1 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/fetch-http-handler': 5.3.1 + '@smithy/node-http-handler': 4.3.0 + '@smithy/property-provider': 4.2.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 + '@smithy/util-stream': 4.5.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.890.0': + '@aws-sdk/credential-provider-ini@3.907.0': dependencies: - '@aws-sdk/core': 3.890.0 - '@aws-sdk/credential-provider-env': 3.890.0 - '@aws-sdk/credential-provider-http': 3.890.0 - '@aws-sdk/credential-provider-process': 3.890.0 - '@aws-sdk/credential-provider-sso': 3.890.0 - '@aws-sdk/credential-provider-web-identity': 3.890.0 - '@aws-sdk/nested-clients': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/credential-provider-imds': 4.1.2 - '@smithy/property-provider': 4.1.1 - '@smithy/shared-ini-file-loader': 4.2.0 - '@smithy/types': 4.5.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/credential-provider-env': 3.907.0 + '@aws-sdk/credential-provider-http': 3.907.0 + '@aws-sdk/credential-provider-process': 3.907.0 + '@aws-sdk/credential-provider-sso': 3.907.0 + '@aws-sdk/credential-provider-web-identity': 3.907.0 + '@aws-sdk/nested-clients': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/credential-provider-imds': 4.2.0 + '@smithy/property-provider': 4.2.0 + '@smithy/shared-ini-file-loader': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.890.0': + '@aws-sdk/credential-provider-node@3.907.0': dependencies: - '@aws-sdk/credential-provider-env': 3.890.0 - '@aws-sdk/credential-provider-http': 3.890.0 - '@aws-sdk/credential-provider-ini': 3.890.0 - '@aws-sdk/credential-provider-process': 3.890.0 - '@aws-sdk/credential-provider-sso': 3.890.0 - '@aws-sdk/credential-provider-web-identity': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/credential-provider-imds': 4.1.2 - '@smithy/property-provider': 4.1.1 - '@smithy/shared-ini-file-loader': 4.2.0 - '@smithy/types': 4.5.0 + '@aws-sdk/credential-provider-env': 3.907.0 + '@aws-sdk/credential-provider-http': 3.907.0 + '@aws-sdk/credential-provider-ini': 3.907.0 + '@aws-sdk/credential-provider-process': 3.907.0 + '@aws-sdk/credential-provider-sso': 3.907.0 + '@aws-sdk/credential-provider-web-identity': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/credential-provider-imds': 4.2.0 + '@smithy/property-provider': 4.2.0 + '@smithy/shared-ini-file-loader': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.890.0': + '@aws-sdk/credential-provider-process@3.907.0': dependencies: - '@aws-sdk/core': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/property-provider': 4.1.1 - '@smithy/shared-ini-file-loader': 4.2.0 - '@smithy/types': 4.5.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/property-provider': 4.2.0 + '@smithy/shared-ini-file-loader': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.890.0': + '@aws-sdk/credential-provider-sso@3.907.0': dependencies: - '@aws-sdk/client-sso': 3.890.0 - '@aws-sdk/core': 3.890.0 - '@aws-sdk/token-providers': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/property-provider': 4.1.1 - '@smithy/shared-ini-file-loader': 4.2.0 - '@smithy/types': 4.5.0 + '@aws-sdk/client-sso': 3.907.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/token-providers': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/property-provider': 4.2.0 + '@smithy/shared-ini-file-loader': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.890.0': + '@aws-sdk/credential-provider-web-identity@3.907.0': dependencies: - '@aws-sdk/core': 3.890.0 - '@aws-sdk/nested-clients': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/property-provider': 4.1.1 - '@smithy/shared-ini-file-loader': 4.2.0 - '@smithy/types': 4.5.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/nested-clients': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/property-provider': 4.2.0 + '@smithy/shared-ini-file-loader': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/middleware-host-header@3.887.0': + '@aws-sdk/middleware-host-header@3.901.0': dependencies: - '@aws-sdk/types': 3.887.0 - '@smithy/protocol-http': 5.2.1 - '@smithy/types': 4.5.0 + '@aws-sdk/types': 3.901.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.887.0': + '@aws-sdk/middleware-logger@3.901.0': dependencies: - '@aws-sdk/types': 3.887.0 - '@smithy/types': 4.5.0 + '@aws-sdk/types': 3.901.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.887.0': + '@aws-sdk/middleware-recursion-detection@3.901.0': dependencies: - '@aws-sdk/types': 3.887.0 + '@aws-sdk/types': 3.901.0 '@aws/lambda-invoke-store': 0.0.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/types': 4.5.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.890.0': + '@aws-sdk/middleware-sdk-s3@3.907.0': dependencies: - '@aws-sdk/core': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@aws-sdk/util-arn-parser': 3.873.0 - '@smithy/core': 3.11.0 - '@smithy/node-config-provider': 4.2.2 - '@smithy/protocol-http': 5.2.1 - '@smithy/signature-v4': 5.2.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 - '@smithy/util-config-provider': 4.1.0 - '@smithy/util-middleware': 4.1.1 - '@smithy/util-stream': 4.3.1 - '@smithy/util-utf8': 4.1.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@aws-sdk/util-arn-parser': 3.893.0 + '@smithy/core': 3.15.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/signature-v4': 5.3.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.0 + '@smithy/util-stream': 4.5.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.890.0': + '@aws-sdk/middleware-user-agent@3.907.0': dependencies: - '@aws-sdk/core': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@aws-sdk/util-endpoints': 3.890.0 - '@smithy/core': 3.11.0 - '@smithy/protocol-http': 5.2.1 - '@smithy/types': 4.5.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@aws-sdk/util-endpoints': 3.901.0 + '@smithy/core': 3.15.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.890.0': + '@aws-sdk/nested-clients@3.907.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.890.0 - '@aws-sdk/middleware-host-header': 3.887.0 - '@aws-sdk/middleware-logger': 3.887.0 - '@aws-sdk/middleware-recursion-detection': 3.887.0 - '@aws-sdk/middleware-user-agent': 3.890.0 - '@aws-sdk/region-config-resolver': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@aws-sdk/util-endpoints': 3.890.0 - '@aws-sdk/util-user-agent-browser': 3.887.0 - '@aws-sdk/util-user-agent-node': 3.890.0 - '@smithy/config-resolver': 4.2.2 - '@smithy/core': 3.11.0 - '@smithy/fetch-http-handler': 5.2.1 - '@smithy/hash-node': 4.1.1 - '@smithy/invalid-dependency': 4.1.1 - '@smithy/middleware-content-length': 4.1.1 - '@smithy/middleware-endpoint': 4.2.2 - '@smithy/middleware-retry': 4.2.2 - '@smithy/middleware-serde': 4.1.1 - '@smithy/middleware-stack': 4.1.1 - '@smithy/node-config-provider': 4.2.2 - '@smithy/node-http-handler': 4.2.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 - '@smithy/url-parser': 4.1.1 - '@smithy/util-base64': 4.1.0 - '@smithy/util-body-length-browser': 4.1.0 - '@smithy/util-body-length-node': 4.1.0 - '@smithy/util-defaults-mode-browser': 4.1.2 - '@smithy/util-defaults-mode-node': 4.1.2 - '@smithy/util-endpoints': 3.1.2 - '@smithy/util-middleware': 4.1.1 - '@smithy/util-retry': 4.1.1 - '@smithy/util-utf8': 4.1.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/middleware-host-header': 3.901.0 + '@aws-sdk/middleware-logger': 3.901.0 + '@aws-sdk/middleware-recursion-detection': 3.901.0 + '@aws-sdk/middleware-user-agent': 3.907.0 + '@aws-sdk/region-config-resolver': 3.901.0 + '@aws-sdk/types': 3.901.0 + '@aws-sdk/util-endpoints': 3.901.0 + '@aws-sdk/util-user-agent-browser': 3.907.0 + '@aws-sdk/util-user-agent-node': 3.907.0 + '@smithy/config-resolver': 4.3.0 + '@smithy/core': 3.15.0 + '@smithy/fetch-http-handler': 5.3.1 + '@smithy/hash-node': 4.2.0 + '@smithy/invalid-dependency': 4.2.0 + '@smithy/middleware-content-length': 4.2.0 + '@smithy/middleware-endpoint': 4.3.1 + '@smithy/middleware-retry': 4.4.1 + '@smithy/middleware-serde': 4.2.0 + '@smithy/middleware-stack': 4.2.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/node-http-handler': 4.3.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 + '@smithy/url-parser': 4.2.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.0 + '@smithy/util-defaults-mode-node': 4.2.1 + '@smithy/util-endpoints': 3.2.0 + '@smithy/util-middleware': 4.2.0 + '@smithy/util-retry': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.890.0': + '@aws-sdk/region-config-resolver@3.901.0': dependencies: - '@aws-sdk/types': 3.887.0 - '@smithy/node-config-provider': 4.2.2 - '@smithy/types': 4.5.0 - '@smithy/util-config-provider': 4.1.0 - '@smithy/util-middleware': 4.1.1 + '@aws-sdk/types': 3.901.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/types': 4.6.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.890.0': + '@aws-sdk/signature-v4-multi-region@3.907.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/protocol-http': 5.2.1 - '@smithy/signature-v4': 5.2.1 - '@smithy/types': 4.5.0 + '@aws-sdk/middleware-sdk-s3': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/signature-v4': 5.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.890.0': + '@aws-sdk/token-providers@3.907.0': dependencies: - '@aws-sdk/core': 3.890.0 - '@aws-sdk/nested-clients': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/property-provider': 4.1.1 - '@smithy/shared-ini-file-loader': 4.2.0 - '@smithy/types': 4.5.0 + '@aws-sdk/core': 3.907.0 + '@aws-sdk/nested-clients': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/property-provider': 4.2.0 + '@smithy/shared-ini-file-loader': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/types@3.887.0': + '@aws-sdk/types@3.901.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/util-arn-parser@3.873.0': + '@aws-sdk/util-arn-parser@3.893.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.890.0': + '@aws-sdk/util-endpoints@3.901.0': dependencies: - '@aws-sdk/types': 3.887.0 - '@smithy/types': 4.5.0 - '@smithy/url-parser': 4.1.1 - '@smithy/util-endpoints': 3.1.2 + '@aws-sdk/types': 3.901.0 + '@smithy/types': 4.6.0 + '@smithy/url-parser': 4.2.0 + '@smithy/util-endpoints': 3.2.0 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.873.0': + '@aws-sdk/util-locate-window@3.893.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.887.0': + '@aws-sdk/util-user-agent-browser@3.907.0': dependencies: - '@aws-sdk/types': 3.887.0 - '@smithy/types': 4.5.0 + '@aws-sdk/types': 3.901.0 + '@smithy/types': 4.6.0 bowser: 2.12.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.890.0': + '@aws-sdk/util-user-agent-node@3.907.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.890.0 - '@aws-sdk/types': 3.887.0 - '@smithy/node-config-provider': 4.2.2 - '@smithy/types': 4.5.0 + '@aws-sdk/middleware-user-agent': 3.907.0 + '@aws-sdk/types': 3.901.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.887.0': + '@aws-sdk/xml-builder@3.901.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 + fast-xml-parser: 5.2.5 tslib: 2.8.1 '@aws/lambda-invoke-store@0.0.1': {} @@ -11876,7 +12045,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/types': 7.28.4 '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': @@ -11887,7 +12056,7 @@ snapshots: dependencies: '@babel/compat-data': 7.27.7 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.3 + browserslist: 4.26.3 lru-cache: 5.1.1 semver: 6.3.1 @@ -12861,21 +13030,21 @@ snapshots: '@docsearch/css@3.9.0': {} - '@docsearch/react@3.9.0(@algolia/client-search@5.29.0)(@types/react@19.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': + '@docsearch/react@3.9.0(@algolia/client-search@5.40.0)(@types/react@19.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.29.0)(algoliasearch@5.29.0) + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.40.0)(algoliasearch@5.40.0) '@docsearch/css': 3.9.0 - algoliasearch: 5.29.0 + algoliasearch: 5.40.0 optionalDependencies: - '@types/react': 19.1.13 + '@types/react': 19.2.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/babel@3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/babel@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/core': 7.27.7 '@babel/generator': 7.28.3 @@ -12887,14 +13056,13 @@ snapshots: '@babel/runtime': 7.28.4 '@babel/runtime-corejs3': 7.27.6 '@babel/traverse': 7.28.4 - '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/logger': 3.9.1 + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.3.0 tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' - - acorn - esbuild - react - react-dom @@ -12902,38 +13070,37 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/bundler@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: '@babel/core': 7.27.7 - '@docusaurus/babel': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/cssnano-preset': 3.8.1 - '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.100.2) + '@docusaurus/babel': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/cssnano-preset': 3.9.1 + '@docusaurus/logger': 3.9.1 + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.102.1) clean-css: 5.3.3 - copy-webpack-plugin: 11.0.0(webpack@5.100.2) - css-loader: 6.11.0(webpack@5.100.2) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.100.2) + copy-webpack-plugin: 11.0.0(webpack@5.102.1) + css-loader: 6.11.0(webpack@5.102.1) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.102.1) cssnano: 6.1.2(postcss@8.5.6) - file-loader: 6.2.0(webpack@5.100.2) + file-loader: 6.2.0(webpack@5.102.1) html-minifier-terser: 7.2.0 - mini-css-extract-plugin: 2.9.2(webpack@5.100.2) - null-loader: 4.0.1(webpack@5.100.2) + mini-css-extract-plugin: 2.9.2(webpack@5.102.1) + null-loader: 4.0.1(webpack@5.102.1) postcss: 8.5.6 - postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.9.2)(webpack@5.100.2) + postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.9.3)(webpack@5.102.1) postcss-preset-env: 10.2.4(postcss@8.5.6) - terser-webpack-plugin: 5.3.14(webpack@5.100.2) + terser-webpack-plugin: 5.3.14(webpack@5.102.1) tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2))(webpack@5.100.2) - webpack: 5.100.2 - webpackbar: 6.0.1(webpack@5.100.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.102.1))(webpack@5.102.1) + webpack: 5.102.1 + webpackbar: 6.0.1(webpack@5.102.1) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - csso - esbuild - lightningcss @@ -12944,16 +13111,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/core@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/babel': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/bundler': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@18.3.1) + '@docusaurus/babel': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/bundler': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.1 + '@docusaurus/mdx-loader': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@18.3.1) boxen: 6.2.1 chalk: 4.1.2 chokidar: 3.6.0 @@ -12968,7 +13135,7 @@ snapshots: execa: 5.1.1 fs-extra: 11.3.0 html-tags: 3.3.1 - html-webpack-plugin: 5.6.3(webpack@5.100.2) + html-webpack-plugin: 5.6.3(webpack@5.102.1) leven: 3.1.0 lodash: 4.17.21 open: 8.4.2 @@ -12978,18 +13145,18 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.100.2) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.102.1) react-router: 5.3.4(react@18.3.1) react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) react-router-dom: 5.3.4(react@18.3.1) - semver: 7.7.2 + semver: 7.7.3 serve-handler: 6.1.6 tinypool: 1.1.1 tslib: 2.8.1 update-notifier: 6.0.2 - webpack: 5.100.2 + webpack: 5.102.1 webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.100.2) + webpack-dev-server: 5.2.2(webpack@5.102.1) webpack-merge: 6.0.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -12997,7 +13164,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13009,28 +13175,28 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/cssnano-preset@3.8.1': + '@docusaurus/cssnano-preset@3.9.1': dependencies: cssnano-preset-advanced: 6.1.2(postcss@8.5.6) postcss: 8.5.6 postcss-sort-media-queries: 5.2.0(postcss@8.5.6) tslib: 2.8.1 - '@docusaurus/logger@3.8.1': + '@docusaurus/logger@3.9.1': dependencies: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/mdx-loader@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mdx-js/mdx': 3.1.0(acorn@8.15.0) + '@docusaurus/logger': 3.9.1 + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/mdx': 3.1.1 '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.4.0 - file-loader: 6.2.0(webpack@5.100.2) + file-loader: 6.2.0(webpack@5.102.1) fs-extra: 11.3.0 image-size: 2.0.2 mdast-util-mdx: 3.0.0 @@ -13046,22 +13212,21 @@ snapshots: tslib: 2.8.1 unified: 11.0.5 unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2))(webpack@5.100.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.102.1))(webpack@5.102.1) vfile: 6.0.3 - webpack: 5.100.2 + webpack: 5.102.1 transitivePeerDependencies: - '@swc/core' - - acorn - esbuild - supports-color - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 - '@types/react': 19.1.13 + '@types/react': 19.2.2 '@types/react-router-config': 5.0.11 '@types/react-router-dom': 5.3.3 react: 18.3.1 @@ -13070,23 +13235,22 @@ snapshots: react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' transitivePeerDependencies: - '@swc/core' - - acorn - esbuild - supports-color - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-content-blog@3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.1 + '@docusaurus/mdx-loader': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.3.0 @@ -13098,7 +13262,7 @@ snapshots: tslib: 2.8.1 unist-util-visit: 5.0.0 utility-types: 3.11.0 - webpack: 5.100.2 + webpack: 5.102.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -13106,7 +13270,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13118,17 +13281,17 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.1 + '@docusaurus/mdx-loader': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.3.0 @@ -13139,7 +13302,7 @@ snapshots: schema-dts: 1.1.5 tslib: 2.8.1 utility-types: 3.11.0 - webpack: 5.100.2 + webpack: 5.102.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -13147,7 +13310,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13159,18 +13321,18 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-content-pages@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/mdx-loader': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/mdx-loader': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 - webpack: 5.100.2 + webpack: 5.102.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -13178,7 +13340,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13190,12 +13351,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-css-cascade-layers@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -13204,7 +13365,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13218,11 +13378,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-debug@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -13235,7 +13395,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13247,11 +13406,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-google-analytics@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -13262,7 +13421,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13274,11 +13432,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-google-gtag@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -13290,7 +13448,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13302,11 +13459,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-google-tag-manager@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -13317,7 +13474,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13329,14 +13485,14 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-sitemap@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.1 + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -13349,7 +13505,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13361,18 +13516,18 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/plugin-svgr@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@svgr/core': 8.1.0(typescript@5.9.2) - '@svgr/webpack': 8.1.0(typescript@5.9.2) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@svgr/core': 8.1.0(typescript@5.9.3) + '@svgr/webpack': 8.1.0(typescript@5.9.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 - webpack: 5.100.2 + webpack: 5.102.1 transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -13380,7 +13535,6 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' - - acorn - bufferutil - csso - debug @@ -13392,23 +13546,23 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.8.1(@algolia/client-search@5.29.0)(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(@types/react@19.1.13)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.2)': + '@docusaurus/preset-classic@3.9.1(@algolia/client-search@5.40.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(@types/react@19.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-content-pages': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-css-cascade-layers': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-debug': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-google-analytics': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-google-gtag': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-google-tag-manager': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-sitemap': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-svgr': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/theme-classic': 3.8.1(@types/react@19.1.13)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-search-algolia': 3.8.1(@algolia/client-search@5.29.0)(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(@types/react@19.1.13)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.2) - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-blog': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-pages': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-css-cascade-layers': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-debug': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-google-analytics': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-google-gtag': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-google-tag-manager': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-sitemap': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-svgr': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-classic': 3.9.1(@types/react@19.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-search-algolia': 3.9.1(@algolia/client-search@5.40.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(@types/react@19.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -13420,7 +13574,6 @@ snapshots: - '@swc/core' - '@swc/css' - '@types/react' - - acorn - bufferutil - csso - debug @@ -13435,27 +13588,26 @@ snapshots: '@docusaurus/react-loadable@6.0.0(react@18.3.1)': dependencies: - '@types/react': 19.1.13 + '@types/react': 19.2.2 react: 18.3.1 - '@docusaurus/theme-classic@3.8.1(@types/react@19.1.13)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)': + '@docusaurus/theme-classic@3.9.1(@types/react@19.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/plugin-content-pages': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-translations': 3.8.1 - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@18.3.1) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.1 + '@docusaurus/mdx-loader': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/plugin-content-pages': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-translations': 3.9.1 + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@18.3.1) clsx: 2.1.1 - copy-text-to-clipboard: 3.2.0 infima: 0.2.0-alpha.45 lodash: 4.17.21 nprogress: 0.2.0 @@ -13475,7 +13627,6 @@ snapshots: - '@swc/core' - '@swc/css' - '@types/react' - - acorn - bufferutil - csso - debug @@ -13487,15 +13638,15 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/theme-common@3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/mdx-loader': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 - '@types/react': 19.1.13 + '@types/react': 19.2.2 '@types/react-router-config': 5.0.11 clsx: 2.1.1 parse-numeric-range: 1.3.0 @@ -13506,24 +13657,23 @@ snapshots: utility-types: 3.11.0 transitivePeerDependencies: - '@swc/core' - - acorn - esbuild - supports-color - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.8.1(@algolia/client-search@5.29.0)(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(@types/react@19.1.13)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.2)': + '@docusaurus/theme-search-algolia@3.9.1(@algolia/client-search@5.40.0)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(@types/react@19.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.9.3)': dependencies: - '@docsearch/react': 3.9.0(@algolia/client-search@5.29.0)(@types/react@19.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/logger': 3.8.1 - '@docusaurus/plugin-content-docs': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-translations': 3.8.1 - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - algoliasearch: 5.29.0 - algoliasearch-helper: 3.26.0(algoliasearch@5.29.0) + '@docsearch/react': 3.9.0(@algolia/client-search@5.40.0)(@types/react@19.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/logger': 3.9.1 + '@docusaurus/plugin-content-docs': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-translations': 3.9.1 + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + algoliasearch: 5.40.0 + algoliasearch-helper: 3.26.0(algoliasearch@5.40.0) clsx: 2.1.1 eta: 2.2.0 fs-extra: 11.3.0 @@ -13541,7 +13691,6 @@ snapshots: - '@swc/core' - '@swc/css' - '@types/react' - - acorn - bufferutil - csso - debug @@ -13554,41 +13703,40 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-translations@3.8.1': + '@docusaurus/theme-translations@3.9.1': dependencies: fs-extra: 11.3.0 tslib: 2.8.1 - '@docusaurus/tsconfig@3.8.1': {} + '@docusaurus/tsconfig@3.9.1': {} - '@docusaurus/types@3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mdx-js/mdx': 3.1.0(acorn@8.15.0) + '@mdx-js/mdx': 3.1.1 '@types/history': 4.7.11 - '@types/react': 19.1.13 + '@types/mdast': 4.0.4 + '@types/react': 19.2.2 commander: 5.1.0 joi: 17.13.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' utility-types: 3.11.0 - webpack: 5.100.2 + webpack: 5.102.1 webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' - - acorn - esbuild - supports-color - uglify-js - webpack-cli - '@docusaurus/utils-common@3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-common@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' - - acorn - esbuild - react - react-dom @@ -13596,11 +13744,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-validation@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/logger': 3.9.1 + '@docusaurus/utils': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -13608,7 +13756,6 @@ snapshots: tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' - - acorn - esbuild - react - react-dom @@ -13616,14 +13763,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils@3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/logger': 3.9.1 + '@docusaurus/types': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.9.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) escape-string-regexp: 4.0.0 execa: 5.1.1 - file-loader: 6.2.0(webpack@5.100.2) + file-loader: 6.2.0(webpack@5.102.1) fs-extra: 11.3.0 github-slugger: 1.5.0 globby: 11.1.0 @@ -13636,12 +13783,11 @@ snapshots: prompts: 2.4.2 resolve-pathname: 3.0.0 tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2))(webpack@5.100.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.102.1))(webpack@5.102.1) utility-types: 3.11.0 - webpack: 5.100.2 + webpack: 5.102.1 transitivePeerDependencies: - '@swc/core' - - acorn - esbuild - react - react-dom @@ -13657,153 +13803,153 @@ snapshots: '@esbuild/aix-ppc64@0.19.12': optional: true - '@esbuild/aix-ppc64@0.25.9': + '@esbuild/aix-ppc64@0.25.10': optional: true '@esbuild/android-arm64@0.19.12': optional: true - '@esbuild/android-arm64@0.25.9': + '@esbuild/android-arm64@0.25.10': optional: true '@esbuild/android-arm@0.19.12': optional: true - '@esbuild/android-arm@0.25.9': + '@esbuild/android-arm@0.25.10': optional: true '@esbuild/android-x64@0.19.12': optional: true - '@esbuild/android-x64@0.25.9': + '@esbuild/android-x64@0.25.10': optional: true '@esbuild/darwin-arm64@0.19.12': optional: true - '@esbuild/darwin-arm64@0.25.9': + '@esbuild/darwin-arm64@0.25.10': optional: true '@esbuild/darwin-x64@0.19.12': optional: true - '@esbuild/darwin-x64@0.25.9': + '@esbuild/darwin-x64@0.25.10': optional: true '@esbuild/freebsd-arm64@0.19.12': optional: true - '@esbuild/freebsd-arm64@0.25.9': + '@esbuild/freebsd-arm64@0.25.10': optional: true '@esbuild/freebsd-x64@0.19.12': optional: true - '@esbuild/freebsd-x64@0.25.9': + '@esbuild/freebsd-x64@0.25.10': optional: true '@esbuild/linux-arm64@0.19.12': optional: true - '@esbuild/linux-arm64@0.25.9': + '@esbuild/linux-arm64@0.25.10': optional: true '@esbuild/linux-arm@0.19.12': optional: true - '@esbuild/linux-arm@0.25.9': + '@esbuild/linux-arm@0.25.10': optional: true '@esbuild/linux-ia32@0.19.12': optional: true - '@esbuild/linux-ia32@0.25.9': + '@esbuild/linux-ia32@0.25.10': optional: true '@esbuild/linux-loong64@0.19.12': optional: true - '@esbuild/linux-loong64@0.25.9': + '@esbuild/linux-loong64@0.25.10': optional: true '@esbuild/linux-mips64el@0.19.12': optional: true - '@esbuild/linux-mips64el@0.25.9': + '@esbuild/linux-mips64el@0.25.10': optional: true '@esbuild/linux-ppc64@0.19.12': optional: true - '@esbuild/linux-ppc64@0.25.9': + '@esbuild/linux-ppc64@0.25.10': optional: true '@esbuild/linux-riscv64@0.19.12': optional: true - '@esbuild/linux-riscv64@0.25.9': + '@esbuild/linux-riscv64@0.25.10': optional: true '@esbuild/linux-s390x@0.19.12': optional: true - '@esbuild/linux-s390x@0.25.9': + '@esbuild/linux-s390x@0.25.10': optional: true '@esbuild/linux-x64@0.19.12': optional: true - '@esbuild/linux-x64@0.25.9': + '@esbuild/linux-x64@0.25.10': optional: true - '@esbuild/netbsd-arm64@0.25.9': + '@esbuild/netbsd-arm64@0.25.10': optional: true '@esbuild/netbsd-x64@0.19.12': optional: true - '@esbuild/netbsd-x64@0.25.9': + '@esbuild/netbsd-x64@0.25.10': optional: true - '@esbuild/openbsd-arm64@0.25.9': + '@esbuild/openbsd-arm64@0.25.10': optional: true '@esbuild/openbsd-x64@0.19.12': optional: true - '@esbuild/openbsd-x64@0.25.9': + '@esbuild/openbsd-x64@0.25.10': optional: true - '@esbuild/openharmony-arm64@0.25.9': + '@esbuild/openharmony-arm64@0.25.10': optional: true '@esbuild/sunos-x64@0.19.12': optional: true - '@esbuild/sunos-x64@0.25.9': + '@esbuild/sunos-x64@0.25.10': optional: true '@esbuild/win32-arm64@0.19.12': optional: true - '@esbuild/win32-arm64@0.25.9': + '@esbuild/win32-arm64@0.25.10': optional: true '@esbuild/win32-ia32@0.19.12': optional: true - '@esbuild/win32-ia32@0.25.9': + '@esbuild/win32-ia32@0.25.10': optional: true '@esbuild/win32-x64@0.19.12': optional: true - '@esbuild/win32-x64@0.25.9': + '@esbuild/win32-x64@0.25.10': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -13816,12 +13962,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.1': {} + '@eslint/config-helpers@0.4.0': + dependencies: + '@eslint/core': 0.16.0 '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -13836,7 +13988,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.35.0': {} + '@eslint/js@9.37.0': {} '@eslint/object-schema@2.1.6': {} @@ -13845,6 +13997,11 @@ snapshots: '@eslint/core': 0.15.2 levn: 0.4.1 + '@eslint/plugin-kit@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + levn: 0.4.1 + '@faker-js/faker@10.0.0': {} '@fig/complete-commander@3.2.0(commander@11.1.0)': @@ -13863,10 +14020,10 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@formatjs/ecma402-abstract@2.3.4': + '@formatjs/ecma402-abstract@2.3.5': dependencies: '@formatjs/fast-memoize': 2.2.7 - '@formatjs/intl-localematcher': 0.6.1 + '@formatjs/intl-localematcher': 0.6.2 decimal.js: 10.6.0 tslib: 2.8.1 @@ -13874,30 +14031,30 @@ snapshots: dependencies: tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@2.11.2': + '@formatjs/icu-messageformat-parser@2.11.3': dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/icu-skeleton-parser': 1.8.14 + '@formatjs/ecma402-abstract': 2.3.5 + '@formatjs/icu-skeleton-parser': 1.8.15 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@1.8.14': + '@formatjs/icu-skeleton-parser@1.8.15': dependencies: - '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/ecma402-abstract': 2.3.5 tslib: 2.8.1 - '@formatjs/intl-localematcher@0.6.1': + '@formatjs/intl-localematcher@0.6.2': dependencies: tslib: 2.8.1 - '@golevelup/nestjs-discovery@4.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)': + '@golevelup/nestjs-discovery@5.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)': dependencies: '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.2.2)(rxjs@7.8.2) lodash: 4.17.21 - '@grpc/grpc-js@1.13.4': + '@grpc/grpc-js@1.14.0': dependencies: - '@grpc/proto-loader': 0.7.15 + '@grpc/proto-loader': 0.8.0 '@js-sdsl/ordered-map': 4.4.2 '@grpc/proto-loader@0.7.15': @@ -13907,6 +14064,13 @@ snapshots: protobufjs: 7.5.4 yargs: 17.7.2 + '@grpc/proto-loader@0.8.0': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.5.4 + yargs: 17.7.2 + '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': @@ -13924,125 +14088,129 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@img/sharp-darwin-arm64@0.34.3': + '@img/colour@1.0.0': {} + + '@img/sharp-darwin-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.0 + '@img/sharp-libvips-darwin-arm64': 1.2.3 optional: true - '@img/sharp-darwin-x64@0.34.3': + '@img/sharp-darwin-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.0 + '@img/sharp-libvips-darwin-x64': 1.2.3 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.0': + '@img/sharp-libvips-darwin-arm64@1.2.3': optional: true - '@img/sharp-libvips-darwin-x64@1.2.0': + '@img/sharp-libvips-darwin-x64@1.2.3': optional: true - '@img/sharp-libvips-linux-arm64@1.2.0': + '@img/sharp-libvips-linux-arm64@1.2.3': optional: true - '@img/sharp-libvips-linux-arm@1.2.0': + '@img/sharp-libvips-linux-arm@1.2.3': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.0': + '@img/sharp-libvips-linux-ppc64@1.2.3': optional: true - '@img/sharp-libvips-linux-s390x@1.2.0': + '@img/sharp-libvips-linux-s390x@1.2.3': optional: true - '@img/sharp-libvips-linux-x64@1.2.0': + '@img/sharp-libvips-linux-x64@1.2.3': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.0': + '@img/sharp-libvips-linuxmusl-x64@1.2.3': optional: true - '@img/sharp-linux-arm64@0.34.3': + '@img/sharp-linux-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.0 + '@img/sharp-libvips-linux-arm64': 1.2.3 optional: true - '@img/sharp-linux-arm@0.34.3': + '@img/sharp-linux-arm@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.0 + '@img/sharp-libvips-linux-arm': 1.2.3 optional: true - '@img/sharp-linux-ppc64@0.34.3': + '@img/sharp-linux-ppc64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.0 + '@img/sharp-libvips-linux-ppc64': 1.2.3 optional: true - '@img/sharp-linux-s390x@0.34.3': + '@img/sharp-linux-s390x@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.0 + '@img/sharp-libvips-linux-s390x': 1.2.3 optional: true - '@img/sharp-linux-x64@0.34.3': + '@img/sharp-linux-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.0 + '@img/sharp-libvips-linux-x64': 1.2.3 optional: true - '@img/sharp-linuxmusl-arm64@0.34.3': + '@img/sharp-linuxmusl-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 optional: true - '@img/sharp-linuxmusl-x64@0.34.3': + '@img/sharp-linuxmusl-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 optional: true - '@img/sharp-wasm32@0.34.3': + '@img/sharp-wasm32@0.34.4': dependencies: '@emnapi/runtime': 1.5.0 optional: true - '@img/sharp-win32-arm64@0.34.3': + '@img/sharp-win32-arm64@0.34.4': optional: true - '@img/sharp-win32-ia32@0.34.3': + '@img/sharp-win32-ia32@0.34.4': optional: true - '@img/sharp-win32-x64@0.34.3': + '@img/sharp-win32-x64@0.34.4': optional: true - '@immich/ui@0.29.0(@internationalized/date@3.8.2)(svelte@5.38.10)': + '@immich/ui@0.34.2(@internationalized/date@3.8.2)(svelte@5.39.11)': dependencies: '@mdi/js': 7.4.47 - bits-ui: 2.9.8(@internationalized/date@3.8.2)(svelte@5.38.10) - simple-icons: 15.15.0 - svelte: 5.38.10 + bits-ui: 2.9.8(@internationalized/date@3.8.2)(svelte@5.39.11) + luxon: 3.7.2 + simple-icons: 15.16.0 + svelte: 5.39.11 + svelte-highlight: 7.8.4 tailwind-merge: 3.3.1 - tailwind-variants: 3.1.1(tailwind-merge@3.3.1)(tailwindcss@4.1.13) - tailwindcss: 4.1.13 + tailwind-variants: 3.1.1(tailwind-merge@3.3.1)(tailwindcss@4.1.14) + tailwindcss: 4.1.14 transitivePeerDependencies: - '@internationalized/date' - '@inquirer/checkbox@4.2.1(@types/node@22.18.5)': + '@inquirer/checkbox@4.2.1(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/type': 3.0.8(@types/node@22.18.9) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/confirm@5.1.15(@types/node@22.18.5)': + '@inquirer/confirm@5.1.15(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) + '@inquirer/type': 3.0.8(@types/node@22.18.9) optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/core@10.1.15(@types/node@22.18.5)': + '@inquirer/core@10.1.15(@types/node@22.18.9)': dependencies: '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/type': 3.0.8(@types/node@22.18.9) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -14050,121 +14218,121 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/editor@4.2.17(@types/node@22.18.5)': + '@inquirer/editor@4.2.17(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) - '@inquirer/external-editor': 1.0.2(@types/node@22.18.5) - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) + '@inquirer/external-editor': 1.0.2(@types/node@22.18.9) + '@inquirer/type': 3.0.8(@types/node@22.18.9) optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/expand@4.0.17(@types/node@22.18.5)': + '@inquirer/expand@4.0.17(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) + '@inquirer/type': 3.0.8(@types/node@22.18.9) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/external-editor@1.0.2(@types/node@22.18.5)': + '@inquirer/external-editor@1.0.2(@types/node@22.18.9)': dependencies: chardet: 2.1.0 iconv-lite: 0.7.0 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@inquirer/figures@1.0.13': {} - '@inquirer/input@4.2.1(@types/node@22.18.5)': + '@inquirer/input@4.2.1(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) + '@inquirer/type': 3.0.8(@types/node@22.18.9) optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/number@3.0.17(@types/node@22.18.5)': + '@inquirer/number@3.0.17(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) + '@inquirer/type': 3.0.8(@types/node@22.18.9) optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/password@4.0.17(@types/node@22.18.5)': + '@inquirer/password@4.0.17(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) + '@inquirer/type': 3.0.8(@types/node@22.18.9) ansi-escapes: 4.3.2 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/prompts@7.3.2(@types/node@22.18.5)': + '@inquirer/prompts@7.3.2(@types/node@22.18.9)': dependencies: - '@inquirer/checkbox': 4.2.1(@types/node@22.18.5) - '@inquirer/confirm': 5.1.15(@types/node@22.18.5) - '@inquirer/editor': 4.2.17(@types/node@22.18.5) - '@inquirer/expand': 4.0.17(@types/node@22.18.5) - '@inquirer/input': 4.2.1(@types/node@22.18.5) - '@inquirer/number': 3.0.17(@types/node@22.18.5) - '@inquirer/password': 4.0.17(@types/node@22.18.5) - '@inquirer/rawlist': 4.1.5(@types/node@22.18.5) - '@inquirer/search': 3.1.0(@types/node@22.18.5) - '@inquirer/select': 4.3.1(@types/node@22.18.5) + '@inquirer/checkbox': 4.2.1(@types/node@22.18.9) + '@inquirer/confirm': 5.1.15(@types/node@22.18.9) + '@inquirer/editor': 4.2.17(@types/node@22.18.9) + '@inquirer/expand': 4.0.17(@types/node@22.18.9) + '@inquirer/input': 4.2.1(@types/node@22.18.9) + '@inquirer/number': 3.0.17(@types/node@22.18.9) + '@inquirer/password': 4.0.17(@types/node@22.18.9) + '@inquirer/rawlist': 4.1.5(@types/node@22.18.9) + '@inquirer/search': 3.1.0(@types/node@22.18.9) + '@inquirer/select': 4.3.1(@types/node@22.18.9) optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/prompts@7.8.0(@types/node@22.18.5)': + '@inquirer/prompts@7.8.0(@types/node@22.18.9)': dependencies: - '@inquirer/checkbox': 4.2.1(@types/node@22.18.5) - '@inquirer/confirm': 5.1.15(@types/node@22.18.5) - '@inquirer/editor': 4.2.17(@types/node@22.18.5) - '@inquirer/expand': 4.0.17(@types/node@22.18.5) - '@inquirer/input': 4.2.1(@types/node@22.18.5) - '@inquirer/number': 3.0.17(@types/node@22.18.5) - '@inquirer/password': 4.0.17(@types/node@22.18.5) - '@inquirer/rawlist': 4.1.5(@types/node@22.18.5) - '@inquirer/search': 3.1.0(@types/node@22.18.5) - '@inquirer/select': 4.3.1(@types/node@22.18.5) + '@inquirer/checkbox': 4.2.1(@types/node@22.18.9) + '@inquirer/confirm': 5.1.15(@types/node@22.18.9) + '@inquirer/editor': 4.2.17(@types/node@22.18.9) + '@inquirer/expand': 4.0.17(@types/node@22.18.9) + '@inquirer/input': 4.2.1(@types/node@22.18.9) + '@inquirer/number': 3.0.17(@types/node@22.18.9) + '@inquirer/password': 4.0.17(@types/node@22.18.9) + '@inquirer/rawlist': 4.1.5(@types/node@22.18.9) + '@inquirer/search': 3.1.0(@types/node@22.18.9) + '@inquirer/select': 4.3.1(@types/node@22.18.9) optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/rawlist@4.1.5(@types/node@22.18.5)': + '@inquirer/rawlist@4.1.5(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) + '@inquirer/type': 3.0.8(@types/node@22.18.9) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/search@3.1.0(@types/node@22.18.5)': + '@inquirer/search@3.1.0(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/type': 3.0.8(@types/node@22.18.9) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/select@4.3.1(@types/node@22.18.5)': + '@inquirer/select@4.3.1(@types/node@22.18.9)': dependencies: - '@inquirer/core': 10.1.15(@types/node@22.18.5) + '@inquirer/core': 10.1.15(@types/node@22.18.9) '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@22.18.5) + '@inquirer/type': 3.0.8(@types/node@22.18.9) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@inquirer/type@3.0.8(@types/node@22.18.5)': + '@inquirer/type@3.0.8(@types/node@22.18.9)': optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@internationalized/date@3.8.2': dependencies: '@swc/helpers': 0.5.17 - '@ioredis/commands@1.3.0': {} + '@ioredis/commands@1.4.0': {} '@isaacs/balanced-match@4.0.1': {} @@ -14196,36 +14364,71 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/yargs': 17.0.33 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.6': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.30': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 '@js-sdsl/ordered-map@4.4.2': {} + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/buffers@1.2.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@1.20.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) + '@jsonjoy.com/buffers': 1.2.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 1.2.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + tslib: 2.8.1 + '@koa/cors@5.0.0': dependencies: vary: 1.1.2 @@ -14239,12 +14442,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@koddsson/eslint-plugin-tscompat@0.2.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@koddsson/eslint-plugin-tscompat@0.2.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@mdn/browser-compat-data': 6.0.27 - '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - browserslist: 4.25.3 + '@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + browserslist: 4.26.3 transitivePeerDependencies: - eslint - supports-color @@ -14273,14 +14476,14 @@ snapshots: '@mapbox/node-pre-gyp@1.0.11': dependencies: - detect-libc: 2.1.0 + detect-libc: 2.1.2 https-proxy-agent: 5.0.1 make-dir: 3.1.0 node-fetch: 2.7.0 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 transitivePeerDependencies: - encoding @@ -14289,14 +14492,14 @@ snapshots: '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': dependencies: - detect-libc: 2.1.0 + detect-libc: 2.1.2 https-proxy-agent: 5.0.1 make-dir: 3.1.0 node-fetch: 2.7.0(encoding@0.1.13) nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 transitivePeerDependencies: - encoding @@ -14326,7 +14529,7 @@ snapshots: '@mapbox/whoots-js@3.1.0': {} - '@maplibre/maplibre-gl-style-spec@23.3.0': + '@maplibre/maplibre-gl-style-spec@24.2.0': dependencies: '@mapbox/jsonlint-lines-primitives': 2.0.2 '@mapbox/unitbezier': 0.0.1 @@ -14356,12 +14559,13 @@ snapshots: '@mdn/browser-compat-data@6.0.27': {} - '@mdx-js/mdx@3.1.0(acorn@8.15.0)': + '@mdx-js/mdx@3.1.1': dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 + acorn: 8.15.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -14370,26 +14574,25 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.15.0) + recma-jsx: 1.0.1(acorn@8.15.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 - remark-mdx: 3.1.0 + remark-mdx: 3.1.1 remark-parse: 11.0.0 remark-rehype: 11.1.2 - source-map: 0.7.4 + source-map: 0.7.6 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 unist-util-visit: 5.0.0 vfile: 6.0.3 transitivePeerDependencies: - - acorn - supports-color - '@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1)': + '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.1.13 + '@types/react': 19.2.2 react: 18.3.1 '@microsoft/tsdoc@0.15.1': {} @@ -14420,21 +14623,21 @@ snapshots: '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.2.2)(rxjs@7.8.2) tslib: 2.8.1 - '@nestjs/bullmq@11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(bullmq@5.58.5)': + '@nestjs/bullmq@11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(bullmq@5.60.0)': dependencies: '@nestjs/bull-shared': 11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6) '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.2.2)(rxjs@7.8.2) - bullmq: 5.58.5 + bullmq: 5.60.0 tslib: 2.8.1 - '@nestjs/cli@11.0.10(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@22.18.5)': + '@nestjs/cli@11.0.10(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@22.18.9)': dependencies: '@angular-devkit/core': 19.2.15(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) - '@angular-devkit/schematics-cli': 19.2.15(@types/node@22.18.5)(chokidar@4.0.3) - '@inquirer/prompts': 7.8.0(@types/node@22.18.5) - '@nestjs/schematics': 11.0.7(chokidar@4.0.3)(typescript@5.8.3) + '@angular-devkit/schematics-cli': 19.2.15(@types/node@22.18.9)(chokidar@4.0.3) + '@inquirer/prompts': 7.8.0(@types/node@22.18.9) + '@nestjs/schematics': 11.0.8(chokidar@4.0.3)(typescript@5.8.3) ansis: 4.1.0 chokidar: 4.0.3 cli-table3: 0.6.5 @@ -14519,31 +14722,31 @@ snapshots: - supports-color - utf-8-validate - '@nestjs/schedule@6.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)': + '@nestjs/schedule@6.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)': dependencies: '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.2.2)(rxjs@7.8.2) - cron: 4.3.0 + cron: 4.3.3 - '@nestjs/schematics@11.0.7(chokidar@4.0.3)(typescript@5.8.3)': + '@nestjs/schematics@11.0.8(chokidar@4.0.3)(typescript@5.8.3)': dependencies: - '@angular-devkit/core': 19.2.15(chokidar@4.0.3) - '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) - comment-json: 4.2.5 + '@angular-devkit/core': 19.2.17(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.17(chokidar@4.0.3) + comment-json: 4.4.1 jsonc-parser: 3.3.1 pluralize: 8.0.0 typescript: 5.8.3 transitivePeerDependencies: - chokidar - '@nestjs/schematics@11.0.7(chokidar@4.0.3)(typescript@5.9.2)': + '@nestjs/schematics@11.0.8(chokidar@4.0.3)(typescript@5.9.3)': dependencies: - '@angular-devkit/core': 19.2.15(chokidar@4.0.3) - '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) - comment-json: 4.2.5 + '@angular-devkit/core': 19.2.17(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.17(chokidar@4.0.3) + comment-json: 4.4.1 jsonc-parser: 3.3.1 pluralize: 8.0.0 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - chokidar @@ -14608,7 +14811,7 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.3 '@nuxt/opencollective@0.4.1': dependencies: @@ -14633,7 +14836,7 @@ snapshots: '@opentelemetry/exporter-logs-otlp-grpc@0.205.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) @@ -14663,7 +14866,7 @@ snapshots: '@opentelemetry/exporter-metrics-otlp-grpc@0.205.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-metrics-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) @@ -14701,7 +14904,7 @@ snapshots: '@opentelemetry/exporter-trace-otlp-grpc@0.205.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) @@ -14751,16 +14954,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-ioredis@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-ioredis@0.53.3(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/redis-common': 0.38.0 - '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/redis-common': 0.38.2 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-nestjs-core@0.51.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-nestjs-core@0.52.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.205.0(@opentelemetry/api@1.9.0) @@ -14768,13 +14970,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-pg@0.58.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-pg@0.58.3(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.205.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/sql-common': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) '@types/pg': 8.15.5 '@types/pg-pool': 2.0.6 transitivePeerDependencies: @@ -14784,7 +14986,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.205.0 - import-in-the-middle: 1.14.2 + import-in-the-middle: 1.14.4 require-in-the-middle: 7.5.2 transitivePeerDependencies: - supports-color @@ -14797,7 +14999,7 @@ snapshots: '@opentelemetry/otlp-grpc-exporter-base@0.205.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) @@ -14824,7 +15026,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/redis-common@0.38.0': {} + '@opentelemetry/redis-common@0.38.2': {} '@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0)': dependencies: @@ -14889,7 +15091,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.37.0': {} - '@opentelemetry/sql-common@0.41.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) @@ -14929,9 +15131,9 @@ snapshots: '@pkgr/core@0.2.9': {} - '@playwright/test@1.55.0': + '@playwright/test@1.55.1': dependencies: - playwright: 1.55.0 + playwright: 1.55.1 '@pnpm/config.env-replace@1.1.0': {} @@ -14970,187 +15172,190 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@react-email/body@0.1.0(react@19.1.1)': + '@react-email/body@0.1.0(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/button@0.2.0(react@19.1.1)': + '@react-email/button@0.2.0(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/code-block@0.1.0(react@19.1.1)': + '@react-email/code-block@0.1.0(react@19.2.0)': dependencies: prismjs: 1.30.0 - react: 19.1.1 + react: 19.2.0 - '@react-email/code-inline@0.0.5(react@19.1.1)': + '@react-email/code-inline@0.0.5(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/column@0.0.13(react@19.1.1)': + '@react-email/column@0.0.13(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/components@0.5.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@react-email/components@0.5.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@react-email/body': 0.1.0(react@19.1.1) - '@react-email/button': 0.2.0(react@19.1.1) - '@react-email/code-block': 0.1.0(react@19.1.1) - '@react-email/code-inline': 0.0.5(react@19.1.1) - '@react-email/column': 0.0.13(react@19.1.1) - '@react-email/container': 0.0.15(react@19.1.1) - '@react-email/font': 0.0.9(react@19.1.1) - '@react-email/head': 0.0.12(react@19.1.1) - '@react-email/heading': 0.0.15(react@19.1.1) - '@react-email/hr': 0.0.11(react@19.1.1) - '@react-email/html': 0.0.11(react@19.1.1) - '@react-email/img': 0.0.11(react@19.1.1) - '@react-email/link': 0.0.12(react@19.1.1) - '@react-email/markdown': 0.0.15(react@19.1.1) - '@react-email/preview': 0.0.13(react@19.1.1) - '@react-email/render': 1.2.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@react-email/row': 0.0.12(react@19.1.1) - '@react-email/section': 0.0.16(react@19.1.1) - '@react-email/tailwind': 1.2.2(react@19.1.1) - '@react-email/text': 0.1.5(react@19.1.1) - react: 19.1.1 + '@react-email/body': 0.1.0(react@19.2.0) + '@react-email/button': 0.2.0(react@19.2.0) + '@react-email/code-block': 0.1.0(react@19.2.0) + '@react-email/code-inline': 0.0.5(react@19.2.0) + '@react-email/column': 0.0.13(react@19.2.0) + '@react-email/container': 0.0.15(react@19.2.0) + '@react-email/font': 0.0.9(react@19.2.0) + '@react-email/head': 0.0.12(react@19.2.0) + '@react-email/heading': 0.0.15(react@19.2.0) + '@react-email/hr': 0.0.11(react@19.2.0) + '@react-email/html': 0.0.11(react@19.2.0) + '@react-email/img': 0.0.11(react@19.2.0) + '@react-email/link': 0.0.12(react@19.2.0) + '@react-email/markdown': 0.0.15(react@19.2.0) + '@react-email/preview': 0.0.13(react@19.2.0) + '@react-email/render': 1.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-email/row': 0.0.12(react@19.2.0) + '@react-email/section': 0.0.16(react@19.2.0) + '@react-email/tailwind': 1.2.2(react@19.2.0) + '@react-email/text': 0.1.5(react@19.2.0) + react: 19.2.0 transitivePeerDependencies: - react-dom - '@react-email/container@0.0.15(react@19.1.1)': + '@react-email/container@0.0.15(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/font@0.0.9(react@19.1.1)': + '@react-email/font@0.0.9(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/head@0.0.12(react@19.1.1)': + '@react-email/head@0.0.12(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/heading@0.0.15(react@19.1.1)': + '@react-email/heading@0.0.15(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/hr@0.0.11(react@19.1.1)': + '@react-email/hr@0.0.11(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/html@0.0.11(react@19.1.1)': + '@react-email/html@0.0.11(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/img@0.0.11(react@19.1.1)': + '@react-email/img@0.0.11(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/link@0.0.12(react@19.1.1)': + '@react-email/link@0.0.12(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/markdown@0.0.15(react@19.1.1)': + '@react-email/markdown@0.0.15(react@19.2.0)': dependencies: - md-to-react-email: 5.0.5(react@19.1.1) - react: 19.1.1 + md-to-react-email: 5.0.5(react@19.2.0) + react: 19.2.0 - '@react-email/preview@0.0.13(react@19.1.1)': + '@react-email/preview@0.0.13(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/render@1.2.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@react-email/render@1.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: html-to-text: 9.0.5 prettier: 3.6.2 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) react-promise-suspense: 0.3.4 - '@react-email/row@0.0.12(react@19.1.1)': + '@react-email/row@0.0.12(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/section@0.0.16(react@19.1.1)': + '@react-email/section@0.0.16(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/tailwind@1.2.2(react@19.1.1)': + '@react-email/tailwind@1.2.2(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@react-email/text@0.1.5(react@19.1.1)': + '@react-email/text@0.1.5(react@19.2.0)': dependencies: - react: 19.1.1 + react: 19.2.0 - '@rollup/pluginutils@5.3.0(rollup@4.50.1)': + '@rollup/pluginutils@5.3.0(rollup@4.52.4)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.50.1 + rollup: 4.52.4 - '@rollup/rollup-android-arm-eabi@4.50.1': + '@rollup/rollup-android-arm-eabi@4.52.4': optional: true - '@rollup/rollup-android-arm64@4.50.1': + '@rollup/rollup-android-arm64@4.52.4': optional: true - '@rollup/rollup-darwin-arm64@4.50.1': + '@rollup/rollup-darwin-arm64@4.52.4': optional: true - '@rollup/rollup-darwin-x64@4.50.1': + '@rollup/rollup-darwin-x64@4.52.4': optional: true - '@rollup/rollup-freebsd-arm64@4.50.1': + '@rollup/rollup-freebsd-arm64@4.52.4': optional: true - '@rollup/rollup-freebsd-x64@4.50.1': + '@rollup/rollup-freebsd-x64@4.52.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.50.1': + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.50.1': + '@rollup/rollup-linux-arm-musleabihf@4.52.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.50.1': + '@rollup/rollup-linux-arm64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.50.1': + '@rollup/rollup-linux-arm64-musl@4.52.4': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.50.1': + '@rollup/rollup-linux-loong64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.50.1': + '@rollup/rollup-linux-ppc64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.50.1': + '@rollup/rollup-linux-riscv64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-riscv64-musl@4.50.1': + '@rollup/rollup-linux-riscv64-musl@4.52.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.50.1': + '@rollup/rollup-linux-s390x-gnu@4.52.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.50.1': + '@rollup/rollup-linux-x64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-x64-musl@4.50.1': + '@rollup/rollup-linux-x64-musl@4.52.4': optional: true - '@rollup/rollup-openharmony-arm64@4.50.1': + '@rollup/rollup-openharmony-arm64@4.52.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.50.1': + '@rollup/rollup-win32-arm64-msvc@4.52.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.50.1': + '@rollup/rollup-win32-ia32-msvc@4.52.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.50.1': + '@rollup/rollup-win32-x64-gnu@4.52.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.52.4': optional: true '@scarf/scarf@1.4.0': {} @@ -15190,197 +15395,195 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 - '@smithy/abort-controller@4.1.1': + '@smithy/abort-controller@4.2.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/config-resolver@4.2.2': + '@smithy/config-resolver@4.3.0': dependencies: - '@smithy/node-config-provider': 4.2.2 - '@smithy/types': 4.5.0 - '@smithy/util-config-provider': 4.1.0 - '@smithy/util-middleware': 4.1.1 + '@smithy/node-config-provider': 4.3.0 + '@smithy/types': 4.6.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.0 tslib: 2.8.1 - '@smithy/core@3.11.0': + '@smithy/core@3.15.0': dependencies: - '@smithy/middleware-serde': 4.1.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/types': 4.5.0 - '@smithy/util-base64': 4.1.0 - '@smithy/util-body-length-browser': 4.1.0 - '@smithy/util-middleware': 4.1.1 - '@smithy/util-stream': 4.3.1 - '@smithy/util-utf8': 4.1.0 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - - '@smithy/credential-provider-imds@4.1.2': - dependencies: - '@smithy/node-config-provider': 4.2.2 - '@smithy/property-provider': 4.1.1 - '@smithy/types': 4.5.0 - '@smithy/url-parser': 4.1.1 + '@smithy/middleware-serde': 4.2.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/types': 4.6.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.0 + '@smithy/util-stream': 4.5.0 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.2.1': + '@smithy/credential-provider-imds@4.2.0': dependencies: - '@smithy/protocol-http': 5.2.1 - '@smithy/querystring-builder': 4.1.1 - '@smithy/types': 4.5.0 - '@smithy/util-base64': 4.1.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/property-provider': 4.2.0 + '@smithy/types': 4.6.0 + '@smithy/url-parser': 4.2.0 tslib: 2.8.1 - '@smithy/hash-node@4.1.1': + '@smithy/fetch-http-handler@5.3.1': dependencies: - '@smithy/types': 4.5.0 - '@smithy/util-buffer-from': 4.1.0 - '@smithy/util-utf8': 4.1.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/querystring-builder': 4.2.0 + '@smithy/types': 4.6.0 + '@smithy/util-base64': 4.3.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.1.1': + '@smithy/hash-node@4.2.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.2.0': + dependencies: + '@smithy/types': 4.6.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 - '@smithy/is-array-buffer@4.1.0': + '@smithy/is-array-buffer@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/middleware-content-length@4.1.1': + '@smithy/middleware-content-length@4.2.0': dependencies: - '@smithy/protocol-http': 5.2.1 - '@smithy/types': 4.5.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.2.2': + '@smithy/middleware-endpoint@4.3.1': dependencies: - '@smithy/core': 3.11.0 - '@smithy/middleware-serde': 4.1.1 - '@smithy/node-config-provider': 4.2.2 - '@smithy/shared-ini-file-loader': 4.2.0 - '@smithy/types': 4.5.0 - '@smithy/url-parser': 4.1.1 - '@smithy/util-middleware': 4.1.1 + '@smithy/core': 3.15.0 + '@smithy/middleware-serde': 4.2.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/shared-ini-file-loader': 4.3.0 + '@smithy/types': 4.6.0 + '@smithy/url-parser': 4.2.0 + '@smithy/util-middleware': 4.2.0 tslib: 2.8.1 - '@smithy/middleware-retry@4.2.2': + '@smithy/middleware-retry@4.4.1': dependencies: - '@smithy/node-config-provider': 4.2.2 - '@smithy/protocol-http': 5.2.1 - '@smithy/service-error-classification': 4.1.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 - '@smithy/util-middleware': 4.1.1 - '@smithy/util-retry': 4.1.1 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - - '@smithy/middleware-serde@4.1.1': - dependencies: - '@smithy/protocol-http': 5.2.1 - '@smithy/types': 4.5.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/service-error-classification': 4.2.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 + '@smithy/util-middleware': 4.2.0 + '@smithy/util-retry': 4.2.0 + '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.1.1': + '@smithy/middleware-serde@4.2.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.2.2': + '@smithy/middleware-stack@4.2.0': dependencies: - '@smithy/property-provider': 4.1.1 - '@smithy/shared-ini-file-loader': 4.2.0 - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.2.1': + '@smithy/node-config-provider@4.3.0': dependencies: - '@smithy/abort-controller': 4.1.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/querystring-builder': 4.1.1 - '@smithy/types': 4.5.0 + '@smithy/property-provider': 4.2.0 + '@smithy/shared-ini-file-loader': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/property-provider@4.1.1': + '@smithy/node-http-handler@4.3.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/abort-controller': 4.2.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/querystring-builder': 4.2.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/protocol-http@5.2.1': + '@smithy/property-provider@4.2.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.1.1': + '@smithy/protocol-http@5.3.0': dependencies: - '@smithy/types': 4.5.0 - '@smithy/util-uri-escape': 4.1.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.1.1': + '@smithy/querystring-builder@4.2.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 + '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.1.1': + '@smithy/querystring-parser@4.2.0': dependencies: - '@smithy/types': 4.5.0 - - '@smithy/shared-ini-file-loader@4.2.0': - dependencies: - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/signature-v4@5.2.1': + '@smithy/service-error-classification@4.2.0': dependencies: - '@smithy/is-array-buffer': 4.1.0 - '@smithy/protocol-http': 5.2.1 - '@smithy/types': 4.5.0 - '@smithy/util-hex-encoding': 4.1.0 - '@smithy/util-middleware': 4.1.1 - '@smithy/util-uri-escape': 4.1.0 - '@smithy/util-utf8': 4.1.0 + '@smithy/types': 4.6.0 + + '@smithy/shared-ini-file-loader@4.3.0': + dependencies: + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/smithy-client@4.6.2': + '@smithy/signature-v4@5.3.0': dependencies: - '@smithy/core': 3.11.0 - '@smithy/middleware-endpoint': 4.2.2 - '@smithy/middleware-stack': 4.1.1 - '@smithy/protocol-http': 5.2.1 - '@smithy/types': 4.5.0 - '@smithy/util-stream': 4.3.1 + '@smithy/is-array-buffer': 4.2.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/types': 4.6.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-middleware': 4.2.0 + '@smithy/util-uri-escape': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/types@4.5.0': + '@smithy/smithy-client@4.7.1': + dependencies: + '@smithy/core': 3.15.0 + '@smithy/middleware-endpoint': 4.3.1 + '@smithy/middleware-stack': 4.2.0 + '@smithy/protocol-http': 5.3.0 + '@smithy/types': 4.6.0 + '@smithy/util-stream': 4.5.0 + tslib: 2.8.1 + + '@smithy/types@4.6.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.1.1': + '@smithy/url-parser@4.2.0': dependencies: - '@smithy/querystring-parser': 4.1.1 - '@smithy/types': 4.5.0 + '@smithy/querystring-parser': 4.2.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/util-base64@4.1.0': + '@smithy/util-base64@4.3.0': dependencies: - '@smithy/util-buffer-from': 4.1.0 - '@smithy/util-utf8': 4.1.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/util-body-length-browser@4.1.0': + '@smithy/util-body-length-browser@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-body-length-node@4.1.0': + '@smithy/util-body-length-node@4.2.1': dependencies: tslib: 2.8.1 @@ -15389,66 +15592,65 @@ snapshots: '@smithy/is-array-buffer': 2.2.0 tslib: 2.8.1 - '@smithy/util-buffer-from@4.1.0': + '@smithy/util-buffer-from@4.2.0': dependencies: - '@smithy/is-array-buffer': 4.1.0 + '@smithy/is-array-buffer': 4.2.0 tslib: 2.8.1 - '@smithy/util-config-provider@4.1.0': + '@smithy/util-config-provider@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.1.2': + '@smithy/util-defaults-mode-browser@4.3.0': dependencies: - '@smithy/property-provider': 4.1.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 - bowser: 2.12.1 + '@smithy/property-provider': 4.2.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.1.2': + '@smithy/util-defaults-mode-node@4.2.1': dependencies: - '@smithy/config-resolver': 4.2.2 - '@smithy/credential-provider-imds': 4.1.2 - '@smithy/node-config-provider': 4.2.2 - '@smithy/property-provider': 4.1.1 - '@smithy/smithy-client': 4.6.2 - '@smithy/types': 4.5.0 + '@smithy/config-resolver': 4.3.0 + '@smithy/credential-provider-imds': 4.2.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/property-provider': 4.2.0 + '@smithy/smithy-client': 4.7.1 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.1.2': + '@smithy/util-endpoints@3.2.0': dependencies: - '@smithy/node-config-provider': 4.2.2 - '@smithy/types': 4.5.0 + '@smithy/node-config-provider': 4.3.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/util-hex-encoding@4.1.0': + '@smithy/util-hex-encoding@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.1.1': + '@smithy/util-middleware@4.2.0': dependencies: - '@smithy/types': 4.5.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/util-retry@4.1.1': + '@smithy/util-retry@4.2.0': dependencies: - '@smithy/service-error-classification': 4.1.1 - '@smithy/types': 4.5.0 + '@smithy/service-error-classification': 4.2.0 + '@smithy/types': 4.6.0 tslib: 2.8.1 - '@smithy/util-stream@4.3.1': + '@smithy/util-stream@4.5.0': dependencies: - '@smithy/fetch-http-handler': 5.2.1 - '@smithy/node-http-handler': 4.2.1 - '@smithy/types': 4.5.0 - '@smithy/util-base64': 4.1.0 - '@smithy/util-buffer-from': 4.1.0 - '@smithy/util-hex-encoding': 4.1.0 - '@smithy/util-utf8': 4.1.0 + '@smithy/fetch-http-handler': 5.3.1 + '@smithy/node-http-handler': 4.3.0 + '@smithy/types': 4.6.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/util-uri-escape@4.1.0': + '@smithy/util-uri-escape@4.2.0': dependencies: tslib: 2.8.1 @@ -15457,9 +15659,13 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@4.1.0': + '@smithy/util-utf8@4.2.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + tslib: 2.8.1 + + '@smithy/uuid@1.1.0': dependencies: - '@smithy/util-buffer-from': 4.1.0 tslib: 2.8.1 '@socket.io/component-emitter@3.1.2': {} @@ -15475,33 +15681,33 @@ snapshots: '@standard-schema/spec@1.0.0': {} - '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)': + '@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0)': dependencies: acorn: 8.15.0 - '@sveltejs/adapter-static@3.0.9(@sveltejs/kit@2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))': + '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))': dependencies: - '@sveltejs/kit': 2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + '@sveltejs/kit': 2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) - '@sveltejs/enhanced-img@0.8.1(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(rollup@4.50.1)(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@sveltejs/enhanced-img@0.8.3(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(rollup@4.52.4)(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) magic-string: 0.30.19 - sharp: 0.34.3 - svelte: 5.38.10 - svelte-parse-markup: 0.1.5(svelte@5.38.10) - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - vite-imagetools: 8.0.0(rollup@4.50.1) - zimmerframe: 1.1.2 + sharp: 0.34.4 + svelte: 5.39.11 + svelte-parse-markup: 0.1.5(svelte@5.39.11) + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite-imagetools: 8.0.0(rollup@4.52.4) + zimmerframe: 1.1.4 transitivePeerDependencies: - rollup - supports-color - '@sveltejs/kit@2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@sveltejs/kit@2.38.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: '@standard-schema/spec': 1.0.0 - '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 @@ -15513,29 +15719,29 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.7.1 sirv: 3.0.2 - svelte: 5.38.10 - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + svelte: 5.39.11 + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) optionalDependencies: '@opentelemetry/api': 1.9.0 - '@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) debug: 4.4.3 - svelte: 5.38.10 - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + svelte: 5.39.11 + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.2.0(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) debug: 4.4.3 deepmerge: 4.3.1 magic-string: 0.30.19 - svelte: 5.38.10 - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + svelte: 5.39.11 + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) transitivePeerDependencies: - supports-color @@ -15583,12 +15789,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.27.7) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.27.7) - '@svgr/core@8.1.0(typescript@5.9.2)': + '@svgr/core@8.1.0(typescript@5.9.3)': dependencies: '@babel/core': 7.27.7 '@svgr/babel-preset': 8.1.0(@babel/core@7.27.7) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.9.2) + cosmiconfig: 8.3.6(typescript@5.9.3) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -15599,35 +15805,35 @@ snapshots: '@babel/types': 7.28.4 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.2))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': dependencies: '@babel/core': 7.27.7 '@svgr/babel-preset': 8.1.0(@babel/core@7.27.7) - '@svgr/core': 8.1.0(typescript@5.9.2) + '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.2))(typescript@5.9.2)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)': dependencies: - '@svgr/core': 8.1.0(typescript@5.9.2) - cosmiconfig: 8.3.6(typescript@5.9.2) + '@svgr/core': 8.1.0(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@5.9.3) deepmerge: 4.3.1 svgo: 3.3.2 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(typescript@5.9.2)': + '@svgr/webpack@8.1.0(typescript@5.9.3)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.27.7) '@babel/preset-env': 7.27.2(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@svgr/core': 8.1.0(typescript@5.9.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.2))(typescript@5.9.2) + '@svgr/core': 8.1.0(typescript@5.9.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript @@ -15693,76 +15899,76 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/node@4.1.13': + '@tailwindcss/node@4.1.14': dependencies: '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.18.3 - jiti: 2.5.1 + jiti: 2.6.1 lightningcss: 1.30.1 magic-string: 0.30.19 source-map-js: 1.2.1 - tailwindcss: 4.1.13 + tailwindcss: 4.1.14 - '@tailwindcss/oxide-android-arm64@4.1.13': + '@tailwindcss/oxide-android-arm64@4.1.14': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.13': + '@tailwindcss/oxide-darwin-arm64@4.1.14': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.13': + '@tailwindcss/oxide-darwin-x64@4.1.14': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.13': + '@tailwindcss/oxide-freebsd-x64@4.1.14': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.13': + '@tailwindcss/oxide-linux-arm64-musl@4.1.14': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.13': + '@tailwindcss/oxide-linux-x64-gnu@4.1.14': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.13': + '@tailwindcss/oxide-linux-x64-musl@4.1.14': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.13': + '@tailwindcss/oxide-wasm32-wasi@4.1.14': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.13': + '@tailwindcss/oxide-win32-x64-msvc@4.1.14': optional: true - '@tailwindcss/oxide@4.1.13': + '@tailwindcss/oxide@4.1.14': dependencies: - detect-libc: 2.1.0 - tar: 7.4.3 + detect-libc: 2.1.2 + tar: 7.5.1 optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.13 - '@tailwindcss/oxide-darwin-arm64': 4.1.13 - '@tailwindcss/oxide-darwin-x64': 4.1.13 - '@tailwindcss/oxide-freebsd-x64': 4.1.13 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.13 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.13 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.13 - '@tailwindcss/oxide-linux-x64-musl': 4.1.13 - '@tailwindcss/oxide-wasm32-wasi': 4.1.13 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.13 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.13 + '@tailwindcss/oxide-android-arm64': 4.1.14 + '@tailwindcss/oxide-darwin-arm64': 4.1.14 + '@tailwindcss/oxide-darwin-x64': 4.1.14 + '@tailwindcss/oxide-freebsd-x64': 4.1.14 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.14 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.14 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.14 + '@tailwindcss/oxide-linux-x64-musl': 4.1.14 + '@tailwindcss/oxide-wasm32-wasi': 4.1.14 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.14 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.14 - '@tailwindcss/vite@4.1.13(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@tailwindcss/vite@4.1.14(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: - '@tailwindcss/node': 4.1.13 - '@tailwindcss/oxide': 4.1.13 - tailwindcss: 4.1.13 - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + '@tailwindcss/node': 4.1.14 + '@tailwindcss/oxide': 4.1.14 + tailwindcss: 4.1.14 + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) '@testing-library/dom@10.4.0': dependencies: @@ -15784,13 +15990,13 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/svelte@5.2.8(svelte@5.38.10)(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@testing-library/svelte@5.2.8(svelte@5.39.11)(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: '@testing-library/dom': 10.4.0 - svelte: 5.38.10 + svelte: 5.39.11 optionalDependencies: - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': dependencies: @@ -15832,7 +16038,7 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/archiver@6.0.3': dependencies: @@ -15844,16 +16050,16 @@ snapshots: '@types/bcrypt@6.0.0': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/braces@3.0.5': {} @@ -15874,21 +16080,21 @@ snapshots: '@types/cli-progress@3.11.6': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/compression@1.8.1': dependencies: '@types/express': 5.0.3 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.6 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/connect@3.4.38': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/content-disposition@0.5.9': {} @@ -15905,11 +16111,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.3 '@types/keygrip': 1.0.6 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/cors@2.8.19': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/debug@4.1.12': dependencies: @@ -15919,13 +16125,13 @@ snapshots: '@types/docker-modem@3.0.6': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/ssh2': 1.15.5 - '@types/dockerode@3.3.42': + '@types/dockerode@3.3.44': dependencies: '@types/docker-modem': 3.0.6 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/ssh2': 1.15.5 '@types/dom-to-image@2.6.7': {} @@ -15948,14 +16154,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -15981,7 +16187,7 @@ snapshots: '@types/fluent-ffmpeg@2.1.27': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/geojson-vt@3.2.5': dependencies: @@ -16013,7 +16219,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/inquirer@8.2.11': dependencies: @@ -16051,7 +16257,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/leaflet@1.9.20': dependencies: @@ -16063,8 +16269,6 @@ snapshots: '@types/lodash@4.17.20': {} - '@types/luxon@3.6.2': {} - '@types/luxon@3.7.1': {} '@types/mdast@4.0.4': @@ -16083,7 +16287,7 @@ snapshots: '@types/mock-fs@4.13.4': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/ms@2.1.0': {} @@ -16093,11 +16297,11 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/node@17.0.45': {} - '@types/node@18.19.126': + '@types/node@18.19.130': dependencies: undici-types: 5.26.5 @@ -16105,19 +16309,19 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.18.5': + '@types/node@22.18.9': dependencies: undici-types: 6.21.0 - '@types/node@24.5.1': + '@types/node@24.7.1': dependencies: - undici-types: 7.12.0 + undici-types: 7.14.0 optional: true - '@types/nodemailer@7.0.1': + '@types/nodemailer@7.0.2': dependencies: - '@aws-sdk/client-sesv2': 3.890.0 - '@types/node': 22.18.5 + '@aws-sdk/client-sesv2': 3.907.0 + '@types/node': 22.18.9 transitivePeerDependencies: - aws-crt @@ -16125,7 +16329,7 @@ snapshots: dependencies: '@types/keygrip': 1.0.6 '@types/koa': 3.0.0 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/parse5@5.0.3': {} @@ -16135,7 +16339,7 @@ snapshots: '@types/pg@8.15.5': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 pg-protocol: 1.10.3 pg-types: 2.2.0 @@ -16143,13 +16347,13 @@ snapshots: '@types/pngjs@6.0.5': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/prismjs@1.26.5': {} '@types/qrcode@1.5.5': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/qs@6.14.0': {} @@ -16158,29 +16362,29 @@ snapshots: '@types/react-router-config@5.0.11': dependencies: '@types/history': 4.7.11 - '@types/react': 19.1.13 + '@types/react': 19.2.2 '@types/react-router': 5.1.20 '@types/react-router-dom@5.3.3': dependencies: '@types/history': 4.7.11 - '@types/react': 19.1.13 + '@types/react': 19.2.2 '@types/react-router': 5.1.20 '@types/react-router@5.1.20': dependencies: '@types/history': 4.7.11 - '@types/react': 19.1.13 + '@types/react': 19.2.2 - '@types/react@19.1.13': + '@types/react@19.2.2': dependencies: csstype: 3.1.3 '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 - '@types/retry@0.12.0': {} + '@types/retry@0.12.2': {} '@types/sanitize-html@2.16.0': dependencies: @@ -16188,14 +16392,14 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/semver@7.7.1': {} '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/serve-index@1.9.4': dependencies: @@ -16204,31 +16408,31 @@ snapshots: '@types/serve-static@1.15.8': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/send': 0.17.5 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/ssh2-streams@0.1.12': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/ssh2@0.5.52': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/ssh2-streams': 0.1.12 '@types/ssh2@1.15.5': dependencies: - '@types/node': 18.19.126 + '@types/node': 18.19.130 '@types/superagent@8.1.9': dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 22.18.5 + '@types/node': 22.18.9 form-data: 4.0.4 '@types/supercluster@7.1.3': @@ -16242,7 +16446,7 @@ snapshots: '@types/through@0.0.33': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/ua-parser-js@0.7.39': {} @@ -16250,15 +16454,13 @@ snapshots: '@types/unist@3.0.3': {} - '@types/uuid@9.0.8': {} - '@types/validator@13.15.3': {} '@types/whatwg-mimetype@3.0.2': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 '@types/yargs-parser@21.0.3': {} @@ -16266,102 +16468,102 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.43.0 - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.45.0 + eslint: 9.37.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3 - eslint: 9.35.0(jiti@2.5.1) - typescript: 5.9.2 + eslint: 9.37.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) + '@typescript-eslint/types': 8.45.0 debug: 4.4.3 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.43.0': + '@typescript-eslint/scope-manager@8.45.0': dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 - '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': dependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.35.0(jiti@2.5.1) - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + eslint: 9.37.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.43.0': {} + '@typescript-eslint/types@8.45.0': {} - '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.43.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/project-service': 8.45.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/visitor-keys': 8.45.0 debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) - typescript: 5.9.2 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.45.0 + '@typescript-eslint/types': 8.45.0 + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.43.0': + '@typescript-eslint/visitor-keys@8.45.0': dependencies: - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.45.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -16376,11 +16578,11 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -16395,7 +16597,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.7.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -16407,21 +16609,21 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - '@vitest/mocker@3.2.4(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -16529,14 +16731,14 @@ snapshots: '@xtuc/long@4.2.2': {} - '@zoom-image/core@0.41.0': + '@zoom-image/core@0.41.3': dependencies: '@namnode/store': 0.1.0 - '@zoom-image/svelte@0.3.4(svelte@5.38.10)': + '@zoom-image/svelte@0.3.7(svelte@5.39.11)': dependencies: - '@zoom-image/core': 0.41.0 - svelte: 5.38.10 + '@zoom-image/core': 0.41.3 + svelte: 5.39.11 abab@2.0.6: optional: true @@ -16625,30 +16827,31 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch-helper@3.26.0(algoliasearch@5.29.0): + algoliasearch-helper@3.26.0(algoliasearch@5.40.0): dependencies: '@algolia/events': 4.0.1 - algoliasearch: 5.29.0 + algoliasearch: 5.40.0 - algoliasearch@5.29.0: + algoliasearch@5.40.0: dependencies: - '@algolia/client-abtesting': 5.29.0 - '@algolia/client-analytics': 5.29.0 - '@algolia/client-common': 5.29.0 - '@algolia/client-insights': 5.29.0 - '@algolia/client-personalization': 5.29.0 - '@algolia/client-query-suggestions': 5.29.0 - '@algolia/client-search': 5.29.0 - '@algolia/ingestion': 1.29.0 - '@algolia/monitoring': 1.29.0 - '@algolia/recommend': 5.29.0 - '@algolia/requester-browser-xhr': 5.29.0 - '@algolia/requester-fetch': 5.29.0 - '@algolia/requester-node-http': 5.29.0 + '@algolia/abtesting': 1.6.0 + '@algolia/client-abtesting': 5.40.0 + '@algolia/client-analytics': 5.40.0 + '@algolia/client-common': 5.40.0 + '@algolia/client-insights': 5.40.0 + '@algolia/client-personalization': 5.40.0 + '@algolia/client-query-suggestions': 5.40.0 + '@algolia/client-search': 5.40.0 + '@algolia/ingestion': 1.40.0 + '@algolia/monitoring': 1.40.0 + '@algolia/recommend': 5.40.0 + '@algolia/requester-browser-xhr': 5.40.0 + '@algolia/requester-fetch': 5.40.0 + '@algolia/requester-node-http': 5.40.0 ansi-align@3.0.1: dependencies: @@ -16748,7 +16951,7 @@ snapshots: ast-v8-to-istanbul@0.3.3: dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 js-tokens: 9.0.1 @@ -16772,8 +16975,8 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.25.3 - caniuse-lite: 1.0.30001735 + browserslist: 4.26.3 + caniuse-lite: 1.0.30001749 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -16784,12 +16987,12 @@ snapshots: b4a@1.6.7: {} - babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.100.2): + babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.102.1): dependencies: '@babel/core': 7.27.7 find-cache-dir: 4.0.0 - schema-utils: 4.3.2 - webpack: 5.100.2 + schema-utils: 4.3.3 + webpack: 5.102.1 babel-plugin-dynamic-import-node@2.3.3: dependencies: @@ -16825,35 +17028,43 @@ snapshots: balanced-match@1.0.2: {} - bare-events@2.6.1: - optional: true + bare-events@2.7.0: {} - bare-fs@4.2.0: + bare-fs@4.4.7: dependencies: - bare-events: 2.6.1 + bare-events: 2.7.0 bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.6.1) + bare-stream: 2.7.0(bare-events@2.7.0) + bare-url: 2.2.2 + fast-fifo: 1.3.2 optional: true - bare-os@3.6.1: + bare-os@3.6.2: optional: true bare-path@3.0.0: dependencies: - bare-os: 3.6.1 + bare-os: 3.6.2 optional: true - bare-stream@2.7.0(bare-events@2.6.1): + bare-stream@2.7.0(bare-events@2.7.0): dependencies: - streamx: 2.22.1 + streamx: 2.23.0 optionalDependencies: - bare-events: 2.6.1 + bare-events: 2.7.0 + optional: true + + bare-url@2.2.2: + dependencies: + bare-path: 3.0.0 optional: true base64-js@1.5.1: {} base64id@2.0.0: {} + baseline-browser-mapping@2.8.15: {} + batch-cluster@13.0.0: {} batch@0.6.1: {} @@ -16873,15 +17084,15 @@ snapshots: binary-extensions@2.3.0: {} - bits-ui@2.9.8(@internationalized/date@3.8.2)(svelte@5.38.10): + bits-ui@2.9.8(@internationalized/date@3.8.2)(svelte@5.39.11): dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/dom': 1.7.4 '@internationalized/date': 3.8.2 esm-env: 1.2.2 - runed: 0.29.2(svelte@5.38.10) - svelte: 5.38.10 - svelte-toolbelt: 0.9.3(svelte@5.38.10) + runed: 0.29.2(svelte@5.39.11) + svelte: 5.39.11 + svelte-toolbelt: 0.9.3(svelte@5.39.11) tabbable: 6.2.0 bl@4.1.0: @@ -16965,12 +17176,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.3: + browserslist@4.26.3: dependencies: - caniuse-lite: 1.0.30001735 - electron-to-chromium: 1.5.207 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.3) + baseline-browser-mapping: 2.8.15 + caniuse-lite: 1.0.30001749 + electron-to-chromium: 1.5.233 + node-releases: 2.0.23 + update-browserslist-db: 1.1.3(browserslist@4.26.3) buffer-crc32@1.0.0: {} @@ -16991,18 +17203,22 @@ snapshots: builtin-modules@5.0.0: {} - bullmq@5.58.5: + bullmq@5.60.0: dependencies: cron-parser: 4.9.0 - ioredis: 5.7.0 + ioredis: 5.8.0 msgpackr: 1.11.5 node-abort-controller: 3.1.1 - semver: 7.7.2 + semver: 7.7.3 tslib: 2.8.1 - uuid: 9.0.1 + uuid: 11.1.0 transitivePeerDependencies: - supports-color + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -17029,7 +17245,7 @@ snapshots: minipass-pipeline: 1.2.4 p-map: 7.0.3 ssri: 12.0.0 - tar: 7.4.3 + tar: 7.5.1 unique-filename: 4.0.0 cacheable-lookup@7.0.0: {} @@ -17078,12 +17294,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.25.3 - caniuse-lite: 1.0.30001735 + browserslist: 4.26.3 + caniuse-lite: 1.0.30001749 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001735: {} + caniuse-lite@1.0.30001749: {} canvas@2.11.2: dependencies: @@ -17275,18 +17491,8 @@ snapshots: color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - color-support@1.1.3: {} - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - colord@2.9.3: {} colorette@2.0.20: {} @@ -17319,13 +17525,11 @@ snapshots: commander@8.3.0: {} - comment-json@4.2.5: + comment-json@4.4.1: dependencies: array-timsort: 1.0.3 core-util-is: 1.0.3 esprima: 4.0.1 - has-own-prop: 2.0.0 - repeat-string: 1.6.1 common-path-prefix@3.0.0: {} @@ -17423,21 +17627,19 @@ snapshots: depd: 2.0.0 keygrip: 1.1.0 - copy-text-to-clipboard@3.2.0: {} - - copy-webpack-plugin@11.0.0(webpack@5.100.2): + copy-webpack-plugin@11.0.0(webpack@5.102.1): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 globby: 13.2.2 normalize-path: 3.0.0 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.100.2 + webpack: 5.102.1 core-js-compat@3.45.0: dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 core-js-pure@3.43.0: {} @@ -17459,14 +17661,14 @@ snapshots: optionalDependencies: typescript: 5.8.3 - cosmiconfig@8.3.6(typescript@5.9.2): + cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 cpu-features@0.0.10: dependencies: @@ -17485,10 +17687,10 @@ snapshots: dependencies: luxon: 3.7.2 - cron@4.3.0: + cron@4.3.3: dependencies: - '@types/luxon': 3.6.2 - luxon: 3.6.1 + '@types/luxon': 3.7.1 + luxon: 3.7.2 cross-spawn@7.0.6: dependencies: @@ -17516,7 +17718,7 @@ snapshots: postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - css-loader@6.11.0(webpack@5.100.2): + css-loader@6.11.0(webpack@5.102.1): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -17525,19 +17727,19 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.6) postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 - semver: 7.7.2 + semver: 7.7.3 optionalDependencies: - webpack: 5.100.2 + webpack: 5.102.1 - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.100.2): + css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.102.1): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.1.2(postcss@8.5.6) jest-worker: 29.7.0 postcss: 8.5.6 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.100.2 + webpack: 5.102.1 optionalDependencies: clean-css: 5.3.3 @@ -17586,7 +17788,7 @@ snapshots: cssnano-preset-advanced@6.1.2(postcss@8.5.6): dependencies: autoprefixer: 10.4.21(postcss@8.5.6) - browserslist: 4.25.3 + browserslist: 4.26.3 cssnano-preset-default: 6.1.2(postcss@8.5.6) postcss: 8.5.6 postcss-discard-unused: 6.0.5(postcss@8.5.6) @@ -17596,7 +17798,7 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.5.6): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 css-declaration-sorter: 7.2.0(postcss@8.5.6) cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 @@ -17730,9 +17932,12 @@ snapshots: deepmerge@4.3.1: {} - default-gateway@6.0.3: + default-browser-id@5.0.0: {} + + default-browser@5.2.1: dependencies: - execa: 5.1.1 + bundle-name: 4.1.0 + default-browser-id: 5.0.0 defaults@1.0.4: dependencies: @@ -17748,6 +17953,8 @@ snapshots: define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -17770,7 +17977,7 @@ snapshots: detect-europe-js@0.1.2: {} - detect-libc@2.1.0: {} + detect-libc@2.1.2: {} detect-node@2.1.0: {} @@ -17812,7 +18019,7 @@ snapshots: dependencies: '@leichtgewicht/ip-codec': 2.0.5 - docker-compose@1.2.0: + docker-compose@1.3.0: dependencies: yaml: 2.8.1 @@ -17821,25 +18028,25 @@ snapshots: debug: 4.4.3 readable-stream: 3.6.2 split-ca: 1.0.1 - ssh2: 1.16.0 + ssh2: 1.17.0 transitivePeerDependencies: - supports-color - dockerode@4.0.7: + dockerode@4.0.9: dependencies: '@balena/dockerignore': 1.0.2 - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@grpc/proto-loader': 0.7.15 docker-modem: 5.0.6 protobufjs: 7.5.4 - tar-fs: 2.1.3 + tar-fs: 2.1.4 uuid: 10.0.0 transitivePeerDependencies: - supports-color - docusaurus-lunr-search@3.6.0(@docusaurus/core@3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + docusaurus-lunr-search@3.6.0(@docusaurus/core@3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@docusaurus/core': 3.8.1(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@18.3.1))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) + '@docusaurus/core': 3.9.1(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) autocomplete.js: 0.37.1 clsx: 2.1.1 gauge: 3.0.2 @@ -17915,7 +18122,7 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv@17.2.2: {} + dotenv@17.2.3: {} dunder-proto@1.0.1: dependencies: @@ -17933,7 +18140,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.207: {} + electron-to-chromium@1.5.233: {} emoji-regex@10.5.0: {} @@ -17977,7 +18184,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.19 - '@types/node': 22.18.5 + '@types/node': 22.18.9 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -17993,7 +18200,7 @@ snapshots: enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.3.0 entities@2.2.0: {} @@ -18063,7 +18270,7 @@ snapshots: '@types/estree-jsx': 1.0.5 acorn: 8.15.0 esast-util-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 esbuild@0.19.12: optionalDependencies: @@ -18091,34 +18298,34 @@ snapshots: '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - esbuild@0.25.9: + esbuild@0.25.10: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.9 - '@esbuild/android-arm': 0.25.9 - '@esbuild/android-arm64': 0.25.9 - '@esbuild/android-x64': 0.25.9 - '@esbuild/darwin-arm64': 0.25.9 - '@esbuild/darwin-x64': 0.25.9 - '@esbuild/freebsd-arm64': 0.25.9 - '@esbuild/freebsd-x64': 0.25.9 - '@esbuild/linux-arm': 0.25.9 - '@esbuild/linux-arm64': 0.25.9 - '@esbuild/linux-ia32': 0.25.9 - '@esbuild/linux-loong64': 0.25.9 - '@esbuild/linux-mips64el': 0.25.9 - '@esbuild/linux-ppc64': 0.25.9 - '@esbuild/linux-riscv64': 0.25.9 - '@esbuild/linux-s390x': 0.25.9 - '@esbuild/linux-x64': 0.25.9 - '@esbuild/netbsd-arm64': 0.25.9 - '@esbuild/netbsd-x64': 0.25.9 - '@esbuild/openbsd-arm64': 0.25.9 - '@esbuild/openbsd-x64': 0.25.9 - '@esbuild/openharmony-arm64': 0.25.9 - '@esbuild/sunos-x64': 0.25.9 - '@esbuild/win32-arm64': 0.25.9 - '@esbuild/win32-ia32': 0.25.9 - '@esbuild/win32-x64': 0.25.9 + '@esbuild/aix-ppc64': 0.25.10 + '@esbuild/android-arm': 0.25.10 + '@esbuild/android-arm64': 0.25.10 + '@esbuild/android-x64': 0.25.10 + '@esbuild/darwin-arm64': 0.25.10 + '@esbuild/darwin-x64': 0.25.10 + '@esbuild/freebsd-arm64': 0.25.10 + '@esbuild/freebsd-x64': 0.25.10 + '@esbuild/linux-arm': 0.25.10 + '@esbuild/linux-arm64': 0.25.10 + '@esbuild/linux-ia32': 0.25.10 + '@esbuild/linux-loong64': 0.25.10 + '@esbuild/linux-mips64el': 0.25.10 + '@esbuild/linux-ppc64': 0.25.10 + '@esbuild/linux-riscv64': 0.25.10 + '@esbuild/linux-s390x': 0.25.10 + '@esbuild/linux-x64': 0.25.10 + '@esbuild/netbsd-arm64': 0.25.10 + '@esbuild/netbsd-x64': 0.25.10 + '@esbuild/openbsd-arm64': 0.25.10 + '@esbuild/openbsd-x64': 0.25.10 + '@esbuild/openharmony-arm64': 0.25.10 + '@esbuild/sunos-x64': 0.25.10 + '@esbuild/win32-arm64': 0.25.10 + '@esbuild/win32-ia32': 0.25.10 + '@esbuild/win32-x64': 0.25.10 escalade@3.2.0: {} @@ -18141,67 +18348,60 @@ snapshots: source-map: 0.6.1 optional: true - eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)): + eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.6.1) - eslint-p@0.26.0(jiti@2.5.1): - dependencies: - eslint: 9.35.0(jiti@2.5.1) - transitivePeerDependencies: - - jiti - - supports-color - - eslint-plugin-compat@6.0.2(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-compat@6.0.2(eslint@9.37.0(jiti@2.6.1)): dependencies: '@mdn/browser-compat-data': 5.7.6 ast-metadata-inferer: 0.8.1 - browserslist: 4.25.3 - caniuse-lite: 1.0.30001735 - eslint: 9.35.0(jiti@2.5.1) + browserslist: 4.26.3 + caniuse-lite: 1.0.30001749 + eslint: 9.37.0(jiti@2.6.1) find-up: 5.0.0 globals: 15.15.0 lodash.memoize: 4.1.2 - semver: 7.7.2 + semver: 7.7.3 - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1))(prettier@3.6.2): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.6.1) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@2.5.1)) + eslint-config-prettier: 10.1.8(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-svelte@3.12.3(eslint@9.35.0(jiti@2.5.1))(svelte@5.38.10): + eslint-plugin-svelte@3.12.4(eslint@9.37.0(jiti@2.6.1))(svelte@5.39.11): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.6.1) esutils: 2.0.3 globals: 16.4.0 known-css-properties: 0.37.0 postcss: 8.5.6 postcss-load-config: 3.1.4(postcss@8.5.6) postcss-safe-parser: 7.0.1(postcss@8.5.6) - semver: 7.7.2 - svelte-eslint-parser: 1.3.2(svelte@5.38.10) + semver: 7.7.3 + svelte-eslint-parser: 1.3.3(svelte@5.39.11) optionalDependencies: - svelte: 5.38.10 + svelte: 5.39.11 transitivePeerDependencies: - ts-node - eslint-plugin-unicorn@60.0.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-unicorn@60.0.0(eslint@9.37.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@eslint/plugin-kit': 0.3.5 change-case: 5.4.4 ci-info: 4.3.0 clean-regexp: 1.0.0 core-js-compat: 3.45.0 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.37.0(jiti@2.6.1) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.4.0 @@ -18211,7 +18411,29 @@ snapshots: pluralize: 8.0.0 regexp-tree: 0.1.27 regjsparser: 0.12.0 - semver: 7.7.2 + semver: 7.7.3 + strip-indent: 4.0.0 + + eslint-plugin-unicorn@61.0.2(eslint@9.37.0(jiti@2.6.1)): + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint/plugin-kit': 0.3.5 + change-case: 5.4.4 + ci-info: 4.3.0 + clean-regexp: 1.0.0 + core-js-compat: 3.45.0 + eslint: 9.37.0(jiti@2.6.1) + esquery: 1.6.0 + find-up-simple: 1.0.1 + globals: 16.4.0 + indent-string: 5.0.0 + is-builtin-module: 5.0.0 + jsesc: 3.1.0 + pluralize: 8.0.0 + regexp-tree: 0.1.27 + regjsparser: 0.12.0 + semver: 7.7.3 strip-indent: 4.0.0 eslint-scope@5.1.1: @@ -18228,16 +18450,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.35.0(jiti@2.5.1): + eslint@9.37.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.1 - '@eslint/core': 0.15.2 + '@eslint/config-helpers': 0.4.0 + '@eslint/core': 0.16.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.35.0 - '@eslint/plugin-kit': 0.3.5 + '@eslint/js': 9.37.0 + '@eslint/plugin-kit': 0.4.0 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -18266,7 +18488,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.5.1 + jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -18325,7 +18547,7 @@ snapshots: dependencies: '@types/estree-jsx': 1.0.5 astring: 1.9.0 - source-map: 0.7.4 + source-map: 0.7.6 estree-util-value-to-estree@3.4.0: dependencies: @@ -18352,7 +18574,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 require-like: 0.1.2 event-emitter@0.3.5: @@ -18364,6 +18586,10 @@ snapshots: eventemitter3@4.0.7: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.7.0 + events@3.3.0: {} execa@5.1.1: @@ -18515,7 +18741,7 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} fast-xml-parser@5.2.5: dependencies: @@ -18551,11 +18777,11 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-loader@6.2.0(webpack@5.100.2): + file-loader@6.2.0(webpack@5.102.1): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.100.2 + webpack: 5.102.1 file-source@0.6.1: dependencies: @@ -18652,8 +18878,8 @@ snapshots: minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.7.2 - tapable: 2.2.2 + semver: 7.7.3 + tapable: 2.3.0 typescript: 5.8.3 webpack: 5.100.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) @@ -18794,6 +19020,10 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regex.js@1.2.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + glob-to-regexp@0.4.1: {} glob@10.4.5: @@ -18910,8 +19140,6 @@ snapshots: has-flag@4.0.0: {} - has-own-prop@2.0.0: {} - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -19030,7 +19258,7 @@ snapshots: space-separated-tokens: 2.0.2 style-to-js: 1.1.17 unist-util-position: 5.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -19076,6 +19304,8 @@ snapshots: he@1.2.0: {} + highlight.js@11.11.1: {} + history@4.10.1: dependencies: '@babel/runtime': 7.28.4 @@ -19111,8 +19341,6 @@ snapshots: whatwg-encoding: 3.1.1 optional: true - html-entities@2.6.0: {} - html-escaper@2.0.2: {} html-minifier-terser@6.1.0: @@ -19147,15 +19375,15 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.100.2): + html-webpack-plugin@5.6.3(webpack@5.102.1): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.3.0 optionalDependencies: - webpack: 5.100.2 + webpack: 5.102.1 htmlparser2@6.1.0: dependencies: @@ -19262,6 +19490,8 @@ snapshots: human-signals@2.1.0: {} + hyperdyperid@1.2.0: {} + i18n-iso-countries@7.14.0: dependencies: diacritics: 1.3.0 @@ -19299,7 +19529,7 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-in-the-middle@1.14.2: + import-in-the-middle@1.14.4: dependencies: acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) @@ -19331,9 +19561,9 @@ snapshots: inline-style-parser@0.2.4: {} - inquirer@8.2.7(@types/node@22.18.5): + inquirer@8.2.7(@types/node@22.18.9): dependencies: - '@inquirer/external-editor': 1.0.2(@types/node@22.18.5) + '@inquirer/external-editor': 1.0.2(@types/node@22.18.9) ansi-escapes: 4.3.2 chalk: 4.1.2 cli-cursor: 3.1.0 @@ -19353,20 +19583,20 @@ snapshots: internmap@2.0.3: {} - intl-messageformat@10.7.16: + intl-messageformat@10.7.17: dependencies: - '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/ecma402-abstract': 2.3.5 '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.2 + '@formatjs/icu-messageformat-parser': 2.11.3 tslib: 2.8.1 invariant@2.2.4: dependencies: loose-envify: 1.4.0 - ioredis@5.7.0: + ioredis@5.8.0: dependencies: - '@ioredis/commands': 1.3.0 + '@ioredis/commands': 1.4.0 cluster-key-slot: 1.1.2 debug: 4.4.3 denque: 2.1.0 @@ -19393,8 +19623,6 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -19417,6 +19645,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-extendable@0.1.1: {} is-extglob@2.1.1: {} @@ -19429,6 +19659,10 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 @@ -19438,6 +19672,8 @@ snapshots: is-interactive@2.0.0: {} + is-network-error@1.3.0: {} + is-npm@6.0.0: {} is-number@7.0.0: {} @@ -19489,6 +19725,10 @@ snapshots: dependencies: is-docker: 2.2.1 + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + is-yarn-global@0.4.1: {} isarray@0.0.1: {} @@ -19511,7 +19751,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: @@ -19537,7 +19777,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.18.5 + '@types/node': 22.18.9 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -19545,13 +19785,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -19560,7 +19800,7 @@ snapshots: jiti@2.4.2: {} - jiti@2.5.1: {} + jiti@2.6.1: {} joi@17.13.3: dependencies: @@ -19819,7 +20059,7 @@ snapshots: lightningcss@1.30.1: dependencies: - detect-libc: 2.1.0 + detect-libc: 2.1.2 optionalDependencies: lightningcss-darwin-arm64: 1.30.1 lightningcss-darwin-x64: 1.30.1 @@ -19842,7 +20082,7 @@ snapshots: load-tsconfig@0.2.5: {} - loader-runner@4.3.0: {} + loader-runner@4.3.1: {} loader-utils@2.0.4: dependencies: @@ -19929,8 +20169,6 @@ snapshots: lunr@2.3.9: {} - luxon@3.6.1: {} - luxon@3.7.2: {} lz-string@1.5.0: {} @@ -19955,7 +20193,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 make-fetch-happen@14.0.3: dependencies: @@ -19998,7 +20236,7 @@ snapshots: tinyqueue: 2.0.3 vt-pbf: 3.1.3 - maplibre-gl@5.7.1: + maplibre-gl@5.8.0: dependencies: '@mapbox/geojson-rewind': 0.5.2 '@mapbox/jsonlint-lines-primitives': 2.0.2 @@ -20007,7 +20245,7 @@ snapshots: '@mapbox/unitbezier': 0.0.1 '@mapbox/vector-tile': 2.0.4 '@mapbox/whoots-js': 3.1.0 - '@maplibre/maplibre-gl-style-spec': 23.3.0 + '@maplibre/maplibre-gl-style-spec': 24.2.0 '@maplibre/vt-pbf': 4.0.3 '@types/geojson': 7946.0.16 '@types/geojson-vt': 3.2.5 @@ -20037,10 +20275,10 @@ snapshots: math-intrinsics@1.1.0: {} - md-to-react-email@5.0.5(react@19.1.1): + md-to-react-email@5.0.5(react@19.2.0): dependencies: marked: 7.0.4 - react: 19.1.1 + react: 19.2.0 mdast-util-directive@3.1.0: dependencies: @@ -20172,7 +20410,7 @@ snapshots: parse-entities: 4.0.2 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -20242,6 +20480,15 @@ snapshots: dependencies: fs-monkey: 1.1.0 + memfs@4.49.0: + dependencies: + '@jsonjoy.com/json-pack': 1.20.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + memoizee@0.4.17: dependencies: d: 1.0.2 @@ -20379,7 +20626,7 @@ snapshots: micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdx-md@2.0.0: dependencies: @@ -20395,7 +20642,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdxjs@3.0.0: dependencies: @@ -20431,7 +20678,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-factory-space@1.1.0: dependencies: @@ -20503,7 +20750,7 @@ snapshots: estree-util-visit: 2.0.0 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-util-html-tag-name@2.0.1: {} @@ -20598,11 +20845,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.2(webpack@5.100.2): + mini-css-extract-plugin@2.9.2(webpack@5.102.1): dependencies: - schema-utils: 4.3.2 - tapable: 2.2.2 - webpack: 5.100.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + webpack: 5.102.1 minimalistic-assert@1.0.1: {} @@ -20632,7 +20879,7 @@ snapshots: dependencies: minipass: 7.1.2 minipass-sized: 1.0.3 - minizlib: 3.0.2 + minizlib: 3.1.0 optionalDependencies: encoding: 0.1.13 @@ -20661,7 +20908,7 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - minizlib@3.0.2: + minizlib@3.1.0: dependencies: minipass: 7.1.2 @@ -20675,8 +20922,6 @@ snapshots: mkdirp@1.0.4: {} - mkdirp@3.0.1: {} - mnemonist@0.40.3: dependencies: obliterator: 2.0.5 @@ -20762,16 +21007,16 @@ snapshots: neo-async@2.6.2: {} - nest-commander@3.19.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@types/inquirer@8.2.11)(@types/node@22.18.5)(typescript@5.9.2): + nest-commander@3.20.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@types/inquirer@8.2.11)(@types/node@22.18.9)(typescript@5.9.3): dependencies: '@fig/complete-commander': 3.2.0(commander@11.1.0) - '@golevelup/nestjs-discovery': 4.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6) + '@golevelup/nestjs-discovery': 5.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6) '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@types/inquirer': 8.2.11 commander: 11.1.0 - cosmiconfig: 8.3.6(typescript@5.9.2) - inquirer: 8.2.7(@types/node@22.18.5) + cosmiconfig: 8.3.6(typescript@5.9.3) + inquirer: 8.2.7(@types/node@22.18.9) transitivePeerDependencies: - '@types/node' - typescript @@ -20839,7 +21084,7 @@ snapshots: node-gyp-build-optional-packages@5.2.2: dependencies: - detect-libc: 2.1.0 + detect-libc: 2.1.2 optional: true node-gyp-build@4.8.4: {} @@ -20852,16 +21097,16 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 - tar: 7.4.3 + semver: 7.7.3 + tar: 7.5.1 tinyglobby: 0.2.15 which: 5.0.0 transitivePeerDependencies: - supports-color - node-releases@2.0.19: {} + node-releases@2.0.23: {} - nodemailer@7.0.6: {} + nodemailer@7.0.7: {} nopt@1.0.10: dependencies: @@ -20902,11 +21147,11 @@ snapshots: dependencies: boolbase: 1.0.0 - null-loader@4.0.1(webpack@5.100.2): + null-loader@4.0.1(webpack@5.102.1): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.100.2 + webpack: 5.102.1 nwsapi@2.2.22: optional: true @@ -20919,7 +21164,7 @@ snapshots: pkg-types: 2.3.0 tinyexec: 0.3.2 - oauth4webapi@3.8.1: {} + oauth4webapi@3.8.2: {} object-assign@4.1.1: {} @@ -20975,6 +21220,13 @@ snapshots: dependencies: mimic-function: 5.0.1 + open@10.2.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -20983,10 +21235,10 @@ snapshots: opener@1.5.2: {} - openid-client@6.8.0: + openid-client@6.8.1: dependencies: jose: 6.1.0 - oauth4webapi: 3.8.1 + oauth4webapi: 3.8.2 optionator@0.9.4: dependencies: @@ -21060,9 +21312,10 @@ snapshots: eventemitter3: 4.0.7 p-timeout: 3.2.0 - p-retry@4.6.2: + p-retry@6.2.1: dependencies: - '@types/retry': 0.12.0 + '@types/retry': 0.12.2 + is-network-error: 1.3.0 retry: 0.13.1 p-timeout@3.2.0: @@ -21078,7 +21331,7 @@ snapshots: got: 12.6.1 registry-auth-token: 5.1.0 registry-url: 6.0.1 - semver: 7.7.2 + semver: 7.7.3 param-case@3.0.4: dependencies: @@ -21246,11 +21499,11 @@ snapshots: exsolve: 1.0.7 pathe: 2.0.3 - playwright-core@1.55.0: {} + playwright-core@1.55.1: {} - playwright@1.55.0: + playwright@1.55.1: dependencies: - playwright-core: 1.55.0 + playwright-core: 1.55.1 optionalDependencies: fsevents: 2.3.2 @@ -21312,7 +21565,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.6 @@ -21320,7 +21573,7 @@ snapshots: postcss-convert-values@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -21434,20 +21687,21 @@ snapshots: optionalDependencies: postcss: 8.5.6 - postcss-load-config@4.0.2(postcss@8.5.6): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.1): dependencies: lilconfig: 3.1.3 - yaml: 2.8.1 optionalDependencies: - postcss: 8.5.6 - - postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.9.2)(webpack@5.100.2): - dependencies: - cosmiconfig: 8.3.6(typescript@5.9.2) jiti: 1.21.7 postcss: 8.5.6 - semver: 7.7.2 - webpack: 5.100.2 + yaml: 2.8.1 + + postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.9.3)(webpack@5.102.1): + dependencies: + cosmiconfig: 8.3.6(typescript@5.9.3) + jiti: 1.21.7 + postcss: 8.5.6 + semver: 7.7.3 + webpack: 5.102.1 transitivePeerDependencies: - typescript @@ -21470,7 +21724,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.5.6): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 @@ -21490,7 +21744,7 @@ snapshots: postcss-minify-params@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -21564,7 +21818,7 @@ snapshots: postcss-normalize-unicode@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -21638,7 +21892,7 @@ snapshots: '@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.6) '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.6) autoprefixer: 10.4.21(postcss@8.5.6) - browserslist: 4.25.3 + browserslist: 4.26.3 css-blank-pseudo: 7.0.1(postcss@8.5.6) css-has-pseudo: 7.0.2(postcss@8.5.6) css-prefers-color-scheme: 10.0.0(postcss@8.5.6) @@ -21682,7 +21936,7 @@ snapshots: postcss-reduce-initial@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 caniuse-api: 3.0.0 postcss: 8.5.6 @@ -21768,19 +22022,19 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-organize-imports@4.2.0(prettier@3.6.2)(typescript@5.9.2): + prettier-plugin-organize-imports@4.3.0(prettier@3.6.2)(typescript@5.9.3): dependencies: prettier: 3.6.2 - typescript: 5.9.2 + typescript: 5.9.3 prettier-plugin-sort-json@4.1.1(prettier@3.6.2): dependencies: prettier: 3.6.2 - prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.38.10): + prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.39.11): dependencies: prettier: 3.6.2 - svelte: 5.38.10 + svelte: 5.39.11 prettier@3.6.2: {} @@ -21859,7 +22113,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.18.5 + '@types/node': 22.18.9 long: 5.3.2 protocol-buffers-schema@3.6.0: {} @@ -21943,11 +22197,11 @@ snapshots: iconv-lite: 0.7.0 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@5.100.2): + raw-loader@4.0.2(webpack@5.102.1): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.100.2 + webpack: 5.102.1 rc@1.2.8: dependencies: @@ -21962,19 +22216,19 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-dom@19.1.1(react@19.1.1): + react-dom@19.2.0(react@19.2.0): dependencies: - react: 19.1.1 - scheduler: 0.26.0 + react: 19.2.0 + scheduler: 0.27.0 - react-email@4.2.11: + react-email@4.2.12: dependencies: '@babel/parser': 7.28.4 '@babel/traverse': 7.28.4 chokidar: 4.0.3 commander: 13.1.0 debounce: 2.2.0 - esbuild: 0.25.9 + esbuild: 0.25.10 glob: 11.0.3 jiti: 2.4.2 log-symbols: 7.0.1 @@ -22000,11 +22254,11 @@ snapshots: dependencies: react: 18.3.1 - react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.100.2): + react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.102.1): dependencies: '@babel/runtime': 7.28.4 react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - webpack: 5.100.2 + webpack: 5.102.1 react-promise-suspense@0.3.4: dependencies: @@ -22044,7 +22298,7 @@ snapshots: dependencies: loose-envify: 1.4.0 - react@19.1.1: {} + react@19.2.0: {} read-cache@1.0.0: dependencies: @@ -22090,15 +22344,14 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.15.0): + recma-jsx@1.0.1(acorn@8.15.0): dependencies: + acorn: 8.15.0 acorn-jsx: 5.3.2(acorn@8.15.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 unified: 11.0.5 - transitivePeerDependencies: - - acorn recma-parse@1.0.0: dependencies: @@ -22216,7 +22469,7 @@ snapshots: transitivePeerDependencies: - supports-color - remark-mdx@3.1.0: + remark-mdx@3.1.1: dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 @@ -22323,40 +22576,41 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-visualizer@6.0.3(rollup@4.50.1): + rollup-plugin-visualizer@6.0.4(rollup@4.52.4): dependencies: open: 8.4.2 picomatch: 4.0.3 - source-map: 0.7.4 + source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.50.1 + rollup: 4.52.4 - rollup@4.50.1: + rollup@4.52.4: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.50.1 - '@rollup/rollup-android-arm64': 4.50.1 - '@rollup/rollup-darwin-arm64': 4.50.1 - '@rollup/rollup-darwin-x64': 4.50.1 - '@rollup/rollup-freebsd-arm64': 4.50.1 - '@rollup/rollup-freebsd-x64': 4.50.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.50.1 - '@rollup/rollup-linux-arm-musleabihf': 4.50.1 - '@rollup/rollup-linux-arm64-gnu': 4.50.1 - '@rollup/rollup-linux-arm64-musl': 4.50.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.50.1 - '@rollup/rollup-linux-ppc64-gnu': 4.50.1 - '@rollup/rollup-linux-riscv64-gnu': 4.50.1 - '@rollup/rollup-linux-riscv64-musl': 4.50.1 - '@rollup/rollup-linux-s390x-gnu': 4.50.1 - '@rollup/rollup-linux-x64-gnu': 4.50.1 - '@rollup/rollup-linux-x64-musl': 4.50.1 - '@rollup/rollup-openharmony-arm64': 4.50.1 - '@rollup/rollup-win32-arm64-msvc': 4.50.1 - '@rollup/rollup-win32-ia32-msvc': 4.50.1 - '@rollup/rollup-win32-x64-msvc': 4.50.1 + '@rollup/rollup-android-arm-eabi': 4.52.4 + '@rollup/rollup-android-arm64': 4.52.4 + '@rollup/rollup-darwin-arm64': 4.52.4 + '@rollup/rollup-darwin-x64': 4.52.4 + '@rollup/rollup-freebsd-arm64': 4.52.4 + '@rollup/rollup-freebsd-x64': 4.52.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 + '@rollup/rollup-linux-arm-musleabihf': 4.52.4 + '@rollup/rollup-linux-arm64-gnu': 4.52.4 + '@rollup/rollup-linux-arm64-musl': 4.52.4 + '@rollup/rollup-linux-loong64-gnu': 4.52.4 + '@rollup/rollup-linux-ppc64-gnu': 4.52.4 + '@rollup/rollup-linux-riscv64-gnu': 4.52.4 + '@rollup/rollup-linux-riscv64-musl': 4.52.4 + '@rollup/rollup-linux-s390x-gnu': 4.52.4 + '@rollup/rollup-linux-x64-gnu': 4.52.4 + '@rollup/rollup-linux-x64-musl': 4.52.4 + '@rollup/rollup-openharmony-arm64': 4.52.4 + '@rollup/rollup-win32-arm64-msvc': 4.52.4 + '@rollup/rollup-win32-ia32-msvc': 4.52.4 + '@rollup/rollup-win32-x64-gnu': 4.52.4 + '@rollup/rollup-win32-x64-msvc': 4.52.4 fsevents: 2.3.3 router@2.2.0: @@ -22379,16 +22633,18 @@ snapshots: postcss: 8.5.6 strip-json-comments: 3.1.1 + run-applescript@7.1.0: {} + run-async@2.4.1: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - runed@0.29.2(svelte@5.38.10): + runed@0.29.2(svelte@5.39.11): dependencies: esm-env: 1.2.2 - svelte: 5.38.10 + svelte: 5.39.11 rw@1.3.3: {} @@ -22434,7 +22690,7 @@ snapshots: dependencies: loose-envify: 1.4.0 - scheduler@0.26.0: {} + scheduler@0.27.0: {} schema-dts@1.1.5: {} @@ -22444,7 +22700,7 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.3.2: + schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 @@ -22471,11 +22727,11 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 semver@6.3.1: {} - semver@7.7.2: {} + semver@7.7.3: {} send@0.19.0: dependencies: @@ -22587,36 +22843,36 @@ snapshots: stream-source: 0.3.5 text-encoding: 0.6.4 - sharp@0.34.3: + sharp@0.34.4: dependencies: - color: 4.2.3 - detect-libc: 2.1.0 + '@img/colour': 1.0.0 + detect-libc: 2.1.2 node-addon-api: 8.5.0 node-gyp: 11.4.2 - semver: 7.7.2 + semver: 7.7.3 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.3 - '@img/sharp-darwin-x64': 0.34.3 - '@img/sharp-libvips-darwin-arm64': 1.2.0 - '@img/sharp-libvips-darwin-x64': 1.2.0 - '@img/sharp-libvips-linux-arm': 1.2.0 - '@img/sharp-libvips-linux-arm64': 1.2.0 - '@img/sharp-libvips-linux-ppc64': 1.2.0 - '@img/sharp-libvips-linux-s390x': 1.2.0 - '@img/sharp-libvips-linux-x64': 1.2.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 - '@img/sharp-libvips-linuxmusl-x64': 1.2.0 - '@img/sharp-linux-arm': 0.34.3 - '@img/sharp-linux-arm64': 0.34.3 - '@img/sharp-linux-ppc64': 0.34.3 - '@img/sharp-linux-s390x': 0.34.3 - '@img/sharp-linux-x64': 0.34.3 - '@img/sharp-linuxmusl-arm64': 0.34.3 - '@img/sharp-linuxmusl-x64': 0.34.3 - '@img/sharp-wasm32': 0.34.3 - '@img/sharp-win32-arm64': 0.34.3 - '@img/sharp-win32-ia32': 0.34.3 - '@img/sharp-win32-x64': 0.34.3 + '@img/sharp-darwin-arm64': 0.34.4 + '@img/sharp-darwin-x64': 0.34.4 + '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-linux-arm': 0.34.4 + '@img/sharp-linux-arm64': 0.34.4 + '@img/sharp-linux-ppc64': 0.34.4 + '@img/sharp-linux-s390x': 0.34.4 + '@img/sharp-linux-x64': 0.34.4 + '@img/sharp-linuxmusl-arm64': 0.34.4 + '@img/sharp-linuxmusl-x64': 0.34.4 + '@img/sharp-wasm32': 0.34.4 + '@img/sharp-win32-arm64': 0.34.4 + '@img/sharp-win32-ia32': 0.34.4 + '@img/sharp-win32-x64': 0.34.4 transitivePeerDependencies: - supports-color @@ -22672,11 +22928,7 @@ snapshots: simple-concat: 1.0.1 optional: true - simple-icons@15.15.0: {} - - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 + simple-icons@15.16.0: {} sirv@2.0.4: dependencies: @@ -22789,6 +23041,8 @@ snapshots: source-map@0.7.4: {} + source-map@0.7.6: {} + space-separated-tokens@1.1.5: {} space-separated-tokens@2.0.2: {} @@ -22820,7 +23074,7 @@ snapshots: sprintf-js@1.0.3: {} - sql-formatter@15.6.9: + sql-formatter@15.6.10: dependencies: argparse: 2.0.1 nearley: 2.20.1 @@ -22830,9 +23084,9 @@ snapshots: ssh-remote-port-forward@1.0.4: dependencies: '@types/ssh2': 0.5.52 - ssh2: 1.16.0 + ssh2: 1.17.0 - ssh2@1.16.0: + ssh2@1.17.0: dependencies: asn1: 0.2.6 bcrypt-pbkdf: 1.0.2 @@ -22862,12 +23116,11 @@ snapshots: streamsearch@1.1.0: {} - streamx@2.22.1: + streamx@2.23.0: dependencies: + events-universal: 1.0.1 fast-fifo: 1.3.2 text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.6.1 string-width@4.2.3: dependencies: @@ -22952,7 +23205,7 @@ snapshots: stylehacks@6.1.1(postcss@8.5.6): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 postcss: 8.5.6 postcss-selector-parser: 6.1.2 @@ -23005,19 +23258,19 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.3.1(picomatch@4.0.3)(svelte@5.38.10)(typescript@5.9.2): + svelte-check@4.3.2(picomatch@4.0.3)(svelte@5.39.11)(typescript@5.9.3): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.3) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.38.10 - typescript: 5.9.2 + svelte: 5.39.11 + typescript: 5.9.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.3.2(svelte@5.38.10): + svelte-eslint-parser@1.3.3(svelte@5.39.11): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -23026,50 +23279,54 @@ snapshots: postcss-scss: 4.0.9(postcss@8.5.6) postcss-selector-parser: 7.1.0 optionalDependencies: - svelte: 5.38.10 + svelte: 5.39.11 svelte-gestures@5.2.2: {} - svelte-i18n@4.0.1(svelte@5.38.10): + svelte-highlight@7.8.4: + dependencies: + highlight.js: 11.11.1 + + svelte-i18n@4.0.1(svelte@5.39.11): dependencies: cli-color: 2.0.4 deepmerge: 4.3.1 esbuild: 0.19.12 estree-walker: 2.0.2 - intl-messageformat: 10.7.16 + intl-messageformat: 10.7.17 sade: 1.8.1 - svelte: 5.38.10 + svelte: 5.39.11 tiny-glob: 0.2.9 - svelte-maplibre@1.2.1(svelte@5.38.10): + svelte-maplibre@1.2.1(svelte@5.39.11): dependencies: d3-geo: 3.1.1 dequal: 2.0.3 just-compare: 2.3.0 - maplibre-gl: 5.7.1 + maplibre-gl: 5.8.0 pmtiles: 3.2.1 - svelte: 5.38.10 + svelte: 5.39.11 - svelte-parse-markup@0.1.5(svelte@5.38.10): + svelte-parse-markup@0.1.5(svelte@5.39.11): dependencies: - svelte: 5.38.10 + svelte: 5.39.11 - svelte-persisted-store@0.12.0(svelte@5.38.10): + svelte-persisted-store@0.12.0(svelte@5.39.11): dependencies: - svelte: 5.38.10 + svelte: 5.39.11 - svelte-toolbelt@0.9.3(svelte@5.38.10): + svelte-toolbelt@0.9.3(svelte@5.39.11): dependencies: clsx: 2.1.1 - runed: 0.29.2(svelte@5.38.10) + runed: 0.29.2(svelte@5.39.11) style-to-object: 1.0.9 - svelte: 5.38.10 + svelte: 5.39.11 - svelte@5.38.10: + svelte@5.39.11: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) '@types/estree': 1.0.8 acorn: 8.15.0 aria-query: 5.3.2 @@ -23080,7 +23337,7 @@ snapshots: is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.19 - zimmerframe: 1.1.2 + zimmerframe: 1.1.4 svg-parser@2.0.4: {} @@ -23113,27 +23370,27 @@ snapshots: tailwind-merge@3.3.1: {} - tailwind-variants@3.1.1(tailwind-merge@3.3.1)(tailwindcss@4.1.13): + tailwind-variants@3.1.1(tailwind-merge@3.3.1)(tailwindcss@4.1.14): dependencies: - tailwindcss: 4.1.13 + tailwindcss: 4.1.14 optionalDependencies: tailwind-merge: 3.3.1 - tailwindcss-email-variants@3.0.4(tailwindcss@3.4.17): + tailwindcss-email-variants@3.0.4(tailwindcss@3.4.18(yaml@2.8.1)): dependencies: - tailwindcss: 3.4.17 + tailwindcss: 3.4.18(yaml@2.8.1) - tailwindcss-mso@2.0.2(tailwindcss@3.4.17): + tailwindcss-mso@2.0.2(tailwindcss@3.4.18(yaml@2.8.1)): dependencies: - tailwindcss: 3.4.17 + tailwindcss: 3.4.18(yaml@2.8.1) - tailwindcss-preset-email@1.4.0(tailwindcss@3.4.17): + tailwindcss-preset-email@1.4.0(tailwindcss@3.4.18(yaml@2.8.1)): dependencies: - tailwindcss: 3.4.17 - tailwindcss-email-variants: 3.0.4(tailwindcss@3.4.17) - tailwindcss-mso: 2.0.2(tailwindcss@3.4.17) + tailwindcss: 3.4.18(yaml@2.8.1) + tailwindcss-email-variants: 3.0.4(tailwindcss@3.4.18(yaml@2.8.1)) + tailwindcss-mso: 2.0.2(tailwindcss@3.4.18(yaml@2.8.1)) - tailwindcss@3.4.17: + tailwindcss@3.4.18(yaml@2.8.1): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -23152,31 +23409,32 @@ snapshots: postcss: 8.5.6 postcss-import: 15.1.0(postcss@8.5.6) postcss-js: 4.1.0(postcss@8.5.6) - postcss-load-config: 4.0.2(postcss@8.5.6) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.1) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - - ts-node + - tsx + - yaml - tailwindcss@4.1.13: {} + tailwindcss@4.1.14: {} - tapable@2.2.2: {} + tapable@2.3.0: {} - tar-fs@2.1.3: + tar-fs@2.1.4: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 pump: 3.0.3 tar-stream: 2.2.0 - tar-fs@3.1.0: + tar-fs@3.1.1: dependencies: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.2.0 + bare-fs: 4.4.7 bare-path: 3.0.0 transitivePeerDependencies: - bare-buffer @@ -23193,7 +23451,7 @@ snapshots: dependencies: b4a: 1.6.7 fast-fifo: 1.3.2 - streamx: 2.22.1 + streamx: 2.23.0 tar@6.2.1: dependencies: @@ -23204,34 +23462,33 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - tar@7.4.3: + tar@7.5.1: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 minipass: 7.1.2 - minizlib: 3.0.2 - mkdirp: 3.0.1 + minizlib: 3.1.0 yallist: 5.0.0 terser-webpack-plugin@5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.5(@swc/helpers@0.5.17))): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.43.1 webpack: 5.100.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) optionalDependencies: '@swc/core': 1.13.5(@swc/helpers@0.5.17) - terser-webpack-plugin@5.3.14(webpack@5.100.2): + terser-webpack-plugin@5.3.14(webpack@5.102.1): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.100.2 + webpack: 5.102.1 terser@5.43.1: dependencies: @@ -23246,21 +23503,21 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - testcontainers@11.5.1: + testcontainers@11.7.1: dependencies: '@balena/dockerignore': 1.0.2 - '@types/dockerode': 3.3.42 + '@types/dockerode': 3.3.44 archiver: 7.0.1 async-lock: 1.4.1 byline: 5.0.0 debug: 4.4.3 - docker-compose: 1.2.0 - dockerode: 4.0.7 + docker-compose: 1.3.0 + dockerode: 4.0.9 get-port: 7.1.0 proper-lockfile: 4.1.2 properties-reader: 2.3.0 ssh-remote-port-forward: 1.0.4 - tar-fs: 3.1.0 + tar-fs: 3.1.1 tmp: 0.2.5 undici: 7.16.0 transitivePeerDependencies: @@ -23281,6 +23538,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thingies@2.5.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + three@0.179.1: {} three@0.180.0: {} @@ -23378,6 +23639,10 @@ snapshots: punycode: 2.3.1 optional: true + tree-dump@1.1.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + tree-kill@1.2.2: {} trim-lines@3.0.1: {} @@ -23390,21 +23655,21 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@2.1.0(typescript@5.9.2): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.9.2 + typescript: 5.9.3 ts-interface-checker@0.1.13: {} - tsconfck@3.1.6(typescript@5.9.2): + tsconfck@3.1.6(typescript@5.9.3): optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 tsconfig-paths-webpack-plugin@4.2.0: dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.3 - tapable: 2.2.2 + tapable: 2.3.0 tsconfig-paths: 4.2.0 tsconfig-paths@4.2.0: @@ -23448,20 +23713,20 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) - typescript: 5.9.2 + '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.37.0(jiti@2.6.1) + typescript: 5.9.3 transitivePeerDependencies: - supports-color typescript@5.8.3: {} - typescript@5.9.2: {} + typescript@5.9.3: {} ua-is-frozen@0.1.2: {} @@ -23487,7 +23752,7 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.12.0: + undici-types@7.14.0: optional: true undici@7.16.0: {} @@ -23592,9 +23857,9 @@ snapshots: unpipe@1.0.0: {} - unplugin-swc@1.5.7(@swc/core@1.13.5(@swc/helpers@0.5.17))(rollup@4.50.1): + unplugin-swc@1.5.7(@swc/core@1.13.5(@swc/helpers@0.5.17))(rollup@4.52.4): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@rollup/pluginutils': 5.3.0(rollup@4.52.4) '@swc/core': 1.13.5(@swc/helpers@0.5.17) load-tsconfig: 0.2.5 unplugin: 2.3.10 @@ -23608,9 +23873,9 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.3(browserslist@4.25.3): + update-browserslist-db@1.1.3(browserslist@4.26.3): dependencies: - browserslist: 4.25.3 + browserslist: 4.26.3 escalade: 3.2.0 picocolors: 1.1.1 @@ -23627,7 +23892,7 @@ snapshots: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.7.2 + semver: 7.7.3 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -23635,14 +23900,14 @@ snapshots: dependencies: punycode: 2.3.1 - url-loader@4.1.1(file-loader@6.2.0(webpack@5.100.2))(webpack@5.100.2): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.102.1))(webpack@5.102.1): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.100.2 + webpack: 5.102.1 optionalDependencies: - file-loader: 6.2.0(webpack@5.100.2) + file-loader: 6.2.0(webpack@5.102.1) url-parse@1.5.10: dependencies: @@ -23679,8 +23944,6 @@ snapshots: uuid@8.3.2: {} - uuid@9.0.1: {} - validator@13.15.15: {} value-equal@1.0.1: {} @@ -23699,7 +23962,7 @@ snapshots: '@types/unist': 2.0.11 unist-util-stringify-position: 2.0.3 - vfile-message@4.0.2: + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 @@ -23714,24 +23977,24 @@ snapshots: vfile@6.0.3: dependencies: '@types/unist': 3.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 - vite-imagetools@8.0.0(rollup@4.50.1): + vite-imagetools@8.0.0(rollup@4.52.4): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@rollup/pluginutils': 5.3.0(rollup@4.52.4) imagetools-core: 8.0.0 - sharp: 0.34.3 + sharp: 0.34.4 transitivePeerDependencies: - rollup - supports-color - vite-node@3.2.4(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -23746,13 +24009,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): + vite-node@3.2.4(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -23767,62 +24030,62 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)): dependencies: debug: 4.4.3 globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.9.2) + tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): + vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): dependencies: - esbuild: 0.25.9 + esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.50.1 + rollup: 4.52.4 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.18.5 + '@types/node': 22.18.9 fsevents: 2.3.3 - jiti: 2.5.1 + jiti: 2.6.1 lightningcss: 1.30.1 terser: 5.43.1 yaml: 2.8.1 - vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): + vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): dependencies: - esbuild: 0.25.9 + esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.50.1 + rollup: 4.52.4 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.5.1 + '@types/node': 24.7.1 fsevents: 2.3.3 - jiti: 2.5.1 + jiti: 2.6.1 lightningcss: 1.30.1 terser: 5.43.1 yaml: 2.8.1 - vitefu@1.1.1(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)): + vitefu@1.1.1(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)): optionalDependencies: - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - vitest-fetch-mock@0.4.5(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)): + vitest-fetch-mock@0.4.5(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)): dependencies: - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23840,12 +24103,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.18.5 + '@types/node': 22.18.9 happy-dom: 18.0.1 jsdom: 26.1.0(canvas@2.11.2(encoding@0.1.13)) transitivePeerDependencies: @@ -23862,11 +24125,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23884,12 +24147,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.9)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.18.5 + '@types/node': 22.18.9 happy-dom: 18.0.1 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: @@ -23906,11 +24169,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.7.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23928,12 +24191,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite: 7.1.9(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.7.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.5.1 + '@types/node': 24.7.1 happy-dom: 18.0.1 jsdom: 26.1.0(canvas@2.11.2) transitivePeerDependencies: @@ -24006,20 +24269,23 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@5.3.4(webpack@5.100.2): + webpack-dev-middleware@7.4.5(webpack@5.102.1): dependencies: colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 + memfs: 4.49.0 + mime-types: 3.0.1 + on-finished: 2.4.1 range-parser: 1.2.1 - schema-utils: 4.3.2 - webpack: 5.100.2 + schema-utils: 4.3.3 + optionalDependencies: + webpack: 5.102.1 - webpack-dev-server@4.15.2(webpack@5.100.2): + webpack-dev-server@5.2.2(webpack@5.102.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 '@types/express': 4.17.23 + '@types/express-serve-static-core': 4.19.6 '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.8 '@types/sockjs': 0.3.36 @@ -24030,25 +24296,22 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 express: 4.21.2 graceful-fs: 4.2.11 - html-entities: 2.6.0 http-proxy-middleware: 2.0.9(@types/express@4.17.23) ipaddr.js: 2.2.0 launch-editor: 2.10.0 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.3.2 + open: 10.2.0 + p-retry: 6.2.1 + schema-utils: 4.3.3 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.100.2) + webpack-dev-middleware: 7.4.5(webpack@5.102.1) ws: 8.18.3 optionalDependencies: - webpack: 5.100.2 + webpack: 5.102.1 transitivePeerDependencies: - bufferutil - debug @@ -24073,38 +24336,6 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.100.2: - dependencies: - '@types/eslint-scope': 3.7.7 - '@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.15.0 - acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.3 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.3 - es-module-lexer: 1.7.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.100.2) - watchpack: 2.4.4 - webpack-sources: 3.3.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - webpack@5.100.2(@swc/core@1.13.5(@swc/helpers@0.5.17)): dependencies: '@types/eslint-scope': 3.7.7 @@ -24115,7 +24346,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.3 + browserslist: 4.26.3 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -24124,11 +24355,11 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 + schema-utils: 4.3.3 + tapable: 2.3.0 terser-webpack-plugin: 5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) watchpack: 2.4.4 webpack-sources: 3.3.3 @@ -24137,7 +24368,39 @@ snapshots: - esbuild - uglify-js - webpackbar@6.0.1(webpack@5.100.2): + webpack@5.102.1: + dependencies: + '@types/eslint-scope': 3.7.7 + '@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.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.26.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.3 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(webpack@5.102.1) + watchpack: 2.4.4 + webpack-sources: 3.3.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpackbar@6.0.1(webpack@5.102.1): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -24146,7 +24409,7 @@ snapshots: markdown-table: 2.0.0 pretty-time: 1.1.0 std-env: 3.9.0 - webpack: 5.100.2 + webpack: 5.102.1 wrap-ansi: 7.0.0 websocket-driver@0.7.4: @@ -24255,6 +24518,10 @@ snapshots: ws@8.18.3: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + xdg-basedir@5.1.0: {} xml-js@1.6.11: @@ -24327,7 +24594,7 @@ snapshots: yoctocolors@2.1.2: {} - zimmerframe@1.1.2: {} + zimmerframe@1.1.4: {} zip-stream@6.0.1: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 880d115880..5fd79faba3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -27,7 +27,7 @@ onlyBuiltDependencies: - '@tailwindcss/oxide' overrides: canvas: 2.11.2 - sharp: ^0.34.3 + sharp: ^0.34.4 packageExtensions: nestjs-kysely: dependencies: diff --git a/readme_i18n/README_ar_JO.md b/readme_i18n/README_ar_JO.md index 4e7ba99dd2..e0e13eeaf6 100644 --- a/readme_i18n/README_ar_JO.md +++ b/readme_i18n/README_ar_JO.md @@ -28,7 +28,8 @@
Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -46,13 +47,13 @@ ## محتوى -- [الوثائق الرسمية](https://immich.app/docs) +- [الوثائق الرسمية](https://docs.immich.app) - [خريطة الطريق](https://github.com/orgs/immich-app/projects/1) - [تجريبي](#demo) - [سمات](#features) -- [مقدمة](https://immich.app/docs/overview/introduction) -- [تعليمات التحميل](https://immich.app/docs/install/requirements) -- [قواعد المساهمة](https://immich.app/docs/overview/support-the-project) +- [مقدمة](https://docs.immich.app/overview/introduction) +- [تعليمات التحميل](https://docs.immich.app/install/requirements) +- [قواعد المساهمة](https://docs.immich.app/overview/support-the-project) ## توثيق diff --git a/readme_i18n/README_ca_ES.md b/readme_i18n/README_ca_ES.md index 0b8dd5999b..d09362aa0f 100644 --- a/readme_i18n/README_ca_ES.md +++ b/readme_i18n/README_ca_ES.md @@ -27,7 +27,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -44,13 +45,13 @@ ## Contingut -- [Documentació oficial](https://immich.app/docs) +- [Documentació oficial](https://docs.immich.app) - [Mapa de ruta](https://github.com/orgs/immich-app/projects/1) - [Demo](#demo) - [Funcionalitats](#funcionalitats) -- [Introducció](https://immich.app/docs/overview/introduction) -- [Instal·lació](https://immich.app/docs/install/requirements) -- [Directrius de contribució](https://immich.app/docs/overview/support-the-project) +- [Introducció](https://docs.immich.app/overview/introduction) +- [Instal·lació](https://docs.immich.app/install/requirements) +- [Directrius de contribució](https://docs.immich.app/overview/support-the-project) ## Documentació diff --git a/readme_i18n/README_de_DE.md b/readme_i18n/README_de_DE.md index d24818b881..a8685e0902 100644 --- a/readme_i18n/README_de_DE.md +++ b/readme_i18n/README_de_DE.md @@ -27,7 +27,8 @@ 한국어 Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -50,14 +51,14 @@ ## Inhalt -- [Offizielle Dokumentation](https://immich.app/docs) -- [Über Immich](https://immich.app/docs/overview/introduction) -- [Installation](https://immich.app/docs/install/requirements) +- [Offizielle Dokumentation](https://docs.immich.app) +- [Über Immich](https://docs.immich.app/overview/introduction) +- [Installation](https://docs.immich.app/install/requirements) - [Roadmap](https://github.com/orgs/immich-app/projects/1) - [Demo](#demo) - [Funktionen](#funktionen) -- [Übersetzungen](https://immich.app/docs/developer/translations) -- [Beitragsrichtlinien](https://immich.app/docs/overview/support-the-project) +- [Übersetzungen](https://docs.immich.app/developer/translations) +- [Beitragsrichtlinien](https://docs.immich.app/overview/support-the-project) ## Demo @@ -107,7 +108,7 @@ Die Web-Demo kannst Du unter https://demo.immich.app finden. Für die Handy-App ## Übersetzungen -Mehr zum Thema Übersetzungen kannst du [hier](https://immich.app/docs/developer/translations) erfahren. +Mehr zum Thema Übersetzungen kannst du [hier](https://docs.immich.app/developer/translations) erfahren. Translation status diff --git a/readme_i18n/README_es_ES.md b/readme_i18n/README_es_ES.md index 00417c9188..032f8c50a8 100644 --- a/readme_i18n/README_es_ES.md +++ b/readme_i18n/README_es_ES.md @@ -27,7 +27,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -45,13 +46,13 @@ ## Contenido -- [Documentación oficial](https://immich.app/docs) +- [Documentación oficial](https://docs.immich.app) - [Hoja de ruta](https://github.com/orgs/immich-app/projects/1) - [Demo](#demo) - [Funciones](#funciones) -- [Introducción](https://immich.app/docs/overview/introduction) -- [Instalación](https://immich.app/docs/install/requirements) -- [Directrices para contribuir](https://immich.app/docs/overview/support-the-project) +- [Introducción](https://docs.immich.app/overview/introduction) +- [Instalación](https://docs.immich.app/install/requirements) +- [Directrices para contribuir](https://docs.immich.app/overview/support-the-project) ## Documentación @@ -99,7 +100,7 @@ contraseña: demo ## Traducciones -Lea mas acerca de las traducciones [acá](https://immich.app/docs/developer/translations). +Lea mas acerca de las traducciones [acá](https://docs.immich.app/developer/translations). Translation status diff --git a/readme_i18n/README_fr_FR.md b/readme_i18n/README_fr_FR.md index e1d4fb1cbc..349a0c49ce 100644 --- a/readme_i18n/README_fr_FR.md +++ b/readme_i18n/README_fr_FR.md @@ -27,7 +27,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -45,13 +46,13 @@ ## Sommaire -- [Documentation officielle](https://immich.app/docs) +- [Documentation officielle](https://docs.immich.app) - [Feuille de route](https://github.com/orgs/immich-app/projects/1) - [Démo](#démo) - [Fonctionnalités](#fonctionnalités) -- [Introduction](https://immich.app/docs/overview/introduction) -- [Installation](https://immich.app/docs/install/requirements) -- [Contribution](https://immich.app/docs/overview/support-the-project) +- [Introduction](https://docs.immich.app/overview/introduction) +- [Installation](https://docs.immich.app/install/requirements) +- [Contribution](https://docs.immich.app/overview/support-the-project) ## Documentation diff --git a/readme_i18n/README_it_IT.md b/readme_i18n/README_it_IT.md index 5a368fe1f9..711840fd9d 100644 --- a/readme_i18n/README_it_IT.md +++ b/readme_i18n/README_it_IT.md @@ -28,7 +28,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -49,14 +50,14 @@ ## Link utili -- [Documentazione](https://immich.app/docs) -- [Informazioni](https://immich.app/docs/overview/introduction) -- [Installazione](https://immich.app/docs/install/requirements) +- [Documentazione](https://docs.immich.app) +- [Informazioni](https://docs.immich.app/overview/introduction) +- [Installazione](https://docs.immich.app/install/requirements) - [Roadmap](https://immich.app/roadmap) - [Demo](#demo) - [Funzionalità](#funzionalità) -- [Traduzioni](https://immich.app/docs/developer/translations) -- [Contribuire](https://immich.app/docs/overview/support-the-project) +- [Traduzioni](https://docs.immich.app/developer/translations) +- [Contribuire](https://docs.immich.app/overview/support-the-project) ## Demo @@ -106,7 +107,7 @@ Per l’app mobile puoi usare `https://demo.immich.app` come `Server Endpoint UR ## Traduzioni -Scopri di più sulle traduzioni [qui](https://immich.app/docs/developer/translations). +Scopri di più sulle traduzioni [qui](https://docs.immich.app/developer/translations). Stato traduzioni diff --git a/readme_i18n/README_ja_JP.md b/readme_i18n/README_ja_JP.md index 60dd0f3ed7..0e74077895 100644 --- a/readme_i18n/README_ja_JP.md +++ b/readme_i18n/README_ja_JP.md @@ -27,7 +27,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Русский Português Brasileiro Svenska @@ -44,13 +45,13 @@ ## コンテンツ -- [公式ドキュメント](https://immich.app/docs) +- [公式ドキュメント](https://docs.immich.app) - [ロードマップ](https://github.com/orgs/immich-app/projects/1) - [デモ](#デモ) - [機能](#機能) -- [紹介](https://immich.app/docs/overview/introduction) -- [インストール](https://immich.app/docs/install/requirements) -- [コントリビューションガイド](https://immich.app/docs/overview/support-the-project) +- [紹介](https://docs.immich.app/overview/introduction) +- [インストール](https://docs.immich.app/install/requirements) +- [コントリビューションガイド](https://docs.immich.app/overview/support-the-project) ## ドキュメント diff --git a/readme_i18n/README_ko_KR.md b/readme_i18n/README_ko_KR.md index 031e2fd9ca..c2dfd11dd3 100644 --- a/readme_i18n/README_ko_KR.md +++ b/readme_i18n/README_ko_KR.md @@ -28,7 +28,8 @@ Deutsch Nederlands Türkçe -中文 +简体中文 +正體中文 Українська Русский Português Brasileiro @@ -50,14 +51,14 @@ ## 링크 -- [문서](https://immich.app/docs) -- [소개](https://immich.app/docs/overview/introduction) -- [설치](https://immich.app/docs/install/requirements) +- [문서](https://docs.immich.app) +- [소개](https://docs.immich.app/overview/introduction) +- [설치](https://docs.immich.app/install/requirements) - [로드맵](https://immich.app/roadmap) - [데모](#데모) - [기능](#기능) -- [번역](https://immich.app/docs/developer/tranlations) -- [기여](https://immich.app/docs/overview/support-the-project) +- [번역](https://docs.immich.app/developer/tranlations) +- [기여](https://docs.immich.app/overview/support-the-project) ## 데모 @@ -104,7 +105,7 @@ ## 번역 -번역에 대한 자세한 정보는 [이곳](https://immich.app/docs/developer/translations)에서 확인하세요. +번역에 대한 자세한 정보는 [이곳](https://docs.immich.app/developer/translations)에서 확인하세요. 번역 현황 diff --git a/readme_i18n/README_nl_NL.md b/readme_i18n/README_nl_NL.md index 46692bc612..ac72e9d238 100644 --- a/readme_i18n/README_nl_NL.md +++ b/readme_i18n/README_nl_NL.md @@ -27,7 +27,8 @@ 한국어 Deutsch Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -45,13 +46,13 @@ ## Inhoud -- [Officiële documentatie](https://immich.app/docs) +- [Officiële documentatie](https://docs.immich.app) - [Toekomstplannen](https://github.com/orgs/immich-app/projects/1) - [Demo](#demo) - [Functies](#functies) -- [Introductie](https://immich.app/docs/overview/introduction) -- [Installatie](https://immich.app/docs/install/requirements) -- [Richtlijnen voor bijdragen](https://immich.app/docs/overview/support-the-project) +- [Introductie](https://docs.immich.app/overview/introduction) +- [Installatie](https://docs.immich.app/install/requirements) +- [Richtlijnen voor bijdragen](https://docs.immich.app/overview/support-the-project) ## Documentatie @@ -102,7 +103,7 @@ Je kunt de demo [hier](https://demo.immich.app/) bekijken. Voor de mobiele app k ## Vertalingen -Je kunt [hier](https://immich.app/docs/developer/translations) meer over vertalingen lezen. +Je kunt [hier](https://docs.immich.app/developer/translations) meer over vertalingen lezen. ## Repository activiteit diff --git a/readme_i18n/README_pt_BR.md b/readme_i18n/README_pt_BR.md index 2320e8fd6f..d6f51cd779 100644 --- a/readme_i18n/README_pt_BR.md +++ b/readme_i18n/README_pt_BR.md @@ -29,7 +29,8 @@ Deutsch Nederlands Türkçe -中文 +简体中文 +正體中文 Українська Русский Svenska @@ -55,14 +56,14 @@ ## Links -- [Documentação](https://immich.app/docs) -- [Sobre](https://immich.app/docs/overview/introduction) -- [Instalação](https://immich.app/docs/install/requirements) +- [Documentação](https://docs.immich.app) +- [Sobre](https://docs.immich.app/overview/introduction) +- [Instalação](https://docs.immich.app/install/requirements) - [Roadmap](https://github.com/orgs/immich-app/projects/1) - [Demonstração](#demonstração) - [Funcionalidades](#funcionalidades) -- [Traduções](https://immich.app/docs/developer/translations) -- [Diretrizes de Contribuição](https://immich.app/docs/overview/support-the-project) +- [Traduções](https://docs.immich.app/developer/translations) +- [Diretrizes de Contribuição](https://docs.immich.app/overview/support-the-project) ## Demonstração @@ -115,7 +116,7 @@ Acesse a demonstração [aqui](https://demo.immich.app). No aplicativo para disp ## Traduções Leia mais sobre as traduções -[aqui](https://immich.app/docs/developer/translations). +[aqui](https://docs.immich.app/developer/translations). Status da tradução diff --git a/readme_i18n/README_ru_RU.md b/readme_i18n/README_ru_RU.md index be97259acc..e29adde9c1 100644 --- a/readme_i18n/README_ru_RU.md +++ b/readme_i18n/README_ru_RU.md @@ -28,7 +28,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Português Brasileiro Svenska @@ -51,14 +52,14 @@ ## Содержание -- [Официальная документация](https://immich.app/docs) -- [Введение](https://immich.app/docs/overview/introduction) -- [Установка](https://immich.app/docs/install/requirements) +- [Официальная документация](https://docs.immich.app) +- [Введение](https://docs.immich.app/overview/introduction) +- [Установка](https://docs.immich.app/install/requirements) - [План разработки](https://github.com/orgs/immich-app/projects/1) - [Демо](#demo) - [Возможности](#features) -- [Перевод](https://immich.app/docs/developer/translations) -- [Гид по участию и поддержке проекта](https://immich.app/docs/overview/support-the-project) +- [Перевод](https://docs.immich.app/developer/translations) +- [Гид по участию и поддержке проекта](https://docs.immich.app/overview/support-the-project) ## Демо @@ -107,7 +108,7 @@ ## Перевод -Всё про перевод проекта [Здесь](https://immich.app/docs/developer/translations). +Всё про перевод проекта [Здесь](https://docs.immich.app/developer/translations). Translation status diff --git a/readme_i18n/README_sv_SE.md b/readme_i18n/README_sv_SE.md index daa68b9874..a421c23c2e 100644 --- a/readme_i18n/README_sv_SE.md +++ b/readme_i18n/README_sv_SE.md @@ -29,7 +29,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -46,13 +47,13 @@ ## Innehåll -- [Officiell Dokumentation](https://immich.app/docs) +- [Officiell Dokumentation](https://docs.immich.app) - [Roadmap](https://github.com/orgs/immich-app/projects/1) - [Demo](#demo) - [Funktioner](#features) -- [Introduktion](https://immich.app/docs/overview/introduction) -- [Installation](https://immich.app/docs/install/requirements) -- [Riktlinjer för Bidrag](https://immich.app/docs/overview/support-the-project) +- [Introduktion](https://docs.immich.app/overview/introduction) +- [Installation](https://docs.immich.app/install/requirements) +- [Riktlinjer för Bidrag](https://docs.immich.app/overview/support-the-project) ## Dokumentation diff --git a/readme_i18n/README_th_TH.md b/readme_i18n/README_th_TH.md index bdb6db868d..cdc28b14e6 100644 --- a/readme_i18n/README_th_TH.md +++ b/readme_i18n/README_th_TH.md @@ -31,7 +31,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -52,14 +53,14 @@ ## ลิงก์ -- [คู่มือ](https://immich.app/docs) -- [เกี่ยวกับ](https://immich.app/docs/overview/introduction) -- [การติดตั้ง](https://immich.app/docs/install/requirements) +- [คู่มือ](https://docs.immich.app) +- [เกี่ยวกับ](https://docs.immich.app/overview/introduction) +- [การติดตั้ง](https://docs.immich.app/install/requirements) - [โรดแมป](https://immich.app/roadmap) - [สาธิต](#สาธิต) - [คุณสมบัติ](#คุณสมบัติ) -- [การแปลภาษา](https://immich.app/docs/developer/translations) -- [สนับสนุนโพรเจกต์](https://immich.app/docs/overview/support-the-project) +- [การแปลภาษา](https://docs.immich.app/developer/translations) +- [สนับสนุนโพรเจกต์](https://docs.immich.app/overview/support-the-project) ## สาธิต @@ -106,7 +107,7 @@ ## การแปลภาษา -อ่านเพิ่มเติมเกี่ยวกับการแปล [ที่นี่](https://immich.app/docs/developer/translations) +อ่านเพิ่มเติมเกี่ยวกับการแปล [ที่นี่](https://docs.immich.app/developer/translations) สถานะการแปล diff --git a/readme_i18n/README_tr_TR.md b/readme_i18n/README_tr_TR.md index 6285ab55a2..46aef49745 100644 --- a/readme_i18n/README_tr_TR.md +++ b/readme_i18n/README_tr_TR.md @@ -27,7 +27,8 @@ 한국어 Deutsch Nederlands - 中文 + 简体中文 + 正體中文 Українська Русский Português Brasileiro @@ -44,13 +45,13 @@ ## Content -- [Resmi Belgeler](https://immich.app/docs) +- [Resmi Belgeler](https://docs.immich.app) - [Yol Haritası](https://github.com/orgs/immich-app/projects/1) - [Demo](#demo) - [Özellikler](#özellikler) -- [Giriş](https://immich.app/docs/overview/introduction) -- [Kurulum](https://immich.app/docs/install/requirements) -- [Katkı Sağlama Rehberi](https://immich.app/docs/overview/support-the-project) +- [Giriş](https://docs.immich.app/overview/introduction) +- [Kurulum](https://docs.immich.app/install/requirements) +- [Katkı Sağlama Rehberi](https://docs.immich.app/overview/support-the-project) ## Belgeler diff --git a/readme_i18n/README_uk_UA.md b/readme_i18n/README_uk_UA.md index 33687bbc50..297054ee42 100644 --- a/readme_i18n/README_uk_UA.md +++ b/readme_i18n/README_uk_UA.md @@ -29,7 +29,8 @@ Deutsch Nederlands Türkçe - 中文 + 简体中文 + 正體中文 Русский Português Brasileiro Svenska @@ -50,14 +51,14 @@ ## Посилання -- [Документація](https://immich.app/docs) -- [Про проєкт](https://immich.app/docs/overview/introduction) -- [Встановлення](https://immich.app/docs/install/requirements) +- [Документація](https://docs.immich.app) +- [Про проєкт](https://docs.immich.app/overview/introduction) +- [Встановлення](https://docs.immich.app/install/requirements) - [Дорожня карта](https://immich.app/roadmap) - [Демо](#демо) - [Функції](#функції) -- [Переклади](https://immich.app/docs/developer/translations) -- [Гід для розробки проєкту](https://immich.app/docs/overview/support-the-project) +- [Переклади](https://docs.immich.app/developer/translations) +- [Гід для розробки проєкту](https://docs.immich.app/overview/support-the-project) ## Демо @@ -106,7 +107,7 @@ ## Переклади -Більше про переклади [тут](https://immich.app/docs/developer/translations). +Більше про переклади [тут](https://docs.immich.app/developer/translations). Статус перекладів diff --git a/readme_i18n/README_vi_VN.md b/readme_i18n/README_vi_VN.md index fd04bd9fa1..b6b22ff610 100644 --- a/readme_i18n/README_vi_VN.md +++ b/readme_i18n/README_vi_VN.md @@ -29,7 +29,8 @@ Deutsch Nederlands Türkçe -中文 +简体中文 +正體中文 Українська Русский Português Brasileiro @@ -52,14 +53,14 @@ ## Liên kết -- [Tài liệu](https://immich.app/docs) -- [Giới thiệu](https://immich.app/docs/overview/introduction) -- [Cài đặt](https://immich.app/docs/install/requirements) +- [Tài liệu](https://docs.immich.app) +- [Giới thiệu](https://docs.immich.app/overview/introduction) +- [Cài đặt](https://docs.immich.app/install/requirements) - [Lộ trình](https://immich.app/roadmap) - [Demo](#demo) - [Tính năng](#Tính-năng) -- [Dịch thuật](https://immich.app/docs/developer/translations) -- [Đóng góp](https://immich.app/docs/overview/support-the-project) +- [Dịch thuật](https://docs.immich.app/developer/translations) +- [Đóng góp](https://docs.immich.app/overview/support-the-project) ## Demo @@ -106,7 +107,7 @@ Truy cập bản demo [tại đây](https://demo.immich.app). Đối với ứng ## Dịch thuật -Đọc thêm về dịch thuật [tại đây](https://immich.app/docs/developer/translations). +Đọc thêm về dịch thuật [tại đây](https://docs.immich.app/developer/translations). Tình trạng dịch thuật diff --git a/readme_i18n/README_zh_CN.md b/readme_i18n/README_zh_CN.md index 5151e35379..b48e69f94d 100644 --- a/readme_i18n/README_zh_CN.md +++ b/readme_i18n/README_zh_CN.md @@ -32,6 +32,7 @@ Deutsch Nederlands Türkçe + 正體中文 Українська Русский Português Brasileiro @@ -54,14 +55,14 @@ ## 目录 -- [官方文档](https://immich.app/docs) -- [项目总览](https://immich.app/docs/overview/introduction) -- [安装教程](https://immich.app/docs/install/requirements) +- [官方文档](https://docs.immich.app) +- [项目总览](https://docs.immich.app/overview/introduction) +- [安装教程](https://docs.immich.app/install/requirements) - [路线图](https://immich.app/roadmap) - [在线演示](#示例) - [功能特性](#功能特性) -- [多语言](https://immich.app/docs/developer/translations) -- [贡献者](https://immich.app/docs/overview/support-the-project) +- [多语言](https://docs.immich.app/developer/translations) +- [贡献者](https://docs.immich.app/overview/support-the-project) ## 示例 @@ -110,7 +111,7 @@ ## 多语言 -关于翻译的更多信息请参见[此处](https://immich.app/docs/developer/translations)。 +关于翻译的更多信息请参见[此处](https://docs.immich.app/developer/translations)。 翻译进度 diff --git a/readme_i18n/README_zh_TW.md b/readme_i18n/README_zh_TW.md new file mode 100644 index 0000000000..bf14ce2dc0 --- /dev/null +++ b/readme_i18n/README_zh_TW.md @@ -0,0 +1,132 @@ +

+
+
授權條款:AGPLv3 + + Discord + +
+
+

+ +

+ +

+

高效能的自架照片和影片管理解決方案

+
+ + + +
+ +

+ English + Català + Español + Français + Italiano + 日本語 + 한국어 + Deutsch + Nederlands + Türkçe + 简体中文 + 正體中文 + Українська + Русский + Português Brasileiro + Svenska + العربية + Tiếng Việt + ภาษาไทย +

+ +> [!WARNING] +> ⚠️ 請務必遵循 [3-2-1 備份原則](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/),守護珍貴的照片與影片! +> + +> [!NOTE] +> 主要說明文件(包含安裝指南)可於 https://immich.app/ 取得。 + +## 連結 + +- [說明文件](https://docs.immich.app/) +- [關於](https://docs.immich.app/overview/introduction) +- [安裝](https://docs.immich.app/install/requirements) +- [發展藍圖](https://immich.app/roadmap) +- [線上體驗](#線上體驗) +- [功能](#功能) +- [翻譯](https://docs.immich.app/developer/translations) +- [貢獻指南](https://docs.immich.app/overview/support-the-project) + +## 線上體驗 + +請前往 [Demoo 網站](https://demo.immich.app) 立即體驗 Immich。若要在手機 App 試用,請在 `伺服器端點 URL` 欄位輸入 `https://demo.immich.app`。 + +### 登入資訊 + +| 電子郵件 | 密碼 | +| --------------- | ------ | +| demo@immich.app | demo | + +## 功能 + +| 功能 | 手機版 | 網頁版 | +| :----------------------------------------- | ------ | ------ | +| 上傳與檢視照片與影片 | 是 | 是 | +| 開啟 App 時自動備份 | 是 | 不適用 | +| 避免重複媒體 | 是 | 是 | +| 選擇要備份的相簿 | 是 | 不適用 | +| 下載照片與影片到本機裝置 | 是 | 是 | +| 多使用者支援 | 是 | 是 | +| 相簿與共享相簿 | 是 | 是 | +| 可拖曳的捲軸 | 是 | 是 | +| 支援 RAW 格式 | 是 | 是 | +| 中繼資料檢視(EXIF、地圖) | 是 | 是 | +| 依中繼資料、物件、臉孔與 CLIP 搜尋 | 是 | 是 | +| 管理功能(使用者管理) | 否 | 是 | +| 背景備份 | 是 | 不適用 | +| 虛擬滾動 | 是 | 是 | +| 支援 OAuth | 是 | 是 | +| API 金鑰 | 不適用 | 是 | +| Live Photo/動態照片備份與播放 | 是 | 是 | +| 支援 360 度全景照片顯示 | 否 | 是 | +| 使用者自訂儲存結構 | 是 | 是 | +| 公開分享 | 是 | 是 | +| 封存與收藏 | 是 | 是 | +| 世界地圖 | 是 | 是 | +| 親朋好友分享 | 是 | 是 | +| 臉部辨識與分群 | 是 | 是 | +| 回憶(x 年前) | 是 | 是 | +| 離線支援 | 是 | 否 | +| 唯讀媒體庫 | 是 | 是 | +| 照片堆疊 | 是 | 是 | +| 標籤 | 否 | 是 | +| 資料夾檢視 | 是 | 是 | + +## 翻譯 + +更多翻譯相關資訊請見 [此處](https://docs.immich.app/developer/translations)。 + + +翻譯狀態 + + +## 專案活躍度 + +![專案活躍度](https://repobeats.axiom.co/api/embed/9e86d9dc3ddd137161f2f6d2e758d7863b1789cb.svg "Repobeats 分析圖片") + +## Star 數量歷史紀錄 + + + + + + Star 歷史紀錄圖表 + + + +## 貢獻者 + + + + diff --git a/renovate.json b/renovate.json index 5fe45d61f7..3a889f4789 100644 --- a/renovate.json +++ b/renovate.json @@ -21,6 +21,11 @@ "addLabels": [ "📱mobile" ] + }, + { + "matchPackageNames": ["ghcr.io/immich-app/postgres"], + "matchUpdateTypes": ["major"], + "enabled": false } ], "ignorePaths": [ diff --git a/server/.nvmrc b/server/.nvmrc index e2228113dd..442c7587a9 100644 --- a/server/.nvmrc +++ b/server/.nvmrc @@ -1 +1 @@ -22.19.0 +22.20.0 diff --git a/server/Dockerfile b/server/Dockerfile index 6702b338c5..2ff62f9ab4 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,39 +1,54 @@ -FROM ghcr.io/immich-app/base-server-dev:202509210934@sha256:b5ce2d7eaf379d4cf15efd4bab180d8afc8a80d20b36c9800f4091aca6ae267e AS builder +FROM ghcr.io/immich-app/base-server-dev:202510092146@sha256:124ec9659cba4a206924de5e3691f84acde16d75fa2b10b7007542424b696b96 AS builder ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \ CI=1 \ - COREPACK_HOME=/tmp + COREPACK_HOME=/tmp \ + PNPM_HOME=/buildcache/pnpm-store \ + PATH="/buildcache/pnpm-store:$PATH" RUN npm install --global corepack@latest && \ - corepack enable pnpm + corepack enable pnpm && \ + pnpm config set store-dir "$PNPM_HOME" FROM builder AS server WORKDIR /usr/src/app -COPY ./package* ./pnpm* .pnpmfile.cjs ./ COPY ./server ./server/ -RUN SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter immich --frozen-lockfile build && \ +RUN --mount=type=cache,id=pnpm-server,target=/buildcache/pnpm-store \ + --mount=type=bind,source=package.json,target=package.json \ + --mount=type=bind,source=.pnpmfile.cjs,target=.pnpmfile.cjs \ + --mount=type=bind,source=pnpm-lock.yaml,target=pnpm-lock.yaml \ + --mount=type=bind,source=pnpm-workspace.yaml,target=pnpm-workspace.yaml \ + SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter immich --frozen-lockfile build && \ SHARP_FORCE_GLOBAL_LIBVIPS=true pnpm --filter immich --frozen-lockfile --prod --no-optional deploy /output/server-pruned FROM builder AS web WORKDIR /usr/src/app -COPY ./package* ./pnpm* .pnpmfile.cjs ./ COPY ./web ./web/ COPY ./i18n ./i18n/ COPY ./open-api ./open-api/ -RUN SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install && \ +RUN --mount=type=cache,id=pnpm-web,target=/buildcache/pnpm-store \ + --mount=type=bind,source=package.json,target=package.json \ + --mount=type=bind,source=.pnpmfile.cjs,target=.pnpmfile.cjs \ + --mount=type=bind,source=pnpm-lock.yaml,target=pnpm-lock.yaml \ + --mount=type=bind,source=pnpm-workspace.yaml,target=pnpm-workspace.yaml \ + SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install && \ pnpm --filter @immich/sdk --filter immich-web build FROM builder AS cli -COPY ./package* ./pnpm* .pnpmfile.cjs ./ COPY ./cli ./cli/ COPY ./open-api ./open-api/ -RUN pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install && \ +RUN --mount=type=cache,id=pnpm-cli,target=/buildcache/pnpm-store \ + --mount=type=bind,source=package.json,target=package.json \ + --mount=type=bind,source=.pnpmfile.cjs,target=.pnpmfile.cjs \ + --mount=type=bind,source=pnpm-lock.yaml,target=pnpm-lock.yaml \ + --mount=type=bind,source=pnpm-workspace.yaml,target=pnpm-workspace.yaml \ + pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install && \ pnpm --filter @immich/sdk --filter @immich/cli build && \ pnpm --filter @immich/cli --prod --no-optional deploy /output/cli-pruned -FROM ghcr.io/immich-app/base-server-prod:202509210934@sha256:0c7eacf0ba88ca52e1a267cfc62d20d07792ea2c604818c2cbd37dc7dcefdac9 +FROM ghcr.io/immich-app/base-server-prod:202510092146@sha256:c39b9ad949e7777bce415e6931334aeff7331e04cb7f9df93f9ae44f6ff36b9e WORKDIR /usr/src/app ENV NODE_ENV=production \ diff --git a/server/Dockerfile.dev b/server/Dockerfile.dev index dd2e931745..c37d9d3149 100644 --- a/server/Dockerfile.dev +++ b/server/Dockerfile.dev @@ -1,5 +1,5 @@ # dev build -FROM ghcr.io/immich-app/base-server-dev:202509210934@sha256:b5ce2d7eaf379d4cf15efd4bab180d8afc8a80d20b36c9800f4091aca6ae267e AS dev +FROM ghcr.io/immich-app/base-server-dev:202510092146@sha256:124ec9659cba4a206924de5e3691f84acde16d75fa2b10b7007542424b696b96 AS dev ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \ CI=1 \ @@ -27,8 +27,8 @@ ENTRYPOINT ["tini", "--", "/bin/bash", "-c"] FROM dev AS dev-container-server RUN apt-get update --allow-releaseinfo-change && \ - apt-get install sudo inetutils-ping openjdk-11-jre-headless \ - vim nano \ + apt-get install sudo inetutils-ping openjdk-21-jre-headless \ + vim nano curl \ -y --no-install-recommends --fix-missing RUN usermod -aG sudo node && \ @@ -44,13 +44,18 @@ FROM dev-container-server AS dev-container-mobile USER root # Enable multiarch for arm64 if necessary RUN if [ "$(dpkg --print-architecture)" = "arm64" ]; then \ - dpkg --add-architecture amd64 && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - qemu-user-static \ - libc6:amd64 \ - libstdc++6:amd64 \ - libgcc1:amd64; \ + dpkg --add-architecture amd64 && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + gnupg \ + qemu-user-static \ + libc6:amd64 \ + libstdc++6:amd64 \ + libgcc1:amd64; \ + else \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + gnupg; \ fi # Flutter SDK @@ -65,11 +70,11 @@ RUN mkdir -p ${FLUTTER_HOME} \ && curl -C - --output flutter.tar.xz https://storage.googleapis.com/flutter_infra_release/releases/${FLUTTER_CHANNEL}/linux/flutter_linux_${FLUTTER_VERSION}-${FLUTTER_CHANNEL}.tar.xz \ && tar -xf flutter.tar.xz --strip-components=1 -C ${FLUTTER_HOME} \ && rm flutter.tar.xz \ - && chown -R node ${FLUTTER_HOME} + && chown -R node ${FLUTTER_HOME} \ + && git config --global --add safe.directory ${FLUTTER_HOME} -RUN apt-get update \ - && wget -qO- https://dcm.dev/pgp-key.public | gpg --dearmor -o /usr/share/keyrings/dcm.gpg \ +RUN wget -qO- https://dcm.dev/pgp-key.public | gpg --dearmor -o /usr/share/keyrings/dcm.gpg \ && echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | tee /etc/apt/sources.list.d/dart_stable.list \ && apt-get update \ && apt-get install dcm -y diff --git a/server/package.json b/server/package.json index e503989eac..293e43c893 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "1.144.1", + "version": "2.0.1", "description": "", "author": "", "private": true, @@ -47,7 +47,7 @@ "@opentelemetry/exporter-prometheus": "^0.205.0", "@opentelemetry/instrumentation-http": "^0.205.0", "@opentelemetry/instrumentation-ioredis": "^0.53.0", - "@opentelemetry/instrumentation-nestjs-core": "^0.51.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.52.0", "@opentelemetry/instrumentation-pg": "^0.58.0", "@opentelemetry/resources": "^2.0.1", "@opentelemetry/sdk-metrics": "^2.0.1", @@ -67,7 +67,7 @@ "compression": "^1.8.0", "cookie": "^1.0.2", "cookie-parser": "^1.4.7", - "cron": "4.3.0", + "cron": "4.3.3", "exiftool-vendored": "^28.8.0", "express": "^5.1.0", "fast-glob": "^3.3.2", @@ -85,7 +85,7 @@ "multer": "^2.0.2", "nest-commander": "^3.16.0", "nestjs-cls": "^5.0.0", - "nestjs-kysely": "^3.0.0", + "nestjs-kysely": "3.0.0", "nestjs-otel": "^7.0.0", "nodemailer": "^7.0.0", "openid-client": "^6.3.3", @@ -101,7 +101,7 @@ "sanitize-filename": "^1.6.3", "sanitize-html": "^2.14.0", "semver": "^7.6.2", - "sharp": "^0.34.3", + "sharp": "^0.34.4", "sirv": "^3.0.0", "socket.io": "^4.8.1", "tailwindcss-preset-email": "^1.4.0", @@ -129,7 +129,7 @@ "@types/luxon": "^3.6.2", "@types/mock-fs": "^4.13.1", "@types/multer": "^2.0.0", - "@types/node": "^22.18.1", + "@types/node": "^22.18.8", "@types/nodemailer": "^7.0.0", "@types/picomatch": "^4.0.0", "@types/pngjs": "^6.0.5", @@ -161,9 +161,9 @@ "vitest": "^3.0.0" }, "volta": { - "node": "22.19.0" + "node": "22.20.0" }, "overrides": { - "sharp": "^0.34.3" + "sharp": "^0.34.4" } } diff --git a/server/src/app.module.ts b/server/src/app.module.ts index 8d261463e7..a1cd1edfdf 100644 --- a/server/src/app.module.ts +++ b/server/src/app.module.ts @@ -19,6 +19,7 @@ import { ConfigRepository } from 'src/repositories/config.repository'; import { EventRepository } from 'src/repositories/event.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { teardownTelemetry, TelemetryRepository } from 'src/repositories/telemetry.repository'; +import { UserRepository } from 'src/repositories/user.repository'; import { services } from 'src/services'; import { AuthService } from 'src/services/auth.service'; import { CliService } from 'src/services/cli.service'; @@ -55,6 +56,7 @@ class BaseModule implements OnModuleInit, OnModuleDestroy { private jobService: JobService, private telemetryRepository: TelemetryRepository, private authService: AuthService, + private userRepository: UserRepository, ) { logger.setAppName(this.worker); } diff --git a/server/src/constants.ts b/server/src/constants.ts index 1bae521a9f..3b75ca9f7e 100644 --- a/server/src/constants.ts +++ b/server/src/constants.ts @@ -5,7 +5,7 @@ import { SemVer } from 'semver'; import { DatabaseExtension, ExifOrientation, VectorIndex } from 'src/enum'; export const POSTGRES_VERSION_RANGE = '>=14.0.0'; -export const VECTORCHORD_VERSION_RANGE = '>=0.3 <0.5'; +export const VECTORCHORD_VERSION_RANGE = '>=0.3 <0.6'; export const VECTORS_VERSION_RANGE = '>=0.2 <0.4'; export const VECTOR_VERSION_RANGE = '>=0.5 <1'; diff --git a/server/src/decorators.ts b/server/src/decorators.ts index 2f1e76d097..8a8e23d880 100644 --- a/server/src/decorators.ts +++ b/server/src/decorators.ts @@ -87,7 +87,7 @@ export function Chunked( return Promise.all( chunks(argument, chunkSize).map(async (chunk) => { - await Reflect.apply(originalMethod, this, [ + return await Reflect.apply(originalMethod, this, [ ...arguments_.slice(0, parameterIndex), chunk, ...arguments_.slice(parameterIndex + 1), @@ -103,7 +103,7 @@ export function ChunkedArray(options?: { paramIndex?: number }): MethodDecorator } export function ChunkedSet(options?: { paramIndex?: number }): MethodDecorator { - return Chunked({ ...options, mergeFn: setUnion }); + return Chunked({ ...options, mergeFn: (args: Set[]) => setUnion(...args) }); } const UUID = '00000000-0000-4000-a000-000000000000'; diff --git a/server/src/queries/access.repository.sql b/server/src/queries/access.repository.sql index 9aecaafb52..e98c5c6d98 100644 --- a/server/src/queries/access.repository.sql +++ b/server/src/queries/access.repository.sql @@ -71,6 +71,11 @@ where and "shared_link"."albumId" in ($2) -- AccessRepository.asset.checkAlbumAccess +with + "target" as ( + select + array[$1]::uuid[] as "ids" + ) select "asset"."id", "asset"."livePhotoVideoId" @@ -82,8 +87,12 @@ from left join "album_user" as "albumUsers" on "albumUsers"."albumsId" = "album"."id" left join "user" on "user"."id" = "albumUsers"."usersId" and "user"."deletedAt" is null + cross join "target" where - array["asset"."id", "asset"."livePhotoVideoId"] && array[$1]::uuid[] + ( + "asset"."id" = any (target.ids) + or "asset"."livePhotoVideoId" = any (target.ids) + ) and ( "album"."ownerId" = $2 or "user"."id" = $3 diff --git a/server/src/queries/user.repository.sql b/server/src/queries/user.repository.sql index 6a02654781..c5a4f139a7 100644 --- a/server/src/queries/user.repository.sql +++ b/server/src/queries/user.repository.sql @@ -363,6 +363,14 @@ group by order by "user"."createdAt" asc +-- UserRepository.getCount +select + count(*) as "count" +from + "user" +where + "user"."deletedAt" is null + -- UserRepository.updateUsage update "user" set diff --git a/server/src/repositories/access.repository.ts b/server/src/repositories/access.repository.ts index 5cceb6dbe0..ca12ff040b 100644 --- a/server/src/repositories/access.repository.ts +++ b/server/src/repositories/access.repository.ts @@ -136,6 +136,7 @@ class AssetAccess { } return this.db + .with('target', (qb) => qb.selectNoFrom(sql`array[${sql.join([...assetIds])}]::uuid[]`.as('ids'))) .selectFrom('album') .innerJoin('album_asset as albumAssets', 'album.id', 'albumAssets.albumsId') .innerJoin('asset', (join) => @@ -143,11 +144,13 @@ class AssetAccess { ) .leftJoin('album_user as albumUsers', 'albumUsers.albumsId', 'album.id') .leftJoin('user', (join) => join.onRef('user.id', '=', 'albumUsers.usersId').on('user.deletedAt', 'is', null)) + .crossJoin('target') .select(['asset.id', 'asset.livePhotoVideoId']) - .where( - sql`array["asset"."id", "asset"."livePhotoVideoId"]`, - '&&', - sql`array[${sql.join([...assetIds])}]::uuid[] `, + .where((eb) => + eb.or([ + eb('asset.id', '=', sql`any(target.ids)`), + eb('asset.livePhotoVideoId', '=', sql`any(target.ids)`), + ]), ) .where((eb) => eb.or([eb('album.ownerId', '=', userId), eb('user.id', '=', userId)])) .where('album.deletedAt', 'is', null) diff --git a/server/src/repositories/media.repository.ts b/server/src/repositories/media.repository.ts index fa36c41798..d98e018efb 100644 --- a/server/src/repositories/media.repository.ts +++ b/server/src/repositories/media.repository.ts @@ -203,6 +203,9 @@ export class MediaRepository { isHDR: stream.color_transfer === 'smpte2084' || stream.color_transfer === 'arib-std-b67', bitrate: this.parseInt(stream.bit_rate), pixelFormat: stream.pix_fmt || 'yuv420p', + colorPrimaries: stream.color_primaries, + colorSpace: stream.color_space, + colorTransfer: stream.color_transfer, })), audioStreams: results.streams .filter((stream) => stream.codec_type === 'audio') diff --git a/server/src/repositories/user.repository.ts b/server/src/repositories/user.repository.ts index 44f4a2bb9c..20b41c80f8 100644 --- a/server/src/repositories/user.repository.ts +++ b/server/src/repositories/user.repository.ts @@ -286,6 +286,16 @@ export class UserRepository { .execute(); } + @GenerateSql() + async getCount(): Promise { + const result = await this.db + .selectFrom('user') + .select((eb) => eb.fn.countAll().as('count')) + .where('user.deletedAt', 'is', null) + .executeTakeFirstOrThrow(); + return Number(result.count); + } + @GenerateSql({ params: [DummyValue.UUID, DummyValue.NUMBER] }) async updateUsage(id: string, delta: number): Promise { await this.db diff --git a/server/src/services/base.service.ts b/server/src/services/base.service.ts index 2f0e272883..6b85c3ec6c 100644 --- a/server/src/services/base.service.ts +++ b/server/src/services/base.service.ts @@ -215,6 +215,7 @@ export class BaseService { payload.storageLabel = sanitize(payload.storageLabel.replaceAll('.', '')); } + this.telemetryRepository.api.addToGauge(`immich.users.total`, 1); return this.userRepository.create(payload); } } diff --git a/server/src/services/database.service.ts b/server/src/services/database.service.ts index 758198a197..2ff0e0ca27 100644 --- a/server/src/services/database.service.ts +++ b/server/src/services/database.service.ts @@ -22,7 +22,7 @@ const messages = { The ${name} extension version is ${version}, which means it is a nightly release. Please run 'DROP EXTENSION IF EXISTS ${extension}' and switch to a release version. - See https://immich.app/docs/guides/database-queries for how to query the database.`, + See https://docs.immich.app/guides/database-queries for how to query the database.`, outOfRange: ({ name, version, range }: OutOfRangeArgs) => `The ${name} extension version is ${version}, but Immich only supports ${range}. Please change ${name} to a compatible version in the Postgres instance.`, @@ -32,20 +32,20 @@ const messages = { If the Postgres instance already has ${name} installed, Immich may not have the necessary permissions to activate it. In this case, please run 'CREATE EXTENSION IF NOT EXISTS ${extension} CASCADE' manually as a superuser. - See https://immich.app/docs/guides/database-queries for how to query the database.`, + See https://docs.immich.app/guides/database-queries for how to query the database.`, updateFailed: ({ name, extension, availableVersion }: UpdateFailedArgs) => `The ${name} extension can be updated to ${availableVersion}. Immich attempted to update the extension, but failed to do so. This may be because Immich does not have the necessary permissions to update the extension. Please run 'ALTER EXTENSION ${extension} UPDATE' manually as a superuser. - See https://immich.app/docs/guides/database-queries for how to query the database.`, + See https://docs.immich.app/guides/database-queries for how to query the database.`, dropFailed: ({ name, extension }: DropFailedArgs) => `The ${name} extension is no longer needed, but could not be dropped. This may be because Immich does not have the necessary permissions to drop the extension. Please run 'DROP EXTENSION ${extension};' manually as a superuser. - See https://immich.app/docs/guides/database-queries for how to query the database.`, + See https://docs.immich.app/guides/database-queries for how to query the database.`, restartRequired: ({ name, availableVersion }: RestartRequiredArgs) => `The ${name} extension has been updated to ${availableVersion}. Please restart the Postgres instance to complete the update.`, @@ -55,7 +55,7 @@ const messages = { If ${name} ${installedVersion} is compatible with Immich, please ensure the Postgres instance has this available.`, deprecatedExtension: (name: string) => `DEPRECATION WARNING: The ${name} extension is deprecated and support for it will be removed very soon. - See https://immich.app/docs/install/upgrading#migrating-to-vectorchord in order to switch to the VectorChord extension instead.`, + See https://docs.immich.app/install/upgrading#migrating-to-vectorchord in order to switch to the VectorChord extension instead.`, }; @Injectable() diff --git a/server/src/services/media.service.spec.ts b/server/src/services/media.service.spec.ts index e494dd9bcc..ad52b0e8b0 100644 --- a/server/src/services/media.service.spec.ts +++ b/server/src/services/media.service.spec.ts @@ -445,6 +445,7 @@ describe(MediaService.name, () => { }), ); }); + it('should not skip intra frames for MTS file', async () => { mocks.media.probe.mockResolvedValue(probeStub.videoStreamMTS); mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(assetStub.video); @@ -462,6 +463,25 @@ describe(MediaService.name, () => { ); }); + it('should override reserved color metadata', async () => { + mocks.media.probe.mockResolvedValue(probeStub.videoStreamReserved); + mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(assetStub.video); + await sut.handleGenerateThumbnails({ id: assetStub.video.id }); + + expect(mocks.media.transcode).toHaveBeenCalledWith( + '/original/path.ext', + expect.any(String), + expect.objectContaining({ + inputOptions: expect.arrayContaining([ + '-bsf:v hevc_metadata=colour_primaries=1:matrix_coefficients=1:transfer_characteristics=1', + ]), + outputOptions: expect.any(Array), + progress: expect.any(Object), + twoPass: false, + }), + ); + }); + it('should use scaling divisible by 2 even when using quick sync', async () => { mocks.media.probe.mockResolvedValue(probeStub.videoStream2160p); mocks.systemMetadata.get.mockResolvedValue({ ffmpeg: { accel: TranscodeHardwareAcceleration.Qsv } }); @@ -841,6 +861,37 @@ describe(MediaService.name, () => { ); }); + it('should always generate full-size preview from non-web-friendly panoramas', async () => { + mocks.systemMetadata.get.mockResolvedValue({ image: { fullsize: { enabled: false } } }); + mocks.media.extract.mockResolvedValue({ buffer: extractedBuffer, format: RawExtractedFormat.Jpeg }); + mocks.media.getImageDimensions.mockResolvedValue({ width: 3840, height: 2160 }); + + mocks.assetJob.getForGenerateThumbnailJob.mockResolvedValue(assetStub.panoramaTif); + + await sut.handleGenerateThumbnails({ id: assetStub.image.id }); + + expect(mocks.media.decodeImage).toHaveBeenCalledOnce(); + expect(mocks.media.decodeImage).toHaveBeenCalledWith(assetStub.panoramaTif.originalPath, { + colorspace: Colorspace.Srgb, + orientation: undefined, + processInvalidImages: false, + size: undefined, + }); + + expect(mocks.media.generateThumbnail).toHaveBeenCalledTimes(3); + expect(mocks.media.generateThumbnail).toHaveBeenCalledWith( + rawBuffer, + { + colorspace: Colorspace.Srgb, + format: ImageFormat.Jpeg, + quality: 80, + processInvalidImages: false, + raw: rawInfo, + }, + expect.any(String), + ); + }); + it('should respect encoding options when generating full-size preview', async () => { mocks.systemMetadata.get.mockResolvedValue({ image: { fullsize: { enabled: true, format: ImageFormat.Webp, quality: 90 } }, diff --git a/server/src/services/media.service.ts b/server/src/services/media.service.ts index a2c3c5ed42..6caa682f5e 100644 --- a/server/src/services/media.service.ts +++ b/server/src/services/media.service.ts @@ -271,7 +271,9 @@ export class MediaService extends BaseService { // Handle embedded preview extraction for RAW files const extractEmbedded = image.extractEmbedded && mimeTypes.isRaw(asset.originalFileName); const extracted = extractEmbedded ? await this.extractImage(asset.originalPath, image.preview.size) : null; - const generateFullsize = image.fullsize.enabled && !mimeTypes.isWebSupportedImage(asset.originalPath); + const generateFullsize = + (image.fullsize.enabled || asset.exifInfo.projectionType == 'EQUIRECTANGULAR') && + !mimeTypes.isWebSupportedImage(asset.originalPath); const convertFullsize = generateFullsize && (!extracted || !mimeTypes.isWebSupportedImage(` .${extracted.format}`)); const { info, data, colorspace } = await this.decodeImage( diff --git a/server/src/services/storage.service.ts b/server/src/services/storage.service.ts index b983c34f62..50dffd5465 100644 --- a/server/src/services/storage.service.ts +++ b/server/src/services/storage.service.ts @@ -15,7 +15,7 @@ import { BaseService } from 'src/services/base.service'; import { JobOf, SystemFlags } from 'src/types'; import { ImmichStartupError } from 'src/utils/misc'; -const docsMessage = `Please see https://immich.app/docs/administration/system-integrity#folder-checks for more information.`; +const docsMessage = `Please see https://docs.immich.app/administration/system-integrity#folder-checks for more information.`; @Injectable() export class StorageService extends BaseService { diff --git a/server/src/services/user-admin.service.ts b/server/src/services/user-admin.service.ts index ce70419ff6..a57072e496 100644 --- a/server/src/services/user-admin.service.ts +++ b/server/src/services/user-admin.service.ts @@ -102,6 +102,7 @@ export class UserAdminService extends BaseService { const status = force ? UserStatus.Removing : UserStatus.Deleted; const user = await this.userRepository.update(id, { status, deletedAt: new Date() }); + this.telemetryRepository.api.addToGauge(`immich.users.total`, -1); if (force) { await this.jobRepository.queue({ name: JobName.UserDelete, data: { id: user.id, force } }); @@ -114,6 +115,7 @@ export class UserAdminService extends BaseService { await this.findOrFail(id, { withDeleted: true }); await this.albumRepository.restoreAll(id); const user = await this.userRepository.restore(id); + this.telemetryRepository.api.addToGauge('immich.users.total', 1); return mapUserAdmin(user); } diff --git a/server/src/services/user.service.ts b/server/src/services/user.service.ts index 6849b17ac3..fc71777673 100644 --- a/server/src/services/user.service.ts +++ b/server/src/services/user.service.ts @@ -3,14 +3,14 @@ import { Updateable } from 'kysely'; import { DateTime } from 'luxon'; import { SALT_ROUNDS } from 'src/constants'; import { StorageCore } from 'src/cores/storage.core'; -import { OnJob } from 'src/decorators'; +import { OnEvent, OnJob } from 'src/decorators'; import { AuthDto } from 'src/dtos/auth.dto'; import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto'; import { OnboardingDto, OnboardingResponseDto } from 'src/dtos/onboarding.dto'; import { UserPreferencesResponseDto, UserPreferencesUpdateDto, mapPreferences } from 'src/dtos/user-preferences.dto'; import { CreateProfileImageResponseDto } from 'src/dtos/user-profile.dto'; import { UserAdminResponseDto, UserResponseDto, UserUpdateMeDto, mapUser, mapUserAdmin } from 'src/dtos/user.dto'; -import { CacheControl, JobName, JobStatus, QueueName, StorageFolder, UserMetadataKey } from 'src/enum'; +import { CacheControl, ImmichWorker, JobName, JobStatus, QueueName, StorageFolder, UserMetadataKey } from 'src/enum'; import { UserFindOptions } from 'src/repositories/user.repository'; import { UserTable } from 'src/schema/tables/user.table'; import { BaseService } from 'src/services/base.service'; @@ -213,6 +213,12 @@ export class UserService extends BaseService { }; } + @OnEvent({ name: 'AppBootstrap', workers: [ImmichWorker.Api] }) + async onBootstrap(): Promise { + const userCount = await this.userRepository.getCount(); + this.telemetryRepository.api.addToGauge('immich.users.total', userCount); + } + @OnJob({ name: JobName.UserSyncUsage, queue: QueueName.BackgroundTask }) async handleUserSyncUsage(): Promise { await this.userRepository.syncUsage(); diff --git a/server/src/types.ts b/server/src/types.ts index ce0baa1672..da3889ef7c 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -88,6 +88,9 @@ export interface VideoStreamInfo { isHDR: boolean; bitrate: number; pixelFormat: string; + colorPrimaries?: string; + colorSpace?: string; + colorTransfer?: string; } export interface AudioStreamInfo { diff --git a/server/src/utils/media.ts b/server/src/utils/media.ts index 1ecd005315..f678a32b0f 100644 --- a/server/src/utils/media.ts +++ b/server/src/utils/media.ts @@ -392,9 +392,30 @@ export class ThumbnailConfig extends BaseConfig { getBaseInputOptions(videoStream: VideoStreamInfo, format?: VideoFormat): string[] { // skip_frame nointra skips all frames for some MPEG-TS files. Look at ffmpeg tickets 7950 and 7895 for more details. - return format?.formatName === 'mpegts' - ? ['-sws_flags accurate_rnd+full_chroma_int'] - : ['-skip_frame nointra', '-sws_flags accurate_rnd+full_chroma_int']; + const options = + format?.formatName === 'mpegts' + ? ['-sws_flags accurate_rnd+full_chroma_int'] + : ['-skip_frame nointra', '-sws_flags accurate_rnd+full_chroma_int']; + + const metadataOverrides = []; + if (videoStream.colorPrimaries === 'reserved') { + metadataOverrides.push('colour_primaries=1'); + } + + if (videoStream.colorSpace === 'reserved') { + metadataOverrides.push('matrix_coefficients=1'); + } + + if (videoStream.colorTransfer === 'reserved') { + metadataOverrides.push('transfer_characteristics=1'); + } + + if (metadataOverrides.length > 0) { + // workaround for https://fftrac-bg.ffmpeg.org/ticket/11020 + options.push(`-bsf:v ${videoStream.codecName}_metadata=${metadataOverrides.join(':')}`); + } + + return options; } getBaseOutputOptions() { diff --git a/server/test/fixtures/asset.stub.ts b/server/test/fixtures/asset.stub.ts index dd1f98d6eb..0fd2189268 100644 --- a/server/test/fixtures/asset.stub.ts +++ b/server/test/fixtures/asset.stub.ts @@ -866,4 +866,43 @@ export const assetStub = { stackId: null, visibility: AssetVisibility.Timeline, }), + panoramaTif: Object.freeze({ + id: 'asset-id', + status: AssetStatus.Active, + deviceAssetId: 'device-asset-id', + fileModifiedAt: new Date('2023-02-23T05:06:29.716Z'), + fileCreatedAt: new Date('2023-02-23T05:06:29.716Z'), + owner: userStub.user1, + ownerId: 'user-id', + deviceId: 'device-id', + originalPath: '/original/path.tif', + checksum: Buffer.from('file hash', 'utf8'), + type: AssetType.Image, + files, + thumbhash: Buffer.from('blablabla', 'base64'), + encodedVideoPath: null, + createdAt: new Date('2023-02-23T05:06:29.716Z'), + updatedAt: new Date('2023-02-23T05:06:29.716Z'), + localDateTime: new Date('2023-02-23T05:06:29.716Z'), + isFavorite: true, + duration: null, + isExternal: false, + livePhotoVideo: null, + livePhotoVideoId: null, + sharedLinks: [], + originalFileName: 'asset-id.tif', + faces: [], + deletedAt: null, + sidecarPath: null, + exifInfo: { + fileSizeInByte: 5000, + projectionType: 'EQUIRECTANGULAR', + } as Exif, + duplicateId: null, + isOffline: false, + updateId: '42', + libraryId: null, + stackId: null, + visibility: AssetVisibility.Timeline, + }), }; diff --git a/server/test/fixtures/media.stub.ts b/server/test/fixtures/media.stub.ts index efbf21d317..727f5ae7cf 100644 --- a/server/test/fixtures/media.stub.ts +++ b/server/test/fixtures/media.stub.ts @@ -261,4 +261,15 @@ export const probeStub = { bitrate: 0, }, }), + videoStreamReserved: Object.freeze({ + ...probeStubDefault, + videoStreams: [ + { + ...probeStubDefaultVideoStream[0], + colorPrimaries: 'reserved', + colorSpace: 'reserved', + colorTransfer: 'reserved', + }, + ], + }), }; diff --git a/server/test/medium.factory.ts b/server/test/medium.factory.ts index a169d96322..c7356e2f1b 100644 --- a/server/test/medium.factory.ts +++ b/server/test/medium.factory.ts @@ -39,6 +39,7 @@ import { StorageRepository } from 'src/repositories/storage.repository'; import { SyncCheckpointRepository } from 'src/repositories/sync-checkpoint.repository'; import { SyncRepository } from 'src/repositories/sync.repository'; import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository'; import { UserRepository } from 'src/repositories/user.repository'; import { VersionHistoryRepository } from 'src/repositories/version-history.repository'; import { DB } from 'src/schema'; @@ -54,6 +55,7 @@ import { StackTable } from 'src/schema/tables/stack.table'; import { UserTable } from 'src/schema/tables/user.table'; import { BASE_SERVICE_DEPENDENCIES, BaseService } from 'src/services/base.service'; import { SyncService } from 'src/services/sync.service'; +import { newTelemetryRepositoryMock } from 'test/repositories/telemetry.repository.mock'; import { factory, newDate, newEmbedding, newUuid } from 'test/small.factory'; import { automock, wait } from 'test/utils'; import { Mocked } from 'vitest'; @@ -347,6 +349,10 @@ const newMockRepository = (key: ClassConstructor) => { return automock(key); } + case TelemetryRepository: { + return newTelemetryRepositoryMock(); + } + case DatabaseRepository: { return automock(DatabaseRepository, { args: [undefined, { setContext: () => {} }, { getEnv: () => ({ database: { vectorExtension: '' } }) }], diff --git a/server/test/medium/specs/services/auth.service.spec.ts b/server/test/medium/specs/services/auth.service.spec.ts index 14ea1451f2..60d3210f4c 100644 --- a/server/test/medium/specs/services/auth.service.spec.ts +++ b/server/test/medium/specs/services/auth.service.spec.ts @@ -11,6 +11,7 @@ import { LoggingRepository } from 'src/repositories/logging.repository'; import { SessionRepository } from 'src/repositories/session.repository'; import { StorageRepository } from 'src/repositories/storage.repository'; import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository'; import { UserRepository } from 'src/repositories/user.repository'; import { DB } from 'src/schema'; import { AuthService } from 'src/services/auth.service'; @@ -32,7 +33,7 @@ const setup = (db?: Kysely) => { SystemMetadataRepository, UserRepository, ], - mock: [LoggingRepository, StorageRepository, EventRepository], + mock: [LoggingRepository, StorageRepository, EventRepository, TelemetryRepository], }); }; diff --git a/server/test/medium/specs/services/user.service.spec.ts b/server/test/medium/specs/services/user.service.spec.ts index 7643be292e..0d72d39950 100644 --- a/server/test/medium/specs/services/user.service.spec.ts +++ b/server/test/medium/specs/services/user.service.spec.ts @@ -6,6 +6,7 @@ import { CryptoRepository } from 'src/repositories/crypto.repository'; import { JobRepository } from 'src/repositories/job.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; +import { TelemetryRepository } from 'src/repositories/telemetry.repository'; import { UserRepository } from 'src/repositories/user.repository'; import { DB } from 'src/schema'; import { UserService } from 'src/services/user.service'; @@ -21,7 +22,7 @@ const setup = (db?: Kysely) => { return newMediumService(UserService, { database: db || defaultDatabase, real: [CryptoRepository, ConfigRepository, SystemMetadataRepository, UserRepository], - mock: [LoggingRepository, JobRepository], + mock: [LoggingRepository, JobRepository, TelemetryRepository], }); }; diff --git a/web/.nvmrc b/web/.nvmrc index e2228113dd..442c7587a9 100644 --- a/web/.nvmrc +++ b/web/.nvmrc @@ -1 +1 @@ -22.19.0 +22.20.0 diff --git a/web/eslint.config.js b/web/eslint.config.js index d2ef7631e7..792ff90e0c 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -121,6 +121,7 @@ export default typescriptEslint.config( 'unicorn/filename-case': 'off', 'unicorn/prefer-top-level-await': 'off', 'unicorn/import-style': 'off', + 'unicorn/no-array-sort': 'off', 'svelte/button-has-type': 'error', '@typescript-eslint/await-thenable': 'error', '@typescript-eslint/no-floating-promises': 'error', diff --git a/web/package.json b/web/package.json index 4b9a301e8b..dd4557a3c5 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "1.144.1", + "version": "2.0.1", "license": "GNU Affero General Public License version 3", "type": "module", "scripts": { @@ -14,8 +14,7 @@ "check:watch": "npm run check:svelte -- --watch", "check:code": "npm run format && npm run lint:p && npm run check:svelte && npm run check:typescript", "check:all": "npm run check:code && npm run test:cov", - "lint": "eslint . --max-warnings 0", - "lint:p": "eslint-p . --max-warnings 0 --concurrency=4", + "lint": "eslint . --max-warnings 0 --concurrency 4", "lint:fix": "npm run lint -- --fix", "format": "prettier --check .", "format:fix": "prettier --write . && npm run format:i18n", @@ -28,7 +27,7 @@ "dependencies": { "@formatjs/icu-messageformat-parser": "^2.9.8", "@immich/sdk": "file:../open-api/typescript-sdk", - "@immich/ui": "^0.29.0", + "@immich/ui": "^0.34.0", "@mapbox/mapbox-gl-rtl-text": "0.2.3", "@mdi/js": "^7.4.47", "@photo-sphere-viewer/core": "^5.11.5", @@ -63,14 +62,14 @@ "thumbhash": "^0.1.1" }, "devDependencies": { - "@eslint/js": "^9.18.0", + "@eslint/js": "^9.36.0", "@faker-js/faker": "^10.0.0", "@koddsson/eslint-plugin-tscompat": "^0.2.0", "@socket.io/component-emitter": "^3.1.0", "@sveltejs/adapter-static": "^3.0.8", "@sveltejs/enhanced-img": "^0.8.0", "@sveltejs/kit": "^2.27.1", - "@sveltejs/vite-plugin-svelte": "6.2.0", + "@sveltejs/vite-plugin-svelte": "6.2.1", "@tailwindcss/vite": "^4.1.7", "@testing-library/jest-dom": "^6.4.2", "@testing-library/svelte": "^5.2.8", @@ -83,12 +82,11 @@ "@types/qrcode": "^1.5.5", "@vitest/coverage-v8": "^3.0.0", "dotenv": "^17.0.0", - "eslint": "^9.18.0", + "eslint": "^9.36.0", "eslint-config-prettier": "^10.1.8", - "eslint-p": "^0.26.0", "eslint-plugin-compat": "^6.0.2", - "eslint-plugin-svelte": "^3.9.0", - "eslint-plugin-unicorn": "^60.0.0", + "eslint-plugin-svelte": "^3.12.4", + "eslint-plugin-unicorn": "^61.0.2", "factory.ts": "^1.4.1", "globals": "^16.0.0", "happy-dom": "^18.0.1", @@ -97,16 +95,16 @@ "prettier-plugin-sort-json": "^4.1.1", "prettier-plugin-svelte": "^3.3.3", "rollup-plugin-visualizer": "^6.0.0", - "svelte": "5.38.10", + "svelte": "5.39.11", "svelte-check": "^4.1.5", - "svelte-eslint-parser": "^1.2.0", + "svelte-eslint-parser": "^1.3.3", "tailwindcss": "^4.1.7", "typescript": "^5.8.3", - "typescript-eslint": "^8.28.0", + "typescript-eslint": "^8.45.0", "vite": "^7.1.2", "vitest": "^3.0.0" }, "volta": { - "node": "22.19.0" + "node": "22.20.0" } } diff --git a/web/src/lib/components/ServerAboutItem.svelte b/web/src/lib/components/ServerAboutItem.svelte index 9e169a9839..415c047732 100644 --- a/web/src/lib/components/ServerAboutItem.svelte +++ b/web/src/lib/components/ServerAboutItem.svelte @@ -16,7 +16,7 @@ {#if versionHref} - {version} + {version} {:else} {version} {/if} diff --git a/web/src/lib/components/admin-settings/AuthSettings.svelte b/web/src/lib/components/admin-settings/AuthSettings.svelte index d7b73430e3..dbc96ac02a 100644 --- a/web/src/lib/components/admin-settings/AuthSettings.svelte +++ b/web/src/lib/components/admin-settings/AuthSettings.svelte @@ -86,7 +86,7 @@ {#snippet children({ message })} {#snippet children({ message })} {:else if tag === 'implications-link'} + import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte'; + import { AssetAction } from '$lib/constants'; + import { openFileUploadDialog } from '$lib/utils/file-uploader'; + import { createStack, type AssetResponseDto, type StackResponseDto } from '@immich/sdk'; + import { mdiUploadMultiple } from '@mdi/js'; + import { t } from 'svelte-i18n'; + import type { OnAction } from './action'; + + interface Props { + asset: AssetResponseDto; + stack: StackResponseDto | null; + onAction: OnAction; + } + + let { asset, stack, onAction }: Props = $props(); + + const handleAddUploadToStack = async () => { + const newAssetIds = await openFileUploadDialog({ multiple: true }); + // Including the old stacks primary asset ID ensures that all assets of the + // old stack are automatically included in the new stack. + const primaryAssetId = stack?.primaryAssetId ?? asset.id; + + // First asset in the list will become the new primary asset. + const assetIds = [primaryAssetId, ...newAssetIds]; + + const newStack = await createStack({ + stackCreateDto: { + assetIds, + }, + }); + + onAction({ type: AssetAction.STACK, stack: newStack }); + }; + + + diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte index bbdd0dcd5f..d61af04db6 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte @@ -4,6 +4,7 @@ import CastButton from '$lib/cast/cast-button.svelte'; import type { OnAction, PreAction } from '$lib/components/asset-viewer/actions/action'; import AddToAlbumAction from '$lib/components/asset-viewer/actions/add-to-album-action.svelte'; + import AddToStackAction from '$lib/components/asset-viewer/actions/add-to-stack-action.svelte'; import ArchiveAction from '$lib/components/asset-viewer/actions/archive-action.svelte'; import CloseAction from '$lib/components/asset-viewer/actions/close-action.svelte'; import DeleteAction from '$lib/components/asset-viewer/actions/delete-action.svelte'; @@ -196,6 +197,7 @@ {/if} {#if isOwner} + {#if stack} diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index 5484cd2c08..0fe8610b3d 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -22,8 +22,8 @@ import { AssetJobName, AssetTypeEnum, - getAssetInfo, getAllAlbums, + getAssetInfo, getStack, runAssetJobs, type AlbumResponseDto, @@ -303,10 +303,8 @@ const handleStopSlideshow = async () => { try { - // eslint-disable-next-line tscompat/tscompat if (document.fullscreenElement) { document.body.style.cursor = ''; - // eslint-disable-next-line tscompat/tscompat await document.exitFullscreen(); } } catch (error) { @@ -336,6 +334,7 @@ } break; } + case AssetAction.STACK: case AssetAction.SET_STACK_PRIMARY_ASSET: { stack = action.stack; break; diff --git a/web/src/lib/components/asset-viewer/detail-panel.svelte b/web/src/lib/components/asset-viewer/detail-panel.svelte index c968c986a8..4361da207b 100644 --- a/web/src/lib/components/asset-viewer/detail-panel.svelte +++ b/web/src/lib/components/asset-viewer/detail-panel.svelte @@ -307,6 +307,7 @@ weekday: 'short', hour: 'numeric', minute: '2-digit', + second: '2-digit', timeZoneName: timeZone ? 'longOffset' : undefined, }, { locale: $locale }, diff --git a/web/src/lib/components/asset-viewer/image-panorama-viewer.svelte b/web/src/lib/components/asset-viewer/image-panorama-viewer.svelte index 3e7f869e7c..7334aab4d4 100644 --- a/web/src/lib/components/asset-viewer/image-panorama-viewer.svelte +++ b/web/src/lib/components/asset-viewer/image-panorama-viewer.svelte @@ -1,6 +1,6 @@ - + -{#if isShowDeleteConfirmation} - (isShowDeleteConfirmation = false)} - onConfirm={() => handlePromiseError(trashOrDelete(true))} - /> -{/if} - -{#if isShowSelectDate} - { - isShowSelectDate = false; - if (dateString.mode == 'absolute') { - const asset = await timelineManager.getClosestAssetToDate( - (DateTime.fromISO(dateString.date) as DateTime).toObject(), - ); - if (asset) { - setFocusAsset(asset); - } - } - }} - onCancel={() => (isShowSelectDate = false)} - /> -{/if} + scrollToAsset(asset) ?? false} + {timelineManager} + {assetInteraction} + bind:isShowDeleteConfirmation + {onEscape} +/> {#if timelineManager.months.length > 0} { @@ -964,22 +686,7 @@ {#if $showAssetViewer} - {#await import('../asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} - - {/await} + {/if} diff --git a/web/src/lib/components/timeline/TimelineAssetViewer.svelte b/web/src/lib/components/timeline/TimelineAssetViewer.svelte new file mode 100644 index 0000000000..60b839d7e1 --- /dev/null +++ b/web/src/lib/components/timeline/TimelineAssetViewer.svelte @@ -0,0 +1,187 @@ + + +{#await import('../asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} + +{/await} diff --git a/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte b/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte new file mode 100644 index 0000000000..6d7a64d3d8 --- /dev/null +++ b/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte @@ -0,0 +1,221 @@ + + + + +{#if isShowDeleteConfirmation} + (isShowDeleteConfirmation = false)} + onConfirm={() => handlePromiseError(trashOrDelete(true))} + /> +{/if} + +{#if isShowSelectDate} + { + isShowSelectDate = false; + if (dateString.mode == 'absolute') { + const asset = await timelineManager.getClosestAssetToDate( + (DateTime.fromISO(dateString.date) as DateTime).toObject(), + ); + if (asset) { + setFocusAsset(asset); + } + } + }} + onCancel={() => (isShowSelectDate = false)} + /> +{/if} diff --git a/web/src/lib/constants.ts b/web/src/lib/constants.ts index da638bb41d..8d2b706ead 100644 --- a/web/src/lib/constants.ts +++ b/web/src/lib/constants.ts @@ -8,6 +8,7 @@ export enum AssetAction { RESTORE = 'restore', ADD = 'add', ADD_TO_ALBUM = 'add-to-album', + STACK = 'stack', UNSTACK = 'unstack', KEEP_THIS_DELETE_OTHERS = 'keep-this-delete-others', SET_STACK_PRIMARY_ASSET = 'set-stack-primary-asset', diff --git a/web/src/lib/elements/DateInput.svelte b/web/src/lib/elements/DateInput.svelte index a93d2e7cb8..c328a6c036 100644 --- a/web/src/lib/elements/DateInput.svelte +++ b/web/src/lib/elements/DateInput.svelte @@ -34,4 +34,5 @@ } onkeydown?.(e); }} + step=".001" /> diff --git a/web/src/lib/elements/Skeleton.svelte b/web/src/lib/elements/Skeleton.svelte index 7ce2c3cee3..8ee05f4e61 100644 --- a/web/src/lib/elements/Skeleton.svelte +++ b/web/src/lib/elements/Skeleton.svelte @@ -1,18 +1,20 @@
-
- {title} -
+ {#if title} +
+ {title} +
+ {/if}
{ expect(timelineManager.getMonthGroupByAssetId(assetOne.id)?.yearMonth.month).toEqual(1); }); }); + + describe('getRandomAsset', () => { + let timelineManager: TimelineManager; + const bucketAssets: Record = { + '2024-03-01T00:00:00.000Z': timelineAssetFactory.buildList(1).map((asset) => + deriveLocalDateTimeFromFileCreatedAt({ + ...asset, + fileCreatedAt: fromISODateTimeUTCToObject('2024-03-01T00:00:00.000Z'), + }), + ), + '2024-02-01T00:00:00.000Z': timelineAssetFactory.buildList(10).map((asset, idx) => + deriveLocalDateTimeFromFileCreatedAt({ + ...asset, + // here we make sure that not all assets are on the first day of the month + fileCreatedAt: fromISODateTimeUTCToObject(`2024-02-0${idx < 7 ? 1 : 2}T00:00:00.000Z`), + }), + ), + '2024-01-01T00:00:00.000Z': timelineAssetFactory.buildList(3).map((asset) => + deriveLocalDateTimeFromFileCreatedAt({ + ...asset, + fileCreatedAt: fromISODateTimeUTCToObject('2024-01-01T00:00:00.000Z'), + }), + ), + }; + + const bucketAssetsResponse: Record = Object.fromEntries( + Object.entries(bucketAssets).map(([key, assets]) => [key, toResponseDto(...assets)]), + ); + + beforeEach(async () => { + timelineManager = new TimelineManager(); + sdkMock.getTimeBuckets.mockResolvedValue([ + { count: 1, timeBucket: '2024-03-01' }, + { count: 10, timeBucket: '2024-02-01' }, + { count: 3, timeBucket: '2024-01-01' }, + ]); + + sdkMock.getTimeBucket.mockImplementation(({ timeBucket }) => Promise.resolve(bucketAssetsResponse[timeBucket])); + await timelineManager.updateViewport({ width: 1588, height: 0 }); + }); + + it('gets all assets once', async () => { + const assetCount = timelineManager.assetCount; + expect(assetCount).toBe(14); + const discoveredAssets: Set = new Set(); + for (let idx = 0; idx < assetCount; idx++) { + const asset = await timelineManager.getRandomAsset(idx); + expect(asset).toBeDefined(); + const id = asset!.id; + expect(discoveredAssets.has(id)).toBeFalsy(); + discoveredAssets.add(id); + } + + expect(discoveredAssets.size).toBe(assetCount); + }); + }); }); diff --git a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts index 172cd07a02..b5f097e496 100644 --- a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts +++ b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts @@ -451,16 +451,42 @@ export class TimelineManager { return monthGroupInfo?.monthGroup; } - async getRandomMonthGroup() { - const random = Math.floor(Math.random() * this.months.length); - const month = this.months[random]; - await this.loadMonthGroup(month.yearMonth, { cancelable: false }); - return month; - } + // note: the `index` input is expected to be in the range [0, assetCount). This + // value can be passed to make the method deterministic, which is mainly useful + // for testing. + async getRandomAsset(index?: number): Promise { + const randomAssetIndex = index ?? Math.floor(Math.random() * this.assetCount); - async getRandomAsset() { - const month = await this.getRandomMonthGroup(); - return month?.getRandomAsset(); + let accumulatedCount = 0; + + let randomMonth: MonthGroup | undefined = undefined; + for (const month of this.months) { + if (randomAssetIndex < accumulatedCount + month.assetsCount) { + randomMonth = month; + break; + } + + accumulatedCount += month.assetsCount; + } + if (!randomMonth) { + return; + } + await this.loadMonthGroup(randomMonth.yearMonth, { cancelable: false }); + + let randomDay: DayGroup | undefined = undefined; + for (const day of randomMonth.dayGroups) { + if (randomAssetIndex < accumulatedCount + day.viewerAssets.length) { + randomDay = day; + break; + } + + accumulatedCount += day.viewerAssets.length; + } + if (!randomDay) { + return; + } + + return randomDay.viewerAssets[randomAssetIndex - accumulatedCount].asset; } updateAssetOperation(ids: string[], operation: AssetOperation) { diff --git a/web/src/lib/modals/AuthDisableLoginConfirmModal.svelte b/web/src/lib/modals/AuthDisableLoginConfirmModal.svelte index 35d6ae2e83..7199decfd9 100644 --- a/web/src/lib/modals/AuthDisableLoginConfirmModal.svelte +++ b/web/src/lib/modals/AuthDisableLoginConfirmModal.svelte @@ -19,7 +19,7 @@ {#snippet children({ message })} {$t('official_immich_resources')}

- +

{$t('documentation')} diff --git a/web/src/lib/stores/websocket.ts b/web/src/lib/stores/websocket.ts index 6e896e8000..c543fdb4ff 100644 --- a/web/src/lib/stores/websocket.ts +++ b/web/src/lib/stores/websocket.ts @@ -25,7 +25,7 @@ export interface Events { on_person_thumbnail: (personId: string) => void; on_server_version: (serverVersion: ServerVersionResponseDto) => void; on_config_update: () => void; - on_new_release: (newRelase: ReleaseEvent) => void; + on_new_release: (newRelease: ReleaseEvent) => void; on_session_delete: (sessionId: string) => void; on_notification: (notification: NotificationDto) => void; } diff --git a/web/src/lib/utils.spec.ts b/web/src/lib/utils.spec.ts new file mode 100644 index 0000000000..169f42409c --- /dev/null +++ b/web/src/lib/utils.spec.ts @@ -0,0 +1,25 @@ +import { getReleaseType } from '$lib/utils'; + +describe('utils', () => { + describe(getReleaseType.name, () => { + it('should return "major" for major version changes', () => { + expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 2, minor: 0, patch: 0 })).toBe('major'); + expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 3, minor: 2, patch: 1 })).toBe('major'); + }); + + it('should return "minor" for minor version changes', () => { + expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 1, patch: 0 })).toBe('minor'); + expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 2, patch: 1 })).toBe('minor'); + }); + + it('should return "patch" for patch version changes', () => { + expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 0, patch: 1 })).toBe('patch'); + expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 0, patch: 5 })).toBe('patch'); + }); + + it('should return "none" for matching versions', () => { + expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 0, patch: 0 })).toBe('none'); + expect(getReleaseType({ major: 1, minor: 2, patch: 3 }, { major: 1, minor: 2, patch: 3 })).toBe('none'); + }); + }); +}); diff --git a/web/src/lib/utils.ts b/web/src/lib/utils.ts index 09205a2fc9..c35fb6a893 100644 --- a/web/src/lib/utils.ts +++ b/web/src/lib/utils.ts @@ -21,6 +21,7 @@ import { unlinkOAuthAccount, type MemoryResponseDto, type PersonResponseDto, + type ServerVersionResponseDto, type SharedLinkResponseDto, type UserResponseDto, } from '@immich/sdk'; @@ -385,3 +386,22 @@ export function createDateFormatter(localeCode: string | undefined): DateFormatt }, }; } + +export const getReleaseType = ( + current: ServerVersionResponseDto, + newVersion: ServerVersionResponseDto, +): 'major' | 'minor' | 'patch' | 'none' => { + if (current.major !== newVersion.major) { + return 'major'; + } + + if (current.minor !== newVersion.minor) { + return 'minor'; + } + + if (current.patch !== newVersion.patch) { + return 'patch'; + } + + return 'none'; +}; diff --git a/web/src/lib/utils/file-uploader.ts b/web/src/lib/utils/file-uploader.ts index c572ec1760..3f602bdb29 100644 --- a/web/src/lib/utils/file-uploader.ts +++ b/web/src/lib/utils/file-uploader.ts @@ -52,7 +52,7 @@ export const openFileUploadDialog = async (options: FileUploadParam = {}) => { const { albumId, multiple = true, assetId } = options; const extensions = uploadManager.getExtensions(); - return new Promise<(string | undefined)[]>((resolve, reject) => { + return new Promise((resolve, reject) => { try { const fileSelector = document.createElement('input'); diff --git a/web/src/lib/utils/timeline-util.ts b/web/src/lib/utils/timeline-util.ts index 9cf4428da6..80cac0b738 100644 --- a/web/src/lib/utils/timeline-util.ts +++ b/web/src/lib/utils/timeline-util.ts @@ -23,11 +23,11 @@ export type TimelineDateTime = TimelineDate & { millisecond: number; }; -export type ScrubberListener = ( - scrubberMonth: { year: number; month: number }, - overallScrollPercent: number, - scrubberMonthScrollPercent: number, -) => void | Promise; +export type ScrubberListener = (scrubberData: { + scrubberMonth: { year: number; month: number }; + overallScrollPercent: number; + scrubberMonthScrollPercent: number; +}) => void | Promise; // used for AssetResponseDto.dateTimeOriginal, amongst others export const fromISODateTime = (isoDateTime: string, timeZone: string): DateTime => diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte index d2311a4204..c159c46136 100644 --- a/web/src/routes/+layout.svelte +++ b/web/src/routes/+layout.svelte @@ -18,7 +18,7 @@ websocketStore, type ReleaseEvent, } from '$lib/stores/websocket'; - import { copyToClipboard } from '$lib/utils'; + import { copyToClipboard, getReleaseType } from '$lib/utils'; import { isAssetViewerRoute } from '$lib/utils/navigation'; import type { ServerVersionResponseDto } from '@immich/sdk'; import { modalManager, setTranslations } from '@immich/ui'; @@ -85,8 +85,9 @@ const releaseVersion = semverToName(release.releaseVersion); const serverVersion = semverToName(release.serverVersion); + const type = getReleaseType(release.serverVersion, release.releaseVersion); - if (localStorage.getItem('appVersion') === releaseVersion) { + if (type === 'none' || type === 'patch' || localStorage.getItem('appVersion') === releaseVersion) { return; } diff --git a/web/src/test-data/setup.ts b/web/src/test-data/setup.ts index f2cfac3c36..7a94c54338 100644 --- a/web/src/test-data/setup.ts +++ b/web/src/test-data/setup.ts @@ -3,6 +3,7 @@ import { init } from 'svelte-i18n'; beforeAll(async () => { await init({ fallbackLocale: 'dev' }); + Element.prototype.animate = vi.fn().mockImplementation(() => ({ cancel: () => {}, finished: Promise.resolve() })); }); Object.defineProperty(globalThis, 'matchMedia', { @@ -16,3 +17,11 @@ Object.defineProperty(globalThis, 'matchMedia', { dispatchEvent: vi.fn(), })), }); + +vi.mock('$env/dynamic/public', () => { + return { + env: { + PUBLIC_IMMICH_HOSTNAME: '', + }, + }; +}); diff --git a/web/svelte.config.js b/web/svelte.config.js index 1d6527fdf0..00472f9c13 100644 --- a/web/svelte.config.js +++ b/web/svelte.config.js @@ -10,7 +10,8 @@ process.env.PUBLIC_IMMICH_PAY_HOST = process.env.PUBLIC_IMMICH_PAY_HOST || 'http /** @type {import('@sveltejs/kit').Config} */ const config = { compilerOptions: { - runes: true, + // TODO pending `@immich/ui` to enable it + // runes: true, }, preprocess: vitePreprocess(), kit: {