diff --git a/package.json b/package.json index a464cc927..cfeab1cbb 100644 --- a/package.json +++ b/package.json @@ -18,19 +18,19 @@ }, "private": true, "dependencies": { - "@aneoconsultingfr/armonik.api.angular": "^3.19.0", + "@aneoconsultingfr/armonik.api.angular": "^3.20.0", "@angular-material-components/datetime-picker": "^16.0.1", - "@angular/animations": "^18.2.2", - "@angular/cdk": "18.2.2", - "@angular/common": "^18.2.2", - "@angular/compiler": "^18.2.2", - "@angular/core": "^18.2.2", - "@angular/forms": "^18.2.2", - "@angular/material": "18.2.2", - "@angular/material-luxon-adapter": "^18.2.2", - "@angular/platform-browser": "^18.2.2", - "@angular/platform-browser-dynamic": "^18.2.2", - "@angular/router": "^18.2.2", + "@angular/animations": "^18.2.3", + "@angular/cdk": "18.2.3", + "@angular/common": "^18.2.3", + "@angular/compiler": "^18.2.3", + "@angular/core": "^18.2.3", + "@angular/forms": "^18.2.3", + "@angular/material": "18.2.3", + "@angular/material-luxon-adapter": "^18.2.3", + "@angular/platform-browser": "^18.2.3", + "@angular/platform-browser-dynamic": "^18.2.3", + "@angular/router": "^18.2.3", "@ngx-grpc/common": "^3.1.2", "@ngx-grpc/core": "^3.1.2", "@ngx-grpc/grpc-web-client": "^3.1.2", @@ -46,10 +46,10 @@ "@angular-eslint/eslint-plugin-template": "18.3.0", "@angular-eslint/schematics": "18.3.0", "@angular-eslint/template-parser": "18.3.0", - "@angular/build": "^18.2.2", - "@angular/cli": "~18.2.2", - "@angular/compiler-cli": "^18.2.2", - "@angular/localize": "18.2.2", + "@angular/build": "^18.2.3", + "@angular/cli": "~18.2.3", + "@angular/compiler-cli": "^18.2.3", + "@angular/localize": "18.2.3", "@types/google-protobuf": "^3.15.12", "@types/jest": "^29.5.12", "@types/luxon": "^3.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7692c2693..b8b7b3abf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,53 +9,53 @@ importers: .: dependencies: '@aneoconsultingfr/armonik.api.angular': - specifier: ^3.19.0 - version: 3.19.0(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(@ngx-grpc/core@3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1))(@ngx-grpc/well-known-types@3.1.2(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(google-protobuf@3.21.2))(google-protobuf@3.21.2)(rxjs@7.8.1) + specifier: ^3.20.0 + version: 3.20.0(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(@ngx-grpc/core@3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1))(@ngx-grpc/well-known-types@3.1.2(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(google-protobuf@3.21.2))(google-protobuf@3.21.2)(rxjs@7.8.1) '@angular-material-components/datetime-picker': specifier: ^16.0.1 - version: 16.0.1(onev572q4wwwfvpfxy5l6pzm7i) + version: 16.0.1(ufrbrx3ry7f6id6rle6zpka27i) '@angular/animations': - specifier: ^18.2.2 - version: 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + specifier: ^18.2.3 + version: 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) '@angular/cdk': - specifier: 18.2.2 - version: 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + specifier: 18.2.3 + version: 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) '@angular/common': - specifier: ^18.2.2 - version: 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + specifier: ^18.2.3 + version: 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) '@angular/compiler': - specifier: ^18.2.2 - version: 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + specifier: ^18.2.3 + version: 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) '@angular/core': - specifier: ^18.2.2 - version: 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + specifier: ^18.2.3 + version: 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) '@angular/forms': - specifier: ^18.2.2 - version: 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) + specifier: ^18.2.3 + version: 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) '@angular/material': - specifier: 18.2.2 - version: 18.2.2(ep7nl4zdcm22skyf6use7ozi3e) + specifier: 18.2.3 + version: 18.2.3(fj5wxh57x3lefnixs66ah4cxny) '@angular/material-luxon-adapter': - specifier: ^18.2.2 - version: 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/material@18.2.2(ep7nl4zdcm22skyf6use7ozi3e))(luxon@3.4.4) + specifier: ^18.2.3 + version: 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/material@18.2.3(fj5wxh57x3lefnixs66ah4cxny))(luxon@3.4.4) '@angular/platform-browser': - specifier: ^18.2.2 - version: 18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + specifier: ^18.2.3 + version: 18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) '@angular/platform-browser-dynamic': - specifier: ^18.2.2 - version: 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))) + specifier: ^18.2.3 + version: 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))) '@angular/router': - specifier: ^18.2.2 - version: 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) + specifier: ^18.2.3 + version: 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) '@ngx-grpc/common': specifier: ^3.1.2 version: 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) '@ngx-grpc/core': specifier: ^3.1.2 - version: 3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1) + version: 3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1) '@ngx-grpc/grpc-web-client': specifier: ^3.1.2 - version: 3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(@ngx-grpc/core@3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1))(grpc-web@1.4.2)(rxjs@7.8.1) + version: 3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(@ngx-grpc/core@3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1))(grpc-web@1.4.2)(rxjs@7.8.1) '@ungap/structured-clone': specifier: ^1.2.0 version: 1.2.0 @@ -83,22 +83,22 @@ importers: version: 18.3.0(@typescript-eslint/utils@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@angular-eslint/schematics': specifier: 18.3.0 - version: 18.3.0(@angular-devkit/core@18.2.2(chokidar@3.6.0))(@angular-devkit/schematics@18.2.2(chokidar@3.6.0))(@typescript-eslint/utils@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + version: 18.3.0(@angular-devkit/core@18.2.3(chokidar@3.6.0))(@angular-devkit/schematics@18.2.3(chokidar@3.6.0))(@typescript-eslint/utils@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@angular-eslint/template-parser': specifier: 18.3.0 version: 18.3.0(eslint@8.57.0)(typescript@5.4.5) '@angular/build': - specifier: ^18.2.2 - version: 18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(terser@5.31.0)(typescript@5.4.5) + specifier: ^18.2.3 + version: 18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(terser@5.31.0)(typescript@5.4.5) '@angular/cli': - specifier: ~18.2.2 - version: 18.2.2(chokidar@3.6.0) + specifier: ~18.2.3 + version: 18.2.3(chokidar@3.6.0) '@angular/compiler-cli': - specifier: ^18.2.2 - version: 18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) + specifier: ^18.2.3 + version: 18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) '@angular/localize': - specifier: 18.2.2 - version: 18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))) + specifier: 18.2.3 + version: 18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))) '@types/google-protobuf': specifier: ^3.15.12 version: 3.15.12 @@ -140,13 +140,13 @@ importers: version: 29.7.0 jest-preset-angular: specifier: ^14.1.0 - version: 14.1.0(sqqqe2klamwycl6b424csa6whu) + version: 14.1.0(szctdbx45ebb2ckvfqbtda3g2y) ng-extract-i18n-merge: specifier: 2.12.0 - version: 2.12.0(@angular-devkit/build-angular@18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5))(chokidar@3.6.0) + version: 2.12.0(@angular-devkit/build-angular@18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5))(chokidar@3.6.0) ts-jest: specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(esbuild@0.20.1)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.20.1)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: ^10.9.2 version: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) @@ -164,11 +164,11 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@aneoconsultingfr/armonik.api.angular@3.19.0': - resolution: {integrity: sha512-2xuWp6u1GgJ+U6X0wR92yEtljXq4euSuo9cIMA3fYX5gSmCsl5ad+3pgsy0Hb2AuvDQWSzwNvo/82+DAQrPcqQ==} + '@aneoconsultingfr/armonik.api.angular@3.20.0': + resolution: {integrity: sha512-DATS5lD+Z8/v2S6wnwT+qJHcYIjWBY+zUASgR8eD/BAGUWMb9cmBhlnoElozD0hjfd+Ea+hXl5Tcgz6JyWyDkw==} peerDependencies: - '@angular/common': ^16.2.1 - '@angular/core': ^16.2.1 + '@angular/common': ^18.2.1 + '@angular/core': ^18.2.1 '@ngx-grpc/common': ^3.1.2 '@ngx-grpc/core': ^3.1.2 '@ngx-grpc/well-known-types': ^3.1.2 @@ -183,8 +183,8 @@ packages: resolution: {integrity: sha512-PX7lCTAqWe9C40+fie+DAc8vhpGA+JgZKWWrMHUTV/iZx8RXx2X4xGQsqYu36p4i3MSfQdbn+0xLWGmjScPVOQ==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/architect@0.1802.2': - resolution: {integrity: sha512-LPRl9jhcf0NgshaL6RoUy1uL/cAyNt7oxctoZ9EHUu8eh5E9W/jZGhVowjOLpirwqYhmEzKJJIeS49Ssqs3RQg==} + '@angular-devkit/architect@0.1802.3': + resolution: {integrity: sha512-WQ2AmkUKy1bqrDlNfozW8+VT2Tv/Fdmu4GIXps3ytZANyAKiIvTzmmql2cRCXXraa9FNMjLWNvz+qolDxWVdYQ==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@angular-devkit/build-angular@18.0.2': @@ -262,8 +262,8 @@ packages: chokidar: optional: true - '@angular-devkit/core@18.2.2': - resolution: {integrity: sha512-Zz0tGptI/QQnUBDdp+1G5wGwQWMjpfe2oO+UohkrDVgFS71yVj4VDnOy51kMTxBvzw+36evTgthPpmzqPIfxBw==} + '@angular-devkit/core@18.2.3': + resolution: {integrity: sha512-vbFs+ofNK9OWeMIcFarFjegXVklhtSdLTEFKZ9trDVr8alTJdjI9AiYa6OOUTDAyq0hqYxV26xlCisWAPe7s5w==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: chokidar: ^3.5.2 @@ -275,8 +275,8 @@ packages: resolution: {integrity: sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==} engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/schematics@18.2.2': - resolution: {integrity: sha512-PU6+3nX+gQ3gofR7BGwXuvNUNeeV2raURaZjlPfGpBqjyTBxukMV71QsTTWptAZT4WibCWkTFp6X1gvsOGbjMg==} + '@angular-devkit/schematics@18.2.3': + resolution: {integrity: sha512-N3tRAzBW2yWQhebvc1Ha18XTMSXOQTfr8HNjx7Fasx0Fg1tNyGR612MJNZw6je/PqyItKeUHOhztvFMfCQjRyg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@angular-eslint/builder@18.3.0': @@ -331,11 +331,11 @@ packages: '@angular/material': ^16.0.0 '@angular/platform-browser': ^16.0.0 - '@angular/animations@18.2.2': - resolution: {integrity: sha512-jh/dGrY77HGm54HdTiQsxmvoRfFeJgHeWAK2+nWCPoc4b7OHcWxy/04cYffs0/27ThmABmppP7ERAyZ0f60uow==} + '@angular/animations@18.2.3': + resolution: {integrity: sha512-rIATopHr83lYR0X05buHeHssq9CGw0I0YPIQcpUTGnlqIpJcQVCf7jCFn4KGZrE9V55hFY3MD4S28njlwCToQQ==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/core': 18.2.2 + '@angular/core': 18.2.3 '@angular/build@18.0.2': resolution: {integrity: sha512-iPPHdAJ3LiR8t/+39xjvrqMWcTmRrfphzKxXoIVDcswQjVQIk00EYuxinC6EVa7dSKDl1thk1MeCNZ9DIjaAvQ==} @@ -363,8 +363,8 @@ packages: tailwindcss: optional: true - '@angular/build@18.2.2': - resolution: {integrity: sha512-okaDdTMXnDhvnnnih6rPQnexL6htfEAPr19bB1Ci9d31gEjVuKZCjlcw2sPZ6BUyilwC9nZlCI5vbH1Ljf6mzA==} + '@angular/build@18.2.3': + resolution: {integrity: sha512-USrD2Zvcb1te2dnqhH7JZ5XeJDg/t7fjUHR4f93vvMrnrncwCjLoHbHpz01HCHfcIVRgsYUdAmAi1iG7vpak7w==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler-cli': ^18.0.0 @@ -389,121 +389,117 @@ packages: tailwindcss: optional: true - '@angular/cdk@18.2.2': - resolution: {integrity: sha512-+u7ZcMA24WO03vDzlBJJWq+okZLFDeW9JrtHzrdiT09FDt4sdUp+7PddXaZcRHIXjJL+CaCLQ6slaqPNEufqgg==} + '@angular/cdk@18.2.3': + resolution: {integrity: sha512-lUcpYTxPZuntJ1FK7V2ugapCGMIhT6TUDjIGgXfS9AxGSSKgwr8HNs6Ze9pcjYC44UhP40sYAZuiaFwmE60A2A==} peerDependencies: '@angular/common': ^18.0.0 || ^19.0.0 '@angular/core': ^18.0.0 || ^19.0.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/cli@18.2.2': - resolution: {integrity: sha512-HVVaMxnbID0q+V3KE+JqzGbPHcBUFo1RKhBZ/jxY7USZNzgtyYbRc0IYqPWNdr99UT5QefTJrjVazJo1nqQZvQ==} + '@angular/cli@18.2.3': + resolution: {integrity: sha512-40258vuliH6+p8QSByZe5EcIXSj0iR3PNF6yuusClR/ByToHOnmuPw7WC+AYr0ooozmqlim/EjQe4/037OUB3w==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular/common@18.2.2': - resolution: {integrity: sha512-AQe4xnnNNch/sXRnV82C8FmhijxPATKfPGojC2qbAG2o6VkWKgt5Lbj0O8WxvSIOS5Syedv+O2kLY/JMGWHNtw==} + '@angular/common@18.2.3': + resolution: {integrity: sha512-NFL4yXXImSCH7i1xnHykUjHa9vl9827fGiwSV2mnf7LjSUsyDzFD8/54dNuYN9OY8AUD+PnK0YdNro6cczVyIA==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/core': 18.2.2 + '@angular/core': 18.2.3 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@18.2.2': - resolution: {integrity: sha512-fF7lDrTA12YGqVjF4LyMi4hm58cv9G6CWmzSlvun0nMYCwrbRNnakZsj19dOfiIqqu4MwHaF4w3PTmUSxkMuiw==} + '@angular/compiler-cli@18.2.3': + resolution: {integrity: sha512-BcmqYKnkcJTkGjuPztClZNQve7tdI290J5F3iZBx6c7/vaw8EU8EGZtpWYZpgiVn5S6jhcKyc1dLF9ggO9vftg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} hasBin: true peerDependencies: - '@angular/compiler': 18.2.2 + '@angular/compiler': 18.2.3 typescript: '>=5.4 <5.6' - '@angular/compiler@18.2.2': - resolution: {integrity: sha512-gmVNCXZiv/CIk2eKRLnH19N9VsPuE2s3Oxm0MNi003zk1cLy7D4YEm4fSrjKXtPY8MMpRXiu5f63W94hLwWEVw==} + '@angular/compiler@18.2.3': + resolution: {integrity: sha512-Il3ljs0j1GaYoqYFdShjUP1ryck5xTOaA8uQuRgqwU0FOwEDfugSAM3Qf7nJx/sgxTM0Lm/Nrdv2u6i1gZWeuQ==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/core': 18.2.2 + '@angular/core': 18.2.3 peerDependenciesMeta: '@angular/core': optional: true - '@angular/core@18.2.2': - resolution: {integrity: sha512-Rx6XajL0Ydj9hXUSPDvL2Q/kMzWtbiE3VxZFJnkE+fLQiWvr0GncB+NTb/nQ6QlPQ0ly60DvuI3KLcGDuFtGVA==} + '@angular/core@18.2.3': + resolution: {integrity: sha512-VGhMJxj7d0rYpqVfQrcGRB7EE/BCziotft/I/YPl6bOMPSAvMukG7DXQuJdYpNrr62ks78mlzHlZX/cdmB9Prw==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.14.10 - '@angular/forms@18.2.2': - resolution: {integrity: sha512-K8cv0w6o7+ocQfUrdSA3XaKrYfa1+2TlmtyxPHjEd2mCu2R+Yqo5RqJ3P8keFewJ1+bSLhz6xnn6mumwl0RnUQ==} + '@angular/forms@18.2.3': + resolution: {integrity: sha512-+OBaAH0e8hue9eyLnbgpxg1/X9fps6bwXECfJ0nL5BDPU5itZ428YJbEnj5bTx0hEbqfTRiV4LgexdI+D9eOpw==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 18.2.2 - '@angular/core': 18.2.2 - '@angular/platform-browser': 18.2.2 + '@angular/common': 18.2.3 + '@angular/core': 18.2.3 + '@angular/platform-browser': 18.2.3 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@18.2.2': - resolution: {integrity: sha512-grWQ3CVbizOWCthGpyIlNNnZCpF/xpWYa6tIsPzKOXLCyqFQ7vOEtSludNN1nsUmMlZQt76+wA17Fx0qcNx0EA==} + '@angular/localize@18.2.3': + resolution: {integrity: sha512-ZTliuRfH/hGwQTmFb1FwKOyMUks2ATuFVFzKnxbsxoo+XgTg+e12FcUfPEfdtPAteZ9gSuc/9hP8sM0RzW0LPg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} hasBin: true peerDependencies: - '@angular/compiler': 18.2.2 - '@angular/compiler-cli': 18.2.2 + '@angular/compiler': 18.2.3 + '@angular/compiler-cli': 18.2.3 - '@angular/material-luxon-adapter@18.2.2': - resolution: {integrity: sha512-Qpc5UBuefDK1mjbEd4mZGzwQ0KBi/uKLQpEp0aSSxRKO9lKSdCejZGboQFDpxiIJlagEB1XY+ZqpNVwcjUc7qA==} + '@angular/material-luxon-adapter@18.2.3': + resolution: {integrity: sha512-9oIeHWxqjyXszNqD2tH+A7p1pOLdGBWYZqB8Db+CokfZSL3bHmEE9+bYhq+yX92K8RZNByaf70QIJkhIb9TRuA==} peerDependencies: '@angular/core': ^18.0.0 || ^19.0.0 - '@angular/material': 18.2.2 + '@angular/material': 18.2.3 luxon: ^3.0.0 - '@angular/material@18.2.2': - resolution: {integrity: sha512-c+EQo1GEvM2w3qasgV/BGxB0bpJeSGs2WcMVTXCYVMcqEk8nwpALwfZiCAYl8JoKoiC5k993zz19xP2Eu14qkQ==} + '@angular/material@18.2.3': + resolution: {integrity: sha512-JFfvXaMHMhskncaxxus4sDvie9VYdMkfYgfinkLXpZlPFyn1IzjDw0c1BcrcsuD7UxQVZ/v5tucCgq1FQfGRpA==} peerDependencies: '@angular/animations': ^18.0.0 || ^19.0.0 - '@angular/cdk': 18.2.2 + '@angular/cdk': 18.2.3 '@angular/common': ^18.0.0 || ^19.0.0 '@angular/core': ^18.0.0 || ^19.0.0 '@angular/forms': ^18.0.0 || ^19.0.0 '@angular/platform-browser': ^18.0.0 || ^19.0.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/platform-browser-dynamic@18.2.2': - resolution: {integrity: sha512-UM/+1nY4iIj1v4lxAmV3XRHPAh/4qfNKScCLq8tJGot64rPCbtCl0Rl8rFFGqxAFvTErVDaJycUgWNZSfVl/hw==} + '@angular/platform-browser-dynamic@18.2.3': + resolution: {integrity: sha512-nWi9ZxN4KpbJkttIckFO1PCoW0+gb/18xFO+JWyLBAtcbsudj/Mv0P/fdOaSfQdLkPhZfORr3ZcfiTkhmuGyEg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 18.2.2 - '@angular/compiler': 18.2.2 - '@angular/core': 18.2.2 - '@angular/platform-browser': 18.2.2 + '@angular/common': 18.2.3 + '@angular/compiler': 18.2.3 + '@angular/core': 18.2.3 + '@angular/platform-browser': 18.2.3 - '@angular/platform-browser@18.2.2': - resolution: {integrity: sha512-Bfvl8elCFxyJ9vlwamr4X5sVMcp/tSwBal2coyl0WR+/PH2PAAtf+/WMYxIN90yZmPiJx6RZWUSJRlHOFiFp3A==} + '@angular/platform-browser@18.2.3': + resolution: {integrity: sha512-M2ob4zN7tAcL2mx7U6KnZNqNFPFl9MlPBE0FrjQjIzAjU0wSYPIJXmaPu9aMUp9niyo+He5iX98I+URi2Yc99g==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/animations': 18.2.2 - '@angular/common': 18.2.2 - '@angular/core': 18.2.2 + '@angular/animations': 18.2.3 + '@angular/common': 18.2.3 + '@angular/core': 18.2.3 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/router@18.2.2': - resolution: {integrity: sha512-tBHwuNtZNjzYAoVdveTI1ke/ZnQjKhc7gqDk9HCH2JUpdQhGbTvCKwDM51ktJpPMPcZlA263lQyy7VIyvdtK0A==} + '@angular/router@18.2.3': + resolution: {integrity: sha512-fvD9eSDIiIbeYoUokoWkXzu7/ZaxlzKPUHFqX1JuKuH5ciQDeT/d7lp4mj31Bxammhohzi3+z12THJYsCkj/iQ==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 18.2.2 - '@angular/core': 18.2.2 - '@angular/platform-browser': 18.2.2 + '@angular/common': 18.2.3 + '@angular/core': 18.2.3 + '@angular/platform-browser': 18.2.3 rxjs: ^6.5.3 || ^7.4.0 '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.4': resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} @@ -512,10 +508,6 @@ packages: resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} - engines: {node: '>=6.9.0'} - '@babel/core@7.25.2': resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} @@ -524,10 +516,6 @@ packages: resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.25.6': resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} @@ -544,10 +532,6 @@ packages: resolution: {integrity: sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.2': resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} @@ -589,12 +573,6 @@ packages: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.25.2': resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} @@ -637,10 +615,6 @@ packages: resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} @@ -649,10 +623,6 @@ packages: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} @@ -661,10 +631,6 @@ packages: resolution: {integrity: sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.6': resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} @@ -673,11 +639,6 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.25.6': resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} @@ -1138,26 +1099,14 @@ packages: resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.6': resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} @@ -1782,10 +1731,6 @@ packages: resolution: {integrity: sha512-wTZOBkzH+ItPuZ3ZPa9lynBsdMp6kQ9zbjVPYEtSBG7UulGjg2kQiAnUjgyG4SlntpTce5bOmXAPvE4sguXjpA==} engines: {node: '>=18'} - '@inquirer/figures@1.0.3': - resolution: {integrity: sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==} - engines: {node: '>=18'} - '@inquirer/figures@1.0.5': resolution: {integrity: sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==} engines: {node: '>=18'} @@ -1915,9 +1860,6 @@ packages: '@jridgewell/source-map@0.3.3': resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -2141,161 +2083,81 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/rollup-android-arm-eabi@4.18.0': - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.20.0': resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.0': - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.20.0': resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.0': - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.20.0': resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.0': - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.20.0': resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.20.0': resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.20.0': resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.0': - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.20.0': resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.0': - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.20.0': resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.20.0': resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.0': - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} - cpu: [s390x] - os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.20.0': resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.0': - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-gnu@4.20.0': resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.0': - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.20.0': resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.0': - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.20.0': resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.0': - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.20.0': resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.0': - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.20.0': resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} cpu: [x64] @@ -2305,8 +2167,8 @@ packages: resolution: {integrity: sha512-2g4OmSyE9YGq50Uj7fNI26P/TSAFJ7ZuirwTF2O7Xc4XRQ29/tYIIqhezpNlTb6rlYblcQuMcUZBrMfWJHcqJw==} engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@schematics/angular@18.2.2': - resolution: {integrity: sha512-0uPA1kQ38RnbNrzMlveX/QAqQIDu2INl5IYd3EUbJZRfYSp1VVyOSyuIBJ+1iUl5Y5VUa2uylaVZXhFdKWprXw==} + '@schematics/angular@18.2.3': + resolution: {integrity: sha512-whSON70z9HYb4WboVXmPFE/RLKJJQLWNzNcUyi8OSDZkQbJnYgPp0///n738m26Y/XeJDv11q1gESy+Zl2AdUw==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@sigstore/bundle@2.3.2': @@ -2742,9 +2604,6 @@ packages: ajv@8.13.0: resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} - ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} - ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -2940,11 +2799,6 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.23.3: resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3016,9 +2870,6 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001627: - resolution: {integrity: sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==} - caniuse-lite@1.0.30001653: resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} @@ -3434,9 +3285,6 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.4.701: - resolution: {integrity: sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA==} - electron-to-chromium@1.5.13: resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} @@ -4962,9 +4810,6 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -5511,11 +5356,6 @@ packages: engines: {node: '>=14.18'} hasBin: true - rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.20.0: resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -6112,12 +5952,6 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - update-browserslist-db@1.1.0: resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true @@ -6438,12 +6272,12 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@aneoconsultingfr/armonik.api.angular@3.19.0(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(@ngx-grpc/core@3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1))(@ngx-grpc/well-known-types@3.1.2(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(google-protobuf@3.21.2))(google-protobuf@3.21.2)(rxjs@7.8.1)': + '@aneoconsultingfr/armonik.api.angular@3.20.0(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(@ngx-grpc/core@3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1))(@ngx-grpc/well-known-types@3.1.2(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(google-protobuf@3.21.2))(google-protobuf@3.21.2)(rxjs@7.8.1)': dependencies: - '@angular/common': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/common': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) '@ngx-grpc/common': 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) - '@ngx-grpc/core': 3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1) + '@ngx-grpc/core': 3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1) '@ngx-grpc/well-known-types': 3.1.2(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(google-protobuf@3.21.2) google-protobuf: 3.21.2 rxjs: 7.8.1 @@ -6463,21 +6297,21 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/architect@0.1802.2(chokidar@3.6.0)': + '@angular-devkit/architect@0.1802.3(chokidar@3.6.0)': dependencies: - '@angular-devkit/core': 18.2.2(chokidar@3.6.0) + '@angular-devkit/core': 18.2.3(chokidar@3.6.0) rxjs: 7.8.1 transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5)': + '@angular-devkit/build-angular@18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1800.2(chokidar@3.6.0) '@angular-devkit/build-webpack': 0.1800.2(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.91.0(esbuild@0.21.3)))(webpack@5.91.0(esbuild@0.21.3)) '@angular-devkit/core': 18.0.2(chokidar@3.6.0) - '@angular/build': 18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(terser@5.31.0)(typescript@5.4.5) - '@angular/compiler-cli': 18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) + '@angular/build': 18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(terser@5.31.0)(typescript@5.4.5) + '@angular/compiler-cli': 18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) '@babel/core': 7.24.5 '@babel/generator': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 @@ -6488,7 +6322,7 @@ snapshots: '@babel/preset-env': 7.24.5(@babel/core@7.24.5) '@babel/runtime': 7.24.5 '@discoveryjs/json-ext': 0.5.7 - '@ngtools/webpack': 18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(typescript@5.4.5)(webpack@5.91.0(esbuild@0.21.3)) + '@ngtools/webpack': 18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(typescript@5.4.5)(webpack@5.91.0(esbuild@0.21.3)) '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.2.11(@types/node@20.12.7)(less@4.2.0)(sass@1.77.2)(terser@5.31.0)) ansi-colors: 4.1.3 autoprefixer: 10.4.19(postcss@8.4.38) @@ -6539,7 +6373,7 @@ snapshots: webpack-merge: 5.10.0 webpack-subresource-integrity: 5.1.0(webpack@5.91.0(esbuild@0.21.3)) optionalDependencies: - '@angular/localize': 18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))) + '@angular/localize': 18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))) esbuild: 0.21.3 jest: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) jest-environment-jsdom: 29.7.0 @@ -6603,7 +6437,7 @@ snapshots: optionalDependencies: chokidar: 3.6.0 - '@angular-devkit/core@18.2.2(chokidar@3.6.0)': + '@angular-devkit/core@18.2.3(chokidar@3.6.0)': dependencies: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -6624,9 +6458,9 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/schematics@18.2.2(chokidar@3.6.0)': + '@angular-devkit/schematics@18.2.3(chokidar@3.6.0)': dependencies: - '@angular-devkit/core': 18.2.2(chokidar@3.6.0) + '@angular-devkit/core': 18.2.3(chokidar@3.6.0) jsonc-parser: 3.3.1 magic-string: 0.30.11 ora: 5.4.1 @@ -6659,10 +6493,10 @@ snapshots: eslint: 8.57.0 typescript: 5.4.5 - '@angular-eslint/schematics@18.3.0(@angular-devkit/core@18.2.2(chokidar@3.6.0))(@angular-devkit/schematics@18.2.2(chokidar@3.6.0))(@typescript-eslint/utils@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@angular-eslint/schematics@18.3.0(@angular-devkit/core@18.2.3(chokidar@3.6.0))(@angular-devkit/schematics@18.2.3(chokidar@3.6.0))(@typescript-eslint/utils@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@angular-devkit/core': 18.2.2(chokidar@3.6.0) - '@angular-devkit/schematics': 18.2.2(chokidar@3.6.0) + '@angular-devkit/core': 18.2.3(chokidar@3.6.0) + '@angular-devkit/schematics': 18.2.3(chokidar@3.6.0) '@angular-eslint/eslint-plugin': 18.3.0(@typescript-eslint/utils@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@angular-eslint/eslint-plugin-template': 18.3.0(@typescript-eslint/utils@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) ignore: 5.3.2 @@ -6687,26 +6521,26 @@ snapshots: eslint: 8.57.0 typescript: 5.4.5 - '@angular-material-components/datetime-picker@16.0.1(onev572q4wwwfvpfxy5l6pzm7i)': + '@angular-material-components/datetime-picker@16.0.1(ufrbrx3ry7f6id6rle6zpka27i)': dependencies: - '@angular/cdk': 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/common': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) - '@angular/forms': 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) - '@angular/material': 18.2.2(ep7nl4zdcm22skyf6use7ozi3e) - '@angular/platform-browser': 18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/cdk': 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/common': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/forms': 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) + '@angular/material': 18.2.3(fj5wxh57x3lefnixs66ah4cxny) + '@angular/platform-browser': 18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) tslib: 2.6.2 - '@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))': + '@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))': dependencies: - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) tslib: 2.6.2 - '@angular/build@18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(terser@5.31.0)(typescript@5.4.5)': + '@angular/build@18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(terser@5.31.0)(typescript@5.4.5)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1800.2(chokidar@3.6.0) - '@angular/compiler-cli': 18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) + '@angular/compiler-cli': 18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-split-export-declaration': 7.24.5 @@ -6732,7 +6566,7 @@ snapshots: vite: 5.2.11(@types/node@20.12.7)(less@4.2.0)(sass@1.77.2)(terser@5.31.0) watchpack: 2.4.1 optionalDependencies: - '@angular/localize': 18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))) + '@angular/localize': 18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))) less: 4.2.0 postcss: 8.4.38 transitivePeerDependencies: @@ -6744,18 +6578,18 @@ snapshots: - supports-color - terser - '@angular/build@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(terser@5.31.0)(typescript@5.4.5)': + '@angular/build@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(terser@5.31.0)(typescript@5.4.5)': dependencies: '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.1802.2(chokidar@3.6.0) - '@angular/compiler-cli': 18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) + '@angular-devkit/architect': 0.1802.3(chokidar@3.6.0) + '@angular/compiler-cli': 18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.25.2) '@inquirer/confirm': 3.1.22 '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.4.0(@types/node@20.12.7)(less@4.2.0)(sass@1.77.6)(terser@5.31.0)) - browserslist: 4.23.0 + browserslist: 4.23.3 critters: 0.0.24 esbuild: 0.23.0 fast-glob: 3.3.2 @@ -6774,7 +6608,7 @@ snapshots: vite: 5.4.0(@types/node@20.12.7)(less@4.2.0)(sass@1.77.6)(terser@5.31.0) watchpack: 2.4.1 optionalDependencies: - '@angular/localize': 18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))) + '@angular/localize': 18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))) less: 4.2.0 postcss: 8.4.38 transitivePeerDependencies: @@ -6787,23 +6621,23 @@ snapshots: - supports-color - terser - '@angular/cdk@18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1)': + '@angular/cdk@18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1)': dependencies: - '@angular/common': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/common': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) rxjs: 7.8.1 tslib: 2.6.2 optionalDependencies: parse5: 7.1.2 - '@angular/cli@18.2.2(chokidar@3.6.0)': + '@angular/cli@18.2.3(chokidar@3.6.0)': dependencies: - '@angular-devkit/architect': 0.1802.2(chokidar@3.6.0) - '@angular-devkit/core': 18.2.2(chokidar@3.6.0) - '@angular-devkit/schematics': 18.2.2(chokidar@3.6.0) + '@angular-devkit/architect': 0.1802.3(chokidar@3.6.0) + '@angular-devkit/core': 18.2.3(chokidar@3.6.0) + '@angular-devkit/schematics': 18.2.3(chokidar@3.6.0) '@inquirer/prompts': 5.3.8 '@listr2/prompt-adapter-inquirer': 2.0.15(@inquirer/prompts@5.3.8) - '@schematics/angular': 18.2.2(chokidar@3.6.0) + '@schematics/angular': 18.2.3(chokidar@3.6.0) '@yarnpkg/lockfile': 1.1.0 ini: 4.1.3 jsonc-parser: 3.3.1 @@ -6820,51 +6654,51 @@ snapshots: - chokidar - supports-color - '@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1)': + '@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1)': dependencies: - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) rxjs: 7.8.1 tslib: 2.6.2 - '@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5)': + '@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5)': dependencies: - '@angular/compiler': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/compiler': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) '@babel/core': 7.25.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 chokidar: 3.6.0 convert-source-map: 1.9.0 reflect-metadata: 0.2.2 - semver: 7.6.2 + semver: 7.6.3 tslib: 2.6.2 typescript: 5.4.5 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))': + '@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))': dependencies: tslib: 2.6.2 optionalDependencies: - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) - '@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)': + '@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)': dependencies: rxjs: 7.8.1 tslib: 2.6.2 zone.js: 0.14.4 - '@angular/forms@18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1)': + '@angular/forms@18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1)': dependencies: - '@angular/common': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) - '@angular/platform-browser': 18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/common': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/platform-browser': 18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) rxjs: 7.8.1 tslib: 2.6.2 - '@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))': + '@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))': dependencies: - '@angular/compiler': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) - '@angular/compiler-cli': 18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) + '@angular/compiler': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/compiler-cli': 18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) '@babel/core': 7.25.2 '@types/babel__core': 7.20.5 fast-glob: 3.3.2 @@ -6872,45 +6706,45 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material-luxon-adapter@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/material@18.2.2(ep7nl4zdcm22skyf6use7ozi3e))(luxon@3.4.4)': + '@angular/material-luxon-adapter@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/material@18.2.3(fj5wxh57x3lefnixs66ah4cxny))(luxon@3.4.4)': dependencies: - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) - '@angular/material': 18.2.2(ep7nl4zdcm22skyf6use7ozi3e) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/material': 18.2.3(fj5wxh57x3lefnixs66ah4cxny) luxon: 3.4.4 tslib: 2.6.2 - '@angular/material@18.2.2(ep7nl4zdcm22skyf6use7ozi3e)': + '@angular/material@18.2.3(fj5wxh57x3lefnixs66ah4cxny)': dependencies: - '@angular/animations': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) - '@angular/cdk': 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/common': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) - '@angular/forms': 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) - '@angular/platform-browser': 18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/animations': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/cdk': 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/common': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/forms': 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1) + '@angular/platform-browser': 18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) rxjs: 7.8.1 tslib: 2.6.2 - '@angular/platform-browser-dynamic@18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))': + '@angular/platform-browser-dynamic@18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))': dependencies: - '@angular/common': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/compiler': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) - '@angular/platform-browser': 18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/common': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/compiler': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/platform-browser': 18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) tslib: 2.6.2 - '@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))': + '@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))': dependencies: - '@angular/common': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/common': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) tslib: 2.6.2 optionalDependencies: - '@angular/animations': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/animations': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) - '@angular/router@18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1)': + '@angular/router@18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(rxjs@7.8.1)': dependencies: - '@angular/common': 18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) - '@angular/platform-browser': 18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)) + '@angular/common': 18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/platform-browser': 18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)) rxjs: 7.8.1 tslib: 2.6.2 @@ -6919,42 +6753,20 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/compat-data@7.24.7': {} - '@babel/compat-data@7.25.4': {} '@babel/core@7.24.5': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.5) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/core@7.24.7': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -6985,14 +6797,7 @@ snapshots: '@babel/generator@7.24.5': dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/generator@7.24.7': - dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -7006,23 +6811,15 @@ snapshots: '@babel/helper-annotate-as-pure@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.6': dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-compilation-targets@7.24.7': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 + '@babel/types': 7.25.6 '@babel/helper-compilation-targets@7.25.2': dependencies: @@ -7055,7 +6852,7 @@ snapshots: '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -7065,20 +6862,20 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@babel/helper-function-name@7.24.7': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@babel/helper-member-expression-to-functions@7.24.6': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@babel/helper-module-imports@7.24.7': dependencies: @@ -7087,25 +6884,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.5)': + '@babel/helper-module-transforms@7.25.2(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 transitivePeerDependencies: - supports-color @@ -7121,7 +6906,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.6': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@babel/helper-plugin-utils@7.24.7': {} @@ -7148,36 +6933,27 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.24.6': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@babel/helper-split-export-declaration@7.24.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} + '@babel/types': 7.25.6 '@babel/helper-string-parser@7.24.8': {} '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-option@7.24.7': {} - '@babel/helper-validator-option@7.24.8': {} '@babel/helper-wrap-function@7.24.6': dependencies: '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helpers@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 '@babel/helpers@7.25.6': dependencies: @@ -7191,10 +6967,6 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.24.7 - '@babel/parser@7.25.6': dependencies: '@babel/types': 7.25.6 @@ -7232,14 +7004,14 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5)': @@ -7247,9 +7019,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5)': @@ -7287,9 +7059,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5)': @@ -7297,14 +7069,14 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.24.7)': + '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5)': @@ -7312,9 +7084,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5)': @@ -7322,9 +7094,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5)': @@ -7332,9 +7104,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5)': @@ -7342,9 +7114,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5)': @@ -7352,9 +7124,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5)': @@ -7362,9 +7134,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5)': @@ -7377,14 +7149,14 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.24.7)': + '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5)': @@ -7442,7 +7214,7 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 @@ -7454,7 +7226,7 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/template': 7.24.7 + '@babel/template': 7.25.0 '@babel/plugin-transform-destructuring@7.24.6(@babel/core@7.24.5)': dependencies: @@ -7499,7 +7271,7 @@ snapshots: '@babel/plugin-transform-function-name@7.24.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-function-name': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 @@ -7528,7 +7300,7 @@ snapshots: '@babel/plugin-transform-modules-amd@7.24.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.5) + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.7 transitivePeerDependencies: - supports-color @@ -7536,7 +7308,7 @@ snapshots: '@babel/plugin-transform-modules-commonjs@7.24.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.5) + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.7 '@babel/helper-simple-access': 7.24.7 transitivePeerDependencies: @@ -7546,7 +7318,7 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.5) + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: @@ -7555,7 +7327,7 @@ snapshots: '@babel/plugin-transform-modules-umd@7.24.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.5) + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.7 transitivePeerDependencies: - supports-color @@ -7586,7 +7358,7 @@ snapshots: '@babel/plugin-transform-object-rest-spread@7.24.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) '@babel/plugin-transform-parameters': 7.24.6(@babel/core@7.24.5) @@ -7708,11 +7480,11 @@ snapshots: '@babel/preset-env@7.24.5(@babel/core@7.24.5)': dependencies: - '@babel/compat-data': 7.24.7 + '@babel/compat-data': 7.25.4 '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 + '@babel/helper-validator-option': 7.24.8 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.6(@babel/core@7.24.5) '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.6(@babel/core@7.24.5) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.6(@babel/core@7.24.5) @@ -7797,7 +7569,7 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 esutils: 2.0.3 '@babel/regjsgen@0.8.0': {} @@ -7806,33 +7578,12 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.6 '@babel/types': 7.25.6 - '@babel/traverse@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.25.6': dependencies: '@babel/code-frame': 7.24.7 @@ -7845,12 +7596,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.24.7': - dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - '@babel/types@7.25.6': dependencies: '@babel/helper-string-parser': 7.24.8 @@ -8220,8 +7965,6 @@ snapshots: '@inquirer/type': 1.5.2 yoctocolors-cjs: 2.1.2 - '@inquirer/figures@1.0.3': {} - '@inquirer/figures@1.0.5': {} '@inquirer/input@2.2.9': @@ -8432,7 +8175,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -8462,7 +8205,7 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.0': {} @@ -8474,19 +8217,17 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jsdevtools/ez-spawn@3.0.4': dependencies: @@ -8576,9 +8317,9 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2': optional: true - '@ngtools/webpack@18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(typescript@5.4.5)(webpack@5.91.0(esbuild@0.21.3))': + '@ngtools/webpack@18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(typescript@5.4.5)(webpack@5.91.0(esbuild@0.21.3))': dependencies: - '@angular/compiler-cli': 18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) + '@angular/compiler-cli': 18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) typescript: 5.4.5 webpack: 5.91.0(esbuild@0.21.3) @@ -8588,18 +8329,18 @@ snapshots: rxjs: 7.8.1 tslib: 2.6.2 - '@ngx-grpc/core@3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1)': + '@ngx-grpc/core@3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1)': dependencies: - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) '@ngx-grpc/common': 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) rxjs: 7.8.1 tslib: 2.6.2 - '@ngx-grpc/grpc-web-client@3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(@ngx-grpc/core@3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1))(grpc-web@1.4.2)(rxjs@7.8.1)': + '@ngx-grpc/grpc-web-client@3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(@ngx-grpc/core@3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1))(grpc-web@1.4.2)(rxjs@7.8.1)': dependencies: - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) '@ngx-grpc/common': 3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1) - '@ngx-grpc/core': 3.1.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1) + '@ngx-grpc/core': 3.1.2(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@ngx-grpc/common@3.1.2(google-protobuf@3.21.2)(rxjs@7.8.1))(rxjs@7.8.1) grpc-web: 1.4.2 rxjs: 7.8.1 tslib: 2.6.2 @@ -8689,99 +8430,51 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/rollup-android-arm-eabi@4.18.0': - optional: true - '@rollup/rollup-android-arm-eabi@4.20.0': optional: true - '@rollup/rollup-android-arm64@4.18.0': - optional: true - '@rollup/rollup-android-arm64@4.20.0': optional: true - '@rollup/rollup-darwin-arm64@4.18.0': - optional: true - '@rollup/rollup-darwin-arm64@4.20.0': optional: true - '@rollup/rollup-darwin-x64@4.18.0': - optional: true - '@rollup/rollup-darwin-x64@4.20.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.20.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.20.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.0': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.0': - optional: true - '@rollup/rollup-linux-arm64-musl@4.20.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.0': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.20.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.0': - optional: true - '@rollup/rollup-linux-x64-gnu@4.20.0': optional: true - '@rollup/rollup-linux-x64-musl@4.18.0': - optional: true - '@rollup/rollup-linux-x64-musl@4.20.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.0': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.20.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.0': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.20.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.0': - optional: true - '@rollup/rollup-win32-x64-msvc@4.20.0': optional: true @@ -8793,10 +8486,10 @@ snapshots: transitivePeerDependencies: - chokidar - '@schematics/angular@18.2.2(chokidar@3.6.0)': + '@schematics/angular@18.2.3(chokidar@3.6.0)': dependencies: - '@angular-devkit/core': 18.2.2(chokidar@3.6.0) - '@angular-devkit/schematics': 18.2.2(chokidar@3.6.0) + '@angular-devkit/core': 18.2.3(chokidar@3.6.0) + '@angular-devkit/schematics': 18.2.3(chokidar@3.6.0) jsonc-parser: 3.3.1 transitivePeerDependencies: - chokidar @@ -8862,24 +8555,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.20.1 '@types/babel__generator@7.6.4': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@types/babel__template@7.4.1': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 '@types/babel__traverse@7.20.1': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.6 '@types/body-parser@1.19.2': dependencies: @@ -9098,7 +8791,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.2 + semver: 7.6.3 ts-api-utils: 1.0.2(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -9113,7 +8806,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 - semver: 7.6.2 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -9129,7 +8822,7 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) eslint: 8.57.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -9301,9 +8994,9 @@ snapshots: optionalDependencies: ajv: 8.12.0 - ajv-formats@2.1.1(ajv@8.16.0): + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.16.0 + ajv: 8.17.1 ajv-formats@3.0.1(ajv@8.13.0): optionalDependencies: @@ -9317,9 +9010,9 @@ snapshots: dependencies: ajv: 6.12.6 - ajv-keywords@5.1.0(ajv@8.16.0): + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: - ajv: 8.16.0 + ajv: 8.17.1 fast-deep-equal: 3.1.3 ajv@6.12.6: @@ -9343,13 +9036,6 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 - ajv@8.16.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -9459,7 +9145,7 @@ snapshots: autoprefixer@10.4.19(postcss@8.4.38): dependencies: browserslist: 4.23.3 - caniuse-lite: 1.0.30001627 + caniuse-lite: 1.0.30001653 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -9472,13 +9158,13 @@ snapshots: axobject-query@4.1.0: {} - babel-jest@29.7.0(@babel/core@7.24.7): + babel-jest@29.7.0(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.7) + babel-preset-jest: 29.6.3(@babel/core@7.25.2) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -9504,14 +9190,14 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.1 babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): dependencies: - '@babel/compat-data': 7.24.7 + '@babel/compat-data': 7.25.4 '@babel/core': 7.24.5 '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) semver: 6.3.1 @@ -9533,27 +9219,27 @@ snapshots: transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - - babel-preset-jest@29.6.3(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 + babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + + babel-preset-jest@29.6.3(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) balanced-match@1.0.2: {} @@ -9608,13 +9294,6 @@ snapshots: dependencies: fill-range: 7.0.1 - browserslist@4.23.0: - dependencies: - caniuse-lite: 1.0.30001627 - electron-to-chromium: 1.4.701 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) - browserslist@4.23.3: dependencies: caniuse-lite: 1.0.30001653 @@ -9713,8 +9392,6 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001627: {} - caniuse-lite@1.0.30001653: {} chalk@2.4.2: @@ -9908,7 +9585,7 @@ snapshots: dom-serializer: 2.0.0 domhandler: 5.0.3 htmlparser2: 8.0.2 - postcss: 8.4.38 + postcss: 8.4.41 postcss-media-query-parser: 0.2.3 critters@0.0.24: @@ -9918,7 +9595,7 @@ snapshots: dom-serializer: 2.0.0 domhandler: 5.0.3 htmlparser2: 8.0.2 - postcss: 8.4.38 + postcss: 8.4.41 postcss-media-query-parser: 0.2.3 cross-spawn@7.0.3: @@ -9929,14 +9606,14 @@ snapshots: css-loader@7.1.1(webpack@5.91.0(esbuild@0.21.3)): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.41) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.41) + postcss-modules-scope: 3.2.0(postcss@8.4.41) + postcss-modules-values: 4.0.0(postcss@8.4.41) postcss-value-parser: 4.2.0 - semver: 7.6.2 + semver: 7.6.3 optionalDependencies: webpack: 5.91.0(esbuild@0.21.3) @@ -10108,8 +9785,6 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.4.701: {} - electron-to-chromium@1.5.13: {} emittery@0.13.1: {} @@ -10829,7 +10504,7 @@ snapshots: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -11011,9 +10686,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.38): + icss-utils@5.1.0(postcss@8.4.41): dependencies: - postcss: 8.4.38 + postcss: 8.4.41 ieee754@1.2.1: {} @@ -11059,7 +10734,7 @@ snapshots: inquirer@9.2.22: dependencies: - '@inquirer/figures': 1.0.3 + '@inquirer/figures': 1.0.5 '@ljharb/through': 2.3.13 ansi-escapes: 4.3.2 chalk: 5.3.0 @@ -11228,8 +10903,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 @@ -11238,11 +10913,11 @@ snapshots: istanbul-lib-instrument@6.0.0: dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -11324,10 +10999,10 @@ snapshots: jest-config@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) + babel-jest: 29.7.0(@babel/core@7.25.2) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -11455,19 +11130,19 @@ snapshots: optionalDependencies: jest-resolve: 29.7.0 - jest-preset-angular@14.1.0(sqqqe2klamwycl6b424csa6whu): + jest-preset-angular@14.1.0(szctdbx45ebb2ckvfqbtda3g2y): dependencies: - '@angular-devkit/build-angular': 18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) - '@angular/compiler-cli': 18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) - '@angular/core': 18.2.2(rxjs@7.8.1)(zone.js@0.14.4) - '@angular/platform-browser-dynamic': 18.2.2(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.2(@angular/animations@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))) + '@angular-devkit/build-angular': 18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) + '@angular/compiler-cli': 18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5) + '@angular/core': 18.2.3(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/platform-browser-dynamic': 18.2.3(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(@angular/platform-browser@18.2.3(@angular/animations@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(@angular/common@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))(rxjs@7.8.1))(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))) bs-logger: 0.2.6 esbuild-wasm: 0.20.1 jest: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)) jest-environment-jsdom: 29.7.0 jest-util: 29.7.0 pretty-format: 29.7.0 - ts-jest: 29.1.2(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(esbuild@0.20.1)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) + ts-jest: 29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.20.1)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) typescript: 5.4.5 optionalDependencies: esbuild: 0.20.1 @@ -11556,15 +11231,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.24.7) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.24.7) - '@babel/types': 7.24.7 + '@babel/core': 7.25.2 + '@babel/generator': 7.25.6 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.25.2) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.25.2) + '@babel/types': 7.25.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -11575,7 +11250,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -11853,7 +11528,7 @@ snapshots: magic-string@0.30.10: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 magic-string@0.30.11: dependencies: @@ -11861,7 +11536,7 @@ snapshots: magic-string@0.30.8: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 make-dir@2.1.0: dependencies: @@ -12053,10 +11728,10 @@ snapshots: neo-async@2.6.2: {} - ng-extract-i18n-merge@2.12.0(@angular-devkit/build-angular@18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5))(chokidar@3.6.0): + ng-extract-i18n-merge@2.12.0(@angular-devkit/build-angular@18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5))(chokidar@3.6.0): dependencies: '@angular-devkit/architect': 0.1700.10(chokidar@3.6.0) - '@angular-devkit/build-angular': 18.0.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.2(@angular/compiler-cli@18.2.2(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.2(@angular/core@18.2.2(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) + '@angular-devkit/build-angular': 18.0.2(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/localize@18.2.3(@angular/compiler-cli@18.2.3(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4)))(typescript@5.4.5))(@angular/compiler@18.2.3(@angular/core@18.2.3(rxjs@7.8.1)(zone.js@0.14.4))))(@types/node@20.12.7)(chokidar@3.6.0)(jest-environment-jsdom@29.7.0)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5) '@angular-devkit/core': 17.3.8(chokidar@3.6.0) '@angular-devkit/schematics': 17.3.8(chokidar@3.6.0) '@schematics/angular': 17.3.8(chokidar@3.6.0) @@ -12110,8 +11785,6 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.14: {} - node-releases@2.0.18: {} nopt@7.2.1: @@ -12445,7 +12118,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.4.5) jiti: 1.21.0 postcss: 8.4.38 - semver: 7.6.2 + semver: 7.6.3 optionalDependencies: webpack: 5.91.0(esbuild@0.21.3) transitivePeerDependencies: @@ -12453,26 +12126,26 @@ snapshots: postcss-media-query-parser@0.2.3: {} - postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + postcss-modules-extract-imports@3.1.0(postcss@8.4.41): dependencies: - postcss: 8.4.38 + postcss: 8.4.41 - postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + postcss-modules-local-by-default@4.0.5(postcss@8.4.41): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.0(postcss@8.4.38): + postcss-modules-scope@3.2.0(postcss@8.4.41): dependencies: - postcss: 8.4.38 + postcss: 8.4.41 postcss-selector-parser: 6.0.13 - postcss-modules-values@4.0.0(postcss@8.4.38): + postcss-modules-values@4.0.0(postcss@8.4.41): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 postcss-selector-parser@6.0.13: dependencies: @@ -12639,7 +12312,7 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.4.38 + postcss: 8.4.41 source-map: 0.6.1 resolve.exports@2.0.2: {} @@ -12676,28 +12349,6 @@ snapshots: dependencies: glob: 10.4.1 - rollup@4.18.0: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 - fsevents: 2.3.3 - rollup@4.20.0: dependencies: '@types/estree': 1.0.5 @@ -12785,9 +12436,9 @@ snapshots: schema-utils@4.2.0: dependencies: '@types/json-schema': 7.0.12 - ajv: 8.16.0 - ajv-formats: 2.1.1(ajv@8.16.0) - ajv-keywords: 5.1.0(ajv@8.16.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) select-hose@2.0.0: {} @@ -13192,7 +12843,7 @@ snapshots: dependencies: typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(esbuild@0.20.1)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.20.1)(jest@29.7.0(@types/node@20.12.7)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -13205,9 +12856,9 @@ snapshots: typescript: 5.4.5 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) + babel-jest: 29.7.0(@babel/core@7.25.2) esbuild: 0.20.1 ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5): @@ -13334,12 +12985,6 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.0.13(browserslist@4.23.0): - dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.1 - update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: browserslist: 4.23.3 @@ -13383,8 +13028,8 @@ snapshots: vite@5.2.11(@types/node@20.12.7)(less@4.2.0)(sass@1.77.2)(terser@5.31.0): dependencies: esbuild: 0.20.1 - postcss: 8.4.38 - rollup: 4.18.0 + postcss: 8.4.41 + rollup: 4.20.0 optionalDependencies: '@types/node': 20.12.7 fsevents: 2.3.3 diff --git a/src/app/components/inspection/inspection-json.component.html b/src/app/components/inspection/inspection-json.component.html new file mode 100644 index 000000000..0ff295e2b --- /dev/null +++ b/src/app/components/inspection/inspection-json.component.html @@ -0,0 +1,22 @@ + +
+ Raw JSON + +
+ +
+@if (display) { + + { + + } + +} \ No newline at end of file diff --git a/src/app/components/inspection/inspection-json.component.spec.ts b/src/app/components/inspection/inspection-json.component.spec.ts new file mode 100644 index 000000000..75257a043 --- /dev/null +++ b/src/app/components/inspection/inspection-json.component.spec.ts @@ -0,0 +1,87 @@ +import { Clipboard } from '@angular/cdk/clipboard'; +import { TestBed } from '@angular/core/testing'; +import { IconsService } from '@services/icons.service'; +import { NotificationService } from '@services/notification.service'; +import { InspectionJsonComponent } from './inspection-json.component'; + +describe('InspectionJsonComponent', () => { + let component: InspectionJsonComponent; + + const data = { + one: 1, + two: 2, + object: { + three: 3 + }, + array: [1, 2, 3] + }; + + const mockNotificationService = { + success: jest.fn(), + error: jest.fn(), + }; + + const mockClipboard = { + copy: jest.fn(), + }; + + const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); + + beforeEach(() => { + component = TestBed.configureTestingModule({ + providers: [ + InspectionJsonComponent, + { provide: NotificationService, useValue: mockNotificationService }, + { provide: Clipboard, useValue: mockClipboard }, + IconsService, + ] + }).inject(InspectionJsonComponent); + component.data = data; + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set data', () => { + expect(component.data).toEqual(data); + }); + + describe('copy', () => { + it('should copy to clipboard', () => { + component.copy(); + expect(mockClipboard.copy).toHaveBeenCalledWith(JSON.stringify(data, null, 2)); + }); + + it('should notify on copy', () => { + component.copy(); + expect(mockNotificationService.success).toHaveBeenCalled(); + }); + + it('should log in case of an error', () => { + jest.spyOn(JSON, 'stringify').mockImplementationOnce(() => {throw new Error;}); + component.copy(); + expect(errorSpy).toHaveBeenCalled(); + }); + + it('should notify in case of an error', () => { + jest.spyOn(JSON, 'stringify').mockImplementationOnce(() => {throw new Error;}); + component.copy(); + expect(mockNotificationService.error).toHaveBeenCalled(); + }); + }); + + describe('toggleDisplay', () => { + it('should set display to true if it is false', () => { + component.display = false; + component.toggleDisplay(); + expect(component.display).toBeTruthy(); + }); + + it('should set display to false if it is true', () => { + component.display = true; + component.toggleDisplay(); + expect(component.display).toBeFalsy(); + }); + }); +}); \ No newline at end of file diff --git a/src/app/components/inspection/inspection-json.component.ts b/src/app/components/inspection/inspection-json.component.ts new file mode 100644 index 000000000..bb7d06fee --- /dev/null +++ b/src/app/components/inspection/inspection-json.component.ts @@ -0,0 +1,75 @@ +import { Clipboard } from '@angular/cdk/clipboard'; +import { Component, Input, inject } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { IconsService } from '@services/icons.service'; +import { NotificationService } from '@services/notification.service'; +import { JsonComponent } from './json.component'; + +@Component({ + selector: 'app-json-inspection', + templateUrl: 'inspection-json.component.html', + standalone: true, + providers: [ + IconsService, + ], + imports: [ + JsonComponent, + MatIconModule, + MatButtonModule, + MatToolbarModule, + MatCardModule, + MatTooltipModule, + ], + styles: [` + mat-card { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + } + + mat-toolbar { + display: flex; + justify-content: space-between; + } + + section { + display: flex; + align-items: center; + } + `] +}) +export class InspectionJsonComponent { + @Input({ required: true }) data: object | null; + + display = false; + + readonly iconsService = inject(IconsService); + readonly clipboard = inject(Clipboard); + readonly notificationService = inject(NotificationService); + + readonly copyIcon = this.iconsService.getIcon('copy'); + readonly arrowDownIcon = this.iconsService.getIcon('arrow-down'); + readonly arrowUpIcon = this.iconsService.getIcon('arrow-up'); + + readonly displayToolTip = $localize`Display JSON`; + readonly hideToolTip = $localize`Hide JSON`; + + copy() { + try { + const object = JSON.stringify(this.data, null, 2); + this.clipboard.copy(object); + this.notificationService.success('JSON copied to clipboard'); + } catch (e) { + console.error(e); + this.notificationService.error('Could not copy JSON'); + } + } + + toggleDisplay() { + this.display = !this.display; + } +} \ No newline at end of file diff --git a/src/app/components/inspection/json.component.html b/src/app/components/inspection/json.component.html new file mode 100644 index 000000000..e670f71e9 --- /dev/null +++ b/src/app/components/inspection/json.component.html @@ -0,0 +1,13 @@ +@for(key of keys; track key) { +
+ @if(isObject(key) && !isArray(key)) { +

{{ key }}: {

+ +

}

+ } @else if (data[key]) { +

{{key}}: {{ data[key] | json }}

+ } @else { +

{{key}}: undefined

+ } +
+} \ No newline at end of file diff --git a/src/app/components/inspection/json.component.spec.ts b/src/app/components/inspection/json.component.spec.ts new file mode 100644 index 000000000..75d11918e --- /dev/null +++ b/src/app/components/inspection/json.component.spec.ts @@ -0,0 +1,58 @@ +import { JsonComponent } from './json.component'; + +describe('JsonComponent', () => { + const component = new JsonComponent(); + + const data = { + one: 1, + two: 2, + object: { + three: 3 + }, + array: [1, 2, 3] + }; + + beforeEach(() => { + component.data = data; + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set data', () => { + expect(component.data).toEqual(data); + }); + + it('should set keys', () => { + expect(component.keys).toEqual(['one', 'two', 'object', 'array']); + }); + + describe('isArray', () => { + it('should return true if an array is passed', () => { + expect(component.isArray('array' as keyof object)).toBeTruthy(); + }); + + it('should return false if an object is passed', () => { + expect(component.isArray('object' as keyof object)).toBeFalsy(); + }); + + it('should return false if a simple value is passed', () => { + expect(component.isArray('one' as keyof object)).toBeFalsy(); + }); + }); + + describe('isObject', () => { + it('should return true if an object is passed', () => { + expect(component.isObject('object' as keyof object)).toBeTruthy(); + }); + + it('should return true if an array is passed', () => { + expect(component.isObject('array' as keyof object)).toBeTruthy(); + }); + + it('should return false if a simple value is passed', () => { + expect(component.isObject('one' as keyof object)).toBeFalsy(); + }); + }); +}); \ No newline at end of file diff --git a/src/app/components/inspection/json.component.ts b/src/app/components/inspection/json.component.ts new file mode 100644 index 000000000..260e7583c --- /dev/null +++ b/src/app/components/inspection/json.component.ts @@ -0,0 +1,43 @@ +import { JsonPipe } from '@angular/common'; +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'app-json', + templateUrl: 'json.component.html', + standalone: true, + imports: [ + JsonPipe + ], + styles: [` + section { + margin-left: 1rem; + } + p { + margin: 0; + } + `] +}) +export class JsonComponent { + private _data: object; + + keys: (keyof object)[]; + + @Input({ required: true }) set data(entry: object | null) { + if(entry) { + this.keys = Object.keys(entry).map(key => key.replace('_', '')) as keyof object; + this._data = entry; + } + } + + get data(): object { + return this._data; + } + + isArray(key: keyof object): boolean { + return this.data[key] && (this.data[key] as Array).length; + } + + isObject(key: keyof object): boolean { + return (this._data[key] as unknown) instanceof Object; + } +} \ No newline at end of file diff --git a/src/app/components/navigation/theme-selector.component.html b/src/app/components/navigation/theme-selector.component.html index dbb99226b..94806d976 100644 --- a/src/app/components/navigation/theme-selector.component.html +++ b/src/app/components/navigation/theme-selector.component.html @@ -1,4 +1,4 @@ - diff --git a/src/app/components/show-page.component.html b/src/app/components/show-page.component.html index 1f24a966a..7002a3e48 100644 --- a/src/app/components/show-page.component.html +++ b/src/app/components/show-page.component.html @@ -9,6 +9,6 @@ @if (data) { - -} \ No newline at end of file + +} diff --git a/src/app/components/show-page.component.ts b/src/app/components/show-page.component.ts index 16aaaddb2..9d392b7bf 100644 --- a/src/app/components/show-page.component.ts +++ b/src/app/components/show-page.component.ts @@ -4,6 +4,7 @@ import { Field } from '@app/types/column.type'; import { ShowActionButton } from '@app/types/components/show'; import { DataRaw } from '@app/types/data'; import { InspectionCardComponent } from './inspection/inspection-card.component'; +import { InspectionJsonComponent } from './inspection/inspection-json.component'; import { InspectionListGridComponent } from './inspection/inspection-list-grid.component'; import { InspectionHeaderComponent } from './inspection-header.component'; import { InspectionToolbarComponent } from './inspection-toolbar.component'; @@ -26,6 +27,7 @@ span { InspectionHeaderComponent, InspectionListGridComponent, InspectionToolbarComponent, + InspectionJsonComponent, ], changeDetection: ChangeDetectionStrategy.OnPush }) diff --git a/src/app/components/statuses/form-statuses-group.component.html b/src/app/components/statuses/form-statuses-group.component.html index ed844e4f7..cc40d01a8 100644 --- a/src/app/components/statuses/form-statuses-group.component.html +++ b/src/app/components/statuses/form-statuses-group.component.html @@ -1,35 +1,35 @@
- - - - Name - - @if (groupForm.get('name')?.hasError('required')) { - - Name is required - + + + + Name + + @if (groupForm.get('name')?.hasError('required')) { + + Name is required + + } + + + + Color + + + +
+

Statuses

+
+ @for (status of statuses; track status.value) { + + {{ status.name }} + } - - - - Color - - - -
-

Statuses

-
- @for (status of statuses; track status.value) { - - {{ status.name }} - - } -
- - - - - - - \ No newline at end of file +
+ + + + + + + \ No newline at end of file diff --git a/src/app/components/statuses/form-statuses-group.component.spec.ts b/src/app/components/statuses/form-statuses-group.component.spec.ts index 97db9ca38..aa36d1da1 100644 --- a/src/app/components/statuses/form-statuses-group.component.spec.ts +++ b/src/app/components/statuses/form-statuses-group.component.spec.ts @@ -1,40 +1,34 @@ import { TaskStatus } from '@aneoconsultingfr/armonik.api.angular'; -import { AbstractControl, FormArray } from '@angular/forms'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { FormStatusesGroupComponent } from './form-statuses-group.component'; describe('FormStatusesGroupComponent', () => { - let component: FormStatusesGroupComponent; + const component = new FormStatusesGroupComponent(); + + const statuses: { name: string, value: string }[] = [ + { name: 'Completed', value: `${TaskStatus.TASK_STATUS_COMPLETED}` }, + { name: 'Cancelled', value: `${TaskStatus.TASK_STATUS_CANCELLED}` }, + { name: 'Processed', value: `${TaskStatus.TASK_STATUS_PROCESSED}` } + ]; beforeEach(() => { - component = new FormStatusesGroupComponent(); + component.statuses = statuses; component.group = { name: 'status', - color: 'green', statuses: [ TaskStatus.TASK_STATUS_CANCELLED, TaskStatus.TASK_STATUS_COMPLETED ] }; + component.ngOnInit(); }); it('should create', () => { expect(component).toBeTruthy(); }); - describe('ngOnInit', () => { - it('should init', () => { - component.ngOnInit(); - expect(component.groupForm.value).toEqual({ - name: 'status', - color: 'green', - statuses: [8, 4] - }); - }); - - it('should init without color', () => { - component.group = {name: 'status', statuses: [TaskStatus.TASK_STATUS_CANCELLED, TaskStatus.TASK_STATUS_COMPLETED]}; - component.ngOnInit(); + describe('on init', () => { + it('should complete form', () => { expect(component.groupForm.value).toEqual({ name: 'status', color: null, @@ -43,17 +37,6 @@ describe('FormStatusesGroupComponent', () => { }); }); - it('should init without statuses', () => { - const spyGroupFormGet = jest.spyOn(component.groupForm, 'get'); - spyGroupFormGet.mockImplementationOnce(() => null); - component.ngOnInit(); - expect(component.groupForm.value).toEqual({ - name: 'status', - color: 'green', - statuses: [] - }); - }); - it('should return true if it is checked', () => { expect(component.isChecked({name: 'status', value: '4'})).toBeTruthy(); }); @@ -67,103 +50,82 @@ describe('FormStatusesGroupComponent', () => { expect(component.isChecked({name: 'status', value: '4'})).toBeFalsy(); }); - it('should update on uncheked', () => { - const initialObject = { - controls: [ - { - value: 'item1' - }, - { - value: 'item2' - }, - { - value: 'item3' + describe('onCheckboxChange', () => { + it('should update on uncheked', () => { + const groupFormStatuses = [ + TaskStatus.TASK_STATUS_PROCESSED, + TaskStatus.TASK_STATUS_COMPLETED, + TaskStatus.TASK_STATUS_CANCELLED + ]; + component.groupForm.patchValue({ statuses: groupFormStatuses }); + const event = { + checked: false, + source: { + value: `${TaskStatus.TASK_STATUS_COMPLETED}` } - ], - removeAt: jest.fn() - } as unknown as AbstractControl; - const spyGroupFormGet = jest.spyOn(component.groupForm, 'get'); - spyGroupFormGet.mockImplementationOnce(() => initialObject); - - const event = { - checked: false, - source: { - value: 'item2' - } - } as unknown as MatCheckboxChange; - - component.onCheckboxChange(event); - expect((initialObject as FormArray).removeAt).toHaveBeenCalledWith(1); - }); + } as unknown as MatCheckboxChange; + + component.onCheckboxChange(event); + expect(component.groupForm.value.statuses?.length).toEqual(2); + }); - it('should update on check', () => { - const initialObject = { - controls: [ - { - value: 'item1' - }, - { - value: 'item2' - }, - { - value: 'item3' + it('should update on check', () => { + const groupFormStatuses = [ + TaskStatus.TASK_STATUS_COMPLETED, + TaskStatus.TASK_STATUS_CANCELLED + ]; + component.groupForm.patchValue({ statuses: groupFormStatuses }); + + const event = { + checked: true, + source: { + value: `${TaskStatus.TASK_STATUS_PROCESSED}` } - ], - push: jest.fn() - } as unknown as AbstractControl; - - const event = { - checked: true, - source: { - value: 'item4' - } - } as unknown as MatCheckboxChange; - - const spyGroupFormGet = jest.spyOn(component.groupForm, 'get'); - spyGroupFormGet.mockImplementationOnce(() => initialObject); - - component.onCheckboxChange(event); - expect((initialObject as FormArray).push).toHaveBeenCalled(); - }); + } as unknown as MatCheckboxChange; - it('should not update on check if there is no status', () => { - const event = { - checked: true, - source: { - value: 'item4' - } - } as unknown as MatCheckboxChange; - - const spyGroupFormGet = jest.spyOn(component.groupForm, 'get'); - spyGroupFormGet.mockImplementationOnce(() => null); - expect(component.onCheckboxChange(event)).toEqual(undefined); + component.onCheckboxChange(event); + expect(component.groupForm.value.statuses?.length).toEqual(3); + }); + + it('should set the group name as the first selected status', () => { + component.groupForm.patchValue({name: undefined, statuses: []}); + const event = { + checked: true, + source: { + value: `${TaskStatus.TASK_STATUS_PROCESSED}` + } + } as unknown as MatCheckboxChange; + + component.onCheckboxChange(event); + expect(component.groupForm.value.name).toEqual('Processed'); + }); }); it('should emit on submit', () => { - component.groupForm.value.color = 'green'; - component.groupForm.value.name = 'name'; - component.groupForm.value.statuses = ['0', '1']; + const newGroup = { + name: 'name', + color: 'green', + statuses: [TaskStatus.TASK_STATUS_UNSPECIFIED, TaskStatus.TASK_STATUS_CREATING] + }; + component.groupForm.setValue(newGroup); const spySubmit = jest.spyOn(component.submitChange, 'emit'); - component.onSubmit(); - expect(spySubmit).toHaveBeenCalledWith({ - name: 'name', - color: 'green', - statuses: [TaskStatus.TASK_STATUS_UNSPECIFIED, TaskStatus.TASK_STATUS_CREATING] - }); + expect(spySubmit).toHaveBeenCalledWith(newGroup); }); it('should emit on submit even without values', () => { - component.groupForm.value.color = undefined; - component.groupForm.value.name = undefined; - component.groupForm.value.statuses = undefined; + const undefinedGroup = { + name: null, + color: null, + statuses: null + }; + component.groupForm.setValue(undefinedGroup); const spySubmit = jest.spyOn(component.submitChange, 'emit'); component.onSubmit(); - expect(spySubmit).toHaveBeenCalledWith({ name: '', color: '', diff --git a/src/app/components/statuses/form-statuses-group.component.ts b/src/app/components/statuses/form-statuses-group.component.ts index 73920c45d..fa056be1d 100644 --- a/src/app/components/statuses/form-statuses-group.component.ts +++ b/src/app/components/statuses/form-statuses-group.component.ts @@ -1,6 +1,6 @@ import { TaskStatus } from '@aneoconsultingfr/armonik.api.angular'; -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; +import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; @@ -41,7 +41,8 @@ mat-dialog-content { MatFormFieldModule, MatInputModule, ReactiveFormsModule - ] + ], + changeDetection: ChangeDetectionStrategy.OnPush }) export class FormStatusesGroupComponent implements OnInit { @Input() group: TasksStatusesGroup | null = null; @@ -51,58 +52,42 @@ export class FormStatusesGroupComponent implements OnInit { @Output() submitChange = new EventEmitter(); groupForm = new FormGroup({ - name: new FormControl('', [ + name: new FormControl(null, [ Validators.required, ]), - color: new FormControl(''), - statuses: new FormArray>([]), + color: new FormControl(''), + statuses: new FormControl([]) }); ngOnInit() { if(this.group) { - this.groupForm.setValue({ + this.groupForm.patchValue({ name: this.group.name, color: this.group.color ?? null, - statuses: [] + statuses: [...this.group.statuses], }); - const statuses = this.groupForm.get('statuses') as FormArray | null; - if (!statuses) { - return; - } - - for (const status of this.group.statuses) { - statuses.push(new FormControl(status)); - } } } isChecked(status: StatusLabeled): boolean { - if (!this.group) { - return false; - } - - return this.group.statuses.includes(Number(status.value) as TaskStatus); + return this.group?.statuses.includes(Number(status.value) as TaskStatus) ?? false; } - onCheckboxChange(e: MatCheckboxChange) { - const statuses = this.groupForm.get('statuses') as FormArray | null; - - if (!statuses) { - return; - } + const statuses = this.groupForm.get('statuses') as FormControl; + const status = Number(e.source.value) as TaskStatus; if (e.checked) { - statuses.push(new FormControl(e.source.value)); - } else { - let i = 0; - (statuses.controls as FormControl[]).forEach((item: FormControl) => { - if (item.value == e.source.value) { - statuses.removeAt(i); - return; + statuses.value.push(status); + if (!this.groupForm.value.name && statuses.value.length === 1) { + const status = this.statuses.find(status => status.value === e.source.value); + if (status) { + this.groupForm.patchValue({name: status.name}); } - i++; - }); + } + } else { + const index = statuses.value.findIndex(s => s === status); + statuses.value.splice(index, 1); } } @@ -110,7 +95,7 @@ export class FormStatusesGroupComponent implements OnInit { const result: TasksStatusesGroup = { name: this.groupForm.value.name ?? '', color: this.groupForm.value.color ?? '', - statuses: this.groupForm.value.statuses?.map((status: string) => Number(status) as TaskStatus) ?? [] + statuses: this.groupForm.value.statuses ?? [] }; this.submitChange.emit(result); diff --git a/src/app/components/statuses/manage-groups-dialog.component.spec.ts b/src/app/components/statuses/manage-groups-dialog.component.spec.ts index b0b34889a..72a324bad 100644 --- a/src/app/components/statuses/manage-groups-dialog.component.spec.ts +++ b/src/app/components/statuses/manage-groups-dialog.component.spec.ts @@ -49,7 +49,6 @@ describe('ManageGroupsDialogComponent', () => { }} ] }).inject(ManageGroupsDialogComponent); - component.ngOnInit(); }); it('should run', () => { diff --git a/src/app/components/statuses/manage-groups-dialog.component.ts b/src/app/components/statuses/manage-groups-dialog.component.ts index a8df9cf8a..4d87d9cf7 100644 --- a/src/app/components/statuses/manage-groups-dialog.component.ts +++ b/src/app/components/statuses/manage-groups-dialog.component.ts @@ -1,6 +1,6 @@ import { TaskStatus } from '@aneoconsultingfr/armonik.api.angular'; import { CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop'; -import { Component, Inject, OnInit, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject, inject, signal } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatIconModule } from '@angular/material/icon'; @@ -126,10 +126,15 @@ ul { MatIconModule, DragDropModule, MatTooltipModule, - ] + ], + changeDetection: ChangeDetectionStrategy.OnPush }) -export class ManageGroupsDialogComponent implements OnInit { - groups: TasksStatusesGroup[] = []; +export class ManageGroupsDialogComponent { + private _groups = signal([]); + + get groups(): TasksStatusesGroup[] { + return this._groups(); + } #dialog = inject(MatDialog); #iconsServices = inject(IconsService); @@ -138,10 +143,8 @@ export class ManageGroupsDialogComponent implements OnInit { constructor( public _dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: ManageGroupsDialogData, - ) {} - - ngOnInit(): void { - this.groups = this.data.groups; + ) { + this._groups.set(this.data.groups); } getIcon(name: string): string { @@ -174,7 +177,7 @@ export class ManageGroupsDialogComponent implements OnInit { dialogRef.afterClosed().subscribe((result) => { if (result) { - this.groups.push(result); + this._groups.update(groups => [...groups, result]); } }); } @@ -190,9 +193,7 @@ export class ManageGroupsDialogComponent implements OnInit { dialogRef.afterClosed().subscribe((result) => { if (result) { const index = this.groups.indexOf(group); - if (index > -1) { - this.groups[index] = result; - } + this._groups.update(groups => groups.map((group, i) => i === index ? result : group)); } }); } @@ -200,7 +201,7 @@ export class ManageGroupsDialogComponent implements OnInit { onDelete(group: TasksStatusesGroup): void { const index = this.groups.indexOf(group); if (index > -1) { - this.groups.splice(index, 1); + this._groups.update(groups => groups.filter((group, i) => i !== index)); } } diff --git a/src/app/partitions/services/partitions-inspection.service.ts b/src/app/partitions/services/partitions-inspection.service.ts index 4d1685c80..3ea69ec5d 100644 --- a/src/app/partitions/services/partitions-inspection.service.ts +++ b/src/app/partitions/services/partitions-inspection.service.ts @@ -1,3 +1,4 @@ +import { PartitionRawEnumField } from '@aneoconsultingfr/armonik.api.angular'; import { Field } from '@app/types/column.type'; import { InspectionService } from '@app/types/services/inspectionService'; import { PartitionRaw } from '../types'; @@ -23,6 +24,10 @@ export class PartitionsInspectionService extends InspectionService ]; readonly arrays: Field[] = [ - { key: 'parentPartitionIds', link: 'partitions', queryParams: '0-root-1-0' } + { + key: 'parentPartitionIds', + link: 'partitions', + queryParams: `0-root-${PartitionRawEnumField.PARTITION_RAW_ENUM_FIELD_ID}-0` + } ]; } \ No newline at end of file diff --git a/src/app/results/services/results-filters.service.ts b/src/app/results/services/results-filters.service.ts index c1c98ac52..038f9eaae 100644 --- a/src/app/results/services/results-filters.service.ts +++ b/src/app/results/services/results-filters.service.ts @@ -18,6 +18,7 @@ export class ResultsFiltersService implements FiltersServiceInterface = { [ResultRawEnumField.RESULT_RAW_ENUM_FIELD_COMPLETED_AT]: $localize`Completed at`, [ResultRawEnumField.RESULT_RAW_ENUM_FIELD_CREATED_AT]: $localize`Created at`, + [ResultRawEnumField.RESULT_RAW_ENUM_FIELD_CREATED_BY]: $localize`Created By`, [ResultRawEnumField.RESULT_RAW_ENUM_FIELD_NAME]: $localize`Name`, [ResultRawEnumField.RESULT_RAW_ENUM_FIELD_OWNER_TASK_ID]: $localize`Owner Task ID`, [ResultRawEnumField.RESULT_RAW_ENUM_FIELD_RESULT_ID]: $localize`Result ID`, @@ -48,6 +49,11 @@ export class ResultsFiltersService implements FiltersServiceInterface { sortable: true, link: '/tasks', }, + { + name: $localize`Created By`, + key: 'createdBy', + sortable: true, + }, { name: $localize`Created at`, key: 'createdAt', diff --git a/src/app/results/services/results-inspection.service.ts b/src/app/results/services/results-inspection.service.ts index 0573d3802..29f170190 100644 --- a/src/app/results/services/results-inspection.service.ts +++ b/src/app/results/services/results-inspection.service.ts @@ -19,6 +19,9 @@ export class ResultsInspectionService extends InspectionService { key: 'createdAt', type: 'date' }, + { + key: 'createdBy', + }, { key: 'completedAt', type: 'date' diff --git a/src/app/services/default-config.service.ts b/src/app/services/default-config.service.ts index b208c0d10..8fd3899f6 100644 --- a/src/app/services/default-config.service.ts +++ b/src/app/services/default-config.service.ts @@ -117,7 +117,9 @@ export class DefaultConfigService { lockColumns: false, columns: [ 'id', - 'count' + 'podReserved', + 'priority', + 'count', ], options: { pageIndex: 0, @@ -136,6 +138,8 @@ export class DefaultConfigService { lockColumns: false, columns: [ 'sessionId', + 'status', + 'createdAt', 'count', 'actions', ], @@ -156,7 +160,9 @@ export class DefaultConfigService { lockColumns: false, columns: [ 'resultId', + 'name', 'sessionId', + 'createdAt', ], options: { pageIndex: 0, diff --git a/src/app/sessions/services/sessions-inspection.service.ts b/src/app/sessions/services/sessions-inspection.service.ts index 5a8219552..3217a4370 100644 --- a/src/app/sessions/services/sessions-inspection.service.ts +++ b/src/app/sessions/services/sessions-inspection.service.ts @@ -1,3 +1,4 @@ +import { PartitionRawEnumField } from '@aneoconsultingfr/armonik.api.angular'; import { Field } from '@app/types/column.type'; import { InspectionService } from '@app/types/services/inspectionService'; import { SessionRaw } from '../types'; @@ -40,7 +41,7 @@ export class SessionsInspectionService extends InspectionService { { key: 'partitionIds', link: 'partitions', - queryParams: '0-root-1-0' + queryParams: `0-root-${PartitionRawEnumField.PARTITION_RAW_ENUM_FIELD_ID}-0` } ]; } \ No newline at end of file diff --git a/src/app/sessions/show.component.spec.ts b/src/app/sessions/show.component.spec.ts index 67c114d11..71260eb31 100644 --- a/src/app/sessions/show.component.spec.ts +++ b/src/app/sessions/show.component.spec.ts @@ -2,7 +2,7 @@ import { GetSessionResponse, SessionStatus } from '@aneoconsultingfr/armonik.api import { TestBed } from '@angular/core/testing'; import { ActivatedRoute, Router } from '@angular/router'; import { GrpcStatusEvent } from '@ngx-grpc/common'; -import { Timestamp } from '@ngx-grpc/well-known-types'; +import { Duration, Timestamp } from '@ngx-grpc/well-known-types'; import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; import { TasksInspectionService } from '@app/tasks/services/tasks-inspection.service'; import { FiltersService } from '@services/filters.service'; @@ -189,10 +189,10 @@ describe('AppShowComponent', () => { component.lowerDate = taskCreatedAt.date; component.upperDate = taskEndedAt.date; component.computeDuration$.next(); - expect(component.data()?.duration).toEqual({ + expect(component.data()?.duration).toEqual(new Duration({ seconds: '1000', nanos: 0 - }); + })); }); }); diff --git a/src/app/sessions/show.component.ts b/src/app/sessions/show.component.ts index 7f69d49a0..88129b154 100644 --- a/src/app/sessions/show.component.ts +++ b/src/app/sessions/show.component.ts @@ -3,7 +3,7 @@ import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@ import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { Params, Router, RouterModule } from '@angular/router'; -import { Timestamp } from '@ngx-grpc/well-known-types'; +import { Duration, Timestamp } from '@ngx-grpc/well-known-types'; import { Subject, map, switchMap } from 'rxjs'; import { TasksFiltersService } from '@app/tasks/services/tasks-filters.service'; import { TasksGrpcService } from '@app/tasks/services/tasks-grpc.service'; @@ -171,10 +171,10 @@ export class ShowComponent extends AppShowComponent { const data = this.data(); if (data && this.lowerDate && this.upperDate) { - data.duration = { + data.duration = new Duration({ seconds: (Number(this.upperDate.seconds) - Number(this.lowerDate.seconds)).toString(), nanos: Math.abs(this.upperDate.nanos - this.lowerDate.nanos) - }; + }); this.data.set(data); } }); diff --git a/src/app/settings/index.component.html b/src/app/settings/index.component.html index fa53c0bd4..a83fd13b0 100644 --- a/src/app/settings/index.component.html +++ b/src/app/settings/index.component.html @@ -20,7 +20,7 @@ diff --git a/src/app/settings/index.component.spec.ts b/src/app/settings/index.component.spec.ts new file mode 100644 index 000000000..ad9193aa7 --- /dev/null +++ b/src/app/settings/index.component.spec.ts @@ -0,0 +1,458 @@ +import { CdkDragDrop } from '@angular/cdk/drag-drop'; +import { HttpClient } from '@angular/common/http'; +import { TestBed } from '@angular/core/testing'; +import { MatCheckboxChange } from '@angular/material/checkbox'; +import { MatDialog } from '@angular/material/dialog'; +import { of } from 'rxjs'; +import { Key } from '@app/types/config'; +import { Sidebar, SidebarItem } from '@app/types/navigation'; +import { IconsService } from '@services/icons.service'; +import { NavigationService } from '@services/navigation.service'; +import { NotificationService } from '@services/notification.service'; +import { StorageService } from '@services/storage.service'; +import { IndexComponent } from './index.component'; + +class FakeFileReader extends FileReader { + _result: string; + + override set result(entry: string) { + this._result = entry; + } + + override get result() { + return this._result; + } + + constructor(result: string) { + super(); + this.result = result; + } + + override onload = jest.fn(); + + override readAsText() { + this.onload(); + } +} + +describe('IndexComponent', () => { + let component: IndexComponent; + + const mockNotificationService = { + success: jest.fn(), + error: jest.fn(), + }; + + const mockSideBar: Sidebar[] = ['profile', 'dashboard', 'sessions', 'tasks']; + + const mockSidebarItems: SidebarItem[] = [ + { + type: 'link', + id: 'profile', + display: $localize`Profile`, + route: '/profile', + }, + { + type: 'link', + id: 'dashboard', + display: $localize`Dashboard`, + route: '/dashboard', + }, + { + type: 'link', + id: 'applications', + display: $localize`Applications`, + route: '/applications', + }, + { + type: 'link', + id: 'partitions', + display: $localize`Partitions`, + route: '/partitions', + }, + { + type: 'link', + id: 'sessions', + display: $localize`Sessions`, + route: '/sessions', + }, + { + type: 'link', + id: 'tasks', + display: $localize`Tasks`, + route: '/tasks', + }, + { + type: 'link', + id: 'results', + display: $localize`Results`, + route: '/results', + }, + { + type: 'divider', + id: 'divider', + display: $localize`Divider`, + route: null, + }, + ]; + + const mockNavigationService = { + restoreSidebar: jest.fn(() => [...mockSideBar]), + saveSidebar: jest.fn(), + updateSidebar: jest.fn(), + defaultSidebar: [...mockSideBar], + sidebarItems: [...mockSidebarItems] + }; + + const mockKeys: Key[] = ['applications-columns', 'dashboard-lines', 'language']; + + const mockStorageService = { + restoreKeys: jest.fn(() => new Set([...mockKeys])), + removeItem: jest.fn(), + importData: jest.fn(), + exportData: jest.fn(), + }; + + let dialogResult: boolean; + + const mockDialog = { + open: jest.fn(() => { + return { + afterClosed: jest.fn(() => of(dialogResult)) + }; + }) + }; + + const mockHttpClient = { + get: jest.fn() + }; + + beforeEach(() => { + component = TestBed.configureTestingModule({ + providers: [ + IndexComponent, + IconsService, + { provide: NotificationService, useValue: mockNotificationService }, + { provide: NavigationService, useValue: mockNavigationService }, + { provide: StorageService, useValue: mockStorageService }, + { provide: MatDialog, useValue: mockDialog }, + { provide: HttpClient, useValue: mockHttpClient }, + ] + }).inject(IndexComponent); + component.ngOnInit(); + }); + + it('should run', () => { + expect(component).toBeTruthy(); + }); + + describe('initialisation', () => { + it('should set keys', () => { + expect(component.keys).toEqual(new Set(mockKeys)); + }); + + it('should set sidebar', () => { + expect(component.sidebar).toEqual(mockSideBar); + }); + }); + + it('should retrieve icons', () => { + expect(component.getIcon('heart')).toEqual('favorite'); + }); + + it('should reset sidebar', () => { + component.onRestoreSidebar(); + expect(mockNavigationService.restoreSidebar).toHaveBeenCalled(); + }); + + it('should clear side bar', () => { + component.sidebar = ['applications', 'divider', 'partitions']; + dialogResult = true; + component.onClearSideBar(); + expect(component.sidebar).toEqual(mockSideBar); + }); + + describe('onSaveSideBar', () => { + it('should save sidebar', () => { + component.onSaveSidebar(); + expect(mockNavigationService.saveSidebar).toHaveBeenCalledWith(component.sidebar); + }); + + it('should restore keys', () => { + component.keys = new Set(); + component.onSaveSidebar(); + expect(component.keys).toEqual(new Set(mockKeys)); + }); + }); + + it('should remove an item of the sidebar according to its index', () => { + component.onRemoveSidebarItem(0); + expect(component.sidebar).toEqual(['dashboard', 'sessions', 'tasks']); + }); + + it('should add a sidebar item at the end of the set', () => { + component.onAddSidebarItem(); + expect(component.sidebar).toEqual([...mockSideBar, 'dashboard']); + }); + + it('should return the sidebar items', () => { + expect(component.getSidebarItems()).toEqual(mockSidebarItems.map(item => { + return { + name: item.display, + value: item.id + }; + })); + }); + + describe('findSidebarItem', () => { + it('should find a sidebar item', () => { + expect(component.findSidebarItem('applications')).toEqual({ + type: 'link', + id: 'applications', + display: $localize`Applications`, + route: '/applications', + }); + }); + + it('should throw an Error if it does not find any item', () => { + expect(() => component.findSidebarItem('notExisting' as Sidebar)).toThrow(); + }); + }); + + it('should update the sidebar item on change', () => { + component.onSidebarItemChange(0, 'results'); + expect(component.sidebar[0]).toEqual('results'); + }); + + describe('updateKeySelection', () => { + const keys: Key[] = ['dashboard-lines', 'applications-columns']; + + beforeEach(() => { + component.selectedKeys = new Set(keys); + }); + + it('should delete the key from the selection', () => { + const event = { + source: { + name: 'dashboard-lines' as Key + } + } as MatCheckboxChange; + component.updateKeySelection(event); + expect(component.selectedKeys).toEqual(new Set(['applications-columns'])); + }); + + it('should add the key to the selection', () => { + const event = { + source: { + name: 'language' as Key + } + } as MatCheckboxChange; + component.updateKeySelection(event); + expect(component.selectedKeys).toEqual(new Set([...keys, 'language'])); + }); + }); + + describe('onSubmitStorage', () => { + const keys: Key[] = ['dashboard-lines', 'applications-columns']; + + beforeEach(() => { + component.selectedKeys = new Set(keys); + const event = { + preventDefault: jest.fn() + } as unknown as SubmitEvent; + component.onSubmitStorage(event); + }); + + it('should delete all selected keys', () => { + expect(component.keys).toEqual(new Set(['language'])); + }); + + it('should remove all selected keys from the storage', () => { + expect(mockStorageService.removeItem).toHaveBeenCalledTimes(keys.length); + }); + + it('should clear selectedKeys', () => { + expect(component.selectedKeys).toEqual(new Set([])); + }); + + it('should notify on success', () => { + expect(mockNotificationService.success).toHaveBeenCalled(); + }); + }); + + describe('clear All', () => { + const serverReturn = JSON.stringify({language: 'en'}); + mockHttpClient.get.mockReturnValue(of(serverReturn)); + dialogResult = true; + + beforeEach(() => { + component.clearAll(); + }); + + it('should delete all keys', () => { + expect(component.keys).toEqual(new Set()); + }); + + it('should remove all items from storageService', () => { + expect(mockStorageService.removeItem).toHaveBeenCalledTimes(mockKeys.length); + }); + + it('should retrieve server config', () => { + expect(mockStorageService.importData).toHaveBeenCalledWith(serverReturn as string, false, false); + }); + + it('should notify on success', () => { + expect(mockNotificationService.success).toHaveBeenCalled(); + }); + }); + + describe('exportData', () => { + const anchor = { + href: '', + download: '', + click: jest.fn() + }; + + global.document.createElement = jest.fn().mockReturnValue(anchor); + + global.URL.createObjectURL = jest.fn(); + + beforeEach(() => { + component.exportData(); + }); + + it('should download the settings', () => { + expect(anchor.download).toContain('settings.json'); + }); + + it('should click the anchor', () => { + expect(anchor.click).toHaveBeenCalled(); + }); + + it('should notify on success', () => { + expect(mockNotificationService.success).toHaveBeenCalled(); + }); + }); + + describe('onSubmitImport', () => { + const newSideBar: Sidebar[] = ['results', 'partitions']; + const data = {'navigation-sidebar': newSideBar}; + + const file = new File([JSON.stringify(data)], 'settings', {type: 'application/json'}); + const target = { + querySelector: jest.fn().mockReturnValue({files: [file]}), + reset: jest.fn() + }; + + const event = { + target: target, + preventDefault: jest.fn() + } as unknown as SubmitEvent; + + jest.spyOn(global, 'FileReader').mockReturnValue(new FakeFileReader(JSON.stringify(data))); + + beforeEach(() => { + mockStorageService.restoreKeys.mockReturnValueOnce(new Set(Object.keys(data) as Key[])); + mockNavigationService.restoreSidebar.mockReturnValueOnce(data['navigation-sidebar']); + }); + + it('should not accept undefined forms', () => { + expect(component.onSubmitImport({target: undefined, preventDefault: jest.fn()} as unknown as SubmitEvent)).toBeUndefined(); + }); + + it('should not accept invalid input', () => { + target.querySelector.mockReturnValueOnce(undefined); + expect(component.onSubmitImport(event)).toBeUndefined(); + }); + + it('should not accept empty files input', () => { + target.querySelector.mockReturnValueOnce({files: []}); + expect(component.onSubmitImport(event)).toBeUndefined(); + }); + + it('should notify on empty file', () => { + target.querySelector.mockReturnValueOnce({files: []}); + component.onSubmitImport(event); + expect(mockNotificationService.error).toHaveBeenCalled(); + }); + + it('should not accept not json file', () => { + target.querySelector.mockReturnValueOnce({files: [{type: 'application/txt'}]}); + component.onSubmitImport(event); + expect(component.onSubmitImport(event)).toBeUndefined(); + }); + + it('should notify on wrong file type', () => { + target.querySelector.mockReturnValueOnce({files: [{type: 'application/txt'}]}); + component.onSubmitImport(event); + expect(mockNotificationService.error).toHaveBeenCalled(); + }); + + it('should reset the form on wrong file type', () => { + target.querySelector.mockReturnValueOnce({files: [{type: 'application/txt'}]}); + component.onSubmitImport(event); + expect(target.reset).toHaveBeenCalled(); + }); + + it('should import data in storage', async () => { + component.onSubmitImport(event); + expect(mockStorageService.importData).toHaveBeenCalledWith(JSON.stringify(data)); + }); + + it('should set keys', () => { + component.onSubmitImport(event); + expect(component.keys).toEqual(new Set(Object.keys(data) as Key[])); + }); + + it('should set sidebar', () => { + component.onSubmitImport(event); + expect(mockNavigationService.updateSidebar).toHaveBeenCalledWith(data['navigation-sidebar']); + }); + + it('should notify on success', () => { + component.onSubmitImport(event); + expect(mockNotificationService.success).toHaveBeenCalled(); + }); + + it('should console warn in case of reading error', () => { + console.warn = jest.fn().mockImplementation(() => {}); + mockStorageService.importData.mockImplementationOnce(() => {throw new Error();}); + component.onSubmitImport(event); + expect(console.warn).toHaveBeenCalled(); + }); + + it('should notify on error', () => { + console.warn = jest.fn().mockImplementation(() => {}); + mockStorageService.importData.mockImplementationOnce(() => {throw new Error();}); + component.onSubmitImport(event); + expect(mockNotificationService.error).toHaveBeenCalled(); + }); + + it('should reset the form', () => { + component.onSubmitImport(event); + expect(target.reset).toHaveBeenCalled(); + }); + }); + + it('should update position on drop', () => { + const event = { + previousIndex: 0, + currentIndex: 1 + } as CdkDragDrop; + component.drop(event); + expect(component.sidebar).toEqual(['dashboard', 'profile', 'sessions', 'tasks']); + }); + + it('should retrieve the config file name', () => { + const fileName = 'settings'; + const event = { + target: { + files: { + item: jest.fn().mockReturnValue({name: fileName}) + } + } + } as unknown as Event; + component.addConfigFile(event); + expect(component.fileName).toEqual(fileName); + }); +}); \ No newline at end of file diff --git a/src/app/settings/index.component.ts b/src/app/settings/index.component.ts index a5bd121ac..1b5ef2222 100644 --- a/src/app/settings/index.component.ts +++ b/src/app/settings/index.component.ts @@ -154,23 +154,23 @@ export class IndexComponent implements OnInit { sidebar: Sidebar[] = []; readonly dialog = inject(MatDialog); - #iconsService = inject(IconsService); - #notificationService = inject(NotificationService); - #navigationService = inject(NavigationService); - #storageService = inject(StorageService); - httpClient = inject(HttpClient); + private readonly iconsService = inject(IconsService); + private readonly notificationService = inject(NotificationService); + private readonly navigationService = inject(NavigationService); + private readonly storageService = inject(StorageService); + private readonly httpClient = inject(HttpClient); ngOnInit(): void { - this.keys = this.#sortKeys(this.#storageService.restoreKeys()); - this.sidebar = this.#navigationService.restoreSidebar(); + this.keys = this.sortKeys(this.storageService.restoreKeys()); + this.sidebar = this.navigationService.restoreSidebar(); } getIcon(name: string | null): string { - return this.#iconsService.getIcon(name); + return this.iconsService.getIcon(name); } - onResetSidebar(): void { - this.sidebar = this.#navigationService.restoreSidebar(); + onRestoreSidebar(): void { + this.sidebar = this.navigationService.restoreSidebar(); } onClearSideBar(): void { @@ -182,13 +182,13 @@ export class IndexComponent implements OnInit { }); } - clearSideBar(): void { - this.sidebar = Array.from(this.#navigationService.defaultSidebar); + private clearSideBar(): void { + this.sidebar = Array.from(this.navigationService.defaultSidebar); } onSaveSidebar(): void { - this.#navigationService.saveSidebar(this.sidebar); - this.keys = this.#sortKeys(this.#storageService.restoreKeys()); + this.navigationService.saveSidebar(this.sidebar); + this.keys = this.sortKeys(this.storageService.restoreKeys()); } onRemoveSidebarItem(index: number): void { @@ -200,14 +200,14 @@ export class IndexComponent implements OnInit { } getSidebarItems(): { name: string, value: Sidebar }[] { - return this.#navigationService.sidebarItems.map(item => ({ + return this.navigationService.sidebarItems.map(item => ({ name: item.display, value: item.id as Sidebar, })); } findSidebarItem(id: Sidebar): SidebarItem { - const item = this.#navigationService.sidebarItems.find(item => item.id === id); + const item = this.navigationService.sidebarItems.find(item => item.id === id); if (!item) { throw new Error(`Sidebar item with id "${id}" not found`); @@ -233,12 +233,12 @@ export class IndexComponent implements OnInit { for (const key of this.selectedKeys) { this.keys.delete(key); - this.#storageService.removeItem(key); + this.storageService.removeItem(key); } this.selectedKeys.clear(); - this.#notificationService.success('Data cleared'); + this.notificationService.success('Data cleared'); } clearAll(): void { @@ -246,30 +246,30 @@ export class IndexComponent implements OnInit { dialogRef.afterClosed().subscribe(result => { if (result) { - this.#clearAll(); - this.#getServerConfig(); - this.#notificationService.success('All data cleared'); + this.clearAllKeys(); + this.getServerConfig(); + this.notificationService.success('All data cleared'); } }); } - #clearAll(): void { + private clearAllKeys(): void { for (const key of this.keys) { this.keys.delete(key); - this.#storageService.removeItem(key); + this.storageService.removeItem(key); } } - #getServerConfig() { + private getServerConfig() { this.httpClient.get('/static/gui_configuration').subscribe(data => { if (data && Object.keys(data).length !== 0) { - this.#storageService.importData(data as string, false, false); + this.storageService.importData(data as string, false, false); } }); } exportData(): void { - const data = JSON.stringify(this.#storageService.exportData()); + const data = JSON.stringify(this.storageService.exportData()); const blob = new Blob([data], { type: 'application/json' }); const url = URL.createObjectURL(blob); @@ -281,7 +281,7 @@ export class IndexComponent implements OnInit { anchor.download = `${date}-${id}-settings.json`; anchor.click(); - this.#notificationService.success('Settings exported'); + this.notificationService.success('Settings exported'); } onSubmitImport(event: SubmitEvent): void { @@ -302,12 +302,12 @@ export class IndexComponent implements OnInit { const file = fileInput.files?.[0]; if (!file) { - this.#notificationService.error('No file selected'); + this.notificationService.error('No file selected'); return; } - if( file.type !== 'application/json' ) { - this.#notificationService.error(`'${file.name}' is not a JSON file`); + if(file.type !== 'application/json') { + this.notificationService.error(`'${file.name}' is not a JSON file`); form.reset(); return; } @@ -317,26 +317,25 @@ export class IndexComponent implements OnInit { reader.onload = () => { const data = reader.result as string; try { - this.#storageService.importData(data); - this.keys = this.#sortKeys(this.#storageService.restoreKeys()); + this.storageService.importData(data); + this.keys = this.sortKeys(this.storageService.restoreKeys()); const hasSidebarKey = this.keys.has('navigation-sidebar'); // Update sidebar if (hasSidebarKey) { - this.sidebar = this.#navigationService.restoreSidebar(); - this.#navigationService.updateSidebar(this.sidebar); + this.sidebar = this.navigationService.restoreSidebar(); + this.navigationService.updateSidebar(this.sidebar); } - this.#notificationService.success('Settings imported'); + this.notificationService.success('Settings imported'); } catch (e) { console.warn(e); - this.#notificationService.error('Settings could not be imported.'); + this.notificationService.error('Settings could not be imported.'); } form.reset(); }; - reader.readAsText(file); } @@ -344,7 +343,7 @@ export class IndexComponent implements OnInit { moveItemInArray(this.sidebar, event.previousIndex, event.currentIndex); } - #sortKeys(keys: Set): Set { + private sortKeys(keys: Set): Set { return new Set([...keys].sort((a, b) => a.localeCompare(b))); } diff --git a/src/app/tasks/services/tasks-filters.service.ts b/src/app/tasks/services/tasks-filters.service.ts index 34b12f086..2f2e6e0f1 100644 --- a/src/app/tasks/services/tasks-filters.service.ts +++ b/src/app/tasks/services/tasks-filters.service.ts @@ -20,6 +20,7 @@ export class TasksFiltersService implements FiltersServiceOptionsInterface { key: 'processingToEndDuration', type: 'duration' }, + { + key: 'createdBy', + }, { key: 'createdAt', type: 'date' @@ -107,22 +111,22 @@ export class TasksInspectionService extends InspectionService { { key: 'dataDependencies', link: 'results', - queryParams: '0-root-7-0' + queryParams: `0-root-${ResultRawEnumField.RESULT_RAW_ENUM_FIELD_RESULT_ID}-0` }, { key: 'expectedOutputIds', link: 'results', - queryParams: '0-root-7-0' + queryParams: `0-root-${ResultRawEnumField.RESULT_RAW_ENUM_FIELD_RESULT_ID}-0` }, { key: 'parentTaskIds', link: 'tasks', - queryParams: '0-root-1-0' + queryParams: `0-root-${TaskSummaryEnumField.TASK_SUMMARY_ENUM_FIELD_TASK_ID}-0` }, { key: 'retryOfIds', link: 'tasks', - queryParams: '0-root-1-0' + queryParams: `0-root-${TaskSummaryEnumField.TASK_SUMMARY_ENUM_FIELD_TASK_ID}-0` } ]; } \ No newline at end of file diff --git a/src/app/tasks/show.component.spec.ts b/src/app/tasks/show.component.spec.ts index 43a337250..a4c3e324e 100644 --- a/src/app/tasks/show.component.spec.ts +++ b/src/app/tasks/show.component.spec.ts @@ -34,13 +34,19 @@ describe('AppShowComponent', () => { const returnedTask = { id: 'taskId-12345', + sessionId: 'sessionId', options: { partitionId: 'partitionId' }, - status: TaskStatus.TASK_STATUS_PROCESSING + status: TaskStatus.TASK_STATUS_PROCESSING, + parentTaskIds: [ + 'sessionId', + 'taskId-789' + ] } as TaskRaw; + const mockTasksGrpcService = { - get$: jest.fn((): Observable => of({task: returnedTask} as GetTaskResponse)), + get$: jest.fn((): Observable => of({ task: returnedTask } as GetTaskResponse)), cancel$: jest.fn(() => of({})) }; @@ -104,7 +110,7 @@ describe('AppShowComponent', () => { describe('get status', () => { it('should return undefined if there is no data', () => { mockTasksGrpcService.get$.mockReturnValueOnce(of(null)); - jest.spyOn(console, 'error').mockImplementation(() => {}); + jest.spyOn(console, 'error').mockImplementation(() => { }); component.refresh.next(); expect(component.status).toEqual(undefined); }); @@ -133,11 +139,15 @@ describe('AppShowComponent', () => { }); it('should set resultsQueryParams', () => { - expect(component.resultsQueryParams).toEqual({'0-root-3-0': returnedTask.id}); + expect(component.resultsQueryParams).toEqual({ '0-root-3-0': returnedTask.id }); + }); + + it('should filter the sessionID from the parent tasks IDs', () => { + expect(component.data()?.parentTaskIds).toEqual(returnedTask.parentTaskIds.filter(taskId => taskId !== returnedTask.sessionId)); }); it('should catch errors', () => { - jest.spyOn(console, 'error').mockImplementation(() => {}); + jest.spyOn(console, 'error').mockImplementation(() => { }); mockTasksGrpcService.get$.mockReturnValueOnce(throwError(() => new Error())); const spy = jest.spyOn(component, 'handleError'); component.refresh.next(); @@ -147,15 +157,15 @@ describe('AppShowComponent', () => { describe('Handle errors', () => { it('should log errors', () => { - const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); + const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => { }); const errorMessage = 'ErrorMessage'; - component.handleError({statusMessage: errorMessage} as GrpcStatusEvent); + component.handleError({ statusMessage: errorMessage } as GrpcStatusEvent); expect(errorSpy).toHaveBeenCalled(); }); it('should notify the error', () => { const errorMessage = 'ErrorMessage'; - component.handleError({statusMessage: errorMessage} as GrpcStatusEvent); + component.handleError({ statusMessage: errorMessage } as GrpcStatusEvent); expect(mockNotificationService.error).toHaveBeenCalledWith('Could not retrieve data.'); }); }); @@ -200,7 +210,7 @@ describe('AppShowComponent', () => { }); it('should log errors', () => { - const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); + const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => { }); mockTasksGrpcService.cancel$.mockReturnValueOnce(throwError(() => new Error())); component.cancel(); expect(errorSpy).toHaveBeenCalled(); diff --git a/src/app/tasks/show.component.ts b/src/app/tasks/show.component.ts index 4c2c094b8..7dfa63a5a 100644 --- a/src/app/tasks/show.component.ts +++ b/src/app/tasks/show.component.ts @@ -89,21 +89,22 @@ export class ShowComponent extends AppShowComponent im } getDataFromResponse(data: GetTaskResponse): TaskRaw | undefined { - return data.task; + return data.task; } afterDataFetching(): void { const data = this.data(); this.status = data?.status; if (data) { + data.parentTaskIds = data.parentTaskIds.filter(taskId => taskId !== data.sessionId); this.createResultQueryParams(); this.canCancel = !this.tasksStatusesService.taskNotEnded(data.status); } } - + cancel(): void { const data = this.data(); - if(data) { + if (data) { this.grpcService.cancel$([data.id]).subscribe({ complete: () => { this.success('Task canceled'); diff --git a/src/app/types/navigation.ts b/src/app/types/navigation.ts index 7ef00aadc..df8eaa136 100644 --- a/src/app/types/navigation.ts +++ b/src/app/types/navigation.ts @@ -3,7 +3,7 @@ * * A sidebar is build using a list of SidebarItems. */ -const ALL_SIDEBAR_LINKS = ['profile', 'dashboard', 'applications', 'sessions', 'partitions', 'results', 'tasks', 'healthcheck', 'divider'] as const; +const ALL_SIDEBAR_LINKS = ['profile', 'dashboard', 'applications', 'sessions', 'partitions', 'results', 'tasks', 'divider'] as const; export type Sidebar = typeof ALL_SIDEBAR_LINKS[number];