From b4a025d2f3dde3dd55ef9392bea567748d1f4e3b Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Fri, 26 Jul 2024 15:37:54 +0200 Subject: [PATCH 01/16] fix: update angular versions --- package-lock.json | 3750 +++++++++++++++++++++++++++++---------------- package.json | 34 +- 2 files changed, 2469 insertions(+), 1315 deletions(-) diff --git a/package-lock.json b/package-lock.json index 48b91023..44917f91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,26 @@ { "name": "@onecx/onecx-portal-ui-libs", - "version": "5.0.1", + "version": "5.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@onecx/onecx-portal-ui-libs", - "version": "5.0.1", + "version": "5.1.3", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@angular-architects/module-federation": "18.0.4", - "@angular/animations": "18.0.5", - "@angular/cdk": "^18.0.6", - "@angular/common": "18.0.5", - "@angular/compiler": "18.0.5", - "@angular/core": "18.0.5", - "@angular/elements": "18.0.5", - "@angular/forms": "18.0.5", - "@angular/platform-browser": "18.0.5", - "@angular/platform-browser-dynamic": "18.0.5", - "@angular/router": "18.0.5", + "@angular/animations": "^18.1.2", + "@angular/cdk": "^18.1.2", + "@angular/common": "^18.1.2", + "@angular/compiler": "^18.1.2", + "@angular/core": "^18.1.2", + "@angular/elements": "^18.1.2", + "@angular/forms": "^18.1.2", + "@angular/platform-browser": "^18.1.2", + "@angular/platform-browser-dynamic": "^18.1.2", + "@angular/router": "^18.1.2", "@ngneat/until-destroy": "^10.0.0", "@ngrx/effects": "^18.0.1", "@ngrx/operators": "^18.0.1", @@ -48,16 +48,16 @@ "zone.js": "^0.14.7" }, "devDependencies": { - "@angular-devkit/architect": "0.1800.6", - "@angular-devkit/build-angular": "^18.0.6", - "@angular-devkit/core": "^18.0.6", - "@angular-devkit/schematics": "^18.0.6", + "@angular-devkit/architect": "^0.1801.2", + "@angular-devkit/build-angular": "^18.1.2", + "@angular-devkit/core": "^18.1.2", + "@angular-devkit/schematics": "^18.1.2", "@angular-eslint/eslint-plugin": "^18.1.0", "@angular-eslint/eslint-plugin-template": "^18.1.0", "@angular-eslint/template-parser": "^18.1.0", - "@angular/cli": "~18.0.6", - "@angular/compiler-cli": "18.0.5", - "@angular/language-service": "18.0.5", + "@angular/cli": "^18.1.2", + "@angular/compiler-cli": "^18.1.2", + "@angular/language-service": "^18.1.2", "@happy-dom/jest-environment": "^14.12.3", "@nx/angular": "19.4.0", "@nx/esbuild": "19.4.0", @@ -116,7 +116,8 @@ } }, "libs/portal-layout-styles": { - "version": "5.0.1", + "name": "@onecx/portal-layout-styles", + "version": "5.1.3", "peerDependencies": { "tslib": "^2.6.3" } @@ -165,12 +166,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1800.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1800.6.tgz", - "integrity": "sha512-VJ08XM9XR8d3ldXEMIeaiamBSvQqX+ucIKw73zubP37yFVAuvXriDOFskcouVUT0RxWXIZVcNxrgp2t3FE4F6w==", + "version": "0.1801.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.2.tgz", + "integrity": "sha512-y2rV8wRwTnmCH/dUo632wHi6r41Gs9XucyGm/ybzB/5tN3x6dS+O3c3zajRpdqTUr8YcD6os6sT+Ay6zS31tOw==", "dev": true, "dependencies": { - "@angular-devkit/core": "18.0.6", + "@angular-devkit/core": "18.1.2", "rxjs": "7.8.1" }, "engines": { @@ -179,66 +180,17 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.6.tgz", - "integrity": "sha512-07U0S2fpUBjkg4k6uAEQQHSFfearyHGrONlgkxAlk7HWM5jfHp/8D2+ui1OFZgXpSAHF2C5gULbze/2o9ZNgag==", - "dev": true, - "dependencies": { - "ajv": "8.13.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "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" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/architect/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/architect/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true - }, "node_modules/@angular-devkit/build-angular": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.1.1.tgz", - "integrity": "sha512-sd/eOzitC8yN9xl/TbbuDxXL1LRZCX3gwKAddV1fJSrXJHEmDM7PhdQbNEPd2O58evMKSiMZK91WnYN0lhTZtw==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.1.2.tgz", + "integrity": "sha512-f4X6UOOHghofMwsYK/3ZAskI3ocSyw14J2SExz7hBPIQicoJgnrzloOkYUkXBWv2q0n11m9wjOlQV+4KPGqJQw==", "dev": true, "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1801.1", - "@angular-devkit/build-webpack": "0.1801.1", - "@angular-devkit/core": "18.1.1", - "@angular/build": "18.1.1", + "@angular-devkit/architect": "0.1801.2", + "@angular-devkit/build-webpack": "0.1801.2", + "@angular-devkit/core": "18.1.2", + "@angular/build": "18.1.2", "@babel/core": "7.24.7", "@babel/generator": "7.24.7", "@babel/helper-annotate-as-pure": "7.24.7", @@ -249,7 +201,7 @@ "@babel/preset-env": "7.24.7", "@babel/runtime": "7.24.7", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "18.1.1", + "@ngtools/webpack": "18.1.2", "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.19", @@ -357,91 +309,6 @@ } } }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { - "version": "0.1801.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.1.tgz", - "integrity": "sha512-7dIQ++D5PTzLgs4sEvi7pMpG4nY4CTnzLKbqKDI++fJKa7FEpVjje1tsr1r8ap8xD0QXr6sIxmQ4hdLeWwPhDQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "18.1.1", - "rxjs": "7.8.1" - }, - "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" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular/build": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.1.1.tgz", - "integrity": "sha512-DbgFqpaZE6g8VZaPboB54cVuERlZV6SAkNPEaMT/53cnCxL4QdSQs1aT9Wy8G1Ksr4WI5AZMdPic/TVF0KBGGQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1801.1", - "@babel/core": "7.24.7", - "@babel/helper-annotate-as-pure": "7.24.7", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-syntax-import-attributes": "7.24.7", - "@inquirer/confirm": "3.1.11", - "@vitejs/plugin-basic-ssl": "1.1.0", - "ansi-colors": "4.1.3", - "browserslist": "^4.23.0", - "critters": "0.0.24", - "esbuild": "0.21.5", - "fast-glob": "3.3.2", - "https-proxy-agent": "7.0.5", - "lmdb": "3.0.12", - "magic-string": "0.30.10", - "mrmime": "2.0.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.6.1", - "rollup": "4.18.0", - "sass": "1.77.6", - "semver": "7.6.2", - "undici": "6.19.2", - "vite": "5.3.2", - "watchpack": "2.4.1" - }, - "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", - "@angular/localize": "^18.0.0", - "@angular/platform-server": "^18.0.0", - "@angular/service-worker": "^18.0.0", - "less": "^4.2.0", - "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.4 <5.6" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -810,257 +677,13 @@ "node": ">=12" } }, - "node_modules/@angular-devkit/build-angular/node_modules/@inquirer/confirm": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.11.tgz", - "integrity": "sha512-3wWw10VPxQP279FO4bzWsf8YjIAq7NdwATJ4xS2h1uwsXZu/RmtOVV95rZ7yllS1h/dzu+uLewjMAzNDEj8h2w==", - "dev": true, - "dependencies": { - "@inquirer/core": "^8.2.4", - "@inquirer/type": "^1.3.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@inquirer/core": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.2.4.tgz", - "integrity": "sha512-7vsXSfxtrrbwMTirfaKwPcjqJy7pzeuF/bP62yo1NQrRJ5HjmMlrhZml/Ljm9ODc1RnbhJlTeSnCkjtFddKjwA==", - "dev": true, - "dependencies": { - "@inquirer/figures": "^1.0.3", - "@inquirer/type": "^1.3.3", - "@types/mute-stream": "^0.0.4", - "@types/node": "^20.14.9", - "@types/wrap-ansi": "^3.0.0", - "ansi-escapes": "^4.3.2", - "cli-spinners": "^2.9.2", - "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", - "picocolors": "^1.0.1", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@angular-devkit/build-angular/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@angular-devkit/build-angular/node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "optional": true, "bin": { "esbuild": "bin/esbuild" }, @@ -1121,41 +744,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/@angular-devkit/build-angular/node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "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.2" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -1168,25 +756,13 @@ "node": ">=10" } }, - "node_modules/@angular-devkit/build-angular/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1801.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1801.1.tgz", - "integrity": "sha512-9qImQciytrf433+h1aAWMD/Qn9cx7amlLtHX9j6ToBMWxY3L9ZKzwlCZ3Q+d6VWs7QrN/X9j8VkJl913yuXeCQ==", + "version": "0.1801.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1801.2.tgz", + "integrity": "sha512-S960l/BPfEAgiYs35PpqXKwg+vJbdnOAXD6MCLTMz+T/h3go/D+FtQWLLV4kP6222BMFJHl3/sd4Q6cvpEo0eg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1801.1", + "@angular-devkit/architect": "0.1801.2", "rxjs": "7.8.1" }, "engines": { @@ -1199,25 +775,10 @@ "webpack-dev-server": "^5.0.2" } }, - "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { - "version": "0.1801.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.1.tgz", - "integrity": "sha512-7dIQ++D5PTzLgs4sEvi7pMpG4nY4CTnzLKbqKDI++fJKa7FEpVjje1tsr1r8ap8xD0QXr6sIxmQ4hdLeWwPhDQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "18.1.1", - "rxjs": "7.8.1" - }, - "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" - } - }, "node_modules/@angular-devkit/core": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.1.tgz", - "integrity": "sha512-YFzn/+8LezX7ZJhMQisvrqfkxJm6+JOtbWFj8K/luK0rTDmE8Z9n9r6kJ36FnHcLJ5MvvVaBc7n1v1wnzdqXpg==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.2.tgz", + "integrity": "sha512-WYkdKT/Ime5seBX7S7S4aWQbgCG5U3otCvAg/XiMn6scexTo3EZe2jrJl8nxGGFHNWrePoD86LvJOxhnCkEKEA==", "dev": true, "dependencies": { "ajv": "8.16.0", @@ -1242,12 +803,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.1.1.tgz", - "integrity": "sha512-r+DAvVvv+hOuhh19PefPOKa/zDkvzLHz/YOLGq/k1KfJRtNtjCKiDsXp1s6HSzYdJD1H10wnzUIh48uvxfwH5Q==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.1.2.tgz", + "integrity": "sha512-v8aCJ1tPPzXsdiCoZxkc6YzLGhzJgC/6QauT03/Z6wWo8uI6DKibQQwQBawRE5FN5lKDpuGlNDv40EDtVYkQSA==", "dev": true, "dependencies": { - "@angular-devkit/core": "18.1.1", + "@angular-devkit/core": "18.1.2", "jsonc-parser": "3.3.1", "magic-string": "0.30.10", "ora": "5.4.1", @@ -1326,9 +887,9 @@ } }, "node_modules/@angular/animations": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.0.5.tgz", - "integrity": "sha512-RYwlS+4I33beAWdzFFmaDPqXZN+r66qPzzMOk9LQguwF76eBJbykHniODalSLvjrY6Iz7CULavByYNpzq2TT7A==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.1.2.tgz", + "integrity": "sha512-Gbqp3TSrkDOQgxCMK7qm+IBFxw8+IgyA//S5ZgXt2qrrhQWVDF4uQJbzusqDSUcHpdtOD05X81NFgUc8f13UFA==", "dependencies": { "tslib": "^2.3.0" }, @@ -1336,13 +897,501 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.0.5" + "@angular/core": "18.1.2" + } + }, + "node_modules/@angular/build": { + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.1.2.tgz", + "integrity": "sha512-DuXXjE4x3tDedZQTsZBRuMCkYfYSdChtnxyf2F0CywKIfcsogbhyt8bYoUyC8yJp2CLyTamdvJGcI1Gh1678Zw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1801.2", + "@babel/core": "7.24.7", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.24.7", + "@inquirer/confirm": "3.1.11", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "browserslist": "^4.23.0", + "critters": "0.0.24", + "esbuild": "0.21.5", + "fast-glob": "3.3.2", + "https-proxy-agent": "7.0.5", + "lmdb": "3.0.12", + "magic-string": "0.30.10", + "mrmime": "2.0.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "rollup": "4.18.0", + "sass": "1.77.6", + "semver": "7.6.2", + "undici": "6.19.2", + "vite": "5.3.2", + "watchpack": "2.4.1" + }, + "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", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "less": "^4.2.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular/build/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/build/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/@angular/build/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@angular/cdk": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.1.tgz", - "integrity": "sha512-IaDjvRUgAoKnEeafrnBX+hjTR+1M3O3fV3AybBCjN4NuiPtuyOJiTMg0cTv6RbluJ/SenbT4MQq3tMpOsa9i4w==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.2.tgz", + "integrity": "sha512-yiAJ/9AMVF2zk7VLEuyJxNJwpV84xLlf0zCaXiYIs6Z8xU6m8N9KR2nqxC59gQc4nTjItmoO/Sgk7XH0X4yGOQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -1356,23 +1405,23 @@ } }, "node_modules/@angular/cli": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.0.7.tgz", - "integrity": "sha512-CHnpI6d6MpXFsx3750jN4IX3oeieIMKzUPVZUMvPgDbhGFfChHKdxdJStDjYsH47pORb2pMHULw0RJCAPvtB9A==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.1.2.tgz", + "integrity": "sha512-5H0scWgJcDE3NSM6/j/xSwNfAQBVOhVjXuj+nZOaEkJC0Bxh6AoEdWpQdzmZ6qSlx4LMlJYI6P/sH0kiBlFfgA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1800.7", - "@angular-devkit/core": "18.0.7", - "@angular-devkit/schematics": "18.0.7", - "@schematics/angular": "18.0.7", + "@angular-devkit/architect": "0.1801.2", + "@angular-devkit/core": "18.1.2", + "@angular-devkit/schematics": "18.1.2", + "@inquirer/prompts": "5.0.7", + "@listr2/prompt-adapter-inquirer": "2.0.13", + "@schematics/angular": "18.1.2", "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.2", - "inquirer": "9.2.22", - "jsonc-parser": "3.2.1", + "ini": "4.1.3", + "jsonc-parser": "3.3.1", + "listr2": "8.2.3", "npm-package-arg": "11.0.2", "npm-pick-manifest": "9.0.1", - "ora": "5.4.1", "pacote": "18.0.6", "resolve": "1.22.8", "semver": "7.6.2", @@ -1388,14 +1437,15 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1800.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1800.7.tgz", - "integrity": "sha512-ZYIjdngUOjY6G2XJGHtATLr+HhJWdo7Z3ATlzQTGI9D1a02kW3UFlELQBhFIn+1o78FU6W0STZgyfBH8M7wD2w==", + "node_modules/@angular/cli/node_modules/@schematics/angular": { + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.1.2.tgz", + "integrity": "sha512-lTY9twQ30vEm3hjArUKQjKiYlbDUOHqbyY7MlynY5+T8XtYreMo20KHofxv5t5xZfPwj1z6/ppcMU2xZ4WbGUA==", "dev": true, "dependencies": { - "@angular-devkit/core": "18.0.7", - "rxjs": "7.8.1" + "@angular-devkit/core": "18.1.2", + "@angular-devkit/schematics": "18.1.2", + "jsonc-parser": "3.3.1" }, "engines": { "node": "^18.19.1 || ^20.11.1 || >=22.0.0", @@ -1403,73 +1453,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.0.7.tgz", - "integrity": "sha512-pVmuE37DNuTe3S4Lh1jg6U4dyHljiZiqI99u3gtS7PF765P4AeGlugHIYE7ztC74fYd9gy04sWnbeV+RQuBTVw==", - "dev": true, - "dependencies": { - "ajv": "8.13.0", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "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" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/schematics": { - "version": "18.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.0.7.tgz", - "integrity": "sha512-U0lYPjhOaxdw+0UwVsv5y+wJdZ6DD+0ASiommB7j9kEmrPp53MhSvYNYWvwbIWwJceDa3eNq3fAmQOlVXvFCVg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "18.0.7", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.10", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "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" - } - }, - "node_modules/@angular/cli/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular/cli/node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true - }, "node_modules/@angular/cli/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -1483,9 +1466,9 @@ } }, "node_modules/@angular/common": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.0.5.tgz", - "integrity": "sha512-yItVQSu+Rx8gthWJDTOHwbzItY8/lqmmmYA1RMex0u3GkJoX3/3TZSGXbbBXl8GH8vmQOfp9yj3C02JmlwldRg==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.1.2.tgz", + "integrity": "sha512-PXzRH5fCSmjGwNvopPfwAxcMqQPFLamyIjVJa5mwTyk5FLhKNrNecSo7m6ZpsfLPsW5Ipk/ups9RJD0Mep82Hw==", "dependencies": { "tslib": "^2.3.0" }, @@ -1493,14 +1476,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.0.5", + "@angular/core": "18.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.0.5.tgz", - "integrity": "sha512-U1/qjNDjxMukXwQrJZjmr87KVxQmHbD7fxVlg0+qafHLe+YDuCtyOfQSGEZrWhwktxvAYZbl3FK+m3Hnk/D3Nw==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.1.2.tgz", + "integrity": "sha512-ePoSW4S899bN+QKYFCDUHX8tSvycPxncduqsG403IHzawelG8cRMjtxNAN01tJvN1KcKwR6YUYdWt8PYgipBhw==", "dependencies": { "tslib": "^2.3.0" }, @@ -1508,7 +1491,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.0.5" + "@angular/core": "18.1.2" }, "peerDependenciesMeta": { "@angular/core": { @@ -1517,12 +1500,12 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.0.5.tgz", - "integrity": "sha512-aFKDDTsRmc691EkNRj9OkrKNXDOaHdXB42MyUrj3WwJIJFMnSY/UDf6h+CRVF0U+CITszFyWhmeHQRA/3mJWNg==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.1.2.tgz", + "integrity": "sha512-u8VMgPFECfu+Usl8nrl6zVPDEjnXK0XH5DdQPVo4c3NDI6zStugLJbQ+OLIsHYfzJHdxxVSsF56URG5OcVTLEw==", "dev": true, "dependencies": { - "@babel/core": "7.24.7", + "@babel/core": "7.24.9", "@jridgewell/sourcemap-codec": "^1.4.14", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", @@ -1540,14 +1523,74 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.0.5", - "typescript": ">=5.4 <5.5" + "@angular/compiler": "18.1.2", + "typescript": ">=5.4 <5.6" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@angular/core": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.0.5.tgz", - "integrity": "sha512-0UuL+aMMWGYksz09YBsiHq1li7GmL8obB3IC3T5MwDqnn7FGRUBfBUOZEkM6B+pwgg+RAtNdJkbCfbh1z74bFQ==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.1.2.tgz", + "integrity": "sha512-/wiewpA8KpEkXf3E/Q0+0H3Dgg5zCG/+vzAUVIOGP+0tYk8no0NUecHyXLjz0hRQOJ6a3zMKVtZO3wYl8WNGEg==", "dependencies": { "tslib": "^2.3.0" }, @@ -1560,9 +1603,9 @@ } }, "node_modules/@angular/elements": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-18.0.5.tgz", - "integrity": "sha512-yyNHxRh1hFqpKgcv7KBlSiiN7KQOvG5j62f2YWZYxdDTwt+T0e4aVqCbIvsG3qyBtuge1vvMpCKntAavTpbZtw==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-18.1.2.tgz", + "integrity": "sha512-ArhVCATsPYwZe25v/lHtgzpV9hC4l/ZVFny1SYYm4iu3TEImpYl8V4R5UJxrpuobCTGPLkr9jmx8jyFrbPTnGg==", "dependencies": { "tslib": "^2.3.0" }, @@ -1570,14 +1613,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.0.5", + "@angular/core": "18.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/forms": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.0.5.tgz", - "integrity": "sha512-nO7bN+nO2/czgKSvPx6ewqpfb8xXOyns06uovWpAXSH4jYoiZ6CHTHhOKrOL/3SRkhUV9u+EUXTTAOSBkS+OBA==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.1.2.tgz", + "integrity": "sha512-R0drnkmiU74XHMKUnrgxJNW3WHtKKsVMualyUANR26+SH07ZZFvuvXTx7u0pbh0d1JFK3hlWvZO7X52x1bH37w==", "dependencies": { "tslib": "^2.3.0" }, @@ -1585,25 +1628,25 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.0.5", - "@angular/core": "18.0.5", - "@angular/platform-browser": "18.0.5", + "@angular/common": "18.1.2", + "@angular/core": "18.1.2", + "@angular/platform-browser": "18.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-18.0.5.tgz", - "integrity": "sha512-ahZnsUk8q/4k+okP9hBcfWRiOiMximSAI7Vq5M/fe9cezykt8cWEzxgRoduTvDKoQPqcRl0nHlDYju2zkXcU6g==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-18.1.2.tgz", + "integrity": "sha512-2siwL+SFeAtNLjumFNmiHY1JI9/N30L2NCk/Z3ytfytZwMICunXOlMrnNare3YD9l097e4pWdniM7z8v04r2Nw==", "dev": true, "engines": { "node": "^18.19.1 || ^20.11.1 || >=22.0.0" } }, "node_modules/@angular/platform-browser": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.0.5.tgz", - "integrity": "sha512-hBKaGz7dhsjNhD0aWB8G2/YZQ/MaBhzFIQSAZMPs2ccAqH1Jx772/Y11k57seA3VaPpnL8WZ1apOSJgALUJ//w==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.2.tgz", + "integrity": "sha512-G/9dU6J+RyJ4qfWcxgVdUsVEF/2lQKCpC24spongOwn7yCTrORkopFEmuuwftZXaFoduxE2Q1i4GCiQkqcHRwQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -1611,9 +1654,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "18.0.5", - "@angular/common": "18.0.5", - "@angular/core": "18.0.5" + "@angular/animations": "18.1.2", + "@angular/common": "18.1.2", + "@angular/core": "18.1.2" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1622,9 +1665,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.0.5.tgz", - "integrity": "sha512-i8CXojKcjsKzD2JR2clIisqavlHCW1jw+F2hJVrf/JR9iu6kVpGpZOqb3yYHoQCsPa7hUzQnn0ewYwBvlWsDmw==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.1.2.tgz", + "integrity": "sha512-97sQTZbkOOQONSgJ/WsEfkH7FEaLShqJUaHiWaT00W95h+qmOhM2M00JtxZoREUK2HmH+Hoq/Triu1DC4RrtnQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -1632,16 +1675,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.0.5", - "@angular/compiler": "18.0.5", - "@angular/core": "18.0.5", - "@angular/platform-browser": "18.0.5" + "@angular/common": "18.1.2", + "@angular/compiler": "18.1.2", + "@angular/core": "18.1.2", + "@angular/platform-browser": "18.1.2" } }, "node_modules/@angular/router": { - "version": "18.0.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.0.5.tgz", - "integrity": "sha512-GmdzD5FZYPKCGP6mV3AZraAU6czfGcjjCym6mIsdJr3DyMwnQSwaaHAu8qlQbPDVfsP+gKVSPh1JxI1lzzarLA==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.1.2.tgz", + "integrity": "sha512-2+3IbCsnD+PukwrdD2oW7H69hPNs4raMzmiufD0HyTz8C75G1mYvRCzaf8qN41e9r/AsIGzwrczw30AgnCEmzw==", "dependencies": { "tslib": "^2.3.0" }, @@ -1649,9 +1692,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.0.5", - "@angular/core": "18.0.5", - "@angular/platform-browser": "18.0.5", + "@angular/common": "18.1.2", + "@angular/core": "18.1.2", + "@angular/platform-browser": "18.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -3772,6 +3815,16 @@ "statuses": "^2.0.1" } }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "dev": true, + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -5417,20 +5470,98 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, - "node_modules/@inquirer/confirm": { - "version": "3.1.17", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.17.tgz", - "integrity": "sha512-qCpt/AABzPynz8tr69VDvhcjwmzAryipWXtW8Vi6m651da4H/d0Bdn55LkxXD7Rp2gfgxvxzTdb66AhIA8gzBA==", + "node_modules/@inquirer/checkbox": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.4.2.tgz", + "integrity": "sha512-iZRNbTlSB9xXt/+jdMFViBdxw1ILWu3365rzfM5OLwAyOScbDFFGSH7LEUwoq1uOIo48ymOEwYSqP5y8hQMlmA==", "dev": true, "dependencies": { "@inquirer/core": "^9.0.5", - "@inquirer/type": "^1.5.1" + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.1", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox/node_modules/@inquirer/core": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.5.tgz", + "integrity": "sha512-QWG41I7vn62O9stYKg/juKXt1PEbr/4ZZCPb4KgXDQGwgA9M5NBTQ7FnOvT1ridbxkm/wTxLCNraUs7y47pIRQ==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.1", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.11", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.11.tgz", + "integrity": "sha512-3wWw10VPxQP279FO4bzWsf8YjIAq7NdwATJ4xS2h1uwsXZu/RmtOVV95rZ7yllS1h/dzu+uLewjMAzNDEj8h2w==", + "dev": true, + "dependencies": { + "@inquirer/core": "^8.2.4", + "@inquirer/type": "^1.3.3" }, "engines": { "node": ">=18" } }, "node_modules/@inquirer/core": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.2.4.tgz", + "integrity": "sha512-7vsXSfxtrrbwMTirfaKwPcjqJy7pzeuF/bP62yo1NQrRJ5HjmMlrhZml/Ljm9ODc1RnbhJlTeSnCkjtFddKjwA==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.3", + "@inquirer/type": "^1.3.3", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.9", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "picocolors": "^1.0.1", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/editor": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.1.17.tgz", + "integrity": "sha512-hwx3VpFQzOY2hFWnY+XPsUGCIUVQ5kYxH6+CExv/RbMiAoN3zXtzj8DyrWBOHami0vBrrnPS8CTq3uQWc7N2BA==", + "dev": true, + "dependencies": { + "@inquirer/core": "^9.0.5", + "@inquirer/type": "^1.5.1", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/editor/node_modules/@inquirer/core": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.5.tgz", "integrity": "sha512-QWG41I7vn62O9stYKg/juKXt1PEbr/4ZZCPb4KgXDQGwgA9M5NBTQ7FnOvT1ridbxkm/wTxLCNraUs7y47pIRQ==", @@ -5454,16 +5585,42 @@ "node": ">=18" } }, - "node_modules/@inquirer/core/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/@inquirer/expand": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.1.17.tgz", + "integrity": "sha512-s4V/dC+GeE5s97xoTtZSmC440uNKePKqZgzqEf0XM63ciilnXAtKGvoAWOePFdlK+oGTz0d8bhbPKwpKGvRYfg==", "dev": true, + "dependencies": { + "@inquirer/core": "^9.0.5", + "@inquirer/type": "^1.5.1", + "yoctocolors-cjs": "^2.1.2" + }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/@inquirer/expand/node_modules/@inquirer/core": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.5.tgz", + "integrity": "sha512-QWG41I7vn62O9stYKg/juKXt1PEbr/4ZZCPb4KgXDQGwgA9M5NBTQ7FnOvT1ridbxkm/wTxLCNraUs7y47pIRQ==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.1", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.11", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18" } }, "node_modules/@inquirer/figures": { @@ -5475,6 +5632,178 @@ "node": ">=18" } }, + "node_modules/@inquirer/input": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.2.4.tgz", + "integrity": "sha512-wvYnDITPQn+ltktj/O9kQjPxOvpmwcpxLWh8brAyD+jlEbihxtrx9cZdZcxqaCVQj3caw4eZa2Uq5xELo4yXkA==", + "dev": true, + "dependencies": { + "@inquirer/core": "^9.0.5", + "@inquirer/type": "^1.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input/node_modules/@inquirer/core": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.5.tgz", + "integrity": "sha512-QWG41I7vn62O9stYKg/juKXt1PEbr/4ZZCPb4KgXDQGwgA9M5NBTQ7FnOvT1ridbxkm/wTxLCNraUs7y47pIRQ==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.1", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.11", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.1.17.tgz", + "integrity": "sha512-/u6DM/fDHXoBWyA+9aRhghkeo5smE7wO9k4E2UoJbgiRCkt3JjBEuBqLOJNrz8E16M0ez4UM1vd5cXrmICHW+A==", + "dev": true, + "dependencies": { + "@inquirer/core": "^9.0.5", + "@inquirer/type": "^1.5.1", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password/node_modules/@inquirer/core": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.5.tgz", + "integrity": "sha512-QWG41I7vn62O9stYKg/juKXt1PEbr/4ZZCPb4KgXDQGwgA9M5NBTQ7FnOvT1ridbxkm/wTxLCNraUs7y47pIRQ==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.1", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.11", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.0.7.tgz", + "integrity": "sha512-GFcigCxJTKCH3aECzMIu4FhgLJWnFvMXzpI4CCSoELWFtkOOU2P+goYA61+OKpGrB8fPE7q6n8zAXBSlZRrHjQ==", + "dev": true, + "dependencies": { + "@inquirer/checkbox": "^2.3.7", + "@inquirer/confirm": "^3.1.11", + "@inquirer/editor": "^2.1.11", + "@inquirer/expand": "^2.1.11", + "@inquirer/input": "^2.1.11", + "@inquirer/password": "^2.1.11", + "@inquirer/rawlist": "^2.1.11", + "@inquirer/select": "^2.3.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.1.17.tgz", + "integrity": "sha512-RFrw34xU5aVlMA3ZJCaeKGxYjhu3j4i46O2GMmaRRGeLObCRM1yOKQOsRclSTzjd4A7+M5QleR2iuW/68J9Kwg==", + "dev": true, + "dependencies": { + "@inquirer/core": "^9.0.5", + "@inquirer/type": "^1.5.1", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist/node_modules/@inquirer/core": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.5.tgz", + "integrity": "sha512-QWG41I7vn62O9stYKg/juKXt1PEbr/4ZZCPb4KgXDQGwgA9M5NBTQ7FnOvT1ridbxkm/wTxLCNraUs7y47pIRQ==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.1", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.11", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.4.2.tgz", + "integrity": "sha512-r78JlgShqRxyAtBDeBHSDtfrOhSQwm2ecWGGaxe7kD9JwgL3UN563G1ncVRYdsWD7/tigflcskfipVeoDLhLJg==", + "dev": true, + "dependencies": { + "@inquirer/core": "^9.0.5", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.1", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select/node_modules/@inquirer/core": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.5.tgz", + "integrity": "sha512-QWG41I7vn62O9stYKg/juKXt1PEbr/4ZZCPb4KgXDQGwgA9M5NBTQ7FnOvT1ridbxkm/wTxLCNraUs7y47pIRQ==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.1", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.14.11", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@inquirer/type": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.1.tgz", @@ -6327,16 +6656,19 @@ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.13.tgz", + "integrity": "sha512-nAl6teTt7EWSjttNavAnv3uFR3w3vPP3OTYmHyPNHzKhAj2NoBDHmbS3MGpvvO8KXXPASnHjEGrrKrdKTMKPnQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.7" + "@inquirer/type": "^1.3.3" }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 6" } }, "node_modules/@lmdb/lmdb-darwin-arm64": { @@ -6512,15 +6844,6 @@ "win32" ] }, - "node_modules/@mswjs/cookies": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.1.tgz", - "integrity": "sha512-W68qOHEjx1iD+4VjQudlx26CPIoxmIAtK4ZCexU0/UJBG6jYhcuyzKJx+Iw8uhBIGd9eba64XgWVgo20it1qwA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, "node_modules/@mswjs/interceptors": { "version": "0.29.1", "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", @@ -6626,9 +6949,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.1.tgz", - "integrity": "sha512-mjlfnWcHtBZJUJaVyffJZZL8U1o1XUQwrFIKeiFUeatLDsjtv8EbLW9Ed1v3eAJyVuaTNKpsdZma1XdxzeLONw==", + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.2.tgz", + "integrity": "sha512-oIpkr1oeRMO0CVdEaxiLqqZ7E8RgDR8rf3LrM5sVOBX4aXAbzVkOZf9yZejmrXaLxj7SU/Fhkljr49ErlpB20g==", "dev": true, "engines": { "node": "^18.19.1 || ^20.11.1 || >=22.0.0", @@ -6770,15 +7093,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -6984,12 +7298,12 @@ } }, "node_modules/@nrwl/cypress": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-19.5.2.tgz", - "integrity": "sha512-QWk9OQQxgqQ5H8hTfTZlgl7V7XjZwqf1r16FiX9IuKg0wUW9XI8bfBAHtJTAZ+AV9XwwB1fffLOHQ1mdrsXLxg==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-19.5.3.tgz", + "integrity": "sha512-pUD/yVnaEuLCadLiThL/aVbX/J5iuOp3f3iPjuOMwWD0wYbIcZgrgImEBIo1NZdIKDBm8cgUhgkmf80RCVnw1g==", "dev": true, "dependencies": { - "@nx/cypress": "19.5.2" + "@nx/cypress": "19.5.3" } }, "node_modules/@nrwl/devkit": { @@ -7047,12 +7361,12 @@ } }, "node_modules/@nrwl/storybook": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/storybook/-/storybook-19.5.2.tgz", - "integrity": "sha512-9Ho5nqFo+sJcwsRIvXVp/gUuKAU58diUIa1Y3VeQWC5SjDRgjJlJfboAhFRw72HwX8ugSkY/ZuZDJek6dsRw8w==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/storybook/-/storybook-19.5.3.tgz", + "integrity": "sha512-Xpyvfl7dNPq2KjsPNb1hx9YYRcBioIXvjpqLD3pHcBAZbOOBagvX1z+s0wrMkAZ3+lb8GTdcGhsRLt+W68LhDQ==", "dev": true, "dependencies": { - "@nx/storybook": "19.5.2" + "@nx/storybook": "19.5.3" } }, "node_modules/@nrwl/tao": { @@ -7188,15 +7502,15 @@ } }, "node_modules/@nx/cypress": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-19.5.2.tgz", - "integrity": "sha512-veFF9Pe+A7Ik18W0NGkoh9dNFQAFBq4wqysysRPFtWet+pvbQaCw74ufw6Y78BmOu1KEJaRGGUrk6b4Lqme8rw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-19.5.3.tgz", + "integrity": "sha512-cnGmNgeDjAFRqGCfdCH3A6vRJGjZNSEL1HhzvqIm4pCGA/h28aUkRGbbKRbq3SApraxeqo1VGpz5qXb8Mz2KHA==", "dev": true, "dependencies": { - "@nrwl/cypress": "19.5.2", - "@nx/devkit": "19.5.2", - "@nx/eslint": "19.5.2", - "@nx/js": "19.5.2", + "@nrwl/cypress": "19.5.3", + "@nx/devkit": "19.5.3", + "@nx/eslint": "19.5.3", + "@nx/js": "19.5.3", "@phenomnomnominal/tsquery": "~5.0.1", "detect-port": "^1.5.1", "tslib": "^2.3.0" @@ -7211,30 +7525,30 @@ } }, "node_modules/@nx/cypress/node_modules/@nrwl/devkit": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.5.2.tgz", - "integrity": "sha512-gDmGsegterCCeaFBzMi8cALIywOsBwYU50200VrGYcsOfrz3FJu5AoUzr+fBLmvC0b0CRqJy6FXEKK0QOZGKtA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.5.3.tgz", + "integrity": "sha512-kd6eIQjWuFHdO14wVu0rzGtoPbO3EdYM/3gATOupxBzlqD+7dmkvv1Olbri9v598mDApXQNo8q81L2masTAhvg==", "dev": true, "dependencies": { - "@nx/devkit": "19.5.2" + "@nx/devkit": "19.5.3" } }, "node_modules/@nx/cypress/node_modules/@nrwl/js": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.5.2.tgz", - "integrity": "sha512-o94coQRMaQjJH3tUjK4tkxiJIdHPq19bBE1p7qleiUUkDgRkDNReFrunrL7D/QgBzGTKZeJZFUi1wswnAg0/ig==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.5.3.tgz", + "integrity": "sha512-86qnph/V0uy1Qc5jO6z+MAdqW1kB1dOdKDTIAr0mauy23FMOmLUo5dr0UdG8HQKtF8k7ceEsycZdSlwXbC+ltQ==", "dev": true, "dependencies": { - "@nx/js": "19.5.2" + "@nx/js": "19.5.3" } }, "node_modules/@nx/cypress/node_modules/@nrwl/tao": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.5.2.tgz", - "integrity": "sha512-M7hdPT/M+vr8MW6W3gwkTv82J5T4jDHZWcVpXmoQPSK/v7g+Sfpw6CCBeaQv7/S94vRrrqI6r+GkZUvIQZnzZw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.5.3.tgz", + "integrity": "sha512-SHtPlQi7zofDdbFjqcrTb/A0Mo9tT8S88H8nJa1+GzhKpGUB9rykHtq0qoYdiRBnQfmfR5LoKfe/jft61Ktvdg==", "dev": true, "dependencies": { - "nx": "19.5.2", + "nx": "19.5.3", "tslib": "^2.3.0" }, "bin": { @@ -7242,14 +7556,14 @@ } }, "node_modules/@nx/cypress/node_modules/@nrwl/tao/node_modules/nx": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.2.tgz", - "integrity": "sha512-tsuyjC9zwUOhgtW88zXR6l3lgihzyBVfDKjFj2OkXGn+jKMwNiPHLfMZ76vBWRBjwZ4I9apEMZSpMuxsVBcRTw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.3.tgz", + "integrity": "sha512-ZUrnRwPdRWXeo8IuLj16Oo9IfiDjd8C6xKWC4F6wcTNZ9ZS7ZErrfqaQr04zdO89ASF9brbkqm0UkMyDPc6kPQ==", "dev": true, "hasInstallScript": true, "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", - "@nrwl/tao": "19.5.2", + "@nrwl/tao": "19.5.3", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.7", @@ -7289,16 +7603,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.5.2", - "@nx/nx-darwin-x64": "19.5.2", - "@nx/nx-freebsd-x64": "19.5.2", - "@nx/nx-linux-arm-gnueabihf": "19.5.2", - "@nx/nx-linux-arm64-gnu": "19.5.2", - "@nx/nx-linux-arm64-musl": "19.5.2", - "@nx/nx-linux-x64-gnu": "19.5.2", - "@nx/nx-linux-x64-musl": "19.5.2", - "@nx/nx-win32-arm64-msvc": "19.5.2", - "@nx/nx-win32-x64-msvc": "19.5.2" + "@nx/nx-darwin-arm64": "19.5.3", + "@nx/nx-darwin-x64": "19.5.3", + "@nx/nx-freebsd-x64": "19.5.3", + "@nx/nx-linux-arm-gnueabihf": "19.5.3", + "@nx/nx-linux-arm64-gnu": "19.5.3", + "@nx/nx-linux-arm64-musl": "19.5.3", + "@nx/nx-linux-x64-gnu": "19.5.3", + "@nx/nx-linux-x64-musl": "19.5.3", + "@nx/nx-win32-arm64-msvc": "19.5.3", + "@nx/nx-win32-x64-msvc": "19.5.3" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -7314,21 +7628,21 @@ } }, "node_modules/@nx/cypress/node_modules/@nrwl/workspace": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.5.2.tgz", - "integrity": "sha512-mjVhqq4yjNC+D5e1YrQCkqKhyvlc5paZGhJQg1shB/z8mu8cRb1P0uLV2yFYKp/OF0C/KhdlKXmcHTzmgZ2b4w==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.5.3.tgz", + "integrity": "sha512-ZMVira0WARcwqcyteSBjk5OU4LDwRwAyM4Rl1E+inP01u0xIrk9FLre2e5USI4kMUGNZ9uRoffHpvGsXz1m3JQ==", "dev": true, "dependencies": { - "@nx/workspace": "19.5.2" + "@nx/workspace": "19.5.3" } }, "node_modules/@nx/cypress/node_modules/@nx/devkit": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.2.tgz", - "integrity": "sha512-+tVtTVLVSSHybWK3m0acUy0IT+T5Uz2NBbac8693V5Pkw6xPNDCtZImm24Jx8wA1E6dWnxjsNz2tjS2wdXCA1Q==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.3.tgz", + "integrity": "sha512-OUi8OJkoT+y3LwXACO6ugF9l6QppUyHrBIZYOTffBa1ZrnkpJrw03smy+GhAt+BDoeNGEuOPHGvOSV4AmRxnmg==", "dev": true, "dependencies": { - "@nrwl/devkit": "19.5.2", + "@nrwl/devkit": "19.5.3", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", @@ -7343,14 +7657,14 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/eslint": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.5.2.tgz", - "integrity": "sha512-ntEBtxnRXJe6HRaUwFD4f+1smhQsqW8M43QILnfSQwSlJcH8kREoS41vucVWPwdrpUoh7qOWHQUCVbUppTb3HQ==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.5.3.tgz", + "integrity": "sha512-Ihoe3526kv/B47RWRTnFTW/wybDjCoUCRpPSSdgdoO6YKHrMQ9ABcTR0OEZORRCi1mbCzvA2JXkjG17RFrxEVA==", "dev": true, "dependencies": { - "@nx/devkit": "19.5.2", - "@nx/js": "19.5.2", - "@nx/linter": "19.5.2", + "@nx/devkit": "19.5.3", + "@nx/js": "19.5.3", + "@nx/linter": "19.5.3", "semver": "^7.5.3", "tslib": "^2.3.0", "typescript": "~5.4.2" @@ -7366,9 +7680,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/js": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.5.2.tgz", - "integrity": "sha512-HGbj8AkwGQ2xT00Ye1rfEKMIIknVfoitvNgfzZlzc+IdYnlGnFCUJ94JLhdTshK6WcCv1sIoWSFRU0wMA8m9fQ==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.5.3.tgz", + "integrity": "sha512-NcL3RicE5b+nvnAQkz2rVDMIcmM62o98SqIF6SmPaevJxMu+2YhlSU4p6btrFDDl3gSvQkhvVAoAsRpb3s1nJQ==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", @@ -7378,9 +7692,9 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.22.5", "@babel/runtime": "^7.22.6", - "@nrwl/js": "19.5.2", - "@nx/devkit": "19.5.2", - "@nx/workspace": "19.5.2", + "@nrwl/js": "19.5.3", + "@nx/devkit": "19.5.3", + "@nx/workspace": "19.5.3", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-typescript-metadata": "^0.3.1", @@ -7454,18 +7768,18 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/linter": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.5.2.tgz", - "integrity": "sha512-vJAhq41J/U+mKho0X/2iQeMg7fs/tcOtvInNY/vfyM2ObrEyypfTIE78ftXVu6Pz5DjcXR4tb9rz52/6KwKeYw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.5.3.tgz", + "integrity": "sha512-+aFsSPlBmosUfp0mC5HnzFKeqTsjsw9cLZM/7NxJNRq3nUIVaxZSx97OSVm5o1LPS9jybtZg2RdO0s/y/FbVjA==", "dev": true, "dependencies": { - "@nx/eslint": "19.5.2" + "@nx/eslint": "19.5.3" } }, "node_modules/@nx/cypress/node_modules/@nx/nx-darwin-arm64": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.2.tgz", - "integrity": "sha512-8Y19MI7rP+KTyxYx/Dm0L5zncqkk6m4dKi92553sOVpNgpUX/CSuCN7rQJe5jlUP1gyzqzE595Xa5TJ6GLBFjA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.3.tgz", + "integrity": "sha512-DacVfnhx7wiglDXRAdbrmaP4s3ZQXMs8Mk0fGoQYjv1uwWajDOPxMYJUZH0CGysIDADSrku4AIqogGX/CZjSuQ==", "cpu": [ "arm64" ], @@ -7479,9 +7793,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-darwin-x64": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.2.tgz", - "integrity": "sha512-Ct02YyBAimy2R04pM5ve1/C/HAoJMI0O/hx6IEBOxHa6hcYe+PhY0NE8ObnN4Tvki3om2KCTa1GHlwiE4Raxig==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.3.tgz", + "integrity": "sha512-AfY1g8nYJbBGiR2SDt/Q8YcQyuwtRmGxfJIrzCu+2+hFFds7RF9iaqeKedWeHN9wAsaTbDnBuDwwojT9LMOxaA==", "cpu": [ "x64" ], @@ -7495,9 +7809,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-freebsd-x64": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.2.tgz", - "integrity": "sha512-UXL0z3HHpJ0kHofGtUh+Zw7cm8r/Ul7y/sfLTlywHuatvzmJkXSumdIg7EMuChtVvGeCsnCi7cayx8GOlDpt3w==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.3.tgz", + "integrity": "sha512-dWwxFs9bp67n/l1QhI41pSJk+mpwDNh7RY+WQBUldWbIyh8c4/wYk3VaqjALPCcGUky/RCME6rdLkqxFRAIs4A==", "cpu": [ "x64" ], @@ -7511,9 +7825,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.2.tgz", - "integrity": "sha512-34bXiH/iplCZ+SOW5dnGWKfx/D6HAOyRI9hD1ganMnpgIUKkzhdDiPaJEeXpEj0aRPUotAqMjiPEoXEm39xZnA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.3.tgz", + "integrity": "sha512-7l79OXwKVqnTr6/85mVPU+h3nnxGDAWgY6kTJNdmuaFlDgbHKbcNo9FFSu2srdqr1x84UsU49w8ZBJbdwA5YSg==", "cpu": [ "arm" ], @@ -7527,9 +7841,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-linux-arm64-gnu": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.2.tgz", - "integrity": "sha512-hqSwbNIcSxqzyG641aWXS6JvcM52dx08IHhbigoRdtyDGEODwLDTeGzOTup8zb12RC8c+f+Vtb+nGw7eolBeNg==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.3.tgz", + "integrity": "sha512-aFCuoUiEI20tGCxdUDO0JWCWli3RH0LPCXjnQ4H4pNMzT8zpvjvu+Js7FtwFG+NZWOdlmtiDlthnVAd+5ex6Wg==", "cpu": [ "arm64" ], @@ -7543,9 +7857,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-linux-arm64-musl": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.2.tgz", - "integrity": "sha512-jLtp832Ai6kQC7UMNiah/tq/xhU3b2ULSjtKEW/kdOaKf3mElxLwwCU5O49bZlpXBdr+orq40UhejO+0C+jdxw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.3.tgz", + "integrity": "sha512-gcjdlGvgQ4ahSfPpMw32cr7GrCYhr/58D1R/bbyem0QQg+EdLbLlhhdS2pAHBCoENfpSnknQZhMrUN1LR8Qmpw==", "cpu": [ "arm64" ], @@ -7559,9 +7873,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.2.tgz", - "integrity": "sha512-3yzhnuELJ2mXrkQ3GWthnWes7QueRj2NS21lMbGE1vZzhLTFFF87OQja4LBSg/dcDh3u4PHPzqaWElJ32LcM+w==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.3.tgz", + "integrity": "sha512-Jwu6peOyaV9WTR1ihzfIIqEBYsbOSy0cH8H36ce17zpemq6l/Cz5EJ7blVXut1qksMFvC/QbkTWqTlfO5XEHIw==", "cpu": [ "x64" ], @@ -7575,9 +7889,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-linux-x64-musl": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.2.tgz", - "integrity": "sha512-vgbBUcjDpOR9A9KiyMPGvFR9/Ym+y08UmNGDOOifSrfnCU4ia8ZjFR1NvKz7wZAnF5yZHGDM9bq9K+P7Kaf8JA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.3.tgz", + "integrity": "sha512-84KnkghjbInJAoWvCJB34lHq9iGCgo5KjcxUFZJFNDYTQh/VBTp/OhH8bFyPRwQTPVSToLeBhoFvGB1bqBekrA==", "cpu": [ "x64" ], @@ -7591,9 +7905,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-win32-arm64-msvc": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.2.tgz", - "integrity": "sha512-DtNHgzOg7vilhRzuUdysRF/uDO80T4AiEa1WbkPr/r7u194YgF8IKLFpj7XRFYxt/S6eQq1oJDC1XjnDWrUi8g==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.3.tgz", + "integrity": "sha512-q19m59cm+VTZzlHh+/dSHism7hgKfGHR+nW5xtxIF00rZQpJpv0ve7GVvyXPFw7NXvceYRK1THes1MljYXyslQ==", "cpu": [ "arm64" ], @@ -7607,9 +7921,9 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/nx-win32-x64-msvc": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.2.tgz", - "integrity": "sha512-JBwHFfO5fW3lYBuzQzJ+Zz8pG2kU0ESj0pPxApRJSl/3G/6frDCpBcjJq8bmHEJ4S0Oh89sB6rPVwPrHOvy1pg==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.3.tgz", + "integrity": "sha512-DOdO7K6ySiwrXsnJNjJXxng427n5+nXIDt4L81ltCdr6oE8wUiUpRTt1dfl65rHknojB/b1at3V6+x450F0/2A==", "cpu": [ "x64" ], @@ -7623,29 +7937,29 @@ } }, "node_modules/@nx/cypress/node_modules/@nx/workspace": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.2.tgz", - "integrity": "sha512-mKDziHwwX2j4piMsQYoqNM/u13XmR0UKLU45g7CUay9Z0va/fxAmdsmVe16rRPRCvwkdXm/s2PK0vYgj68/baA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.3.tgz", + "integrity": "sha512-nGBN8R/eGVYGHphSAYAXGjyuQx1/Fb27hoGATTop9LBxbzA0QnokRN95Vx9/UFMCJU3Mf5GlXD+x6vCbrRSWug==", "dev": true, "dependencies": { - "@nrwl/workspace": "19.5.2", - "@nx/devkit": "19.5.2", + "@nrwl/workspace": "19.5.3", + "@nx/devkit": "19.5.3", "chalk": "^4.1.0", "enquirer": "~2.3.6", - "nx": "19.5.2", + "nx": "19.5.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } }, "node_modules/@nx/cypress/node_modules/@nx/workspace/node_modules/nx": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.2.tgz", - "integrity": "sha512-tsuyjC9zwUOhgtW88zXR6l3lgihzyBVfDKjFj2OkXGn+jKMwNiPHLfMZ76vBWRBjwZ4I9apEMZSpMuxsVBcRTw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.3.tgz", + "integrity": "sha512-ZUrnRwPdRWXeo8IuLj16Oo9IfiDjd8C6xKWC4F6wcTNZ9ZS7ZErrfqaQr04zdO89ASF9brbkqm0UkMyDPc6kPQ==", "dev": true, "hasInstallScript": true, "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", - "@nrwl/tao": "19.5.2", + "@nrwl/tao": "19.5.3", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.7", @@ -7685,16 +7999,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.5.2", - "@nx/nx-darwin-x64": "19.5.2", - "@nx/nx-freebsd-x64": "19.5.2", - "@nx/nx-linux-arm-gnueabihf": "19.5.2", - "@nx/nx-linux-arm64-gnu": "19.5.2", - "@nx/nx-linux-arm64-musl": "19.5.2", - "@nx/nx-linux-x64-gnu": "19.5.2", - "@nx/nx-linux-x64-musl": "19.5.2", - "@nx/nx-win32-arm64-msvc": "19.5.2", - "@nx/nx-win32-x64-msvc": "19.5.2" + "@nx/nx-darwin-arm64": "19.5.3", + "@nx/nx-darwin-x64": "19.5.3", + "@nx/nx-freebsd-x64": "19.5.3", + "@nx/nx-linux-arm-gnueabihf": "19.5.3", + "@nx/nx-linux-arm64-gnu": "19.5.3", + "@nx/nx-linux-arm64-musl": "19.5.3", + "@nx/nx-linux-x64-gnu": "19.5.3", + "@nx/nx-linux-x64-musl": "19.5.3", + "@nx/nx-win32-arm64-msvc": "19.5.3", + "@nx/nx-win32-x64-msvc": "19.5.3" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -7740,6 +8054,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@nx/cypress/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@nx/cypress/node_modules/cli-spinners": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", @@ -7761,6 +8087,12 @@ "node": ">=8" } }, + "node_modules/@nx/cypress/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/@nx/cypress/node_modules/fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", @@ -7801,6 +8133,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@nx/cypress/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@nx/cypress/node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -7882,6 +8223,25 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@nx/cypress/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/cypress/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/@nx/cypress/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7901,6 +8261,20 @@ "source-map": "^0.6.0" } }, + "node_modules/@nx/cypress/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@nx/cypress/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8278,6 +8652,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@nx/js/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@nx/js/node_modules/fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", @@ -8349,6 +8735,25 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@nx/js/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/js/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/@nx/js/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8607,46 +9012,46 @@ } }, "node_modules/@nx/storybook": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/storybook/-/storybook-19.5.2.tgz", - "integrity": "sha512-4xVPIMCkgnbmUgA2FVIGdPqHt9ZzvMbPqrTONKUlC+L6KRGnxMT1sig9xlM7ubBIvd5fOnxYzcTqBf3blbopEg==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/storybook/-/storybook-19.5.3.tgz", + "integrity": "sha512-UnXy5pRm1EmzUtHkXiRcOwmoiQLQ32YfueSAeLZte1GfLTtJofi3tv2rGakENSyZrMAo7QYJVWhDH1Xeq8iAAw==", "dev": true, "dependencies": { - "@nrwl/storybook": "19.5.2", - "@nx/cypress": "19.5.2", - "@nx/devkit": "19.5.2", - "@nx/eslint": "19.5.2", - "@nx/js": "19.5.2", + "@nrwl/storybook": "19.5.3", + "@nx/cypress": "19.5.3", + "@nx/devkit": "19.5.3", + "@nx/eslint": "19.5.3", + "@nx/js": "19.5.3", "@phenomnomnominal/tsquery": "~5.0.1", "semver": "^7.5.3", "tslib": "^2.3.0" } }, "node_modules/@nx/storybook/node_modules/@nrwl/devkit": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.5.2.tgz", - "integrity": "sha512-gDmGsegterCCeaFBzMi8cALIywOsBwYU50200VrGYcsOfrz3FJu5AoUzr+fBLmvC0b0CRqJy6FXEKK0QOZGKtA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.5.3.tgz", + "integrity": "sha512-kd6eIQjWuFHdO14wVu0rzGtoPbO3EdYM/3gATOupxBzlqD+7dmkvv1Olbri9v598mDApXQNo8q81L2masTAhvg==", "dev": true, "dependencies": { - "@nx/devkit": "19.5.2" + "@nx/devkit": "19.5.3" } }, "node_modules/@nx/storybook/node_modules/@nrwl/js": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.5.2.tgz", - "integrity": "sha512-o94coQRMaQjJH3tUjK4tkxiJIdHPq19bBE1p7qleiUUkDgRkDNReFrunrL7D/QgBzGTKZeJZFUi1wswnAg0/ig==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.5.3.tgz", + "integrity": "sha512-86qnph/V0uy1Qc5jO6z+MAdqW1kB1dOdKDTIAr0mauy23FMOmLUo5dr0UdG8HQKtF8k7ceEsycZdSlwXbC+ltQ==", "dev": true, "dependencies": { - "@nx/js": "19.5.2" + "@nx/js": "19.5.3" } }, "node_modules/@nx/storybook/node_modules/@nrwl/tao": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.5.2.tgz", - "integrity": "sha512-M7hdPT/M+vr8MW6W3gwkTv82J5T4jDHZWcVpXmoQPSK/v7g+Sfpw6CCBeaQv7/S94vRrrqI6r+GkZUvIQZnzZw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.5.3.tgz", + "integrity": "sha512-SHtPlQi7zofDdbFjqcrTb/A0Mo9tT8S88H8nJa1+GzhKpGUB9rykHtq0qoYdiRBnQfmfR5LoKfe/jft61Ktvdg==", "dev": true, "dependencies": { - "nx": "19.5.2", + "nx": "19.5.3", "tslib": "^2.3.0" }, "bin": { @@ -8654,14 +9059,14 @@ } }, "node_modules/@nx/storybook/node_modules/@nrwl/tao/node_modules/nx": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.2.tgz", - "integrity": "sha512-tsuyjC9zwUOhgtW88zXR6l3lgihzyBVfDKjFj2OkXGn+jKMwNiPHLfMZ76vBWRBjwZ4I9apEMZSpMuxsVBcRTw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.3.tgz", + "integrity": "sha512-ZUrnRwPdRWXeo8IuLj16Oo9IfiDjd8C6xKWC4F6wcTNZ9ZS7ZErrfqaQr04zdO89ASF9brbkqm0UkMyDPc6kPQ==", "dev": true, "hasInstallScript": true, "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", - "@nrwl/tao": "19.5.2", + "@nrwl/tao": "19.5.3", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.7", @@ -8701,16 +9106,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.5.2", - "@nx/nx-darwin-x64": "19.5.2", - "@nx/nx-freebsd-x64": "19.5.2", - "@nx/nx-linux-arm-gnueabihf": "19.5.2", - "@nx/nx-linux-arm64-gnu": "19.5.2", - "@nx/nx-linux-arm64-musl": "19.5.2", - "@nx/nx-linux-x64-gnu": "19.5.2", - "@nx/nx-linux-x64-musl": "19.5.2", - "@nx/nx-win32-arm64-msvc": "19.5.2", - "@nx/nx-win32-x64-msvc": "19.5.2" + "@nx/nx-darwin-arm64": "19.5.3", + "@nx/nx-darwin-x64": "19.5.3", + "@nx/nx-freebsd-x64": "19.5.3", + "@nx/nx-linux-arm-gnueabihf": "19.5.3", + "@nx/nx-linux-arm64-gnu": "19.5.3", + "@nx/nx-linux-arm64-musl": "19.5.3", + "@nx/nx-linux-x64-gnu": "19.5.3", + "@nx/nx-linux-x64-musl": "19.5.3", + "@nx/nx-win32-arm64-msvc": "19.5.3", + "@nx/nx-win32-x64-msvc": "19.5.3" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -8726,21 +9131,21 @@ } }, "node_modules/@nx/storybook/node_modules/@nrwl/workspace": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.5.2.tgz", - "integrity": "sha512-mjVhqq4yjNC+D5e1YrQCkqKhyvlc5paZGhJQg1shB/z8mu8cRb1P0uLV2yFYKp/OF0C/KhdlKXmcHTzmgZ2b4w==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.5.3.tgz", + "integrity": "sha512-ZMVira0WARcwqcyteSBjk5OU4LDwRwAyM4Rl1E+inP01u0xIrk9FLre2e5USI4kMUGNZ9uRoffHpvGsXz1m3JQ==", "dev": true, "dependencies": { - "@nx/workspace": "19.5.2" + "@nx/workspace": "19.5.3" } }, "node_modules/@nx/storybook/node_modules/@nx/devkit": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.2.tgz", - "integrity": "sha512-+tVtTVLVSSHybWK3m0acUy0IT+T5Uz2NBbac8693V5Pkw6xPNDCtZImm24Jx8wA1E6dWnxjsNz2tjS2wdXCA1Q==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.3.tgz", + "integrity": "sha512-OUi8OJkoT+y3LwXACO6ugF9l6QppUyHrBIZYOTffBa1ZrnkpJrw03smy+GhAt+BDoeNGEuOPHGvOSV4AmRxnmg==", "dev": true, "dependencies": { - "@nrwl/devkit": "19.5.2", + "@nrwl/devkit": "19.5.3", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", @@ -8755,14 +9160,14 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/eslint": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.5.2.tgz", - "integrity": "sha512-ntEBtxnRXJe6HRaUwFD4f+1smhQsqW8M43QILnfSQwSlJcH8kREoS41vucVWPwdrpUoh7qOWHQUCVbUppTb3HQ==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.5.3.tgz", + "integrity": "sha512-Ihoe3526kv/B47RWRTnFTW/wybDjCoUCRpPSSdgdoO6YKHrMQ9ABcTR0OEZORRCi1mbCzvA2JXkjG17RFrxEVA==", "dev": true, "dependencies": { - "@nx/devkit": "19.5.2", - "@nx/js": "19.5.2", - "@nx/linter": "19.5.2", + "@nx/devkit": "19.5.3", + "@nx/js": "19.5.3", + "@nx/linter": "19.5.3", "semver": "^7.5.3", "tslib": "^2.3.0", "typescript": "~5.4.2" @@ -8778,9 +9183,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/js": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.5.2.tgz", - "integrity": "sha512-HGbj8AkwGQ2xT00Ye1rfEKMIIknVfoitvNgfzZlzc+IdYnlGnFCUJ94JLhdTshK6WcCv1sIoWSFRU0wMA8m9fQ==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.5.3.tgz", + "integrity": "sha512-NcL3RicE5b+nvnAQkz2rVDMIcmM62o98SqIF6SmPaevJxMu+2YhlSU4p6btrFDDl3gSvQkhvVAoAsRpb3s1nJQ==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", @@ -8790,9 +9195,9 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.22.5", "@babel/runtime": "^7.22.6", - "@nrwl/js": "19.5.2", - "@nx/devkit": "19.5.2", - "@nx/workspace": "19.5.2", + "@nrwl/js": "19.5.3", + "@nx/devkit": "19.5.3", + "@nx/workspace": "19.5.3", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-typescript-metadata": "^0.3.1", @@ -8866,18 +9271,18 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/linter": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.5.2.tgz", - "integrity": "sha512-vJAhq41J/U+mKho0X/2iQeMg7fs/tcOtvInNY/vfyM2ObrEyypfTIE78ftXVu6Pz5DjcXR4tb9rz52/6KwKeYw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.5.3.tgz", + "integrity": "sha512-+aFsSPlBmosUfp0mC5HnzFKeqTsjsw9cLZM/7NxJNRq3nUIVaxZSx97OSVm5o1LPS9jybtZg2RdO0s/y/FbVjA==", "dev": true, "dependencies": { - "@nx/eslint": "19.5.2" + "@nx/eslint": "19.5.3" } }, "node_modules/@nx/storybook/node_modules/@nx/nx-darwin-arm64": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.2.tgz", - "integrity": "sha512-8Y19MI7rP+KTyxYx/Dm0L5zncqkk6m4dKi92553sOVpNgpUX/CSuCN7rQJe5jlUP1gyzqzE595Xa5TJ6GLBFjA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.3.tgz", + "integrity": "sha512-DacVfnhx7wiglDXRAdbrmaP4s3ZQXMs8Mk0fGoQYjv1uwWajDOPxMYJUZH0CGysIDADSrku4AIqogGX/CZjSuQ==", "cpu": [ "arm64" ], @@ -8891,9 +9296,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-darwin-x64": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.2.tgz", - "integrity": "sha512-Ct02YyBAimy2R04pM5ve1/C/HAoJMI0O/hx6IEBOxHa6hcYe+PhY0NE8ObnN4Tvki3om2KCTa1GHlwiE4Raxig==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.3.tgz", + "integrity": "sha512-AfY1g8nYJbBGiR2SDt/Q8YcQyuwtRmGxfJIrzCu+2+hFFds7RF9iaqeKedWeHN9wAsaTbDnBuDwwojT9LMOxaA==", "cpu": [ "x64" ], @@ -8907,9 +9312,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-freebsd-x64": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.2.tgz", - "integrity": "sha512-UXL0z3HHpJ0kHofGtUh+Zw7cm8r/Ul7y/sfLTlywHuatvzmJkXSumdIg7EMuChtVvGeCsnCi7cayx8GOlDpt3w==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.3.tgz", + "integrity": "sha512-dWwxFs9bp67n/l1QhI41pSJk+mpwDNh7RY+WQBUldWbIyh8c4/wYk3VaqjALPCcGUky/RCME6rdLkqxFRAIs4A==", "cpu": [ "x64" ], @@ -8923,9 +9328,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.2.tgz", - "integrity": "sha512-34bXiH/iplCZ+SOW5dnGWKfx/D6HAOyRI9hD1ganMnpgIUKkzhdDiPaJEeXpEj0aRPUotAqMjiPEoXEm39xZnA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.3.tgz", + "integrity": "sha512-7l79OXwKVqnTr6/85mVPU+h3nnxGDAWgY6kTJNdmuaFlDgbHKbcNo9FFSu2srdqr1x84UsU49w8ZBJbdwA5YSg==", "cpu": [ "arm" ], @@ -8939,9 +9344,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-linux-arm64-gnu": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.2.tgz", - "integrity": "sha512-hqSwbNIcSxqzyG641aWXS6JvcM52dx08IHhbigoRdtyDGEODwLDTeGzOTup8zb12RC8c+f+Vtb+nGw7eolBeNg==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.3.tgz", + "integrity": "sha512-aFCuoUiEI20tGCxdUDO0JWCWli3RH0LPCXjnQ4H4pNMzT8zpvjvu+Js7FtwFG+NZWOdlmtiDlthnVAd+5ex6Wg==", "cpu": [ "arm64" ], @@ -8955,9 +9360,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-linux-arm64-musl": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.2.tgz", - "integrity": "sha512-jLtp832Ai6kQC7UMNiah/tq/xhU3b2ULSjtKEW/kdOaKf3mElxLwwCU5O49bZlpXBdr+orq40UhejO+0C+jdxw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.3.tgz", + "integrity": "sha512-gcjdlGvgQ4ahSfPpMw32cr7GrCYhr/58D1R/bbyem0QQg+EdLbLlhhdS2pAHBCoENfpSnknQZhMrUN1LR8Qmpw==", "cpu": [ "arm64" ], @@ -8971,9 +9376,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.2.tgz", - "integrity": "sha512-3yzhnuELJ2mXrkQ3GWthnWes7QueRj2NS21lMbGE1vZzhLTFFF87OQja4LBSg/dcDh3u4PHPzqaWElJ32LcM+w==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.3.tgz", + "integrity": "sha512-Jwu6peOyaV9WTR1ihzfIIqEBYsbOSy0cH8H36ce17zpemq6l/Cz5EJ7blVXut1qksMFvC/QbkTWqTlfO5XEHIw==", "cpu": [ "x64" ], @@ -8987,9 +9392,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-linux-x64-musl": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.2.tgz", - "integrity": "sha512-vgbBUcjDpOR9A9KiyMPGvFR9/Ym+y08UmNGDOOifSrfnCU4ia8ZjFR1NvKz7wZAnF5yZHGDM9bq9K+P7Kaf8JA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.3.tgz", + "integrity": "sha512-84KnkghjbInJAoWvCJB34lHq9iGCgo5KjcxUFZJFNDYTQh/VBTp/OhH8bFyPRwQTPVSToLeBhoFvGB1bqBekrA==", "cpu": [ "x64" ], @@ -9003,9 +9408,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-win32-arm64-msvc": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.2.tgz", - "integrity": "sha512-DtNHgzOg7vilhRzuUdysRF/uDO80T4AiEa1WbkPr/r7u194YgF8IKLFpj7XRFYxt/S6eQq1oJDC1XjnDWrUi8g==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.3.tgz", + "integrity": "sha512-q19m59cm+VTZzlHh+/dSHism7hgKfGHR+nW5xtxIF00rZQpJpv0ve7GVvyXPFw7NXvceYRK1THes1MljYXyslQ==", "cpu": [ "arm64" ], @@ -9019,9 +9424,9 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/nx-win32-x64-msvc": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.2.tgz", - "integrity": "sha512-JBwHFfO5fW3lYBuzQzJ+Zz8pG2kU0ESj0pPxApRJSl/3G/6frDCpBcjJq8bmHEJ4S0Oh89sB6rPVwPrHOvy1pg==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.3.tgz", + "integrity": "sha512-DOdO7K6ySiwrXsnJNjJXxng427n5+nXIDt4L81ltCdr6oE8wUiUpRTt1dfl65rHknojB/b1at3V6+x450F0/2A==", "cpu": [ "x64" ], @@ -9035,29 +9440,29 @@ } }, "node_modules/@nx/storybook/node_modules/@nx/workspace": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.2.tgz", - "integrity": "sha512-mKDziHwwX2j4piMsQYoqNM/u13XmR0UKLU45g7CUay9Z0va/fxAmdsmVe16rRPRCvwkdXm/s2PK0vYgj68/baA==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.3.tgz", + "integrity": "sha512-nGBN8R/eGVYGHphSAYAXGjyuQx1/Fb27hoGATTop9LBxbzA0QnokRN95Vx9/UFMCJU3Mf5GlXD+x6vCbrRSWug==", "dev": true, "dependencies": { - "@nrwl/workspace": "19.5.2", - "@nx/devkit": "19.5.2", + "@nrwl/workspace": "19.5.3", + "@nx/devkit": "19.5.3", "chalk": "^4.1.0", "enquirer": "~2.3.6", - "nx": "19.5.2", + "nx": "19.5.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" } }, "node_modules/@nx/storybook/node_modules/@nx/workspace/node_modules/nx": { - "version": "19.5.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.2.tgz", - "integrity": "sha512-tsuyjC9zwUOhgtW88zXR6l3lgihzyBVfDKjFj2OkXGn+jKMwNiPHLfMZ76vBWRBjwZ4I9apEMZSpMuxsVBcRTw==", + "version": "19.5.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.3.tgz", + "integrity": "sha512-ZUrnRwPdRWXeo8IuLj16Oo9IfiDjd8C6xKWC4F6wcTNZ9ZS7ZErrfqaQr04zdO89ASF9brbkqm0UkMyDPc6kPQ==", "dev": true, "hasInstallScript": true, "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", - "@nrwl/tao": "19.5.2", + "@nrwl/tao": "19.5.3", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.7", @@ -9097,16 +9502,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.5.2", - "@nx/nx-darwin-x64": "19.5.2", - "@nx/nx-freebsd-x64": "19.5.2", - "@nx/nx-linux-arm-gnueabihf": "19.5.2", - "@nx/nx-linux-arm64-gnu": "19.5.2", - "@nx/nx-linux-arm64-musl": "19.5.2", - "@nx/nx-linux-x64-gnu": "19.5.2", - "@nx/nx-linux-x64-musl": "19.5.2", - "@nx/nx-win32-arm64-msvc": "19.5.2", - "@nx/nx-win32-x64-msvc": "19.5.2" + "@nx/nx-darwin-arm64": "19.5.3", + "@nx/nx-darwin-x64": "19.5.3", + "@nx/nx-freebsd-x64": "19.5.3", + "@nx/nx-linux-arm-gnueabihf": "19.5.3", + "@nx/nx-linux-arm64-gnu": "19.5.3", + "@nx/nx-linux-arm64-musl": "19.5.3", + "@nx/nx-linux-x64-gnu": "19.5.3", + "@nx/nx-linux-x64-musl": "19.5.3", + "@nx/nx-win32-arm64-msvc": "19.5.3", + "@nx/nx-win32-x64-msvc": "19.5.3" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -9152,6 +9557,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@nx/storybook/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@nx/storybook/node_modules/cli-spinners": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", @@ -9173,6 +9590,12 @@ "node": ">=8" } }, + "node_modules/@nx/storybook/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/@nx/storybook/node_modules/fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", @@ -9213,6 +9636,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@nx/storybook/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@nx/storybook/node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -9294,6 +9726,25 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@nx/storybook/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/storybook/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/@nx/storybook/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9313,6 +9764,20 @@ "source-map": "^0.6.0" } }, + "node_modules/@nx/storybook/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@nx/storybook/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10564,9 +11029,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz", - "integrity": "sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", "cpu": [ "arm" ], @@ -10577,9 +11042,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.0.tgz", - "integrity": "sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", "cpu": [ "arm64" ], @@ -10590,9 +11055,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.0.tgz", - "integrity": "sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", "cpu": [ "arm64" ], @@ -10603,9 +11068,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.0.tgz", - "integrity": "sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", "cpu": [ "x64" ], @@ -10616,9 +11081,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.0.tgz", - "integrity": "sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", "cpu": [ "arm" ], @@ -10629,9 +11094,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.0.tgz", - "integrity": "sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", "cpu": [ "arm" ], @@ -10642,9 +11107,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.0.tgz", - "integrity": "sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", "cpu": [ "arm64" ], @@ -10655,9 +11120,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.0.tgz", - "integrity": "sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", "cpu": [ "arm64" ], @@ -10668,9 +11133,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.0.tgz", - "integrity": "sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", "cpu": [ "ppc64" ], @@ -10681,9 +11146,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.0.tgz", - "integrity": "sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", "cpu": [ "riscv64" ], @@ -10694,9 +11159,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.0.tgz", - "integrity": "sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", "cpu": [ "s390x" ], @@ -10707,9 +11172,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.0.tgz", - "integrity": "sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", "cpu": [ "x64" ], @@ -10720,9 +11185,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.0.tgz", - "integrity": "sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", "cpu": [ "x64" ], @@ -10733,9 +11198,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.0.tgz", - "integrity": "sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", "cpu": [ "arm64" ], @@ -10746,9 +11211,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz", - "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", "cpu": [ "ia32" ], @@ -10759,9 +11224,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz", - "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", "cpu": [ "x64" ], @@ -10972,9 +11437,9 @@ } }, "node_modules/@semantic-release/github": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.1.1.tgz", - "integrity": "sha512-sSmsBKGpAlTtXf9rUJf/si16p+FwPEsvsJRjl3KCwFP0WywaSpynvUhlYvE18n5rzkQNbGJnObAKIoo3xFMSjA==", + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.1.3.tgz", + "integrity": "sha512-QVw7YT3J4VqyVjOnlRsFA3OCERAJHER4QbSPupbav3ER0fawrs2BAWbQFjsr24OAD4KTTKMZsVzF+GYFWCDtaQ==", "dev": true, "peer": true, "dependencies": { @@ -11406,19 +11871,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", @@ -11580,12 +12032,12 @@ } }, "node_modules/@storybook/addon-a11y": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.2.5.tgz", - "integrity": "sha512-sQxX/6mVSF15JnB/HEPrfY43Z6SvgyzAQYfMvqWS+sQBK04busLJBWElQRgekZo80sDCq52mq98lm+ZgpZs42A==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.2.6.tgz", + "integrity": "sha512-GRD50atWJz/V9E6Wyvx4HZWIBAR9m8A0Zn+yBoDVmWzXPOKI62HmWG5zpznCUR7stTt+gAkda1HG7H4KysTZWg==", "dev": true, "dependencies": { - "@storybook/addon-highlight": "8.2.5", + "@storybook/addon-highlight": "8.2.6", "axe-core": "^4.2.0" }, "funding": { @@ -11593,13 +12045,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-actions": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.2.5.tgz", - "integrity": "sha512-8kevyvbvEdo0qn+hL/ub/RVsCGlWvCgL6ZAsZm50aWl1GXPpXj3nggKnyJwgAGUQzDC0CDPlNpSOP4ri3NY8tw==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.2.6.tgz", + "integrity": "sha512-iCsf3V28/jJ95w2zd8aSvR4denoA2UYV3fpNCTGOURqICyKOG3cyVxvqKp8Hhcwn7trNOsK+HlL6q5gpv56ViA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -11613,13 +12065,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.2.5.tgz", - "integrity": "sha512-FZowGG+58qWHePjE6tGTTjT+m4/ZTI1uZD7GA++phdi5m8V/LGwJl8zBNZqUha/ygJ0i3Yvnj4tclWDSa8wtnQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.2.6.tgz", + "integrity": "sha512-61NFowA6EmCw+Eyzp0U4fat9MlPDdnT7aoDyzqSImLwWLITY9IvmWuTeo7XKJZN3fe22z1r7cZseKdYrtaHcKw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -11631,13 +12083,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-controls": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.2.5.tgz", - "integrity": "sha512-8IoeEmiOyg5aTIyW4gdUUV/xJZk8y5bACkNhDTIepyfTZLoVNsVXS1tjqrG4EXQR6dNY4XV9dDIUIRI11/K6tQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.2.6.tgz", + "integrity": "sha512-EHUwHy+oZZv3pXzN7fuXWrS/meHFjqcELY3RBvOyEkGf21agl6co6R1tnf6d5N5QoYAGfIbDO7dkauSL2RfNAw==", "dev": true, "dependencies": { "dequal": "^2.0.2", @@ -11649,21 +12101,21 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-docs": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.2.5.tgz", - "integrity": "sha512-fJ2Aam6rQO5BVRIDrA4gVxxnVmMCkk4wC6RDi8oSTOcjM0FRl3ktv+6gPbNWq/+b8dqU23Y4wSyM4UUAIP0PAA==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.2.6.tgz", + "integrity": "sha512-qe7hxntaezqjKdU9QS+Q9NFL6i/uNdBxdvOnCKgPhBAY/zY6yhk5t3sOvonynPK5nkaNAowfSNPIzNxAXlJ1sA==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.2.5", - "@storybook/csf-plugin": "8.2.5", + "@storybook/blocks": "8.2.6", + "@storybook/csf-plugin": "8.2.6", "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "8.2.5", + "@storybook/react-dom-shim": "8.2.6", "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "fs-extra": "^11.1.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", @@ -11677,24 +12129,24 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-essentials": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.2.5.tgz", - "integrity": "sha512-SmA4QOiI9/d9bycagStm1gtlt2iR1EpWXJnhct4oqcj5nxmp+jviyhv1Pb+Rm/zKNE5qcaI4AcRDRVTJRUwESw==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "8.2.5", - "@storybook/addon-backgrounds": "8.2.5", - "@storybook/addon-controls": "8.2.5", - "@storybook/addon-docs": "8.2.5", - "@storybook/addon-highlight": "8.2.5", - "@storybook/addon-measure": "8.2.5", - "@storybook/addon-outline": "8.2.5", - "@storybook/addon-toolbars": "8.2.5", - "@storybook/addon-viewport": "8.2.5", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.2.6.tgz", + "integrity": "sha512-diGjGZcZNov+RCAVQBTm8JKP2kUtMRuJIQFBeXdPWpu6hYBk6lw1FlAf2GywWGCvdny1pJT90hfoD33qUMNuDg==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "8.2.6", + "@storybook/addon-backgrounds": "8.2.6", + "@storybook/addon-controls": "8.2.6", + "@storybook/addon-docs": "8.2.6", + "@storybook/addon-highlight": "8.2.6", + "@storybook/addon-measure": "8.2.6", + "@storybook/addon-outline": "8.2.6", + "@storybook/addon-toolbars": "8.2.6", + "@storybook/addon-viewport": "8.2.6", "ts-dedent": "^2.0.0" }, "funding": { @@ -11702,13 +12154,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-highlight": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.2.5.tgz", - "integrity": "sha512-fgzmilW3jGD68xYiR8sRjOB+joETc6/2+Fmj4S85BNnKy2ViXc1D+LHIw1id5/oT9MNN1i62D517EXRZkPakGw==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.2.6.tgz", + "integrity": "sha512-03cV9USsfP3bS4wYV06DYcIaGPfoheQe53Q0Jr1B2yJUVyIPKvmO2nGjLBsqzeL3Wl7vSfLQn0/dUdxCcbqLsw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -11718,13 +12170,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-measure": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.2.5.tgz", - "integrity": "sha512-rC/kukXM+3Sd1U5Wboozs82p3rLaHBRCmQfk3bFhWyGKvbYWEWmSr7w0DLH8/X7pi1u8IMSqeRll7tDJrEXeaw==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.2.6.tgz", + "integrity": "sha512-neI8YeSOAtOmzasLxo6O8ZLr2ebMaD7XVF+kYatl5+SpyuwwvUGcP9NkKe5S+mB8V2zxFUIsXS74XrhmQhRoaQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -11735,13 +12187,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-outline": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.2.5.tgz", - "integrity": "sha512-YRS60tyZH79FfH9NEOndGVG/AmlXdYMd3nT2XfMBPZ+uTay/hcUzp6/wVsL+ucyVXi0avHbyNjY+iFP6m/MhRw==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.2.6.tgz", + "integrity": "sha512-uAlPtqDWlq7MQQ4zJT80qdjbSdLF/zsvtPhidX6h9cjLKNPWAv79xJQ14AJHaMv+Hzy5xKnM4wdEhgPbzKabQg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -11752,26 +12204,26 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.2.5.tgz", - "integrity": "sha512-XqjJxpXjTKurL81QF+Xa69J/8TSstXvLWVqeX+132C0//Yq3VeUir87hvI2qw/qbQT9sGeRX72vqKhoxS+kvIQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.2.6.tgz", + "integrity": "sha512-0JmRirMpxHS6VZzBk0kY871xWTpkk3TN4S1sxoFf5fcnCfVTHDjEJ5Ws/QWru1RJlIZHuJKRdQIA6Vuq5X+KfQ==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/addon-viewport": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.2.5.tgz", - "integrity": "sha512-QH2A+rzoMf8dcREOUpAsx1vvP7w3MQ8HbZCawk7KdkW/KS0L8zhkHfsNL9cfLcgCJA0wtOmRPD25ZVGoxUAHSA==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.2.6.tgz", + "integrity": "sha512-IAxH9H8tVFzSmZhKf5E+EALiAdkp19RzGqP/rWluD8LH7oW5HumQE/4oN0ZhVMy1RxYsCKFYjWyAp7AuxeMRSw==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -11781,22 +12233,22 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/angular": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-8.2.5.tgz", - "integrity": "sha512-gKHilTLvrWLAFiwONHpEPAaUWG4NySGf8epIZnEhHf5Qoea2Tb49l7ZFw9pyHw+75Odtmy0fFlFeVYdVdCHJ7g==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-8.2.6.tgz", + "integrity": "sha512-kzOA4H09oDMq2KAg3iVDo0cWFx4u8qYbrMaMCbd/UjuSYd1Qx965Dx0m0i5i6t7BObUe5R5RlDhBo/JXAyQ55g==", "dev": true, "dependencies": { - "@storybook/builder-webpack5": "8.2.5", - "@storybook/components": "^8.2.5", - "@storybook/core-webpack": "8.2.5", + "@storybook/builder-webpack5": "8.2.6", + "@storybook/components": "^8.2.6", + "@storybook/core-webpack": "8.2.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "^8.2.5", - "@storybook/preview-api": "^8.2.5", - "@storybook/theming": "^8.2.5", + "@storybook/manager-api": "^8.2.6", + "@storybook/preview-api": "^8.2.6", + "@storybook/theming": "^8.2.6", "@types/node": "^18.0.0", "@types/react": "^18.0.37", "@types/react-dom": "^18.0.11", @@ -11831,7 +12283,7 @@ "@angular/platform-browser": ">=15.0.0 < 19.0.0", "@angular/platform-browser-dynamic": ">=15.0.0 < 19.0.0", "rxjs": "^6.0.0 || ^7.4.0", - "storybook": "^8.2.5", + "storybook": "^8.2.6", "typescript": "^4.0.0 || ^5.0.0", "zone.js": ">= 0.11.1 < 1.0.0" }, @@ -11842,9 +12294,9 @@ } }, "node_modules/@storybook/angular/node_modules/@types/node": { - "version": "18.19.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.41.tgz", - "integrity": "sha512-LX84pRJ+evD2e2nrgYCHObGWkiQJ1mL+meAgbvnwk/US6vmMY7S2ygBTGV2Jw91s9vUsLSXeDEkUHZIJGLrhsg==", + "version": "18.19.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", + "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -11917,9 +12369,9 @@ } }, "node_modules/@storybook/blocks": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.2.5.tgz", - "integrity": "sha512-SJXo9NxgdXEeFA4OgfMaffjOxFBrMFIq/27F6/Z+JEs6lHZhayaBsofFcVbKEtivsg9+MbOLnN1TbwgnjjRw5g==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.2.6.tgz", + "integrity": "sha512-nMlZJjVTyfOJ6xwORptsNuS1AZZlDbJUVXc2R8uukGd5GIXxxCdrPk4NvUsjfQslMT9LhYuFld3z62FATsM2rw==", "dev": true, "dependencies": { "@storybook/csf": "0.1.11", @@ -11944,7 +12396,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.2.5" + "storybook": "^8.2.6" }, "peerDependenciesMeta": { "react": { @@ -11956,12 +12408,12 @@ } }, "node_modules/@storybook/builder-webpack5": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.2.5.tgz", - "integrity": "sha512-qY/CuTYNPBYmeLihfawfe6O+6dDErhQ+xbwjxabt5Ba2QqUPhJZ0WEhWt0UidCb+G4ommLC4HOgri1pVHPObbw==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.2.6.tgz", + "integrity": "sha512-ba25XOXifbAxUYprw5WWcrYq/2DJODFoOHdv7YZqzjKeDDbg1Us8F+72zlBCdr38wY4V9084Sd8EBVXV5bxzRQ==", "dev": true, "dependencies": { - "@storybook/core-webpack": "8.2.5", + "@storybook/core-webpack": "8.2.6", "@types/node": "^18.0.0", "@types/semver": "^7.3.4", "browser-assert": "^1.2.1", @@ -11994,7 +12446,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" }, "peerDependenciesMeta": { "typescript": { @@ -12003,9 +12455,9 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "18.19.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.41.tgz", - "integrity": "sha512-LX84pRJ+evD2e2nrgYCHObGWkiQJ1mL+meAgbvnwk/US6vmMY7S2ygBTGV2Jw91s9vUsLSXeDEkUHZIJGLrhsg==", + "version": "18.19.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", + "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -12256,16 +12708,16 @@ } }, "node_modules/@storybook/codemod": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.2.5.tgz", - "integrity": "sha512-bUCvOqW3LUjz6epmTfocWBm0S7Ae52xmHvhVqgAUsKp9bVw2CGt9uaPR8dVE4IfI1yJZKRjf3u7Y60OTfWew4g==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.2.6.tgz", + "integrity": "sha512-+mFJ6R+JhJLpU7VPDlXU5Yn6nqIBq745GaEosnIiFOdNo3jaxJ58wq/sGhbQvoCHPUxMA+sDQvR7pS62YFoLRQ==", "dev": true, "peer": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/types": "^7.24.0", - "@storybook/core": "8.2.5", + "@storybook/core": "8.2.6", "@storybook/csf": "0.1.11", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", @@ -12329,22 +12781,22 @@ } }, "node_modules/@storybook/components": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.2.5.tgz", - "integrity": "sha512-/cqAzQ1w9tK44BvKDNkY3MxcqoDaMvZeI5c4rGh/nYMjulXV4cAOTSlVK07XfkOJENj/wHHSDz8tZTrl2FhmuQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.2.6.tgz", + "integrity": "sha512-H8ckH1AnLkHtMtvJ3J8LxnmDtHxkJ7NJacGctHMRrsBIvdKTVwlT4su5nAVVJlan/PrEou+jESfw+OjjBYE5PA==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/core": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.2.5.tgz", - "integrity": "sha512-KjaeIkbdcog4Jmx3MoSjQZpfESin1qHEcFiLoOkICOpuKsj37xdMFcuSre8IbcVGCJPkt1RvEmfeu1N90jOgww==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.2.6.tgz", + "integrity": "sha512-XY71g3AcpD6IiER9k9Lt+vlUMYfPIYgWekd7e0Ggzz2gJkPuLunKEdQccLGDSHf5OFAobHhrTJc7ZsvWhmDMag==", "dev": true, "peer": true, "dependencies": { @@ -12366,22 +12818,22 @@ } }, "node_modules/@storybook/core-server": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.2.5.tgz", - "integrity": "sha512-NjfAiKV0BIhxi8ByGMZ04iAkI+UkxvwKk2p2OepkHUcDZS+FOedx4jo420oKkBqppnYMJnEaTl7cUnCKPJtMMA==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.2.6.tgz", + "integrity": "sha512-L8wT5C9D33gk8Y6fV9Gak52V/pzm60+TXXFRW2+YYMyRwyjC1c/eDePlrRIu7jAJiEs9UmdxxUwM4R/iEhOHzg==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/core-webpack": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.2.5.tgz", - "integrity": "sha512-Kg1pgUavDM4wdKkvl6djNuyA9vhVaQcsU1nL8t14A9jjF8rqOqP40eunrR7oLf/QmvbWk35wThW3PJi0dvrBhg==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.2.6.tgz", + "integrity": "sha512-RSqRVNrxrp2pKoQeSmaiHMz7GvAzQ7BV+qPi9gDRDDCuAPrjpY8a17KyqmCJ617asDAb+OEQNBks802xM3pEQw==", "dev": true, "dependencies": { "@types/node": "^18.0.0", @@ -12392,22 +12844,22 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "18.19.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.41.tgz", - "integrity": "sha512-LX84pRJ+evD2e2nrgYCHObGWkiQJ1mL+meAgbvnwk/US6vmMY7S2ygBTGV2Jw91s9vUsLSXeDEkUHZIJGLrhsg==", + "version": "18.19.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", + "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@storybook/core/node_modules/@types/node": { - "version": "18.19.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.41.tgz", - "integrity": "sha512-LX84pRJ+evD2e2nrgYCHObGWkiQJ1mL+meAgbvnwk/US6vmMY7S2ygBTGV2Jw91s9vUsLSXeDEkUHZIJGLrhsg==", + "version": "18.19.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", + "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", "dev": true, "peer": true, "dependencies": { @@ -12424,9 +12876,9 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.2.5.tgz", - "integrity": "sha512-YpkvfDbKyilI54QMz/NyHGOlXxVeE+3LTKLx4GV/JrnGW+EtqQTYNaWWnTsesX0AsUICBAvxqyO9HtFtRjeL+Q==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.2.6.tgz", + "integrity": "sha512-USn7E/bMQYVqvFBuW6d9rKoSuCImjk0BAmc/0wIOuMQ/yQNp2Xze0m8eVkNHUIUDokyx0TXDjRjwq10Xxk16ag==", "dev": true, "dependencies": { "unplugin": "^1.3.1" @@ -12436,7 +12888,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/global": { @@ -12446,9 +12898,9 @@ "dev": true }, "node_modules/@storybook/icons": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.9.tgz", - "integrity": "sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.10.tgz", + "integrity": "sha512-310apKdDcjbbX2VSLWPwhEwAgjxTzVagrwucVZIdGPErwiAppX8KvBuWZgPo+rQLVrtH8S+pw1dbUwjcE6d7og==", "dev": true, "engines": { "node": ">=14.0.0" @@ -12459,35 +12911,35 @@ } }, "node_modules/@storybook/manager-api": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.2.5.tgz", - "integrity": "sha512-4UHRlpcbYF2UiO9tonafnJMC2wJXWjTXivHjuf3ehbJXmopkNe/4zLtNTRyf3Hozf4CuYtNotw0tXflBrGlIlw==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.2.6.tgz", + "integrity": "sha512-uv36h/b5RhlajWtEg4cVPBYV8gZs6juux0nIE+6G9i7vt8Ild6gM9tW1KNabgZcaHFiyWJYCNWxJZoKjgUmXDg==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/preview-api": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.2.5.tgz", - "integrity": "sha512-C5A3MtubUM5Tq1An1gIqiEmiBX4ybaTzAeBuohsqToPmWHvM2uIdSl6XpTyQQJowkvrqBKjchqZUy/2mynX4lQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.2.6.tgz", + "integrity": "sha512-5vTj2ndX5ng4nDntZYe+r8UwLjCIGFymhq5/r2adAvRKL+Bo4zQDWGO7bhvGJk16do2THb2JvPz49ComW9LLZw==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.2.5.tgz", - "integrity": "sha512-r+ZppgZR1AmM+2E9GRIaL/JjD3C/kl8sexD1mrGN4PBzrqqy6BNedHroWvf9JmfAvD/bp55peJ+LWAsSU/NvQQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.2.6.tgz", + "integrity": "sha512-B+x8UAEQPDp1yhN3tMh09NvSL38QNfJB7PAyLgKrfE7xIAzvewq+RLW2DfGkoZCy+Zr7QSHm1p7NOgud8+sQCg==", "dev": true, "funding": { "type": "opencollective", @@ -12496,20 +12948,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@storybook/theming": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.2.5.tgz", - "integrity": "sha512-EEOSmW55MeLB3iskf5uUqffsqu003tTta8XQ1Xg8em3gePxPsjqzQtly1Ws5PtRg1Zvt1Zc6NKHwabiVzxothA==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.2.6.tgz", + "integrity": "sha512-ICnYuLIVsYifVCMQljdHgrp+5vAquNybHxDGWiPeOxBicotwHF8rLhTckD2CdVQbMp0jk6r6jetvjXbFJ2MbvQ==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.5" + "storybook": "^8.2.6" } }, "node_modules/@swc-node/core": { @@ -13392,9 +13844,9 @@ } }, "node_modules/@types/node": { - "version": "20.14.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", - "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", + "version": "20.14.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", + "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -15506,15 +15958,18 @@ } }, "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "dependencies": { - "restore-cursor": "^3.1.0" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-highlight": { @@ -15584,6 +16039,13 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/cli-highlight/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, "node_modules/cli-highlight/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -15594,6 +16056,16 @@ "node": ">=8" } }, + "node_modules/cli-highlight/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-highlight/node_modules/parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", @@ -15601,6 +16073,21 @@ "dev": true, "peer": true }, + "node_modules/cli-highlight/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-highlight/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15689,6 +16176,54 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-width": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", @@ -15727,6 +16262,35 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -17323,9 +17887,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", - "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.2.tgz", + "integrity": "sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ==", "dev": true }, "node_modules/emittery": { @@ -17341,9 +17905,9 @@ } }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, "node_modules/emojilib": { @@ -17402,9 +17966,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -17570,19 +18134,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/env-ci/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/env-ci/node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -17725,9 +18276,9 @@ } }, "node_modules/esbuild-register": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", - "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", "dev": true, "peer": true, "dependencies": { @@ -18217,6 +18768,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -18641,18 +19198,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "7.2.13", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", @@ -19001,6 +19546,18 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -19958,9 +20515,9 @@ "dev": true }, "node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -19976,43 +20533,158 @@ } }, "node_modules/inquirer": { - "version": "9.2.22", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.22.tgz", - "integrity": "sha512-SqLLa/Oe5rZUagTR9z+Zd6izyatHglbmbvVofo1KzuVB54YHleWzeHNLoR7FOICGOeQSqeLh1cordb3MzhGcEw==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, "dependencies": { - "@inquirer/figures": "^1.0.2", - "@ljharb/through": "^2.3.13", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", "lodash": "^4.17.21", - "mute-stream": "1.0.0", + "mute-stream": "0.0.8", "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/inquirer/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/inquirer/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/inquirer/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/inquirer/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/into-stream": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", @@ -20170,12 +20842,15 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-fn": { @@ -22221,6 +22896,13 @@ "node": ">=8" } }, + "node_modules/jscodeshift/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "peer": true + }, "node_modules/jscodeshift/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22661,6 +23343,85 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/listr2": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.3.tgz", + "integrity": "sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.0.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/lmdb": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.12.tgz", @@ -22686,12 +23447,6 @@ "@lmdb/lmdb-win32-x64": "3.0.12" } }, - "node_modules/lmdb/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true - }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -22914,6 +23669,124 @@ "node": ">=8" } }, + "node_modules/log-update": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.2.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^7.0.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -23533,16 +24406,16 @@ } }, "node_modules/msw": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.2.tgz", - "integrity": "sha512-vDn6d6a50vxPE+HnaKQfpmZ4SVXlOjF97yD5FJcUT3v2/uZ65qvTYNL25yOmnrfCNWZ4wtAS7EbtXxygMug2Tw==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.4.tgz", + "integrity": "sha512-sHMlwrajgmZSA2l1o7qRSe+azm/I+x9lvVVcOxAzi4vCtH8uVPJk1K5BQYDkzGl+tt0RvM9huEXXdeGrgcc79g==", "dev": true, "hasInstallScript": true, "dependencies": { "@bundled-es-modules/cookie": "^2.0.0", "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", "@inquirer/confirm": "^3.0.0", - "@mswjs/cookies": "^1.1.0", "@mswjs/interceptors": "^0.29.0", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", @@ -24297,6 +25170,13 @@ "node-gyp-build": "^4.2.2" } }, + "node_modules/nice-napi/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -24314,11 +25194,10 @@ "dev": true }, "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true }, "node_modules/node-dir": { "version": "0.1.17", @@ -24690,6 +25569,13 @@ ], "dev": true, "peer": true, + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^7.5.4", @@ -27840,6 +28726,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/nx-release/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "peer": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nx-release/node_modules/cli-spinners": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", @@ -27853,15 +28752,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx-release/node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/nx-release/node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -27895,6 +28785,13 @@ "node": ">=12" } }, + "node_modules/nx-release/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, "node_modules/nx-release/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -27904,32 +28801,6 @@ "node": ">=8" } }, - "node_modules/nx-release/node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/nx-release/node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -27946,6 +28817,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nx-release/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/nx-release/node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -27991,12 +28872,6 @@ "node": ">=10" } }, - "node_modules/nx-release/node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "node_modules/nx-release/node_modules/nx": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/nx/-/nx-17.3.2.tgz", @@ -28110,13 +28985,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx-release/node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/nx-release/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "peer": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, "node_modules/nx-release/node_modules/semver": { @@ -28134,6 +29014,28 @@ "node": ">=10" } }, + "node_modules/nx-release/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "peer": true + }, + "node_modules/nx-release/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nx-release/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -28183,6 +29085,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/nx/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nx/node_modules/cli-spinners": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", @@ -28204,6 +29118,12 @@ "node": ">=8" } }, + "node_modules/nx/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/nx/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -28228,6 +29148,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nx/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/nx/node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -28285,6 +29214,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nx/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/nx/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nx/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -28436,19 +29398,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nypm/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/nypm/node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -28640,6 +29589,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -28649,6 +29610,25 @@ "node": ">=8" } }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29374,9 +30354,9 @@ } }, "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", "dev": true, "funding": [ { @@ -30767,9 +31747,9 @@ } }, "node_modules/pretty-ms": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.0.0.tgz", - "integrity": "sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz", + "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==", "dev": true, "peer": true, "dependencies": { @@ -31675,18 +32655,27 @@ } }, "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -31706,6 +32695,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -31723,9 +32718,9 @@ } }, "node_modules/rollup": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.0.tgz", - "integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -31738,22 +32733,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.19.0", - "@rollup/rollup-android-arm64": "4.19.0", - "@rollup/rollup-darwin-arm64": "4.19.0", - "@rollup/rollup-darwin-x64": "4.19.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.19.0", - "@rollup/rollup-linux-arm-musleabihf": "4.19.0", - "@rollup/rollup-linux-arm64-gnu": "4.19.0", - "@rollup/rollup-linux-arm64-musl": "4.19.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.19.0", - "@rollup/rollup-linux-riscv64-gnu": "4.19.0", - "@rollup/rollup-linux-s390x-gnu": "4.19.0", - "@rollup/rollup-linux-x64-gnu": "4.19.0", - "@rollup/rollup-linux-x64-musl": "4.19.0", - "@rollup/rollup-win32-arm64-msvc": "4.19.0", - "@rollup/rollup-win32-ia32-msvc": "4.19.0", - "@rollup/rollup-win32-x64-msvc": "4.19.0", + "@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.2" } }, @@ -31770,9 +32765,9 @@ } }, "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "engines": { "node": ">=0.12.0" @@ -32317,19 +33312,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/semantic-release/node_modules/strip-final-newline": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", @@ -32614,10 +33596,16 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/signale": { "version": "1.4.0", @@ -32692,6 +33680,34 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -32971,16 +33987,16 @@ } }, "node_modules/storybook": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.2.5.tgz", - "integrity": "sha512-nfcly5CY3D6KuHbsfhScPaGeraRA9EJhO9GF00/dnI0GXW4ILS8Kwket515IkKAuKcdjdZis6maEuosbG//Kbg==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.2.6.tgz", + "integrity": "sha512-8j30wDxQmkcqI0fWcSYFsUCjErsY1yTWbTW+yjbwM8DyW18Cud6CwbFRCxjFsH+2M0CjP6Pqs/m1PGI0vcQscQ==", "dev": true, "peer": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/types": "^7.24.0", - "@storybook/codemod": "8.2.5", - "@storybook/core": "8.2.5", + "@storybook/codemod": "8.2.6", + "@storybook/core": "8.2.6", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -33175,17 +34191,20 @@ } }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { @@ -33203,6 +34222,48 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -34628,15 +35689,15 @@ } }, "node_modules/unplugin": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.11.0.tgz", - "integrity": "sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz", + "integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==", "dev": true, "dependencies": { - "acorn": "^8.11.3", + "acorn": "^8.12.1", "chokidar": "^3.6.0", "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.6.1" + "webpack-virtual-modules": "^0.6.2" }, "engines": { "node": ">=14.0.0" @@ -35440,9 +36501,9 @@ } }, "node_modules/webpack-dev-middleware/node_modules/memfs": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.3.tgz", - "integrity": "sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.4.tgz", + "integrity": "sha512-Xlj8b2rU11nM6+KU6wC7cuWcHQhVINWCUgdPS4Ar9nPxLaOya3RghqK7ALyDW2QtGebYAYs6uEdEVnwPVT942A==", "dev": true, "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", @@ -35920,6 +36981,35 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -35935,6 +37025,35 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -35954,6 +37073,12 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", @@ -36060,6 +37185,35 @@ "node": ">=12" } }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index 513c25eb..8c08ea94 100644 --- a/package.json +++ b/package.json @@ -10,16 +10,16 @@ "private": true, "dependencies": { "@angular-architects/module-federation": "18.0.4", - "@angular/animations": "18.0.5", - "@angular/cdk": "^18.0.6", - "@angular/common": "18.0.5", - "@angular/compiler": "18.0.5", - "@angular/core": "18.0.5", - "@angular/elements": "18.0.5", - "@angular/forms": "18.0.5", - "@angular/platform-browser": "18.0.5", - "@angular/platform-browser-dynamic": "18.0.5", - "@angular/router": "18.0.5", + "@angular/animations": "^18.1.2", + "@angular/cdk": "^18.1.2", + "@angular/common": "^18.1.2", + "@angular/compiler": "^18.1.2", + "@angular/core": "^18.1.2", + "@angular/elements": "^18.1.2", + "@angular/forms": "^18.1.2", + "@angular/platform-browser": "^18.1.2", + "@angular/platform-browser-dynamic": "^18.1.2", + "@angular/router": "^18.1.2", "@ngneat/until-destroy": "^10.0.0", "@ngrx/effects": "^18.0.1", "@ngrx/operators": "^18.0.1", @@ -47,16 +47,16 @@ "zone.js": "^0.14.7" }, "devDependencies": { - "@angular-devkit/architect": "0.1800.6", - "@angular-devkit/build-angular": "^18.0.6", - "@angular-devkit/core": "^18.0.6", - "@angular-devkit/schematics": "^18.0.6", + "@angular-devkit/architect": "^0.1801.2", + "@angular-devkit/build-angular": "^18.1.2", + "@angular-devkit/core": "^18.1.2", + "@angular-devkit/schematics": "^18.1.2", "@angular-eslint/eslint-plugin": "^18.1.0", "@angular-eslint/eslint-plugin-template": "^18.1.0", "@angular-eslint/template-parser": "^18.1.0", - "@angular/cli": "~18.0.6", - "@angular/compiler-cli": "18.0.5", - "@angular/language-service": "18.0.5", + "@angular/cli": "^18.1.2", + "@angular/compiler-cli": "^18.1.2", + "@angular/language-service": "^18.1.2", "@happy-dom/jest-environment": "^14.12.3", "@nx/angular": "19.4.0", "@nx/esbuild": "19.4.0", From aac7a8e1a974f1fcee4dd426d2939dca2f793f36 Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Wed, 14 Aug 2024 15:00:52 +0200 Subject: [PATCH 02/16] feat: default listview update and new way of templating --- .../data-layout-selection.component.html | 2 +- .../data-layout-selection.component.ts | 3 +- .../data-list-grid.component.html | 177 +++++++++--------- .../data-list-grid.component.scss | 6 + .../data-list-grid.component.ts | 17 +- .../data-table/data-table.component.html | 86 +-------- .../data-table/data-table.component.ts | 78 +++++++- .../data-view/data-view.component.html | 2 +- .../data-view/data-view.component.ts | 113 ++++++++++- .../interactive-data-view.component.html | 2 +- .../interactive-data-view.component.ts | 93 ++++++++- .../page-header/page-header.component.html | 38 ++-- .../src/lib/model/column-type.model.ts | 3 + package-lock.json | 6 +- package.json | 3 +- 15 files changed, 419 insertions(+), 210 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-layout-selection/data-layout-selection.component.html b/libs/angular-accelerator/src/lib/components/data-layout-selection/data-layout-selection.component.html index 271a5e42..68b23333 100644 --- a/libs/angular-accelerator/src/lib/components/data-layout-selection/data-layout-selection.component.html +++ b/libs/angular-accelerator/src/lib/components/data-layout-selection/data-layout-selection.component.html @@ -7,7 +7,7 @@ (onChange)="onDataViewLayoutChange($event.value)" > - + diff --git a/libs/angular-accelerator/src/lib/components/data-layout-selection/data-layout-selection.component.ts b/libs/angular-accelerator/src/lib/components/data-layout-selection/data-layout-selection.component.ts index c706e006..a603799e 100644 --- a/libs/angular-accelerator/src/lib/components/data-layout-selection/data-layout-selection.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-layout-selection/data-layout-selection.component.ts @@ -24,7 +24,7 @@ export class DataLayoutSelectionComponent implements OnInit { @Input() supportedViewLayouts: Array = [] @Input() set layout(value: 'grid' | 'list' | 'table') { - this.selectedViewLayout = this.viewingLayouts.find((v) => v.layout === value) + this.selectedViewLayout = ALL_VIEW_LAYOUTS.find((v) => v.layout === value) } get layout(): 'grid' | 'list' | 'table' { return this.selectedViewLayout?.layout || 'table' @@ -37,7 +37,6 @@ export class DataLayoutSelectionComponent implements OnInit { ngOnInit(): void { this.viewingLayouts = ALL_VIEW_LAYOUTS.filter((vl) => this.supportedViewLayouts.includes(vl.layout)) - this.layout = 'table' } onDataViewLayoutChange(event: { icon: PrimeIcon; layout: 'grid' | 'list' | 'table' }): void { diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html index 3576c4b9..4d2454b6 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html @@ -12,8 +12,6 @@ id="dataListGrid_{{name}}" paginatorDropdownAppendTo="body" > - -
@@ -83,99 +81,100 @@
-
-
-
- -
- - - - - - - - - - - - - - - - +
+
+ +
+ + + + + + + + + + + -
+ + + + +
-
- +
+
+ +
+
+
+
{{ col.id }}
+
{{ resolveFieldData(item, col.id) }}
diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.scss b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.scss index da4197c5..16106fc2 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.scss +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.scss @@ -12,3 +12,9 @@ cursor: pointer; min-width: 4rem; } + +.list-item { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} \ No newline at end of file diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts index e21374a9..6e392933 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts @@ -1,6 +1,7 @@ import { Component, ContentChild, + ContentChildren, DoCheck, EventEmitter, Inject, @@ -9,11 +10,12 @@ import { LOCALE_ID, OnInit, Output, + QueryList, TemplateRef, } from '@angular/core' import { Router } from '@angular/router' import { TranslateService } from '@ngx-translate/core' -import { MenuItem, PrimeIcons } from 'primeng/api' +import { MenuItem, PrimeIcons, PrimeTemplate } from 'primeng/api' import { BehaviorSubject, Observable, combineLatest, map, mergeMap } from 'rxjs' import { MfeInfo } from '@onecx/integration-interface' import { AppStateService } from '@onecx/angular-integration-interface' @@ -217,6 +219,11 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe displayedItems$: Observable | undefined fallbackImagePath$!: Observable + filteredCols: DataTableColumn[] = [] + + @ContentChildren(PrimeTemplate) templates: QueryList | undefined + parentTemplates: QueryList | undefined + constructor( @Inject(LOCALE_ID) locale: string, translateService: TranslateService, @@ -282,6 +289,8 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe (!!this.viewPermission && this.userService.hasPermission(this.viewPermission)) || (!!this.editPermission && this.userService.hasPermission(this.editPermission)) || (!!this.deletePermission && this.userService.hasPermission(this.deletePermission)) + + this.getFilteredColumns() } onDeleteRow(element: ListGridData) { @@ -428,4 +437,10 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe this.currentMenuRow$.next(row) menu.toggle(event) } + + getFilteredColumns() { + let ids: string[] = [] + this.titleLineId ? (ids = [this.titleLineId, ...this.subtitleLineIds]) : (ids = [...this.subtitleLineIds]) + this.filteredCols = this.columns.filter((c) => !ids.includes(c.id)) + } } diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html index 29735f6b..e65e4007 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html @@ -219,100 +219,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + > - + {{ rowObject[column.id] }} - + {{ rowObject[column.id] | number }} - + - + {{ rowObject[column.id] | date: 'medium' }} - + {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ rowObject[column.id] | timeago }} - + {{ rowObject[column.id] | translate }} diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index b0472e0b..d17657f9 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -1,6 +1,8 @@ import { + AfterContentInit, Component, ContentChild, + ContentChildren, EventEmitter, Inject, Injector, @@ -8,14 +10,15 @@ import { LOCALE_ID, OnInit, Output, + QueryList, TemplateRef, } from '@angular/core' import { Router } from '@angular/router' import { TranslateService } from '@ngx-translate/core' import { UserService } from '@onecx/angular-integration-interface' -import { MenuItem, SelectItem } from 'primeng/api' +import { MenuItem, PrimeTemplate, SelectItem } from 'primeng/api' import { Menu } from 'primeng/menu' -import { BehaviorSubject, Observable, combineLatest, map, mergeMap, of } from 'rxjs' +import { BehaviorSubject, Observable, combineLatest, concat, map, mergeMap, of } from 'rxjs' import { ColumnType } from '../../model/column-type.model' import { DataAction } from '../../model/data-action' import { DataSortDirection } from '../../model/data-sort-direction' @@ -38,7 +41,7 @@ export type Sort = { sortColumn: string; sortDirection: DataSortDirection } templateUrl: './data-table.component.html', styleUrls: ['./data-table.component.scss'], }) -export class DataTableComponent extends DataSortBase implements OnInit { +export class DataTableComponent extends DataSortBase implements OnInit, AfterContentInit { _rows$ = new BehaviorSubject([]) @Input() get rows(): Row[] { @@ -148,7 +151,13 @@ export class DataTableComponent extends DataSortBase implements OnInit { return this.numberCellTemplate || this.numberCellChildTemplate } + /** + * @deprecated + */ @Input() customCellTemplate: TemplateRef | undefined + /** + * @deprecated + */ @ContentChild('customCell') customCellChildTemplate: TemplateRef | undefined get _customCell(): TemplateRef | undefined { return this.customCellTemplate || this.customCellChildTemplate @@ -209,6 +218,9 @@ export class DataTableComponent extends DataSortBase implements OnInit { overflowMenuItems$: Observable currentMenuRow$ = new BehaviorSubject(null) + @ContentChildren(PrimeTemplate) templates: QueryList | undefined = new QueryList() + parentTemplates: QueryList | undefined = new QueryList() + get viewTableRowObserved(): boolean { const dv = this.injector.get('DataViewComponent', null) return dv?.viewItemObserved || dv?.viewItem.observed || this.viewTableRow.observed @@ -324,6 +336,34 @@ export class DataTableComponent extends DataSortBase implements OnInit { this.mapSelectionToRows() } + ngAfterContentInit() { + this.templates?.forEach((item) => { + switch (item.getType()) { + case 'stringCell': + this.stringCellChildTemplate = item.template + break + case 'numberCell': + this.numberCellChildTemplate = item.template + break + case 'customCell': + this.customCellChildTemplate = item.template + break + case 'dateCell': + this.dateCellChildTemplate = item.template + break + case 'relativeDateCell': + this.relativeDateCellChildTemplate = item.template + break + case 'cellTemplate': + this.cellChildTemplate = item.template + break + case 'translationKeyCell': + this.translationKeyCellChildTemplate = item.template + break + } + }) + } + onSortColumnClick(sortColumn: string) { const newSortDirection = this.columnNextSortDirection(sortColumn) @@ -447,4 +487,36 @@ export class DataTableComponent extends DataSortBase implements OnInit { const d = new Date(value) return isValidDate(d) } + + getTemplate(column: DataTableColumn): TemplateRef | null { + const templates = [...(this.parentTemplates ?? []), ...(this.templates ?? [])] + const columnTemplate = + templates.find((template) => template.name === column.id + 'IdTableCell')?.template ?? + templates.find((template) => template.name === column.id + 'IdCell')?.template + if (columnTemplate) { + return columnTemplate + } + switch (column.columnType) { + case ColumnType.DATE: + return this._dateCell ?? templates.find((template) => template.name === 'defaultDateCell')?.template ?? null + case ColumnType.NUMBER: + return this._numberCell ?? templates.find((template) => template.name === 'defaultNumberCell')?.template ?? null + case ColumnType.RELATIVE_DATE: + return ( + this._relativeDateCell ?? + templates.find((template) => template.name === 'defaultRelativeDateCell')?.template ?? + null + ) + case ColumnType.TRANSLATION_KEY: + return ( + this._translationKeyCell ?? + templates.find((template) => template.name === 'defaultTranslationKeyCell')?.template ?? + null + ) + case ColumnType.CUSTOM: + return this._customCell ?? templates.find((template) => template.name === 'defaultCustomCell')?.template ?? null + default: + return this._stringCell ?? templates.find((template) => template.name === 'defaultStringCell')?.template ?? null + } + } } diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.html b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.html index cf3bf96a..10197c27 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.html +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.html @@ -10,7 +10,7 @@ [sortStates]="sortStates" [clientSideFiltering]="clientSideFiltering" [clientSideSorting]="clientSideSorting" - [titleLineId]="titleLineId || firstColumnId" + [titleLineId]="titleLineId" [subtitleLineIds]="subtitleLineIds" [clientSideSorting]="true" [pageSizes]="pageSizes" diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts index dd4eda5b..064648fb 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts @@ -1,12 +1,15 @@ import { + AfterContentInit, Component, ContentChild, + ContentChildren, DoCheck, EventEmitter, Injector, Input, OnInit, Output, + QueryList, TemplateRef, ViewChild, } from '@angular/core' @@ -15,6 +18,7 @@ import { Row, Filter, Sort, DataTableComponent } from '../data-table/data-table. import { DataTableColumn } from '../../model/data-table-column.model' import { DataSortDirection } from '../../model/data-sort-direction' import { DataAction } from '../../model/data-action' +import { PrimeTemplate } from 'primeng/api' export type RowListGridData = ListGridData & Row @Component({ @@ -23,11 +27,16 @@ export type RowListGridData = ListGridData & Row styleUrls: ['./data-view.component.css'], providers: [{ provide: 'DataViewComponent', useExisting: DataViewComponent }], }) -export class DataViewComponent implements DoCheck, OnInit { +export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { _dataListGridComponent: DataListGridComponent | undefined @ViewChild(DataListGridComponent) set listGrid(ref: DataListGridComponent | undefined) { this._dataListGridComponent = ref this.registerEventListenerForListGrid() + if (this._dataListGridComponent) { + const ql = new QueryList() + ql.reset([...(this._templates?.toArray() ?? []), ...(this._parentTemplates?.toArray() ?? [])]) + this._dataListGridComponent.parentTemplates = ql + } } get listGrid(): DataListGridComponent | undefined { return this._dataListGridComponent @@ -37,10 +46,16 @@ export class DataViewComponent implements DoCheck, OnInit { @ViewChild(DataTableComponent) set dataTable(ref: DataTableComponent | undefined) { this._dataTableComponent = ref this.registerEventListenerForDataTable() + if (this._dataTableComponent) { + const ql = new QueryList() + ql.reset([...(this._templates?.toArray() ?? []), ...(this._parentTemplates?.toArray() ?? [])]) + this._dataTableComponent.parentTemplates = ql + } } get dataTable(): DataTableComponent | undefined { return this._dataTableComponent } + @Input() deletePermission: string | undefined @Input() editPermission: string | undefined @Input() viewPermission: string | undefined @@ -92,6 +107,7 @@ export class DataViewComponent implements DoCheck, OnInit { return this.stringTableCellTemplate || this.stringTableCellChildTemplate } + // TODO copy for listValue templates @Input() numberTableCellTemplate: TemplateRef | undefined @ContentChild('numberTableCell') numberTableCellChildTemplate: TemplateRef | undefined get _numberTableCell(): TemplateRef | undefined { @@ -147,7 +163,11 @@ export class DataViewComponent implements DoCheck, OnInit { @ContentChild('tableTranslationKeyCell') tableTranslationKeyCellChildTemplate: TemplateRef | undefined @ContentChild('translationKeyTableCell') translationKeyTableCellChildTemplate: TemplateRef | undefined get _translationKeyTableCell(): TemplateRef | undefined { - return this.translationKeyTableCellTemplate || this.translationKeyTableCellChildTemplate || this.tableTranslationKeyCellChildTemplate + return ( + this.translationKeyTableCellTemplate || + this.translationKeyTableCellChildTemplate || + this.tableTranslationKeyCellChildTemplate + ) } @Input() gridItemSubtitleLinesTemplate: TemplateRef | undefined @@ -190,7 +210,11 @@ export class DataViewComponent implements DoCheck, OnInit { @ContentChild('tableRelativeDateCell') tableRelativeDateCellChildTemplate: TemplateRef | undefined @ContentChild('relativeDateTableCell') relativeDateTableCellChildTemplate: TemplateRef | undefined get _relativeDateTableCell(): TemplateRef | undefined { - return this.relativeDateTableCellTemplate || this.relativeDateTableCellChildTemplate || this.tableRelativeDateCellChildTemplate + return ( + this.relativeDateTableCellTemplate || + this.relativeDateTableCellChildTemplate || + this.tableRelativeDateCellChildTemplate + ) } @Input() additionalActions: DataAction[] = [] @@ -207,6 +231,37 @@ export class DataViewComponent implements DoCheck, OnInit { IsEditItemObserved: boolean | undefined firstColumnId: string | undefined + _parentTemplates: QueryList | undefined + set parentTemplates(templates: QueryList | undefined) { + const ql = new QueryList() + ql.reset([...(this._templates?.toArray() ?? []), ...(templates?.toArray() ?? [])]) + + if (this.dataTable) { + this.dataTable.parentTemplates = ql + } + if (this.listGrid) { + this.listGrid.parentTemplates = ql + } + } + + _templates: QueryList | undefined + @ContentChildren(PrimeTemplate) + set templates(value: QueryList | undefined) { + this._templates = value + const ql = new QueryList() + ql.reset([...(value?.toArray() ?? []), ...(this._parentTemplates?.toArray() ?? [])]) + + if (this.dataTable) { + this.dataTable.parentTemplates = ql + } + if (this.listGrid) { + this.listGrid.parentTemplates = ql + } + } + get templates(): QueryList | undefined { + return this._templates + } + get viewItemObserved(): boolean { return this.injector.get('InteractiveDataViewComponent', null)?.viewItem.observed || this.viewItem.observed } @@ -228,10 +283,61 @@ export class DataViewComponent implements DoCheck, OnInit { ngOnInit(): void { this.firstColumnId = this.columns[0]?.id } + + ngAfterContentInit() { + this.templates?.forEach((item) => { + switch (item.getType()) { + case 'stringTableCell': + this.stringTableCellChildTemplate = item.template + break + case 'tableDateCell': + this.numberTableCellChildTemplate = item.template + break + case 'customTableCell': + this.customTableCellChildTemplate = item.template + break + case 'tableDateCell': + this.tableDateCellChildTemplate = item.template + break + case 'dateTableCell': + this.dateTableCellChildTemplate = item.template + break + case 'tableCell': + this.tableCellChildTemplate = item.template + break + case 'tableTranslationKeyCell': + this.tableTranslationKeyCellChildTemplate = item.template + break + case 'translationKeyTableCell': + this.translationKeyTableCellChildTemplate = item.template + break + case 'gridItemSubtitleLines': + this.gridItemSubtitleLinesChildTemplate = item.template + break + case 'listItemSubtitleLines': + this.listItemSubtitleLinesChildTemplate = item.template + break + case 'gridItem': + this.gridItemChildTemplate = item.template + break + case 'listItem': + this.listItemChildTemplate = item.template + break + case 'tableRelativeDateCell': + this.tableRelativeDateCellChildTemplate = item.template + break + case 'relativeDateTableCell': + this.relativeDateTableCellChildTemplate = item.template + break + } + }) + } + ngDoCheck(): void { this.registerEventListenerForDataTable() this.registerEventListenerForListGrid() } + registerEventListenerForListGrid() { if (this.layout !== 'table') { if (this.deleteItem.observed) { @@ -260,6 +366,7 @@ export class DataViewComponent implements DoCheck, OnInit { } } } + registerEventListenerForDataTable() { if (this.layout === 'table') { if (this.deleteItem.observed) { diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html index e46079c1..40b4e4e5 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html @@ -50,7 +50,7 @@ [filters]="filters" [data]="data" [sortDirection]="sortDirection" - [titleLineId]="titleLineId || firstColumnId" + [titleLineId]="titleLineId" [subtitleLineIds]="subtitleLineIds" [clientSideSorting]="clientSideSorting" [clientSideFiltering]="clientSideFiltering" diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts index bd6a8fe8..f71f4a62 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts @@ -1,14 +1,27 @@ -import { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core' -import { DataTableColumn } from '../../model/data-table-column.model' +import { + AfterContentInit, + Component, + ContentChild, + ContentChildren, + EventEmitter, + Input, + OnInit, + Output, + QueryList, + TemplateRef, + ViewChild, +} from '@angular/core' +import { PrimeTemplate } from 'primeng/api' +import { DataAction } from '../../model/data-action' import { DataSortDirection } from '../../model/data-sort-direction' -import { Filter, Row, Sort } from '../data-table/data-table.component' -import { DataViewComponent, RowListGridData } from '../data-view/data-view.component' +import { DataTableColumn } from '../../model/data-table-column.model' import { GroupSelectionChangedEvent } from '../column-group-selection/column-group-selection.component' import { ActionColumnChangedEvent, ColumnSelectionChangedEvent, } from '../custom-group-column-selector/custom-group-column-selector.component' -import { DataAction } from '../../model/data-action' +import { Filter, Row, Sort } from '../data-table/data-table.component' +import { DataViewComponent, RowListGridData } from '../data-view/data-view.component' @Component({ selector: 'ocx-interactive-data-view', @@ -16,11 +29,14 @@ import { DataAction } from '../../model/data-action' styleUrls: ['./interactive-data-view.component.css'], providers: [{ provide: 'InteractiveDataViewComponent', useExisting: InteractiveDataViewComponent }], }) -export class InteractiveDataViewComponent implements OnInit { +export class InteractiveDataViewComponent implements OnInit, AfterContentInit { _dataViewComponent: DataViewComponent | undefined @ViewChild(DataViewComponent) set dataView(ref: DataViewComponent | undefined) { this._dataViewComponent = ref this.registerEventListenerForDataView() + if (this._dataViewComponent) { + this._dataViewComponent.parentTemplates = this.templates + } } get dataView(): DataViewComponent | undefined { return this._dataViewComponent @@ -53,7 +69,7 @@ export class InteractiveDataViewComponent implements OnInit { DataSortDirection.NONE, ] @Input() pageSizes: number[] = [10, 25, 50] - @Input() pageSize: number | undefined; + @Input() pageSize: number | undefined @Input() totalRecordsOnServer: number | undefined @Input() layout: 'grid' | 'list' | 'table' = 'table' @Input() defaultGroupKey = '' @@ -96,6 +112,17 @@ export class InteractiveDataViewComponent implements OnInit { @ContentChild('gridItem') gridItem: TemplateRef | undefined @ContentChild('listItem') listItem: TemplateRef | undefined @ContentChild('topCenter') topCenter: TemplateRef | undefined + _templates: QueryList | undefined + @ContentChildren(PrimeTemplate) + set templates(value: QueryList | undefined) { + this._templates = value + if (this.dataView) { + this.dataView.parentTemplates = value + } + } + get templates(): QueryList | undefined { + return this._templates + } @Output() filtered = new EventEmitter() @Output() sorted = new EventEmitter() @@ -189,6 +216,58 @@ export class InteractiveDataViewComponent implements OnInit { this.firstColumnId = this.columns[0]?.id } + ngAfterContentInit() { + this.templates?.forEach((item) => { + switch (item.getType()) { + case 'tableCell': + this.tableCell = item.template + break + case 'tableDateCell': + this.tableDateCell = item.template + break + case 'dateTableCell': + this.dateTableCell = item.template + break + case 'tableRelativeDateCell': + this.tableRelativeDateCell = item.template + break + case 'relativeDateTableCell': + this.relativeDateTableCell = item.template + break + case 'tableTranslationKeyCell': + this.tableTranslationKeyCell = item.template + break + case 'translationKeyTableCell': + this.translationKeyTableCell = item.template + break + case 'gridItemSubtitleLines': + this.gridItemSubtitleLines = item.template + break + case 'listItemSubtitleLines': + this.listItemSubtitleLines = item.template + break + case 'stringTableCell': + this.stringTableCell = item.template + break + case 'numberTableCell': + this.numberTableCell = item.template + break + case 'customTableCell': + this.customTableCell = item.template + break + case 'gridItem': + this.gridItem = item.template + break + case 'listItem': + this.listItem = item.template + break + case 'topCenter': + this.topCenter = item.template + break + } + }) + } + filtering(event: any) { this.filters = event this.filtered.emit(event) diff --git a/libs/angular-accelerator/src/lib/components/page-header/page-header.component.html b/libs/angular-accelerator/src/lib/components/page-header/page-header.component.html index d51e9c4f..781659e1 100644 --- a/libs/angular-accelerator/src/lib/components/page-header/page-header.component.html +++ b/libs/angular-accelerator/src/lib/components/page-header/page-header.component.html @@ -91,16 +91,9 @@

{{ subheader }}

-
+
-
+
{{ subheader }} tooltipPosition="top" >{{ item.label | dynamicPipe:item.labelPipe }} - + - - - {{ item.value | dynamicPipe:item.valuePipe:item.valuePipeArgs}} - + + + {{ item.value | dynamicPipe:item.valuePipe:item.valuePipeArgs}} + Date: Thu, 15 Aug 2024 14:15:08 +0200 Subject: [PATCH 03/16] feat: add SharedModule, refactorings listview and templates --- .../lib/angular-accelerator-primeng.module.ts | 11 +- .../data-list-grid.component.html | 55 ++++++++- .../data-list-grid.component.ts | 104 ++++++++++++++++-- .../data-table/data-table.component.html | 12 +- .../data-table/data-table.component.ts | 12 +- 5 files changed, 172 insertions(+), 22 deletions(-) diff --git a/libs/angular-accelerator/src/lib/angular-accelerator-primeng.module.ts b/libs/angular-accelerator/src/lib/angular-accelerator-primeng.module.ts index 600a956b..bb93c724 100644 --- a/libs/angular-accelerator/src/lib/angular-accelerator-primeng.module.ts +++ b/libs/angular-accelerator/src/lib/angular-accelerator-primeng.module.ts @@ -10,8 +10,9 @@ import { MenuModule } from 'primeng/menu' import { ChartModule } from 'primeng/chart' import { MultiSelectModule } from 'primeng/multiselect' import { BreadcrumbModule } from 'primeng/breadcrumb' -import { SkeletonModule } from 'primeng/skeleton'; -import { MessageModule } from 'primeng/message'; +import { SkeletonModule } from 'primeng/skeleton' +import { MessageModule } from 'primeng/message' +import { SharedModule } from 'primeng/api' @NgModule({ imports: [ @@ -27,7 +28,8 @@ import { MessageModule } from 'primeng/message'; ChartModule, MultiSelectModule, SkeletonModule, - MessageModule + MessageModule, + SharedModule, ], exports: [ BreadcrumbModule, @@ -42,7 +44,8 @@ import { MessageModule } from 'primeng/message'; ChartModule, MultiSelectModule, SkeletonModule, - MessageModule + MessageModule, + SharedModule, ], }) export class AngularAcceleratorPrimeNgModule {} diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html index 4d2454b6..33a768a6 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html @@ -172,9 +172,23 @@ >
-
-
{{ col.id }}
-
{{ resolveFieldData(item, col.id) }}
+
+
{{ col.nameKey | translate }}
+
+ +
@@ -185,3 +199,38 @@ {{ resolveFieldData(item, subtitleLineId) }}
+ + + + + + + + {{ resolveFieldData(rowObject, column.id) }} + + + + {{ resolveFieldData(rowObject, column.id) | number }} + + + + + + {{ resolveFieldData(rowObject, column.id) | date: 'medium' }} + + + + + {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }} + + + + + {{ resolveFieldData(rowObject, column.id) | translate }} + diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts index 6e392933..99b1c3e7 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts @@ -12,6 +12,7 @@ import { Output, QueryList, TemplateRef, + ViewChildren, } from '@angular/core' import { Router } from '@angular/router' import { TranslateService } from '@ngx-translate/core' @@ -27,6 +28,7 @@ import { ObjectUtils } from '../../utils/objectutils' import { DataSortBase } from '../data-sort-base/data-sort-base' import { Filter, Row } from '../data-table/data-table.component' import { Menu } from 'primeng/menu' +import { ColumnType } from '../../model/column-type.model' export type ListGridData = { id: string | number @@ -173,6 +175,48 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe return this.gridItemTemplate || this.gridItemChildTemplate } + @Input() listValueTemplate: TemplateRef | undefined + @ContentChild('listValue') listValueChildTemplate: TemplateRef | undefined + get _listValue(): TemplateRef | undefined { + return this.listValueTemplate || this.listValueChildTemplate + } + + @Input() translationKeyListValueTemplate: TemplateRef | undefined + @ContentChild('translationsKeyListValue') translationKeyListValueChildTemplate: TemplateRef | undefined + get _translationKeyListValue(): TemplateRef | undefined { + return this.translationKeyListValueTemplate || this.translationKeyListValueChildTemplate + } + + @Input() numberListValueTemplate: TemplateRef | undefined + @ContentChild('translationsKeyListValue') numberListValueChildTemplate: TemplateRef | undefined + get _numberListValue(): TemplateRef | undefined { + return this.numberListValueTemplate || this.numberListValueChildTemplate + } + + @Input() relativeDateListValueTemplate: TemplateRef | undefined + @ContentChild('translationsKeyListValue') relativeDateListValueChildTemplate: TemplateRef | undefined + get _relativeDateListValue(): TemplateRef | undefined { + return this.relativeDateListValueTemplate || this.relativeDateListValueChildTemplate + } + + @Input() customListValueTemplate: TemplateRef | undefined + @ContentChild('translationsKeyListValue') customListValueChildTemplate: TemplateRef | undefined + get _customListValue(): TemplateRef | undefined { + return this.customListValueTemplate || this.customListValueChildTemplate + } + + @Input() stringListValueTemplate: TemplateRef | undefined + @ContentChild('translationsKeyListValue') stringListValueChildTemplate: TemplateRef | undefined + get _stringListValue(): TemplateRef | undefined { + return this.stringListValueTemplate || this.stringListValueChildTemplate + } + + @Input() dateListValueTemplate: TemplateRef | undefined + @ContentChild('dateListValue') dateListValueChildTemplate: TemplateRef | undefined + get _dateListValue(): TemplateRef | undefined { + return this.dateListValueTemplate || this.dateListValueChildTemplate + } + inlineListActions$: Observable overflowListActions$: Observable overflowMenuItems$: Observable @@ -219,10 +263,10 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe displayedItems$: Observable | undefined fallbackImagePath$!: Observable - filteredCols: DataTableColumn[] = [] - @ContentChildren(PrimeTemplate) templates: QueryList | undefined + @ViewChildren(PrimeTemplate) viewTemplates: QueryList | undefined parentTemplates: QueryList | undefined + columnType = ColumnType constructor( @Inject(LOCALE_ID) locale: string, @@ -289,8 +333,6 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe (!!this.viewPermission && this.userService.hasPermission(this.viewPermission)) || (!!this.editPermission && this.userService.hasPermission(this.editPermission)) || (!!this.deletePermission && this.userService.hasPermission(this.deletePermission)) - - this.getFilteredColumns() } onDeleteRow(element: ListGridData) { @@ -439,8 +481,56 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe } getFilteredColumns() { - let ids: string[] = [] - this.titleLineId ? (ids = [this.titleLineId, ...this.subtitleLineIds]) : (ids = [...this.subtitleLineIds]) - this.filteredCols = this.columns.filter((c) => !ids.includes(c.id)) + let ids: string[] = [...(this.subtitleLineIds ?? [])] + if (this.titleLineId) { + ids = [this.titleLineId, ...(this.subtitleLineIds ?? [])] + } + return this.columns.filter((c) => !ids.includes(c.id)) + } + + getTemplate(column: DataTableColumn): TemplateRef | null { + const templates = [...(this.parentTemplates ?? []), ...(this.viewTemplates ?? []), ...(this.templates ?? [])] + const columnTemplate = templates.find((template) => template.name === column.id + 'IdListValue')?.template + if (columnTemplate) { + return columnTemplate + } + switch (column.columnType) { + case ColumnType.DATE: + return ( + this._dateListValue ?? + templates.find((template) => template.name === 'defaultDateListValue')?.template ?? + null + ) + case ColumnType.NUMBER: + return ( + this._numberListValue ?? + templates.find((template) => template.name === 'defaultNumberListValue')?.template ?? + null + ) + case ColumnType.RELATIVE_DATE: + return ( + this._relativeDateListValue ?? + templates.find((template) => template.name === 'defaultRelativeListValue')?.template ?? + null + ) + case ColumnType.TRANSLATION_KEY: + return ( + this._translationKeyListValue ?? + templates.find((template) => template.name === 'defaultTranslationListValue')?.template ?? + null + ) + case ColumnType.CUSTOM: + return ( + this._customListValue ?? + templates.find((template) => template.name === 'defaultCustomListValue')?.template ?? + null + ) + default: + return ( + this._stringListValue ?? + templates.find((template) => template.name === 'defaultStringListValue')?.template ?? + null + ) + } } } diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html index e65e4007..9788844c 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html @@ -230,23 +230,25 @@ - {{ rowObject[column.id] }} + {{ resolveFieldData(rowObject, column.id)}} - {{ rowObject[column.id] | number }} + {{ resolveFieldData(rowObject, column.id) | number }} - {{ rowObject[column.id] | date: 'medium' }} + {{ resolveFieldData(rowObject, column.id)| date: 'medium' }} - {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ rowObject[column.id] | timeago }} + + {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }} + - {{ rowObject[column.id] | translate }} + {{ resolveFieldData(rowObject, column.id) | translate }} diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index d17657f9..1f1376dd 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -12,6 +12,7 @@ import { Output, QueryList, TemplateRef, + ViewChildren, } from '@angular/core' import { Router } from '@angular/router' import { TranslateService } from '@ngx-translate/core' @@ -218,8 +219,9 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon overflowMenuItems$: Observable currentMenuRow$ = new BehaviorSubject(null) - @ContentChildren(PrimeTemplate) templates: QueryList | undefined = new QueryList() - parentTemplates: QueryList | undefined = new QueryList() + @ContentChildren(PrimeTemplate) templates: QueryList | undefined + @ViewChildren(PrimeTemplate) viewTemplates: QueryList | undefined + parentTemplates: QueryList | undefined get viewTableRowObserved(): boolean { const dv = this.injector.get('DataViewComponent', null) @@ -489,7 +491,7 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon } getTemplate(column: DataTableColumn): TemplateRef | null { - const templates = [...(this.parentTemplates ?? []), ...(this.templates ?? [])] + const templates = [...(this.parentTemplates ?? []), ...(this.viewTemplates ?? []), ...(this.templates ?? [])] const columnTemplate = templates.find((template) => template.name === column.id + 'IdTableCell')?.template ?? templates.find((template) => template.name === column.id + 'IdCell')?.template @@ -519,4 +521,8 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon return this._stringCell ?? templates.find((template) => template.name === 'defaultStringCell')?.template ?? null } } + + resolveFieldData(object: any, key: any) { + return ObjectUtils.resolveFieldData(object, key) + } } From 5432851fa8aada2116c9692ceafccefd50fe6e62 Mon Sep 17 00:00:00 2001 From: Annika Nowak Date: Mon, 19 Aug 2024 10:04:37 +0200 Subject: [PATCH 04/16] fix: template adaptions --- .../data-list-grid.component.ts | 19 ++++++- .../data-table/data-table.component.ts | 10 +++- .../data-view/data-view.component.html | 2 + .../data-view/data-view.component.ts | 50 ++++++++----------- .../interactive-data-view.component.html | 1 + .../interactive-data-view.component.ts | 7 +-- 6 files changed, 51 insertions(+), 38 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts index 99b1c3e7..02f6d904 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts @@ -1,4 +1,6 @@ import { + AfterContentInit, + AfterViewInit, Component, ContentChild, ContentChildren, @@ -47,7 +49,7 @@ export interface ListGridDataMenuItem extends MenuItem { templateUrl: './data-list-grid.component.html', styleUrls: ['./data-list-grid.component.scss'], }) -export class DataListGridComponent extends DataSortBase implements OnInit, DoCheck { +export class DataListGridComponent extends DataSortBase implements OnInit, DoCheck, AfterContentInit { @Input() titleLineId: string | undefined @Input() subtitleLineIds: string[] = [] @Input() clientSideSorting = true @@ -265,7 +267,16 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe @ContentChildren(PrimeTemplate) templates: QueryList | undefined @ViewChildren(PrimeTemplate) viewTemplates: QueryList | undefined - parentTemplates: QueryList | undefined + // get parentTemplates(): QueryList | undefined { + // const ql = new QueryList() + // ql.reset([ + // ...(this.injector.get('DataViewComponent', null)?.templates?.toArray() ?? []), + // ...(this.injector.get('DataViewComponent', null)?.parentTemplates?.toArray() ?? []), + // ]) + // return ql + // } + @Input() parentTemplates: QueryList | undefined + columnType = ColumnType constructor( @@ -335,6 +346,10 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe (!!this.deletePermission && this.userService.hasPermission(this.deletePermission)) } + ngAfterContentInit() { + console.log('datalistgrid, afterContentInit', this.viewTemplates, this.templates) + } + onDeleteRow(element: ListGridData) { this.deleteItem.emit(element) } diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index 1f1376dd..f251a41a 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -221,7 +221,15 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon @ContentChildren(PrimeTemplate) templates: QueryList | undefined @ViewChildren(PrimeTemplate) viewTemplates: QueryList | undefined - parentTemplates: QueryList | undefined + // get parentTemplates(): QueryList | undefined { + // const ql = new QueryList() + // ql.reset([ + // ...(this.injector.get('DataViewComponent', null)?.templates?.toArray() ?? []), + // ...(this.injector.get('DataViewComponent', null)?.parentTemplates?.toArray() ?? []), + // ]) + // return ql + // } + @Input() parentTemplates: QueryList | undefined get viewTableRowObserved(): boolean { const dv = this.injector.get('DataViewComponent', null) diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.html b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.html index 10197c27..97ca5f02 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.html +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.html @@ -35,6 +35,7 @@ [listItemTemplate]="_listItem ? listItem : undefined" [gridItemTemplate]="_gridItem ? gridItem : undefined" [totalRecordsOnServer]="totalRecordsOnServer" + [parentTemplates]="getTemplatesForChild()" > @@ -106,6 +107,7 @@ [totalRecordsOnServer]="totalRecordsOnServer" [currentPageShowingKey]="currentPageShowingKey" [currentPageShowingWithTotalOnServerKey]="currentPageShowingWithTotalOnServerKey" + [parentTemplates]="getTemplatesForChild()" > diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts index 064648fb..046b3670 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts @@ -32,11 +32,6 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { @ViewChild(DataListGridComponent) set listGrid(ref: DataListGridComponent | undefined) { this._dataListGridComponent = ref this.registerEventListenerForListGrid() - if (this._dataListGridComponent) { - const ql = new QueryList() - ql.reset([...(this._templates?.toArray() ?? []), ...(this._parentTemplates?.toArray() ?? [])]) - this._dataListGridComponent.parentTemplates = ql - } } get listGrid(): DataListGridComponent | undefined { return this._dataListGridComponent @@ -46,11 +41,6 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { @ViewChild(DataTableComponent) set dataTable(ref: DataTableComponent | undefined) { this._dataTableComponent = ref this.registerEventListenerForDataTable() - if (this._dataTableComponent) { - const ql = new QueryList() - ql.reset([...(this._templates?.toArray() ?? []), ...(this._parentTemplates?.toArray() ?? [])]) - this._dataTableComponent.parentTemplates = ql - } } get dataTable(): DataTableComponent | undefined { return this._dataTableComponent @@ -231,32 +221,34 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { IsEditItemObserved: boolean | undefined firstColumnId: string | undefined - _parentTemplates: QueryList | undefined - set parentTemplates(templates: QueryList | undefined) { + // _parentTemplates: QueryList | undefined + // set parentTemplates(templates: QueryList | undefined) { + // console.log('data view, parent set templates', templates, !!this.dataTable, !!this.listGrid) + // const ql = new QueryList() + // ql.reset([...(this._templates?.toArray() ?? []), ...(templates?.toArray() ?? [])]) + + // if (this.dataTable) { + // this.dataTable.parentTemplates = ql + // } + // if (this.listGrid) { + // this.listGrid.parentTemplates = ql + // } + // } + + @Input() parentTemplates: QueryList | undefined + getTemplatesForChild(): QueryList | undefined { const ql = new QueryList() - ql.reset([...(this._templates?.toArray() ?? []), ...(templates?.toArray() ?? [])]) - - if (this.dataTable) { - this.dataTable.parentTemplates = ql - } - if (this.listGrid) { - this.listGrid.parentTemplates = ql - } + ql.reset([...(this._templates?.toArray() ?? []), ...(this.parentTemplates?.toArray() ?? [])]) + return ql } + // get parentTemplates(): QueryList | undefined { + // return this.injector.get('InteractiveDataViewComponent', null)?.templates + // } _templates: QueryList | undefined @ContentChildren(PrimeTemplate) set templates(value: QueryList | undefined) { this._templates = value - const ql = new QueryList() - ql.reset([...(value?.toArray() ?? []), ...(this._parentTemplates?.toArray() ?? [])]) - - if (this.dataTable) { - this.dataTable.parentTemplates = ql - } - if (this.listGrid) { - this.listGrid.parentTemplates = ql - } } get templates(): QueryList | undefined { return this._templates diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html index 40b4e4e5..04289dfd 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html @@ -92,6 +92,7 @@ [totalRecordsOnServer]="totalRecordsOnServer" [currentPageShowingKey]="currentPageShowingKey" [currentPageShowingWithTotalOnServerKey]="currentPageShowingWithTotalOnServerKey" + [parentTemplates]="templates" >
diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts index f71f4a62..3e71b70d 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts @@ -34,9 +34,6 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { @ViewChild(DataViewComponent) set dataView(ref: DataViewComponent | undefined) { this._dataViewComponent = ref this.registerEventListenerForDataView() - if (this._dataViewComponent) { - this._dataViewComponent.parentTemplates = this.templates - } } get dataView(): DataViewComponent | undefined { return this._dataViewComponent @@ -115,10 +112,8 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { _templates: QueryList | undefined @ContentChildren(PrimeTemplate) set templates(value: QueryList | undefined) { + console.log('Interactive, set templates', value, !!this.dataView) this._templates = value - if (this.dataView) { - this.dataView.parentTemplates = value - } } get templates(): QueryList | undefined { return this._templates From ee3da0029b16f3121a75c4c7ceb886752f13018c Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Tue, 20 Aug 2024 10:11:51 +0200 Subject: [PATCH 05/16] feat: tooltiponoverflow directive, updated listviewitem, refactored way of templating --- libs/angular-accelerator/src/index.ts | 1 + .../src/lib/angular-accelerator.module.ts | 7 +- .../data-list-grid.component.html | 9 +- .../data-list-grid.component.scss | 6 - .../data-list-grid.component.ts | 172 +++++++++++------- .../data-table/data-table.component.html | 3 +- .../data-table/data-table.component.ts | 122 ++++++++----- .../data-view/data-view.component.html | 67 ++++++- .../data-view/data-view.component.ts | 111 ++++++++--- .../interactive-data-view.component.html | 13 +- .../interactive-data-view.component.ts | 61 ++++++- .../directives/tooltipOnOverflow.directive.ts | 61 +++++++ 12 files changed, 476 insertions(+), 157 deletions(-) create mode 100644 libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts diff --git a/libs/angular-accelerator/src/index.ts b/libs/angular-accelerator/src/index.ts index 2482ba21..cb16dd1f 100644 --- a/libs/angular-accelerator/src/index.ts +++ b/libs/angular-accelerator/src/index.ts @@ -3,6 +3,7 @@ export * from './lib/directives/if-permission.directive' export * from './lib/directives/if-breakpoint.directive' export * from './lib/directives/src.directive' export * from './lib/directives/advanced.directive' +export * from './lib/directives/tooltipOnOverflow.directive' // components export * from './lib/components/column-group-selection/column-group-selection.component' diff --git a/libs/angular-accelerator/src/lib/angular-accelerator.module.ts b/libs/angular-accelerator/src/lib/angular-accelerator.module.ts index cccb15ff..5b9c93bf 100644 --- a/libs/angular-accelerator/src/lib/angular-accelerator.module.ts +++ b/libs/angular-accelerator/src/lib/angular-accelerator.module.ts @@ -29,6 +29,7 @@ import { OcxTimeAgoPipe } from './pipes/ocxtimeago.pipe' import { AppConfigService } from './services/app-config-service' import { DynamicLocaleId } from './utils/dynamic-locale-id' import { firstValueFrom, skip } from 'rxjs' +import { TooltipOnOverflowDirective } from './directives/tooltipOnOverflow.directive' export class AngularAcceleratorMissingTranslationHandler implements MissingTranslationHandler { handle(params: MissingTranslationHandlerParams) { @@ -71,8 +72,8 @@ function appInitializer(userService: UserService) { IfBreakpointDirective, SrcDirective, OcxTimeAgoPipe, - SrcDirective, AdvancedDirective, + TooltipOnOverflowDirective, ], providers: [ { @@ -88,7 +89,7 @@ function appInitializer(userService: UserService) { provide: APP_INITIALIZER, useFactory: appInitializer, deps: [UserService], - multi: true + multi: true, }, AppConfigService, ], @@ -109,8 +110,8 @@ function appInitializer(userService: UserService) { IfBreakpointDirective, SrcDirective, OcxTimeAgoPipe, - SrcDirective, AdvancedDirective, + TooltipOnOverflowDirective, ], }) export class AngularAcceleratorModule {} diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html index 33a768a6..2e88b4c0 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html @@ -173,10 +173,11 @@
-
{{ col.nameKey | translate }}
+
+ {{ col.nameKey | translate }} +
@@ -62,6 +69,62 @@ + + + + + + + + + + + + + + + + + + + + +
@@ -107,7 +170,7 @@ [totalRecordsOnServer]="totalRecordsOnServer" [currentPageShowingKey]="currentPageShowingKey" [currentPageShowingWithTotalOnServerKey]="currentPageShowingWithTotalOnServerKey" - [parentTemplates]="getTemplatesForChild()" + [parentTemplates]="templatesForChildren$ | async" > diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts index 046b3670..04baf59e 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts @@ -19,6 +19,7 @@ import { DataTableColumn } from '../../model/data-table-column.model' import { DataSortDirection } from '../../model/data-sort-direction' import { DataAction } from '../../model/data-action' import { PrimeTemplate } from 'primeng/api' +import { BehaviorSubject, Observable, combineLatest, map } from 'rxjs' export type RowListGridData = ListGridData & Row @Component({ @@ -97,7 +98,6 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { return this.stringTableCellTemplate || this.stringTableCellChildTemplate } - // TODO copy for listValue templates @Input() numberTableCellTemplate: TemplateRef | undefined @ContentChild('numberTableCell') numberTableCellChildTemplate: TemplateRef | undefined get _numberTableCell(): TemplateRef | undefined { @@ -207,6 +207,42 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { ) } + @Input() listValueTemplate: TemplateRef | undefined + @ContentChild('listValue') listValueChildTemplate: TemplateRef | undefined + get _listValue(): TemplateRef | undefined { + return this.listValueTemplate || this.listValueChildTemplate + } + @Input() translationKeyListValueTemplate: TemplateRef | undefined + @ContentChild('translationKeyListValue') translationKeyListValueChildTemplate: TemplateRef | undefined + get _translationKeyListValue(): TemplateRef | undefined { + return this.translationKeyListValueTemplate || this.translationKeyListValueChildTemplate + } + @Input() numberListValueTemplate: TemplateRef | undefined + @ContentChild('numberListValue') numberListValueChildTemplate: TemplateRef | undefined + get _numberListValue(): TemplateRef | undefined { + return this.numberListValueTemplate || this.numberListValueChildTemplate + } + @Input() relativeDateListValueTemplate: TemplateRef | undefined + @ContentChild('relativeDateListValue') relativeDateListValueChildTemplate: TemplateRef | undefined + get _relativeDateListValue(): TemplateRef | undefined { + return this.relativeDateListValueTemplate || this.relativeDateListValueChildTemplate + } + @Input() customListValueTemplate: TemplateRef | undefined + @ContentChild('customListValue') customListValueChildTemplate: TemplateRef | undefined + get _customListValue(): TemplateRef | undefined { + return this.customListValueTemplate || this.customListValueChildTemplate + } + @Input() stringListValueTemplate: TemplateRef | undefined + @ContentChild('stringListValue') stringListValueChildTemplate: TemplateRef | undefined + get _stringListValue(): TemplateRef | undefined { + return this.stringListValueTemplate || this.stringListValueChildTemplate + } + @Input() dateListValueTemplate: TemplateRef | undefined + @ContentChild('dateListValue') dateListValueChildTemplate: TemplateRef | undefined + get _dateListValue(): TemplateRef | undefined { + return this.dateListValueTemplate || this.dateListValueChildTemplate + } + @Input() additionalActions: DataAction[] = [] @Output() filtered = new EventEmitter() @@ -221,39 +257,33 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { IsEditItemObserved: boolean | undefined firstColumnId: string | undefined - // _parentTemplates: QueryList | undefined - // set parentTemplates(templates: QueryList | undefined) { - // console.log('data view, parent set templates', templates, !!this.dataTable, !!this.listGrid) - // const ql = new QueryList() - // ql.reset([...(this._templates?.toArray() ?? []), ...(templates?.toArray() ?? [])]) - - // if (this.dataTable) { - // this.dataTable.parentTemplates = ql - // } - // if (this.listGrid) { - // this.listGrid.parentTemplates = ql - // } - // } - - @Input() parentTemplates: QueryList | undefined - getTemplatesForChild(): QueryList | undefined { - const ql = new QueryList() - ql.reset([...(this._templates?.toArray() ?? []), ...(this.parentTemplates?.toArray() ?? [])]) - return ql - } - // get parentTemplates(): QueryList | undefined { - // return this.injector.get('InteractiveDataViewComponent', null)?.templates - // } - - _templates: QueryList | undefined + parentTemplates$: BehaviorSubject | null | undefined> = new BehaviorSubject< + QueryList | null | undefined + >(undefined) + @Input() + set parentTemplates(value: QueryList | null | undefined) { + this.parentTemplates$.next(value) + } + + templates$: BehaviorSubject | undefined> = new BehaviorSubject< + QueryList | undefined + >(undefined) @ContentChildren(PrimeTemplate) set templates(value: QueryList | undefined) { - this._templates = value - } - get templates(): QueryList | undefined { - return this._templates + this.templates$.next(value) } + templatesForChildren$: Observable | undefined> = combineLatest([ + this.templates$, + this.parentTemplates$, + ]).pipe( + map(([t, pt]) => { + const ql = new QueryList() + ql.reset([...(t?.toArray() ?? []), ...(pt?.toArray() ?? [])]) + return ql + }) + ) + get viewItemObserved(): boolean { return this.injector.get('InteractiveDataViewComponent', null)?.viewItem.observed || this.viewItem.observed } @@ -321,6 +351,27 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { case 'relativeDateTableCell': this.relativeDateTableCellChildTemplate = item.template break + case 'listValue': + this.listValueChildTemplate = item.template + break + case 'translationKeyListValue': + this.translationKeyListValueChildTemplate = item.template + break + case 'numberListValue': + this.numberListValueChildTemplate = item.template + break + case 'relativeDateListValue': + this.relativeDateListValueChildTemplate = item.template + break + case 'customListValue': + this.customListValueChildTemplate = item.template + break + case 'stringListValue': + this.stringListValueChildTemplate = item.template + break + case 'dateListValue': + this.dateListValueChildTemplate = item.template + break } }) } diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html index 04289dfd..3b99265a 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html @@ -85,14 +85,21 @@ [translationKeyTableCellTemplate]="_translationKeyTableCell ? translationKeyTableCell : _tableTranslationKeyCell ? tableTranslationKeyCell : undefined" [gridItemSubtitleLinesTemplate]="_gridItemSubtitleLines ? gridItemSubtitleLines : undefined" [listItemSubtitleLinesTemplate]="_listItemSubtitleLines ? listItemSubtitleLines : undefined" - [listItemTemplate]="_listItem? listItem : undefined" - [gridItemTemplate]="_gridItem? gridItem : undefined" + [listItemTemplate]="_listItem ? listItem : undefined" + [listValueTemplate]="_listValue ? listValue : undefined" + [translationKeyListValueTemplate]="_translationKeyListValue ? translationKeyListValue : undefined" + [numberListValueTemplate]="_numberListValue ? numberListValue : undefined" + [relativeDateListValueTemplate]="_relativeDateListValue ? relativeDateListValue : undefined" + [customListValueTemplate]="_customListValue ? customListValue : undefined" + [stringListValueTemplate]="_stringListValue ? stringListValue : undefined" + [dateListValueTemplate]="_dateListValue ? dateListValue : undefined" + [gridItemTemplate]="_gridItem ? gridItem : undefined" (sorted)="sorting($event)" (filtered)="filtering($event)" [totalRecordsOnServer]="totalRecordsOnServer" [currentPageShowingKey]="currentPageShowingKey" [currentPageShowingWithTotalOnServerKey]="currentPageShowingWithTotalOnServerKey" - [parentTemplates]="templates" + [parentTemplates]="templates$ | async" >
diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts index 3e71b70d..cd71ea33 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts @@ -22,6 +22,7 @@ import { } from '../custom-group-column-selector/custom-group-column-selector.component' import { Filter, Row, Sort } from '../data-table/data-table.component' import { DataViewComponent, RowListGridData } from '../data-view/data-view.component' +import { BehaviorSubject } from 'rxjs' @Component({ selector: 'ocx-interactive-data-view', @@ -109,14 +110,20 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { @ContentChild('gridItem') gridItem: TemplateRef | undefined @ContentChild('listItem') listItem: TemplateRef | undefined @ContentChild('topCenter') topCenter: TemplateRef | undefined - _templates: QueryList | undefined + @ContentChild('listValue') listValue: TemplateRef | undefined + @ContentChild('translationKeyListValue') translationKeyListValue: TemplateRef | undefined + @ContentChild('numberListValue') numberListValue: TemplateRef | undefined + @ContentChild('relativeDateListValue') relativeDateListValue: TemplateRef | undefined + @ContentChild('customListValue') customListValue: TemplateRef | undefined + @ContentChild('stringListValue') stringListValue: TemplateRef | undefined + @ContentChild('dateListValue') dateListValue: TemplateRef | undefined + + templates$: BehaviorSubject | undefined> = new BehaviorSubject< + QueryList | undefined + >(undefined) @ContentChildren(PrimeTemplate) set templates(value: QueryList | undefined) { - console.log('Interactive, set templates', value, !!this.dataView) - this._templates = value - } - get templates(): QueryList | undefined { - return this._templates + this.templates$.next(value) } @Output() filtered = new EventEmitter() @@ -186,6 +193,27 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { get _listItem(): TemplateRef | undefined { return this.listItem } + get _listValue(): TemplateRef | undefined { + return this.listValue + } + get _translationKeyListValue(): TemplateRef | undefined { + return this.translationKeyListValue + } + get _numberListValue(): TemplateRef | undefined { + return this.numberListValue + } + get _relativeDateListValue(): TemplateRef | undefined { + return this.relativeDateListValue + } + get _customListValue(): TemplateRef | undefined { + return this.customListValue + } + get _stringListValue(): TemplateRef | undefined { + return this.stringListValue + } + get _dateListValue(): TemplateRef | undefined { + return this.dateListValue + } _data: RowListGridData[] = [] @Input() @@ -259,6 +287,27 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { case 'topCenter': this.topCenter = item.template break + case 'listValue': + this.listValue = item.template + break + case 'translationKeyListValue': + this.translationKeyListValue = item.template + break + case 'numberListValue': + this.numberListValue = item.template + break + case 'relativeDateListValue': + this.relativeDateListValue = item.template + break + case 'customListValue': + this.customListValue = item.template + break + case 'stringListValue': + this.stringListValue = item.template + break + case 'dateListValue': + this.dateListValue = item.template + break } }) } diff --git a/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts b/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts new file mode 100644 index 00000000..21b2f467 --- /dev/null +++ b/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts @@ -0,0 +1,61 @@ +import { + AfterViewInit, + Directive, + ElementRef, + HostListener, + Inject, + Input, + NgZone, + OnDestroy, + PLATFORM_ID, + Renderer2, + TemplateRef, + ViewContainerRef, +} from '@angular/core' +import { PrimeNGConfig } from 'primeng/api' +import { Tooltip } from 'primeng/tooltip' + +@Directive({ selector: '[ocxTooltipOnOverflow]' }) +export class TooltipOnOverflowDirective extends Tooltip implements OnDestroy, AfterViewInit { + resizeObserver = new MutationObserver((entries) => { + this.zone.run(() => { + this.disabled = this.el.nativeElement.scrollWidth <= this.el.nativeElement.offsetWidth + this.setOption({ disabled: this.disabled }) + }, this) + }) + + @Input() + get ocxTooltipOnOverflow(): string | TemplateRef | undefined { + return this.content + } + set ocxTooltipOnOverflow(value: string | TemplateRef | undefined) { + this.content = value + this.setOption({ tooltipLabel: value }) + } + + override ngOnDestroy(): void { + super.ngOnDestroy() + this.resizeObserver.disconnect() + } + + override ngAfterViewInit(): void { + super.ngAfterViewInit() + this.resizeObserver.observe(this.el.nativeElement, { subtree: true, characterData: true, childList: true }) + } + + constructor( + @Inject(PLATFORM_ID) platformId: any, + el: ElementRef, + zone: NgZone, + config: PrimeNGConfig, + renderer: Renderer2, + viewContainer: ViewContainerRef + ) { + super(platformId, el, zone, config, renderer, viewContainer) + renderer.setStyle(this.el.nativeElement, 'text-overflow', 'ellipsis') + renderer.setStyle(this.el.nativeElement, 'overflow', 'hidden') + renderer.setStyle(this.el.nativeElement, 'white-space', 'nowrap') + this.disabled = true + this.setOption({ disabled: this.disabled }) + } +} From f6bdd956f22f789a8b29fe826c3ab8c88c7a2014 Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Tue, 20 Aug 2024 10:54:26 +0200 Subject: [PATCH 06/16] fix: typo in defaultRelativeDateListValue --- .../lib/components/data-list-grid/data-list-grid.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts index 91abc770..9c5d0b2f 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts @@ -570,7 +570,7 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe case ColumnType.RELATIVE_DATE: return ( this._relativeDateListValue ?? - templates.find((template) => template.name === 'defaultRelativeListValue')?.template ?? + templates.find((template) => template.name === 'defaultRelativeDateListValue')?.template ?? null ) case ColumnType.TRANSLATION_KEY: From a160cb889d88bb5af2a7375911a43bee814d7813 Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Tue, 20 Aug 2024 11:02:31 +0200 Subject: [PATCH 07/16] fix: lint issues --- .../data-list-grid.component.ts | 10 +++----- .../data-table/data-table.component.ts | 4 +-- .../data-view/data-view.component.ts | 2 +- .../directives/tooltipOnOverflow.directive.ts | 25 +++++++++---------- package.json | 3 +-- 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts index 9c5d0b2f..af8bfb32 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts @@ -1,6 +1,5 @@ import { AfterContentInit, - AfterViewInit, Component, ContentChild, ContentChildren, @@ -18,19 +17,18 @@ import { } from '@angular/core' import { Router } from '@angular/router' import { TranslateService } from '@ngx-translate/core' +import { AppStateService, UserService } from '@onecx/angular-integration-interface' +import { MfeInfo } from '@onecx/integration-interface' import { MenuItem, PrimeIcons, PrimeTemplate } from 'primeng/api' +import { Menu } from 'primeng/menu' import { BehaviorSubject, Observable, combineLatest, debounceTime, map, mergeMap } from 'rxjs' -import { MfeInfo } from '@onecx/integration-interface' -import { AppStateService } from '@onecx/angular-integration-interface' -import { UserService } from '@onecx/angular-integration-interface' +import { ColumnType } from '../../model/column-type.model' import { DataAction } from '../../model/data-action' import { DataSortDirection } from '../../model/data-sort-direction' import { DataTableColumn } from '../../model/data-table-column.model' import { ObjectUtils } from '../../utils/objectutils' import { DataSortBase } from '../data-sort-base/data-sort-base' import { Filter, Row } from '../data-table/data-table.component' -import { Menu } from 'primeng/menu' -import { ColumnType } from '../../model/column-type.model' export type ListGridData = { id: string | number diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index 47795bc8..0c9a057d 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -16,17 +16,17 @@ import { } from '@angular/core' import { Router } from '@angular/router' import { TranslateService } from '@ngx-translate/core' +import { isValidDate } from '@onecx/accelerator' import { UserService } from '@onecx/angular-integration-interface' import { MenuItem, PrimeTemplate, SelectItem } from 'primeng/api' import { Menu } from 'primeng/menu' -import { BehaviorSubject, Observable, combineLatest, concat, debounceTime, map, mergeMap, of } from 'rxjs' +import { BehaviorSubject, Observable, combineLatest, debounceTime, map, mergeMap, of } from 'rxjs' import { ColumnType } from '../../model/column-type.model' import { DataAction } from '../../model/data-action' import { DataSortDirection } from '../../model/data-sort-direction' import { DataTableColumn } from '../../model/data-table-column.model' import { ObjectUtils } from '../../utils/objectutils' import { DataSortBase } from '../data-sort-base/data-sort-base' -import { isValidDate } from '@onecx/accelerator' type Primitive = number | string | boolean | bigint | Date export type Row = { diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts index 04baf59e..a570fc37 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts @@ -312,7 +312,7 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { case 'stringTableCell': this.stringTableCellChildTemplate = item.template break - case 'tableDateCell': + case 'numberTableCell': this.numberTableCellChildTemplate = item.template break case 'customTableCell': diff --git a/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts b/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts index 21b2f467..9e7f11c2 100644 --- a/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts +++ b/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts @@ -1,23 +1,22 @@ import { - AfterViewInit, - Directive, - ElementRef, - HostListener, - Inject, - Input, - NgZone, - OnDestroy, - PLATFORM_ID, - Renderer2, - TemplateRef, - ViewContainerRef, + AfterViewInit, + Directive, + ElementRef, + Inject, + Input, + NgZone, + OnDestroy, + PLATFORM_ID, + Renderer2, + TemplateRef, + ViewContainerRef, } from '@angular/core' import { PrimeNGConfig } from 'primeng/api' import { Tooltip } from 'primeng/tooltip' @Directive({ selector: '[ocxTooltipOnOverflow]' }) export class TooltipOnOverflowDirective extends Tooltip implements OnDestroy, AfterViewInit { - resizeObserver = new MutationObserver((entries) => { + resizeObserver = new MutationObserver(() => { this.zone.run(() => { this.disabled = this.el.nativeElement.scrollWidth <= this.el.nativeElement.offsetWidth this.setOption({ disabled: this.disabled }) diff --git a/package.json b/package.json index bdeb84bc..2bf62283 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "scripts": { "sass": "npx sass libs/portal-integration-angular/assets/styles.scss libs/portal-integration-angular/assets/output.css", "postinstall": "mkdir -p .nx", - "build": "nx run-many -t build", - "buildCopy": "nx run-many -t build && cp -r ./dist/libs/. ../onecx-tenant-ui/node_modules/@onecx" + "build": "nx run-many -t build" }, "private": true, "dependencies": { From ee091e59e512729faa8e94469c65eea75f543098 Mon Sep 17 00:00:00 2001 From: markuczy Date: Tue, 20 Aug 2024 14:46:45 +0200 Subject: [PATCH 08/16] feat: data-table templates for filter values --- .../data-table/data-table.component.html | 13 +- .../data-table/data-table.component.ts | 137 ++++++++++++++++-- .../data-view/data-view.component.html | 63 ++++++++ .../data-view/data-view.component.ts | 58 ++++++++ .../interactive-data-view.component.html | 7 + .../interactive-data-view.component.ts | 49 +++++++ 6 files changed, 309 insertions(+), 18 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html index b968e27e..793844cb 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.html @@ -167,9 +167,14 @@ >
- - {{ isDate(value.label) ? (value.label | date) : '' }} - {{ value.label }} + @@ -220,7 +225,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts index a570fc37..4b01ac4f 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts @@ -242,6 +242,43 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { get _dateListValue(): TemplateRef | undefined { return this.dateListValueTemplate || this.dateListValueChildTemplate } + @Input() tableFilterCellTemplate: TemplateRef | undefined + @ContentChild('tableFilterCell') tableFilterCellChildTemplate: TemplateRef | undefined + get _tableFilterCell(): TemplateRef | undefined { + return this.tableFilterCellTemplate || this.tableFilterCellChildTemplate + } + @Input() dateTableFilterCellTemplate: TemplateRef | undefined + @ContentChild('dateFilterCell') dateTableFilterCellChildTemplate: TemplateRef | undefined + get _dateTableFilterCell(): TemplateRef | undefined { + return this.dateTableFilterCellTemplate || this.dateTableFilterCellChildTemplate + } + @Input() relativeDateTableFilterCellTemplate: TemplateRef | undefined + @ContentChild('relativeDateTableFilterCell') relativeDateTableFilterCellChildTemplate: TemplateRef | undefined + get _relativeDateTableFilterCell(): TemplateRef | undefined { + return this.relativeDateTableFilterCellTemplate || this.relativeDateTableFilterCellChildTemplate + } + @Input() translationKeyTableFilterCellTemplate: TemplateRef | undefined + @ContentChild('translationKeyTableFilterCell') translationKeyTableFilterCellChildTemplate: + | TemplateRef + | undefined + get _translationKeyTableFilterCell(): TemplateRef | undefined { + return this.translationKeyTableFilterCellTemplate || this.translationKeyTableFilterCellChildTemplate + } + @Input() stringTableFilterCellTemplate: TemplateRef | undefined + @ContentChild('stringTableFilterCell') stringTableFilterCellChildTemplate: TemplateRef | undefined + get _stringTableFilterCell(): TemplateRef | undefined { + return this.stringTableFilterCellTemplate || this.stringTableFilterCellChildTemplate + } + @Input() numberTableFilterCellTemplate: TemplateRef | undefined + @ContentChild('numberTableFilterCell') numberTableFilterCellChildTemplate: TemplateRef | undefined + get _numberTableFilterCell(): TemplateRef | undefined { + return this.numberTableFilterCellTemplate || this.numberTableFilterCellChildTemplate + } + @Input() customTableFilterCellTemplate: TemplateRef | undefined + @ContentChild('customTableFilterCell') customTableFilterCellChildTemplate: TemplateRef | undefined + get _customTableFilterCell(): TemplateRef | undefined { + return this.customTableFilterCellTemplate || this.customTableFilterCellChildTemplate + } @Input() additionalActions: DataAction[] = [] @@ -372,6 +409,27 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { case 'dateListValue': this.dateListValueChildTemplate = item.template break + case 'tableFilterCell': + this.tableFilterCellChildTemplate = item.template + break + case 'dateTableFilterCell': + this.dateTableFilterCellChildTemplate = item.template + break + case 'relativeDateTableFilterCell': + this.relativeDateTableFilterCellChildTemplate = item.template + break + case 'translationKeyTableFilterCell': + this.translationKeyTableFilterCellChildTemplate = item.template + break + case 'stringTableFilterCell': + this.stringTableFilterCellChildTemplate = item.template + break + case 'numberTableFilterCell': + this.numberTableFilterCellChildTemplate = item.template + break + case 'customTableFilterCell': + this.customTableFilterCellChildTemplate = item.template + break } }) } diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html index 3b99265a..1f956983 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html @@ -94,6 +94,13 @@ [stringListValueTemplate]="_stringListValue ? stringListValue : undefined" [dateListValueTemplate]="_dateListValue ? dateListValue : undefined" [gridItemTemplate]="_gridItem ? gridItem : undefined" + [tableFilterCellTemplate]="_tableFilterCell ? tableFilterCell : undefined" + [dateTableFilterCellTemplate]="_dateTableFilterCell ? dateTableCell : undefined" + [customTableFilterCellTemplate]="_customTableFilterCell ? customTableFilterCell : undefined" + [numberTableFilterCellTemplate]="_numberTableFilterCell ? numberTableFilterCell : undefined" + [stringTableFilterCellTemplate]="_stringTableFilterCell ? stringTableFilterCell : undefined" + [relativeDateTableFilterCellTemplate]="_relativeDateTableFilterCell ? relativeDateTableFilterCell : undefined" + [translationKeyTableFilterCellTemplate]="_translationKeyTableFilterCell ? translationKeyTableFilterCell : undefined" (sorted)="sorting($event)" (filtered)="filtering($event)" [totalRecordsOnServer]="totalRecordsOnServer" diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts index cd71ea33..e59ab08e 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts @@ -117,6 +117,13 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { @ContentChild('customListValue') customListValue: TemplateRef | undefined @ContentChild('stringListValue') stringListValue: TemplateRef | undefined @ContentChild('dateListValue') dateListValue: TemplateRef | undefined + @ContentChild('tableFilterCell') tableFilterCell: TemplateRef | undefined + @ContentChild('dateTableFilterCell') dateTableFilterCell: TemplateRef | undefined + @ContentChild('relativeDateTableFilterCell') relativeDateTableFilterCell: TemplateRef | undefined + @ContentChild('translationKeyTableFilterCell') translationKeyTableFilterCell: TemplateRef | undefined + @ContentChild('stringTableFilterCell') stringTableFilterCell: TemplateRef | undefined + @ContentChild('numberTableFilterCell') numberTableFilterCell: TemplateRef | undefined + @ContentChild('customTableFilterCell') customTableFilterCell: TemplateRef | undefined templates$: BehaviorSubject | undefined> = new BehaviorSubject< QueryList | undefined @@ -214,6 +221,27 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { get _dateListValue(): TemplateRef | undefined { return this.dateListValue } + get _tableFilterCell(): TemplateRef | undefined { + return this.tableFilterCell + } + get _dateTableFilterCell(): TemplateRef | undefined { + return this.dateTableFilterCell + } + get _relativeDateTableFilterCell(): TemplateRef | undefined { + return this.relativeDateTableFilterCell + } + get _translationKeyTableFilterCell(): TemplateRef | undefined { + return this.translationKeyTableFilterCell + } + get _stringTableFilterCell(): TemplateRef | undefined { + return this.stringTableFilterCell + } + get _numberTableFilterCell(): TemplateRef | undefined { + return this.numberTableFilterCell + } + get _customTableFilterCell(): TemplateRef | undefined { + return this.customTableFilterCell + } _data: RowListGridData[] = [] @Input() @@ -308,6 +336,27 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { case 'dateListValue': this.dateListValue = item.template break + case 'tableFilterCell': + this.tableFilterCell = item.template + break + case 'dateTableFilterCell': + this.dateTableFilterCell = item.template + break + case 'relativeDateTableFilterCell': + this.relativeDateTableFilterCell = item.template + break + case 'translationKeyTableFilterCell': + this.translationKeyTableFilterCell = item.template + break + case 'stringTableFilterCell': + this.stringTableFilterCell = item.template + break + case 'numberTableFilterCell': + this.numberTableFilterCell = item.template + break + case 'customTableFilterCell': + this.customTableFilterCell = item.template + break } }) } From 646da27eda2e114edd5d681fd12c0ff6d42d7783 Mon Sep 17 00:00:00 2001 From: markuczy Date: Tue, 20 Aug 2024 15:26:29 +0200 Subject: [PATCH 09/16] feat: working filter templates --- .../data-table/data-table.component.ts | 128 ++++++++++-------- 1 file changed, 71 insertions(+), 57 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index 9ec91f1f..cbf8e011 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -43,7 +43,6 @@ export enum TemplateType { interface TemplatesData { templatesObservables: Record | null>> idSuffix: Array - columnTypeTemplates: Record | undefined> } export type Filter = { columnId: string; value: string } @@ -583,27 +582,11 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon cellTemplatesData: TemplatesData = { templatesObservables: {}, idSuffix: ['IdTableCell', 'IdCell'], - columnTypeTemplates: { - [ColumnType.DATE]: this._dateCell, - [ColumnType.NUMBER]: this._numberCell, - [ColumnType.RELATIVE_DATE]: this._relativeDateCell, - [ColumnType.STRING]: this._stringCell, - [ColumnType.TRANSLATION_KEY]: this._translationKeyCell, - [ColumnType.CUSTOM]: this._customCell, - }, } filterTemplatesData: TemplatesData = { templatesObservables: {}, idSuffix: ['IdTableFilterCell', 'IdFilterCell'], - columnTypeTemplates: { - [ColumnType.DATE]: this._dateFilterCell, - [ColumnType.NUMBER]: this._numberFilterCell, - [ColumnType.RELATIVE_DATE]: this._relativeDateFilterCell, - [ColumnType.STRING]: this._stringFilterCell, - [ColumnType.TRANSLATION_KEY]: this._translationKeyFilterCell, - [ColumnType.CUSTOM]: this._customFilterCell, - }, } templatesDataMap: Record = { @@ -611,8 +594,76 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon [TemplateType.FILTERCELL]: this.filterTemplatesData, } - getTemplate(column: DataTableColumn, type: TemplateType): Observable | null> { - const templatesData = this.templatesDataMap[type] + getColumnTypeTemplate( + templates: PrimeTemplate[], + columnType: ColumnType, + templateType: TemplateType + ) { + let template: TemplateRef | undefined + let defaultTemplateName: string + + switch (templateType) { + case TemplateType.CELL: + switch (columnType) { + case ColumnType.DATE: + template = this._dateCell + defaultTemplateName = 'defaultDateCell' + break + case ColumnType.NUMBER: + template = this._numberCell + defaultTemplateName = 'defaultNumberCell' + break + case ColumnType.RELATIVE_DATE: + template = this._relativeDateCell + defaultTemplateName = 'defaultRelativeDateCell' + break + case ColumnType.TRANSLATION_KEY: + template = this._translationKeyCell + defaultTemplateName = 'defaultTranslationKeyCell' + break + case ColumnType.CUSTOM: + template = this._customCell + defaultTemplateName = 'defaultCustomCell' + break + default: + template = this._stringCell + defaultTemplateName = 'defaultStringCell' + } + break + case TemplateType.FILTERCELL: + switch (columnType) { + case ColumnType.DATE: + template = this._dateFilterCell + defaultTemplateName = 'defaultDateCell' + break + case ColumnType.NUMBER: + template = this._numberFilterCell + defaultTemplateName = 'defaultNumberCell' + break + case ColumnType.RELATIVE_DATE: + template = this._relativeDateFilterCell + defaultTemplateName = 'defaultRelativeDateCell' + break + case ColumnType.TRANSLATION_KEY: + template = this._translationKeyFilterCell + defaultTemplateName = 'defaultTranslationKeyCell' + break + case ColumnType.CUSTOM: + template = this._customFilterCell + defaultTemplateName = 'defaultCustomCell' + break + default: + template = this._stringFilterCell + defaultTemplateName = 'defaultStringCell' + } + break + } + + return template ?? templates.find((template) => template.name === defaultTemplateName)?.template ?? null + } + + getTemplate(column: DataTableColumn, templateType: TemplateType): Observable | null> { + const templatesData = this.templatesDataMap[templateType] if (!templatesData.templatesObservables[column.id]) { templatesData.templatesObservables[column.id] = combineLatest([ @@ -628,44 +679,7 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon if (columnTemplate) { return columnTemplate } - switch (column.columnType) { - case ColumnType.DATE: - return ( - templatesData.columnTypeTemplates[ColumnType.DATE] ?? - templates.find((template) => template.name === 'defaultDateCell')?.template ?? - null - ) - case ColumnType.NUMBER: - return ( - templatesData.columnTypeTemplates[ColumnType.NUMBER] ?? - templates.find((template) => template.name === 'defaultNumberCell')?.template ?? - null - ) - case ColumnType.RELATIVE_DATE: - return ( - templatesData.columnTypeTemplates[ColumnType.RELATIVE_DATE] ?? - templates.find((template) => template.name === 'defaultRelativeDateCell')?.template ?? - null - ) - case ColumnType.TRANSLATION_KEY: - return ( - templatesData.columnTypeTemplates[ColumnType.TRANSLATION_KEY] ?? - templates.find((template) => template.name === 'defaultTranslationKeyCell')?.template ?? - null - ) - case ColumnType.CUSTOM: - return ( - templatesData.columnTypeTemplates[ColumnType.CUSTOM] ?? - templates.find((template) => template.name === 'defaultCustomCell')?.template ?? - null - ) - default: - return ( - templatesData.columnTypeTemplates[ColumnType.STRING] ?? - templates.find((template) => template.name === 'defaultStringCell')?.template ?? - null - ) - } + return this.getColumnTypeTemplate(templates, column.columnType, templateType) }), debounceTime(50) ) From 8f086f3255e1106f92b97483d692c2567966f119 Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Tue, 20 Aug 2024 16:07:15 +0200 Subject: [PATCH 10/16] fix: tests fixed --- .../data-list-grid.component.html | 2 +- .../data-list-grid.component.spec.ts | 36 +- .../data-view/data-view.component.spec.ts | 133 ++++---- .../interactive-data-view.component.html | 56 ++++ .../interactive-data-view.component.spec.ts | 317 +++++++++--------- .../directives/tooltipOnOverflow.directive.ts | 6 +- .../testing/data-table.harness.ts | 4 +- .../testing/data-view.harness.ts | 4 +- package-lock.json | 6 +- 9 files changed, 333 insertions(+), 231 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html index 2e88b4c0..ea7d5668 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.html @@ -81,7 +81,7 @@
-
+
{ + const mutationObserverMock = jest.fn(function MutationObserver(callback) { + this.observe = jest.fn() + this.disconnect = jest.fn() + this.trigger = (mockedMutationsList: any) => { + callback(mockedMutationsList, this) + } + return this + }) + global.MutationObserver = mutationObserverMock + let fixture: ComponentFixture let component: DataListGridComponent let translateService: TranslateService @@ -311,7 +321,7 @@ describe('DataListGridComponent', () => { }) }) - const setUpListActionButtonMockData = () => { + const setUpListActionButtonMockData = async () => { component.columns = [ ...mockColumns, { @@ -346,6 +356,9 @@ describe('DataListGridComponent', () => { component.viewPermission = 'VIEW' component.editPermission = 'EDIT' component.deletePermission = 'DELETE' + + fixture.detectChanges() + await fixture.whenStable() } describe('Disable list action buttons based on field path', () => { it('should not disable any list action button by default', async () => { @@ -355,7 +368,7 @@ describe('DataListGridComponent', () => { expect(component.editItemObserved).toBe(false) expect(component.deleteItemObserved).toBe(false) - setUpListActionButtonMockData() + await setUpListActionButtonMockData() expect(component.viewItemObserved).toBe(true) expect(component.editItemObserved).toBe(true) @@ -380,7 +393,7 @@ describe('DataListGridComponent', () => { it('should dynamically enable/disable an action button based on the contents of a specified field', async () => { component.layout = 'list' - setUpListActionButtonMockData() + await setUpListActionButtonMockData() component.viewActionEnabledField = 'ready' let listActions = await listGrid.getActionButtons('list') @@ -418,7 +431,7 @@ describe('DataListGridComponent', () => { expect(component.editItemObserved).toBe(false) expect(component.deleteItemObserved).toBe(false) - setUpListActionButtonMockData() + await setUpListActionButtonMockData() expect(component.viewItemObserved).toBe(true) expect(component.editItemObserved).toBe(true) @@ -442,7 +455,7 @@ describe('DataListGridComponent', () => { it('should dynamically hide/show an action button based on the contents of a specified field', async () => { component.layout = 'list' - setUpListActionButtonMockData() + await setUpListActionButtonMockData() component.viewActionVisibleField = 'ready' let listActions = await listGrid.getActionButtons('list') @@ -464,7 +477,7 @@ describe('DataListGridComponent', () => { expect(listActions.length).toBe(3) }) }) - const setUpGridActionButtonMockData = () => { + const setUpGridActionButtonMockData = async () => { component.columns = [ ...mockColumns, { @@ -489,6 +502,9 @@ describe('DataListGridComponent', () => { component.viewPermission = 'VIEW' component.editPermission = 'EDIT' component.deletePermission = 'DELETE' + + fixture.detectChanges() + await fixture.whenStable() } describe('Disable grid action buttons based on field path', () => { it('should not disable any grid action button by default', async () => { @@ -497,7 +513,7 @@ describe('DataListGridComponent', () => { expect(component.editItemObserved).toBe(false) expect(component.deleteItemObserved).toBe(false) - setUpGridActionButtonMockData() + await setUpGridActionButtonMockData() expect(component.viewItemObserved).toBe(true) expect(component.editItemObserved).toBe(true) @@ -517,7 +533,7 @@ describe('DataListGridComponent', () => { it('should dynamically enable/disable an action button based on the contents of a specified field', async () => { component.layout = 'grid' - setUpGridActionButtonMockData() + await setUpGridActionButtonMockData() component.viewActionEnabledField = 'ready' const gridMenuButton = await listGrid.getMenuButton() @@ -562,7 +578,7 @@ describe('DataListGridComponent', () => { expect(component.editItemObserved).toBe(false) expect(component.deleteItemObserved).toBe(false) - setUpGridActionButtonMockData() + await setUpGridActionButtonMockData() expect(component.viewItemObserved).toBe(true) expect(component.editItemObserved).toBe(true) @@ -578,7 +594,7 @@ describe('DataListGridComponent', () => { it('should dynamically hide/show an action button based on the contents of a specified field', async () => { component.layout = 'grid' - setUpGridActionButtonMockData() + await setUpGridActionButtonMockData() component.viewActionVisibleField = 'ready' const gridMenuButton = await listGrid.getMenuButton() diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.spec.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.spec.ts index d64581a4..0d6fad21 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.spec.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.spec.ts @@ -18,6 +18,16 @@ import { AngularAcceleratorModule } from '../../angular-accelerator.module' import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http' describe('DataViewComponent', () => { + const mutationObserverMock = jest.fn(function MutationObserver(callback) { + this.observe = jest.fn() + this.disconnect = jest.fn() + this.trigger = (mockedMutationsList: any) => { + callback(mockedMutationsList, this) + } + return this + }) + global.MutationObserver = mutationObserverMock + let component: DataViewComponent let fixture: ComponentFixture let dataViewHarness: DataViewHarness @@ -234,23 +244,23 @@ describe('DataViewComponent', () => { }) describe('Table row selection ', () => { - let dataTable: DataTableHarness + let dataTable: DataTableHarness | null beforeEach(async () => { component.layout = 'table' - dataTable = await dataViewHarness.getDataTable() + dataTable = await dataViewHarness?.getDataTable() }) it('should initially show a table without selection checkboxes', async () => { expect(dataTable).toBeTruthy() - expect(await dataTable.rowSelectionIsEnabled()).toEqual(false) + expect(await dataTable?.rowSelectionIsEnabled()).toEqual(false) }) it('should show a table with selection checkboxes if the parent binds to the event emitter', async () => { expect(dataTable).toBeTruthy() - expect(await dataTable.rowSelectionIsEnabled()).toEqual(false) + expect(await dataTable?.rowSelectionIsEnabled()).toEqual(false) component.selectionChanged.subscribe() - expect(await dataTable.rowSelectionIsEnabled()).toEqual(true) + expect(await dataTable?.rowSelectionIsEnabled()).toEqual(true) }) it('should render an unpinnend action column on the right side of the table by default', async () => { @@ -258,15 +268,15 @@ describe('DataViewComponent', () => { expect(component.frozenActionColumn).toBe(false) expect(component.actionColumnPosition).toBe('right') - expect(await dataTable.getActionColumnHeader('left')).toBe(null) - expect(await dataTable.getActionColumn('left')).toBe(null) + expect(await dataTable?.getActionColumnHeader('left')).toBe(null) + expect(await dataTable?.getActionColumn('left')).toBe(null) - const rightActionColumnHeader = await dataTable.getActionColumnHeader('right') - const rightActionColumn = await dataTable.getActionColumn('right') + const rightActionColumnHeader = await dataTable?.getActionColumnHeader('right') + const rightActionColumn = await dataTable?.getActionColumn('right') expect(rightActionColumnHeader).toBeTruthy() expect(rightActionColumn).toBeTruthy() - expect(await dataTable.columnIsFrozen(rightActionColumnHeader)).toBe(false) - expect(await dataTable.columnIsFrozen(rightActionColumn)).toBe(false) + expect(await dataTable?.columnIsFrozen(rightActionColumnHeader)).toBe(false) + expect(await dataTable?.columnIsFrozen(rightActionColumn)).toBe(false) }) it('should render an pinned action column on the specified side of the table', async () => { @@ -275,15 +285,15 @@ describe('DataViewComponent', () => { component.frozenActionColumn = true component.actionColumnPosition = 'left' - expect(await dataTable.getActionColumnHeader('right')).toBe(null) - expect(await dataTable.getActionColumn('right')).toBe(null) + expect(await dataTable?.getActionColumnHeader('right')).toBe(null) + expect(await dataTable?.getActionColumn('right')).toBe(null) - const leftActionColumnHeader = await dataTable.getActionColumnHeader('left') - const leftActionColumn = await dataTable.getActionColumn('left') + const leftActionColumnHeader = await dataTable?.getActionColumnHeader('left') + const leftActionColumn = await dataTable?.getActionColumn('left') expect(leftActionColumnHeader).toBeTruthy() expect(leftActionColumn).toBeTruthy() - expect(await dataTable.columnIsFrozen(leftActionColumnHeader)).toBe(true) - expect(await dataTable.columnIsFrozen(leftActionColumn)).toBe(true) + expect(await dataTable?.columnIsFrozen(leftActionColumnHeader)).toBe(true) + expect(await dataTable?.columnIsFrozen(leftActionColumn)).toBe(true) }) }) @@ -339,7 +349,7 @@ describe('DataViewComponent', () => { }) describe('Dynamically disable/hide based on field path in data view', () => { - const setUpMockData = (viewType: 'grid' | 'list' | 'table') => { + const setUpMockData = async (viewType: 'grid' | 'list' | 'table') => { component.viewItem.subscribe(() => console.log()) component.editItem.subscribe(() => console.log()) component.deleteItem.subscribe(() => console.log()) @@ -369,113 +379,116 @@ describe('DataViewComponent', () => { }, ] component.titleLineId = 'name' + + fixture.detectChanges() + await fixture.whenStable() } describe('Disable list action buttons based on field path', () => { it('should not disable any buttons initially', async () => { - setUpMockData('list') + await setUpMockData('list') const dataView = await dataViewHarness.getDataListGrid() - expect(await dataView.hasAmountOfActionButtons('list', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('list', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) }) it('should disable a button based on a given field path', async () => { - setUpMockData('list') + await setUpMockData('list') component.viewActionEnabledField = 'ready' const dataView = await dataViewHarness.getDataListGrid() - expect(await dataView.hasAmountOfActionButtons('list', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('list', 1)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('list', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('list', 1)).toBe(true) }) }) describe('Disable grid action buttons based on field path', () => { it('should not disable any buttons initially', async () => { - setUpMockData('grid') + await setUpMockData('grid') const dataView = await dataViewHarness.getDataListGrid() - await (await dataView.getMenuButton()).click() - expect(await dataView.hasAmountOfActionButtons('grid', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) + await (await dataView?.getMenuButton())?.click() + expect(await dataView?.hasAmountOfActionButtons('grid', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) }) it('should disable a button based on a given field path', async () => { - setUpMockData('grid') + await setUpMockData('grid') component.viewActionEnabledField = 'ready' const dataView = await dataViewHarness.getDataListGrid() - await (await dataView.getMenuButton()).click() - expect(await dataView.hasAmountOfActionButtons('grid', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('grid', 1)).toBe(true) + await (await dataView?.getMenuButton())?.click() + expect(await dataView?.hasAmountOfActionButtons('grid', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('grid', 1)).toBe(true) }) }) describe('Disable table action buttons based on field path', () => { it('should not disable any buttons initially', async () => { - setUpMockData('table') + await setUpMockData('table') const dataTable = await dataViewHarness.getDataTable() - expect(await dataTable.hasAmountOfActionButtons(3)).toBe(true) - expect(await dataTable.hasAmountOfDisabledActionButtons(0)).toBe(true) + expect(await dataTable?.hasAmountOfActionButtons(3)).toBe(true) + expect(await dataTable?.hasAmountOfDisabledActionButtons(0)).toBe(true) }) it('should disable a button based on a given field path', async () => { - setUpMockData('table') + await setUpMockData('table') component.viewActionEnabledField = 'ready' const dataTable = await dataViewHarness.getDataTable() - expect(await dataTable.hasAmountOfActionButtons(3)).toBe(true) - expect(await dataTable.hasAmountOfDisabledActionButtons(1)).toBe(true) + expect(await dataTable?.hasAmountOfActionButtons(3)).toBe(true) + expect(await dataTable?.hasAmountOfDisabledActionButtons(1)).toBe(true) }) }) describe('Hide list action buttons based on field path', () => { it('should not hide any buttons initially', async () => { - setUpMockData('list') + await setUpMockData('list') const dataView = await dataViewHarness.getDataListGrid() - expect(await dataView.hasAmountOfActionButtons('list', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('list', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) }) it('should hide a button based on a given field path', async () => { - setUpMockData('list') + await setUpMockData('list') component.viewActionVisibleField = 'ready' const dataView = await dataViewHarness.getDataListGrid() - expect(await dataView.hasAmountOfActionButtons('list', 2)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('list', 2)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) }) }) describe('Hide grid action buttons based on field path', () => { it('should not hide any buttons initially', async () => { - setUpMockData('grid') + await setUpMockData('grid') const dataView = await dataViewHarness.getDataListGrid() - await (await dataView.getMenuButton()).click() - expect(await dataView.hasAmountOfActionButtons('grid', 3)).toBe(true) - expect(await dataView.hasAmountOfActionButtons('grid-hidden', 0)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) + await (await dataView?.getMenuButton())?.click() + expect(await dataView?.hasAmountOfActionButtons('grid', 3)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('grid-hidden', 0)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) }) it('should hide a button based on a given field path', async () => { - setUpMockData('grid') + await setUpMockData('grid') component.viewActionVisibleField = 'ready' const dataView = await dataViewHarness.getDataListGrid() - await (await dataView.getMenuButton()).click() - expect(await dataView.hasAmountOfActionButtons('grid', 2)).toBe(true) - expect(await dataView.hasAmountOfActionButtons('grid-hidden', 1)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) + await (await dataView?.getMenuButton())?.click() + expect(await dataView?.hasAmountOfActionButtons('grid', 2)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('grid-hidden', 1)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) }) }) describe('Hide table action buttons based on field path', () => { it('should not hide any buttons initially', async () => { - setUpMockData('table') + await setUpMockData('table') const dataTable = await dataViewHarness.getDataTable() - expect(await dataTable.hasAmountOfActionButtons(3)).toBe(true) - expect(await dataTable.hasAmountOfDisabledActionButtons(0)).toBe(true) + expect(await dataTable?.hasAmountOfActionButtons(3)).toBe(true) + expect(await dataTable?.hasAmountOfDisabledActionButtons(0)).toBe(true) }) it('should hide a button based on a given field path', async () => { - setUpMockData('table') + await setUpMockData('table') component.viewActionVisibleField = 'ready' const dataTable = await dataViewHarness.getDataTable() - expect(await dataTable.hasAmountOfActionButtons(2)).toBe(true) - expect(await dataTable.hasAmountOfDisabledActionButtons(0)).toBe(true) + expect(await dataTable?.hasAmountOfActionButtons(2)).toBe(true) + expect(await dataTable?.hasAmountOfDisabledActionButtons(0)).toBe(true) }) }) }) diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html index 3b99265a..515e13c0 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html @@ -191,3 +191,59 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.spec.ts b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.spec.ts index 98e76788..aec3b3d2 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.spec.ts +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.spec.ts @@ -43,6 +43,16 @@ import { DateUtils } from '../../utils/dateutils' import { provideRouter } from '@angular/router' describe('InteractiveDataViewComponent', () => { + const mutationObserverMock = jest.fn(function MutationObserver(callback) { + this.observe = jest.fn() + this.disconnect = jest.fn() + this.trigger = (mockedMutationsList: any) => { + callback(mockedMutationsList, this) + } + return this + }) + global.MutationObserver = mutationObserverMock + let component: InteractiveDataViewComponent let fixture: ComponentFixture let loader: HarnessLoader @@ -249,6 +259,7 @@ describe('InteractiveDataViewComponent', () => { component.viewItem.subscribe((event) => (viewItemEvent = event)) component.editItem.subscribe((event) => (editItemEvent = event)) component.deleteItem.subscribe((event) => (deleteItemEvent = event)) + component.titleLineId = 'name' component.subtitleLineIds = ['startDate'] component.data = mockData component.columns = mockColumns @@ -312,7 +323,7 @@ describe('InteractiveDataViewComponent', () => { describe('Table view ', () => { let dataLayoutSelection: DataLayoutSelectionHarness let dataView: DataViewHarness - let dataTable: DataTableHarness + let dataTable: DataTableHarness | null let tableHeaders: TableHeaderColumnHarness[] let tableRows: TableRowHarness[] let allFilterOptions: PMultiSelectListItemHarness[] | undefined @@ -320,9 +331,9 @@ describe('InteractiveDataViewComponent', () => { beforeEach(async () => { dataLayoutSelection = await loader.getHarness(DataLayoutSelectionHarness) dataView = await loader.getHarness(DataViewHarness) - dataTable = await dataView.getDataTable() - tableHeaders = await dataTable.getHeaderColumns() - tableRows = await dataTable.getRows() + dataTable = await dataView?.getDataTable() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + tableRows = (await dataTable?.getRows()) ?? [] allFilterOptions = undefined }) @@ -365,7 +376,7 @@ describe('InteractiveDataViewComponent', () => { const sortButton = await tableHeaders[0].getSortButton() await sortButton.click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsDataAfterSorting) @@ -382,7 +393,7 @@ describe('InteractiveDataViewComponent', () => { const sortButton = await tableHeaders[2].getSortButton() await sortButton.click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsDataAfterSorting) @@ -400,7 +411,7 @@ describe('InteractiveDataViewComponent', () => { await sortButton.click() await sortButton.click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsDataAfterSorting) @@ -418,7 +429,7 @@ describe('InteractiveDataViewComponent', () => { await sortButton.click() await sortButton.click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsDataAfterSorting) @@ -453,7 +464,7 @@ describe('InteractiveDataViewComponent', () => { allFilterOptions = await filterMultiSelect.getAllOptions() await allFilterOptions[1].click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsDataAfterFilter) @@ -475,7 +486,7 @@ describe('InteractiveDataViewComponent', () => { expect(await filterMultiSelect.getSelectedOptions()).toEqual(expectedSelectedOptions) - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsDataAfterFilter) @@ -497,7 +508,7 @@ describe('InteractiveDataViewComponent', () => { expect(await filterMultiSelect.getSelectedOptions()).toEqual(expectedSelectedOption) - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsDataAfterFilter) @@ -611,8 +622,8 @@ describe('InteractiveDataViewComponent', () => { const dropdownItems = await columnGroupSelectionDropdown.getDropdownItems() await dropdownItems[1].selectItem() - tableHeaders = await dataTable.getHeaderColumns() - tableRows = await dataTable.getRows() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + tableRows = (await dataTable?.getRows()) ?? [] const headers = await parallel(() => tableHeaders.map((header) => header.getText())) const rows = await parallel(() => tableRows.map((row) => row.getData())) @@ -676,11 +687,11 @@ describe('InteractiveDataViewComponent', () => { const dropdownItems = await columnGroupSelectionDropdown.getDropdownItems() await dropdownItems[1].selectItem() - tableHeaders = await dataTable.getHeaderColumns() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] const sortButton = await tableHeaders[6].getSortButton() await sortButton.click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsData) @@ -742,12 +753,12 @@ describe('InteractiveDataViewComponent', () => { const dropdownItems = await columnGroupSelectionDropdown.getDropdownItems() await dropdownItems[1].selectItem() - tableHeaders = await dataTable.getHeaderColumns() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] const sortButton = await tableHeaders[6].getSortButton() await sortButton.click() await sortButton.click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsData) @@ -809,13 +820,13 @@ describe('InteractiveDataViewComponent', () => { const dropdownItems = await columnGroupSelectionDropdown.getDropdownItems() await dropdownItems[1].selectItem() - tableHeaders = await dataTable.getHeaderColumns() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] const sortButton = await tableHeaders[6].getSortButton() await sortButton.click() await sortButton.click() await sortButton.click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedRowsData) @@ -826,15 +837,15 @@ describe('InteractiveDataViewComponent', () => { expect(component.frozenActionColumn).toBe(false) expect(component.actionColumnPosition).toBe('right') - expect(await dataTable.getActionColumnHeader('left')).toBe(null) - expect(await dataTable.getActionColumn('left')).toBe(null) + expect(await dataTable?.getActionColumnHeader('left')).toBe(null) + expect(await dataTable?.getActionColumn('left')).toBe(null) - const rightActionColumnHeader = await dataTable.getActionColumnHeader('right') - const rightActionColumn = await dataTable.getActionColumn('right') + const rightActionColumnHeader = await dataTable?.getActionColumnHeader('right') + const rightActionColumn = await dataTable?.getActionColumn('right') expect(rightActionColumnHeader).toBeTruthy() expect(rightActionColumn).toBeTruthy() - expect(await dataTable.columnIsFrozen(rightActionColumnHeader)).toBe(false) - expect(await dataTable.columnIsFrozen(rightActionColumn)).toBe(false) + expect(await dataTable?.columnIsFrozen(rightActionColumnHeader)).toBe(false) + expect(await dataTable?.columnIsFrozen(rightActionColumn)).toBe(false) }) it('should render an pinned action column on the specified side of the table', async () => { @@ -843,50 +854,50 @@ describe('InteractiveDataViewComponent', () => { component.frozenActionColumn = true component.actionColumnPosition = 'left' - expect(await dataTable.getActionColumnHeader('right')).toBe(null) - expect(await dataTable.getActionColumn('right')).toBe(null) + expect(await dataTable?.getActionColumnHeader('right')).toBe(null) + expect(await dataTable?.getActionColumn('right')).toBe(null) - const leftActionColumnHeader = await dataTable.getActionColumnHeader('left') - const leftActionColumn = await dataTable.getActionColumn('left') + const leftActionColumnHeader = await dataTable?.getActionColumnHeader('left') + const leftActionColumn = await dataTable?.getActionColumn('left') expect(leftActionColumnHeader).toBeTruthy() expect(leftActionColumn).toBeTruthy() - expect(await dataTable.columnIsFrozen(leftActionColumnHeader)).toBe(true) - expect(await dataTable.columnIsFrozen(leftActionColumn)).toBe(true) + expect(await dataTable?.columnIsFrozen(leftActionColumnHeader)).toBe(true) + expect(await dataTable?.columnIsFrozen(leftActionColumn)).toBe(true) }) }) describe('Table row selection ', () => { let dataLayoutSelection: DataLayoutSelectionHarness let dataView: DataViewHarness - let dataTable: DataTableHarness + let dataTable: DataTableHarness | null beforeEach(async () => { dataLayoutSelection = await loader.getHarness(DataLayoutSelectionHarness) dataView = await interactiveDataViewHarness.getDataView() - dataTable = await dataView.getDataTable() + dataTable = await dataView?.getDataTable() }) it('should initially show a table without selection checkboxes', async () => { expect(dataTable).toBeTruthy() expect(await dataLayoutSelection.getCurrentLayout()).toEqual('table') - expect(await dataTable.rowSelectionIsEnabled()).toEqual(false) + expect(await dataTable?.rowSelectionIsEnabled()).toEqual(false) }) it('should show a table with selection checkboxes if the parent binds to the event emitter', async () => { expect(dataTable).toBeTruthy() expect(await dataLayoutSelection.getCurrentLayout()).toEqual('table') - expect(await dataTable.rowSelectionIsEnabled()).toEqual(false) + expect(await dataTable?.rowSelectionIsEnabled()).toEqual(false) component.selectionChanged.subscribe() - expect(await dataTable.rowSelectionIsEnabled()).toEqual(true) + expect(await dataTable?.rowSelectionIsEnabled()).toEqual(true) component.selectionChanged.unsubscribe() }) }) describe('Table view custom group column selector ', () => { let dataView: DataViewHarness - let dataTable: DataTableHarness + let dataTable: DataTableHarness | null let tableHeaders: TableHeaderColumnHarness[] let tableRows: TableRowHarness[] @@ -902,9 +913,9 @@ describe('InteractiveDataViewComponent', () => { beforeEach(async () => { dataView = await loader.getHarness(DataViewHarness) - dataTable = await dataView.getDataTable() - tableHeaders = await dataTable.getHeaderColumns() - tableRows = await dataTable.getRows() + dataTable = await dataView?.getDataTable() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + tableRows = (await dataTable?.getRows()) ?? [] customGroupColumnSelector = await loader.getHarness(CustomGroupColumnSelectorHarness) await customGroupColumnSelector.openCustomGroupColumnSelectorDialog() @@ -940,8 +951,8 @@ describe('InteractiveDataViewComponent', () => { await dialogSaveButton.click() expect(spy).toHaveBeenCalled() dataTable = await dataView.getDataTable() - tableHeaders = await dataTable.getHeaderColumns() - tableRows = await dataTable.getRows() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + tableRows = (await dataTable?.getRows()) ?? [] const headers = await parallel(() => tableHeaders.map((header) => header.getText())) const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(headers).toEqual(expectedHeaders) @@ -972,8 +983,8 @@ describe('InteractiveDataViewComponent', () => { expect(spy).toHaveBeenCalled() dataTable = await dataView.getDataTable() - tableHeaders = await dataTable.getHeaderColumns() - tableRows = await dataTable.getRows() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + tableRows = (await dataTable?.getRows()) ?? [] const headers = await parallel(() => tableHeaders.map((header) => header.getText())) const rows = await parallel(() => tableRows.map((row) => row.getData())) @@ -1004,8 +1015,8 @@ describe('InteractiveDataViewComponent', () => { expect(spy).toHaveBeenCalled() dataTable = await dataView.getDataTable() - tableHeaders = await dataTable.getHeaderColumns() - tableRows = await dataTable.getRows() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + tableRows = (await dataTable?.getRows()) ?? [] const headers = await parallel(() => tableHeaders.map((header) => header.getText())) const rows = await parallel(() => tableRows.map((row) => row.getData())) @@ -1037,8 +1048,8 @@ describe('InteractiveDataViewComponent', () => { expect(spy).toHaveBeenCalled() dataTable = await dataView.getDataTable() - tableHeaders = await dataTable.getHeaderColumns() - tableRows = await dataTable.getRows() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + tableRows = (await dataTable?.getRows()) ?? [] const headers = await parallel(() => tableHeaders.map((header) => header.getText())) const rows = await parallel(() => tableRows.map((row) => row.getData())) @@ -1057,15 +1068,15 @@ describe('InteractiveDataViewComponent', () => { expect(component.actionColumnPosition).toBe('left') - expect(await dataTable.getActionColumnHeader('right')).toBe(null) - expect(await dataTable.getActionColumn('right')).toBe(null) + expect(await dataTable?.getActionColumnHeader('right')).toBe(null) + expect(await dataTable?.getActionColumn('right')).toBe(null) - const leftActionColumnHeader = await dataTable.getActionColumnHeader('left') - const leftActionColumn = await dataTable.getActionColumn('left') + const leftActionColumnHeader = await dataTable?.getActionColumnHeader('left') + const leftActionColumn = await dataTable?.getActionColumn('left') expect(leftActionColumnHeader).toBeTruthy() expect(leftActionColumn).toBeTruthy() - expect(await dataTable.columnIsFrozen(leftActionColumnHeader)).toBe(false) - expect(await dataTable.columnIsFrozen(leftActionColumn)).toBe(false) + expect(await dataTable?.columnIsFrozen(leftActionColumnHeader)).toBe(false) + expect(await dataTable?.columnIsFrozen(leftActionColumn)).toBe(false) }) it('should allow users to freeze action column', async () => { @@ -1079,22 +1090,22 @@ describe('InteractiveDataViewComponent', () => { expect(component.frozenActionColumn).toBe(true) - expect(await dataTable.getActionColumnHeader('left')).toBe(null) - expect(await dataTable.getActionColumn('left')).toBe(null) + expect(await dataTable?.getActionColumnHeader('left')).toBe(null) + expect(await dataTable?.getActionColumn('left')).toBe(null) - const rightActionColumnHeader = await dataTable.getActionColumnHeader('right') - const rightActionColumn = await dataTable.getActionColumn('right') + const rightActionColumnHeader = await dataTable?.getActionColumnHeader('right') + const rightActionColumn = await dataTable?.getActionColumn('right') expect(rightActionColumnHeader).toBeTruthy() expect(rightActionColumn).toBeTruthy() - expect(await dataTable.columnIsFrozen(rightActionColumnHeader)).toBe(true) - expect(await dataTable.columnIsFrozen(rightActionColumn)).toBe(true) + expect(await dataTable?.columnIsFrozen(rightActionColumnHeader)).toBe(true) + expect(await dataTable?.columnIsFrozen(rightActionColumn)).toBe(true) }) }) describe('Grid view ', () => { let dataLayoutSelection: DataLayoutSelectionHarness let dataView: DataViewHarness - let dataGrid: DataListGridHarness + let dataGrid: DataListGridHarness | null let gridItems: DefaultGridItemHarness[] let sortingDropdown: PDropdownHarness @@ -1103,12 +1114,12 @@ describe('InteractiveDataViewComponent', () => { beforeEach(async () => { dataLayoutSelection = await loader.getHarness(DataLayoutSelectionHarness) - + const gridLayoutSelectionButton = await dataLayoutSelection.getGridLayoutSelectionButton() await gridLayoutSelectionButton?.click() dataView = await loader.getHarness(DataViewHarness) - dataGrid = await dataView.getDataListGrid() + dataGrid = await dataView?.getDataListGrid() sortingDropdown = await loader.getHarness(PDropdownHarness.with({ id: 'dataListGridSortingDropdown' })) sortingDropdownItems = await sortingDropdown.getDropdownItems() dataListGridSortingButton = await loader.getHarness(PButtonHarness.with({ id: 'dataListGridSortingButton' })) @@ -1127,7 +1138,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get grid data', async () => { - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemsData = await parallel(() => gridItems.map((item) => item.getData())) expect(gridItemsData).toEqual(expectedInitialGridItemsData) @@ -1145,7 +1156,7 @@ describe('InteractiveDataViewComponent', () => { await sortingDropdownItems[0].selectItem() await dataListGridSortingButton.click() - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemsData = await parallel(() => gridItems.map((item) => item.getData())) expect(gridItemsData).toEqual(expectedGridItemsDataAfterSorting) @@ -1164,7 +1175,7 @@ describe('InteractiveDataViewComponent', () => { await dataListGridSortingButton.click() await dataListGridSortingButton.click() - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemsData = await parallel(() => gridItems.map((item) => item.getData())) expect(gridItemsData).toEqual(expectedGridItemsDataAfterSorting) @@ -1176,14 +1187,14 @@ describe('InteractiveDataViewComponent', () => { await dataListGridSortingButton.click() await dataListGridSortingButton.click() - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemsData = await parallel(() => gridItems.map((item) => item.getData())) expect(gridItemsData).toEqual(expectedInitialGridItemsData) }) it('should get view actions menu button of first grid item and get event viewItem with first data grid item when clicked', async () => { - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemMoreActionsMenu = await gridItems[0].getMoreActionsButton() const moreActionsMenuItems = await gridItemMoreActionsMenu.getAllActionsMenuItems() await moreActionsMenuItems[0].selectItem() @@ -1192,7 +1203,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get view actions menu button of third grid item and get event viewItem with third data grid item when clicked', async () => { - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemMoreActionsMenu = await gridItems[2].getMoreActionsButton() const moreActionsMenuItems = await gridItemMoreActionsMenu.getAllActionsMenuItems() await moreActionsMenuItems[0].selectItem() @@ -1201,7 +1212,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get edit actions menu button first grid item and get event editItem with first data grid item when clicked', async () => { - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemMoreActionsMenu = await gridItems[0].getMoreActionsButton() const moreActionsMenuItems = await gridItemMoreActionsMenu.getAllActionsMenuItems() await moreActionsMenuItems[1].selectItem() @@ -1210,7 +1221,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get edit actions menu button third grid item and get event editItem with third data grid item when clicked', async () => { - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemMoreActionsMenu = await gridItems[2].getMoreActionsButton() const moreActionsMenuItems = await gridItemMoreActionsMenu.getAllActionsMenuItems() await moreActionsMenuItems[1].selectItem() @@ -1219,7 +1230,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get delete actions menu button first grid item and get event deleteItem with first data grid item when clicked', async () => { - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemMoreActionsMenu = await gridItems[0].getMoreActionsButton() const moreActionsMenuItems = await gridItemMoreActionsMenu.getAllActionsMenuItems() await moreActionsMenuItems[2].selectItem() @@ -1228,7 +1239,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get delete actions menu button third grid item and get event deleteItem with third data grid item when clicked', async () => { - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemMoreActionsMenu = await gridItems[2].getMoreActionsButton() const moreActionsMenuItems = await gridItemMoreActionsMenu.getAllActionsMenuItems() await moreActionsMenuItems[2].selectItem() @@ -1240,7 +1251,7 @@ describe('InteractiveDataViewComponent', () => { describe('List view ', () => { let dataLayoutSelection: DataLayoutSelectionHarness let dataView: DataViewHarness - let dataList: DataListGridHarness + let dataList: DataListGridHarness | null let listItems: DefaultListItemHarness[] let sortingDropdown: PDropdownHarness @@ -1252,8 +1263,11 @@ describe('InteractiveDataViewComponent', () => { const listLayoutSelectionButton = await dataLayoutSelection.getListLayoutSelectionButton() await listLayoutSelectionButton?.click() + fixture.detectChanges() + await fixture.whenStable() + dataView = await loader.getHarness(DataViewHarness) - dataList = await dataView.getDataListGrid() + dataList = await dataView?.getDataListGrid() sortingDropdown = await loader.getHarness(PDropdownHarness.with({ id: 'dataListGridSortingDropdown' })) sortingDropdownItems = await sortingDropdown.getDropdownItems() dataListGridSortingButton = await loader.getHarness(PButtonHarness.with({ id: 'dataListGridSortingButton' })) @@ -1272,7 +1286,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get list data', async () => { - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const listItemsData = await parallel(() => listItems.map((item) => item.getData())) expect(listItemsData).toEqual(expectedInitialListItemsData) @@ -1290,7 +1304,7 @@ describe('InteractiveDataViewComponent', () => { await sortingDropdownItems[0].selectItem() await dataListGridSortingButton.click() - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const listItemsData = await parallel(() => listItems.map((item) => item.getData())) expect(listItemsData).toEqual(expectedListItemsDataAfterSorting) @@ -1309,7 +1323,7 @@ describe('InteractiveDataViewComponent', () => { await dataListGridSortingButton.click() await dataListGridSortingButton.click() - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const listItemsData = await parallel(() => listItems.map((item) => item.getData())) expect(listItemsData).toEqual(expectedListItemsDataAfterSorting) @@ -1321,14 +1335,14 @@ describe('InteractiveDataViewComponent', () => { await dataListGridSortingButton.click() await dataListGridSortingButton.click() - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const listItemsData = await parallel(() => listItems.map((item) => item.getData())) expect(listItemsData).toEqual(expectedInitialListItemsData) }) it('should get list item view button of first list item and get event viewItem with first data list item when clicked', async () => { - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const viewButton = await listItems[0].getViewButton() await viewButton?.click() @@ -1336,7 +1350,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get list item view button of third list item and get event viewItem with third data list item when clicked', async () => { - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const viewButton = await listItems[2].getViewButton() await viewButton?.click() @@ -1344,7 +1358,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get list item view button of first list item and get event editItem with first data list item when clicked', async () => { - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const editButton = await listItems[0].getEditButton() await editButton?.click() @@ -1352,7 +1366,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get list item view button of third list item and get event editItem with third data list item when clicked', async () => { - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const editButton = await listItems[2].getEditButton() await editButton?.click() @@ -1360,7 +1374,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get list item view button of first list item and get event deleteItem with first data list item when clicked', async () => { - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const deleteButton = await listItems[0].getDeleteButton() await deleteButton?.click() @@ -1368,7 +1382,7 @@ describe('InteractiveDataViewComponent', () => { }) it('should get list item view button of third list item and get event deleteItem with third data list item when clicked', async () => { - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const deleteButton = await listItems[2].getDeleteButton() await deleteButton?.click() @@ -1380,16 +1394,16 @@ describe('InteractiveDataViewComponent', () => { let dataLayoutSelection: DataLayoutSelectionHarness let dataView: DataViewHarness - let dataTable: DataTableHarness + let dataTable: DataTableHarness | null let tableHeaders: TableHeaderColumnHarness[] let tableRows: TableRowHarness[] let allFilterOptions: PMultiSelectListItemHarness[] | undefined - let dataList: DataListGridHarness + let dataList: DataListGridHarness | null let listItems: DefaultListItemHarness[] let listLayoutSelectionButton: TestElement | null - let dataGrid: DataListGridHarness + let dataGrid: DataListGridHarness | null let gridItems: DefaultGridItemHarness[] let gridLayoutSelectionButton: TestElement | null @@ -1402,8 +1416,8 @@ describe('InteractiveDataViewComponent', () => { dataView = await loader.getHarness(DataViewHarness) dataTable = await dataView.getDataTable() - tableHeaders = await dataTable.getHeaderColumns() - tableRows = await dataTable.getRows() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + tableRows = (await dataTable?.getRows()) ?? [] allFilterOptions = undefined }) @@ -1444,14 +1458,14 @@ describe('InteractiveDataViewComponent', () => { const dropdownItems = await columnGroupSelectionDropdown.getDropdownItems() await dropdownItems[1].selectItem() - tableHeaders = await dataTable.getHeaderColumns() - const sortButton = await tableHeaders[6].getSortButton() - await sortButton.click() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + const sortButton = await tableHeaders?.[6].getSortButton() + await sortButton?.click() await gridLayoutSelectionButton?.click() dataGrid = await dataView.getDataListGrid() - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemsData = await parallel(() => gridItems.map((item) => item.getData())) expect(gridItemsData).toEqual(expectedSortedGridItemsDataAscending) @@ -1459,7 +1473,7 @@ describe('InteractiveDataViewComponent', () => { await listLayoutSelectionButton?.click() dataList = await dataView.getDataListGrid() - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const listItemsData = await parallel(() => listItems.map((item) => item.getData())) expect(listItemsData).toEqual(expectedSortedListItemsDataAscending) @@ -1473,14 +1487,14 @@ describe('InteractiveDataViewComponent', () => { const dropdownItems = await columnGroupSelectionDropdown.getDropdownItems() await dropdownItems[1].selectItem() - tableHeaders = await dataTable.getHeaderColumns() - const sortButton = await tableHeaders[6].getSortButton() - await sortButton.click() + tableHeaders = (await dataTable?.getHeaderColumns()) ?? [] + const sortButton = await tableHeaders?.[6].getSortButton() + await sortButton?.click() await listLayoutSelectionButton?.click() dataList = await dataView.getDataListGrid() - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] let listItemsData = await parallel(() => listItems.map((item) => item.getData())) expect(listItemsData).toEqual(expectedSortedListItemsDataAscending) @@ -1493,7 +1507,7 @@ describe('InteractiveDataViewComponent', () => { expect(await (await sortingDropdown.host()).text()).toEqual('COLUMN_HEADER_NAME.TEST_NUMBER') await dataListGridSortingButton.click() - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] listItemsData = await parallel(() => listItems.map((item) => item.getData())) expect(listItemsData).toEqual(expectedSortedListItemsDataDescending) @@ -1501,7 +1515,7 @@ describe('InteractiveDataViewComponent', () => { await gridLayoutSelectionButton?.click() dataGrid = await dataView.getDataListGrid() - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemsData = await parallel(() => gridItems.map((item) => item.getData())) expect(gridItemsData).toEqual(expectedSortedGridItemsDataDescending) @@ -1513,12 +1527,12 @@ describe('InteractiveDataViewComponent', () => { const expectedFilteredGridItemsData = [ ['./onecx-portal-lib/assets/images/placeholder.png', 'name 1', '2023-09-14T09:34:22Z', '123456789'], ] - const filterMultiSelect = await tableHeaders[0].getFilterMultiSelect() + const filterMultiSelect = await tableHeaders?.[0].getFilterMultiSelect() - allFilterOptions = await filterMultiSelect.getAllOptions() - await allFilterOptions[2].click() + allFilterOptions = await filterMultiSelect?.getAllOptions() + await allFilterOptions?.[2].click() - tableRows = await dataTable.getRows() + tableRows = (await dataTable?.getRows()) ?? [] const rows = await parallel(() => tableRows.map((row) => row.getData())) expect(rows).toEqual(expectedFilteredRowsData) @@ -1526,7 +1540,7 @@ describe('InteractiveDataViewComponent', () => { await gridLayoutSelectionButton?.click() dataGrid = await dataView.getDataListGrid() - gridItems = await dataGrid.getDefaultGridItems() + gridItems = (await dataGrid?.getDefaultGridItems()) ?? [] const gridItemsData = await parallel(() => gridItems.map((item) => item.getData())) expect(gridItemsData).toEqual(expectedFilteredGridItemsData) @@ -1534,14 +1548,14 @@ describe('InteractiveDataViewComponent', () => { await listLayoutSelectionButton?.click() dataList = await dataView.getDataListGrid() - listItems = await dataList.getDefaultListItems() + listItems = (await dataList?.getDefaultListItems()) ?? [] const listItemsData = await parallel(() => listItems.map((item) => item.getData())) expect(listItemsData).toEqual(expectedFilteredListItemsData) }) }) describe('Dynamically disable/hide based on field path in interactive data view', () => { - const setUpMockData = (viewType: 'grid' | 'list' | 'table') => { + const setUpMockData = async (viewType: 'grid' | 'list' | 'table') => { component.viewItem.subscribe(() => console.log()) component.editItem.subscribe(() => console.log()) component.deleteItem.subscribe(() => console.log()) @@ -1571,113 +1585,116 @@ describe('InteractiveDataViewComponent', () => { }, ] component.titleLineId = 'name' + + fixture.detectChanges() + await fixture.whenStable() } describe('Disable list action buttons based on field path', () => { it('should not disable any buttons initially', async () => { - setUpMockData('list') + await setUpMockData('list') const dataView = await (await interactiveDataViewHarness.getDataView()).getDataListGrid() - expect(await dataView.hasAmountOfActionButtons('list', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('list', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) }) it('should disable a button based on a given field path', async () => { - setUpMockData('list') + await setUpMockData('list') component.viewActionEnabledField = 'ready' const dataView = await (await interactiveDataViewHarness.getDataView()).getDataListGrid() - expect(await dataView.hasAmountOfActionButtons('list', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('list', 1)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('list', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('list', 1)).toBe(true) }) }) describe('Disable grid action buttons based on field path', () => { it('should not disable any buttons initially', async () => { - setUpMockData('grid') + await setUpMockData('grid') const dataView = await (await interactiveDataViewHarness.getDataView()).getDataListGrid() - await (await dataView.getMenuButton()).click() - expect(await dataView.hasAmountOfActionButtons('grid', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) + await (await dataView?.getMenuButton())?.click() + expect(await dataView?.hasAmountOfActionButtons('grid', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) }) it('should disable a button based on a given field path', async () => { - setUpMockData('grid') + await setUpMockData('grid') component.viewActionEnabledField = 'ready' const dataView = await (await interactiveDataViewHarness.getDataView()).getDataListGrid() - await (await dataView.getMenuButton()).click() - expect(await dataView.hasAmountOfActionButtons('grid', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('grid', 1)).toBe(true) + await (await dataView?.getMenuButton())?.click() + expect(await dataView?.hasAmountOfActionButtons('grid', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('grid', 1)).toBe(true) }) }) describe('Disable table action buttons based on field path', () => { it('should not disable any buttons initially', async () => { - setUpMockData('table') + await setUpMockData('table') const dataTable = await (await interactiveDataViewHarness.getDataView()).getDataTable() - expect(await dataTable.hasAmountOfActionButtons(3)).toBe(true) - expect(await dataTable.hasAmountOfDisabledActionButtons(0)).toBe(true) + expect(await dataTable?.hasAmountOfActionButtons(3)).toBe(true) + expect(await dataTable?.hasAmountOfDisabledActionButtons(0)).toBe(true) }) it('should disable a button based on a given field path', async () => { - setUpMockData('table') + await setUpMockData('table') component.viewActionEnabledField = 'ready' const dataTable = await (await interactiveDataViewHarness.getDataView()).getDataTable() - expect(await dataTable.hasAmountOfActionButtons(3)).toBe(true) - expect(await dataTable.hasAmountOfDisabledActionButtons(1)).toBe(true) + expect(await dataTable?.hasAmountOfActionButtons(3)).toBe(true) + expect(await dataTable?.hasAmountOfDisabledActionButtons(1)).toBe(true) }) }) describe('Hide list action buttons based on field path', () => { it('should not hide any buttons initially', async () => { - setUpMockData('list') + await setUpMockData('list') const dataView = await (await interactiveDataViewHarness.getDataView()).getDataListGrid() - expect(await dataView.hasAmountOfActionButtons('list', 3)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('list', 3)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) }) it('should hide a button based on a given field path', async () => { - setUpMockData('list') + await setUpMockData('list') component.viewActionVisibleField = 'ready' const dataView = await (await interactiveDataViewHarness.getDataView()).getDataListGrid() - expect(await dataView.hasAmountOfActionButtons('list', 2)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('list', 2)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('list', 0)).toBe(true) }) }) describe('Hide grid action buttons based on field path', () => { it('should not hide any buttons initially', async () => { - setUpMockData('grid') + await setUpMockData('grid') const dataView = await (await interactiveDataViewHarness.getDataView()).getDataListGrid() - await (await dataView.getMenuButton()).click() - expect(await dataView.hasAmountOfActionButtons('grid', 3)).toBe(true) - expect(await dataView.hasAmountOfActionButtons('grid-hidden', 0)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) + await (await dataView?.getMenuButton())?.click() + expect(await dataView?.hasAmountOfActionButtons('grid', 3)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('grid-hidden', 0)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) }) it('should hide a button based on a given field path', async () => { - setUpMockData('grid') + await setUpMockData('grid') component.viewActionVisibleField = 'ready' const dataView = await (await interactiveDataViewHarness.getDataView()).getDataListGrid() - await (await dataView.getMenuButton()).click() - expect(await dataView.hasAmountOfActionButtons('grid', 2)).toBe(true) - expect(await dataView.hasAmountOfActionButtons('grid-hidden', 1)).toBe(true) - expect(await dataView.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) + await (await dataView?.getMenuButton())?.click() + expect(await dataView?.hasAmountOfActionButtons('grid', 2)).toBe(true) + expect(await dataView?.hasAmountOfActionButtons('grid-hidden', 1)).toBe(true) + expect(await dataView?.hasAmountOfDisabledActionButtons('grid', 0)).toBe(true) }) }) describe('Hide table action buttons based on field path', () => { it('should not hide any buttons initially', async () => { - setUpMockData('table') + await setUpMockData('table') const dataTable = await (await interactiveDataViewHarness.getDataView()).getDataTable() - expect(await dataTable.hasAmountOfActionButtons(3)).toBe(true) - expect(await dataTable.hasAmountOfDisabledActionButtons(0)).toBe(true) + expect(await dataTable?.hasAmountOfActionButtons(3)).toBe(true) + expect(await dataTable?.hasAmountOfDisabledActionButtons(0)).toBe(true) }) it('should hide a button based on a given field path', async () => { - setUpMockData('table') + await setUpMockData('table') component.viewActionVisibleField = 'ready' const dataTable = await (await interactiveDataViewHarness.getDataView()).getDataTable() - expect(await dataTable.hasAmountOfActionButtons(2)).toBe(true) - expect(await dataTable.hasAmountOfDisabledActionButtons(0)).toBe(true) + expect(await dataTable?.hasAmountOfActionButtons(2)).toBe(true) + expect(await dataTable?.hasAmountOfDisabledActionButtons(0)).toBe(true) }) }) }) diff --git a/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts b/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts index 9e7f11c2..1debf94e 100644 --- a/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts +++ b/libs/angular-accelerator/src/lib/directives/tooltipOnOverflow.directive.ts @@ -16,7 +16,7 @@ import { Tooltip } from 'primeng/tooltip' @Directive({ selector: '[ocxTooltipOnOverflow]' }) export class TooltipOnOverflowDirective extends Tooltip implements OnDestroy, AfterViewInit { - resizeObserver = new MutationObserver(() => { + mutationObserver = new MutationObserver(() => { this.zone.run(() => { this.disabled = this.el.nativeElement.scrollWidth <= this.el.nativeElement.offsetWidth this.setOption({ disabled: this.disabled }) @@ -34,12 +34,12 @@ export class TooltipOnOverflowDirective extends Tooltip implements OnDestroy, Af override ngOnDestroy(): void { super.ngOnDestroy() - this.resizeObserver.disconnect() + this.mutationObserver.disconnect() } override ngAfterViewInit(): void { super.ngAfterViewInit() - this.resizeObserver.observe(this.el.nativeElement, { subtree: true, characterData: true, childList: true }) + this.mutationObserver.observe(this.el.nativeElement, { subtree: true, characterData: true, childList: true }) } constructor( diff --git a/libs/angular-accelerator/testing/data-table.harness.ts b/libs/angular-accelerator/testing/data-table.harness.ts index 20c165a0..2c1f50ca 100644 --- a/libs/angular-accelerator/testing/data-table.harness.ts +++ b/libs/angular-accelerator/testing/data-table.harness.ts @@ -67,8 +67,8 @@ export class DataTableHarness extends ContentContainerComponentHarness { return disabledActionButtonsCount === amount } - async columnIsFrozen(column: TestElement | null) { - if (column == null) { + async columnIsFrozen(column: TestElement | null | undefined) { + if (column === null || column === undefined) { throw new Error('Given column is null') } return await column.hasClass('p-frozen-column') diff --git a/libs/angular-accelerator/testing/data-view.harness.ts b/libs/angular-accelerator/testing/data-view.harness.ts index e056c3df..2316a2dc 100644 --- a/libs/angular-accelerator/testing/data-view.harness.ts +++ b/libs/angular-accelerator/testing/data-view.harness.ts @@ -5,6 +5,6 @@ import { DataTableHarness } from './data-table.harness' export class DataViewHarness extends ContentContainerComponentHarness { static hostSelector = 'ocx-data-view' - getDataTable = this.locatorFor(DataTableHarness) - getDataListGrid = this.locatorFor(DataListGridHarness) + getDataTable = this.locatorForOptional(DataTableHarness) + getDataListGrid = this.locatorForOptional(DataListGridHarness) } diff --git a/package-lock.json b/package-lock.json index b67c65f2..8cb8144d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@onecx/onecx-portal-ui-libs", - "version": "5.3.2", + "version": "5.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@onecx/onecx-portal-ui-libs", - "version": "5.3.2", + "version": "5.4.0", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -117,7 +117,7 @@ }, "libs/portal-layout-styles": { "name": "@onecx/portal-layout-styles", - "version": "5.3.2", + "version": "5.4.0", "peerDependencies": { "tslib": "^2.6.3" } From bb5131d4b2d81ee9672ff9a2dfcc04a22e598f0a Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Wed, 21 Aug 2024 09:43:05 +0200 Subject: [PATCH 11/16] fix: find template when using pTemplate --- .../data-list-grid.component.ts | 24 +++++++++---- .../data-table/data-table.component.ts | 36 +++++++++++++------ 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts index af8bfb32..e173680d 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts @@ -288,6 +288,7 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe } columnType = ColumnType + templatesObservables: Record | null>> = {} constructor( @Inject(LOCALE_ID) locale: string, @@ -537,7 +538,16 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe return this.columns.filter((c) => !ids.includes(c.id)) } - templatesObservables: Record | null>> = {} + findTemplate(templates: PrimeTemplate[], names: string[]): PrimeTemplate | undefined { + for (let index = 0; index < names.length; index++) { + const name = names[index] + const template = templates.find((template) => template.name === name) + if (template) { + return template + } + } + return undefined + } getTemplate(column: DataTableColumn): Observable | null> { if (!this.templatesObservables[column.id]) { @@ -556,37 +566,37 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe case ColumnType.DATE: return ( this._dateListValue ?? - templates.find((template) => template.name === 'defaultDateListValue')?.template ?? + this.findTemplate(templates, ['dateListValue', 'defaultDateListValue'])?.template ?? null ) case ColumnType.NUMBER: return ( this._numberListValue ?? - templates.find((template) => template.name === 'defaultNumberListValue')?.template ?? + this.findTemplate(templates, ['numberListValue', 'defaultNumberListValue'])?.template ?? null ) case ColumnType.RELATIVE_DATE: return ( this._relativeDateListValue ?? - templates.find((template) => template.name === 'defaultRelativeDateListValue')?.template ?? + this.findTemplate(templates, ['relativeDateListValue', 'defaultRelativeDateListValue'])?.template ?? null ) case ColumnType.TRANSLATION_KEY: return ( this._translationKeyListValue ?? - templates.find((template) => template.name === 'defaultTranslationListValue')?.template ?? + this.findTemplate(templates, ['translationListValue', 'defaultTranslationListValue'])?.template ?? null ) case ColumnType.CUSTOM: return ( this._customListValue ?? - templates.find((template) => template.name === 'defaultCustomListValue')?.template ?? + this.findTemplate(templates, ['customListValue', 'defaultCustomListValue'])?.template ?? null ) default: return ( this._stringListValue ?? - templates.find((template) => template.name === 'defaultStringListValue')?.template ?? + this.findTemplate(templates, ['stringListValue', 'defaultStringListValue'])?.template ?? null ) } diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index 0c9a057d..6ff624a2 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -264,6 +264,8 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon return dv?.selectionChangedObserved || dv?.selectionChanged.observed || this.selectionChanged.observed } + templatesObservables: Record | null>> = {} + constructor( @Inject(LOCALE_ID) locale: string, translateService: TranslateService, @@ -510,7 +512,16 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon return isValidDate(d) } - templatesObservables: Record | null>> = {} + findTemplate(templates: PrimeTemplate[], names: string[]): PrimeTemplate | undefined { + for (let index = 0; index < names.length; index++) { + const name = names[index] + const template = templates.find((template) => template.name === name) + if (template) { + return template + } + } + return undefined + } getTemplate(column: DataTableColumn): Observable | null> { if (!this.templatesObservables[column.id]) { @@ -521,45 +532,50 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon ]).pipe( map(([t, vt, pt]) => { const templates = [...(t ?? []), ...(vt ?? []), ...(pt ?? [])] - const columnTemplate = - templates.find((template) => template.name === column.id + 'IdTableCell')?.template ?? - templates.find((template) => template.name === column.id + 'IdCell')?.template + const columnTemplate = this.findTemplate(templates, [ + column.id + 'IdCell', + column.id + 'IdTableCell', + ])?.template if (columnTemplate) { return columnTemplate } switch (column.columnType) { case ColumnType.DATE: return ( - this._dateCell ?? templates.find((template) => template.name === 'defaultDateCell')?.template ?? null + this._dateCell ?? + this.findTemplate(templates, ['dateCell', 'dateTableCell', 'defaultDateCell'])?.template ?? + null ) case ColumnType.NUMBER: return ( this._numberCell ?? - templates.find((template) => template.name === 'defaultNumberCell')?.template ?? + this.findTemplate(templates, ['numberCell', 'numberTableCell', 'defaultNumberCell'])?.template ?? null ) case ColumnType.RELATIVE_DATE: return ( this._relativeDateCell ?? - templates.find((template) => template.name === 'defaultRelativeDateCell')?.template ?? + this.findTemplate(templates, ['relativeDateCell', 'relativeDateTableCell', 'defaultRelativeDateCell']) + ?.template ?? null ) case ColumnType.TRANSLATION_KEY: return ( this._translationKeyCell ?? - templates.find((template) => template.name === 'defaultTranslationKeyCell')?.template ?? + this.findTemplate(templates, ['translationCell', 'translationTableCell', 'defaultTranslationKeyCell']) + ?.template ?? null ) case ColumnType.CUSTOM: return ( this._customCell ?? - templates.find((template) => template.name === 'defaultCustomCell')?.template ?? + this.findTemplate(templates, ['customCell', 'customTableCell', 'defaultCustomCell'])?.template ?? null ) default: return ( this._stringCell ?? - templates.find((template) => template.name === 'defaultStringCell')?.template ?? + this.findTemplate(templates, ['stringCell', 'stringTableCell', 'defaultStringCell'])?.template ?? null ) } From c00712b99dfcba9f6a88d3239cdc31a86b68f543 Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Wed, 21 Aug 2024 11:35:38 +0200 Subject: [PATCH 12/16] fix: add deprecated comments for custom templates --- .../data-list-grid/data-list-grid.component.ts | 7 ++++++- .../components/data-table/data-table.component.ts | 4 ++-- .../lib/components/data-view/data-view.component.ts | 13 ++++++++++++- .../interactive-data-view.component.ts | 6 ++++++ .../src/lib/model/column-type.model.ts | 4 +++- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts index e173680d..0924c02a 100644 --- a/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-list-grid/data-list-grid.component.ts @@ -198,8 +198,13 @@ export class DataListGridComponent extends DataSortBase implements OnInit, DoChe get _relativeDateListValue(): TemplateRef | undefined { return this.relativeDateListValueTemplate || this.relativeDateListValueChildTemplate } - + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @Input() customListValueTemplate: TemplateRef | undefined + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @ContentChild('customListValue') customListValueChildTemplate: TemplateRef | undefined get _customListValue(): TemplateRef | undefined { return this.customListValueTemplate || this.customListValueChildTemplate diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index 0018e2d8..cdbe6e67 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -154,11 +154,11 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon } /** - * @deprecated + * @deprecated Will be removed with the next major v6 upgrade */ @Input() customCellTemplate: TemplateRef | undefined /** - * @deprecated + * @deprecated Will be removed with the next major v6 upgrade */ @ContentChild('customCell') customCellChildTemplate: TemplateRef | undefined get _customCell(): TemplateRef | undefined { diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts index a570fc37..161f4d7b 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts @@ -103,8 +103,13 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { get _numberTableCell(): TemplateRef | undefined { return this.numberTableCellTemplate || this.numberTableCellChildTemplate } - + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @Input() customTableCellTemplate: TemplateRef | undefined + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @ContentChild('customTableCell') customTableCellChildTemplate: TemplateRef | undefined get _customTableCell(): TemplateRef | undefined { return this.customTableCellTemplate || this.customTableCellChildTemplate @@ -227,7 +232,13 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { get _relativeDateListValue(): TemplateRef | undefined { return this.relativeDateListValueTemplate || this.relativeDateListValueChildTemplate } + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @Input() customListValueTemplate: TemplateRef | undefined + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @ContentChild('customListValue') customListValueChildTemplate: TemplateRef | undefined get _customListValue(): TemplateRef | undefined { return this.customListValueTemplate || this.customListValueChildTemplate diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts index cd71ea33..8f0c529e 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts @@ -106,6 +106,9 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { @ContentChild('listItemSubtitleLines') listItemSubtitleLines: TemplateRef | undefined @ContentChild('stringTableCell') stringTableCell: TemplateRef | undefined @ContentChild('numberTableCell') numberTableCell: TemplateRef | undefined + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @ContentChild('customTableCell') customTableCell: TemplateRef | undefined @ContentChild('gridItem') gridItem: TemplateRef | undefined @ContentChild('listItem') listItem: TemplateRef | undefined @@ -114,6 +117,9 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { @ContentChild('translationKeyListValue') translationKeyListValue: TemplateRef | undefined @ContentChild('numberListValue') numberListValue: TemplateRef | undefined @ContentChild('relativeDateListValue') relativeDateListValue: TemplateRef | undefined + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @ContentChild('customListValue') customListValue: TemplateRef | undefined @ContentChild('stringListValue') stringListValue: TemplateRef | undefined @ContentChild('dateListValue') dateListValue: TemplateRef | undefined diff --git a/libs/angular-accelerator/src/lib/model/column-type.model.ts b/libs/angular-accelerator/src/lib/model/column-type.model.ts index a3c6e033..4a7051a0 100644 --- a/libs/angular-accelerator/src/lib/model/column-type.model.ts +++ b/libs/angular-accelerator/src/lib/model/column-type.model.ts @@ -5,7 +5,9 @@ export enum ColumnType { RELATIVE_DATE = 'RELATIVE_DATE', TRANSLATION_KEY = 'TRANSLATION_KEY', /** - * @deprecated use column template override with column id + * @deprecated Will be removed with the next major v6 upgrade. + * Please use pTemplate="column id + IdCell" or pTemplate="column id + IdTableCell" + * depending on where you define the template override */ CUSTOM = 'CUSTOM', } From df42a72a38149887f2212b7d19d44aa593df2c7a Mon Sep 17 00:00:00 2001 From: "kim.tran" Date: Wed, 21 Aug 2024 11:47:14 +0200 Subject: [PATCH 13/16] fix: fixed template name translationKeyCell and translationKeyTableCell --- .../src/lib/components/data-table/data-table.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index cdbe6e67..a0d7b39a 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -563,7 +563,7 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon case ColumnType.TRANSLATION_KEY: return ( this._translationKeyCell ?? - this.findTemplate(templates, ['translationCell', 'translationTableCell', 'defaultTranslationKeyCell']) + this.findTemplate(templates, ['translationKeyCell', 'translationKeyTableCell', 'defaultTranslationKeyCell']) ?.template ?? null ) From 63897073222068ba116824ed596dbe400d51581b Mon Sep 17 00:00:00 2001 From: markuczy Date: Wed, 21 Aug 2024 11:57:44 +0200 Subject: [PATCH 14/16] feat: deprecated custom filter columns --- .../components/data-table/data-table.component.ts | 6 ++++++ .../lib/components/data-view/data-view.component.ts | 12 +++++++++--- .../interactive-data-view.component.ts | 3 +++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index c230b6ef..b2ceffb1 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -211,7 +211,13 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon get _numberFilterCell(): TemplateRef | undefined { return this.numberFilterCellTemplate || this.numberFilterCellChildTemplate } + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @Input() customFilterCellTemplate: TemplateRef | undefined + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @ContentChild('customFilterCell') customFilterCellChildTemplate: TemplateRef | undefined get _customFilterCell(): TemplateRef | undefined { return this.customFilterCellTemplate || this.customFilterCellChildTemplate diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts index aff609dd..b87bfd07 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts @@ -107,7 +107,7 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { * @deprecated Will be removed with the next major v6 upgrade */ @Input() customTableCellTemplate: TemplateRef | undefined - /** + /** * @deprecated Will be removed with the next major v6 upgrade */ @ContentChild('customTableCell') customTableCellChildTemplate: TemplateRef | undefined @@ -232,11 +232,11 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { get _relativeDateListValue(): TemplateRef | undefined { return this.relativeDateListValueTemplate || this.relativeDateListValueChildTemplate } - /** + /** * @deprecated Will be removed with the next major v6 upgrade */ @Input() customListValueTemplate: TemplateRef | undefined - /** + /** * @deprecated Will be removed with the next major v6 upgrade */ @ContentChild('customListValue') customListValueChildTemplate: TemplateRef | undefined @@ -285,7 +285,13 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { get _numberTableFilterCell(): TemplateRef | undefined { return this.numberTableFilterCellTemplate || this.numberTableFilterCellChildTemplate } + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @Input() customTableFilterCellTemplate: TemplateRef | undefined + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @ContentChild('customTableFilterCell') customTableFilterCellChildTemplate: TemplateRef | undefined get _customTableFilterCell(): TemplateRef | undefined { return this.customTableFilterCellTemplate || this.customTableFilterCellChildTemplate diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts index e03f6bf4..0ec75345 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts @@ -129,6 +129,9 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { @ContentChild('translationKeyTableFilterCell') translationKeyTableFilterCell: TemplateRef | undefined @ContentChild('stringTableFilterCell') stringTableFilterCell: TemplateRef | undefined @ContentChild('numberTableFilterCell') numberTableFilterCell: TemplateRef | undefined + /** + * @deprecated Will be removed with the next major v6 upgrade + */ @ContentChild('customTableFilterCell') customTableFilterCell: TemplateRef | undefined templates$: BehaviorSubject | undefined> = new BehaviorSubject< From c4747ac87265feee8bd230632a94b8a583ca445b Mon Sep 17 00:00:00 2001 From: markuczy Date: Wed, 21 Aug 2024 12:36:58 +0200 Subject: [PATCH 15/16] fix: date cell template passing fix --- .../interactive-data-view/interactive-data-view.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html index 778d8001..bc8d650e 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.html @@ -95,7 +95,7 @@ [dateListValueTemplate]="_dateListValue ? dateListValue : undefined" [gridItemTemplate]="_gridItem ? gridItem : undefined" [tableFilterCellTemplate]="_tableFilterCell ? tableFilterCell : undefined" - [dateTableFilterCellTemplate]="_dateTableFilterCell ? dateTableCell : undefined" + [dateTableFilterCellTemplate]="_dateTableFilterCell ? dateTableFilterCell : undefined" [customTableFilterCellTemplate]="_customTableFilterCell ? customTableFilterCell : undefined" [numberTableFilterCellTemplate]="_numberTableFilterCell ? numberTableFilterCell : undefined" [stringTableFilterCellTemplate]="_stringTableFilterCell ? stringTableFilterCell : undefined" From 868a75e1deb834e9879126c4a289588e6e0c714a Mon Sep 17 00:00:00 2001 From: markuczy Date: Thu, 22 Aug 2024 13:56:50 +0200 Subject: [PATCH 16/16] feat: improved deprecated messages --- .../src/lib/components/data-table/data-table.component.ts | 8 ++++++-- .../src/lib/components/data-view/data-view.component.ts | 8 ++++++-- .../interactive-data-view.component.ts | 4 +++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts index c799c08c..b08aa666 100644 --- a/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-table/data-table.component.ts @@ -216,11 +216,15 @@ export class DataTableComponent extends DataSortBase implements OnInit, AfterCon return this.numberFilterCellTemplate || this.numberFilterCellChildTemplate } /** - * @deprecated Will be removed with the next major v6 upgrade + * @deprecated Will be removed and instead to change the template of a specific column filter + * use the new approach instead by following the naming convention column id + IdFilterCell + * e.g. for a column with the id 'status' use pTemplate="statusIdFilterCell" */ @Input() customFilterCellTemplate: TemplateRef | undefined /** - * @deprecated Will be removed with the next major v6 upgrade + * @deprecated Will be removed and instead to change the template of a specific column filter + * use the new approach instead by following the naming convention column id + IdFilterCell + * e.g. for a column with the id 'status' use pTemplate="statusIdFilterCell" */ @ContentChild('customFilterCell') customFilterCellChildTemplate: TemplateRef | undefined get _customFilterCell(): TemplateRef | undefined { diff --git a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts index 4236a31e..065a6380 100644 --- a/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/data-view/data-view.component.ts @@ -294,11 +294,15 @@ export class DataViewComponent implements DoCheck, OnInit, AfterContentInit { return this.numberTableFilterCellTemplate || this.numberTableFilterCellChildTemplate } /** - * @deprecated Will be removed with the next major v6 upgrade + * @deprecated Will be removed and instead to change the template of a specific column filter + * use the new approach instead by following the naming convention column id + IdTableFilterCell + * e.g. for a column with the id 'status' in DataTable use pTemplate="statusIdTableFilterCell" */ @Input() customTableFilterCellTemplate: TemplateRef | undefined /** - * @deprecated Will be removed with the next major v6 upgrade + * @deprecated Will be removed and instead to change the template of a specific column filter + * use the new approach instead by following the naming convention column id + IdTableFilterCell + * e.g. for a column with the id 'status' in DataTable use pTemplate="statusIdTableFilterCell" */ @ContentChild('customTableFilterCell') customTableFilterCellChildTemplate: TemplateRef | undefined get _customTableFilterCell(): TemplateRef | undefined { diff --git a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts index c3b2b493..1e775996 100644 --- a/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts +++ b/libs/angular-accelerator/src/lib/components/interactive-data-view/interactive-data-view.component.ts @@ -134,7 +134,9 @@ export class InteractiveDataViewComponent implements OnInit, AfterContentInit { @ContentChild('stringTableFilterCell') stringTableFilterCell: TemplateRef | undefined @ContentChild('numberTableFilterCell') numberTableFilterCell: TemplateRef | undefined /** - * @deprecated Will be removed with the next major v6 upgrade + * @deprecated Will be removed and instead to change the template of a specific column filter + * use the new approach instead by following the naming convention column id + IdTableFilterCell + * e.g. for a column with the id 'status' in DataTable use pTemplate="statusIdTableFilterCell" */ @ContentChild('customTableFilterCell') customTableFilterCell: TemplateRef | undefined