diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ab99fe..d0f5bc4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,28 +1,30 @@ name: CI on: + merge_group: + types: [checks_requested] + pull_request: push: branches: - main - pull_request: -env: - NX_CLOUD_DISTRIBUTED_EXECUTION: false - NX_TASKS_RUNNER: local - MATRIX_SIZE: 1 +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: install-deps: name: Install and cache dependencies + if: ${{ !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }} runs-on: ubuntu-latest outputs: node-version: ${{ steps.setup-node.outputs.node-version }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # We need to fetch all branches and commits so that Nx affected has a base to compare against. fetch-depth: 0 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 id: setup-node with: node-version-file: '.nvmrc' @@ -31,164 +33,199 @@ jobs: run: node ./scripts/rebase-pr.js - name: Cache node modules id: cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-node-${{ steps.setup-node.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }} - name: npm install if: steps.cache.outputs.cache-hit != 'true' run: npm ci - - name: Start Nx Cloud CI run - run: | - if [ $MATRIX_SIZE -gt 1 ]; then - npx nx-cloud start-ci-run - else - echo "Nx Cloud CI run not started because MATRIX_SIZE is $MATRIX_SIZE" - fi - - name: Agent list - run: | - echo 'matrix_size=${{ env.MATRIX_SIZE }}' >> $GITHUB_OUTPUT - node -e 'console.log("agents=" + JSON.stringify({ agent: Array.from(Array(${{ env.MATRIX_SIZE }}).keys()).map(i => i + 1) }))' >> $GITHUB_OUTPUT agents: name: Bootup Nx Cloud agent - if: needs.install-deps.outputs.matrix_size > 1 runs-on: ubuntu-latest needs: install-deps strategy: - matrix: ${{ fromJSON(needs.install-deps.outputs.agents) }} + matrix: + agent: [1, 2, 3] + env: + NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Retrieve node_modules cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }} - name: Start Nx Agent ${{ matrix.agent }} run: npx nx-cloud start-agent + if: ${{ env.NX_CLOUD_ACCESS_TOKEN }} + env: + NX_VERBOSE_LOGGING: ${{ runner.debug || '' }} - lint: - name: Lint - needs: install-deps + build-coverage-lint: + name: Build, code coverage unit tests, and linting + if: ${{ !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }} runs-on: ubuntu-latest + needs: install-deps + env: + NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: - # We need to fetch all branches and commits so that Nx affected has a base to compare against. fetch-depth: 0 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' - # Rebase must happen before installing dependencies. - - name: Rebase current branch - run: node ./scripts/rebase-pr.js - - name: Derive appropriate SHAs for base and head for `nx affected` commands - uses: nrwl/nx-set-shas@v3 + - run: npx nx-cloud start-ci-run --agent-count=3 --distribute-on="manual" + if: ${{ env.NX_CLOUD_ACCESS_TOKEN }} + env: + NX_VERBOSE_LOGGING: ${{ runner.debug || '' }} - name: Retrieve node_modules cache - uses: actions/cache@v3 + uses: actions/cache/restore@v4 with: path: node_modules key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }} - - name: Check library dependencies - run: npx skyux-dev check-lib-dependencies - - name: Check library missing peers - run: npx skyux-dev check-lib-missing-peers - - name: Check library resources - run: npx skyux-dev check-lib-resources - - name: Check code formatting - run: npx prettier --check . - - name: Run lint - run: npx nx affected:lint --quiet --silent --parallel=${{ env.MATRIX_SIZE }} + - uses: nrwl/nx-set-shas@v4 + # Rebase must happen before installing dependencies. + - name: Rebase current branch + run: node ./scripts/rebase-pr.js + - name: Run build, lint, test, and posttest for npm packages + run: | + npx nx affected --target build lint test posttest --configuration ci --parallel 1 --exclude '*,!tag:npm' + env: + NX_VERBOSE_LOGGING: ${{ runner.debug || '' }} + - name: Run lint, test, and posttest for non-npm packages + run: | + npx nx affected --target lint test posttest --configuration ci --parallel 1 --exclude 'tag:npm' + env: + NX_VERBOSE_LOGGING: ${{ runner.debug || '' }} + - name: Stop + if: ${{ always() && env.NX_CLOUD_ACCESS_TOKEN }} + run: npx nx-cloud stop-all-agents + env: + NX_VERBOSE_LOGGING: ${{ runner.debug || '' }} build: name: Build + needs: build-coverage-lint + runs-on: ubuntu-latest + if: ${{ always() && !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }} + steps: + - name: Run build + run: | + [ '${{ needs.build-coverage-lint.result }}' == 'success' ] && echo Built. || false + + coverage: + name: Code coverage + needs: build-coverage-lint + runs-on: ubuntu-latest + if: ${{ always() && !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }} + steps: + - name: Run code coverage + run: | + [ '${{ needs.build-coverage-lint.result }}' == 'success' ] && echo Code covered. || false + + lint: + name: Lint + needs: build-coverage-lint + runs-on: ubuntu-latest + if: ${{ always() && !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }} + steps: + - name: Run lint + run: | + [ '${{ needs.build-coverage-lint.result }}' == 'success' ] && echo Linted. || false + + check-workspace: + name: Check dependencies and resources + if: ${{ !cancelled() && !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }} needs: install-deps runs-on: ubuntu-latest - if: ${{ github.event_name == 'pull_request' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # We need to fetch all branches and commits so that Nx affected has a base to compare against. fetch-depth: 0 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' # Rebase must happen before installing dependencies. - name: Rebase current branch run: node ./scripts/rebase-pr.js - - name: Derive appropriate SHAs for base and head for `nx affected` commands - uses: nrwl/nx-set-shas@v3 - name: Retrieve node_modules cache - uses: actions/cache@v3 + uses: actions/cache/restore@v4 with: path: node_modules key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }} - - name: Build - run: npx nx affected --target=build --parallel=${{ env.MATRIX_SIZE }} + - name: Check library dependencies + run: npx skyux-dev check-lib-dependencies + - name: Check library missing peers + run: npx skyux-dev check-lib-missing-peers + - name: Check library resources + run: npx skyux-dev check-lib-resources - build-dist: - name: Build packages distribution + format: + name: Check formatting needs: install-deps runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # We need to fetch all branches and commits so that Nx affected has a base to compare against. fetch-depth: 0 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' # Rebase must happen before installing dependencies. - name: Rebase current branch run: node ./scripts/rebase-pr.js + - name: Derive appropriate SHAs for base and head for `nx affected` commands + uses: nrwl/nx-set-shas@v4 - name: Retrieve node_modules cache - uses: actions/cache@v3 + uses: actions/cache/restore@v4 with: path: node_modules key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }} - - name: Build packages dist - run: npx skyux-dev create-packages-dist + - name: Check code formatting + run: npx nx format:check + env: + NX_VERBOSE_LOGGING: ${{ runner.debug || '' }} - coverage: - name: Code coverage + build-dist: + name: Build packages distribution needs: install-deps runs-on: ubuntu-latest + if: ${{ github.event_name != 'pull_request' }} steps: - - uses: actions/checkout@v3 - with: - # We need to fetch all branches and commits so that Nx affected has a base to compare against. - fetch-depth: 0 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' - # Rebase must happen before installing dependencies. - - name: Rebase current branch - run: node ./scripts/rebase-pr.js - - name: Derive appropriate SHAs for base and head for `nx affected` commands - uses: nrwl/nx-set-shas@v3 - name: Retrieve node_modules cache - uses: actions/cache@v3 + uses: actions/cache/restore@v4 with: path: node_modules key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }} - - name: Code coverage - run: | - npx nx affected --target=test,posttest --configuration=ci --parallel=${{ env.MATRIX_SIZE }} + - name: Build packages dist + run: npx skyux-dev create-packages-dist + - name: Notify Slack (failure) + if: ${{ failure() }} + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + SLACK_COLOR: ${{ job.status }} + SLACK_MESSAGE: 'Build packages distribution step failed on branch `${{ github.ref_name }}`.' + SLACK_ICON_EMOJI: ':github:' + SLACK_USERNAME: GitHub + #cor-skyux-notifications + SLACK_CHANNEL: C01GY7ZP4HM + SLACK_FOOTER: 'Blackbaud Sky Build User' stop-agents: name: Stop Nx Cloud agents runs-on: ubuntu-latest - if: needs.install-deps.outputs.matrix_size > 1 - needs: [install-deps, lint, build, build-dist, coverage] + if: ${{ !cancelled() }} + needs: build-coverage-lint steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' - - name: Retrieve node_modules cache - uses: actions/cache@v3 - with: - path: node_modules - key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }} - name: Stop Nx Cloud agents - run: npx nx-cloud stop-all-agents + run: echo "🛑 ☁️ 🕵️" diff --git a/apps/playground/project.json b/apps/playground/project.json index 610cc8b..6e5521d 100644 --- a/apps/playground/project.json +++ b/apps/playground/project.json @@ -4,6 +4,7 @@ "projectType": "application", "sourceRoot": "apps/playground/src", "prefix": "app", + "tags": [], "targets": { "build": { "executor": "@angular-devkit/build-angular:browser", @@ -83,6 +84,5 @@ "lint": { "executor": "@nx/eslint:lint" } - }, - "tags": [] + } } diff --git a/libs/clipboard/.eslintrc.json b/libs/clipboard/.eslintrc.json index 7c2585f..322aa14 100644 --- a/libs/clipboard/.eslintrc.json +++ b/libs/clipboard/.eslintrc.json @@ -26,7 +26,8 @@ "prefix": "sky", "style": "kebab-case" } - ] + ], + "@angular-eslint/prefer-standalone": "off" } }, { diff --git a/libs/clipboard/project.json b/libs/clipboard/project.json index 8762907..8e2b0c0 100644 --- a/libs/clipboard/project.json +++ b/libs/clipboard/project.json @@ -4,12 +4,14 @@ "projectType": "library", "sourceRoot": "libs/clipboard/src", "prefix": "sky", + "tags": ["component", "npm"], "targets": { "build": { "executor": "@nx/angular:package", "outputs": ["{workspaceRoot}/dist/{projectRoot}"], "options": { - "project": "libs/clipboard/ng-package.json" + "project": "libs/clipboard/ng-package.json", + "updateBuildableProjectDepsInPackageJson": true }, "configurations": { "production": { @@ -47,6 +49,5 @@ "lint": { "executor": "@nx/eslint:lint" } - }, - "tags": ["component", "npm"] + } } diff --git a/libs/code-block/.eslintrc.json b/libs/code-block/.eslintrc.json index 7c2585f..322aa14 100644 --- a/libs/code-block/.eslintrc.json +++ b/libs/code-block/.eslintrc.json @@ -26,7 +26,8 @@ "prefix": "sky", "style": "kebab-case" } - ] + ], + "@angular-eslint/prefer-standalone": "off" } }, { diff --git a/libs/code-block/project.json b/libs/code-block/project.json index 14f8754..bf7b444 100644 --- a/libs/code-block/project.json +++ b/libs/code-block/project.json @@ -4,12 +4,14 @@ "projectType": "library", "sourceRoot": "libs/code-block/src", "prefix": "sky", + "tags": ["component", "npm"], "targets": { "build": { "executor": "@nx/angular:package", "outputs": ["{workspaceRoot}/dist/{projectRoot}"], "options": { - "project": "libs/code-block/ng-package.json" + "project": "libs/code-block/ng-package.json", + "updateBuildableProjectDepsInPackageJson": true }, "configurations": { "production": { @@ -47,6 +49,5 @@ "lint": { "executor": "@nx/eslint:lint" } - }, - "tags": ["component", "npm"] + } } diff --git a/libs/media/.eslintrc.json b/libs/media/.eslintrc.json index 7c2585f..322aa14 100644 --- a/libs/media/.eslintrc.json +++ b/libs/media/.eslintrc.json @@ -26,7 +26,8 @@ "prefix": "sky", "style": "kebab-case" } - ] + ], + "@angular-eslint/prefer-standalone": "off" } }, { diff --git a/libs/media/project.json b/libs/media/project.json index c8a546f..7f75ba8 100644 --- a/libs/media/project.json +++ b/libs/media/project.json @@ -4,12 +4,14 @@ "projectType": "library", "sourceRoot": "libs/media/src", "prefix": "sky", + "tags": ["component", "npm"], "targets": { "build": { "executor": "@nx/angular:package", "outputs": ["{workspaceRoot}/dist/{projectRoot}"], "options": { - "project": "libs/media/ng-package.json" + "project": "libs/media/ng-package.json", + "updateBuildableProjectDepsInPackageJson": true }, "configurations": { "production": { @@ -47,6 +49,5 @@ "lint": { "executor": "@nx/eslint:lint" } - }, - "tags": ["component", "npm"] + } } diff --git a/libs/stache/.eslintrc.json b/libs/stache/.eslintrc.json index 88f8774..fca1683 100644 --- a/libs/stache/.eslintrc.json +++ b/libs/stache/.eslintrc.json @@ -26,7 +26,8 @@ "prefix": "stache", "style": "kebab-case" } - ] + ], + "@angular-eslint/prefer-standalone": "off" } }, { diff --git a/libs/stache/package.json b/libs/stache/package.json index 90b1d75..22c8306 100644 --- a/libs/stache/package.json +++ b/libs/stache/package.json @@ -30,7 +30,7 @@ } }, "peerDependencies": { - "@angular/cli": "^19.0.6", + "@angular/cli": "^19.0.7", "@angular/common": "^19.0.6", "@angular/core": "^19.0.6", "@angular/platform-browser": "^19.0.6", diff --git a/libs/stache/project.json b/libs/stache/project.json index cde65ae..5e8f9d7 100644 --- a/libs/stache/project.json +++ b/libs/stache/project.json @@ -4,12 +4,14 @@ "projectType": "library", "sourceRoot": "libs/stache/src", "prefix": "stache", + "tags": ["component", "npm"], "targets": { "build": { "executor": "@nx/angular:package", "outputs": ["{workspaceRoot}/dist/{projectRoot}"], "options": { - "project": "libs/stache/ng-package.json" + "project": "libs/stache/ng-package.json", + "updateBuildableProjectDepsInPackageJson": true }, "configurations": { "production": { @@ -59,6 +61,5 @@ "lint": { "executor": "@nx/eslint:lint" } - }, - "tags": ["component", "npm"] + } } diff --git a/nx.json b/nx.json index 99206d1..12b4f6f 100644 --- a/nx.json +++ b/nx.json @@ -1,38 +1,9 @@ { "$schema": "./node_modules/nx/schemas/nx-schema.json", - "affected": { - "defaultBase": "main" - }, - "tasksRunnerOptions": { - "default": { - "runner": "nx-cloud", - "options": { - "cacheableOperations": ["build", "lint", "test", "posttest", "e2e"], - "accessToken": "Mzc2MGM2NDAtNTc5OS00NjA0LTlkODQtOGVmMWFmMWVjNDBhfHJlYWQtd3JpdGU=" - } - }, - "local": { - "runner": "@nx/workspace/tasks-runners/default", - "options": { - "cacheableOperations": ["build", "lint", "test", "posttest", "e2e"] - } - } - }, - "targetDefaults": { - "build": { - "dependsOn": ["^build"], - "inputs": ["production", "^production"] - }, - "lint": { - "inputs": ["default", "{workspaceRoot}/.eslintrc.json"] - }, - "test": { - "inputs": ["default", "^default", "{workspaceRoot}/karma.conf.js"] - } - }, "cli": { "packageManager": "npm" }, + "defaultProject": "playground", "generators": { "@nx/angular:application": { "style": "scss", @@ -49,17 +20,78 @@ "style": "scss" } }, - "defaultProject": "playground", + "targetDefaults": { + "build": { + "dependsOn": ["^build"], + "inputs": ["buildInputs", "^buildInputs"], + "cache": true + }, + "test": { + "inputs": ["testInputs", "^buildInputs"], + "cache": true + }, + "posttest": { + "dependsOn": [ + { + "target": "test" + } + ], + "cache": true + }, + "@nx/jest:jest": { + "inputs": ["testInputs", "^buildInputs"], + "cache": true, + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true, + "quiet": true, + "runInBand": true + } + } + }, + "@nx/eslint:lint": { + "inputs": ["lintInputs"], + "cache": true + }, + "@nx/angular:package": { + "cache": true, + "dependsOn": ["^build"], + "inputs": ["buildInputs", "^buildInputs"] + } + }, "namedInputs": { - "default": ["{projectRoot}/**/*", "sharedGlobals"], - "sharedGlobals": [ - "{workspaceRoot}/.github/workflows/**", - "{workspaceRoot}/config/**", - "{workspaceRoot}/scripts/**", - "{workspaceRoot}/nx.json", - "{workspaceRoot}/tsconfig.base.json", - "{workspaceRoot}/tsconfig.no-strict.json" + "buildInputs": [ + "{projectRoot}/**/*", + "{workspaceRoot}/scripts/postbuild-{projectName}.ts", + "{workspaceRoot}/scripts/utils/**", + "!{projectRoot}/**/*.spec.[jt]s", + "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", + "!{projectRoot}/**/fixtures/**/*", + "!{projectRoot}/.eslintrc.json", + "!{projectRoot}/eslint.config.js", + "!{projectRoot}/jest.config.[jt]s", + "!{projectRoot}/karma.conf.js", + "!{projectRoot}/src/test-setup.[jt]s", + "!{projectRoot}/tsconfig.spec.json" ], - "production": ["default"] - } + "lintInputs": ["{projectRoot}/**/*", "{workspaceRoot}/.eslint*", "{workspaceRoot}/eslint-*"], + "testInputs": [ + "{projectRoot}/**/*", + "{workspaceRoot}/.github/workflows/ci.yml", + "{workspaceRoot}/config/**", + "{workspaceRoot}/jest.config.json", + "{workspaceRoot}/karma.conf.js", + "{workspaceRoot}/scripts/posttest-{projectName}.ts", + "{workspaceRoot}/scripts/utils/**", + "!{projectRoot}/.eslintrc.json", + "!{projectRoot}/eslint.config.js" + ] + }, + "useInferencePlugins": false, + "defaultBase": "main", + "useLegacyCache": true } diff --git a/package-lock.json b/package-lock.json index bc53a8b..ba087ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "MIT", "dependencies": { "@angular/animations": "19.0.6", - "@angular/cdk": "19.0.4", + "@angular/cdk": "19.0.5", "@angular/common": "19.0.6", "@angular/compiler": "19.0.6", "@angular/core": "19.0.6", @@ -44,11 +44,11 @@ "zone.js": "0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "19.0.6", + "@angular-devkit/build-angular": "19.0.7", "@angular-eslint/eslint-plugin": "19.0.2", "@angular-eslint/eslint-plugin-template": "19.0.2", "@angular-eslint/template-parser": "19.0.2", - "@angular/cli": "19.0.6", + "@angular/cli": "19.0.7", "@angular/compiler-cli": "19.0.6", "@angular/language-service": "19.0.6", "@istanbuljs/nyc-config-typescript": "1.0.2", @@ -65,20 +65,21 @@ "@types/fs-extra": "11.0.4", "@types/jasmine": "5.1.4", "@types/lodash.get": "4.4.9", - "@types/node": "20.14.12", + "@types/node": "20.17.12", "@types/prismjs": "1.26.4", - "@typescript-eslint/eslint-plugin": "7.17.0", - "@typescript-eslint/parser": "7.17.0", - "@typescript-eslint/utils": "7.17.0", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "autoprefixer": "10.4.0", "axe-core": "4.10.0", "cross-spawn": "7.0.6", - "eslint": "8.57.0", + "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "fs-extra": "11.2.0", "jasmine": "5.1.0", "jasmine-core": "5.1.2", "jasmine-spec-reporter": "7.0.0", - "karma": "6.4.3", + "karma": "6.4.4", "karma-chrome-launcher": "3.2.0", "karma-coverage": "2.2.1", "karma-jasmine": "5.1.0", @@ -86,7 +87,7 @@ "ng-packagr": "19.0.1", "nx": "20.3.1", "nyc": "15.1.0", - "prettier": "3.3.3", + "prettier": "3.4.2", "typescript": "5.6.3" }, "engines": { @@ -115,12 +116,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1900.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1900.6.tgz", - "integrity": "sha512-w11bAXQnNWBawTJfQPjvaTRrzrqsOUm9tK9WNvaia/xjiRFpmO0CfmKtn3axNSEJM8jb/czaNQrgTwG+TGc/8g==", + "version": "0.1900.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1900.7.tgz", + "integrity": "sha512-3dRV0IB+MbNYbAGbYEFMcABkMphqcTvn5MG79dQkwcf2a9QZxCq2slwf/rIleWoDUcFm9r1NnVPYrTYNYJaqQg==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.0.6", + "@angular-devkit/core": "19.0.7", "rxjs": "7.8.1" }, "engines": { @@ -130,17 +131,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "19.0.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.0.6.tgz", - "integrity": "sha512-dWTAsE6BSI8z0xglQdYBdqTBwg1Q+RWE3OrmlGs+520Dcoq/F0Z41Y1F3MiuHuQPdDAIQr88iB0APkIRW4clMg==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.0.7.tgz", + "integrity": "sha512-R0vpJ+P5xBqF82zOMq2FvOP7pJz5NZ7PwHAIFuQ6z50SHLW/VcUA19ZoFKwxBX6A/Soyb66QXTcjZ5wbRqMm8w==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1900.6", - "@angular-devkit/build-webpack": "0.1900.6", - "@angular-devkit/core": "19.0.6", - "@angular/build": "19.0.6", + "@angular-devkit/architect": "0.1900.7", + "@angular-devkit/build-webpack": "0.1900.7", + "@angular-devkit/core": "19.0.7", + "@angular/build": "19.0.7", "@babel/core": "7.26.0", "@babel/generator": "7.26.2", "@babel/helper-annotate-as-pure": "7.25.9", @@ -151,7 +152,7 @@ "@babel/preset-env": "7.26.0", "@babel/runtime": "7.26.0", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "19.0.6", + "@ngtools/webpack": "19.0.7", "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", @@ -205,7 +206,7 @@ "@angular/localize": "^19.0.0", "@angular/platform-server": "^19.0.0", "@angular/service-worker": "^19.0.0", - "@angular/ssr": "^19.0.6", + "@angular/ssr": "^19.0.7", "@web/test-runner": "^0.19.0", "browser-sync": "^3.0.2", "jest": "^29.5.0", @@ -255,6 +256,44 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/http-proxy-middleware": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz", @@ -291,13 +330,13 @@ "license": "0BSD" }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1900.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1900.6.tgz", - "integrity": "sha512-WehtVrbBow4fc7hsaUKb+BZ6MDE5lO98/tgv7GR5PkRdGKnyLA0pW1AfPLJJQDgcaKjneramMhDFNc1eGSX0mQ==", + "version": "0.1900.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1900.7.tgz", + "integrity": "sha512-F0S0iyspo/9w9rP5F9wmL+ZkBr48YQIWiFu+PaQ0in/lcdRmY/FjVHTMa5BMnlew9VCtFHPvpoN9x4u8AIoWXA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1900.6", + "@angular-devkit/architect": "0.1900.7", "rxjs": "7.8.1" }, "engines": { @@ -311,9 +350,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "19.0.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.0.6.tgz", - "integrity": "sha512-WUWJhzQDsovfMY6jtb9Ktz/5sJszsaErj+XV2aXab85f1OweI/Iv2urPZnJwUSilvVN5Ok/fy3IJ6SuihK4Ceg==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.0.7.tgz", + "integrity": "sha512-VyuORSitT6LIaGUEF0KEnv2TwNaeWl6L3/4L4stok0BJ23B4joVca2DYVcrLC1hSzz8V4dwVgSlbNIgjgGdVpg==", "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -338,12 +377,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "19.0.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.0.6.tgz", - "integrity": "sha512-R9hlHfAh1HKoIWgnYJlOEKhUezhTNl0fpUmHxG2252JSY5FLRxmYArTtJYYmbNdBbsBLNg3UHyM/GBPvJSA3NQ==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.0.7.tgz", + "integrity": "sha512-BHXQv6kMc9xo4TH9lhwMv8nrZXHkLioQvLun2qYjwvOsyzt3qd+sUM9wpHwbG6t+01+FIQ05iNN9ox+Cvpndgg==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.0.6", + "@angular-devkit/core": "19.0.7", "jsonc-parser": "3.3.1", "magic-string": "0.30.12", "ora": "5.4.1", @@ -443,14 +482,14 @@ } }, "node_modules/@angular/build": { - "version": "19.0.6", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.0.6.tgz", - "integrity": "sha512-KEVNLgTZUF2dfpOYQn+yR2HONHUTxq/2rFVhiK9qAvrm/m+uKJNEXx7hGtbRyoqenZff4ScJq+7feITUldfX8g==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.0.7.tgz", + "integrity": "sha512-AFvhRa6sfXG8NmS8AN7TvE8q2kVcMw+zXMZzo981cqwnOwJy4VHU0htqm5OZQnohVJM0pP8SBAuROWO4yRrxCA==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1900.6", + "@angular-devkit/architect": "0.1900.7", "@babel/core": "7.26.0", "@babel/helper-annotate-as-pure": "7.25.9", "@babel/helper-split-export-declaration": "7.24.7", @@ -489,7 +528,7 @@ "@angular/localize": "^19.0.0", "@angular/platform-server": "^19.0.0", "@angular/service-worker": "^19.0.0", - "@angular/ssr": "^19.0.6", + "@angular/ssr": "^19.0.7", "less": "^4.2.0", "postcss": "^8.4.0", "tailwindcss": "^2.0.0 || ^3.0.0", @@ -520,9 +559,9 @@ } }, "node_modules/@angular/cdk": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.0.4.tgz", - "integrity": "sha512-P8V1n6AFFjBUJG3YRgw8DiiNDWPZVrwQ42wbwgZxd4s2TQAuNFg3YY8h/DSMVxt2sXpavrshZsoLtP9yLKZjHA==", + "version": "19.0.5", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.0.5.tgz", + "integrity": "sha512-+D++QUrJlDuwk5RhQBDTejQseb0ZP6c6S4r8wBBab7UPtrwigySudSb0PxhiAzp2YHr5Ch3klhkTf/NSWeUXUQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -537,17 +576,17 @@ } }, "node_modules/@angular/cli": { - "version": "19.0.6", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.0.6.tgz", - "integrity": "sha512-ZEHhgRRVIdn10dbsAjB8TE9Co32hfuL9/im5Jcfa1yrn6KJefmigz6KN8Xu7FXMH5FkdqfQ11QpLBxJSPb9aww==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.0.7.tgz", + "integrity": "sha512-y6C4B4XdiZwe2+OADLWXyKqUVvW/XDzTuJ2mZ5PhTnSiiXDN4zRWId1F5wA8ve8vlbUKApPHXRQuaqiQJmA24g==", "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1900.6", - "@angular-devkit/core": "19.0.6", - "@angular-devkit/schematics": "19.0.6", + "@angular-devkit/architect": "0.1900.7", + "@angular-devkit/core": "19.0.7", + "@angular-devkit/schematics": "19.0.7", "@inquirer/prompts": "7.1.0", "@listr2/prompt-adapter-inquirer": "2.0.18", - "@schematics/angular": "19.0.6", + "@schematics/angular": "19.0.7", "@yarnpkg/lockfile": "1.1.0", "ini": "5.0.0", "jsonc-parser": "3.3.1", @@ -3232,22 +3271,24 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -3260,6 +3301,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3270,6 +3312,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3295,7 +3338,8 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", @@ -5015,9 +5059,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "19.0.6", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.0.6.tgz", - "integrity": "sha512-eWrIb0tS1CK6+JvFS4GgTD4fN9TtmApKrlaj3pPQXKXKKd42361ec85fuQQXdb4G8eEEq0vyd/bn4NJllh/3vw==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.0.7.tgz", + "integrity": "sha512-jWyMuqtLKZB8Jnuqo27mG2cCQdl71lhM1oEdq3x7Z/QOrm2I+8EfyAzOLxB1f1vXt85O1bz3nf66CkuVCVGGTQ==", "dev": true, "license": "MIT", "engines": { @@ -6405,6 +6449,44 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@nx/webpack/node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/@nx/webpack/node_modules/copy-webpack-plugin": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", @@ -7784,13 +7866,13 @@ } }, "node_modules/@schematics/angular": { - "version": "19.0.6", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.0.6.tgz", - "integrity": "sha512-HicclmbW/+mlljU7a4PzbyIWG+7tognoL5LsgMFJQUDzJXHNjRt1riL0vk57o8Pcprnz9FheeWZXO1KRhXkQuw==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.0.7.tgz", + "integrity": "sha512-1WtTqKFPuEaV99VIP+y/gf/XW3TVJh/NbJbbEF4qYpp7qQiJ4ntF4klVZmsJcQzFucZSzlg91QVMPQKev5WZGA==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.0.6", - "@angular-devkit/schematics": "19.0.6", + "@angular-devkit/core": "19.0.7", + "@angular-devkit/schematics": "19.0.7", "jsonc-parser": "3.3.1" }, "engines": { @@ -8958,11 +9040,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", - "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", + "version": "20.17.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.12.tgz", + "integrity": "sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw==", + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/node-forge": { @@ -9085,16 +9168,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.17.0.tgz", - "integrity": "sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/type-utils": "7.17.0", - "@typescript-eslint/utils": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -9118,13 +9202,14 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.17.0.tgz", - "integrity": "sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/utils": "7.17.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -9145,15 +9230,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -9173,13 +9259,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -9357,10 +9444,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -9370,13 +9458,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9402,6 +9491,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9413,15 +9503,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", - "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -9435,12 +9526,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -10033,6 +10125,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10074,31 +10167,18 @@ "integrity": "sha512-VVE1H6cc4ai+ZXo/CRWoJiHXrA1qfA31DPnx6D20+kSI547hQN5Greh51LQ1baMRMfxO5K5M4ImMtZbZt2DODQ==" }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.0.tgz", + "integrity": "sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", + "browserslist": "^4.17.5", + "caniuse-lite": "^1.0.30001272", + "fraction.js": "^4.1.1", "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" @@ -10106,6 +10186,10 @@ "engines": { "node": "^10 || ^12 || >=14" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, "peerDependencies": { "postcss": "^8.1.0" } @@ -13334,16 +13418,18 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -15096,6 +15182,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -16329,6 +16416,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", @@ -17079,10 +17167,11 @@ } }, "node_modules/karma": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", - "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, + "license": "MIT", "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -21455,10 +21544,11 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -22769,6 +22859,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -24436,9 +24527,10 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", diff --git a/package.json b/package.json index 77b6451..c2f1931 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "private": true, "dependencies": { "@angular/animations": "19.0.6", - "@angular/cdk": "19.0.4", + "@angular/cdk": "19.0.5", "@angular/common": "19.0.6", "@angular/compiler": "19.0.6", "@angular/core": "19.0.6", @@ -115,11 +115,11 @@ "zone.js": "0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "19.0.6", + "@angular-devkit/build-angular": "19.0.7", "@angular-eslint/eslint-plugin": "19.0.2", "@angular-eslint/eslint-plugin-template": "19.0.2", "@angular-eslint/template-parser": "19.0.2", - "@angular/cli": "19.0.6", + "@angular/cli": "19.0.7", "@angular/compiler-cli": "19.0.6", "@angular/language-service": "19.0.6", "@istanbuljs/nyc-config-typescript": "1.0.2", @@ -136,20 +136,21 @@ "@types/fs-extra": "11.0.4", "@types/jasmine": "5.1.4", "@types/lodash.get": "4.4.9", - "@types/node": "20.14.12", + "@types/node": "20.17.12", "@types/prismjs": "1.26.4", - "@typescript-eslint/eslint-plugin": "7.17.0", - "@typescript-eslint/parser": "7.17.0", - "@typescript-eslint/utils": "7.17.0", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "autoprefixer": "10.4.0", "axe-core": "4.10.0", "cross-spawn": "7.0.6", - "eslint": "8.57.0", + "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "fs-extra": "11.2.0", "jasmine": "5.1.0", "jasmine-core": "5.1.2", "jasmine-spec-reporter": "7.0.0", - "karma": "6.4.3", + "karma": "6.4.4", "karma-chrome-launcher": "3.2.0", "karma-coverage": "2.2.1", "karma-jasmine": "5.1.0", @@ -157,7 +158,7 @@ "ng-packagr": "19.0.1", "nx": "20.3.1", "nyc": "15.1.0", - "prettier": "3.3.3", + "prettier": "3.4.2", "typescript": "5.6.3" }, "overrides": {