diff --git a/.github/workflows/ci-backend.yml b/.github/workflows/ci-backend.yml index 6bac2c24f5..487c0e5635 100644 --- a/.github/workflows/ci-backend.yml +++ b/.github/workflows/ci-backend.yml @@ -8,7 +8,8 @@ on: - 'translations**' workflow_dispatch: concurrency: - group: backend-${{ github.event.pull_request.number || github.ref }} + # Let dev/main commits finish, PR and feature-branch runs supersede older ones + group: backend-${{ github.event.pull_request.number || ((github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main') && github.run_id) || github.ref }} cancel-in-progress: true env: DEFAULT_UV_VERSION: "0.13.x" @@ -98,11 +99,11 @@ jobs: docker compose --file docker/compose/docker-compose.ci-test.yml up --detach - name: Set up Python id: setup-python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "${{ matrix.python-version }}" - name: Install uv - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2 + uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3 with: version: ${{ env.DEFAULT_UV_VERSION }} enable-cache: true @@ -168,11 +169,11 @@ jobs: persist-credentials: false - name: Set up Python id: setup-python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "${{ env.DEFAULT_PYTHON }}" - name: Install uv - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2 + uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3 with: version: ${{ env.DEFAULT_UV_VERSION }} enable-cache: true diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 7b1c7f0ff5..7ff540c8f6 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -13,7 +13,8 @@ on: - main workflow_dispatch: concurrency: - group: docker-${{ github.event.pull_request.number || github.ref }} + # Let dev/main commits finish, PR and feature-branch runs supersede older ones + group: docker-${{ github.event.pull_request.number || ((github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main') && github.run_id) || github.ref }} cancel-in-progress: true env: REGISTRY: ghcr.io @@ -108,7 +109,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1 - name: Login to GitHub Container Registry - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 + uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -154,7 +155,7 @@ jobs: echo "${digest}" > "/tmp/digests/digest-${{ matrix.arch }}.txt" - name: Upload digest if: steps.check-push.outputs.should-push == 'true' - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: digests-${{ matrix.arch }} path: /tmp/digests/digest-${{ matrix.arch }}.txt @@ -172,7 +173,7 @@ jobs: packages: write steps: - name: Download digests - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 with: path: /tmp/digests pattern: digest-*.txt @@ -184,20 +185,20 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1 - name: Login to GitHub Container Registry - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 + uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub if: needs.build-arch.outputs.push-external == 'true' - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 + uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to Quay.io if: needs.build-arch.outputs.push-external == 'true' - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 + uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0 with: registry: quay.io username: ${{ secrets.QUAY_USERNAME }} diff --git a/.github/workflows/ci-docs.yml b/.github/workflows/ci-docs.yml index 61c54b77fb..24a6057bcb 100644 --- a/.github/workflows/ci-docs.yml +++ b/.github/workflows/ci-docs.yml @@ -6,7 +6,8 @@ on: pull_request: workflow_dispatch: concurrency: - group: docs-${{ github.event.pull_request.number || github.ref }} + # Let dev/main commits finish, PR and feature-branch runs supersede older ones + group: docs-${{ github.event.pull_request.number || ((github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main') && github.run_id) || github.ref }} cancel-in-progress: true permissions: contents: read @@ -74,11 +75,11 @@ jobs: persist-credentials: false - name: Set up Python id: setup-python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: ${{ env.DEFAULT_PYTHON_VERSION }} - name: Install uv - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2 + uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3 with: version: ${{ env.DEFAULT_UV_VERSION }} enable-cache: true diff --git a/.github/workflows/ci-frontend.yml b/.github/workflows/ci-frontend.yml index 4935a767b6..02b7a96811 100644 --- a/.github/workflows/ci-frontend.yml +++ b/.github/workflows/ci-frontend.yml @@ -8,7 +8,8 @@ on: - 'translations**' workflow_dispatch: concurrency: - group: frontend-${{ github.event.pull_request.number || github.ref }} + # Let dev/main commits finish, PR and feature-branch runs supersede older ones + group: frontend-${{ github.event.pull_request.number || ((github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main') && github.run_id) || github.ref }} cancel-in-progress: true permissions: {} jobs: @@ -85,7 +86,7 @@ jobs: with: package_json_file: src-ui/package.json - name: Use Node.js 24 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: 24.x cache: 'pnpm' @@ -117,7 +118,7 @@ jobs: with: package_json_file: src-ui/package.json - name: Use Node.js 24 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: 24.x cache: 'pnpm' @@ -156,7 +157,7 @@ jobs: with: package_json_file: src-ui/package.json - name: Use Node.js 24 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: 24.x cache: 'pnpm' @@ -191,7 +192,7 @@ jobs: runs-on: ubuntu-26.04 permissions: contents: read - container: mcr.microsoft.com/playwright:v1.62.1-resolute + container: mcr.microsoft.com/playwright:v1.64.1-resolute env: PLAYWRIGHT_BROWSERS_PATH: /ms-playwright PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 @@ -205,18 +206,18 @@ jobs: with: package_json_file: src-ui/package.json - name: Use Node.js 24 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: 24.x cache: 'pnpm' cache-dependency-path: 'src-ui/pnpm-lock.yaml' - name: Set up Python id: setup-python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: '3.12' - name: Install uv - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2 + uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3 with: version: '0.13.x' enable-cache: false @@ -260,7 +261,7 @@ jobs: with: package_json_file: src-ui/package.json - name: Use Node.js 24 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: 24.x cache: 'pnpm' diff --git a/.github/workflows/ci-lint.yml b/.github/workflows/ci-lint.yml index 0bef634370..b3d885a01d 100644 --- a/.github/workflows/ci-lint.yml +++ b/.github/workflows/ci-lint.yml @@ -7,7 +7,8 @@ on: branches-ignore: - 'translations**' concurrency: - group: lint-${{ github.event.pull_request.number || github.ref }} + # Let dev/main commits finish, PR and feature-branch runs supersede older ones + group: lint-${{ github.event.pull_request.number || ((github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main') && github.run_id) || github.ref }} cancel-in-progress: true permissions: contents: read @@ -21,8 +22,8 @@ jobs: with: persist-credentials: false - name: Install Python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: "3.14" - name: Run prek - uses: j178/prek-action@4e14d07f9231acabce116ccfca13b13dd9755ece # v3.0.0 + uses: j178/prek-action@44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d # v3.1.0 diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml index 6717b74542..33a09a1458 100644 --- a/.github/workflows/ci-release.yml +++ b/.github/workflows/ci-release.yml @@ -44,7 +44,7 @@ jobs: with: package_json_file: src-ui/package.json - name: Use Node.js 24 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: 24.x package-manager-cache: false @@ -55,11 +55,11 @@ jobs: # ---- Backend Setup ---- - name: Set up Python id: setup-python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: ${{ env.DEFAULT_PYTHON_VERSION }} - name: Install uv - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2 + uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3 with: version: ${{ env.DEFAULT_UV_VERSION }} enable-cache: false @@ -137,7 +137,7 @@ jobs: sudo chown -R 1000:1000 paperless-ngx/ tar -cJf paperless-ngx.tar.xz paperless-ngx/ - name: Upload release artifact - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: release path: dist/paperless-ngx.tar.xz @@ -155,7 +155,7 @@ jobs: version: ${{ steps.get-version.outputs.version }} steps: - name: Download release artifact - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 with: name: release path: ./ @@ -172,7 +172,7 @@ jobs: fi - name: Create release and changelog id: create-release - uses: release-drafter/release-drafter@34d80673e067bdc0c24568d3af899c216adcfaa9 # v7.7.0 + uses: release-drafter/release-drafter@978bb0b30c5ee8cdd332ced253758157150d43f0 # v7.10.0 with: name: Paperless-ngx ${{ steps.get-version.outputs.version }} tag: ${{ steps.get-version.outputs.version }} @@ -183,7 +183,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload release archive - uses: shogo82148/actions-upload-release-asset@aaba0f56bdbc1071f4af234d5cb16055e8a400de # v1.10.4 + uses: shogo82148/actions-upload-release-asset@73f83b114970a3485e1423ecc1fb93d887c9b096 # v1.10.7 with: github_token: ${{ secrets.GITHUB_TOKEN }} upload_url: ${{ steps.create-release.outputs.upload_url }} @@ -209,11 +209,11 @@ jobs: persist-credentials: true # for pushing changelog branch - name: Set up Python id: setup-python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 with: python-version: ${{ env.DEFAULT_PYTHON_VERSION }} - name: Install uv - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2 + uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3 with: version: ${{ env.DEFAULT_UV_VERSION }} enable-cache: false diff --git a/.github/workflows/ci-static-analysis.yml b/.github/workflows/ci-static-analysis.yml index d774194e07..1370ae494f 100644 --- a/.github/workflows/ci-static-analysis.yml +++ b/.github/workflows/ci-static-analysis.yml @@ -8,7 +8,8 @@ on: - 'translations**' workflow_dispatch: concurrency: - group: static-analysis-${{ github.event.pull_request.number || github.ref }} + # Let dev/main commits finish, PR and feature-branch runs supersede older ones + group: static-analysis-${{ github.event.pull_request.number || ((github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main') && github.run_id) || github.ref }} cancel-in-progress: true permissions: contents: read @@ -26,7 +27,7 @@ jobs: with: persist-credentials: false - name: Run zizmor - uses: zizmorcore/zizmor-action@cc914d7f3750a2d13d75c7f184a1060aa0e9d482 # v0.6.4 + uses: zizmorcore/zizmor-action@53290badfa369cb0bf7ad16342cb62c2fa47ac7b # v0.8.0 semgrep: name: Semgrep CE runs-on: ubuntu-26.04 @@ -44,7 +45,7 @@ jobs: - name: Run Semgrep run: semgrep scan --config auto --sarif-output results.sarif - name: Upload results to GitHub code scanning - uses: github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 + uses: github/codeql-action/upload-sarif@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1 if: always() with: sarif_file: results.sarif diff --git a/.github/workflows/cleanup-tags.yml b/.github/workflows/cleanup-tags.yml index f09691504f..ec7cd8014a 100644 --- a/.github/workflows/cleanup-tags.yml +++ b/.github/workflows/cleanup-tags.yml @@ -29,7 +29,7 @@ jobs: steps: - name: Clean temporary images if: "${{ env.TOKEN != '' }}" - uses: stumpylog/image-cleaner-action/ephemeral@21f875bab2376314e0525c614e923c669434f0e4 # v0.13.0 + uses: stumpylog/image-cleaner-action/ephemeral@9796867b2a7994f0a3b6b1f2e38a6579f502c977 # v0.14.0 with: token: "${{ env.TOKEN }}" owner: "${{ github.repository_owner }}" @@ -56,7 +56,7 @@ jobs: steps: - name: Clean untagged images if: "${{ env.TOKEN != '' }}" - uses: stumpylog/image-cleaner-action/untagged@21f875bab2376314e0525c614e923c669434f0e4 # v0.13.0 + uses: stumpylog/image-cleaner-action/untagged@9796867b2a7994f0a3b6b1f2e38a6579f502c977 # v0.14.0 with: token: "${{ env.TOKEN }}" owner: "${{ github.repository_owner }}" diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 424e52164c..33763f630f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -39,7 +39,7 @@ jobs: persist-credentials: false # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 + uses: github/codeql-action/init@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -47,4 +47,4 @@ jobs: # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 + uses: github/codeql-action/analyze@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1 diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 4f7b8a395b..67c203ee8d 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -22,7 +22,7 @@ jobs: token: ${{ secrets.PNGX_BOT_PAT }} persist-credentials: false - name: crowdin action - uses: crowdin/github-action@9c23991700c0ec5256fd41089b9d9d7d540e424e # v3.3.0 + uses: crowdin/github-action@959dc74ac104447731cba99a016f85d0ae719788 # v3.5.0 with: upload_translations: false download_translations: true diff --git a/.github/workflows/project-actions.yml b/.github/workflows/project-actions.yml index e2941292b7..90114d2086 100644 --- a/.github/workflows/project-actions.yml +++ b/.github/workflows/project-actions.yml @@ -19,6 +19,6 @@ jobs: if: github.event_name == 'pull_request_target' && (github.event.action == 'opened' || github.event.action == 'reopened') && github.event.pull_request.user.login != 'dependabot' steps: - name: Label PR with release-drafter - uses: release-drafter/release-drafter@34d80673e067bdc0c24568d3af899c216adcfaa9 # v7.7.0 + uses: release-drafter/release-drafter@978bb0b30c5ee8cdd332ced253758157150d43f0 # v7.10.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/translate-strings.yml b/.github/workflows/translate-strings.yml index ba8269bc50..0beb20d6e4 100644 --- a/.github/workflows/translate-strings.yml +++ b/.github/workflows/translate-strings.yml @@ -23,14 +23,14 @@ jobs: persist-credentials: true # for pushing translation branch - name: Set up Python id: setup-python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0 - name: Install system dependencies timeout-minutes: 12 uses: $/.github/actions/apt-install with: packages: gettext - name: Install uv - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2 + uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3 with: version: ${{ env.DEFAULT_UV_VERSION }} enable-cache: true @@ -48,7 +48,7 @@ jobs: with: package_json_file: src-ui/package.json - name: Use Node.js 24 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: node-version: 24.x cache: 'pnpm' @@ -68,7 +68,7 @@ jobs: cd src-ui pnpm run ng extract-i18n - name: Commit changes - uses: stefanzweifel/git-auto-commit-action@4a55954c782fc1ea30b9056cd3e7a2b40ca8887d # v7.2.0 + uses: stefanzweifel/git-auto-commit-action@d0b01107b5db882071f96de5dd4b54961ea93f4c # v7.2.1 with: file_pattern: 'src-ui/messages.xlf src/locale/en_US/LC_MESSAGES/django.po' commit_message: "Auto translate strings" diff --git a/Dockerfile b/Dockerfile index 8397b0d12b..1c98137794 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,7 @@ RUN set -eux \ # Purpose: Installs s6-overlay and rootfs # Comments: # - Don't leave anything extra in here either -FROM ghcr.io/astral-sh/uv:0.13.5-python3.14-trixie-slim@sha256:d8e732839dfc4225a1ff698803b478b2223c05636c055d3add41ab9dbec0f315 AS s6-overlay-base +FROM ghcr.io/astral-sh/uv:0.13.7-python3.14-trixie-slim@sha256:e80c05a310400cfc90af00b5b7271ef9ad24816e3265e1162af8a678e1aad099 AS s6-overlay-base WORKDIR /usr/src/s6 diff --git a/SECURITY.md b/SECURITY.md index 5418f67a50..b08aaabae2 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -66,7 +66,7 @@ The following are not generally considered vulnerabilities unless accompanied by - optional webhook, mail, AI, OCR, or integration behavior described without a product-level vulnerability - missing limits or hardening settings presented without concrete impact - generic AI or static-analysis output that is not confirmed against the current codebase and a real deployment scenario -- metadata names visible in a document's custom storage path, even when the user cannot access the underlying metadata object; this is expected behavior +- metadata names or normalized words visible in a document's custom storage path or through search/autocomplete for documents the user can access, even when the user cannot access the underlying metadata object; this is expected behavior - the ability to attach objects that a user cannot access to a document by ID is an intentional design choice, and not considered a vulnerability ## Transparency diff --git a/docker/compose/docker-compose.ci-test.yml b/docker/compose/docker-compose.ci-test.yml index 899cd94435..9c7c58b1cb 100644 --- a/docker/compose/docker-compose.ci-test.yml +++ b/docker/compose/docker-compose.ci-test.yml @@ -4,7 +4,7 @@ # correct networking for the tests services: gotenberg: - image: docker.io/gotenberg/gotenberg:8.37 + image: docker.io/gotenberg/gotenberg:8.38 hostname: gotenberg container_name: gotenberg network_mode: host @@ -24,7 +24,7 @@ services: network_mode: host restart: unless-stopped greenmail: - image: docker.io/greenmail/standalone:2.1.14 + image: docker.io/greenmail/standalone:2.1.15 hostname: greenmail container_name: greenmail environment: @@ -35,7 +35,7 @@ services: - "3143:3143" # IMAP restart: unless-stopped nginx: - image: docker.io/nginx:1.31.6-alpine + image: docker.io/nginx:1.31.7-alpine hostname: nginx container_name: nginx ports: diff --git a/docker/compose/docker-compose.mariadb-tika.yml b/docker/compose/docker-compose.mariadb-tika.yml index 7e48f80c06..c39c5ecfac 100644 --- a/docker/compose/docker-compose.mariadb-tika.yml +++ b/docker/compose/docker-compose.mariadb-tika.yml @@ -71,7 +71,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.37 + image: docker.io/gotenberg/gotenberg:8.38 restart: unless-stopped # The gotenberg chromium route is used to convert .eml files. We do not # want to allow external content like tracking pixels or even javascript. diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index 9f7003caca..353cf1a1e2 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -67,7 +67,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.37 + image: docker.io/gotenberg/gotenberg:8.38 restart: unless-stopped # The gotenberg chromium route is used to convert .eml files. We do not # want to allow external content like tracking pixels or even javascript. diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index 6fad60ff84..1349c47a85 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -56,7 +56,7 @@ services: PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: docker.io/gotenberg/gotenberg:8.37 + image: docker.io/gotenberg/gotenberg:8.38 restart: unless-stopped # The gotenberg chromium route is used to convert .eml files. We do not # want to allow external content like tracking pixels or even javascript. diff --git a/docker/init-flow.drawio.png b/docker/init-flow.drawio.png deleted file mode 100644 index 2e19ac16a0..0000000000 Binary files a/docker/init-flow.drawio.png and /dev/null differ diff --git a/docker/init-flow.md b/docker/init-flow.md new file mode 100644 index 0000000000..e87706ad00 --- /dev/null +++ b/docker/init-flow.md @@ -0,0 +1,57 @@ +# Container init flow + +Startup order of the s6-rc oneshot services under `docker/rootfs/etc/s6-overlay/s6-rc.d/`. An arrow `A --> B` means B lists A in its `dependencies.d/`, so B waits for A. Redundant (transitive) edges are omitted. + +Each labelled box is a group of services that can run in parallel: every service in it starts as soon as its own dependencies finish, so services in the same box run in parallel. A service does not wait for the rest of its group, only for the arrows pointing at it. Long-running services such as `init-tesseract-langs` (package installs) overlap with several later steps. + +```mermaid +flowchart TD + subgraph w3 ["Run in parallel"] + init-tesseract-langs + init-modify-user + init-wait-for-db + init-wait-for-redis + end + subgraph w4 ["Run in parallel"] + init-folders + init-compile-bytecode + end + subgraph w6 ["Run in parallel"] + init-search-index + init-llmindex-migrate + init-superuser + end + + base --> init-start --> init-env-file + + init-env-file --> init-tesseract-langs + init-env-file --> init-modify-user + init-env-file --> init-wait-for-db + init-env-file --> init-wait-for-redis + init-start --> init-compile-bytecode + + init-modify-user --> init-folders + init-modify-user --> init-compile-bytecode + + init-folders --> init-migrations + init-compile-bytecode --> init-migrations + init-wait-for-db --> init-migrations + + init-migrations --> init-search-index + init-migrations --> init-llmindex-migrate + init-migrations --> init-superuser + + init-tesseract-langs --> init-search-index + init-tesseract-langs --> init-llmindex-migrate + init-tesseract-langs --> init-system-checks + init-superuser --> init-system-checks + + init-search-index --> init-custom-init + init-system-checks --> init-custom-init + init-wait-for-redis --> init-custom-init + + init-custom-init --> init-complete + init-llmindex-migrate --> init-complete +``` + +`init-search-index` and `init-llmindex-migrate` run `manage.py`, which runs the Django system checks, including the check that the configured OCR languages are installed, so they wait for `init-tesseract-langs`. diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/init-llmindex-migrate/dependencies.d/init-tesseract-langs b/docker/rootfs/etc/s6-overlay/s6-rc.d/init-llmindex-migrate/dependencies.d/init-tesseract-langs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/init-search-index/dependencies.d/init-tesseract-langs b/docker/rootfs/etc/s6-overlay/s6-rc.d/init-search-index/dependencies.d/init-tesseract-langs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-consumer/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-consumer/run index 209803d414..ab8d6b6dfd 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-consumer/run +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-consumer/run @@ -10,9 +10,11 @@ if [[ -n "${PAPERLESS_CONSUMER_DISABLE}" ]]; then else cd ${PAPERLESS_SRC_DIR} + # Django system checks already ran once in init-system-checks, skip repeating them + if [[ -n "${USER_IS_NON_ROOT}" ]]; then - exec python3 manage.py document_consumer + exec python3 manage.py document_consumer --skip-checks else - exec s6-setuidgid paperless python3 manage.py document_consumer + exec s6-setuidgid paperless python3 manage.py document_consumer --skip-checks fi fi diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-scheduler/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-scheduler/run index 396a4d2e09..a3f9da5d14 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-scheduler/run +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-scheduler/run @@ -3,8 +3,9 @@ cd ${PAPERLESS_SRC_DIR} +# Django system checks already ran once in init-system-checks, skip repeating them if [[ -n "${USER_IS_NON_ROOT}" ]]; then - exec /usr/local/bin/celery --app paperless beat --loglevel INFO + exec /usr/local/bin/celery --skip-checks --app paperless beat --loglevel INFO else - exec s6-setuidgid paperless /usr/local/bin/celery --app paperless beat --loglevel INFO + exec s6-setuidgid paperless /usr/local/bin/celery --skip-checks --app paperless beat --loglevel INFO fi diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-worker/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-worker/run index 0bf833c56e..0fb5d0f233 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-worker/run +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/svc-worker/run @@ -3,8 +3,9 @@ cd ${PAPERLESS_SRC_DIR} +# Django system checks already ran once in init-system-checks, skip repeating them if [[ -n "${USER_IS_NON_ROOT}" ]]; then - exec /usr/local/bin/celery --app paperless worker --loglevel INFO --without-mingle --without-gossip + exec /usr/local/bin/celery --skip-checks --app paperless worker --loglevel INFO --without-mingle --without-gossip else - exec s6-setuidgid paperless /usr/local/bin/celery --app paperless worker --loglevel INFO --without-mingle --without-gossip + exec s6-setuidgid paperless /usr/local/bin/celery --skip-checks --app paperless worker --loglevel INFO --without-mingle --without-gossip fi diff --git a/docs/changelog.md b/docs/changelog.md index cc54579cf1..b2b45bc1e4 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,96 @@ # Changelog +## paperless-ngx 3.4.2 + +### Bug Fixes + +- Fix: mobile save button display obsessing [@shamoon](https://github.com/shamoon) ([#14676](https://github.com/paperless-ngx/paperless-ngx/pull/14676)) +- Fix: make index and llmindex init wait for tesseract language install [@stumpylog](https://github.com/stumpylog) ([#14670](https://github.com/paperless-ngx/paperless-ngx/pull/14670)) +- Fix: prevent loss of save view name on save + close [@shamoon](https://github.com/shamoon) ([#14667](https://github.com/paperless-ngx/paperless-ngx/pull/14667)) +- Fixhancement: doc detail mobile ux tweaks [@shamoon](https://github.com/shamoon) ([#14664](https://github.com/paperless-ngx/paperless-ngx/pull/14664)) +- Fix: Bumps filelock to 4.2.6 to pick up ACL related fixes [@stumpylog](https://github.com/stumpylog) ([#14656](https://github.com/paperless-ngx/paperless-ngx/pull/14656)) +- Fix: ensure import bulk\_edit tasks in Celery workers [@shamoon](https://github.com/shamoon) ([#14653](https://github.com/paperless-ngx/paperless-ngx/pull/14653)) +- Fixhancement: add tag names to document history list [@shamoon](https://github.com/shamoon) ([#14625](https://github.com/paperless-ngx/paperless-ngx/pull/14625)) +- Fix: add button type to zoom buttons to prevent form submission [@shamoon](https://github.com/shamoon) ([#14624](https://github.com/paperless-ngx/paperless-ngx/pull/14624)) +- Fix: move document list preview button to own column [@shamoon](https://github.com/shamoon) ([#14610](https://github.com/paperless-ngx/paperless-ngx/pull/14610)) +- Fix: Various small bugs found during typing updates [@stumpylog](https://github.com/stumpylog) ([#14593](https://github.com/paperless-ngx/paperless-ngx/pull/14593)) +- Fix: fix custom fields dropdown text size [@shamoon](https://github.com/shamoon) ([#14606](https://github.com/paperless-ngx/paperless-ngx/pull/14606)) + +### Dependencies + +
+14 changes + +- Chore: ditch the abandoned ngx-bootstrap-icons, roll our own [@shamoon](https://github.com/shamoon) ([#14665](https://github.com/paperless-ngx/paperless-ngx/pull/14665)) +- chore(deps): bump turbohtml to 1.15.3 [@stumpylog](https://github.com/stumpylog) ([#14662](https://github.com/paperless-ngx/paperless-ngx/pull/14662)) +- docker-compose(deps): bump gotenberg/gotenberg from 8.37 to 8.38 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#14634](https://github.com/paperless-ngx/paperless-ngx/pull/14634)) +- chore(deps): bump Django, django-guardian, django-filter, drf-spectacular-sidecar [@stumpylog](https://github.com/stumpylog) ([#14661](https://github.com/paperless-ngx/paperless-ngx/pull/14661)) +- docker-compose(deps): bump greenmail/standalone from 2.1.14 to 2.1.15 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#14631](https://github.com/paperless-ngx/paperless-ngx/pull/14631)) +- docker-compose(deps): Bump nginx from 1.31.6-alpine to 1.31.7-alpine in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#14633](https://github.com/paperless-ngx/paperless-ngx/pull/14633)) +- Chore(deps): Bump the frontend-angular-dependencies group across 1 directory with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14637](https://github.com/paperless-ngx/paperless-ngx/pull/14637)) +- Chore(deps-dev): Bump @playwright/test from 1.62.1 to 1.64.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14641](https://github.com/paperless-ngx/paperless-ngx/pull/14641)) +- Chore(deps): Bump pdfjs-dist from 6.3.289 to 6.4.299 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14644](https://github.com/paperless-ngx/paperless-ngx/pull/14644)) +- Chore(deps): Bump uuid from 14.0.2 to 14.0.3 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14640](https://github.com/paperless-ngx/paperless-ngx/pull/14640)) +- Chore(deps-dev): Bump the frontend-eslint-dependencies group across 1 directory with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14638](https://github.com/paperless-ngx/paperless-ngx/pull/14638)) +- Chore(deps): Bump marked from 18.0.14 to 18.1.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14643](https://github.com/paperless-ngx/paperless-ngx/pull/14643)) +- Chore(deps-dev): Bump prettier from 3.9.9 to 3.9.10 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14645](https://github.com/paperless-ngx/paperless-ngx/pull/14645)) +- Chore(deps-dev): Bump @types/node from 26.6.2 to 26.6.5 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14639](https://github.com/paperless-ngx/paperless-ngx/pull/14639)) + +
+ +### All App Changes + +
+21 changes + +- Fix: mobile save button display obsessing [@shamoon](https://github.com/shamoon) ([#14676](https://github.com/paperless-ngx/paperless-ngx/pull/14676)) +- Fix: prevent loss of save view name on save + close [@shamoon](https://github.com/shamoon) ([#14667](https://github.com/paperless-ngx/paperless-ngx/pull/14667)) +- Chore: ditch the abandoned ngx-bootstrap-icons, roll our own [@shamoon](https://github.com/shamoon) ([#14665](https://github.com/paperless-ngx/paperless-ngx/pull/14665)) +- Fixhancement: doc detail mobile ux tweaks [@shamoon](https://github.com/shamoon) ([#14664](https://github.com/paperless-ngx/paperless-ngx/pull/14664)) +- chore(deps): bump turbohtml to 1.15.3 [@stumpylog](https://github.com/stumpylog) ([#14662](https://github.com/paperless-ngx/paperless-ngx/pull/14662)) +- chore(deps): bump Django, django-guardian, django-filter, drf-spectacular-sidecar [@stumpylog](https://github.com/stumpylog) ([#14661](https://github.com/paperless-ngx/paperless-ngx/pull/14661)) +- Fix: Bumps filelock to 4.2.6 to pick up ACL related fixes [@stumpylog](https://github.com/stumpylog) ([#14656](https://github.com/paperless-ngx/paperless-ngx/pull/14656)) +- Fix: ensure import bulk\_edit tasks in Celery workers [@shamoon](https://github.com/shamoon) ([#14653](https://github.com/paperless-ngx/paperless-ngx/pull/14653)) +- Chore(deps): Bump the frontend-angular-dependencies group across 1 directory with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14637](https://github.com/paperless-ngx/paperless-ngx/pull/14637)) +- Chore(deps-dev): Bump @playwright/test from 1.62.1 to 1.64.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14641](https://github.com/paperless-ngx/paperless-ngx/pull/14641)) +- Chore(deps): Bump pdfjs-dist from 6.3.289 to 6.4.299 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14644](https://github.com/paperless-ngx/paperless-ngx/pull/14644)) +- Chore(deps): Bump uuid from 14.0.2 to 14.0.3 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14640](https://github.com/paperless-ngx/paperless-ngx/pull/14640)) +- Chore(deps-dev): Bump the frontend-eslint-dependencies group across 1 directory with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14638](https://github.com/paperless-ngx/paperless-ngx/pull/14638)) +- Chore(deps): Bump marked from 18.0.14 to 18.1.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14643](https://github.com/paperless-ngx/paperless-ngx/pull/14643)) +- Chore(deps-dev): Bump prettier from 3.9.9 to 3.9.10 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14645](https://github.com/paperless-ngx/paperless-ngx/pull/14645)) +- Chore(deps-dev): Bump @types/node from 26.6.2 to 26.6.5 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14639](https://github.com/paperless-ngx/paperless-ngx/pull/14639)) +- Fixhancement: add tag names to document history list [@shamoon](https://github.com/shamoon) ([#14625](https://github.com/paperless-ngx/paperless-ngx/pull/14625)) +- Fix: add button type to zoom buttons to prevent form submission [@shamoon](https://github.com/shamoon) ([#14624](https://github.com/paperless-ngx/paperless-ngx/pull/14624)) +- Fix: move document list preview button to own column [@shamoon](https://github.com/shamoon) ([#14610](https://github.com/paperless-ngx/paperless-ngx/pull/14610)) +- Fix: Various small bugs found during typing updates [@stumpylog](https://github.com/stumpylog) ([#14593](https://github.com/paperless-ngx/paperless-ngx/pull/14593)) +- Fix: fix custom fields dropdown text size [@shamoon](https://github.com/shamoon) ([#14606](https://github.com/paperless-ngx/paperless-ngx/pull/14606)) + +
+ +## paperless-ngx 3.4.1 + +### Bug Fixes + +- Fix the id\_\_ schemae in the right place [@shamoon](https://github.com/shamoon) ([#14604](https://github.com/paperless-ngx/paperless-ngx/pull/14604)) +- Fix: drop redundant change perms checks on cards open button [@shamoon](https://github.com/shamoon) ([#14601](https://github.com/paperless-ngx/paperless-ngx/pull/14601)) +- Tweak/fix: make new pdf controls mostly hidden [@shamoon](https://github.com/shamoon) ([#14595](https://github.com/paperless-ngx/paperless-ngx/pull/14595)) +- Tweak/fix: move preview button in doc list [@shamoon](https://github.com/shamoon) ([#14594](https://github.com/paperless-ngx/paperless-ngx/pull/14594)) +- Fix: checksum light mode display and cf dropdown mobile position [@shamoon](https://github.com/shamoon) ([#14590](https://github.com/paperless-ngx/paperless-ngx/pull/14590)) + +### All App Changes + +
+6 changes + +- Fix the id\_\_ schemae in the right place [@shamoon](https://github.com/shamoon) ([#14604](https://github.com/paperless-ngx/paperless-ngx/pull/14604)) +- Fix: drop redundant change perms checks on cards open button [@shamoon](https://github.com/shamoon) ([#14601](https://github.com/paperless-ngx/paperless-ngx/pull/14601)) +- Chore: Improve idle memory via more lazy imports [@stumpylog](https://github.com/stumpylog) ([#14599](https://github.com/paperless-ngx/paperless-ngx/pull/14599)) +- Tweak/fix: make new pdf controls mostly hidden [@shamoon](https://github.com/shamoon) ([#14595](https://github.com/paperless-ngx/paperless-ngx/pull/14595)) +- Tweak/fix: move preview button in doc list [@shamoon](https://github.com/shamoon) ([#14594](https://github.com/paperless-ngx/paperless-ngx/pull/14594)) +- Fix: checksum light mode display and cf dropdown mobile position [@shamoon](https://github.com/shamoon) ([#14590](https://github.com/paperless-ngx/paperless-ngx/pull/14590)) + +
+ ## paperless-ngx 3.4.0 ### Features / Enhancements diff --git a/pyproject.toml b/pyproject.toml index 284625798c..5eb0f59ed2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "paperless-ngx" -version = "3.4.0" +version = "3.4.2" description = """\ A community-supported supercharged document management system: scan, index and archive all your physical documents\ """ @@ -26,21 +26,21 @@ dependencies = [ "dateparser~=1.4", # WARNING: django does not use semver. # Only patch versions are guaranteed to not introduce breaking changes. - "django~=5.2.13", - "django-allauth[mfa,socialaccount]~=65.20.0", + "django~=5.2.18", + "django-allauth[mfa,socialaccount]~=65.21.1", "django-auditlog~=3.4.1", "django-cachalot~=2.9.0", "django-compression-middleware~=0.5.0", "django-cors-headers~=4.9.0", "django-extensions~=4.1", - "django-filter>=25.1,<27", - "django-guardian>=3.3.3,<3.6", + "django-filter>=26.2,<27", + "django-guardian>=3.5.2,<3.6", "django-multiselectfield~=1.0.1", "django-rich~=2.2.0", "django-soft-delete~=1.0.18", "djangorestframework~=3.16", "drf-spectacular~=0.30", - "drf-spectacular-sidecar>=2026.7.1,<2026.10", + "drf-spectacular-sidecar>=2026.10.1,<2026.11", "drf-writable-nested~=0.7.1", "filelock>=3.32,<4.3", "flower>=2.0.1,<2.3", @@ -75,7 +75,7 @@ dependencies = [ "tantivy~=0.26.0", "tika-client[httpx]~=1.0", "torch>=2.13,<2.15", - "turbohtml~=1.10.0", + "turbohtml~=1.15.3", "watchfiles>=1.2", "whitenoise~=6.11", "whoosh-compat[tantivy]==0.3", @@ -111,14 +111,14 @@ lint = [ testing = [ "daphne", "factory-boy~=3.3.1", - "faker>=40.36,<40.40", + "faker>=40.36,<40.44", "imagehash", "pytest~=9.1.1", "pytest-cov~=7.1.0", "pytest-django>=4.12,<4.15", - "pytest-env~=1.7.0", + "pytest-env~=1.8.1", "pytest-httpx", - "pytest-mock~=3.15.1", + "pytest-mock~=3.17.0", "pytest-randomly~=5.0.0", "pytest-rerunfailures~=16.4", "pytest-sugar", diff --git a/src-ui/angular.json b/src-ui/angular.json index 633be88c5f..c3faf73f26 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -69,6 +69,9 @@ "src/polyfills.ts" ], "tsConfig": "tsconfig.app.json", + "loader": { + ".svg": "text" + }, "localize": true, "assets": [ "src/apple-touch-icon.png", diff --git a/src-ui/e2e/backend.py b/src-ui/e2e/backend.py index 0a4ed8fa32..b4a77bd2ec 100644 --- a/src-ui/e2e/backend.py +++ b/src-ui/e2e/backend.py @@ -43,6 +43,7 @@ def configure_environment(instance_root: Path) -> None: def seed_database() -> None: + from django.contrib.auth.models import Permission from django.contrib.auth.models import User from django.core.management import call_command from django.utils import timezone @@ -63,11 +64,18 @@ def seed_database() -> None: username="playwright", password="playwright", # NOSONAR ) - User.objects.create_user( + viewer = User.objects.create_user( username="viewer", password="viewer", # NOSONAR ) + viewer.user_permissions.add( + Permission.objects.get( + content_type__app_label="documents", + codename="view_uisettings", + ), + ) + inbox = Tag.objects.create(name="Inbox", is_inbox_tag=True, owner=admin) quick_filter = Tag.objects.create(name="Another Sample Tag", owner=admin) Tag.objects.create(name="TagWithPartial", owner=admin) diff --git a/src-ui/e2e/document-detail/document-detail.spec.ts b/src-ui/e2e/document-detail/document-detail.spec.ts index 2eaec2263e..ba3d8841e4 100644 --- a/src-ui/e2e/document-detail/document-detail.spec.ts +++ b/src-ui/e2e/document-detail/document-detail.spec.ts @@ -80,12 +80,21 @@ test('should show a list of notes', async ({ page }) => { test('should support quick filters', async ({ page }) => { await page.goto('/documents/1/details') + // filter button is available before tags have loaded + const selectedTags = page.locator('pngx-input-tags .ng-value pngx-tag') + await expect(selectedTags).toHaveCount(2) + await expect( + selectedTags.getByText('Another Sample Tag', { exact: true }) + ).toBeVisible() + await expect(selectedTags.getByText('Inbox', { exact: true })).toBeVisible() await page .getByRole('button', { name: 'Filter documents with these Tags' }) .click() - await expect(page).toHaveURL( - /tags__id__all=2,1&sort=created&reverse=1&page=1/ - ) + await expect(page).toHaveURL((url) => { + const tags = url.searchParams.get('tags__id__all')?.split(',').sort() + return url.pathname === '/documents' && tags?.join(',') === '1,2' + }) + await expect(page.locator('pngx-document-list')).toHaveText(/one document/i) }) test('should finish reloading the preview after a remote document update', async ({ diff --git a/src-ui/e2e/document-list/document-list.spec.ts b/src-ui/e2e/document-list/document-list.spec.ts index 5365b48268..b86ffa873f 100644 --- a/src-ui/e2e/document-list/document-list.spec.ts +++ b/src-ui/e2e/document-list/document-list.spec.ts @@ -123,7 +123,7 @@ test('sorting', async ({ page }) => { await page.getByRole('button', { name: 'Notes' }).click() await expect(page).toHaveURL(/sort=num_notes/) await page.getByRole('button', { name: 'Sort' }).click() - await page.locator('.w-100 > label > i-bs').first().click() + await page.locator('.w-100 > label > pngx-bs-icon').first().click() await expect(page).not.toHaveURL(/reverse=1/) }) diff --git a/src-ui/e2e/permissions/global-permissions.spec.ts b/src-ui/e2e/permissions/global-permissions.spec.ts index 42d9002ff5..1cff42b27b 100644 --- a/src-ui/e2e/permissions/global-permissions.spec.ts +++ b/src-ui/e2e/permissions/global-permissions.spec.ts @@ -6,8 +6,15 @@ test.use({ }, }) -test('should not allow user to edit settings', async ({ page }) => { +test.beforeEach(async ({ page }) => { + const settingsLoaded = page.waitForResponse((response) => + response.url().endsWith('/api/ui_settings/') + ) await page.goto('/dashboard') + expect((await settingsLoaded).status()).toBe(200) +}) + +test('should not allow user to edit settings', async ({ page }) => { await expect(page.getByRole('link', { name: 'Settings' })).not.toBeAttached() await page.goto('/settings') await expect(page.locator('body')).toHaveText( @@ -16,7 +23,6 @@ test('should not allow user to edit settings', async ({ page }) => { }) test('should not allow user to view documents', async ({ page }) => { - await page.goto('/dashboard') await expect( page.locator('nav').getByRole('link', { name: 'Documents' }) ).not.toBeAttached() @@ -31,7 +37,6 @@ test('should not allow user to view documents', async ({ page }) => { }) test('should not allow user to view correspondents', async ({ page }) => { - await page.goto('/dashboard') await expect( page.getByRole('link', { name: 'Attributes' }) ).not.toBeAttached() @@ -42,7 +47,6 @@ test('should not allow user to view correspondents', async ({ page }) => { }) test('should not allow user to view tags', async ({ page }) => { - await page.goto('/dashboard') await expect( page.getByRole('link', { name: 'Attributes' }) ).not.toBeAttached() @@ -53,7 +57,6 @@ test('should not allow user to view tags', async ({ page }) => { }) test('should not allow user to view document types', async ({ page }) => { - await page.goto('/dashboard') await expect( page.getByRole('link', { name: 'Attributes' }) ).not.toBeAttached() @@ -64,7 +67,6 @@ test('should not allow user to view document types', async ({ page }) => { }) test('should not allow user to view storage paths', async ({ page }) => { - await page.goto('/dashboard') await expect( page.getByRole('link', { name: 'Attributes' }) ).not.toBeAttached() @@ -75,7 +77,6 @@ test('should not allow user to view storage paths', async ({ page }) => { }) test('should not allow user to view logs', async ({ page }) => { - await page.goto('/dashboard') await expect(page.getByRole('link', { name: 'Logs' })).not.toBeAttached() await page.goto('/logs') await expect(page.locator('body')).toHaveText( @@ -84,7 +85,6 @@ test('should not allow user to view logs', async ({ page }) => { }) test('should not allow user to view tasks', async ({ page }) => { - await page.goto('/dashboard') await expect(page.getByRole('link', { name: 'Tasks' })).not.toBeAttached() await page.goto('/tasks') await expect(page.locator('body')).toHaveText( diff --git a/src-ui/jest.config.js b/src-ui/jest.config.js index 89a3341307..ffea6ccc21 100644 --- a/src-ui/jest.config.js +++ b/src-ui/jest.config.js @@ -28,7 +28,7 @@ module.exports = { 'abstract-paperless-service', ], transformIgnorePatterns: [ - 'node_modules/(?!.*(\\.mjs$|tslib|lodash-es|normalize-diacritics|marked|@angular/common/locales/.*\\.js$))', + 'node_modules/(?!.*(\\.mjs$|tslib|lodash-es|normalize-diacritics|marked|@angular/common/locales/.*\\.js$|bootstrap-icons/icons/.*\\.svg$))', ], moduleNameMapper: { ...esmPreset.moduleNameMapper, diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 8996c9b95d..2734f202ac 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -5,14 +5,14 @@ Close - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/alert/alert.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/alert/alert.ts 38,39 - Slide of + Slide of - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/carousel/carousel.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/carousel/carousel.ts 386,393 Currently selected slide number read by screen reader @@ -20,219 +20,219 @@ Previous - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/carousel/carousel.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/carousel/carousel.ts 425,426 Next - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/carousel/carousel.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/carousel/carousel.ts 452,453 Select month - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/datepicker/datepicker-navigation-select.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/datepicker/datepicker-navigation-select.ts 52 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/datepicker/datepicker-navigation-select.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/datepicker/datepicker-navigation-select.ts 52 Select year - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/datepicker/datepicker-navigation-select.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/datepicker/datepicker-navigation-select.ts 52 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/datepicker/datepicker-navigation-select.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/datepicker/datepicker-navigation-select.ts 52 Previous month - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/datepicker/datepicker-navigation.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/datepicker/datepicker-navigation.ts 73,76 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/datepicker/datepicker-navigation.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/datepicker/datepicker-navigation.ts 73,76 Next month - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/datepicker/datepicker-navigation.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/datepicker/datepicker-navigation.ts 73,74 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/datepicker/datepicker-navigation.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/datepicker/datepicker-navigation.ts 73,74 «« - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/pagination/pagination.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/pagination/pagination.ts 277,278 « - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/pagination/pagination.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/pagination/pagination.ts 277,278 » - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/pagination/pagination.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/pagination/pagination.ts 277 »» - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/pagination/pagination.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/pagination/pagination.ts 277 First - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/pagination/pagination.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/pagination/pagination.ts 277,278 Previous - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/pagination/pagination.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/pagination/pagination.ts 277,278 Next - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/pagination/pagination.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/pagination/pagination.ts 277,278 Last - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/pagination/pagination.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/pagination/pagination.ts 277,278 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/progressbar/progressbar.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/progressbar/progressbar.ts 39,40 HH - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Hours - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 MM - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Minutes - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Increment hours - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Decrement hours - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Increment minutes - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Decrement minutes - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 SS - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Seconds - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Increment seconds - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Decrement seconds - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/timepicker/timepicker.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/timepicker/timepicker.ts 442 Close - node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.2_@angular+core@22.2.2_@angular+_56804c6e9d763769999573a32671b982/node_modules/src/toast/toast.ts + node_modules/.pnpm/@ng-bootstrap+ng-bootstrap@21.0.0_@angular+common@22.2.3_@angular+core@22.2.3_@angular+_2a970977f09c8afdd1f9933e219c8db5/node_modules/src/toast/toast.ts 80 @@ -687,7 +687,11 @@ src/app/components/document-detail/document-detail.component.html - 441,442 + 442 + + + src/app/components/document-detail/document-detail.component.html + 443,444 src/app/components/document-list/bulk-editor/custom-fields-bulk-edit-dialog/custom-fields-bulk-edit-dialog.component.html @@ -835,7 +839,7 @@ src/app/components/common/page-header/page-header.component.html - 30 + 32 src/app/components/common/permissions-dialog/permissions-dialog.component.html @@ -859,7 +863,7 @@ src/app/components/document-detail/document-detail.component.html - 460 + 474 src/app/components/document-list/document-list.component.html @@ -1137,7 +1141,7 @@ src/app/components/common/page-header/page-header.component.html - 18 + 20 src/app/components/common/permissions-select/permissions-select.component.html @@ -1402,7 +1406,7 @@ src/app/components/document-list/document-list.component.html - 239,240 + 240,241 src/app/data/document.ts @@ -1474,6 +1478,10 @@ src/app/components/manage/mail/mail.component.html 166 + + src/app/components/manage/saved-views/saved-views.component.html + 46 + Default Permissions @@ -1733,7 +1741,7 @@ src/app/components/document-list/document-list.component.html - 248,249 + 249,250 src/app/components/document-list/filter-editor/filter-editor.component.html @@ -1768,7 +1776,7 @@ src/app/components/document-list/document-list.component.html - 257,258 + 258,259 src/app/components/document-list/filter-editor/filter-editor.component.html @@ -1811,7 +1819,7 @@ src/app/components/document-list/document-list.component.html - 221,222 + 222,223 src/app/components/document-list/filter-editor/filter-editor.component.html @@ -2289,7 +2297,7 @@ src/app/components/document-list/document-list.component.html - 266,267 + 267,268 src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.html @@ -4115,7 +4123,7 @@ src/app/components/document-list/document-list.component.html - 388 + 391 @@ -4389,7 +4397,7 @@ Create new field src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html - 20 + 19 @@ -4786,7 +4794,7 @@ src/app/components/document-list/document-list.component.html - 275,276 + 276,277 src/app/data/document.ts @@ -6604,7 +6612,7 @@ src/app/components/document-list/document-list.component.html - 218,219 + 219,220 src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -6788,21 +6796,21 @@ Email sent src/app/components/common/email-document-dialog/email-document-dialog.component.ts - 53 + 52 Error emailing documents src/app/components/common/email-document-dialog/email-document-dialog.component.ts - 59 + 58 Error emailing document src/app/components/common/email-document-dialog/email-document-dialog.component.ts - 60 + 59 @@ -7148,14 +7156,14 @@ Copy ID src/app/components/common/page-header/page-header.component.html - 6 + 7 Copied! src/app/components/common/page-header/page-header.component.html - 8 + 9 src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html @@ -7190,7 +7198,7 @@ Read more src/app/components/common/page-header/page-header.component.html - 24,25 + 26,27 src/app/components/common/permissions-select/permissions-select.component.html @@ -8410,7 +8418,7 @@ src/app/components/document-list/document-list.component.html - 320 + 321 @@ -8425,7 +8433,7 @@ src/app/components/document-list/document-list.component.html - 360 + 363 @@ -8440,7 +8448,7 @@ src/app/components/document-list/document-list.component.html - 367 + 370 @@ -8458,7 +8466,7 @@ src/app/components/document-list/document-list.component.html - 388 + 391 @@ -8588,7 +8596,7 @@ src/app/components/document-detail/document-detail.component.html - 483 + 497 src/app/components/document-list/document-list.component.html @@ -8701,7 +8709,7 @@ src/main.ts - 483 + 168 @@ -8863,63 +8871,82 @@ Save & next src/app/components/document-detail/document-detail.component.html - 443 + 446 + + + src/app/components/document-detail/document-detail.component.html + 457 Save & close src/app/components/document-detail/document-detail.component.html - 445 + 448 + + + src/app/components/document-detail/document-detail.component.html + 459 Discard src/app/components/document-detail/document-detail.component.html - 447,448 + 450 + + + src/app/components/document-detail/document-detail.component.html + 451,452 + + + + More save options + + src/app/components/document-detail/document-detail.component.html + 454 Document loading... src/app/components/document-detail/document-detail.component.html - 455 + 469 of src/app/components/document-detail/document-detail.component.html - 484,485 + 498,499 Zoom out src/app/components/document-detail/document-detail.component.html - 488 + 502 Zoom src/app/components/document-detail/document-detail.component.html - 491 + 505 Zoom in src/app/components/document-detail/document-detail.component.html - 498 + 512 Enter Password src/app/components/document-detail/document-detail.component.html - 532 + 546 @@ -9919,7 +9946,7 @@ src/app/components/document-list/document-list.component.html - 336 + 339 @@ -10234,21 +10261,21 @@ Sort by title src/app/components/document-list/document-list.component.html - 213 + 214 Sort by owner src/app/components/document-list/document-list.component.html - 226 + 227 Owner src/app/components/document-list/document-list.component.html - 230,231 + 231,232 src/app/data/document.ts @@ -10263,49 +10290,49 @@ Sort by notes src/app/components/document-list/document-list.component.html - 235 + 236 Sort by document type src/app/components/document-list/document-list.component.html - 244 + 245 Sort by storage path src/app/components/document-list/document-list.component.html - 253 + 254 Sort by created date src/app/components/document-list/document-list.component.html - 262 + 263 Sort by added date src/app/components/document-list/document-list.component.html - 271 + 272 Sort by number of pages src/app/components/document-list/document-list.component.html - 280 + 281 Pages src/app/components/document-list/document-list.component.html - 284,285 + 285,286 src/app/data/document.ts @@ -10324,28 +10351,28 @@ Shared src/app/components/document-list/document-list.component.html - 288 + 289 Sort by src/app/components/document-list/document-list.component.html - 294,295 - - - - Edit document - - src/app/components/document-list/document-list.component.html - 328 + 295,296 Preview document src/app/components/document-list/document-list.component.html - 329 + 327 + + + + Edit document + + src/app/components/document-list/document-list.component.html + 335 @@ -10377,31 +10404,31 @@ - View "" saved successfully. + View "" saved successfully. src/app/components/document-list/document-list.component.ts - 422 + 423 - Failed to save view "". + Failed to save view "". src/app/components/document-list/document-list.component.ts - 428 + 429 View "" created successfully. src/app/components/document-list/document-list.component.ts - 497 + 498 View "" created successfully, but could not update visibility settings. src/app/components/document-list/document-list.component.ts - 503 + 504 @@ -11451,13 +11478,6 @@ 4,5 - - Permissions - - src/app/components/manage/saved-views/saved-views.component.html - 46,47 - - Documents page size @@ -13458,14 +13478,14 @@ Prev src/main.ts - 482 + 167 End src/main.ts - 484 + 169 diff --git a/src-ui/package.json b/src-ui/package.json index e186f5c3bc..bd61a91818 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -1,6 +1,6 @@ { "name": "paperless-ngx-ui", - "version": "3.4.0", + "version": "3.4.2", "scripts": { "preinstall": "npx only-allow pnpm", "ng": "ng", @@ -15,60 +15,60 @@ }, "private": true, "dependencies": { - "@angular/cdk": "^22.2.2", - "@angular/common": "~22.2.2", - "@angular/compiler": "~22.2.2", - "@angular/core": "~22.2.2", - "@angular/forms": "~22.2.2", - "@angular/localize": "~22.2.2", - "@angular/platform-browser": "~22.2.2", - "@angular/router": "~22.2.2", + "@angular/cdk": "^22.2.4", + "@angular/common": "~22.2.3", + "@angular/compiler": "~22.2.3", + "@angular/core": "~22.2.3", + "@angular/forms": "~22.2.3", + "@angular/localize": "~22.2.3", + "@angular/platform-browser": "~22.2.3", + "@angular/router": "~22.2.3", "@ng-bootstrap/ng-bootstrap": "^21.0.0", "@ng-select/ng-select": "~24.2.1", "@ngneat/dirty-check-forms": "^3.0.3", "@popperjs/core": "^2.11.8", "bootstrap": "^5.3.8", + "bootstrap-icons": "^1.13.2", "file-saver": "^2.0.5", "lodash-es": "^4.18.1", - "marked": "~18.0.14", + "marked": "~18.1.1", "mime-names": "^1.0.0", - "ngx-bootstrap-icons": "^1.9.3", "ngx-color": "^10.1.0", "ngx-cookie-service": "^22.0.0", "ngx-device-detector": "^12.0.0", "ngx-ui-tour-ng-bootstrap": "^19.0.0", "normalize-diacritics": "^5.0.0", - "pdfjs-dist": "^6.3.289", + "pdfjs-dist": "^6.4.299", "rxjs": "^7.8.2", "tslib": "^2.8.1", "utif": "^3.1.0", - "uuid": "^14.0.2" + "uuid": "^14.0.3" }, "devDependencies": { "@angular-builders/jest": "^22.0.1", - "@angular-devkit/core": "^22.2.2", - "@angular-devkit/schematics": "^22.2.2", + "@angular-devkit/core": "^22.2.4", + "@angular-devkit/schematics": "^22.2.4", "@angular-eslint/builder": "22.6.0", "@angular-eslint/eslint-plugin": "22.6.0", "@angular-eslint/eslint-plugin-template": "22.6.0", "@angular-eslint/schematics": "22.6.0", "@angular-eslint/template-parser": "22.6.0", - "@angular/build": "22.2.2", - "@angular/cli": "22.2.2", - "@angular/compiler-cli": "~22.2.2", - "@playwright/test": "^1.62.1", + "@angular/build": "22.2.4", + "@angular/cli": "22.2.4", + "@angular/compiler-cli": "~22.2.3", + "@playwright/test": "^1.64.1", "@types/jest": "^30.0.0", - "@types/node": "^26.6.2", - "@typescript-eslint/eslint-plugin": "^8.70.1", - "@typescript-eslint/parser": "^8.70.1", - "@typescript-eslint/utils": "^8.70.1", - "eslint": "^10.11.0", + "@types/node": "^26.6.5", + "@typescript-eslint/eslint-plugin": "^8.72.0", + "@typescript-eslint/parser": "^8.72.0", + "@typescript-eslint/utils": "^8.72.0", + "eslint": "^10.13.0", "jest": "30.5.2", "jest-environment-jsdom": "^30.5.2", "jest-junit": "^17.0.0", "jest-preset-angular": "^17.0.3", "jest-websocket-mock": "^2.5.0", - "prettier": "^3.9.9", + "prettier": "^3.9.10", "prettier-plugin-organize-imports": "^4.3.0", "ts-node": "~10.9.2", "typescript": "^6.0.3" diff --git a/src-ui/pnpm-lock.yaml b/src-ui/pnpm-lock.yaml index 57ec79fe5c..3e743b69ef 100644 --- a/src-ui/pnpm-lock.yaml +++ b/src-ui/pnpm-lock.yaml @@ -13,44 +13,47 @@ importers: .: dependencies: '@angular/cdk': - specifier: ^22.2.2 - version: 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) + specifier: ^22.2.4 + version: 22.2.4(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) '@angular/common': - specifier: ~22.2.2 - version: 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) + specifier: ~22.2.3 + version: 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) '@angular/compiler': - specifier: ~22.2.2 - version: 22.2.2 + specifier: ~22.2.3 + version: 22.2.3 '@angular/core': - specifier: ~22.2.2 - version: 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) + specifier: ~22.2.3 + version: 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) '@angular/forms': - specifier: ~22.2.2 - version: 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) + specifier: ~22.2.3 + version: 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) '@angular/localize': - specifier: ~22.2.2 - version: 22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2) + specifier: ~22.2.3 + version: 22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3) '@angular/platform-browser': - specifier: ~22.2.2 - version: 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + specifier: ~22.2.3 + version: 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) '@angular/router': - specifier: ~22.2.2 - version: 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) + specifier: ~22.2.3 + version: 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) '@ng-bootstrap/ng-bootstrap': specifier: ^21.0.0 - version: 21.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/localize@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2))(@popperjs/core@2.11.8)(rxjs@7.8.2) + version: 21.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/localize@22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3))(@popperjs/core@2.11.8)(rxjs@7.8.2) '@ng-select/ng-select': specifier: ~24.2.1 - version: 24.2.1(c16a4205ea3b15ef29cd8e705c42dd79) + version: 24.2.1(d7ded77d8feaf04f34fcbbfccfbace9a) '@ngneat/dirty-check-forms': specifier: ^3.0.3 - version: 3.0.3(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/router@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(lodash-es@4.18.1)(rxjs@7.8.2) + version: 3.0.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/router@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(lodash-es@4.18.1)(rxjs@7.8.2) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 bootstrap: specifier: ^5.3.8 version: 5.3.8(@popperjs/core@2.11.8) + bootstrap-icons: + specifier: ^1.13.2 + version: 1.13.2 file-saver: specifier: ^2.0.5 version: 2.0.5 @@ -58,32 +61,29 @@ importers: specifier: ^4.18.1 version: 4.18.1 marked: - specifier: ~18.0.14 - version: 18.0.14 + specifier: ~18.1.1 + version: 18.1.1 mime-names: specifier: ^1.0.0 version: 1.0.0 - ngx-bootstrap-icons: - specifier: ^1.9.3 - version: 1.9.3(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) ngx-color: specifier: ^10.1.0 - version: 10.1.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + version: 10.1.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) ngx-cookie-service: specifier: ^22.0.0 - version: 22.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + version: 22.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) ngx-device-detector: specifier: ^12.0.0 - version: 12.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + version: 12.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) ngx-ui-tour-ng-bootstrap: specifier: ^19.0.0 - version: 19.0.0(d24c501c8e7de67195a408ce535a0d0a) + version: 19.0.0(80c1a049efae7c5d8e1cd8a5316ff6b2) normalize-diacritics: specifier: ^5.0.0 version: 5.0.0 pdfjs-dist: - specifier: ^6.3.289 - version: 6.3.289 + specifier: ^6.4.299 + version: 6.4.299 rxjs: specifier: ^7.8.2 version: 7.8.2 @@ -94,66 +94,66 @@ importers: specifier: ^3.1.0 version: 3.1.0 uuid: - specifier: ^14.0.2 - version: 14.0.2 + specifier: ^14.0.3 + version: 14.0.3 devDependencies: '@angular-builders/jest': specifier: ^22.0.1 - version: 22.0.1(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(chokidar@5.0.0)(jest@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(rxjs@7.8.2)(typescript@6.0.3) + version: 22.0.1(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(chokidar@5.0.0)(jest@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(rxjs@7.8.2)(typescript@6.0.3) '@angular-devkit/core': - specifier: ^22.2.2 - version: 22.2.2(chokidar@5.0.0) + specifier: ^22.2.4 + version: 22.2.4(chokidar@5.0.0) '@angular-devkit/schematics': - specifier: ^22.2.2 - version: 22.2.2(chokidar@5.0.0) + specifier: ^22.2.4 + version: 22.2.4(chokidar@5.0.0) '@angular-eslint/builder': specifier: 22.6.0 - version: 22.6.0(chokidar@5.0.0)(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + version: 22.6.0(chokidar@5.0.0)(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) '@angular-eslint/eslint-plugin': specifier: 22.6.0 - version: 22.6.0(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + version: 22.6.0(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) '@angular-eslint/eslint-plugin-template': specifier: 22.6.0 - version: 22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.70.1)(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + version: 22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.72.0)(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) '@angular-eslint/schematics': specifier: 22.6.0 - version: 22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.70.1)(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(chokidar@5.0.0)(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + version: 22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.72.0)(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(chokidar@5.0.0)(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) '@angular-eslint/template-parser': specifier: 22.6.0 - version: 22.6.0(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + version: 22.6.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) '@angular/build': - specifier: 22.2.2 - version: 22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2)(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/localize@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(@types/node@26.6.2)(istanbul-lib-instrument@6.0.3(supports-color@8.1.1))(jiti@2.7.0)(postcss@8.5.28)(supports-color@8.1.1)(tslib@2.8.1)(typescript@6.0.3) + specifier: 22.2.4 + version: 22.2.4(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3)(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/localize@22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(@types/node@26.6.5)(istanbul-lib-instrument@6.0.3(supports-color@8.1.1))(jiti@2.7.0)(postcss@8.5.31)(supports-color@8.1.1)(tslib@2.8.1)(typescript@6.0.3) '@angular/cli': - specifier: 22.2.2 - version: 22.2.2(@types/node@26.6.2)(chokidar@5.0.0) + specifier: 22.2.4 + version: 22.2.4(@types/node@26.6.5)(chokidar@5.0.0) '@angular/compiler-cli': - specifier: ~22.2.2 - version: 22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3) + specifier: ~22.2.3 + version: 22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3) '@playwright/test': - specifier: ^1.62.1 - version: 1.62.1 + specifier: ^1.64.1 + version: 1.64.1 '@types/jest': specifier: ^30.0.0 version: 30.0.0 '@types/node': - specifier: ^26.6.2 - version: 26.6.2 + specifier: ^26.6.5 + version: 26.6.5 '@typescript-eslint/eslint-plugin': - specifier: ^8.70.1 - version: 8.70.1(@typescript-eslint/parser@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + specifier: ^8.72.0 + version: 8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/parser': - specifier: ^8.70.1 - version: 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + specifier: ^8.72.0 + version: 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) '@typescript-eslint/utils': - specifier: ^8.70.1 - version: 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + specifier: ^8.72.0 + version: 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) eslint: - specifier: ^10.11.0 - version: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + specifier: ^10.13.0 + version: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) jest: specifier: 30.5.2 - version: 30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) + version: 30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) jest-environment-jsdom: specifier: ^30.5.2 version: 30.5.2(supports-color@8.1.1) @@ -162,19 +162,19 @@ importers: version: 17.0.0 jest-preset-angular: specifier: ^17.0.3 - version: 17.0.3(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(jest@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(typescript@6.0.3) + version: 17.0.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(jest@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(typescript@6.0.3) jest-websocket-mock: specifier: ^2.5.0 version: 2.5.0 prettier: - specifier: ^3.9.9 - version: 3.9.9 + specifier: ^3.9.10 + version: 3.9.10 prettier-plugin-organize-imports: specifier: ^4.3.0 - version: 4.3.0(prettier@3.9.9)(typescript@6.0.3) + version: 4.3.0(prettier@3.9.10)(typescript@6.0.3) ts-node: specifier: ~10.9.2 - version: 10.9.2(@types/node@26.6.2)(typescript@6.0.3) + version: 10.9.2(@types/node@26.6.5)(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 @@ -210,8 +210,8 @@ packages: engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular-devkit/architect@0.2202.2': - resolution: {integrity: sha512-7ScBo47haHyRGG5M5ZEpbhwHgO2LEDbCLwNCjpjwhtRFDIEmAFbULM1OQjIybN3x+wOyY1kWRK7KvihCbs371g==} + '@angular-devkit/architect@0.2202.4': + resolution: {integrity: sha512-hafew1tft3+bnv+DjAtLDEq/Yx5/UyAz/+M4VC5EWQQhcFCN81X47szTX3F9dNeiZIQb8d/WmCnmlbHz6CyupA==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true @@ -242,18 +242,27 @@ packages: chokidar: optional: true + '@angular-devkit/core@22.2.4': + resolution: {integrity: sha512-HDlsVK/qN7p5ttKgPvVLo87yrN0UcHR7OyQo1n/lvvMQcYrA0n01E+ix4t+q4C04ifpMbNQtrK0I1222OKi99w==} + engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^5.0.0 + peerDependenciesMeta: + chokidar: + optional: true + '@angular-devkit/schematics@22.1.3': resolution: {integrity: sha512-ebY5bwZVB0onxxyTbJch//VidVVV8jo/F13n+TV5s/3ZywsC3/XZsfMHaxlFmpvP/G17+/C9JVoEXT+uwjT+/Q==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/schematics@22.2.0': - resolution: {integrity: sha512-yhp/LRzKHJOzo2gFm9+H5DKnsT9adi+ItO2pW0pW2B455sqZYE8RJaSku+TSlv+PvWSmbtFsPXNgSRLA6pSk8Q==} - engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/schematics@22.2.2': resolution: {integrity: sha512-uCpFZbQgFUrOjKHLeYSCaYCJdufauYom8yFGggm67yetMAGKPbmRvUEko8i8auNFoBQ+1w1CivjSTwtmXQzZkA==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/schematics@22.2.4': + resolution: {integrity: sha512-9pRNtcZN87yM7KQX+HTxGatrm86y30JxVwkF2WNG1pR0e9yeiYWc1KQ5hRS1Nq1LULoP95HApc+TBXqUXzF4Ag==} + engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-eslint/builder@22.6.0': resolution: {integrity: sha512-Zn9yjLtUYKd9HF5UZXKqLKuvdYFejVuTJHQ0gFt4pjWDRvb16Lgc8EzeGyYTsc9MNnyFAmHeDTs2dtlFITSDBg==} peerDependencies: @@ -295,8 +304,8 @@ packages: eslint: ^9.0.0 || ^10.0.0 typescript: '*' - '@angular/build@22.2.2': - resolution: {integrity: sha512-QHJWkZdEWTqqb3+HiSp8lnuS4iQJCa7yTK9gg5TaMIjCoZzP9mD9L417stiVDZGj2J3Y9mrml044nEVvSbW0ig==} + '@angular/build@22.2.4': + resolution: {integrity: sha512-Emb3pxRkvf749NQ5cz4ux2h9Cnbxx3FmcupdXIaoRxIyNXM8JxjFDCLZTe0yGGOWv5+hSaoR7XESOcN134vBPw==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler': ^22.0.0 @@ -306,7 +315,7 @@ packages: '@angular/platform-browser': ^22.0.0 '@angular/platform-server': ^22.0.0 '@angular/service-worker': ^22.0.0 - '@angular/ssr': ^22.2.2 + '@angular/ssr': ^22.2.4 istanbul-lib-instrument: ^6.0.0 karma: ^6.4.0 less: ^4.2.0 @@ -347,8 +356,8 @@ packages: vitest: optional: true - '@angular/cdk@22.2.2': - resolution: {integrity: sha512-d5PWfIargIEV0rlwZea2pYDGb8FhF9df6a6XFRLThla6NKiJRs8utqW+7pyY9wCPFR3SSCGHC05xFh7qv91hdw==} + '@angular/cdk@22.2.4': + resolution: {integrity: sha512-c/DSWyCnN17f/EIl9Y1zVmSEWCAEdp4yeS53WWiHghIPg3kDX32Qbe/9b0/hlYfxcBSdPxtcgZMLSvqtu6hvkA==} peerDependencies: '@angular/common': ^22.0.0 || ^23.0.0 '@angular/core': ^22.0.0 || ^23.0.0 @@ -356,38 +365,38 @@ packages: '@angular/platform-browser': ^22.0.0 || ^23.0.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/cli@22.2.2': - resolution: {integrity: sha512-AALIN+zai0CiA7HgSCGVPHyZyiw3yFWliCfbaS4ueHDJHVZ8QhVjRUrnfGZc3EJnigcyQ0w2DKeTxjwqpDjKew==} + '@angular/cli@22.2.4': + resolution: {integrity: sha512-luD9gNbMV7ME7mv9cUatVE+WF8Ecqa8v9Zo47YZK/6EPQUKdLxeosGWlHtrvBXElK1YehHItrUbawtZQmQwwlg==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular/common@22.2.2': - resolution: {integrity: sha512-d+mbF1UQLpsoJiC7h4pl58G7XeLHKU8DdLbq9u7TuOK0AnC1t2rrphi8M8WqUrZ+bfmFKCU4i1i4+vOF1N5GtA==} + '@angular/common@22.2.3': + resolution: {integrity: sha512-sRzcvxzurbkCDVFJMguNVgsHds3NvDj5qbZ44NHjH7J9MBk5oZYXHppdHVm8AolBhCXAWvMk0vx+NO8Bt4rS7A==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} peerDependencies: - '@angular/core': 22.2.2 + '@angular/core': 22.2.3 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@22.2.2': - resolution: {integrity: sha512-7PCIBTVIzG4oyAkDeBRPJpGcgSDLBCKn+2Pp9+gXnXOEETdWhV34so1fpWZ2GWBZsxXav7Ry0K93vFwF93yWoQ==} + '@angular/compiler-cli@22.2.3': + resolution: {integrity: sha512-em7Ht0Dv7cN7vZgvl2fl1yscAs+zUG2Vr2YKpVZ/rOWuTL2JZyT1qIfKhC4wQoo/3lN8fiUIwQMpflSGzIEPng==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} hasBin: true peerDependencies: - '@angular/compiler': 22.2.2 + '@angular/compiler': 22.2.3 typescript: '>=6.0 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@22.2.2': - resolution: {integrity: sha512-hg8Kvhq29w97vs3O5KsSeqA+oobrAKpr/GvsWBIqjRzfrxxeFdjRRoEv1/MVgMSJK36VLigNCjB1qPF3MB17uA==} + '@angular/compiler@22.2.3': + resolution: {integrity: sha512-GjDkmOBqW+6RJTeW5mlLRivf6Zy7Ed0auVh+DYD67d4UF4Sk17F1vIt8puF4CQ2PIezlHh7oOnermCBNHAOGkQ==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} - '@angular/core@22.2.2': - resolution: {integrity: sha512-mFiSoAs7Gp/7VlbdSxDyV2I/FEyYeNZRaHH7QrMWSB9t+k7wm37uCaYOt9fy6fgXU/UbCgBESp09fV9bUTQcmA==} + '@angular/core@22.2.3': + resolution: {integrity: sha512-ponarFrAZsPutT+htRt3PEmkt2/IB7DyrBy2f48sxsIx3ZA6xw09i2HOEBo+VBphlN6B/ynK9q+o04HPhdJ+dQ==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} peerDependencies: - '@angular/compiler': 22.2.2 + '@angular/compiler': 22.2.3 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -396,41 +405,41 @@ packages: zone.js: optional: true - '@angular/forms@22.2.2': - resolution: {integrity: sha512-Fgh+EnDoULSFzuDy44da/5Chi+4Sd2Qc4SLjFj23bktvMJ1yfuBPWkvpR9xgWg9Auq+9x84wJVK6WyNwIjXYWA==} + '@angular/forms@22.2.3': + resolution: {integrity: sha512-TKP8FpeRCY/++vKWsY8GC1J2sNtEkdNNBPdgnMAMLTwheW5JzjwVatuQlbuZEx3WaAjbll1Ux3d+eHeqAVrtQg==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} peerDependencies: - '@angular/common': 22.2.2 - '@angular/core': 22.2.2 - '@angular/platform-browser': 22.2.2 + '@angular/common': 22.2.3 + '@angular/core': 22.2.3 + '@angular/platform-browser': 22.2.3 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@22.2.2': - resolution: {integrity: sha512-pHahnD4xcv5Znsg/JY6eRtG6FEhe1E2pSqaoxeGfDoMZOp2GZq0+7zhzHE6oq2eXqQcSMIlUAWFXMH/KByNqDw==} + '@angular/localize@22.2.3': + resolution: {integrity: sha512-PAiV/k8ps4Qosu0VFk5/HIhjfQa0w4Y28+rx3aPIFei3d+kSak4yG5X9SiPWJQaSXr+YamS5pE/BipLYLNvwqA==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} hasBin: true peerDependencies: - '@angular/compiler': 22.2.2 - '@angular/compiler-cli': 22.2.2 + '@angular/compiler': 22.2.3 + '@angular/compiler-cli': 22.2.3 - '@angular/platform-browser@22.2.2': - resolution: {integrity: sha512-DnAyZTLty5bVNeDhcSPNQABqb9SmNvYfYhvgU3dKoGEpONrrECfYo/X4MN0g7Z9Dn/DkgBCNRoC9AZWxbO9HDQ==} + '@angular/platform-browser@22.2.3': + resolution: {integrity: sha512-eWZGsbG4bSrSg9UB/NE8wORGVrh1u+x6rirPGpMWqq/mTi6q+nS+pnPxAxmiEs8wmPH5nCz5b2pRKQeYUkhAGA==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} peerDependencies: - '@angular/animations': 22.2.2 - '@angular/common': 22.2.2 - '@angular/core': 22.2.2 + '@angular/animations': 22.2.3 + '@angular/common': 22.2.3 + '@angular/core': 22.2.3 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/router@22.2.2': - resolution: {integrity: sha512-45HP/henqbPRTCBHzwF4ZV8JU75u2TmBMR4BtwcXcKF5SWragKWE0rMz4NpHnCQIy3bIy5SVTvawpf7EJ/kRyw==} + '@angular/router@22.2.3': + resolution: {integrity: sha512-h4C3iJ3OXM9HItErmTo9fFrFRDj1DSqbvweHAWl8eYJvyuhDD80gBNgdpN8/5gpt9K1HV+PXk0YbyjyQ0zMfPA==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0} peerDependencies: - '@angular/common': 22.2.2 - '@angular/core': 22.2.2 - '@angular/platform-browser': 22.2.2 + '@angular/common': 22.2.3 + '@angular/core': 22.2.3 + '@angular/platform-browser': 22.2.3 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@3.2.0': @@ -476,8 +485,8 @@ packages: resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@8.0.6': - resolution: {integrity: sha512-HTrtZ4+iA0+kzdbCgvdSk1U4pEl3BvpGnlUbualCGNbrVhhQvhgBzurTUmqpWyvyHbWYWaIfdx2mOlL9LJjsew==} + '@babel/helper-compilation-targets@8.0.7': + resolution: {integrity: sha512-ilAZCdOOlOVA7dQbaFNw2f/59p6GW33NxTopc3DvEE3efp3ZXTrGX/yZScaKw8/vd9bq31Ag0EcXiLw32bAgJg==} engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-globals@7.29.7': @@ -506,8 +515,8 @@ packages: resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@8.0.6': - resolution: {integrity: sha512-+6HYEBnsDRZHJtUTAEfMQd0zMDqdFHS7C+5vAsEZqBUr3vEMWOWlHJ0Jz1gS8jJIlCvLsuA6ivmeoqzH936YcA==} + '@babel/helper-string-parser@8.0.8': + resolution: {integrity: sha512-fVM+gSuKbdv9cpmyRNh5EvsDHUZCdxQH3FdnFKSkNYHpbsn95bbrxm+ES3MVeQjcqwi2O5ur/DjLfmTQaO60ng==} engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-validator-identifier@7.29.7': @@ -530,8 +539,8 @@ packages: resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/helpers@8.0.5': - resolution: {integrity: sha512-fQtPOXjYOYv85PIdwotp2TJGVYOycX0PQq+l844fFAxOULtBy8BVF35GyeueX0r4KvDthqPH5xAI1clQPk/2uA==} + '@babel/helpers@8.0.8': + resolution: {integrity: sha512-FBmhiDWs625wHg03OKiLQDeT6LOc2lWBbW97Yqs2iI1tZcucjpmYnO29NHsQ83XxKvredcvUymW/AAn2UtnakA==} engines: {node: ^22.18.0 || >=24.11.0} '@babel/parser@7.29.8': @@ -539,8 +548,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@8.0.6': - resolution: {integrity: sha512-LpGDIYJAzc3Y3PT9x+FxBrGYu2PlWxLmyN7SwPTzaX0LSwEmFJBsRnPBqmaXF2r1v+Zhz6lNiEJ+7yKtM5+Ugg==} + '@babel/parser@8.0.8': + resolution: {integrity: sha512-Gq65JogAr0S2p0BzvfSJboyuiRnxDQApyOqHkKmkrvm+VlLK4gC3pKsiOKEdnhFBemrFbSnOu90mZZWDpiJnmQ==} engines: {node: ^22.18.0 || >=24.11.0} hasBin: true @@ -647,23 +656,23 @@ packages: resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==} engines: {node: '>=6.9.0'} - '@babel/traverse@8.0.6': - resolution: {integrity: sha512-ilYV+qLStGzSKLipJlETdvdtpK3rAuwfCmCoGKv15MU4EoeIuLkespSNoNLFGOPSciEHx9TLWtN5mv0fz5w5mQ==} + '@babel/traverse@8.0.7': + resolution: {integrity: sha512-bVV0brinsTWgc6ptSIoQo3GbITtl0VZAqEUJbHHcyfDPEu+q/fEvlYEa+6H85HoK8IdksKBFtKJbJFZ6Kff+zg==} engines: {node: ^22.18.0 || >=24.11.0} '@babel/types@7.29.8': resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} engines: {node: '>=6.9.0'} - '@babel/types@8.0.6': - resolution: {integrity: sha512-c+xgSWboV2pdwXP67BUWDVRHi2BO5Q3KwxyFVs7taVTY+fsK47/L51ZXQoV9rozHJDNHvJ4v4WEsI/IlxV2l2A==} + '@babel/types@8.0.8': + resolution: {integrity: sha512-iXSSZAKQWmaeAwGtFw10v9fg5hUiUs0L+w+Z2K11kym3pDNK+SF0VcAQPsEFvWcTSZ7LMgClMXDBvTbH0IlICg==} engines: {node: ^22.18.0 || >=24.11.0} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bufbuild/protobuf@2.15.0': - resolution: {integrity: sha512-DAheWUkVr/SJTWCc+lg9dhY0eN4SaWlf4+bG1KzHeXbnqt0AfB/NX0Z+VunGlM1ki1B4zVvye27MpKh/svySUA==} + '@bufbuild/protobuf@2.16.0': + resolution: {integrity: sha512-FWa0sPlqYGJgpTs6OxBRcL/AW4JT0OIO+W1ajerluoTVh8CV0B7XM1qsNCRgnkSCkRCgOICKHRQlY17jrsm0+Q==} '@cacheable/memory@2.2.0': resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==} @@ -902,8 +911,8 @@ packages: resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@harperfast/extended-iterable@1.0.3': - resolution: {integrity: sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==} + '@harperfast/extended-iterable@1.0.5': + resolution: {integrity: sha512-4ScXlphaKEa49RpHmqwATq9QI9aUTdWVYDlJkzxhsD7ShJP+pHCYLznMO9n/wREY8jPjRZ59wLJY6HM5yB5Gkw==} '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} @@ -925,12 +934,12 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inquirer/ansi@2.0.8': - resolution: {integrity: sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ==} + '@inquirer/ansi@2.0.9': + resolution: {integrity: sha512-0Ywt3S8tqM6TWUcsRlBFQ1x+X3/o8kktX0ZiKAnByYb9GFDknnOhse1PVtfiD2BXPI8ar+BWx9PV9R0lQIcygw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - '@inquirer/checkbox@5.2.5': - resolution: {integrity: sha512-bRt8J8m+Fot9CXv+zNQGXUq2ET0MggR1fPz7v6edN6MFYmsbfGnMmkmWZJEegMKqrAC8ej/o1sqisHZXZJMAfQ==} + '@inquirer/checkbox@5.2.7': + resolution: {integrity: sha512-/+QmGE/9bvE/EobaZDnzYe+T+QWoJrnmxwBQNtoi2OVSUR9d1znYsNyEoUrOZvFSxDYttrhzRIpXpaLkN+iIsg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -947,8 +956,8 @@ packages: '@types/node': optional: true - '@inquirer/core@12.0.3': - resolution: {integrity: sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==} + '@inquirer/confirm@6.3.4': + resolution: {integrity: sha512-ZwnaZZDa1zxsyVrN32s447ydMnKcw7e8WWNT+R+Qsu0zAn8Rs6yi9d1B80Kob1Ul2cfUi7t8JD2t4/K7uEZpqA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -956,8 +965,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.3.3': - resolution: {integrity: sha512-YsKkS2q63IiLtaDK/9nqzdComN97SDQrmKiyNggN+ceP4ty+Z6VwyTz3FpjeUWeW1Efss2xHFKCC9sx7hnrsxg==} + '@inquirer/core@12.0.5': + resolution: {integrity: sha512-c0ZSnO9oVk/IlEGoZK3u8b3IZQeu9I6jUkXJSQnQEVRXsjKvtAq3AGqFL2LgfJhlzMZne08pZHWRWasIcI3Rew==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -965,8 +974,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.1.5': - resolution: {integrity: sha512-uHuXLmXW+TtIfT/9vSBotypAkqn1n34Ul+CLGPos/xANyO4Ff5xZzkYhbKR4NEcfVK4a9mHQOpwVZzluSHFRGw==} + '@inquirer/editor@5.3.5': + resolution: {integrity: sha512-6lU3/pPx5z3lHWejFW061MV4qZooBQYv/+EeGhNOPiP/i+hrYsHfxxBnnDGsAfg8YdLUd69YckoeOjtr3QuAUg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -974,8 +983,17 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@3.0.5': - resolution: {integrity: sha512-f3QQJRIX5ZEneBHNUIuPjmbdzHnmRFJA8r2dkcb8q+OM5Uv5KtnuAttQumnrjcBVBM3mcTX1CkmtAkU58VRZxg==} + '@inquirer/expand@5.1.7': + resolution: {integrity: sha512-eiJ31YFCaB6fLoJCqLIn8S6eqUyME6vwr8KcP5h8cxmA+bV9RRVPO+kywoxb7G63HduDXV6sN/SM7o2R+ahEcQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@3.0.6': + resolution: {integrity: sha512-rWmw6WG8JZ7LMn/srXEylYGhL6EXXJeROE7/4x4GREh6NgzqJBDbIgpNGsYoLPfobeb4VZtEYzPGnT5EFNYhiQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -987,8 +1005,8 @@ packages: resolution: {integrity: sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - '@inquirer/input@5.1.6': - resolution: {integrity: sha512-HtcJhB2QFVXbLuJ5S3syhNbTUVxYvwqV4VRBDkQceBloC9bmTViUoRFP5PbSaDZb3HzfPmpuU/gG4ybVBz4FHA==} + '@inquirer/input@5.1.8': + resolution: {integrity: sha512-psOSTgkL8y/OtgJJYbqJ0oISr2QBE0U1Ro/qQdA/EKjeJiwiUTQgQmq8o4ESNzVOWthIeh3YLD7BCUR9dKnR5g==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -996,8 +1014,8 @@ packages: '@types/node': optional: true - '@inquirer/number@4.2.3': - resolution: {integrity: sha512-6Yuwh1NGSbu1Lo4N1EWjXs1jKRntLg/ZCwhmeorEHde90v1XxAozdbd4Iu30eOQLW+6h1hp2O9ujNfLSbTPJnA==} + '@inquirer/number@4.2.5': + resolution: {integrity: sha512-lEy7LWsdF5qHx5QjHZqabUqM9P7i5uTMCt8GRzqxmwXXKbapKJDA+ucVflVVPAyj4snD5DTAD4L+sct85XOlOQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -1005,8 +1023,8 @@ packages: '@types/node': optional: true - '@inquirer/password@5.2.2': - resolution: {integrity: sha512-W9zYdyzogK+6110mqwaSJWCBu2yA5Q/OfnGSjjZB1bNpHlmUozXxTl0+QOZBNeVd6Qo81/qT75gW05gLAtITxw==} + '@inquirer/password@5.2.4': + resolution: {integrity: sha512-T7ir3fflSSVCYEVqNyMBq+pIMsilQRtbZcD5gxn6Ewsin5TJWBxrGBdXveWtmeXVAeoInfhS+BhBUZaL4sFSDg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -1023,8 +1041,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.3.5': - resolution: {integrity: sha512-1oHky1ONfCOwNrnkQGDE1oaSij/3fI6HFMSf2H/WsGO2lEyDX9My82iggITSy9ddSZ8yk8j9v41OI0fVoSIoaA==} + '@inquirer/rawlist@5.3.7': + resolution: {integrity: sha512-XveEe8v3BHj9ec00n+9i8FHjWhXjS6+jCTizYvXCqKUKtgkrq9xid8S5j3mYGW96qfxG3mwNoud3m3v8GDk9Pw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -1032,8 +1050,8 @@ packages: '@types/node': optional: true - '@inquirer/search@4.3.3': - resolution: {integrity: sha512-fyuIU1Nbpvwlikjg3gXwJFDI11+EFjqQ7P+iByfmivIKQ1vmaykNrD/vy5unHuUqUpsOsnvJ25//tPF7E/RBRA==} + '@inquirer/search@4.3.5': + resolution: {integrity: sha512-kIUecMugEN2YTvTmff+uYz0nAE0f9RFNDVZknfrh264vAQM9P8tnsXiUp7z8XbGuNIBEtFMJhvc9QquawpC46A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -1041,8 +1059,8 @@ packages: '@types/node': optional: true - '@inquirer/select@5.2.5': - resolution: {integrity: sha512-9kc15hr8r/kI+3DO/xLog5nOzTz1jqsHXa6JBFzmQKhkoJ8Slda1I1L/uD8ZSZ9tF1yp79wwXe7mclvX1rqR2Q==} + '@inquirer/select@5.2.7': + resolution: {integrity: sha512-pRDWO4dTqSAvFQdO8yclKMtXNDm9K9HmvWB5UZmT3clw2OlOBNXveHzhyFmO/0d0yJMqlPcNITus1Jtpm6t8VQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' @@ -1059,6 +1077,15 @@ packages: '@types/node': optional: true + '@inquirer/type@4.2.0': + resolution: {integrity: sha512-2rnHX8RPo4glJYqnFc/v3nQeIhDcjyRRyaT7MGcfL/8xv/8K03SXYoA2tX06WVSKywWOE/ncbG3dtuzLjR5TCQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1303,79 +1330,79 @@ packages: cpu: [x64] os: [win32] - '@napi-rs/canvas-android-arm64@1.0.9': - resolution: {integrity: sha512-4LGXk2/0HVzE29K8SzML5WubgCp++B1FH3qgl35XmSZE+lLdr6P9VRQEnZ0MCLZMTSuJP41yyhtoiVNEuvrTIA==} + '@napi-rs/canvas-android-arm64@1.0.13': + resolution: {integrity: sha512-trn7AaDzQ+yeeA0ezhkC7cB1ZDPtp4UYk0EvB5F8qtYL9jEVWtVrU30WOpI52DszoTxaTsCgf5PP4ZVaOlOIHQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@napi-rs/canvas-darwin-arm64@1.0.9': - resolution: {integrity: sha512-YNdfLBzY0W/Pep9fo2L6RmoNlNksnn05LRnX66W63R3ij58S25QOTcjdtEt2v8+PnCESzqZsYzUo+QPeIR44NA==} + '@napi-rs/canvas-darwin-arm64@1.0.13': + resolution: {integrity: sha512-6Y2djEetL8copxfNK6hg7oig/xqTwOchv19hBOm+zBNdKc/02Z3kjZN5wrLzv/l5O04/bAQS6I/AlQpwBlXgPg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@napi-rs/canvas-darwin-x64@1.0.9': - resolution: {integrity: sha512-ceZQSknTEcy3dOXoekv59LTCkXjvnLsq+VW5PeNNDHEPQbRS5Ervkm1EaDa7WLAjiYWMLuSQTRTHao1dEX4prg==} + '@napi-rs/canvas-darwin-x64@1.0.13': + resolution: {integrity: sha512-OZoPwwu4TMMg8GTCFBrg8UFExwQTU/55i3uTC/izDat6PHE+ro9dimyQoOboFf91+NY7Pnn70ScR8f8I8+eZXw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@napi-rs/canvas-linux-arm-gnueabihf@1.0.9': - resolution: {integrity: sha512-XhfI0Wwv4llhd6nnWDtY3kQKjq0r+y1i91PlJlJI24ag2U9WrnwbG1qS3+fDLEyouwEVFchiKkTEHozK+5iUNA==} + '@napi-rs/canvas-linux-arm-gnueabihf@1.0.13': + resolution: {integrity: sha512-dZSYaKROuswU2eUWG5aBKndNVe68elo1YX93xtRax7q658tj8rYE+HwduovWJgs6qwv1r1/CLR60nDeBbyjvyg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@napi-rs/canvas-linux-arm64-gnu@1.0.9': - resolution: {integrity: sha512-012oiYtKaE7i9oxc8q7nraT7kDOpLcaCmFLzVe9Ty34RHDdoDzbWLrVh827CNxYh/EADX1eSikA3ymLjo/nNuw==} + '@napi-rs/canvas-linux-arm64-gnu@1.0.13': + resolution: {integrity: sha512-W6FzYE8ADHI93In1vi80KBL6btDtAMuj50Ch5ptkWS8xuntyzbR4h5JDUmXoakxZn2yMInksudTEqVSWoFqFGg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@napi-rs/canvas-linux-arm64-musl@1.0.9': - resolution: {integrity: sha512-Ls5UWYFFn63casTZEczbeyEg3vRDRkv9lscuGwfchtY5yLLQhgOB8SN4YGxmfJ5vTaBwZ2YUxBS3NtmjJmFXdA==} + '@napi-rs/canvas-linux-arm64-musl@1.0.13': + resolution: {integrity: sha512-+6fQ+rR49hkAa4voh2stLIwQ+4t+gmoseM8Bc53/DlMXb73IKymDPWK9A/NtWeqTW4ijWppYuyuxS2hPI8tzNA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@napi-rs/canvas-linux-riscv64-gnu@1.0.9': - resolution: {integrity: sha512-hLKEGxV7ZiRHqndePTokgDMdBlo/rDfzg7P4p4QIv9pUhuYobnu3R2NIFLCRghG0nwfo+s2sw+c1xZFeCmEAsw==} + '@napi-rs/canvas-linux-riscv64-gnu@1.0.13': + resolution: {integrity: sha512-17XEMO3t9RW/TtHtSFf2AkaSWuCWdzbPeidz7zrOFawHxoLSJCnpTI1hN5aUvrZNnkNNmt/vZVJCh0ryUaik3A==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] - '@napi-rs/canvas-linux-x64-gnu@1.0.9': - resolution: {integrity: sha512-6kaz3w0QMy77PDWk6rJ1ksIihdad3qzEyX2o2oGT8GwCaypfT5mhjr8buOO5hstyLxcWXDScuz56RsINLtBPIQ==} + '@napi-rs/canvas-linux-x64-gnu@1.0.13': + resolution: {integrity: sha512-lc48IwknVHBsNzXn9Xs5OkUsRX38Ml3Z1aOybQ51mMEzZckm8+4A0qROlyYHEoBPzr1kL3IU8ZUAqDb7wtdX8w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@napi-rs/canvas-linux-x64-musl@1.0.9': - resolution: {integrity: sha512-xrGvmS3v55hmZ86ls/kBLVNMUTYio3f6Ik0DireemG994VfPAwiA3ZXA0Uf1bByctkB3NQ1Sfb+H5bkdUnnzfQ==} + '@napi-rs/canvas-linux-x64-musl@1.0.13': + resolution: {integrity: sha512-bGY1r26S2bs8UNFJcPWcCSNdCFbKep5PATsvtgtC9A5u6SRgr2/jJE/RlhHL5m9ZpixNDhVkLY/5h16Kx5V9YA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@napi-rs/canvas-win32-arm64-msvc@1.0.9': - resolution: {integrity: sha512-yjmVS3ArZeRVCP7jqbPq4rpZa/BhTeI7ELE2XqJg3snICQBDevLZyArxswHkiTnT34KRic33/4fLirrHI+SY8A==} + '@napi-rs/canvas-win32-arm64-msvc@1.0.13': + resolution: {integrity: sha512-2vRPBZoaIvJrUkDhZTE2Hn0YrnpJRCWVM3EJACoBKjuWI6WgPxGtUoRMsxRviCsyks8bKTSFdyw14CellnG2qA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@napi-rs/canvas-win32-x64-msvc@1.0.9': - resolution: {integrity: sha512-QlSYQdMQslB81nlABo9wNfQ6npFhE7/O+saCZdqVGueGanyRk4jCogD5EwQenfP3kIq9e+mm6GreQBjX5MrA8g==} + '@napi-rs/canvas-win32-x64-msvc@1.0.13': + resolution: {integrity: sha512-DUlW3lZPz63kYsf8mxgyyZuevhlH0T3/BGP9l+NazhB0F1+gL6D4hqZdnhZpw24DlWmTpATDcyYSZlJOi+DdfQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@napi-rs/canvas@1.0.9': - resolution: {integrity: sha512-QviPdJImDi/jMAvBfqaw+19BndMd/sizXVW3NnpMd3VJGz++QXkOHcP9kWR/smHG0hNjHeyuHFyrx/5lD0oNcQ==} + '@napi-rs/canvas@1.0.13': + resolution: {integrity: sha512-b87ugZpQ5ViwqVBkjervxpwa0GmJPsKHLBNoZN6GpjWeHzTbDUGryriq+2DYW2XbB+xCqSIINQysC0/I87nPbw==} engines: {node: '>= 10'} '@napi-rs/nice-android-arm-eabi@1.1.1': @@ -1747,8 +1774,8 @@ packages: resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} engines: {node: ^14.18.0 || >=16.0.0} - '@playwright/test@1.62.1': - resolution: {integrity: sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==} + '@playwright/test@1.64.1': + resolution: {integrity: sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg==} engines: {node: '>=20'} hasBin: true @@ -1954,14 +1981,14 @@ packages: resolution: {integrity: sha512-5f5f0tKp3d25hjNGkvw2dtGgTN4wxPNhv1AXnhFkh+mLinQK9Qwzr2iEXDDrAuJEkvz1ACHq631IURWph0lqew==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@schematics/angular@22.2.0': - resolution: {integrity: sha512-IOD+T+S5LyVVuLAtLq/5k+WxnT9UpJecyDPvIT+AWug+mZJkd+HKVVHryenNJBaW29tIxNfoDuVFPEsZ4UKcNw==} - engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@schematics/angular@22.2.2': resolution: {integrity: sha512-JxpXKpxdmQcRsJbriWJOhB7HeVTzz9CEsPNw6fQ0LOuPFnvtyUIXLxyFbKv/LfoFUz8wFADCtNU5sjowME5Mvg==} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@schematics/angular@22.2.4': + resolution: {integrity: sha512-3yXpeDsn780rk/Pm+2QjoGpvS03doyuB2i8jUt/tNtDatIIVoXUJak3kjPOK3TVorOJX/fTNMjMxDwQzvec2+w==} + engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@sinclair/typebox@0.27.12': resolution: {integrity: sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==} @@ -2034,8 +2061,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@26.6.2': - resolution: {integrity: sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==} + '@types/node@26.6.5': + resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -2049,63 +2076,63 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.70.1': - resolution: {integrity: sha512-nDNrUQ/4ruSNYbu749TRY7cfrzPtoLHEXSNBI8aaNY32LlZCajixqRf3FqcKC4p5Cam4VOHYx/t+i5+nKXvrqA==} + '@typescript-eslint/eslint-plugin@8.72.0': + resolution: {integrity: sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.70.1 + '@typescript-eslint/parser': ^8.72.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.70.1': - resolution: {integrity: sha512-nO974WLllwhSFWQXnMLj6nDGa8f0khKEz1JzpPJ1u7Vm/4X1X6ZHajpoknU4bb41vJyMB0HHVyS2GqdhWfIXZw==} + '@typescript-eslint/parser@8.72.0': + resolution: {integrity: sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.70.1': - resolution: {integrity: sha512-62xOgboPfwc3/IgPSX/W6oQR3ZbF04194FPGUGH8HL8iLFHbt/456/8Ph1wLNUgVF+s94FlHoipBsz+v7+LMnA==} + '@typescript-eslint/project-service@8.72.0': + resolution: {integrity: sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.70.1': - resolution: {integrity: sha512-Pa0EeSeAusQc1WbjQMac+YfenewYTBu0KjgYvkUKwhXaHUKbFog23Dm/rp0DX/6tyYOQ3Xl1a+3EcFNZynGHCw==} + '@typescript-eslint/scope-manager@8.72.0': + resolution: {integrity: sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.70.1': - resolution: {integrity: sha512-jumze1fPI+sDOaM2TWGQdn39PDxTr7TZGeuyLkAbNyx2vtMT3uRnVKChN0hfht5V2TugphJzF6bYXvBcE09qqg==} + '@typescript-eslint/tsconfig-utils@8.72.0': + resolution: {integrity: sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.70.1': - resolution: {integrity: sha512-7zKTnyvaVWqzLZHPFQtX1hVHqgkMC+WebPWakNCSyrQVbIP1AM0L0TlBZtACldIRb6PptI8Odk+jyZ5kP3B1VA==} + '@typescript-eslint/type-utils@8.72.0': + resolution: {integrity: sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.70.1': - resolution: {integrity: sha512-Dm1ypdhhrGCTyyehxElhgJ6kgk8MVCv5qXdoOVqPr1uqk42jX8KjrZqhROvdShczA8qrDoYiOWn1ykWlx2k81Q==} + '@typescript-eslint/types@8.72.0': + resolution: {integrity: sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.70.1': - resolution: {integrity: sha512-TU8PwyGN0PQJUcE96mw8eCQ44SmxGdQlJmlWakHaHQ15eIuuvye5yNtmh/i6oS88jzXVQB71xdNkbkB/fMwL0g==} + '@typescript-eslint/typescript-estree@8.72.0': + resolution: {integrity: sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.70.1': - resolution: {integrity: sha512-Esgul8MsnKnRLdYU2Eb2cRV9bS5HJYtKj1ByJnOzzG2M58DGdSUQ1jUuILxipqcpB2h9WLrbD5GijIWUjX/Tqw==} + '@typescript-eslint/utils@8.72.0': + resolution: {integrity: sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.70.1': - resolution: {integrity: sha512-Vwj9lUIW5Xq3wQ9w6gv3R86g1hMK8f2zNOdGTAgeXUMMXFK78G9ruCjjqutHMNJc0+CH7LYRnHeUB9IT8wFmcw==} + '@typescript-eslint/visitor-keys@8.72.0': + resolution: {integrity: sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.3': @@ -2251,6 +2278,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.19.0: + resolution: {integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -2280,8 +2312,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.3.0: - resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==} + ansi-regex@6.4.0: + resolution: {integrity: sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -2346,8 +2378,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.11.26: - resolution: {integrity: sha512-GLQdD3y6UF8iVuMJl5fHgE4jdn/ua7n+toKfLgNlg3BqQtOZjpy68T8Tup8/wGWZCDlm7KMg7tPb4MPn7oN0TQ==} + baseline-browser-mapping@2.11.33: + resolution: {integrity: sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w==} engines: {node: '>=6.0.0'} hasBin: true @@ -2359,6 +2391,9 @@ packages: resolution: {integrity: sha512-DkVaaQHymRhpYEYo9x1oo7Q7B0Y6KJUsjm3c9eTyFDby4MHLBTwZ6ZDWBel5zrYxj1WsZgC5oLpiz+93MluXeA==} engines: {node: '>=20.19.0'} + bootstrap-icons@1.13.2: + resolution: {integrity: sha512-fAU1Ly3dH7hwRg+CB8EZ0Vl0fF80zgXHeUVJyfUOKzoURr+TbwISbCW5tKUoQLERaWYG2emTCybcPbD96hdD1A==} + bootstrap@5.3.8: resolution: {integrity: sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==} peerDependencies: @@ -2371,8 +2406,8 @@ packages: resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} engines: {node: 20 || >=22} - browserslist@4.29.1: - resolution: {integrity: sha512-AUdjuRyCNGUYtqpqfTmWyM4fXay8yIQhmLnvYe/THMGfT9B/34X7xQd3ifKxwyNPPpowVBjLb+64BN9Rn1mizw==} + browserslist@4.29.4: + resolution: {integrity: sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2401,8 +2436,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001812: - resolution: {integrity: sha512-qN+QNNBr93TCmFrmte0bBCjSDMuRvt78VlHT99qIGPszm4QsqCX8lnyWUFkHi8B7ZBAPq8SH+UqyXNy/odMdng==} + caniuse-lite@1.0.30001819: + resolution: {integrity: sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -2562,8 +2597,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.439: - resolution: {integrity: sha512-qu6QIPXhsb+CRcAiTMNjR4A1y/7tCYKkKjr5CZXRVih6qkDf79peZ2BpEU3qoDBNCRrcy3Mra3X9nG5oruuA7Q==} + electron-to-chromium@1.5.464: + resolution: {integrity: sha512-nRa65aFge40viPAKxMKULIY8tcXKwKboJWNn4RoKwyWXJ6SP7BnrDGKUTzc64818jIciH0PK7LSF8QzZes19GA==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -2634,8 +2669,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.11.0: - resolution: {integrity: sha512-P7a6UEEqb9G95MYAtqkmsTbVXIYyzIfl6NGOIJk162PaahFxFyeGcrlXYFSiagECg4sEm8IseJdZBKR3rx6MsQ==} + eslint@10.13.0: + resolution: {integrity: sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2746,11 +2781,6 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2857,14 +2887,14 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.10: - resolution: {integrity: sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q==} - engines: {node: '>= 4'} - ignore@7.0.12: resolution: {integrity: sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==} engines: {node: '>= 4'} + ignore@7.0.14: + resolution: {integrity: sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==} + engines: {node: '>= 4'} + immutable@5.1.9: resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} @@ -3314,8 +3344,8 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - marked@18.0.14: - resolution: {integrity: sha512-mBHK6FBHuBAlhgRe88w9F0O1AbwwXJUcQibUbC/QcdTbVGAD7aWza+xt3N6oT/jCZx3/OMeS+8rnuiHZcQ9s7A==} + marked@18.1.1: + resolution: {integrity: sha512-zEGgrtUG8crk+TrMacJSVABU4DYDDkS8uqgU3ohrn/2fW9C2AEfUrO3m6IhpIpQpl7YcVpiXXC9cSMWDANT3dg==} engines: {node: '>= 20'} hasBin: true @@ -3378,11 +3408,6 @@ packages: resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} engines: {node: ^20.17.0 || >=22.9.0} - nanoid@3.3.18: - resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.20: resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3399,13 +3424,6 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - ngx-bootstrap-icons@1.9.3: - resolution: {integrity: sha512-UsFqJ/cn0u5W39hVMIDbm+ze1dCF9fDV839scqeimi70Efcmg41zOx6GgR6i2gWAVFR0OBso1cdqb4E75XhTSw==} - engines: {node: '>= 16.18.1', npm: '>= 8.11.0'} - peerDependencies: - '@angular/common': '>= 13.3.8' - '@angular/core': '>= 13.3.8' - ngx-color@10.1.0: resolution: {integrity: sha512-yuxlE1LfN+PABIO4hv0Gw5ksq8g9XkMJKrGPn2SWbrre/gsH+kkyyn3rwSCurinnLCnw7czqenwQUtnBJm8yww==} peerDependencies: @@ -3452,8 +3470,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.57: - resolution: {integrity: sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==} + node-releases@2.0.60: + resolution: {integrity: sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==} engines: {node: '>=18'} normalize-diacritics@5.0.0: @@ -3483,6 +3501,10 @@ packages: resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} engines: {node: '>=12.20.0'} + obug@3.0.0: + resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==} + engines: {node: '>=12.20.0'} + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -3499,8 +3521,8 @@ packages: resolution: {integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==} engines: {node: '>=20'} - ordered-binary@1.6.2: - resolution: {integrity: sha512-BY+qgDArmYpvvmij141xbkB4Cw8RFLBQM5Zj4MODFb1SyXBRE/xO4Xj/QWbR7aUEBxbkjuNdsFVCL2TmbYrlNg==} + ordered-binary@1.6.3: + resolution: {integrity: sha512-Bc8LnA2x4ZHRQ9LjCm/NOdD3+CTQPhGNu8m7/6+ERtiB6Bb/fn7nCySwcmAC+5WCqwelpSAQgo1VX9BGpsC0tQ==} oxc-parser@0.150.0: resolution: {integrity: sha512-zwajKw1GUa57IOdafIS7/yOObGF2NihwIfZfs5yJTRprMSkiwhWOc/k+n8bwnUPbHr2/XsjfBO8KyTPaW3VpWg==} @@ -3564,8 +3586,8 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - pdfjs-dist@6.3.289: - resolution: {integrity: sha512-ZHjSVpDa3D6izMq8/04lvkhkATUmL9px6ChPaXc1k6nU2Mrhlg1/7F0bdUqCwUjw3NsPTfPZsMDUU6ZIcRaeQw==} + pdfjs-dist@6.4.299: + resolution: {integrity: sha512-AVl138zALtfaAPvADulE0PZThbYzCBS79nL4pOSL/6Sm/4AH5A21BD9VHt97OlCuzJuCpmeZtAtkinisF4Vb1g==} engines: {node: '>=22.13.0 || >=24'} picocolors@1.1.1: @@ -3595,13 +3617,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.62.1: - resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + playwright-core@1.64.1: + resolution: {integrity: sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==} engines: {node: '>=20'} hasBin: true - playwright@1.62.1: - resolution: {integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==} + playwright@1.64.1: + resolution: {integrity: sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==} engines: {node: '>=20'} hasBin: true @@ -3614,10 +3636,6 @@ packages: peerDependencies: postcss: ^8.4.31 - postcss@8.5.28: - resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.31: resolution: {integrity: sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==} engines: {node: ^10 || ^12 || >=14} @@ -3636,8 +3654,8 @@ packages: vue-tsc: optional: true - prettier@3.9.9: - resolution: {integrity: sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==} + prettier@3.9.10: + resolution: {integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==} engines: {node: '>=14'} hasBin: true @@ -3971,8 +3989,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - sync-child-process@1.0.2: - resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + sync-child-process@1.1.0: + resolution: {integrity: sha512-1LMf/x0kU0CKFSesh5DfYktvj1KhiqYi5LAh5HU2G4SkKk1TGDhsMFBOL47g/E+mNfYpgs365pVNlIYOIHPvlQ==} engines: {node: '>=16.0.0'} sync-message-port@1.2.0: @@ -4088,8 +4106,8 @@ packages: unrs-resolver@1.12.2: resolution: {integrity: sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==} - update-browserslist-db@1.3.3: - resolution: {integrity: sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==} + update-browserslist-db@1.3.4: + resolution: {integrity: sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4100,8 +4118,8 @@ packages: utif@3.1.0: resolution: {integrity: sha512-WEo4D/xOvFW53K5f5QTaTbbiORcm2/pCL9P6qmJnup+17eYfKaEhDeX9PeQkuyEoIxlbGklDuGl8xwuXYMrrXQ==} - uuid@14.0.2: - resolution: {integrity: sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==} + uuid@14.0.3: + resolution: {integrity: sha512-Sc5u1VVln93y1Xnz4R+CunOZc7R9LUcTmhj7Rc7Eg3HVcf7rVn2FOoa812fe0W8p3jD7xeoGSYbfqCGGH2B6xw==} hasBin: true v8-compile-cache-lib@3.0.1: @@ -4122,6 +4140,10 @@ packages: resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==} engines: {node: '>=18.12.0'} + verkit@0.5.0: + resolution: {integrity: sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g==} + engines: {node: '>=18.12.0'} + vite@8.3.5: resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4285,6 +4307,9 @@ packages: resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} engines: {node: '>=18'} + zod@4.6.6: + resolution: {integrity: sha512-4UmzQUF5fxvfcYHlbjBmejU+w+hbDnWFx4aS8kBx7nPBHcO2SqPbpAG8snbdg+Xse4pRefR98hgjFgIMCI/UhA==} + zod@4.6.7: resolution: {integrity: sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==} @@ -4297,25 +4322,25 @@ snapshots: '@angular-builders/common@6.0.1(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 22.2.2(chokidar@5.0.0) - '@angular-devkit/schematics': 22.2.2(chokidar@5.0.0) - '@schematics/angular': 22.2.0(chokidar@5.0.0) + '@angular-devkit/core': 22.2.4(chokidar@5.0.0) + '@angular-devkit/schematics': 22.2.4(chokidar@5.0.0) + '@schematics/angular': 22.2.2(chokidar@5.0.0) get-tsconfig: 4.14.1 jiti: 2.7.0 transitivePeerDependencies: - chokidar - '@angular-builders/jest@22.0.1(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(chokidar@5.0.0)(jest@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(rxjs@7.8.2)(typescript@6.0.3)': + '@angular-builders/jest@22.0.1(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(chokidar@5.0.0)(jest@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(rxjs@7.8.2)(typescript@6.0.3)': dependencies: '@angular-builders/common': 6.0.1(chokidar@5.0.0) '@angular-devkit/architect': 0.2201.3(chokidar@5.0.0) - '@angular-devkit/core': 22.2.2(chokidar@5.0.0) - '@angular-devkit/schematics': 22.2.2(chokidar@5.0.0) - '@angular/compiler-cli': 22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) + '@angular-devkit/core': 22.2.4(chokidar@5.0.0) + '@angular-devkit/schematics': 22.2.4(chokidar@5.0.0) + '@angular/compiler-cli': 22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) '@schematics/angular': 22.1.3(chokidar@5.0.0) - jest: 30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) - jest-preset-angular: 17.0.3(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(jest@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(typescript@6.0.3) + jest: 30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) + jest-preset-angular: 17.0.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(jest@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(typescript@6.0.3) lodash: 4.18.1 rxjs: 7.8.2 transitivePeerDependencies: @@ -4344,9 +4369,9 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/architect@0.2202.2(chokidar@5.0.0)': + '@angular-devkit/architect@0.2202.4(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 22.2.2(chokidar@5.0.0) + '@angular-devkit/core': 22.2.4(chokidar@5.0.0) rxjs: 7.8.2 transitivePeerDependencies: - chokidar @@ -4384,6 +4409,17 @@ snapshots: optionalDependencies: chokidar: 5.0.0 + '@angular-devkit/core@22.2.4(chokidar@5.0.0)': + dependencies: + ajv: 8.20.0 + ajv-formats: 3.0.1 + jsonc-parser: 3.3.1 + picomatch: 4.0.7 + rxjs: 7.8.2 + source-map: 0.8.0 + optionalDependencies: + chokidar: 5.0.0 + '@angular-devkit/schematics@22.1.3(chokidar@5.0.0)': dependencies: '@angular-devkit/core': 22.1.3(chokidar@5.0.0) @@ -4394,16 +4430,6 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/schematics@22.2.0(chokidar@5.0.0)': - dependencies: - '@angular-devkit/core': 22.2.0(chokidar@5.0.0) - jsonc-parser: 3.3.1 - magic-string: 1.4.1 - ora: 9.4.1 - rxjs: 7.8.2 - transitivePeerDependencies: - - chokidar - '@angular-devkit/schematics@22.2.2(chokidar@5.0.0)': dependencies: '@angular-devkit/core': 22.2.2(chokidar@5.0.0) @@ -4414,44 +4440,54 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-eslint/builder@22.6.0(chokidar@5.0.0)(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': + '@angular-devkit/schematics@22.2.4(chokidar@5.0.0)': + dependencies: + '@angular-devkit/core': 22.2.4(chokidar@5.0.0) + jsonc-parser: 3.3.1 + magic-string: 1.4.1 + ora: 9.4.1 + rxjs: 7.8.2 + transitivePeerDependencies: + - chokidar + + '@angular-eslint/builder@22.6.0(chokidar@5.0.0)(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': dependencies: '@angular-devkit/architect': 0.2202.0(chokidar@5.0.0) - '@angular-devkit/core': 22.2.0(chokidar@5.0.0) - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + '@angular-devkit/core': 22.2.4(chokidar@5.0.0) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - chokidar '@angular-eslint/bundled-angular-compiler@22.6.0': {} - '@angular-eslint/eslint-plugin-template@22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.70.1)(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': + '@angular-eslint/eslint-plugin-template@22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.72.0)(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': dependencies: '@angular-eslint/bundled-angular-compiler': 22.6.0 - '@angular-eslint/template-parser': 22.6.0(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) - '@angular-eslint/utils': 22.6.0(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/utils': 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@angular-eslint/template-parser': 22.6.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + '@angular-eslint/utils': 22.6.0(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) aria-query: 5.3.2 axobject-query: 4.1.0 - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 6.0.3 - '@angular-eslint/eslint-plugin@22.6.0(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': + '@angular-eslint/eslint-plugin@22.6.0(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': dependencies: '@angular-eslint/bundled-angular-compiler': 22.6.0 - '@angular-eslint/utils': 22.6.0(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + '@angular-eslint/utils': 22.6.0(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 - '@angular-eslint/schematics@22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.70.1)(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(chokidar@5.0.0)(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': + '@angular-eslint/schematics@22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.72.0)(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(chokidar@5.0.0)(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': dependencies: - '@angular-devkit/core': 22.2.0(chokidar@5.0.0) - '@angular-devkit/schematics': 22.2.0(chokidar@5.0.0) - '@angular-eslint/eslint-plugin': 22.6.0(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) - '@angular-eslint/eslint-plugin-template': 22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.70.1)(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + '@angular-devkit/core': 22.2.4(chokidar@5.0.0) + '@angular-devkit/schematics': 22.2.4(chokidar@5.0.0) + '@angular-eslint/eslint-plugin': 22.6.0(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) + '@angular-eslint/eslint-plugin-template': 22.6.0(@angular-eslint/template-parser@22.6.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3))(@typescript-eslint/types@8.72.0)(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3) ignore: 7.0.12 semver: 7.8.5 strip-json-comments: 3.1.1 @@ -4463,32 +4499,32 @@ snapshots: - eslint - typescript - '@angular-eslint/template-parser@22.6.0(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': + '@angular-eslint/template-parser@22.6.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': dependencies: '@angular-eslint/bundled-angular-compiler': 22.6.0 - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) eslint-scope: 9.1.2 typescript: 6.0.3 - '@angular-eslint/utils@22.6.0(@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': + '@angular-eslint/utils@22.6.0(@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@6.0.3)': dependencies: '@angular-eslint/bundled-angular-compiler': 22.6.0 - '@typescript-eslint/utils': 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 6.0.3 - '@angular/build@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2)(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/localize@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(@types/node@26.6.2)(istanbul-lib-instrument@6.0.3(supports-color@8.1.1))(jiti@2.7.0)(postcss@8.5.28)(supports-color@8.1.1)(tslib@2.8.1)(typescript@6.0.3)': + '@angular/build@22.2.4(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3)(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/localize@22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(@types/node@26.6.5)(istanbul-lib-instrument@6.0.3(supports-color@8.1.1))(jiti@2.7.0)(postcss@8.5.31)(supports-color@8.1.1)(tslib@2.8.1)(typescript@6.0.3)': dependencies: '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2202.2(chokidar@5.0.0) - '@angular/compiler': 22.2.2 - '@angular/compiler-cli': 22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3) + '@angular-devkit/architect': 0.2202.4(chokidar@5.0.0) + '@angular/compiler': 22.2.3 + '@angular/compiler-cli': 22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3) '@babel/core': 8.0.5 - '@inquirer/confirm': 6.3.2(@types/node@26.6.2) + '@inquirer/confirm': 6.3.2(@types/node@26.6.5) '@parcel/watcher': 2.6.0 - '@vitejs/plugin-basic-ssl': 2.3.0(vite@8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)) + '@vitejs/plugin-basic-ssl': 2.3.0(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)) beasties: 0.5.4 - browserslist: 4.29.1 + browserslist: 4.29.4 chokidar: 5.0.0 esbuild: 0.28.2 https-proxy-agent: 9.1.0(supports-color@8.1.1) @@ -4508,15 +4544,15 @@ snapshots: tinyglobby: 0.2.17 tslib: 2.8.1 typescript: 6.0.3 - vite: 8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1) + vite: 8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1) xxhash-wasm: 1.1.0 optionalDependencies: - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/localize': 22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2) - '@angular/platform-browser': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/localize': 22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3) + '@angular/platform-browser': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) istanbul-lib-instrument: 6.0.3(supports-color@8.1.1) lmdb: 3.5.6 - postcss: 8.5.28 + postcss: 8.5.31 transitivePeerDependencies: - '@types/node' - '@vitejs/devtools' @@ -4529,45 +4565,45 @@ snapshots: - tsx - yaml - '@angular/cdk@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2)': + '@angular/cdk@22.2.4(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/forms': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) - '@angular/platform-browser': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/forms': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) + '@angular/platform-browser': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) parse5: 8.0.1 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/cli@22.2.2(@types/node@26.6.2)(chokidar@5.0.0)': + '@angular/cli@22.2.4(@types/node@26.6.5)(chokidar@5.0.0)': dependencies: - '@angular-devkit/architect': 0.2202.2(chokidar@5.0.0) - '@angular-devkit/core': 22.2.2(chokidar@5.0.0) - '@angular-devkit/schematics': 22.2.2(chokidar@5.0.0) - '@inquirer/prompts': 8.7.2(@types/node@26.6.2) - '@listr2/prompt-adapter-inquirer': 4.2.7(@inquirer/prompts@8.7.2(@types/node@26.6.2))(@types/node@26.6.2)(listr2@11.1.0) + '@angular-devkit/architect': 0.2202.4(chokidar@5.0.0) + '@angular-devkit/core': 22.2.4(chokidar@5.0.0) + '@angular-devkit/schematics': 22.2.4(chokidar@5.0.0) + '@inquirer/prompts': 8.7.2(@types/node@26.6.5) + '@listr2/prompt-adapter-inquirer': 4.2.7(@inquirer/prompts@8.7.2(@types/node@26.6.5))(@types/node@26.6.5)(listr2@11.1.0) '@modelcontextprotocol/server': 2.3.1 - '@schematics/angular': 22.2.2(chokidar@5.0.0) + '@schematics/angular': 22.2.4(chokidar@5.0.0) jsonc-parser: 3.3.1 listr2: 11.1.0 npm-package-arg: 14.0.0 parse5-html-rewriting-stream: 8.0.1 semver: 7.8.5 yargs: 18.1.0 - zod: 4.6.7 + zod: 4.6.6 transitivePeerDependencies: - '@types/node' - chokidar - '@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2)': + '@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3)': + '@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3)': dependencies: - '@angular/compiler': 22.2.2 + '@angular/compiler': 22.2.3 '@babel/core': 8.0.1 '@jridgewell/sourcemap-codec': 1.6.0 chokidar: 5.0.0 @@ -4579,46 +4615,46 @@ snapshots: optionalDependencies: typescript: 6.0.3 - '@angular/compiler@22.2.2': + '@angular/compiler@22.2.3': dependencies: tslib: 2.8.1 - '@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)': + '@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 22.2.2 + '@angular/compiler': 22.2.3 - '@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2)': + '@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/platform-browser': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/platform-browser': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 zod: 4.6.7 - '@angular/localize@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2)': + '@angular/localize@22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3)': dependencies: - '@angular/compiler': 22.2.2 - '@angular/compiler-cli': 22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3) + '@angular/compiler': 22.2.3 + '@angular/compiler-cli': 22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3) '@babel/core': 8.0.1 tinyglobby: 0.2.17 yargs: 18.2.0 - '@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))': + '@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))': dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) tslib: 2.8.1 - '@angular/router@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2)': + '@angular/router@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/platform-browser': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/platform-browser': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) rxjs: 7.8.2 tslib: 2.8.1 @@ -4669,12 +4705,12 @@ snapshots: dependencies: '@babel/code-frame': 8.0.6 '@babel/generator': 8.0.6 - '@babel/helper-compilation-targets': 8.0.6 - '@babel/helpers': 8.0.5 - '@babel/parser': 8.0.6 + '@babel/helper-compilation-targets': 8.0.7 + '@babel/helpers': 8.0.8 + '@babel/parser': 8.0.8 '@babel/template': 8.0.0 - '@babel/traverse': 8.0.6 - '@babel/types': 8.0.6 + '@babel/traverse': 8.0.7 + '@babel/types': 8.0.8 '@types/gensync': 1.0.5 convert-source-map: 2.0.0 empathic: 2.1.0 @@ -4688,12 +4724,12 @@ snapshots: dependencies: '@babel/code-frame': 8.0.6 '@babel/generator': 8.0.6 - '@babel/helper-compilation-targets': 8.0.6 - '@babel/helpers': 8.0.5 - '@babel/parser': 8.0.6 + '@babel/helper-compilation-targets': 8.0.7 + '@babel/helpers': 8.0.8 + '@babel/parser': 8.0.8 '@babel/template': 8.0.0 - '@babel/traverse': 8.0.6 - '@babel/types': 8.0.6 + '@babel/traverse': 8.0.7 + '@babel/types': 8.0.8 '@types/gensync': 1.0.5 convert-source-map: 2.0.0 empathic: 2.1.0 @@ -4713,8 +4749,8 @@ snapshots: '@babel/generator@8.0.6': dependencies: - '@babel/parser': 8.0.6 - '@babel/types': 8.0.6 + '@babel/parser': 8.0.8 + '@babel/types': 8.0.8 '@jridgewell/gen-mapping': 0.4.0-beta.0 '@jridgewell/trace-mapping': 0.3.31 '@types/jsesc': 2.5.1 @@ -4724,17 +4760,17 @@ snapshots: dependencies: '@babel/compat-data': 7.29.7 '@babel/helper-validator-option': 7.29.7 - browserslist: 4.29.1 + browserslist: 4.29.4 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-compilation-targets@8.0.6': + '@babel/helper-compilation-targets@8.0.7': dependencies: '@babel/compat-data': 8.0.5 '@babel/helper-validator-option': 8.0.0 - browserslist: 4.29.1 + browserslist: 4.29.4 flru: 1.0.2 - verkit: 0.3.2 + verkit: 0.5.0 '@babel/helper-globals@7.29.7': {} @@ -4760,7 +4796,7 @@ snapshots: '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-string-parser@8.0.6': {} + '@babel/helper-string-parser@8.0.8': {} '@babel/helper-validator-identifier@7.29.7': {} @@ -4775,18 +4811,18 @@ snapshots: '@babel/template': 7.29.7 '@babel/types': 7.29.8 - '@babel/helpers@8.0.5': + '@babel/helpers@8.0.8': dependencies: '@babel/template': 8.0.0 - '@babel/types': 8.0.6 + '@babel/types': 8.0.8 '@babel/parser@7.29.8': dependencies: '@babel/types': 7.29.8 - '@babel/parser@8.0.6': + '@babel/parser@8.0.8': dependencies: - '@babel/types': 8.0.6 + '@babel/types': 8.0.8 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7(supports-color@8.1.1))': dependencies: @@ -4882,8 +4918,8 @@ snapshots: '@babel/template@8.0.0': dependencies: '@babel/code-frame': 8.0.6 - '@babel/parser': 8.0.6 - '@babel/types': 8.0.6 + '@babel/parser': 8.0.8 + '@babel/types': 8.0.8 '@babel/traverse@7.29.8(supports-color@8.1.1)': dependencies: @@ -4897,29 +4933,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@8.0.6': + '@babel/traverse@8.0.7': dependencies: '@babel/code-frame': 8.0.6 '@babel/generator': 8.0.6 '@babel/helper-globals': 8.0.6 - '@babel/parser': 8.0.6 + '@babel/parser': 8.0.8 '@babel/template': 8.0.0 - '@babel/types': 8.0.6 - obug: 2.2.1 + '@babel/types': 8.0.8 + obug: 3.0.0 '@babel/types@7.29.8': dependencies: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/types@8.0.6': + '@babel/types@8.0.8': dependencies: - '@babel/helper-string-parser': 8.0.6 + '@babel/helper-string-parser': 8.0.8 '@babel/helper-validator-identifier': 8.0.6 '@bcoe/v8-coverage@0.2.3': {} - '@bufbuild/protobuf@2.15.0': {} + '@bufbuild/protobuf@2.16.0': {} '@cacheable/memory@2.2.0': dependencies: @@ -5053,9 +5089,9 @@ snapshots: '@esbuild/win32-x64@0.28.2': optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))': dependencies: - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -5083,7 +5119,7 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@harperfast/extended-iterable@1.0.3': + '@harperfast/extended-iterable@1.0.5': optional: true '@humanfs/core@0.19.2': @@ -5102,124 +5138,135 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/ansi@2.0.8': {} + '@inquirer/ansi@2.0.9': {} - '@inquirer/checkbox@5.2.5(@types/node@26.6.2)': + '@inquirer/checkbox@5.2.7(@types/node@26.6.5)': dependencies: - '@inquirer/ansi': 2.0.8 - '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/ansi': 2.0.9 + '@inquirer/core': 12.0.5(@types/node@26.6.5) '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/confirm@6.3.2(@types/node@26.6.2)': + '@inquirer/confirm@6.3.2(@types/node@26.6.5)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.6.2) - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/core': 12.0.5(@types/node@26.6.5) + '@inquirer/type': 4.1.1(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/core@12.0.3(@types/node@26.6.2)': + '@inquirer/confirm@6.3.4(@types/node@26.6.5)': dependencies: - '@inquirer/ansi': 2.0.8 + '@inquirer/core': 12.0.5(@types/node@26.6.5) + '@inquirer/type': 4.2.0(@types/node@26.6.5) + optionalDependencies: + '@types/node': 26.6.5 + + '@inquirer/core@12.0.5(@types/node@26.6.5)': + dependencies: + '@inquirer/ansi': 2.0.9 '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/type': 4.2.0(@types/node@26.6.5) cli-width: 4.1.0 fast-wrap-ansi: 0.2.2 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/editor@5.3.3(@types/node@26.6.2)': + '@inquirer/editor@5.3.5(@types/node@26.6.5)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.6.2) - '@inquirer/external-editor': 3.0.5(@types/node@26.6.2) - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/core': 12.0.5(@types/node@26.6.5) + '@inquirer/external-editor': 3.0.6(@types/node@26.6.5) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/expand@5.1.5(@types/node@26.6.2)': + '@inquirer/expand@5.1.7(@types/node@26.6.5)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.6.2) - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/core': 12.0.5(@types/node@26.6.5) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/external-editor@3.0.5(@types/node@26.6.2)': + '@inquirer/external-editor@3.0.6(@types/node@26.6.5)': dependencies: chardet: 2.2.0 iconv-lite: 0.7.3 optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 '@inquirer/figures@2.0.9': {} - '@inquirer/input@5.1.6(@types/node@26.6.2)': + '@inquirer/input@5.1.8(@types/node@26.6.5)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.6.2) - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/core': 12.0.5(@types/node@26.6.5) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/number@4.2.3(@types/node@26.6.2)': + '@inquirer/number@4.2.5(@types/node@26.6.5)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.6.2) - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/core': 12.0.5(@types/node@26.6.5) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/password@5.2.2(@types/node@26.6.2)': + '@inquirer/password@5.2.4(@types/node@26.6.5)': dependencies: - '@inquirer/ansi': 2.0.8 - '@inquirer/core': 12.0.3(@types/node@26.6.2) - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/ansi': 2.0.9 + '@inquirer/core': 12.0.5(@types/node@26.6.5) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/prompts@8.7.2(@types/node@26.6.2)': + '@inquirer/prompts@8.7.2(@types/node@26.6.5)': dependencies: - '@inquirer/checkbox': 5.2.5(@types/node@26.6.2) - '@inquirer/confirm': 6.3.2(@types/node@26.6.2) - '@inquirer/editor': 5.3.3(@types/node@26.6.2) - '@inquirer/expand': 5.1.5(@types/node@26.6.2) - '@inquirer/input': 5.1.6(@types/node@26.6.2) - '@inquirer/number': 4.2.3(@types/node@26.6.2) - '@inquirer/password': 5.2.2(@types/node@26.6.2) - '@inquirer/rawlist': 5.3.5(@types/node@26.6.2) - '@inquirer/search': 4.3.3(@types/node@26.6.2) - '@inquirer/select': 5.2.5(@types/node@26.6.2) + '@inquirer/checkbox': 5.2.7(@types/node@26.6.5) + '@inquirer/confirm': 6.3.4(@types/node@26.6.5) + '@inquirer/editor': 5.3.5(@types/node@26.6.5) + '@inquirer/expand': 5.1.7(@types/node@26.6.5) + '@inquirer/input': 5.1.8(@types/node@26.6.5) + '@inquirer/number': 4.2.5(@types/node@26.6.5) + '@inquirer/password': 5.2.4(@types/node@26.6.5) + '@inquirer/rawlist': 5.3.7(@types/node@26.6.5) + '@inquirer/search': 4.3.5(@types/node@26.6.5) + '@inquirer/select': 5.2.7(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/rawlist@5.3.5(@types/node@26.6.2)': + '@inquirer/rawlist@5.3.7(@types/node@26.6.5)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.6.2) - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/core': 12.0.5(@types/node@26.6.5) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/search@4.3.3(@types/node@26.6.2)': + '@inquirer/search@4.3.5(@types/node@26.6.5)': dependencies: - '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/core': 12.0.5(@types/node@26.6.5) '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/select@5.2.5(@types/node@26.6.2)': + '@inquirer/select@5.2.7(@types/node@26.6.5)': dependencies: - '@inquirer/ansi': 2.0.8 - '@inquirer/core': 12.0.3(@types/node@26.6.2) + '@inquirer/ansi': 2.0.9 + '@inquirer/core': 12.0.5(@types/node@26.6.5) '@inquirer/figures': 2.0.9 - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/type': 4.2.0(@types/node@26.6.5) optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 - '@inquirer/type@4.1.1(@types/node@26.6.2)': + '@inquirer/type@4.1.1(@types/node@26.6.5)': optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 + + '@inquirer/type@4.2.0(@types/node@26.6.5)': + optionalDependencies: + '@types/node': 26.6.5 '@isaacs/cliui@8.0.2': dependencies: @@ -5243,13 +5290,13 @@ snapshots: '@jest/console@30.5.2': dependencies: '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 chalk: 4.1.2 jest-message-util: 30.5.1 jest-util: 30.5.1 slash: 3.0.0 - '@jest/core@30.5.2(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3))': + '@jest/core@30.5.2(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3))': dependencies: '@jest/console': 30.5.2 '@jest/pattern': 30.5.0 @@ -5257,7 +5304,7 @@ snapshots: '@jest/test-result': 30.5.2 '@jest/transform': 30.5.2(supports-color@8.1.1) '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.4.0 @@ -5265,7 +5312,7 @@ snapshots: fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 jest-changed-files: 30.5.1 - jest-config: 30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) + jest-config: 30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) jest-haste-map: 30.5.1 jest-message-util: 30.5.1 jest-regex-util: 30.5.0 @@ -5295,7 +5342,7 @@ snapshots: '@jest/fake-timers': 30.5.2 '@jest/types': 30.5.1 '@types/jsdom': 21.1.7 - '@types/node': 26.6.2 + '@types/node': 26.6.5 jest-mock: 30.5.2 jest-util: 30.5.1 jsdom: 26.1.0(supports-color@8.1.1) @@ -5304,7 +5351,7 @@ snapshots: dependencies: '@jest/fake-timers': 30.5.2 '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 jest-mock: 30.5.2 '@jest/expect-utils@30.4.1': @@ -5326,7 +5373,7 @@ snapshots: dependencies: '@jest/types': 30.5.1 '@sinonjs/fake-timers': 15.4.0 - '@types/node': 26.6.2 + '@types/node': 26.6.5 jest-message-util: 30.5.1 jest-mock: 30.5.2 jest-util: 30.5.1 @@ -5346,12 +5393,12 @@ snapshots: '@jest/pattern@30.4.0': dependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 jest-regex-util: 30.4.0 '@jest/pattern@30.5.0': dependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 jest-regex-util: 30.5.0 '@jest/reporters@30.5.2(supports-color@8.1.1)': @@ -5362,7 +5409,7 @@ snapshots: '@jest/transform': 30.5.2(supports-color@8.1.1) '@jest/types': 30.5.1 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 26.6.2 + '@types/node': 26.6.5 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -5447,7 +5494,7 @@ snapshots: '@jest/schemas': 30.4.1 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 26.6.2 + '@types/node': 26.6.5 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -5457,7 +5504,7 @@ snapshots: '@jest/schemas': 30.5.0 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 26.6.2 + '@types/node': 26.6.5 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -5498,10 +5545,10 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@listr2/prompt-adapter-inquirer@4.2.7(@inquirer/prompts@8.7.2(@types/node@26.6.2))(@types/node@26.6.2)(listr2@11.1.0)': + '@listr2/prompt-adapter-inquirer@4.2.7(@inquirer/prompts@8.7.2(@types/node@26.6.5))(@types/node@26.6.5)(listr2@11.1.0)': dependencies: - '@inquirer/prompts': 8.7.2(@types/node@26.6.2) - '@inquirer/type': 4.1.1(@types/node@26.6.2) + '@inquirer/prompts': 8.7.2(@types/node@26.6.5) + '@inquirer/type': 4.2.0(@types/node@26.6.5) listr2: 11.1.0 transitivePeerDependencies: - '@types/node' @@ -5554,52 +5601,52 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': optional: true - '@napi-rs/canvas-android-arm64@1.0.9': + '@napi-rs/canvas-android-arm64@1.0.13': optional: true - '@napi-rs/canvas-darwin-arm64@1.0.9': + '@napi-rs/canvas-darwin-arm64@1.0.13': optional: true - '@napi-rs/canvas-darwin-x64@1.0.9': + '@napi-rs/canvas-darwin-x64@1.0.13': optional: true - '@napi-rs/canvas-linux-arm-gnueabihf@1.0.9': + '@napi-rs/canvas-linux-arm-gnueabihf@1.0.13': optional: true - '@napi-rs/canvas-linux-arm64-gnu@1.0.9': + '@napi-rs/canvas-linux-arm64-gnu@1.0.13': optional: true - '@napi-rs/canvas-linux-arm64-musl@1.0.9': + '@napi-rs/canvas-linux-arm64-musl@1.0.13': optional: true - '@napi-rs/canvas-linux-riscv64-gnu@1.0.9': + '@napi-rs/canvas-linux-riscv64-gnu@1.0.13': optional: true - '@napi-rs/canvas-linux-x64-gnu@1.0.9': + '@napi-rs/canvas-linux-x64-gnu@1.0.13': optional: true - '@napi-rs/canvas-linux-x64-musl@1.0.9': + '@napi-rs/canvas-linux-x64-musl@1.0.13': optional: true - '@napi-rs/canvas-win32-arm64-msvc@1.0.9': + '@napi-rs/canvas-win32-arm64-msvc@1.0.13': optional: true - '@napi-rs/canvas-win32-x64-msvc@1.0.9': + '@napi-rs/canvas-win32-x64-msvc@1.0.13': optional: true - '@napi-rs/canvas@1.0.9': + '@napi-rs/canvas@1.0.13': optionalDependencies: - '@napi-rs/canvas-android-arm64': 1.0.9 - '@napi-rs/canvas-darwin-arm64': 1.0.9 - '@napi-rs/canvas-darwin-x64': 1.0.9 - '@napi-rs/canvas-linux-arm-gnueabihf': 1.0.9 - '@napi-rs/canvas-linux-arm64-gnu': 1.0.9 - '@napi-rs/canvas-linux-arm64-musl': 1.0.9 - '@napi-rs/canvas-linux-riscv64-gnu': 1.0.9 - '@napi-rs/canvas-linux-x64-gnu': 1.0.9 - '@napi-rs/canvas-linux-x64-musl': 1.0.9 - '@napi-rs/canvas-win32-arm64-msvc': 1.0.9 - '@napi-rs/canvas-win32-x64-msvc': 1.0.9 + '@napi-rs/canvas-android-arm64': 1.0.13 + '@napi-rs/canvas-darwin-arm64': 1.0.13 + '@napi-rs/canvas-darwin-x64': 1.0.13 + '@napi-rs/canvas-linux-arm-gnueabihf': 1.0.13 + '@napi-rs/canvas-linux-arm64-gnu': 1.0.13 + '@napi-rs/canvas-linux-arm64-musl': 1.0.13 + '@napi-rs/canvas-linux-riscv64-gnu': 1.0.13 + '@napi-rs/canvas-linux-x64-gnu': 1.0.13 + '@napi-rs/canvas-linux-x64-musl': 1.0.13 + '@napi-rs/canvas-win32-arm64-msvc': 1.0.13 + '@napi-rs/canvas-win32-x64-msvc': 1.0.13 optional: true '@napi-rs/nice-android-arm-eabi@1.1.1': @@ -5681,29 +5728,29 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true - '@ng-bootstrap/ng-bootstrap@21.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/localize@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2))(@popperjs/core@2.11.8)(rxjs@7.8.2)': + '@ng-bootstrap/ng-bootstrap@21.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/localize@22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3))(@popperjs/core@2.11.8)(rxjs@7.8.2)': dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/forms': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) - '@angular/localize': 22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/forms': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) + '@angular/localize': 22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3) '@popperjs/core': 2.11.8 rxjs: 7.8.2 tslib: 2.8.1 - '@ng-select/ng-select@24.2.1(c16a4205ea3b15ef29cd8e705c42dd79)': + '@ng-select/ng-select@24.2.1(d7ded77d8feaf04f34fcbbfccfbace9a)': dependencies: - '@angular/cdk': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/forms': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) + '@angular/cdk': 22.2.4(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/forms': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) tslib: 2.8.1 - '@ngneat/dirty-check-forms@3.0.3(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/router@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(lodash-es@4.18.1)(rxjs@7.8.2)': + '@ngneat/dirty-check-forms@3.0.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/router@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(lodash-es@4.18.1)(rxjs@7.8.2)': dependencies: - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/forms': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) - '@angular/router': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/forms': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) + '@angular/router': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) lodash-es: 4.18.1 rxjs: 7.8.2 tslib: 2.8.1 @@ -5832,9 +5879,9 @@ snapshots: '@pkgr/core@0.3.6': {} - '@playwright/test@1.62.1': + '@playwright/test@1.64.1': dependencies: - playwright: 1.62.1 + playwright: 1.64.1 '@popperjs/core@2.11.8': {} @@ -5939,20 +5986,20 @@ snapshots: transitivePeerDependencies: - chokidar - '@schematics/angular@22.2.0(chokidar@5.0.0)': + '@schematics/angular@22.2.2(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 22.2.0(chokidar@5.0.0) - '@angular-devkit/schematics': 22.2.0(chokidar@5.0.0) + '@angular-devkit/core': 22.2.2(chokidar@5.0.0) + '@angular-devkit/schematics': 22.2.2(chokidar@5.0.0) jsonc-parser: 3.3.1 oxc-parser: 0.150.0 typescript: 6.0.3 transitivePeerDependencies: - chokidar - '@schematics/angular@22.2.2(chokidar@5.0.0)': + '@schematics/angular@22.2.4(chokidar@5.0.0)': dependencies: - '@angular-devkit/core': 22.2.2(chokidar@5.0.0) - '@angular-devkit/schematics': 22.2.2(chokidar@5.0.0) + '@angular-devkit/core': 22.2.4(chokidar@5.0.0) + '@angular-devkit/schematics': 22.2.4(chokidar@5.0.0) jsonc-parser: 3.3.1 oxc-parser: 0.150.0 typescript: 6.0.3 @@ -6030,7 +6077,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -6038,7 +6085,7 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@26.6.2': + '@types/node@26.6.5': dependencies: undici-types: 8.9.0 @@ -6052,72 +6099,72 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.70.1(@typescript-eslint/parser@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.70.1 - '@typescript-eslint/type-utils': 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) - '@typescript-eslint/utils': 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.70.1 - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) - ignore: 7.0.10 + '@typescript-eslint/parser': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/type-utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.72.0 + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) + ignore: 7.0.14 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': + '@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.70.1 - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/typescript-estree': 8.70.1(supports-color@8.1.1)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.70.1 + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.72.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.70.1(supports-color@8.1.1)(typescript@6.0.3)': + '@typescript-eslint/project-service@8.72.0(supports-color@8.1.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@6.0.3) - '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/tsconfig-utils': 8.72.0(typescript@6.0.3) + '@typescript-eslint/types': 8.72.0 debug: 4.4.3(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.70.1': + '@typescript-eslint/scope-manager@8.72.0': dependencies: - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/visitor-keys': 8.70.1 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/visitor-keys': 8.72.0 - '@typescript-eslint/tsconfig-utils@8.70.1(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.72.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/typescript-estree': 8.70.1(supports-color@8.1.1)(typescript@6.0.3) - '@typescript-eslint/utils': 8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.70.1': {} + '@typescript-eslint/types@8.72.0': {} - '@typescript-eslint/typescript-estree@8.70.1(supports-color@8.1.1)(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.72.0(supports-color@8.1.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.70.1(supports-color@8.1.1)(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.70.1(typescript@6.0.3) - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/visitor-keys': 8.70.1 + '@typescript-eslint/project-service': 8.72.0(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.72.0(typescript@6.0.3) + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/visitor-keys': 8.72.0 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.6 semver: 7.8.5 @@ -6127,20 +6174,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.70.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': + '@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1)) - '@typescript-eslint/scope-manager': 8.70.1 - '@typescript-eslint/types': 8.70.1 - '@typescript-eslint/typescript-estree': 8.70.1(supports-color@8.1.1)(typescript@6.0.3) - eslint: 10.11.0(jiti@2.7.0)(supports-color@8.1.1) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1)) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@8.1.1)(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.70.1': + '@typescript-eslint/visitor-keys@8.72.0': dependencies: - '@typescript-eslint/types': 8.70.1 + '@typescript-eslint/types': 8.72.0 eslint-visitor-keys: 5.0.1 '@ungap/structured-clone@1.3.3': {} @@ -6215,13 +6262,13 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.12.2': optional: true - '@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1))': dependencies: - vite: 8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1) + vite: 8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1) - acorn-jsx@5.3.2(acorn@8.18.0): + acorn-jsx@5.3.2(acorn@8.19.0): dependencies: - acorn: 8.18.0 + acorn: 8.19.0 acorn-walk@8.3.5: dependencies: @@ -6229,6 +6276,8 @@ snapshots: acorn@8.18.0: {} + acorn@8.19.0: {} + agent-base@7.1.4: {} agent-base@9.0.0: {} @@ -6261,7 +6310,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.3.0: {} + ansi-regex@6.4.0: {} ansi-styles@4.3.0: dependencies: @@ -6342,7 +6391,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.11.26: {} + baseline-browser-mapping@2.11.33: {} beasties@0.5.4: dependencies: @@ -6352,12 +6401,14 @@ snapshots: domhandler: 6.0.1 htmlparser2: 12.0.0 picocolors: 1.1.1 - postcss: 8.5.28 + postcss: 8.5.31 postcss-media-query-parser: 0.2.3 - postcss-safe-parser: 7.1.0(postcss@8.5.28) + postcss-safe-parser: 7.1.0(postcss@8.5.31) boolbase@2.0.0: {} + bootstrap-icons@1.13.2: {} + bootstrap@5.3.8(@popperjs/core@2.11.8): dependencies: '@popperjs/core': 2.11.8 @@ -6370,13 +6421,13 @@ snapshots: dependencies: balanced-match: 4.0.4 - browserslist@4.29.1: + browserslist@4.29.4: dependencies: - baseline-browser-mapping: 2.11.26 - caniuse-lite: 1.0.30001812 - electron-to-chromium: 1.5.439 - node-releases: 2.0.57 - update-browserslist-db: 1.3.3(browserslist@4.29.1) + baseline-browser-mapping: 2.11.33 + caniuse-lite: 1.0.30001819 + electron-to-chromium: 1.5.464 + node-releases: 2.0.60 + update-browserslist-db: 1.3.4(browserslist@4.29.4) bs-logger@0.2.6: dependencies: @@ -6402,7 +6453,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001812: {} + caniuse-lite@1.0.30001819: {} chalk@4.1.2: dependencies: @@ -6534,7 +6585,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.439: {} + electron-to-chromium@1.5.464: {} emittery@0.13.1: {} @@ -6606,9 +6657,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1): + eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@8.1.1)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@8.1.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5(supports-color@8.1.1) '@eslint/config-helpers': 0.7.0 @@ -6645,8 +6696,8 @@ snapshots: espree@11.2.0: dependencies: - acorn: 8.18.0 - acorn-jsx: 5.3.2(acorn@8.18.0) + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) eslint-visitor-keys: 5.0.1 esprima@4.0.1: {} @@ -6752,9 +6803,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true @@ -6864,10 +6912,10 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.10: {} - ignore@7.0.12: {} + ignore@7.0.14: {} + immutable@5.1.9: {} import-local@3.2.0: @@ -6954,7 +7002,7 @@ snapshots: '@jest/expect': 30.5.2(supports-color@8.1.1) '@jest/test-result': 30.5.2 '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -6974,15 +7022,15 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)): + jest-cli@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)): dependencies: - '@jest/core': 30.5.2(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) + '@jest/core': 30.5.2(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) '@jest/test-result': 30.5.2 '@jest/types': 30.5.1 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) + jest-config: 30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) jest-util: 30.5.1 jest-validate: 30.5.1 yargs: 17.7.3 @@ -6993,7 +7041,7 @@ snapshots: - supports-color - ts-node - jest-config@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)): + jest-config@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)): dependencies: '@babel/core': 7.29.7(supports-color@8.1.1) '@jest/get-type': 30.5.0 @@ -7019,8 +7067,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 26.6.2 - ts-node: 10.9.2(@types/node@26.6.2)(typescript@6.0.3) + '@types/node': 26.6.5 + ts-node: 10.9.2(@types/node@26.6.5)(typescript@6.0.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -7075,7 +7123,7 @@ snapshots: '@jest/environment': 30.5.2 '@jest/fake-timers': 30.5.2 '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 jest-mock: 30.5.2 jest-util: 30.5.1 jest-validate: 30.5.1 @@ -7086,7 +7134,7 @@ snapshots: dependencies: '@jest/types': 30.5.1 '@parcel/watcher': 2.6.0 - '@types/node': 26.6.2 + '@types/node': 26.6.5 anymatch: 3.1.3 fb-watchman: 2.0.2 fdir: 6.5.0(picomatch@4.0.7) @@ -7100,7 +7148,7 @@ snapshots: dependencies: mkdirp: 1.0.4 strip-ansi: 6.0.1 - uuid: 14.0.2 + uuid: 14.0.3 xml: 1.0.1 jest-leak-detector@30.5.1: @@ -7151,29 +7199,29 @@ snapshots: jest-mock@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 jest-util: 30.4.1 jest-mock@30.5.2: dependencies: '@jest/expect-utils': 30.5.2 '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 jest-util: 30.5.1 - jest-preset-angular@17.0.3(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(jest@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(typescript@6.0.3): + jest-preset-angular@17.0.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(@types/jsdom@21.1.7)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(jest@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)))(jsdom@26.1.0(supports-color@8.1.1))(typescript@6.0.3): dependencies: - '@angular/compiler-cli': 22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/platform-browser': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)) + '@angular/compiler-cli': 22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/platform-browser': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)) '@jest/environment-jsdom-abstract': 30.5.2(@types/jsdom@21.1.7)(jsdom@26.1.0(supports-color@8.1.1)) bs-logger: 0.2.6 esbuild-wasm: 0.28.2 - jest: 30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) + jest: 30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) jest-util: 30.5.1 jsdom: 26.1.0(supports-color@8.1.1) pretty-format: 30.5.1 - ts-jest: 29.4.14(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(esbuild@0.28.2)(jest-util@30.5.1)(jest@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)))(typescript@6.0.3) + ts-jest: 29.4.14(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(esbuild@0.28.2)(jest-util@30.5.1)(jest@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)))(typescript@6.0.3) typescript: 6.0.3 optionalDependencies: esbuild: 0.28.2 @@ -7214,7 +7262,7 @@ snapshots: '@jest/test-result': 30.5.2 '@jest/transform': 30.5.2(supports-color@8.1.1) '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -7242,7 +7290,7 @@ snapshots: '@jest/test-result': 30.5.2 '@jest/transform': 30.5.2(supports-color@8.1.1) '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 chalk: 4.1.2 cjs-module-lexer: 2.2.1 collect-v8-coverage: 1.0.3 @@ -7290,7 +7338,7 @@ snapshots: jest-util@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -7299,7 +7347,7 @@ snapshots: jest-util@30.5.1: dependencies: '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -7318,7 +7366,7 @@ snapshots: dependencies: '@jest/test-result': 30.5.2 '@jest/types': 30.5.1 - '@types/node': 26.6.2 + '@types/node': 26.6.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -7332,18 +7380,18 @@ snapshots: jest-worker@30.5.1: dependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 '@ungap/structured-clone': 1.3.3 jest-util: 30.5.1 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)): + jest@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)): dependencies: - '@jest/core': 30.5.2(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) + '@jest/core': 30.5.2(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) '@jest/types': 30.5.1 import-local: 3.2.0 - jest-cli: 30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) + jest-cli: 30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -7473,11 +7521,11 @@ snapshots: lmdb@3.5.6: dependencies: - '@harperfast/extended-iterable': 1.0.3 + '@harperfast/extended-iterable': 1.0.5 msgpackr: 1.12.1 node-addon-api: 6.1.0 node-gyp-build-optional-packages: 5.2.2 - ordered-binary: 1.6.2 + ordered-binary: 1.6.3 weak-lru-cache: 1.2.2 optionalDependencies: '@lmdb/lmdb-darwin-arm64': 3.5.6 @@ -7539,7 +7587,7 @@ snapshots: make-error@1.3.6: {} - marked@18.0.14: {} + marked@18.1.1: {} material-colors@1.2.6: {} @@ -7590,8 +7638,6 @@ snapshots: mute-stream@3.0.0: {} - nanoid@3.3.18: {} - nanoid@3.3.20: {} napi-postinstall@0.3.4: {} @@ -7600,46 +7646,40 @@ snapshots: neo-async@2.6.2: {} - ngx-bootstrap-icons@1.9.3(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)): + ngx-color@10.1.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)): dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - tslib: 2.8.1 - - ngx-color@10.1.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)): - dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) '@ctrl/tinycolor': 4.2.0 material-colors: 1.2.6 tslib: 2.8.1 - ngx-cookie-service@22.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)): + ngx-cookie-service@22.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)): dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) tslib: 2.8.1 - ngx-device-detector@12.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)): + ngx-device-detector@12.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)): dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) tslib: 2.8.1 - ngx-ui-tour-core@17.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/router@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(rxjs@7.8.2): + ngx-ui-tour-core@17.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/router@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(rxjs@7.8.2): dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@angular/router': 22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@angular/router': 22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 - ngx-ui-tour-ng-bootstrap@19.0.0(d24c501c8e7de67195a408ce535a0d0a): + ngx-ui-tour-ng-bootstrap@19.0.0(80c1a049efae7c5d8e1cd8a5316ff6b2): dependencies: - '@angular/common': 22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2) - '@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2) - '@ng-bootstrap/ng-bootstrap': 21.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/forms@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/localize@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2))(@popperjs/core@2.11.8)(rxjs@7.8.2) - ngx-ui-tour-core: 17.0.0(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/router@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(@angular/platform-browser@22.2.2(@angular/common@22.2.2(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)))(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/common': 22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/core': 22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2) + '@ng-bootstrap/ng-bootstrap': 21.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/forms@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(@angular/localize@22.2.3(@angular/compiler-cli@22.2.3(@angular/compiler@22.2.3)(typescript@6.0.3))(@angular/compiler@22.2.3))(@popperjs/core@2.11.8)(rxjs@7.8.2) + ngx-ui-tour-core: 17.0.0(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/router@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(@angular/platform-browser@22.2.3(@angular/common@22.2.3(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@22.2.3(@angular/compiler@22.2.3)(rxjs@7.8.2)))(rxjs@7.8.2))(rxjs@7.8.2) tslib: 2.8.1 transitivePeerDependencies: - '@angular/router' @@ -7657,7 +7697,7 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.57: {} + node-releases@2.0.60: {} normalize-diacritics@5.0.0: dependencies: @@ -7684,6 +7724,8 @@ snapshots: obug@2.2.1: {} + obug@3.0.0: {} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -7712,7 +7754,7 @@ snapshots: stdin-discarder: 0.3.2 string-width: 8.3.0 - ordered-binary@1.6.2: + ordered-binary@1.6.3: optional: true oxc-parser@0.150.0: @@ -7800,9 +7842,9 @@ snapshots: lru-cache: 11.5.3 minipass: 7.1.3 - pdfjs-dist@6.3.289: + pdfjs-dist@6.4.299: optionalDependencies: - '@napi-rs/canvas': 1.0.9 + '@napi-rs/canvas': 1.0.13 picocolors@1.1.1: {} @@ -7822,25 +7864,17 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.62.1: {} + playwright-core@1.64.1: {} - playwright@1.62.1: + playwright@1.64.1: dependencies: - playwright-core: 1.62.1 - optionalDependencies: - fsevents: 2.3.2 + playwright-core: 1.64.1 postcss-media-query-parser@0.2.3: {} - postcss-safe-parser@7.1.0(postcss@8.5.28): + postcss-safe-parser@7.1.0(postcss@8.5.31): dependencies: - postcss: 8.5.28 - - postcss@8.5.28: - dependencies: - nanoid: 3.3.18 - picocolors: 1.1.1 - source-map-js: 1.2.2 + postcss: 8.5.31 postcss@8.5.31: dependencies: @@ -7850,12 +7884,12 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-organize-imports@4.3.0(prettier@3.9.9)(typescript@6.0.3): + prettier-plugin-organize-imports@4.3.0(prettier@3.9.10)(typescript@6.0.3): dependencies: - prettier: 3.9.9 + prettier: 3.9.10 typescript: 6.0.3 - prettier@3.9.9: {} + prettier@3.9.10: {} pretty-format@29.7.0: dependencies: @@ -8024,12 +8058,12 @@ snapshots: sass-embedded@1.104.1: dependencies: - '@bufbuild/protobuf': 2.15.0 + '@bufbuild/protobuf': 2.16.0 colorjs.io: 0.7.1 immutable: 5.1.9 rxjs: 7.8.2 supports-color: 8.1.1 - sync-child-process: 1.0.2 + sync-child-process: 1.1.0 varint: 6.0.0 optionalDependencies: sass-embedded-all-unknown: 1.104.1 @@ -8139,7 +8173,7 @@ snapshots: strip-ansi@7.2.0: dependencies: - ansi-regex: 6.3.0 + ansi-regex: 6.4.0 strip-bom@4.0.0: {} @@ -8157,7 +8191,7 @@ snapshots: symbol-tree@3.2.4: {} - sync-child-process@1.0.2: + sync-child-process@1.1.0: dependencies: sync-message-port: 1.2.0 @@ -8196,12 +8230,12 @@ snapshots: dependencies: typescript: 6.0.3 - ts-jest@29.4.14(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(esbuild@0.28.2)(jest-util@30.5.1)(jest@30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)))(typescript@6.0.3): + ts-jest@29.4.14(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@30.5.2(supports-color@8.1.1))(@jest/types@30.5.1)(babel-jest@30.5.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(esbuild@0.28.2)(jest-util@30.5.1)(jest@30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)))(typescript@6.0.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.10 - jest: 30.5.2(@types/node@26.6.2)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3)) + jest: 30.5.2(@types/node@26.6.5)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -8217,14 +8251,14 @@ snapshots: esbuild: 0.28.2 jest-util: 30.5.1 - ts-node@10.9.2(@types/node@26.6.2)(typescript@6.0.3): + ts-node@10.9.2(@types/node@26.6.5)(typescript@6.0.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 26.6.2 + '@types/node': 26.6.5 acorn: 8.18.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -8281,9 +8315,9 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 - update-browserslist-db@1.3.3(browserslist@4.29.1): + update-browserslist-db@1.3.4(browserslist@4.29.4): dependencies: - browserslist: 4.29.1 + browserslist: 4.29.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -8295,7 +8329,7 @@ snapshots: dependencies: pako: 1.0.11 - uuid@14.0.2: {} + uuid@14.0.3: {} v8-compile-cache-lib@3.0.1: {} @@ -8311,7 +8345,9 @@ snapshots: verkit@0.3.2: {} - vite@8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1): + verkit@0.5.0: {} + + vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -8319,7 +8355,7 @@ snapshots: rolldown: 1.2.15 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.6.2 + '@types/node': 26.6.5 esbuild: 0.28.2 fsevents: 2.3.3 jiti: 2.7.0 @@ -8434,4 +8470,6 @@ snapshots: yoctocolors@2.2.0: {} + zod@4.6.6: {} + zod@4.6.7: {} diff --git a/src-ui/src/app/app.component.spec.ts b/src-ui/src/app/app.component.spec.ts index d93534d80f..bd81eebaeb 100644 --- a/src-ui/src/app/app.component.spec.ts +++ b/src-ui/src/app/app.component.spec.ts @@ -3,7 +3,6 @@ import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { Router, RouterModule } from '@angular/router' import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { provideUiTour, TourNgBootstrap, @@ -47,7 +46,6 @@ describe('AppComponent', () => { ToastsComponent, FileDropComponent, TourNgBootstrap, - NgxBootstrapIconsModule.pick(allIcons), ], providers: [ PermissionsGuard, diff --git a/src-ui/src/app/components/admin/config/config.component.html b/src-ui/src/app/components/admin/config/config.component.html index 31e9aecfa6..50ecb8ef03 100644 --- a/src-ui/src/app/components/admin/config/config.component.html +++ b/src-ui/src/app/components/admin/config/config.component.html @@ -28,7 +28,7 @@ {{option.title}} - + @if (isExternallyConfigured(option.config_key)) { @if (isSet(option.key)) { @@ -40,11 +40,11 @@ @if (isSet(option.key)) { @if (isExternallyConfigured(option.config_key)) { } @else { } } diff --git a/src-ui/src/app/components/admin/config/config.component.spec.ts b/src-ui/src/app/components/admin/config/config.component.spec.ts index 650761c7dd..0da90f7da7 100644 --- a/src-ui/src/app/components/admin/config/config.component.spec.ts +++ b/src-ui/src/app/components/admin/config/config.component.spec.ts @@ -6,7 +6,6 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { BrowserModule } from '@angular/platform-browser' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { ConfigCategory, @@ -39,7 +38,6 @@ describe('ConfigComponent', () => { NgSelectModule, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), ConfigComponent, TextComponent, SelectComponent, diff --git a/src-ui/src/app/components/admin/config/config.component.ts b/src-ui/src/app/components/admin/config/config.component.ts index 6894a50be3..1923677c64 100644 --- a/src-ui/src/app/components/admin/config/config.component.ts +++ b/src-ui/src/app/components/admin/config/config.component.ts @@ -9,7 +9,6 @@ import { } from '@angular/forms' import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap' import { DirtyComponent, dirtyCheck } from '@ngneat/dirty-check-forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { BehaviorSubject, Observable, @@ -17,6 +16,7 @@ import { first, takeUntil, } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { ConfigCategory, ConfigOption, @@ -52,7 +52,7 @@ import { LoadingComponentWithPermissions } from '../../loading-component/loading NgbNavModule, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class ConfigComponent diff --git a/src-ui/src/app/components/admin/logs/logs.component.spec.ts b/src-ui/src/app/components/admin/logs/logs.component.spec.ts index c458804ce8..9f525a1735 100644 --- a/src-ui/src/app/components/admin/logs/logs.component.spec.ts +++ b/src-ui/src/app/components/admin/logs/logs.component.spec.ts @@ -8,7 +8,6 @@ import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { BrowserModule, By } from '@angular/platform-browser' import { NgbModule, NgbNavLink } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { LogService } from 'src/app/services/rest/log.service' import { PageHeaderComponent } from '../../common/page-header/page-header.component' @@ -40,7 +39,6 @@ describe('LogsComponent', () => { imports: [ BrowserModule, NgbModule, - NgxBootstrapIconsModule.pick(allIcons), LogsComponent, PageHeaderComponent, CommonModule, diff --git a/src-ui/src/app/components/admin/settings/settings.component.html b/src-ui/src/app/components/admin/settings/settings.component.html index 89ea62c3e1..c314f1afcc 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.html +++ b/src-ui/src/app/components/admin/settings/settings.component.html @@ -5,7 +5,7 @@ i18n-info > @if (canViewSystemStatus) { @@ -181,7 +181,7 @@

@@ -263,9 +263,9 @@ - + - +

diff --git a/src-ui/src/app/components/admin/settings/settings.component.spec.ts b/src-ui/src/app/components/admin/settings/settings.component.spec.ts index d64ea2a9b3..645b97f10a 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.spec.ts +++ b/src-ui/src/app/components/admin/settings/settings.component.spec.ts @@ -15,7 +15,6 @@ import { NgbNavLink, } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { provideUiTour } from 'ngx-ui-tour-ng-bootstrap' import { of, throwError } from 'rxjs' import { routes } from 'src/app/app-routing.module' @@ -133,7 +132,6 @@ describe('SettingsComponent', () => { ReactiveFormsModule, NgbAlertModule, NgSelectModule, - NgxBootstrapIconsModule.pick(allIcons), NgbModalModule, DragDropModule, SettingsComponent, diff --git a/src-ui/src/app/components/admin/settings/settings.component.ts b/src-ui/src/app/components/admin/settings/settings.component.ts index 886e47ad6f..3f65e2cb50 100644 --- a/src-ui/src/app/components/admin/settings/settings.component.ts +++ b/src-ui/src/app/components/admin/settings/settings.component.ts @@ -23,7 +23,6 @@ import { NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' import { DirtyComponent, dirtyCheck } from '@ngneat/dirty-check-forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { TourService } from 'ngx-ui-tour-ng-bootstrap' import { BehaviorSubject, @@ -34,6 +33,7 @@ import { takeUntil, tap, } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Group } from 'src/app/data/group' import { SystemStatus, @@ -135,7 +135,7 @@ const sidebarItemLabels: Record = { ReactiveFormsModule, NgbNavModule, NgbPopoverModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class SettingsComponent diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.html b/src-ui/src/app/components/admin/tasks/tasks.component.html index 1e89963986..7424668d21 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.html +++ b/src-ui/src/app/components/admin/tasks/tasks.component.html @@ -7,13 +7,13 @@ >
@@ -86,7 +86,7 @@
@if (filterText?.length) { } @@ -98,7 +98,7 @@ @if (isFiltered) { } @@ -125,7 +125,7 @@ @if (hasMore) { {{tasks.length}} of {{count}} tasks } @else { {count, plural, =1 {1 task} other {{{count}} tasks}} @@ -180,7 +180,7 @@ @if (taskShowsSeparateTypeLabel(task)) { {{ task.task_type_display }} } - {{ task.trigger_source_display }} + {{ task.trigger_source_display }}
{{ task.date_created | customDate:'short' }} @@ -197,7 +197,7 @@ } @if (duplicateDocumentId(task)) {
- + {{ duplicateTaskLabel(task) }}
} @@ -213,18 +213,18 @@ }
@if (task.related_document_ids?.[0]) { - Open Document + Open Document } diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts index 026f5c0624..3b2c58f63e 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts +++ b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts @@ -10,7 +10,6 @@ import { By } from '@angular/platform-browser' import { Router } from '@angular/router' import { RouterTestingModule } from '@angular/router/testing' import { NgbModal, NgbModalRef, NgbModule } from '@ng-bootstrap/ng-bootstrap' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { routes } from 'src/app/app-routing.module' import { @@ -174,7 +173,6 @@ describe('TasksComponent', () => { imports: [ NgbModule, RouterTestingModule.withRoutes(routes), - NgxBootstrapIconsModule.pick(allIcons), FormsModule, TasksComponent, PageHeaderComponent, diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.ts b/src-ui/src/app/components/admin/tasks/tasks.component.ts index b548703df9..20f3107ca4 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.ts +++ b/src-ui/src/app/components/admin/tasks/tasks.component.ts @@ -9,7 +9,6 @@ import { NgbPaginationModule, NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { debounceTime, distinctUntilChanged, @@ -22,6 +21,7 @@ import { takeUntil, timer, } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { PaperlessTask, PaperlessTaskStatus, @@ -151,7 +151,7 @@ const TRIGGER_SOURCE_OPTIONS: Array<{ NgbDropdownModule, NgbPaginationModule, NgbPopoverModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class TasksComponent diff --git a/src-ui/src/app/components/admin/trash/trash.component.html b/src-ui/src/app/components/admin/trash/trash.component.html index 8beb2129d1..372735efe3 100644 --- a/src-ui/src/app/components/admin/trash/trash.component.html +++ b/src-ui/src/app/components/admin/trash/trash.component.html @@ -5,16 +5,16 @@ i18n-info infoLink="usage/#document-trash"> @@ -59,7 +59,7 @@ {{ document.title }} - + {{ getDaysRemaining(document) }} days @@ -67,7 +67,7 @@
@@ -77,10 +77,10 @@
diff --git a/src-ui/src/app/components/admin/trash/trash.component.spec.ts b/src-ui/src/app/components/admin/trash/trash.component.spec.ts index 4ad48dd438..abe000de26 100644 --- a/src-ui/src/app/components/admin/trash/trash.component.spec.ts +++ b/src-ui/src/app/components/admin/trash/trash.component.spec.ts @@ -9,7 +9,6 @@ import { NgbPaginationModule, NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { ToastService } from 'src/app/services/toast.service' import { TrashService } from 'src/app/services/trash.service' @@ -48,7 +47,6 @@ describe('TrashComponent', () => { ReactiveFormsModule, NgbPopoverModule, NgbPaginationModule, - NgxBootstrapIconsModule.pick(allIcons), TrashComponent, PageHeaderComponent, ConfirmDialogComponent, diff --git a/src-ui/src/app/components/admin/trash/trash.component.ts b/src-ui/src/app/components/admin/trash/trash.component.ts index 800a7c084f..b407ad7d66 100644 --- a/src-ui/src/app/components/admin/trash/trash.component.ts +++ b/src-ui/src/app/components/admin/trash/trash.component.ts @@ -6,8 +6,8 @@ import { NgbModal, NgbPaginationModule, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { takeUntil, tap } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { SETTINGS_KEYS } from 'src/app/data/ui-settings' import { SettingsService } from 'src/app/services/settings.service' @@ -29,7 +29,7 @@ import { LoadingComponentWithPermissions } from '../../loading-component/loading ReactiveFormsModule, NgbDropdownModule, NgbPaginationModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class TrashComponent diff --git a/src-ui/src/app/components/admin/users-groups/users-groups.component.html b/src-ui/src/app/components/admin/users-groups/users-groups.component.html index cdabad926f..380b0e2c4f 100644 --- a/src-ui/src/app/components/admin/users-groups/users-groups.component.html +++ b/src-ui/src/app/components/admin/users-groups/users-groups.component.html @@ -11,7 +11,7 @@

Users

    @@ -32,10 +32,10 @@
    @@ -49,7 +49,7 @@

    Groups

      @@ -70,10 +70,10 @@
      diff --git a/src-ui/src/app/components/admin/users-groups/users-groups.component.spec.ts b/src-ui/src/app/components/admin/users-groups/users-groups.component.spec.ts index 8e2551f157..1323ecb7ec 100644 --- a/src-ui/src/app/components/admin/users-groups/users-groups.component.spec.ts +++ b/src-ui/src/app/components/admin/users-groups/users-groups.component.spec.ts @@ -3,7 +3,6 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { Group } from 'src/app/data/group' import { User } from 'src/app/data/user' @@ -41,7 +40,6 @@ describe('UsersAndGroupsComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [NgxBootstrapIconsModule.pick(allIcons)], providers: [ CustomDatePipe, DatePipe, diff --git a/src-ui/src/app/components/admin/users-groups/users-groups.component.ts b/src-ui/src/app/components/admin/users-groups/users-groups.component.ts index 406e17398d..791b27a49c 100644 --- a/src-ui/src/app/components/admin/users-groups/users-groups.component.ts +++ b/src-ui/src/app/components/admin/users-groups/users-groups.component.ts @@ -1,7 +1,7 @@ import { Component, OnDestroy, OnInit, inject, signal } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subject, first, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Group } from 'src/app/data/group' import { User } from 'src/app/data/user' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' @@ -29,7 +29,7 @@ import { ComponentWithPermissions } from '../../with-permissions/with-permission imports: [ PageHeaderComponent, IfPermissionsDirective, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class UsersAndGroupsComponent diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index c6d3c1c062..8a9e64a5f5 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -2,7 +2,7 @@ - Settings + Settings - Logout + Logout - Documentation + Documentation
@@ -93,9 +93,9 @@ @if (canSaveSettings) { } @@ -105,7 +105,7 @@ - Dashboard + Dashboard @if (settingsService.organizingSidebarItems()) { @@ -117,7 +117,7 @@ (click)="closeMenu()" ngbPopover="Documents" i18n-ngbPopover [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - Documents + Documents @@ -136,7 +136,7 @@ routerLinkActive="active" (click)="closeMenu()" [ngbPopover]="view.name" [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> -
{{view.name}}
+
{{view.name}}
@if (showSidebarCounts && !slimSidebarEnabled) { {{ savedViewService.getDocumentCount(view) }} } @@ -147,7 +147,7 @@ @if (settingsService.organizingSidebarSavedViews() && canSaveSettings) {
- +
} @@ -174,10 +174,10 @@ routerLinkActive="active" (click)="closeMenu()" [ngbPopover]="d.title | documentTitle" [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - {{d.title | documentTitle}} + {{d.title | documentTitle}} - + @@ -188,7 +188,7 @@ [class.text-truncate]="!slimSidebarEnabled" (click)="closeAll()" ngbPopover="Close all" i18n-ngbPopover [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - Close all + Close all } @@ -207,7 +207,7 @@ [routerLinkActiveOptions]="{ exact: !(slimSidebarEnabled || attributesSectionsCollapsed) }" (click)="closeMenu()" ngbPopover="Attributes" i18n-ngbPopover [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - Attributes + Attributes @if (!slimSidebarEnabled && canSaveSettings) { }
@@ -228,27 +228,27 @@ @@ -259,7 +259,7 @@ - Saved Views + Saved Views @if (settingsService.organizingSidebarItems()) { @@ -270,7 +270,7 @@ - Share links + Share links @if (settingsService.organizingSidebarItems()) { @@ -283,7 +283,7 @@ - Workflows + Workflows @if (settingsService.organizingSidebarItems()) { @@ -294,7 +294,7 @@ - Mail + Mail @if (settingsService.organizingSidebarItems()) { @@ -304,7 +304,7 @@ - Trash + Trash @@ -320,21 +320,21 @@ - Settings + Settings } @@ -366,7 +366,7 @@ target="_blank" rel="noopener noreferrer" href="https://docs.paperless-ngx.com" ngbPopover="Documentation" i18n-ngbPopover [disablePopover]="!slimSidebarPopoversEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim"> - Documentation + Documentation @if (settingsService.organizingSidebarItems()) { @@ -408,7 +408,7 @@ href="https://github.com/paperless-ngx/paperless-ngx/releases" [ngbPopover]="updateAvailablePopContent" popoverClass="shadow" triggers="mouseenter:mouseleave" container="body"> - + @if (appRemoteVersion()?.update_available) { Update available } @@ -418,7 +418,7 @@ - + }
diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index 933dd93743..57e605eae1 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -142,7 +142,7 @@ main { padding-left: 0; padding-right: 0; - i-bs { + pngx-bs-icon { margin-right: 0 !important; } } @@ -268,7 +268,7 @@ main { } } - i-bs { + pngx-bs-icon { position: relative; top: -1px; } @@ -279,7 +279,7 @@ main { align-items: center; min-width: 0; - > i-bs { + > pngx-bs-icon { flex: 0 0 auto; } @@ -373,11 +373,11 @@ main { width: 1.8rem; height: 100%; - i-bs { + pngx-bs-icon { opacity: 0.5; } - &:hover i-bs { + &:hover pngx-bs-icon { opacity: 1; } } @@ -392,7 +392,7 @@ main { text-decoration: underline; } - i-bs { + pngx-bs-icon { margin-bottom: 2px; } } @@ -665,7 +665,7 @@ main { .navbar .dropdown-menu { font-size: 0.875rem; // body size - a i-bs, button i-bs { + a pngx-bs-icon, button pngx-bs-icon { opacity: 0.6; } } @@ -693,7 +693,7 @@ main { cursor: move; } -::ng-deep .navItemDrag .position-absolute i-bs { +::ng-deep .navItemDrag .position-absolute pngx-bs-icon { display: none; } diff --git a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts index 83cebd8890..2b4c3d63a7 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts @@ -10,7 +10,6 @@ import { BrowserModule, By } from '@angular/platform-browser' import { ActivatedRoute, Router } from '@angular/router' import { RouterTestingModule } from '@angular/router/testing' import { NgbModal, NgbModalModule, NgbModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { provideUiTour } from 'ngx-ui-tour-ng-bootstrap' import { of, throwError } from 'rxjs' import { routes } from 'src/app/app-routing.module' @@ -108,7 +107,6 @@ describe('AppFrameComponent', () => { ReactiveFormsModule, DragDropModule, NgbModalModule, - NgxBootstrapIconsModule.pick(allIcons), AppFrameComponent, IfPermissionsDirective, GlobalSearchComponent, diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 4f9a02f6ec..54caff0582 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -23,10 +23,10 @@ import { NgbNavModule, NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { TourNgBootstrap } from 'ngx-ui-tour-ng-bootstrap' import { Observable } from 'rxjs' import { first } from 'rxjs/operators' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { SavedView } from 'src/app/data/saved-view' import { @@ -89,7 +89,7 @@ const SCROLL_THRESHOLD = 16 NgbPopoverModule, NgbCollapseModule, NgbNavModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, DragDropModule, TourNgBootstrap, FormsModule, diff --git a/src-ui/src/app/components/app-frame/global-search/global-search.component.html b/src-ui/src/app/components/app-frame/global-search/global-search.component.html index e2748709e0..8b8a4b7f42 100644 --- a/src-ui/src/app/components/app-frame/global-search/global-search.component.html +++ b/src-ui/src/app/components/app-frame/global-search/global-search.component.html @@ -1,7 +1,7 @@
- +
Search } - + }
@@ -35,7 +35,7 @@
- +
{{item[nameProp]}} @if (date) { @@ -49,13 +49,13 @@ [disabled]="disablePrimaryButton(type, item)" (mouseenter)="onButtonHover($event)"> @if (type === DataType.Document) { - Open + Open } @else if (type === DataType.SavedView) { - Open + Open } @else if (type === DataType.Workflow || type === DataType.CustomField || type === DataType.Group || type === DataType.User || type === DataType.MailAccount || type === DataType.MailRule) { - Open + Open } @else { - Filter documents + Filter documents } @if (type !== DataType.SavedView && type !== DataType.Workflow && type !== DataType.CustomField && type !== DataType.Group && type !== DataType.User && type !== DataType.MailAccount && type !== DataType.MailRule) { @@ -65,9 +65,9 @@ [disabled]="disableSecondaryButton(type, item)" (mouseenter)="onButtonHover($event)"> @if (type === DataType.Document) { - Download + Download } @else { - Open + Open } } diff --git a/src-ui/src/app/components/app-frame/global-search/global-search.component.scss b/src-ui/src/app/components/app-frame/global-search/global-search.component.scss index 0576a81db5..5e862fce0a 100644 --- a/src-ui/src/app/components/app-frame/global-search/global-search.component.scss +++ b/src-ui/src/app/components/app-frame/global-search/global-search.component.scss @@ -1,7 +1,7 @@ form { position: relative; - > i-bs[name="search"] { + > pngx-bs-icon[name="search"] { position: absolute; left: 0.6rem; top: .25rem; @@ -14,7 +14,7 @@ form { } &:focus-within { - i-bs[name="search"], + pngx-bs-icon[name="search"], .badge { display: none !important; } @@ -72,7 +72,7 @@ form { .dropdown.show { // Hide the search icon when the dropdown is shown - i-bs[name="search"] { + pngx-bs-icon[name="search"] { display: none !important; } diff --git a/src-ui/src/app/components/app-frame/global-search/global-search.component.spec.ts b/src-ui/src/app/components/app-frame/global-search/global-search.component.spec.ts index 015984b401..d1786da92f 100644 --- a/src-ui/src/app/components/app-frame/global-search/global-search.component.spec.ts +++ b/src-ui/src/app/components/app-frame/global-search/global-search.component.spec.ts @@ -10,7 +10,6 @@ import { NgbModalModule, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { DataType } from 'src/app/data/datatype' import { @@ -138,7 +137,6 @@ describe('GlobalSearchComponent', () => { NgbDropdownModule, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), GlobalSearchComponent, ], providers: [ diff --git a/src-ui/src/app/components/app-frame/global-search/global-search.component.ts b/src-ui/src/app/components/app-frame/global-search/global-search.component.ts index 80f9ce8c20..1cc3597bd6 100644 --- a/src-ui/src/app/components/app-frame/global-search/global-search.component.ts +++ b/src-ui/src/app/components/app-frame/global-search/global-search.component.ts @@ -17,8 +17,8 @@ import { NgbModal, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subject, debounceTime, distinctUntilChanged, filter } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { DataType } from 'src/app/data/datatype' import { FILTER_FULLTEXT_QUERY, @@ -65,7 +65,7 @@ import { WorkflowEditDialogComponent } from '../../common/edit-dialog/workflow-e CustomDatePipe, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbDropdownModule, NgTemplateOutlet, ], diff --git a/src-ui/src/app/components/app-frame/toasts-dropdown/toasts-dropdown.component.html b/src-ui/src/app/components/app-frame/toasts-dropdown/toasts-dropdown.component.html index 53b28e15da..597690d157 100644 --- a/src-ui/src/app/components/app-frame/toasts-dropdown/toasts-dropdown.component.html +++ b/src-ui/src/app/components/app-frame/toasts-dropdown/toasts-dropdown.component.html @@ -4,7 +4,7 @@ {{ unread().length }} } diff --git a/src-ui/src/app/components/chat/chat/chat.component.spec.ts b/src-ui/src/app/components/chat/chat/chat.component.spec.ts index 7bf4129a9c..b38cef7efa 100644 --- a/src-ui/src/app/components/chat/chat/chat.component.spec.ts +++ b/src-ui/src/app/components/chat/chat/chat.component.spec.ts @@ -4,7 +4,6 @@ import { ElementRef } from '@angular/core' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NavigationEnd, Router } from '@angular/router' import { RouterTestingModule } from '@angular/router/testing' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subject } from 'rxjs' import { CHAT_METADATA_DELIMITER, @@ -22,11 +21,7 @@ describe('ChatComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - RouterTestingModule, - ChatComponent, - ], + imports: [RouterTestingModule, ChatComponent], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/chat/chat/chat.component.ts b/src-ui/src/app/components/chat/chat/chat.component.ts index a69a735c43..f4fbaafb0f 100644 --- a/src-ui/src/app/components/chat/chat/chat.component.ts +++ b/src-ui/src/app/components/chat/chat/chat.component.ts @@ -9,8 +9,8 @@ import { import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NavigationEnd, Router, RouterModule } from '@angular/router' import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { filter, map, Subscription } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { MarkdownPipe } from 'src/app/pipes/markdown.pipe' import { ChatMessage, @@ -27,7 +27,7 @@ const SLOW_RESPONSE_DELAY_MS = 8000 FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbDropdownModule, MarkdownPipe, ], diff --git a/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.spec.ts b/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.spec.ts new file mode 100644 index 0000000000..2846565e75 --- /dev/null +++ b/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.spec.ts @@ -0,0 +1,61 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { BootstrapIconComponent } from './bootstrap-icon.component' + +describe('BootstrapIconComponent', () => { + let fixture: ComponentFixture + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [BootstrapIconComponent], + }) + fixture = TestBed.createComponent(BootstrapIconComponent) + }) + + it('should render the named icon as inline svg', () => { + fixture.componentRef.setInput('name', 'arrow-down-up') + fixture.detectChanges() + const svg: SVGElement = fixture.nativeElement.querySelector('svg') + expect(svg.classList).toContain('bi-arrow-down-up') + expect(svg.getAttribute('width')).toEqual('16') + expect(svg.getAttribute('height')).toEqual('16') + }) + + it('should apply width and height', () => { + fixture.componentRef.setInput('name', 'x-lg') + fixture.componentRef.setInput('width', '1.2em') + fixture.componentRef.setInput('height', 2) + fixture.detectChanges() + const svg: SVGElement = fixture.nativeElement.querySelector('svg') + expect(svg.getAttribute('width')).toEqual('1.2em') + expect(svg.getAttribute('height')).toEqual('2') + }) + + it('should not allow width or height to inject attributes', () => { + fixture.componentRef.setInput('name', 'x-lg') + fixture.componentRef.setInput('width', '1" onload="alert(1)') + fixture.componentRef.setInput('height', '1" onclick="alert(1)') + fixture.detectChanges() + const svg: SVGElement = fixture.nativeElement.querySelector('svg') + expect(svg.hasAttribute('onload')).toBe(false) + expect(svg.hasAttribute('onclick')).toBe(false) + expect(svg.getAttribute('width')).toEqual('1" onload="alert(1)') + }) + + it('should update when the name changes', () => { + fixture.componentRef.setInput('name', 'x-lg') + fixture.detectChanges() + fixture.componentRef.setInput('name', 'sliders2-vertical') + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('svg').classList).toContain( + 'bi-sliders2-vertical' + ) + }) + + it('should render nothing and warn for an unregistered icon', () => { + const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}) + fixture.componentRef.setInput('name', 'not-an-icon') + fixture.detectChanges() + expect(fixture.nativeElement.innerHTML).toEqual('') + expect(warnSpy).toHaveBeenCalledWith('Icon not found: not-an-icon') + }) +}) diff --git a/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.ts b/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.ts new file mode 100644 index 0000000000..a67d064cc8 --- /dev/null +++ b/src-ui/src/app/components/common/bootstrap-icon/bootstrap-icon.component.ts @@ -0,0 +1,54 @@ +import { + ChangeDetectionStrategy, + Component, + effect, + ElementRef, + inject, + input, +} from '@angular/core' +import { icons } from './icons' + +/** Converts icon name e.g. `arrow-down-up` to its registry key. */ +const toKey = (name: string) => + name.trim().replace(/-(.)/g, (_, char: string) => char.toUpperCase()) + +/** + * Renders an icon from the official bootstrap-icons package as inline SVG. + * Icons must be registered in `./icons.ts`. + */ +@Component({ + selector: 'pngx-bs-icon', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BootstrapIconComponent { + private readonly elementRef = inject(ElementRef) + + readonly name = input() + readonly width = input() + readonly height = input() + + constructor() { + effect(() => { + const element = this.elementRef.nativeElement + element.innerHTML = this.svg() + const svg = element.firstElementChild + if (!svg) return + const width = this.width() + const height = this.height() + if (width) svg.setAttribute('width', String(width)) + if (height) svg.setAttribute('height', String(height)) + }) + } + + private svg(): string { + const name = this.name() + if (!name) return '' + const svg = icons[toKey(name)] + if (!svg) { + console.warn(`Icon not found: ${name}`) + return '' + } + return svg + } +} diff --git a/src-ui/src/app/components/common/bootstrap-icon/icons.ts b/src-ui/src/app/components/common/bootstrap-icon/icons.ts new file mode 100644 index 0000000000..b3086aafef --- /dev/null +++ b/src-ui/src/app/components/common/bootstrap-icon/icons.ts @@ -0,0 +1,317 @@ +import airplane from 'bootstrap-icons/icons/airplane.svg' +import archive from 'bootstrap-icons/icons/archive.svg' +import arrowClockwise from 'bootstrap-icons/icons/arrow-clockwise.svg' +import arrowCounterclockwise from 'bootstrap-icons/icons/arrow-counterclockwise.svg' +import arrowDownUp from 'bootstrap-icons/icons/arrow-down-up.svg' +import arrowDown from 'bootstrap-icons/icons/arrow-down.svg' +import arrowLeft from 'bootstrap-icons/icons/arrow-left.svg' +import arrowRepeat from 'bootstrap-icons/icons/arrow-repeat.svg' +import arrowReturnLeft from 'bootstrap-icons/icons/arrow-return-left.svg' +import arrowRightShort from 'bootstrap-icons/icons/arrow-right-short.svg' +import arrowRight from 'bootstrap-icons/icons/arrow-right.svg' +import arrowUpRight from 'bootstrap-icons/icons/arrow-up-right.svg' +import asterisk from 'bootstrap-icons/icons/asterisk.svg' +import bank from 'bootstrap-icons/icons/bank.svg' +import basket from 'bootstrap-icons/icons/basket.svg' +import bell from 'bootstrap-icons/icons/bell.svg' +import bodyText from 'bootstrap-icons/icons/body-text.svg' +import bookmark from 'bootstrap-icons/icons/bookmark.svg' +import boxArrowInRight from 'bootstrap-icons/icons/box-arrow-in-right.svg' +import boxArrowUpRight from 'bootstrap-icons/icons/box-arrow-up-right.svg' +import boxArrowUp from 'bootstrap-icons/icons/box-arrow-up.svg' +import boxes from 'bootstrap-icons/icons/boxes.svg' +import braces from 'bootstrap-icons/icons/braces.svg' +import briefcase from 'bootstrap-icons/icons/briefcase.svg' +import building from 'bootstrap-icons/icons/building.svg' +import calculator from 'bootstrap-icons/icons/calculator.svg' +import calendarEventFill from 'bootstrap-icons/icons/calendar-event-fill.svg' +import calendarEvent from 'bootstrap-icons/icons/calendar-event.svg' +import calendar from 'bootstrap-icons/icons/calendar.svg' +import camera from 'bootstrap-icons/icons/camera.svg' +import cardChecklist from 'bootstrap-icons/icons/card-checklist.svg' +import cardHeading from 'bootstrap-icons/icons/card-heading.svg' +import caretDown from 'bootstrap-icons/icons/caret-down.svg' +import caretUp from 'bootstrap-icons/icons/caret-up.svg' +import cash from 'bootstrap-icons/icons/cash.svg' +import chatLeftText from 'bootstrap-icons/icons/chat-left-text.svg' +import chatSquareDots from 'bootstrap-icons/icons/chat-square-dots.svg' +import checkAll from 'bootstrap-icons/icons/check-all.svg' +import checkCircleFill from 'bootstrap-icons/icons/check-circle-fill.svg' +import checkCircle from 'bootstrap-icons/icons/check-circle.svg' +import checkLg from 'bootstrap-icons/icons/check-lg.svg' +import check from 'bootstrap-icons/icons/check.svg' +import check2All from 'bootstrap-icons/icons/check2-all.svg' +import chevronDoubleLeft from 'bootstrap-icons/icons/chevron-double-left.svg' +import chevronDoubleRight from 'bootstrap-icons/icons/chevron-double-right.svg' +import chevronDown from 'bootstrap-icons/icons/chevron-down.svg' +import chevronRight from 'bootstrap-icons/icons/chevron-right.svg' +import chevronUp from 'bootstrap-icons/icons/chevron-up.svg' +import circle from 'bootstrap-icons/icons/circle.svg' +import clipboardCheckFill from 'bootstrap-icons/icons/clipboard-check-fill.svg' +import clipboardCheck from 'bootstrap-icons/icons/clipboard-check.svg' +import clipboardFill from 'bootstrap-icons/icons/clipboard-fill.svg' +import clipboard from 'bootstrap-icons/icons/clipboard.svg' +import clockHistory from 'bootstrap-icons/icons/clock-history.svg' +import cpu from 'bootstrap-icons/icons/cpu.svg' +import creditCard from 'bootstrap-icons/icons/credit-card.svg' +import dashCircle from 'bootstrap-icons/icons/dash-circle.svg' +import dash from 'bootstrap-icons/icons/dash.svg' +import diagram3 from 'bootstrap-icons/icons/diagram-3.svg' +import dice5 from 'bootstrap-icons/icons/dice-5.svg' +import doorOpen from 'bootstrap-icons/icons/door-open.svg' +import download from 'bootstrap-icons/icons/download.svg' +import envelopeAtFill from 'bootstrap-icons/icons/envelope-at-fill.svg' +import envelopeAt from 'bootstrap-icons/icons/envelope-at.svg' +import envelope from 'bootstrap-icons/icons/envelope.svg' +import exclamationCircleFill from 'bootstrap-icons/icons/exclamation-circle-fill.svg' +import exclamationTriangleFill from 'bootstrap-icons/icons/exclamation-triangle-fill.svg' +import exclamationTriangle from 'bootstrap-icons/icons/exclamation-triangle.svg' +import eye from 'bootstrap-icons/icons/eye.svg' +import fileEarmarkArrowUp from 'bootstrap-icons/icons/file-earmark-arrow-up.svg' +import fileEarmarkCheck from 'bootstrap-icons/icons/file-earmark-check.svg' +import fileEarmarkDiff from 'bootstrap-icons/icons/file-earmark-diff.svg' +import fileEarmarkFill from 'bootstrap-icons/icons/file-earmark-fill.svg' +import fileEarmarkLock from 'bootstrap-icons/icons/file-earmark-lock.svg' +import fileEarmarkMedical from 'bootstrap-icons/icons/file-earmark-medical.svg' +import fileEarmarkMinus from 'bootstrap-icons/icons/file-earmark-minus.svg' +import fileEarmarkPerson from 'bootstrap-icons/icons/file-earmark-person.svg' +import fileEarmarkPlus from 'bootstrap-icons/icons/file-earmark-plus.svg' +import fileEarmarkRichtext from 'bootstrap-icons/icons/file-earmark-richtext.svg' +import fileEarmarkSpreadsheet from 'bootstrap-icons/icons/file-earmark-spreadsheet.svg' +import fileEarmark from 'bootstrap-icons/icons/file-earmark.svg' +import fileText from 'bootstrap-icons/icons/file-text.svg' +import files from 'bootstrap-icons/icons/files.svg' +import filter from 'bootstrap-icons/icons/filter.svg' +import floppy from 'bootstrap-icons/icons/floppy.svg' +import folderFill from 'bootstrap-icons/icons/folder-fill.svg' +import folder from 'bootstrap-icons/icons/folder.svg' +import funnel from 'bootstrap-icons/icons/funnel.svg' +import gear from 'bootstrap-icons/icons/gear.svg' +import globe2 from 'bootstrap-icons/icons/globe2.svg' +import google from 'bootstrap-icons/icons/google.svg' +import grid from 'bootstrap-icons/icons/grid.svg' +import gripVertical from 'bootstrap-icons/icons/grip-vertical.svg' +import hash from 'bootstrap-icons/icons/hash.svg' +import hddStack from 'bootstrap-icons/icons/hdd-stack.svg' +import heart from 'bootstrap-icons/icons/heart.svg' +import house from 'bootstrap-icons/icons/house.svg' +import inbox from 'bootstrap-icons/icons/inbox.svg' +import infoCircle from 'bootstrap-icons/icons/info-circle.svg' +import journalBookmarkFill from 'bootstrap-icons/icons/journal-bookmark-fill.svg' +import journals from 'bootstrap-icons/icons/journals.svg' +import lightbulb from 'bootstrap-icons/icons/lightbulb.svg' +import link from 'bootstrap-icons/icons/link.svg' +import listNested from 'bootstrap-icons/icons/list-nested.svg' +import listTask from 'bootstrap-icons/icons/list-task.svg' +import listUl from 'bootstrap-icons/icons/list-ul.svg' +import list from 'bootstrap-icons/icons/list.svg' +import microsoft from 'bootstrap-icons/icons/microsoft.svg' +import newspaper from 'bootstrap-icons/icons/newspaper.svg' +import nodePlus from 'bootstrap-icons/icons/node-plus.svg' +import paperclip from 'bootstrap-icons/icons/paperclip.svg' +import pencil from 'bootstrap-icons/icons/pencil.svg' +import peopleFill from 'bootstrap-icons/icons/people-fill.svg' +import people from 'bootstrap-icons/icons/people.svg' +import personCircle from 'bootstrap-icons/icons/person-circle.svg' +import personFillLock from 'bootstrap-icons/icons/person-fill-lock.svg' +import personFill from 'bootstrap-icons/icons/person-fill.svg' +import personLock from 'bootstrap-icons/icons/person-lock.svg' +import personSquare from 'bootstrap-icons/icons/person-square.svg' +import person from 'bootstrap-icons/icons/person.svg' +import playFill from 'bootstrap-icons/icons/play-fill.svg' +import plusCircle from 'bootstrap-icons/icons/plus-circle.svg' +import plus from 'bootstrap-icons/icons/plus.svg' +import printer from 'bootstrap-icons/icons/printer.svg' +import questionCircle from 'bootstrap-icons/icons/question-circle.svg' +import receipt from 'bootstrap-icons/icons/receipt.svg' +import safe from 'bootstrap-icons/icons/safe.svg' +import scissors from 'bootstrap-icons/icons/scissors.svg' +import search from 'bootstrap-icons/icons/search.svg' +import send from 'bootstrap-icons/icons/send.svg' +import shop from 'bootstrap-icons/icons/shop.svg' +import slashCircle from 'bootstrap-icons/icons/slash-circle.svg' +import sliders2Vertical from 'bootstrap-icons/icons/sliders2-vertical.svg' +import sortAlphaDown from 'bootstrap-icons/icons/sort-alpha-down.svg' +import sortAlphaUpAlt from 'bootstrap-icons/icons/sort-alpha-up-alt.svg' +import stack from 'bootstrap-icons/icons/stack.svg' +import stars from 'bootstrap-icons/icons/stars.svg' +import tagFill from 'bootstrap-icons/icons/tag-fill.svg' +import tag from 'bootstrap-icons/icons/tag.svg' +import tags from 'bootstrap-icons/icons/tags.svg' +import telephone from 'bootstrap-icons/icons/telephone.svg' +import textIndentLeft from 'bootstrap-icons/icons/text-indent-left.svg' +import textLeft from 'bootstrap-icons/icons/text-left.svg' +import threeDotsVertical from 'bootstrap-icons/icons/three-dots-vertical.svg' +import threeDots from 'bootstrap-icons/icons/three-dots.svg' +import trash from 'bootstrap-icons/icons/trash.svg' +import truck from 'bootstrap-icons/icons/truck.svg' +import uiRadios from 'bootstrap-icons/icons/ui-radios.svg' +import unlock from 'bootstrap-icons/icons/unlock.svg' +import upcScan from 'bootstrap-icons/icons/upc-scan.svg' +import wallet2 from 'bootstrap-icons/icons/wallet2.svg' +import windowStack from 'bootstrap-icons/icons/window-stack.svg' +import xCircle from 'bootstrap-icons/icons/x-circle.svg' +import xLg from 'bootstrap-icons/icons/x-lg.svg' +import x from 'bootstrap-icons/icons/x.svg' + +/** + * ``. Only icons registered here are bundled but can add + * new ones (any icon from the bootstrap-icons package) as needed. + */ +export const icons: Record = { + airplane, + archive, + arrowClockwise, + arrowCounterclockwise, + arrowDown, + arrowDownUp, + arrowLeft, + arrowRepeat, + arrowReturnLeft, + arrowRight, + arrowRightShort, + arrowUpRight, + asterisk, + bank, + basket, + bell, + braces, + bodyText, + bookmark, + boxArrowInRight, + boxArrowUp, + boxArrowUpRight, + boxes, + briefcase, + building, + calculator, + calendar, + calendarEvent, + calendarEventFill, + camera, + cardChecklist, + cardHeading, + caretDown, + caretUp, + chatLeftText, + chatSquareDots, + check, + check2All, + checkAll, + checkCircle, + checkCircleFill, + checkLg, + chevronDoubleLeft, + chevronDoubleRight, + chevronDown, + chevronRight, + chevronUp, + circle, + clipboard, + clipboardCheck, + clipboardCheckFill, + clipboardFill, + clockHistory, + cpu, + cash, + creditCard, + dash, + dashCircle, + diagram3, + dice5, + doorOpen, + download, + envelope, + envelopeAt, + envelopeAtFill, + exclamationCircleFill, + exclamationTriangle, + exclamationTriangleFill, + eye, + fileEarmark, + fileEarmarkArrowUp, + fileEarmarkCheck, + fileEarmarkDiff, + fileEarmarkFill, + fileEarmarkLock, + fileEarmarkMedical, + fileEarmarkMinus, + fileEarmarkPerson, + fileEarmarkPlus, + fileEarmarkRichtext, + fileEarmarkSpreadsheet, + files, + fileText, + filter, + floppy, + folder, + folderFill, + funnel, + gear, + globe2, + google, + grid, + gripVertical, + hash, + hddStack, + heart, + house, + inbox, + infoCircle, + journalBookmarkFill, + journals, + lightbulb, + link, + list, + listNested, + listTask, + listUl, + microsoft, + newspaper, + nodePlus, + pencil, + paperclip, + people, + peopleFill, + person, + personCircle, + personFill, + personFillLock, + personLock, + personSquare, + playFill, + plus, + plusCircle, + printer, + questionCircle, + receipt, + safe, + scissors, + search, + send, + slashCircle, + shop, + sliders2Vertical, + sortAlphaDown, + sortAlphaUpAlt, + stack, + stars, + tagFill, + tag, + tags, + textIndentLeft, + textLeft, + telephone, + threeDots, + threeDotsVertical, + trash, + truck, + uiRadios, + unlock, + upcScan, + wallet2, + windowStack, + x, + xCircle, + xLg, +} diff --git a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.html b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.html index 7292ba8eaa..f4ade86cc0 100644 --- a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.html +++ b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.html @@ -1,11 +1,11 @@ @if (active()) { } diff --git a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.spec.ts b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.spec.ts index 50cb5c3bb7..eec6651564 100644 --- a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.spec.ts +++ b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.spec.ts @@ -1,5 +1,4 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { ClearableBadgeComponent } from './clearable-badge.component' describe('ClearableBadgeComponent', () => { @@ -8,10 +7,7 @@ describe('ClearableBadgeComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - ClearableBadgeComponent, - ], + imports: [ClearableBadgeComponent], }).compileComponents() fixture = TestBed.createComponent(ClearableBadgeComponent) diff --git a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts index 0ee3661106..36775674b1 100644 --- a/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts +++ b/src-ui/src/app/components/common/clearable-badge/clearable-badge.component.ts @@ -1,11 +1,11 @@ import { Component, computed, EventEmitter, input, Output } from '@angular/core' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' @Component({ selector: 'pngx-clearable-badge', templateUrl: './clearable-badge.component.html', styleUrls: ['./clearable-badge.component.scss'], - imports: [NgxBootstrapIconsModule], + imports: [BootstrapIconComponent], }) export class ClearableBadgeComponent { readonly number = input(undefined) diff --git a/src-ui/src/app/components/common/confirm-button/confirm-button.component.html b/src-ui/src/app/components/common/confirm-button/confirm-button.component.html index f046941231..46617e4bcd 100644 --- a/src-ui/src/app/components/common/confirm-button/confirm-button.component.html +++ b/src-ui/src/app/components/common/confirm-button/confirm-button.component.html @@ -10,7 +10,7 @@ popoverClass="popover-slim" > @if (iconName) { - + } {{label}} diff --git a/src-ui/src/app/components/common/confirm-button/confirm-button.component.spec.ts b/src-ui/src/app/components/common/confirm-button/confirm-button.component.spec.ts index 6f9d3819ca..3076a30d3e 100644 --- a/src-ui/src/app/components/common/confirm-button/confirm-button.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-button/confirm-button.component.spec.ts @@ -1,7 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { ConfirmButtonComponent } from './confirm-button.component' describe('ConfirmButtonComponent', () => { @@ -10,11 +9,7 @@ describe('ConfirmButtonComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - NgbPopoverModule, - NgxBootstrapIconsModule.pick(allIcons), - ConfirmButtonComponent, - ], + imports: [NgbPopoverModule, ConfirmButtonComponent], }).compileComponents() fixture = TestBed.createComponent(ConfirmButtonComponent) diff --git a/src-ui/src/app/components/common/confirm-button/confirm-button.component.ts b/src-ui/src/app/components/common/confirm-button/confirm-button.component.ts index 7ed79308bb..be32b44458 100644 --- a/src-ui/src/app/components/common/confirm-button/confirm-button.component.ts +++ b/src-ui/src/app/components/common/confirm-button/confirm-button.component.ts @@ -6,13 +6,13 @@ import { ViewChild, } from '@angular/core' import { NgbPopover, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' @Component({ selector: 'pngx-confirm-button', templateUrl: './confirm-button.component.html', styleUrl: './confirm-button.component.scss', - imports: [NgbPopoverModule, NgxBootstrapIconsModule], + imports: [NgbPopoverModule, BootstrapIconComponent], }) export class ConfirmButtonComponent { @Input() diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html index 283a85bf17..ecd37ce56d 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html +++ b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html @@ -22,7 +22,7 @@ @let document = getDocument(documentID); @if (document) {
  • - +
    @if (document.correspondent) { diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.spec.ts index 939eaa31de..6d4074d52d 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.spec.ts @@ -2,7 +2,6 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { DocumentService } from 'src/app/services/rest/document.service' import { MergeAsVersionsConfirmDialogComponent } from './merge-as-versions-confirm-dialog.component' @@ -14,10 +13,7 @@ describe('MergeAsVersionsConfirmDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - MergeAsVersionsConfirmDialogComponent, - ], + imports: [MergeAsVersionsConfirmDialogComponent], providers: [ NgbActiveModal, provideHttpClient(withInterceptorsFromDi()), diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.ts index a05e3ab1b2..fc2526c4fb 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.ts @@ -6,8 +6,8 @@ import { import { AsyncPipe } from '@angular/common' import { Component, OnInit, computed, inject, signal } from '@angular/core' import { FormsModule } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { CorrespondentNamePipe } from 'src/app/pipes/correspondent-name.pipe' import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe' @@ -24,7 +24,7 @@ import { ConfirmDialogComponent } from '../confirm-dialog.component' CustomDatePipe, DragDropModule, FormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class MergeAsVersionsConfirmDialogComponent diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html index a55e63d320..bc30485f61 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html +++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html @@ -15,7 +15,7 @@ @let document = getDocument(documentID); @if (document) {
  • - +
    @if (document.correspondent) { diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts index e9b99763a6..49774449ac 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts @@ -3,7 +3,6 @@ import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { DocumentService } from 'src/app/services/rest/document.service' import { MergeConfirmDialogComponent } from './merge-confirm-dialog.component' @@ -15,12 +14,7 @@ describe('MergeConfirmDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - ReactiveFormsModule, - FormsModule, - MergeConfirmDialogComponent, - ], + imports: [ReactiveFormsModule, FormsModule, MergeConfirmDialogComponent], providers: [ NgbActiveModal, provideHttpClient(withInterceptorsFromDi()), diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts index e852e5a933..d924d3ee80 100644 --- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts @@ -6,8 +6,8 @@ import { import { AsyncPipe } from '@angular/common' import { Component, OnInit, inject, signal } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { CorrespondentNamePipe } from 'src/app/pipes/correspondent-name.pipe' import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe' @@ -26,7 +26,7 @@ import { ConfirmDialogComponent } from '../confirm-dialog.component' DragDropModule, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class MergeConfirmDialogComponent diff --git a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.html index 56bf87433f..d351112f52 100644 --- a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.html +++ b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.html @@ -18,7 +18,7 @@ (ngModelChange)="onUpdateDocumentChange($event)" />
    diff --git a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.spec.ts index a1449511b0..217663b55c 100644 --- a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.spec.ts @@ -1,7 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { By } from '@angular/platform-browser' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { PasswordRemovalConfirmDialogComponent } from './password-removal-confirm-dialog.component' describe('PasswordRemovalConfirmDialogComponent', () => { @@ -11,10 +10,7 @@ describe('PasswordRemovalConfirmDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ providers: [NgbActiveModal], - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - PasswordRemovalConfirmDialogComponent, - ], + imports: [PasswordRemovalConfirmDialogComponent], }).compileComponents() fixture = TestBed.createComponent(PasswordRemovalConfirmDialogComponent) diff --git a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.ts index 28e78fc881..cdfd973fcc 100644 --- a/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/password-removal-confirm-dialog/password-removal-confirm-dialog.component.ts @@ -1,13 +1,13 @@ import { Component } from '@angular/core' import { FormsModule } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { ConfirmDialogComponent } from '../confirm-dialog.component' @Component({ selector: 'pngx-password-removal-confirm-dialog', templateUrl: './password-removal-confirm-dialog.component.html', styleUrls: ['./password-removal-confirm-dialog.component.scss'], - imports: [FormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, BootstrapIconComponent], }) export class PasswordRemovalConfirmDialogComponent extends ConfirmDialogComponent { updateDocument: boolean = true diff --git a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html index bba27b1b60..3cf427f565 100644 --- a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html +++ b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html @@ -7,7 +7,7 @@
    @@ -17,7 +17,7 @@
    diff --git a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.spec.ts index 6e0bca287d..91aa7a9804 100644 --- a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.spec.ts @@ -2,7 +2,6 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { RotateConfirmDialogComponent } from './rotate-confirm-dialog.component' describe('RotateConfirmDialogComponent', () => { @@ -11,10 +10,7 @@ describe('RotateConfirmDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - RotateConfirmDialogComponent, - ], + imports: [RotateConfirmDialogComponent], providers: [ NgbActiveModal, provideHttpClient(withInterceptorsFromDi()), diff --git a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.ts index 18d844ef92..395d0aa517 100644 --- a/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.ts @@ -1,6 +1,6 @@ import { NgStyle } from '@angular/common' import { Component, inject, signal } from '@angular/core' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { DocumentService } from 'src/app/services/rest/document.service' import { ConfirmDialogComponent } from '../confirm-dialog.component' @@ -8,7 +8,7 @@ import { ConfirmDialogComponent } from '../confirm-dialog.component' selector: 'pngx-rotate-confirm-dialog', templateUrl: './rotate-confirm-dialog.component.html', styleUrl: './rotate-confirm-dialog.component.scss', - imports: [NgStyle, NgxBootstrapIconsModule], + imports: [NgStyle, BootstrapIconComponent], }) export class RotateConfirmDialogComponent extends ConfirmDialogComponent { documentService = inject(DocumentService) diff --git a/src-ui/src/app/components/common/custom-field-display/custom-field-display.component.html b/src-ui/src/app/components/common/custom-field-display/custom-field-display.component.html index 656cae3392..3506b5ea28 100644 --- a/src-ui/src/app/components/common/custom-field-display/custom-field-display.component.html +++ b/src-ui/src/app/components/common/custom-field-display/custom-field-display.component.html @@ -20,7 +20,7 @@ @for (docId of value; track docId) { @if (getDocumentTitle(docId)) { - {{ getDocumentTitle(docId) }} + {{ getDocumentTitle(docId) }} } } diff --git a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html index a465478f9c..11a5b56aae 100644 --- a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html +++ b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html @@ -1,6 +1,6 @@
    @@ -11,14 +11,12 @@
    @for (field of filteredFields; track field.id) { } @if (!filterText?.length || filteredFields.length === 0) { }
    diff --git a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.scss b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.scss index 302dbfe77f..f9ec42d815 100644 --- a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.scss +++ b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.scss @@ -1,10 +1,3 @@ .custom-fields-dropdown { min-width: 300px; - - // correct position on mobile - @media (max-width: 575.98px) { - &.show { - margin-left: -245px !important; - } - } } diff --git a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.spec.ts b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.spec.ts index e00a6e0d14..57fcd798e0 100644 --- a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.spec.ts @@ -10,7 +10,6 @@ import { NgbModalRef, } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service' @@ -49,7 +48,6 @@ describe('CustomFieldsDropdownComponent', () => { ReactiveFormsModule, NgbModalModule, NgbDropdownModule, - NgxBootstrapIconsModule.pick(allIcons), CustomFieldsDropdownComponent, SelectComponent, ], diff --git a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.ts b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.ts index 6d920742ab..d822bb373e 100644 --- a/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.ts +++ b/src-ui/src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.ts @@ -12,8 +12,8 @@ import { } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbDropdownModule, NgbModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { first, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { CustomField, DATA_TYPE_LABELS } from 'src/app/data/custom-field' import { CustomFieldInstance } from 'src/app/data/custom-field-instance' import { @@ -34,7 +34,7 @@ import { CustomFieldEditDialogComponent } from '../edit-dialog/custom-field-edit styleUrls: ['./custom-fields-dropdown.component.scss'], imports: [ NgbDropdownModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, FormsModule, ReactiveFormsModule, ], diff --git a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html index b04b207adf..51b21b18d2 100644 --- a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html +++ b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html @@ -1,7 +1,7 @@ @if (useDropdown) {
    @@ -187,7 +187,7 @@ }
    @@ -221,14 +221,14 @@
    @if (expression.depth > 0) { }
    diff --git a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.ts b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.ts index 7062be77ad..5439af84b3 100644 --- a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.ts @@ -5,7 +5,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbDateAdapter, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { @@ -67,7 +66,6 @@ describe('CustomFieldsQueryDropdownComponent', () => { await TestBed.configureTestingModule({ imports: [ NgbDropdownModule, - NgxBootstrapIconsModule.pick(allIcons), NgSelectModule, FormsModule, ReactiveFormsModule, diff --git a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.ts b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.ts index 874655e11d..b93f119c7a 100644 --- a/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.ts +++ b/src-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.ts @@ -24,8 +24,8 @@ import { NgbDropdownModule, } from '@ng-bootstrap/ng-bootstrap' import { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { first, Subject, Subscription, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { CUSTOM_FIELD_QUERY_MAX_ATOMS, @@ -235,7 +235,7 @@ export class CustomFieldQueriesModel { NgClass, NgTemplateOutlet, NgSelectModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbDropdownModule, ], }) diff --git a/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.html b/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.html index cb540316f4..76e883fc18 100644 --- a/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.html +++ b/src-ui/src/app/components/common/dates-dropdown/dates-dropdown.component.html @@ -1,6 +1,6 @@
  • diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts index a89c87cf92..4a89b22778 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts @@ -15,8 +15,8 @@ import { ReactiveFormsModule, } from '@angular/forms' import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subscription, catchError, map, of, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Correspondent } from 'src/app/data/correspondent' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { DocumentType } from 'src/app/data/document-type' @@ -496,7 +496,7 @@ const FILTER_HANDLERS: Record = { NgbAccordionModule, NgTemplateOutlet, DragDropModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class WorkflowEditDialogComponent diff --git a/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.spec.ts b/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.spec.ts index ca078bab6a..5302fcddc6 100644 --- a/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.spec.ts @@ -3,7 +3,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' import { PermissionsService } from 'src/app/services/permissions.service' @@ -20,11 +19,7 @@ describe('EmailDocumentDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - EmailDocumentDialogComponent, - IfPermissionsDirective, - NgxBootstrapIconsModule.pick(allIcons), - ], + imports: [EmailDocumentDialogComponent, IfPermissionsDirective], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.ts b/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.ts index c97d8be0f5..2c16f1fb40 100644 --- a/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.ts +++ b/src-ui/src/app/components/common/email-document-dialog/email-document-dialog.component.ts @@ -1,7 +1,6 @@ import { Component, effect, inject, signal } from '@angular/core' import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { DocumentService } from 'src/app/services/rest/document.service' import { ToastService } from 'src/app/services/toast.service' import { LoadingComponentWithPermissions } from '../../loading-component/loading.component' @@ -10,7 +9,7 @@ import { LoadingComponentWithPermissions } from '../../loading-component/loading selector: 'pngx-email-document-dialog', templateUrl: './email-document-dialog.component.html', styleUrl: './email-document-dialog.component.scss', - imports: [FormsModule, NgxBootstrapIconsModule], + imports: [FormsModule], }) export class EmailDocumentDialogComponent extends LoadingComponentWithPermissions { private activeModal = inject(NgbActiveModal) diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html index 939ab6ba2a..ee27dc3454 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html @@ -1,6 +1,6 @@
    } @if (filteredItems.length > 0) { } } @if (extraButtonTitle && (showExtraButtonIfEmpty || filteredItems?.length > 0)) { } @if (!editing && manyToOne) { diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts index 7cf2083aa0..7eb75026a0 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.ts @@ -2,7 +2,6 @@ import { ScrollingModule } from '@angular/cdk/scrolling' import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { NEVER, Subject } from 'rxjs' import { NEGATIVE_NULL_FILTER_VALUE } from 'src/app/data/filter-rule-type' import { @@ -63,7 +62,7 @@ describe('FilterableDropdownComponent & FilterableDropdownSelectionModel', () => provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), ], - imports: [NgxBootstrapIconsModule.pick(allIcons), ScrollingModule], + imports: [ScrollingModule], }).compileComponents() hotkeyService = TestBed.inject(HotKeyService) diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts index fdebc7003a..8463cb0d36 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts @@ -20,8 +20,8 @@ import { NgbDropdownModule, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { Subject, filter, first, merge, takeUntil } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { NEGATIVE_NULL_FILTER_VALUE } from 'src/app/data/filter-rule-type' import { MatchingModel } from 'src/app/data/matching-model' import { ObjectWithPermissions } from 'src/app/data/object-with-permissions' @@ -706,7 +706,7 @@ export class FilterableDropdownSelectionModel { ToggleableDropdownButtonComponent, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbDropdownModule, NgClass, ScrollingModule, diff --git a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html index a940ac7335..f9da7f8ccc 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html +++ b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html @@ -6,13 +6,13 @@ [disabled]="disabled">
    @if (isChecked()) { - + } @if (isPartiallyChecked()) { - + } @if (isExcluded()) { - + }
    diff --git a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts index 4d202580c8..8c4cc02f9b 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, Output } from '@angular/core' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { MatchingModel } from 'src/app/data/matching-model' import { Tag } from 'src/app/data/tag' import { TagComponent } from '../../tag/tag.component' @@ -15,7 +15,7 @@ export enum ToggleableItemState { selector: 'pngx-toggleable-dropdown-button', templateUrl: './toggleable-dropdown-button.component.html', styleUrls: ['./toggleable-dropdown-button.component.scss'], - imports: [TagComponent, NgxBootstrapIconsModule], + imports: [TagComponent, BootstrapIconComponent], }) export class ToggleableDropdownButtonComponent { @Input() diff --git a/src-ui/src/app/components/common/input/check/check.component.html b/src-ui/src/app/components/common/input/check/check.component.html index e3dab36eae..3aa2c8927c 100644 --- a/src-ui/src/app/components/common/input/check/check.component.html +++ b/src-ui/src/app/components/common/input/check/check.component.html @@ -5,7 +5,7 @@ @if (removable) { }
    diff --git a/src-ui/src/app/components/common/input/check/check.component.ts b/src-ui/src/app/components/common/input/check/check.component.ts index 82e2667243..53f995a081 100644 --- a/src-ui/src/app/components/common/input/check/check.component.ts +++ b/src-ui/src/app/components/common/input/check/check.component.ts @@ -5,7 +5,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -19,7 +19,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-check', templateUrl: './check.component.html', styleUrls: ['./check.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgClass, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, NgClass, BootstrapIconComponent], }) export class CheckComponent extends AbstractInputComponent { constructor() { diff --git a/src-ui/src/app/components/common/input/color/color.component.html b/src-ui/src/app/components/common/input/color/color.component.html index 90e5c3ebf9..8a513a6f6c 100644 --- a/src-ui/src/app/components/common/input/color/color.component.html +++ b/src-ui/src/app/components/common/input/color/color.component.html @@ -15,7 +15,7 @@
    diff --git a/src-ui/src/app/components/common/input/color/color.component.spec.ts b/src-ui/src/app/components/common/input/color/color.component.spec.ts index 427a878734..8727870101 100644 --- a/src-ui/src/app/components/common/input/color/color.component.spec.ts +++ b/src-ui/src/app/components/common/input/color/color.component.spec.ts @@ -5,7 +5,6 @@ import { ReactiveFormsModule, } from '@angular/forms' import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { ColorSliderModule } from 'ngx-color/slider' import { ColorComponent } from './color.component' @@ -22,7 +21,6 @@ describe('ColorComponent', () => { ReactiveFormsModule, NgbPopoverModule, ColorSliderModule, - NgxBootstrapIconsModule.pick(allIcons), ColorComponent, ], }).compileComponents() diff --git a/src-ui/src/app/components/common/input/color/color.component.ts b/src-ui/src/app/components/common/input/color/color.component.ts index 5f83d593f4..f31721f712 100644 --- a/src-ui/src/app/components/common/input/color/color.component.ts +++ b/src-ui/src/app/components/common/input/color/color.component.ts @@ -5,8 +5,8 @@ import { ReactiveFormsModule, } from '@angular/forms' import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { ColorSliderModule } from 'ngx-color/slider' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { randomColor } from 'src/app/utils/color' import { AbstractInputComponent } from '../abstract-input' @@ -22,7 +22,7 @@ import { AbstractInputComponent } from '../abstract-input' templateUrl: './color.component.html', styleUrls: ['./color.component.scss'], imports: [ - NgxBootstrapIconsModule, + BootstrapIconComponent, NgbPopoverModule, FormsModule, ReactiveFormsModule, diff --git a/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.html b/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.html index 46dd4f5ab1..056ad0515c 100644 --- a/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.html +++ b/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.html @@ -75,7 +75,7 @@ } }
    } diff --git a/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.ts b/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.ts index 65a2bea8a6..76832c33bb 100644 --- a/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.ts +++ b/src-ui/src/app/components/common/input/custom-fields-values/custom-fields-values.component.ts @@ -14,7 +14,7 @@ import { } from '@angular/forms' import { RouterModule } from '@angular/router' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field' import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service' import { AbstractInputComponent } from '../abstract-input' @@ -52,7 +52,7 @@ import { UrlComponent } from '../url/url.component' FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, TextAreaComponent, ], }) diff --git a/src-ui/src/app/components/common/input/date/date.component.html b/src-ui/src/app/components/common/input/date/date.component.html index a60cbf8baf..9eb7fb0d2c 100644 --- a/src-ui/src/app/components/common/input/date/date.component.html +++ b/src-ui/src/app/components/common/input/date/date.component.html @@ -4,7 +4,7 @@ @if (removable) { }
    @@ -14,7 +14,7 @@ (dateSelect)="onChange(value)" (change)="onChange(value)" (keypress)="onKeyPress($event)" (paste)="onPaste($event)" name="dp" [(ngModel)]="value" [ngModelOptions]="{standalone: true}" ngbDatepicker #datePicker="ngbDatepicker" #datePickerContent="ngModel" [disabled]="disabled" [footerTemplate]="datePickerFooterTemplate">
    @@ -24,7 +24,7 @@ @if (showFilter) { }
    diff --git a/src-ui/src/app/components/common/input/date/date.component.spec.ts b/src-ui/src/app/components/common/input/date/date.component.spec.ts index c8bf9b2e21..ca98d38494 100644 --- a/src-ui/src/app/components/common/input/date/date.component.spec.ts +++ b/src-ui/src/app/components/common/input/date/date.component.spec.ts @@ -4,7 +4,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { NG_VALUE_ACCESSOR } from '@angular/forms' import { RouterModule } from '@angular/router' import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { routes } from 'src/app/app-routing.module' import { LocalizedDateParserFormatter } from 'src/app/utils/ngb-date-parser-formatter' import { DateComponent } from './date.component' @@ -16,10 +15,7 @@ describe('DateComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - imports: [ - NgxBootstrapIconsModule.pick(allIcons), - RouterModule.forRoot(routes), - ], + imports: [RouterModule.forRoot(routes)], providers: [ { provide: NgbDateParserFormatter, diff --git a/src-ui/src/app/components/common/input/date/date.component.ts b/src-ui/src/app/components/common/input/date/date.component.ts index 5a10cce188..94979760ae 100644 --- a/src-ui/src/app/components/common/input/date/date.component.ts +++ b/src-ui/src/app/components/common/input/date/date.component.ts @@ -19,7 +19,7 @@ import { NgbDatepickerModule, NgbDateStruct, } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { SettingsService } from 'src/app/services/settings.service' import { AbstractInputComponent } from '../abstract-input' @@ -39,7 +39,7 @@ import { AbstractInputComponent } from '../abstract-input' FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class DateComponent diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.html b/src-ui/src/app/components/common/input/document-link/document-link.component.html index 4630422a96..39a84ac5c3 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.html +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.html @@ -9,7 +9,7 @@ } @if (removable) { }
    @@ -41,15 +41,15 @@
    @if (!disabled) { - + } @if (document.title) { - {{document.title}} + {{document.title}} } @else { - Unavailable + Unavailable }
    diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.scss b/src-ui/src/app/components/common/input/document-link/document-link.component.scss index c838868444..e42769c71a 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.scss +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.scss @@ -19,7 +19,7 @@ } } -i-bs { +pngx-bs-icon { cursor: pointer; } diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts b/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts index be479f2a4f..630e9d050b 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.spec.ts @@ -5,7 +5,6 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms' import { By } from '@angular/platform-browser' import { provideRouter } from '@angular/router' import { NgSelectComponent } from '@ng-select/ng-select' -import { allIcons, NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { of, Subject, throwError } from 'rxjs' import { FILTER_SIMPLE_TITLE } from 'src/app/data/filter-rule-type' import { DocumentService } from 'src/app/services/rest/document.service' @@ -37,7 +36,7 @@ describe('DocumentLinkComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [DocumentLinkComponent, NgxBootstrapIconsModule.pick(allIcons)], + imports: [DocumentLinkComponent], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/common/input/document-link/document-link.component.ts b/src-ui/src/app/components/common/input/document-link/document-link.component.ts index fb8106d1db..cec2f158ea 100644 --- a/src-ui/src/app/components/common/input/document-link/document-link.component.ts +++ b/src-ui/src/app/components/common/input/document-link/document-link.component.ts @@ -15,7 +15,6 @@ import { } from '@angular/forms' import { RouterModule } from '@angular/router' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { catchError, concat, @@ -28,6 +27,7 @@ import { takeUntil, tap, } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Document } from 'src/app/data/document' import { FILTER_SIMPLE_TITLE } from 'src/app/data/filter-rule-type' import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe' @@ -53,7 +53,7 @@ import { AbstractInputComponent } from '../abstract-input' RouterModule, NgTemplateOutlet, NgSelectModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class DocumentLinkComponent diff --git a/src-ui/src/app/components/common/input/entries/entries.component.html b/src-ui/src/app/components/common/input/entries/entries.component.html index ed69d87781..6e92ce202d 100644 --- a/src-ui/src/app/components/common/input/entries/entries.component.html +++ b/src-ui/src/app/components/common/input/entries/entries.component.html @@ -5,7 +5,7 @@ }
    @@ -14,7 +14,7 @@
    } diff --git a/src-ui/src/app/components/common/input/entries/entries.component.spec.ts b/src-ui/src/app/components/common/input/entries/entries.component.spec.ts index 692b9c0b87..9b8f946cfc 100644 --- a/src-ui/src/app/components/common/input/entries/entries.component.spec.ts +++ b/src-ui/src/app/components/common/input/entries/entries.component.spec.ts @@ -4,7 +4,6 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { EntriesComponent } from './entries.component' describe('EntriesComponent', () => { @@ -13,12 +12,7 @@ describe('EntriesComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - FormsModule, - ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), - EntriesComponent, - ], + imports: [FormsModule, ReactiveFormsModule, EntriesComponent], }).compileComponents() }) diff --git a/src-ui/src/app/components/common/input/entries/entries.component.ts b/src-ui/src/app/components/common/input/entries/entries.component.ts index cbf5de1d4e..6af3196363 100644 --- a/src-ui/src/app/components/common/input/entries/entries.component.ts +++ b/src-ui/src/app/components/common/input/entries/entries.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -18,7 +18,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-entries', templateUrl: './entries.component.html', styleUrl: './entries.component.scss', - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class EntriesComponent extends AbstractInputComponent { entries = [] diff --git a/src-ui/src/app/components/common/input/file/file.component.html b/src-ui/src/app/components/common/input/file/file.component.html index c23f31ef6a..bfbbab4ad4 100644 --- a/src-ui/src/app/components/common/input/file/file.component.html +++ b/src-ui/src/app/components/common/input/file/file.component.html @@ -6,7 +6,7 @@ } @if (removable) { } @@ -18,7 +18,7 @@
    {{filename}}
    } diff --git a/src-ui/src/app/components/common/input/monetary/monetary.component.html b/src-ui/src/app/components/common/input/monetary/monetary.component.html index be23eadaaf..a94cb1d73e 100644 --- a/src-ui/src/app/components/common/input/monetary/monetary.component.html +++ b/src-ui/src/app/components/common/input/monetary/monetary.component.html @@ -6,7 +6,7 @@ } @if (removable) { } diff --git a/src-ui/src/app/components/common/input/monetary/monetary.component.ts b/src-ui/src/app/components/common/input/monetary/monetary.component.ts index b0d6c5b09e..8f6a7c84f6 100644 --- a/src-ui/src/app/components/common/input/monetary/monetary.component.ts +++ b/src-ui/src/app/components/common/input/monetary/monetary.component.ts @@ -5,7 +5,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -23,7 +23,7 @@ import { AbstractInputComponent } from '../abstract-input' CurrencyPipe, FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class MonetaryComponent extends AbstractInputComponent { diff --git a/src-ui/src/app/components/common/input/number/number.component.html b/src-ui/src/app/components/common/input/number/number.component.html index 3066d100ea..bbbf6fb576 100644 --- a/src-ui/src/app/components/common/input/number/number.component.html +++ b/src-ui/src/app/components/common/input/number/number.component.html @@ -6,7 +6,7 @@ } @if (removable) { } diff --git a/src-ui/src/app/components/common/input/number/number.component.ts b/src-ui/src/app/components/common/input/number/number.component.ts index ee701a5042..a6253905c7 100644 --- a/src-ui/src/app/components/common/input/number/number.component.ts +++ b/src-ui/src/app/components/common/input/number/number.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { DocumentService } from 'src/app/services/rest/document.service' import { AbstractInputComponent } from '../abstract-input' @@ -19,7 +19,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-number', templateUrl: './number.component.html', styleUrls: ['./number.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class NumberComponent extends AbstractInputComponent { private documentService = inject(DocumentService) diff --git a/src-ui/src/app/components/common/input/password/password.component.html b/src-ui/src/app/components/common/input/password/password.component.html index 6d7266619e..a9335c3322 100644 --- a/src-ui/src/app/components/common/input/password/password.component.html +++ b/src-ui/src/app/components/common/input/password/password.component.html @@ -10,7 +10,7 @@ @if (showReveal) { } diff --git a/src-ui/src/app/components/common/input/password/password.component.spec.ts b/src-ui/src/app/components/common/input/password/password.component.spec.ts index 3343e6ac5a..d0a4a89bcb 100644 --- a/src-ui/src/app/components/common/input/password/password.component.spec.ts +++ b/src-ui/src/app/components/common/input/password/password.component.spec.ts @@ -5,7 +5,6 @@ import { ReactiveFormsModule, } from '@angular/forms' import { By } from '@angular/platform-browser' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { PasswordComponent } from './password.component' describe('PasswordComponent', () => { @@ -16,12 +15,7 @@ describe('PasswordComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ providers: [], - imports: [ - FormsModule, - ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), - PasswordComponent, - ], + imports: [FormsModule, ReactiveFormsModule, PasswordComponent], }).compileComponents() fixture = TestBed.createComponent(PasswordComponent) diff --git a/src-ui/src/app/components/common/input/password/password.component.ts b/src-ui/src/app/components/common/input/password/password.component.ts index 3af5d66739..35f0ab054c 100644 --- a/src-ui/src/app/components/common/input/password/password.component.ts +++ b/src-ui/src/app/components/common/input/password/password.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -18,7 +18,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-password', templateUrl: './password.component.html', styleUrls: ['./password.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class PasswordComponent extends AbstractInputComponent { @Input() diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index 13f862b241..83d54618ca 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -7,7 +7,7 @@ } @if (removable) { } @@ -42,26 +42,26 @@ } @if (iconField && item[iconField]) { - + } {{item[bindLabel]}} @if (iconField && item[iconField]) { - + } {{item[bindLabel]}} @if (allowCreateNew && !hideAddButton) { } @if (showFilter) { } diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index 888d3b5ed8..1fd2db3b7b 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -12,7 +12,7 @@ import { } from '@angular/forms' import { RouterModule } from '@angular/router' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { matchesSearchText } from 'src/app/utils/text-search' import { AbstractInputComponent } from '../abstract-input' @@ -32,7 +32,7 @@ import { AbstractInputComponent } from '../abstract-input' FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class SelectComponent extends AbstractInputComponent { diff --git a/src-ui/src/app/components/common/input/switch/switch.component.html b/src-ui/src/app/components/common/input/switch/switch.component.html index 636356d644..4eafff201f 100644 --- a/src-ui/src/app/components/common/input/switch/switch.component.html +++ b/src-ui/src/app/components/common/input/switch/switch.component.html @@ -5,12 +5,12 @@ @if (removable) { } @@ -22,7 +22,7 @@ } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index 85cf05f1bb..4254b0dca7 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -22,7 +22,7 @@ } @if (showFilter) { } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.spec.ts b/src-ui/src/app/components/common/input/tags/tags.component.spec.ts index 728713dd7a..184a6284a8 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.spec.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.spec.ts @@ -15,7 +15,6 @@ import { NgbPopoverModule, } from '@ng-bootstrap/ng-bootstrap' import { NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of } from 'rxjs' import { DEFAULT_MATCHING_ALGORITHM, @@ -71,7 +70,6 @@ describe('TagsComponent', () => { NgbModalModule, NgbAccordionModule, NgbPopoverModule, - NgxBootstrapIconsModule.pick(allIcons), TagsComponent, TagEditDialogComponent, TextComponent, diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index 1410db99b8..b0db1f3d3a 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -18,8 +18,8 @@ import { import { RouterModule } from '@angular/router' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { first, firstValueFrom, tap } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { Tag } from 'src/app/data/tag' import { TagService } from 'src/app/services/rest/tag.service' import { matchesSearchText } from 'src/app/utils/text-search' @@ -44,7 +44,7 @@ import { TagComponent } from '../../tag/tag.component' FormsModule, ReactiveFormsModule, RouterModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, ], }) export class TagsComponent implements OnInit, ControlValueAccessor { diff --git a/src-ui/src/app/components/common/input/text/text.component.html b/src-ui/src/app/components/common/input/text/text.component.html index 95d4ad4da0..5c7c5742e4 100644 --- a/src-ui/src/app/components/common/input/text/text.component.html +++ b/src-ui/src/app/components/common/input/text/text.component.html @@ -6,7 +6,7 @@ } @if (removable) { } diff --git a/src-ui/src/app/components/common/input/text/text.component.ts b/src-ui/src/app/components/common/input/text/text.component.ts index 8572547a77..cd648229ca 100644 --- a/src-ui/src/app/components/common/input/text/text.component.ts +++ b/src-ui/src/app/components/common/input/text/text.component.ts @@ -5,7 +5,7 @@ import { ReactiveFormsModule, } from '@angular/forms' import { RouterLink } from '@angular/router' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -22,7 +22,7 @@ import { AbstractInputComponent } from '../abstract-input' imports: [ FormsModule, ReactiveFormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, RouterLink, ], }) diff --git a/src-ui/src/app/components/common/input/textarea/textarea.component.html b/src-ui/src/app/components/common/input/textarea/textarea.component.html index eb6d7e3245..36e8a01ff9 100644 --- a/src-ui/src/app/components/common/input/textarea/textarea.component.html +++ b/src-ui/src/app/components/common/input/textarea/textarea.component.html @@ -6,7 +6,7 @@ } @if (removable) { } diff --git a/src-ui/src/app/components/common/input/textarea/textarea.component.ts b/src-ui/src/app/components/common/input/textarea/textarea.component.ts index 527afda925..f67c917086 100644 --- a/src-ui/src/app/components/common/input/textarea/textarea.component.ts +++ b/src-ui/src/app/components/common/input/textarea/textarea.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -18,7 +18,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-textarea', templateUrl: './textarea.component.html', styleUrls: ['./textarea.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class TextAreaComponent extends AbstractInputComponent { @Input() diff --git a/src-ui/src/app/components/common/input/url/url.component.html b/src-ui/src/app/components/common/input/url/url.component.html index b6d4b995d8..85a9074522 100644 --- a/src-ui/src/app/components/common/input/url/url.component.html +++ b/src-ui/src/app/components/common/input/url/url.component.html @@ -4,7 +4,7 @@ @if (removable) { } @@ -12,7 +12,7 @@
    - +
    {{error}} diff --git a/src-ui/src/app/components/common/input/url/url.component.spec.ts b/src-ui/src/app/components/common/input/url/url.component.spec.ts index 73feb11480..2e919b4be6 100644 --- a/src-ui/src/app/components/common/input/url/url.component.spec.ts +++ b/src-ui/src/app/components/common/input/url/url.component.spec.ts @@ -4,7 +4,6 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { UrlComponent } from './url.component' describe('TextComponent', () => { @@ -15,12 +14,7 @@ describe('TextComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ providers: [], - imports: [ - FormsModule, - ReactiveFormsModule, - NgxBootstrapIconsModule.pick(allIcons), - UrlComponent, - ], + imports: [FormsModule, ReactiveFormsModule, UrlComponent], }).compileComponents() fixture = TestBed.createComponent(UrlComponent) diff --git a/src-ui/src/app/components/common/input/url/url.component.ts b/src-ui/src/app/components/common/input/url/url.component.ts index ac28e2d0ab..84fce47cc1 100644 --- a/src-ui/src/app/components/common/input/url/url.component.ts +++ b/src-ui/src/app/components/common/input/url/url.component.ts @@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { AbstractInputComponent } from '../abstract-input' @Component({ @@ -18,7 +18,7 @@ import { AbstractInputComponent } from '../abstract-input' selector: 'pngx-input-url', templateUrl: './url.component.html', styleUrls: ['./url.component.scss'], - imports: [NgxBootstrapIconsModule, FormsModule, ReactiveFormsModule], + imports: [BootstrapIconComponent, FormsModule, ReactiveFormsModule], }) export class UrlComponent extends AbstractInputComponent { constructor() { diff --git a/src-ui/src/app/components/common/page-header/page-header.component.html b/src-ui/src/app/components/common/page-header/page-header.component.html index 3be16747f4..d8f66308ba 100644 --- a/src-ui/src/app/components/common/page-header/page-header.component.html +++ b/src-ui/src/app/components/common/page-header/page-header.component.html @@ -1,28 +1,30 @@

    - {{title()}} - @if (id()) { - - } + + {{title()}} + @if (id()) { + + } + @if (subTitle()) { {{subTitle()}} } @if (info()) {

    @if (infoLink()) { Read more - + }
    } diff --git a/src-ui/src/app/components/common/page-header/page-header.component.spec.ts b/src-ui/src/app/components/common/page-header/page-header.component.spec.ts index 603dcd028f..57f3b58394 100644 --- a/src-ui/src/app/components/common/page-header/page-header.component.spec.ts +++ b/src-ui/src/app/components/common/page-header/page-header.component.spec.ts @@ -1,7 +1,6 @@ import { Clipboard } from '@angular/cdk/clipboard' import { ComponentFixture, TestBed } from '@angular/core/testing' import { Title } from '@angular/platform-browser' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { environment } from 'src/environments/environment' import { PageHeaderComponent } from './page-header.component' @@ -14,7 +13,7 @@ describe('PageHeaderComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ providers: [], - imports: [NgxBootstrapIconsModule.pick(allIcons), PageHeaderComponent], + imports: [PageHeaderComponent], }).compileComponents() titleService = TestBed.inject(Title) diff --git a/src-ui/src/app/components/common/page-header/page-header.component.ts b/src-ui/src/app/components/common/page-header/page-header.component.ts index a0a1cc3645..578bc7a65a 100644 --- a/src-ui/src/app/components/common/page-header/page-header.component.ts +++ b/src-ui/src/app/components/common/page-header/page-header.component.ts @@ -2,15 +2,15 @@ import { Clipboard } from '@angular/cdk/clipboard' import { Component, effect, inject, input, signal } from '@angular/core' import { Title } from '@angular/platform-browser' import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { TourNgBootstrap } from 'ngx-ui-tour-ng-bootstrap' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { environment } from 'src/environments/environment' @Component({ selector: 'pngx-page-header', templateUrl: './page-header.component.html', styleUrls: ['./page-header.component.scss'], - imports: [NgbPopoverModule, NgxBootstrapIconsModule, TourNgBootstrap], + imports: [NgbPopoverModule, BootstrapIconComponent, TourNgBootstrap], }) export class PageHeaderComponent { private titleService = inject(Title) diff --git a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html index 436ef5c44e..8d97f04c71 100644 --- a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html +++ b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html @@ -7,21 +7,21 @@
    @@ -31,18 +31,18 @@
    @@ -78,12 +78,12 @@
    diff --git a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.spec.ts b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.spec.ts index 41fee5a7e3..95005c1ba6 100644 --- a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.spec.ts +++ b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.spec.ts @@ -2,7 +2,6 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' import { provideHttpClientTesting } from '@angular/common/http/testing' import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { DocumentService } from 'src/app/services/rest/document.service' import { PDFEditorComponent } from './pdf-editor.component' @@ -12,7 +11,7 @@ describe('PDFEditorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [PDFEditorComponent, NgxBootstrapIconsModule.pick(allIcons)], + imports: [PDFEditorComponent], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.ts b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.ts index 8ba4580625..5088486f36 100644 --- a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.ts +++ b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.ts @@ -6,7 +6,7 @@ import { import { Component, inject, signal } from '@angular/core' import { FormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { SETTINGS_KEYS } from 'src/app/data/ui-settings' import { DocumentService } from 'src/app/services/rest/document.service' import { SettingsService } from 'src/app/services/settings.service' @@ -33,7 +33,7 @@ interface PageOperation { imports: [ DragDropModule, FormsModule, - NgxBootstrapIconsModule, + BootstrapIconComponent, PngxPdfViewerComponent, ], }) diff --git a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html index dc62d2e11d..28de73b665 100644 --- a/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html +++ b/src-ui/src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html @@ -1,6 +1,6 @@
    Copied! @@ -60,7 +60,7 @@
    } @if (!loading()) { - + } Create diff --git a/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.spec.ts b/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.spec.ts index 3e6be2e94d..c4da477f15 100644 --- a/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.spec.ts @@ -8,7 +8,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { By } from '@angular/platform-browser' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { of, throwError } from 'rxjs' import { FileVersion, ShareLink } from 'src/app/data/share-link' import { ShareLinkService } from 'src/app/services/rest/share-link.service' @@ -26,12 +25,7 @@ describe('ShareLinksDialogComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [ - ShareLinksDialogComponent, - NgxBootstrapIconsModule.pick(allIcons), - FormsModule, - ReactiveFormsModule, - ], + imports: [ShareLinksDialogComponent, FormsModule, ReactiveFormsModule], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), diff --git a/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.ts b/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.ts index f3d4b8f271..18c4c6e8dc 100644 --- a/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.ts +++ b/src-ui/src/app/components/common/share-links-dialog/share-links-dialog.component.ts @@ -2,8 +2,8 @@ import { Clipboard } from '@angular/cdk/clipboard' import { Component, OnInit, effect, inject, input, signal } from '@angular/core' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { first } from 'rxjs' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { FileVersion, SHARE_LINK_EXPIRATION_OPTIONS, @@ -17,7 +17,7 @@ import { environment } from 'src/environments/environment' selector: 'pngx-share-links-dialog', templateUrl: './share-links-dialog.component.html', styleUrls: ['./share-links-dialog.component.scss'], - imports: [FormsModule, ReactiveFormsModule, NgxBootstrapIconsModule], + imports: [FormsModule, ReactiveFormsModule, BootstrapIconComponent], }) export class ShareLinksDialogComponent implements OnInit { private activeModal = inject(NgbActiveModal) diff --git a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html index 87411b8c51..3e66e8cf5f 100644 --- a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html +++ b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html @@ -4,9 +4,9 @@ @if (loading()) {
    } @else if (noSuggestions) { - + } @else { - + } @if (noSuggestions) { No suggestions @@ -31,19 +31,19 @@
    } @if (suggestions()?.suggested_tags?.length > 0) { - Tags + Tags @for (tag of suggestions().suggested_tags; track tag) { } } @if (suggestions()?.suggested_document_types?.length > 0) { -
    Document Types
    +
    Document Types
    @for (type of suggestions().suggested_document_types; track type) { } } @if (suggestions()?.suggested_correspondents?.length > 0) { -
    Correspondents
    +
    Correspondents
    @for (correspondent of suggestions().suggested_correspondents; track correspondent) { } @@ -61,7 +61,7 @@ @if (aiEnabled()) {

    diff --git a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.spec.ts b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.spec.ts index 6cc7cb1733..122b669480 100644 --- a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.spec.ts @@ -1,6 +1,5 @@ import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { SuggestionSource } from 'src/app/data/ui-settings' import { SuggestionsDropdownComponent } from './suggestions-dropdown.component' @@ -10,11 +9,7 @@ describe('SuggestionsDropdownComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [ - NgbDropdownModule, - NgxBootstrapIconsModule.pick(allIcons), - SuggestionsDropdownComponent, - ], + imports: [NgbDropdownModule, SuggestionsDropdownComponent], providers: [], }) fixture = TestBed.createComponent(SuggestionsDropdownComponent) diff --git a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.ts b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.ts index 73086ab12c..6dcfb467d1 100644 --- a/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.ts +++ b/src-ui/src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.ts @@ -6,14 +6,14 @@ import { input, } from '@angular/core' import { NgbDropdown, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' -import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' +import { BootstrapIconComponent } from 'src/app/components/common/bootstrap-icon/bootstrap-icon.component' import { DocumentSuggestions } from 'src/app/data/document-suggestions' import { SuggestionSource } from 'src/app/data/ui-settings' import { pngxPopperOptions } from 'src/app/utils/popper-options' @Component({ selector: 'pngx-suggestions-dropdown', - imports: [NgbDropdownModule, NgxBootstrapIconsModule], + imports: [NgbDropdownModule, BootstrapIconComponent], templateUrl: './suggestions-dropdown.component.html', styleUrl: './suggestions-dropdown.component.scss', }) diff --git a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html index 3724ee788c..fa69904465 100644 --- a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html +++ b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html @@ -24,7 +24,7 @@ {{status().pngx_version}} @if (versionMismatch()) { } @@ -60,9 +60,9 @@ @@ -77,9 +77,9 @@
    @@ -129,11 +129,11 @@ @@ -186,9 +186,9 @@
    @@ -205,14 +205,14 @@ {{status().tasks.classifier_status}} @if (status().tasks.classifier_status === 'OK') { @if (isStale(status().tasks.classifier_last_trained)) { - + } @else { - + } } @else { - + [class.text-warning]="status().tasks.classifier_status === SystemStatusItemStatus.WARNING"> } @if (currentUserIsSuperUser) { @@ -220,7 +220,7 @@
    } @else { } @@ -239,14 +239,14 @@ {{status().tasks.sanity_check_status}} @if (status().tasks.sanity_check_status === 'OK') { @if (isStale(status().tasks.sanity_check_last_run)) { - + } @else { - + } } @else { - + [class.text-warning]="status().tasks.sanity_check_status === SystemStatusItemStatus.WARNING"> } @if (currentUserIsSuperUser) { @@ -254,7 +254,7 @@
    } @else { } @@ -272,10 +272,10 @@ @if (status().websocket_connected === 'OK') { OK - + } @else { Error - + } @@ -286,15 +286,15 @@ {{status().tasks.llmindex_status}} @if (status().tasks.llmindex_status === 'OK') { @if (isStale(status().tasks.llmindex_last_modified)) { - + } @else { - + } } @else { - + [class.text-muted]="status().tasks.llmindex_status === SystemStatusItemStatus.DISABLED"> } @if (currentUserIsSuperUser) { @@ -302,7 +302,7 @@
    } @else { } @@ -326,10 +326,10 @@