diff --git a/package-lock.json b/package-lock.json index eb3659fdf4387cc0ec857c4ce1687d030155baab..1589ff07e8c78b5309cb52a25c28077677dc9c3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,9 +17,10 @@ "@angular/platform-browser": "^17.3.12", "@angular/platform-browser-dynamic": "^17.3.12", "@angular/router": "^17.3.12", - "@edugouvfr/ngx-dsfr": "1.13.4", + "@edugouvfr/ngx-dsfr": "1.13.5", "@edugouvfr/ngx-dsfr-ext": "1.1.2", "@ng-select/ng-select": "^12.0.7", + "crisp-sdk-web": "^1.0.25", "ngx-matomo-client": "^6.4.1", "rxjs": "~7.8.0", "slugify": "^1.6.6", @@ -2561,9 +2562,9 @@ } }, "node_modules/@edugouvfr/ngx-dsfr": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/@edugouvfr/ngx-dsfr/-/ngx-dsfr-1.13.4.tgz", - "integrity": "sha512-O8t6MOyDi78QCsgeWNKCuh1YknQ1dhizpHl9Ybo1AMqZx0qxYQgauPzJlKREvqS4OZgvRn2df2Bww/Vz1eES9g==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@edugouvfr/ngx-dsfr/-/ngx-dsfr-1.13.5.tgz", + "integrity": "sha512-8uNZ5nP+kAY0M5ZP6bh73v49p6upSvU7507O3oUXMoCA4m3gSfCtHE/Dg7o46Q05L9VOeGGGi//+6D4lJNpefQ==", "license": "EUPL-1.2", "dependencies": { "@gouvfr/dsfr": "1.13.0", @@ -2617,1063 +2618,875 @@ } } }, - "node_modules/@esbuild/aix-ppc64": { + "node_modules/@esbuild/linux-x64": { "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", "cpu": [ - "ppc64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "aix" + "linux" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", - "cpu": [ - "arm" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } + "license": "Python-2.0" }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", - "cpu": [ - "arm" - ], + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", - "cpu": [ - "ia32" - ], + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", - "cpu": [ - "loong64" - ], + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@gouvfr/dsfr": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.13.0.tgz", + "integrity": "sha512-I6JLYfE63dogk5qOx69gMfW/bKsm+daFgfx2QX75isbKBy5khlJdVxOD0A6ohvywvUJlEcZTmVK8rNHeVvGmgw==", + "license": "SEE LICENSE IN LICENSE.md", "engines": { - "node": ">=12" + "node": ">=18.16.1" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", - "cpu": [ - "ppc64" - ], + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, "engines": { - "node": ">=12" + "node": ">=10.10.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", - "cpu": [ - "riscv64" - ], + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", - "cpu": [ - "s390x" - ], + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "engines": { "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", - "cpu": [ - "x64" - ], + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", - "cpu": [ - "x64" - ], + "node_modules/@isaacs/cliui/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, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", - "cpu": [ - "x64" - ], + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", - "cpu": [ - "arm64" - ], + "node_modules/@isaacs/cliui/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, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", - "cpu": [ - "ia32" - ], + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", - "cpu": [ - "x64" - ], + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=8" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "p-try": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "p-limit": "^2.2.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=8" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">=6.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@gouvfr/dsfr": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.13.0.tgz", - "integrity": "sha512-I6JLYfE63dogk5qOx69gMfW/bKsm+daFgfx2QX75isbKBy5khlJdVxOD0A6ohvywvUJlEcZTmVK8rNHeVvGmgw==", - "license": "SEE LICENSE IN LICENSE.md", - "engines": { - "node": ">=18.16.1" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ljharb/through": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz", + "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "call-bind": "^1.0.8" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", + "node_modules/@ng-select/ng-select": { + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-12.0.7.tgz", + "integrity": "sha512-Eht1zlLP0DJxiXcKnq3aY/EJ8odomgU0hM0BJoPY6oX3XFHndtFtdPxlZfhVtQn+FwyDEh7306rRx6digxVssA==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "tslib": "^2.3.1" }, "engines": { - "node": "*" + "node": ">= 16", + "npm": ">= 8" + }, + "peerDependencies": { + "@angular/common": "^17.0.0-rc.0", + "@angular/core": "^17.0.0-rc.0", + "@angular/forms": "^17.0.0-rc.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@ngtools/webpack": { + "version": "17.3.12", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.12.tgz", + "integrity": "sha512-zFFFpcYsqKWdQNNKNZZIouaJco5LQ6sIFxnrG1tbn6sApFWWKRiDS3mguWdyZfD1R4yD4ZaZApGdWhfwJLuM0w==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=12.22" + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.5", + "webpack": "^5.54.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@ngx-env/builder": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@ngx-env/builder/-/builder-16.1.3.tgz", + "integrity": "sha512-Us17dnTqhC/RzHmcK9i0iJd9KpyZopsSzZwPuRDBhLxhn8Qs1jxRbDEMsEtuZOLbwfzJo1TUQsOZBF6TPT/SsA==", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "dependencies": { + "@dotenv-run/webpack": "^1.0.1" + } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">= 8" } }, - "node_modules/@isaacs/cliui/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==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">= 8" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@isaacs/cliui/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==", + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", "dependencies": { - "ansi-regex": "^6.0.1" + "semver": "^7.3.5" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "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, "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "p-try": "^2.0.0" + "isexe": "^3.1.1" }, - "engines": { - "node": ">=6" + "bin": { + "node-which": "bin/which.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "p-limit": "^2.2.0" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@npmcli/package-json": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", + "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=6.0.0" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=6.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ljharb/through": { - "version": "2.3.14", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz", - "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@ng-select/ng-select": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-12.0.7.tgz", - "integrity": "sha512-Eht1zlLP0DJxiXcKnq3aY/EJ8odomgU0hM0BJoPY6oX3XFHndtFtdPxlZfhVtQn+FwyDEh7306rRx6digxVssA==", - "license": "MIT", + "license": "ISC", "dependencies": { - "tslib": "^2.3.1" + "which": "^4.0.0" }, "engines": { - "node": ">= 16", - "npm": ">= 8" - }, - "peerDependencies": { - "@angular/common": "^17.0.0-rc.0", - "@angular/core": "^17.0.0-rc.0", - "@angular/forms": "^17.0.0-rc.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@ngtools/webpack": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.12.tgz", - "integrity": "sha512-zFFFpcYsqKWdQNNKNZZIouaJco5LQ6sIFxnrG1tbn6sApFWWKRiDS3mguWdyZfD1R4yD4ZaZApGdWhfwJLuM0w==", + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^17.0.0", - "typescript": ">=5.2 <5.5", - "webpack": "^5.54.0" - } - }, - "node_modules/@ngx-env/builder": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@ngx-env/builder/-/builder-16.1.3.tgz", - "integrity": "sha512-Us17dnTqhC/RzHmcK9i0iJd9KpyZopsSzZwPuRDBhLxhn8Qs1jxRbDEMsEtuZOLbwfzJo1TUQsOZBF6TPT/SsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@dotenv-run/webpack": "^1.0.1" + "node": ">=16" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "isexe": "^3.1.1" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 8" + "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "node_modules/@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", "dev": true, "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", - "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "node_modules/@npmcli/run-script": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", "dev": true, "license": "ISC", "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", + "node-gyp": "^10.0.0", "which": "^4.0.0" }, "engines": { "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, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { + "node_modules/@npmcli/run-script/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", @@ -3683,24 +3496,7 @@ "node": ">=16" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/git/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/which": { + "node_modules/@npmcli/run-script/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", @@ -3716,642 +3512,235 @@ "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, + "license": "MIT", + "optional": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14" } }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/@npmcli/package-json": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", - "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", + "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", + "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@schematics/angular": { + "version": "17.3.12", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.12.tgz", + "integrity": "sha512-fGFoyq1pEzwtpqHi//erd5nO9KPMmEYTM0oF+XrybNAvm84B2iVSWNm+8uozmEy4QgYuayKzGnGK3NlprC/8rQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" + "@angular-devkit/core": "17.3.12", + "@angular-devkit/schematics": "17.3.12", + "jsonc-parser": "3.2.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@sigstore/protobuf-specs": "^0.3.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/package-json/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", + "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "which": "^4.0.0" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@sigstore/sign/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, "license": "ISC", "engines": { - "node": ">=16" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", - "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", - "dev": true, - "license": "ISC", "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", - "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "which": "^4.0.0" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" + "dependencies": { + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "dependencies": { + "@types/node": "*" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", - "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", - "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", - "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", - "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", - "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", - "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", - "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", - "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", - "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", - "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", - "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", - "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", - "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", - "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", - "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", - "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", - "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", - "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", - "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@schematics/angular": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.12.tgz", - "integrity": "sha512-fGFoyq1pEzwtpqHi//erd5nO9KPMmEYTM0oF+XrybNAvm84B2iVSWNm+8uozmEy4QgYuayKzGnGK3NlprC/8rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "17.3.12", - "@angular-devkit/schematics": "17.3.12", - "jsonc-parser": "3.2.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", - "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "license": "MIT", "dependencies": { @@ -6685,6 +6074,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/crisp-sdk-web": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/crisp-sdk-web/-/crisp-sdk-web-1.0.25.tgz", + "integrity": "sha512-CWTHFFeHRV0oqiXoPh/aIAKhFs6xcIM4NenGPnClAMCZUDQgQsF1OWmZWmnVNjJriXUmWRgDfeUxcxygS0dCRA==", + "license": "MIT" + }, "node_modules/critters": { "version": "0.0.22", "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", @@ -8660,28 +8055,13 @@ "dev": true, "license": "Unlicense" }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -14511,1515 +13891,1141 @@ }, "node_modules/source-map-loader/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "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, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "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, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "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==", + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } + "license": "BSD-3-Clause" }, - "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "minipass": "^7.0.3" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "engines": { - "node": ">=10" + "node": ">=8.0" } }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "safe-buffer": "~5.2.0" } }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "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, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/string-width-cjs": { + "name": "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, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/terser": { - "version": "5.29.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", - "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", - "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.14" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "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, "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8.0" + "node": ">=8" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true, "license": "MIT", - "bin": { - "tree-kill": "cli.js" + "engines": { + "node": ">=0.10" } }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=16" + "node": "^14.18.0 || >=16.0.0" }, - "peerDependencies": { - "typescript": ">=4.2.0" + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "minimist": "^1.2.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=10" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" + "minipass": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "prelude-ls": "^1.2.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } + "license": "ISC" }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "node_modules/terser": { + "version": "5.29.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", + "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, - "engines": { - "node": ">= 0.4" + "bin": { + "terser": "bin/terser" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, - "engines": { - "node": ">= 0.4" + "bin": { + "terser": "bin/terser" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=14.17" + "node": ">=8" } }, - "node_modules/ua-parser-js": { - "version": "0.7.40", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz", - "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==", + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/undici": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz", - "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0" - } + "license": "MIT" }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true, "license": "MIT" }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=14.14" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=8.0" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.6" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "bin": { + "tree-kill": "cli.js" } }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", "dev": true, "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, "engines": { - "node": ">= 0.8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" + "prelude-ls": "^1.2.1" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">= 0.4" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "dev": true, - "license": "ISC", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite": { - "version": "5.4.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", - "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite/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" - ], + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=12" + "node": ">=14.17" } }, - "node_modules/vite/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" - ], + "node_modules/ua-parser-js": { + "version": "0.7.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz", + "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/vite/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" - ], + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite/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" - ], + "node_modules/undici": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz", + "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": ">=18.0" } }, - "node_modules/vite/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" - ], + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/vite/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" - ], + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/vite/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" - ], + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/vite/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" - ], + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/vite/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" - ], + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vite/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" - ], + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vite/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" - ], + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 4.0.0" } }, - "node_modules/vite/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" - ], + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/vite/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" - ], + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/vite/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" - ], + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/vite/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" - ], + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/vite/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" - ], + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/vite/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" - ], + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 0.4.0" } }, - "node_modules/vite/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, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/vite/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" - ], + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vite/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" - ], + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "license": "ISC", "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vite/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" - ], + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/vite/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" - ], + "node_modules/vite": { + "version": "5.4.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", + "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">=12" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { + "node_modules/vite/node_modules/@esbuild/linux-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -16027,7 +15033,7 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { "node": ">=12" diff --git a/package.json b/package.json index 3355d4a57bad7301ff749f90c6e0f493e513d525..8a4f2817a05f820da75f245ddc56cca6cd6c9a9b 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,10 @@ "@angular/platform-browser": "^17.3.12", "@angular/platform-browser-dynamic": "^17.3.12", "@angular/router": "^17.3.12", - "@edugouvfr/ngx-dsfr": "1.13.4", + "@edugouvfr/ngx-dsfr": "1.13.5", "@edugouvfr/ngx-dsfr-ext": "1.1.2", "@ng-select/ng-select": "^12.0.7", + "crisp-sdk-web": "^1.0.25", "ngx-matomo-client": "^6.4.1", "rxjs": "~7.8.0", "slugify": "^1.6.6", diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 37dab8d4e721fe5b071b652de6bc5d31e7aa3231..205ec4a715541aca4e8b40948cde4f25fce262fc 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -129,6 +129,13 @@ const routes: Routes = [ data: { role: Role.CLERK_DIRECTOR }, children: courtRoutes }, + { + path: 'adjoint-administratif', + canActivate: [RoleGuard, CourtServiceGuard], + data: { role: Role.ADMINISTRATIVE_ASSISTANT }, + children: courtRoutes + }, + { path: 'attache-justice', canActivate: [RoleGuard, CourtServiceGuard], diff --git a/src/app/app.component.ts b/src/app/app.component.ts index e9f6ffab8e3b73af073d53a5177b02d58582ea1a..647e7d2e6755359c440581f559c391bda6a2f3e5 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,8 +1,11 @@ import { Component } from '@angular/core'; +import { CrispService } from './service/crisp.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) -export class AppComponent {} +export class AppComponent { + constructor(private readonly crispService: CrispService) {} +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 3a1861d9d926c41306351133137c50d27777efac..44976c4ac123c0d2680f38f88b1ed22278e034ea 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -24,6 +24,7 @@ import { DsfrHighlightModule, DsfrModalModule, DsfrNoticeModule, + DsfrStepperModule, DsfrTableComponent, DsfrTabsModule } from '@edugouvfr/ngx-dsfr'; @@ -77,7 +78,6 @@ import { RequestExpertComponent } from './component/common/request-list/request- import { RequestItemComponent } from './component/common/request-list/request-item/request-item.component'; import { RequestListComponent } from './component/common/request-list/request-list.component'; import { StatisticsComponent } from './component/common/statistics/statistics.component'; -import { StepperComponent } from './component/common/stepper/stepper.component'; import { UserAvailabilityComponent } from './component/common/user-availability/user-availability.component'; import { CourtAccountComponent } from './component/court/court-account/court-account.component'; import { CourtAideSelectComponent } from './component/court/court-aide-select/court-aide-select.component'; @@ -138,7 +138,6 @@ registerLocaleData(localeFr, 'fr'); PaginationComponent, FiltersComponent, RequestCreationComponent, - StepperComponent, ExpertSelectionComponent, InformationInputComponent, SortableExpertsComponent, @@ -246,7 +245,8 @@ registerLocaleData(localeFr, 'fr'); DsfrHighlightModule, DsfrAlertModule, DsfrDatePickerComponent, - TypeSelectionComponent + TypeSelectionComponent, + DsfrStepperModule ], providers: [ { diff --git a/src/app/component/auth/court-registration/court-registration.component.html b/src/app/component/auth/court-registration/court-registration.component.html index 0bc82874051d5ba60eeeb8f8909147d103aeb164..3f1e53e2bc47a2d2b42fb0baa8708ffcc6c3f62e 100644 --- a/src/app/component/auth/court-registration/court-registration.component.html +++ b/src/app/component/auth/court-registration/court-registration.component.html @@ -77,26 +77,13 @@ </div> <div class="fr-fieldset__element"> - <div class="fr-input-group"> - <label class="fr-label" for="role"> Fonction </label> - <select - id="role" - name="role" - [(ngModel)]="role" - class="fr-select" - required - aria-required="true"> - <option value="MAGISTRATE">Magistrat</option> - <option value="CLERK_DIRECTOR"> - Directeur de greffe - </option> - <option value="CLERK">Greffier</option> - <option value="ATTACHE">Attaché de justice</option> - <option value="ASSISTANT"> - Assistant de justice - </option> - </select> - </div> + <dsfr-ext-multiselect + name="role" + label="Fonction" + placeHolder=" " + selectionMode="single" + [options]="roleOptions" + [(ngModel)]="role"></dsfr-ext-multiselect> </div> </fieldset> </div> diff --git a/src/app/component/auth/court-registration/court-registration.component.ts b/src/app/component/auth/court-registration/court-registration.component.ts index ed578861ba801a0487c2f71316addffaaebd09c7..79a44e8206cb3428a9f0678651d58ecc9107eb3b 100644 --- a/src/app/component/auth/court-registration/court-registration.component.ts +++ b/src/app/component/auth/court-registration/court-registration.component.ts @@ -1,4 +1,6 @@ import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core'; +import { DsfrOption } from '@edugouvfr/ngx-dsfr'; +import { CourtRole, Role } from 'src/app/model/role'; import Utils from '../../../helper/utils'; import { CourtRegistrationForm } from '../../../model/court-registration-form'; import { CourtUserServiceUpdate } from '../../../model/court-user-service-update'; @@ -15,16 +17,25 @@ export class CourtRegistrationComponent implements AfterViewInit { lastName: string; service: CourtUserServiceUpdate | null; jurisdictionId: number; - role: 'MAGISTRATE' | 'CLERK' | 'CLERK_DIRECTOR' | 'ASSISTANT' | 'ATTACHE'; + role: CourtRole; phoneLandline: string; phoneMobile: string; submitting = false; success = false; failure = false; + roleOptions: DsfrOption[] = [ + { label: 'Magistrat', value: Role.MAGISTRATE }, + { label: 'Directeur de greffe', value: Role.CLERK_DIRECTOR }, + { label: 'Greffier', value: Role.CLERK }, + { label: 'Attaché de justice', value: Role.ATTACHE }, + { label: 'Assistant de justice', value: Role.ASSISTANT }, + { label: 'Adjoint administratif', value: Role.ADMINISTRATIVE_ASSISTANT } + ]; + @ViewChild('emailInputRef') emailInput!: ElementRef; - constructor(private authService: AuthService) {} + constructor(private readonly authService: AuthService) {} ngAfterViewInit(): void { this.emailInput.nativeElement.focus(); diff --git a/src/app/component/common/file-upload/file-upload.component.html b/src/app/component/common/file-upload/file-upload.component.html index ce72c116978af3ab8c61d96c7582599247f02f32..124558914a6ad424450f0380870bc3aa55f066c9 100644 --- a/src/app/component/common/file-upload/file-upload.component.html +++ b/src/app/component/common/file-upload/file-upload.component.html @@ -1,10 +1,12 @@ <fieldset class="fr-fieldset frame"> <div class="fr-fieldset__element"> - <label class="fr-label" for="file-input"> + <label class="fr-label fr-mb-2v" for="file-input"> <span *ngIf="isAttachment">Ajouter une pièce jointe</span> - <span *ngIf="isDecision" class="text-xl text-bold" - >Ajouter la décision</span - > + <span *ngIf="isDecision || isConsignation" class="text-xl text-bold"> + {{ + isDecision ? 'Ajouter la décision' : "Ajouter l'avis de consignation" + }} + </span> (format PDF, max. {{ maxFileSizeMb }}Mo) </label> <div class="box-center"> @@ -16,7 +18,7 @@ (change)="onFileChange($event)" (drop)="preventDrop()" /> <button - *ngIf="isDecision" + *ngIf="isDecision || isConsignation" class="fr-btn fr-icon-check-line" (click)="validate()" [disabled]="!canUpload() || uploading"></button> diff --git a/src/app/component/common/file-upload/file-upload.component.ts b/src/app/component/common/file-upload/file-upload.component.ts index 652b83151a903370c794dd1866a332fe6f585a96..32f9ed7eb96faf0da5365ef1585f7dbd5dd88086 100644 --- a/src/app/component/common/file-upload/file-upload.component.ts +++ b/src/app/component/common/file-upload/file-upload.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { FileUpload } from '../../../model/file-upload'; import { environment } from '../../../../environments/environment'; import { FileType } from '../../../model/file-type'; +import { FileUpload } from '../../../model/file-upload'; @Component({ selector: 'app-file-upload', @@ -35,7 +35,10 @@ export class FileUploadComponent { } canUpload(): boolean { - return this.fileSizeOk() && (this.isDecision || this.descSizeOk()); + return ( + this.fileSizeOk() && + (this.isDecision || this.isConsignation || this.descSizeOk()) + ); } fileSizeOk(): boolean { @@ -56,6 +59,10 @@ export class FileUploadComponent { return this.fileType === FileType.DECISION; } + get isConsignation(): boolean { + return this.fileType === FileType.ESCROW; + } + preventDrop() { return false; } diff --git a/src/app/component/common/request-list/request-item/request-expert/request-expert.component.ts b/src/app/component/common/request-list/request-item/request-expert/request-expert.component.ts index e691c1190a79b6691c4cedfe55b228d2b6954a37..d325efd76ac82b6f166daba986c127fe4245edcb 100644 --- a/src/app/component/common/request-list/request-item/request-expert/request-expert.component.ts +++ b/src/app/component/common/request-list/request-item/request-expert/request-expert.component.ts @@ -21,6 +21,7 @@ export class RequestExpertComponent implements OnInit { @Input() isAdmin: boolean; @Input() requestId: number; @Input() isDecision: boolean; + @Input() isEscrow: boolean; @Input() requestStatus: RequestStatus; @Input() isFirst: boolean; @Input() isLast: boolean; @@ -81,6 +82,21 @@ export class RequestExpertComponent implements OnInit { }); } + private addRequestAcceptedEvent() { + if (this.requestExpert.acceptOn) { + this.events.push( + RequestTimeLineEventsUtils.createRequestEvent( + this.requestExpert.acceptOn, + 'Demande acceptée.', + 'SUCCESS', + this.isDecision + ? '' + : 'Ajouter la copie de la décision pour en notifier l’expert' + ) + ); + } + } + private addRequestSendEvent() { if (this.requestExpert.sentOn) { let description; @@ -236,17 +252,11 @@ export class RequestExpertComponent implements OnInit { this.addRequestQueuedEvent(); this.addRequestSendEvent(); this.addGrantedDaysEvents(); + this.addRequestAcceptedEvent(); switch (requestExpert.status) { case RequestExpertStatus.ACCEPTED: - this.addRequestLastEvent( - 'Demande acceptée.', - 'SUCCESS', - this.isDecision - ? '' - : 'Vous devez maintenant ajouter la decision ci-dessous.' - ); - + case RequestExpertStatus.CONFIRMED: if (this.isDecision) { this.events.push( RequestTimeLineEventsUtils.createRequestEvent( @@ -256,6 +266,16 @@ export class RequestExpertComponent implements OnInit { ) ); } + + if (this.isEscrow) { + this.events.push( + RequestTimeLineEventsUtils.createRequestEvent( + undefined, + 'Avis de consignation ajouté.', + 'INFO' + ) + ); + } break; case RequestExpertStatus.REFUSED: { const refusalReason = requestExpert.refusalReason @@ -290,6 +310,9 @@ export class RequestExpertComponent implements OnInit { 'Un autre expert a accepté la demande.' ); break; + case RequestExpertStatus.CONFIRMED: + this.addRequestLastEvent('Demande confirmée.', 'SUCCESS'); + break; default: } } diff --git a/src/app/component/common/request-list/request-item/request-item.component.html b/src/app/component/common/request-list/request-item/request-item.component.html index 5588eed50c03e18fad557cf2d2d58c1137d4b27b..3f6c51f7a3c22da9306f2ba095c7805390738667 100644 --- a/src/app/component/common/request-list/request-item/request-item.component.html +++ b/src/app/component/common/request-list/request-item/request-item.component.html @@ -19,14 +19,15 @@ (click)="$event.stopPropagation()" type="text" /> </div> - <button aria-label="updateProcedureId" class="fr-btn fr-icon-check-line" (click)=" $event.stopPropagation(); updateProcedureId(procedureId.value) " - [disabled]="!procedureId.value"></button> + [disabled]=" + !procedureId.value || !isSpaceFree(procedureId.value) + "></button> <button aria-label="cancelEditingProcedureId" class="fr-btn fr-btn--tertiary fr-icon-close-line" @@ -50,9 +51,14 @@ <dsfr-badge size="MD" [label]="statusLabel" - [noIcon]="!isComplete" + [noIcon]="!isComplete && !isEscrowComplete" [customClass]="statusbadgeColor"></dsfr-badge> </div> + <div *ngIf="isWaitingConsignation"> + <dsfr-notice + heading="L'expert a confirmé son acceptation et est en attente de l'avis de consignation" + type="warning"></dsfr-notice> + </div> <div *ngIf="isRefused" class="box-left fr-my-2v"> <dsfr-notice @@ -136,7 +142,8 @@ " [requestId]="request.id" [requestStatus]="request.status" - [isDecision]="isComplete && !!decision" + [isDecision]="!!decision" + [isEscrow]="!!escrow" [isAdmin]="userService.isAdmin" [requestExpert]="requestExpert" [isFirst]="isFirst" @@ -180,6 +187,10 @@ <span class="fr-text--bold">Greffiers : </span> {{ joinNames(requestClerks) }} </div> + <div *ngIf="requestAdministratifAssistant.length"> + <span class="fr-text--bold">Adjoints administratifs : </span> + {{ joinNames(requestAdministratifAssistant) }} + </div> <div *ngIf="requestAttaches.length"> <span class="fr-text--bold">Attachés de justice : </span> {{ joinNames(requestAttaches) }} @@ -485,27 +496,96 @@ </div> </div> </dsfr-highlight> + + <span class="fr-text--md underlined"> + Délai (en mois) dans lequel l’expert devra rendre son avis à compter de + la consignation par les parties + </span> + <button + *ngIf="canEdit && !editingdDelayAfterConsignation" + class="fr-tag fr-tag--sm fr-ml-2v" + (click)="editingdDelayAfterConsignation = true"> + modifier + </button> + + <dsfr-highlight [textSize]="'MD'" customClass="fr-mt-3v"> + <ng-container *ngIf="!editingdDelayAfterConsignation"> + {{ request.delayAfterConsignation }} + </ng-container> + <div *ngIf="editingdDelayAfterConsignation"> + <div class="box-center-vertical"> + <div class="fr-input-group fr-mb-0"> + <input + id="delay-after-consignation" + class="fr-input" + #delayAfterConsignation="ngModel" + [ngModel]="request.delayAfterConsignation" + type="number" /> + </div> + + <button + aria-label="updateDeliberationDate" + class="fr-btn fr-icon-check-line" + (click)=" + updateDelayAfterConsignation(delayAfterConsignation.value) + " + [disabled]=" + !isPositiveInteger(delayAfterConsignation.value) + "></button> + <button + aria-label="cancelUpdateDelayAfterConsignation" + class="fr-btn fr-btn--tertiary fr-icon-close-line" + (click)="editingdDelayAfterConsignation = false"></button> + </div> + <div + *ngIf="!isPositiveInteger(delayAfterConsignation.value)" + class="fr-message--error fr-mt-3v text-xs"> + Veuillez entrer un nombre entier positif, comme 1, 2 ... + </div> + </div> + </dsfr-highlight> } + <div *ngIf="isEscrowComplete || isComplete"> + <div *ngIf="decision" class="fr-my-8v frame"> + <div class="text-xl text-bold underlined box-center fr-mt-6v"> + DÉCISION + </div> + <div class="box-center fr-mt-4v"> + <app-file-download + [file]="decision" + [procedureId]="request.procedureId" + [requestArchived]="request.archived"></app-file-download> + </div> + </div> + <div *ngIf="escrow" class="fr-my-8v frame"> + <div class="text-xl text-bold underlined box-center fr-mt-6v"> + Avis de consignation + </div> + <div class="box-center fr-mt-4v"> + <app-file-download + [file]="escrow" + [procedureId]="request.procedureId" + [requestArchived]="request.archived"></app-file-download> + </div> + </div> + </div> <div *ngIf="isAccepted && userService.isCourt && !this.isArchived" class="fr-my-8v box-center"> <app-file-upload [fileType]="decisionType" - (onValidate)="addDecision($event)" + (onValidate)="addDocument($event, decisionType)" (onCancel)="showAddFile = false"></app-file-upload> </div> - <div *ngIf="isComplete && decision" class="fr-my-8v frame"> - <div class="text-xl text-bold underlined box-center fr-mt-6v"> - DÉCISION - </div> - <div class="box-center fr-mt-4v"> - <app-file-download - [file]="decision" - [procedureId]="request.procedureId" - [requestArchived]="request.archived"></app-file-download> - </div> + <div + *ngIf="isWaitingConsignation && userService.isCourt && !this.isArchived" + class="fr-my-8v box-center"> + <app-file-upload + [fileType]="consignationType" + (onValidate)="addDocument($event, consignationType)" + (onCancel)="showAddFile = false"></app-file-upload> </div> </ng-container> </dsfr-accordion> diff --git a/src/app/component/common/request-list/request-item/request-item.component.ts b/src/app/component/common/request-list/request-item/request-item.component.ts index 19c97566941068136e327adc0d489bb2d8465a2d..65939efa31f446b5a452074448505a599f8604e6 100644 --- a/src/app/component/common/request-list/request-item/request-item.component.ts +++ b/src/app/component/common/request-list/request-item/request-item.component.ts @@ -55,14 +55,14 @@ export class RequestItemComponent implements OnInit, OnChanges { editingExtraInfo: boolean = false; editingDeliberationDate: boolean = false; + editingdDelayAfterConsignation: boolean = false; editingProcedureId: boolean = false; editingMissionDeadline: boolean = false; editingProgressReportDate: boolean = false; - addingDecision = false; - attachmentType = FileType.ATTACHMENT; decisionType = FileType.DECISION; + consignationType = FileType.ESCROW; tomorrow: string; @@ -164,10 +164,28 @@ export class RequestItemComponent implements OnInit, OnChanges { return this.request.status === RequestStatus.ACCEPTED; } + get isWaitingConsignation(): boolean { + return ( + this.request.status === RequestStatus.COMPLETE && + [ + RequestType.CIVIL, + RequestType.CONTROL_CIVIL, + RequestType.SUMMARY_PROCEEDINGS + ].includes(this.request.type) && + this.request.requestExperts.some( + re => re.status === RequestExpertStatus.CONFIRMED + ) + ); + } + get isComplete(): boolean { return this.request.status === RequestStatus.COMPLETE; } + get isEscrowComplete(): boolean { + return this.request.status === RequestStatus.ESCROW_COMPLETED; + } + get isCancelled(): boolean { return [RequestStatus.CANCELLED, RequestStatus.CANCELLED_AUTO].includes( this.request.status @@ -184,6 +202,12 @@ export class RequestItemComponent implements OnInit, OnChanges { ); } + get escrow(): FileDownload | null { + return ( + (this.request.files || []).find(f => f.type === FileType.ESCROW) || null + ); + } + toggleEditAides() { this.editingAides = !this.editingAides; if (this.editingAides) this.courtAides = [...this.request.aides]; @@ -239,6 +263,19 @@ export class RequestItemComponent implements OnInit, OnChanges { ); } + updateDelayAfterConsignation(delayAfterConsignation: number) { + this.requestService.updateRequest( + this.request.id, + { delayAfterConsignation }, + success => { + if (success) { + this.request.delayAfterConsignation = delayAfterConsignation; + } + this.editingdDelayAfterConsignation = false; + } + ); + } + updateProcedureId(procedureId: string) { this.requestService.updateRequest( this.request.id, @@ -280,6 +317,14 @@ export class RequestItemComponent implements OnInit, OnChanges { ); } + isPositiveInteger(value: number) { + return Number.isInteger(value) && value > 0; + } + + isSpaceFree(value: string): boolean { + return /^\S+$/.test(value); + } + get canFillProgressReportDate(): boolean { return ( !!this.request.missionDeadline && @@ -352,18 +397,16 @@ export class RequestItemComponent implements OnInit, OnChanges { }); } - addDecision(addedFile: FileUpload) { - this.addingDecision = true; + addDocument(addedFile: FileUpload, type: FileType) { this.apiService .addFile( { requestId: this.request.id, - type: FileType.DECISION + type }, addedFile.file ) .subscribe(() => { - this.addingDecision = false; this.refresh(); }); } @@ -411,6 +454,12 @@ export class RequestItemComponent implements OnInit, OnChanges { ); } + get requestAdministratifAssistant(): CourtAide[] { + return this.request.aides.filter( + c => Role.ADMINISTRATIVE_ASSISTANT === c.role + ); + } + get requestAttaches(): CourtAide[] { return this.request.aides.filter(c => c.role === Role.ATTACHE); } diff --git a/src/app/component/common/stepper/stepper.component.css b/src/app/component/common/stepper/stepper.component.css deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/app/component/common/stepper/stepper.component.html b/src/app/component/common/stepper/stepper.component.html deleted file mode 100644 index 8185321e4b5d6411e18793cc0fc49d9573508492..0000000000000000000000000000000000000000 --- a/src/app/component/common/stepper/stepper.component.html +++ /dev/null @@ -1,15 +0,0 @@ -<div class="fr-stepper"> - <h2 class="fr-stepper__title"> - <span class="fr-stepper__state" - >Étape {{ stepNumber }} sur {{ totalSteps }}</span - > - {{ title }} - </h2> - <div - class="fr-stepper__steps" - [attr.data-fr-current-step]="stepNumber" - [attr.data-fr-steps]="totalSteps"></div> - <p class="fr-stepper__details"> - <span class="fr-text--bold">Étape suivante :</span> {{ titleNext }} - </p> -</div> diff --git a/src/app/component/common/stepper/stepper.component.spec.ts b/src/app/component/common/stepper/stepper.component.spec.ts deleted file mode 100644 index 29ed0001a2ea33332ca1f7cb35105bb5902e7d63..0000000000000000000000000000000000000000 --- a/src/app/component/common/stepper/stepper.component.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { StepperComponent } from './stepper.component'; - -describe('StepperComponent', () => { - let component: StepperComponent; - let fixture: ComponentFixture<StepperComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [StepperComponent] - }).compileComponents(); - - fixture = TestBed.createComponent(StepperComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/component/common/stepper/stepper.component.ts b/src/app/component/common/stepper/stepper.component.ts deleted file mode 100644 index f88212b33de2c8939a3d83b9272c5b13ff52ae50..0000000000000000000000000000000000000000 --- a/src/app/component/common/stepper/stepper.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: 'app-stepper', - templateUrl: './stepper.component.html', - styleUrls: ['./stepper.component.css'] -}) -export class StepperComponent { - @Input() - stepNumber: number; - - @Input() - totalSteps: number; - - @Input() - title: string; - - @Input() - titleNext: string; -} diff --git a/src/app/component/court/court-aide-select/court-aide-select.component.ts b/src/app/component/court/court-aide-select/court-aide-select.component.ts index fea7e3a5ca913b5aeed8bf390f1f6383004bd384..059d89ac9b98239de71d22f387f4178a30b2847c 100644 --- a/src/app/component/court/court-aide-select/court-aide-select.component.ts +++ b/src/app/component/court/court-aide-select/court-aide-select.component.ts @@ -39,6 +39,8 @@ export class CourtAideSelectComponent implements OnInit, ControlValueAccessor { return 'Greffiers :'; case Role.CLERK_DIRECTOR: return 'Directeurs de greffe :'; + case Role.ADMINISTRATIVE_ASSISTANT: + return 'Adjoints administratifs :'; case Role.ATTACHE: return 'Attachés de justice :'; case Role.ASSISTANT: diff --git a/src/app/component/court/request-creation/confirmation/confirmation.component.html b/src/app/component/court/request-creation/confirmation/confirmation.component.html index e0debea5eb1f3c8e95126e4c4ce2a084f0210b6b..722bc34ef70f11f115e8ec529709c50b87db1fb3 100644 --- a/src/app/component/court/request-creation/confirmation/confirmation.component.html +++ b/src/app/component/court/request-creation/confirmation/confirmation.component.html @@ -10,7 +10,7 @@ </div> <div *ngIf="magistrate" class="fr-mt-8v"> - <span class="underlined">Magistrat</span> : {{ magistrate.name }} + <span class="underlined">Magistrat</span> : {{ magistrate }} </div> <div class="fr-mt-8v"> @@ -74,6 +74,13 @@ {{ valueOf('deliberationDate') }} </span> <em *ngIf="noDeliberationDate">pas de date de délibéré</em> + <div class="fr-mt-8v"> + <span class="underlined"> + Délai (en mois) dans lequel l’expert devra rendre son avis à + compter de la consignation par les parties + </span> + : {{ valueOf('delayAfterConsignation') }} + </div> } </div> diff --git a/src/app/component/court/request-creation/confirmation/confirmation.component.ts b/src/app/component/court/request-creation/confirmation/confirmation.component.ts index c7310323af451e84059edfbb31ddb74476504d3b..1d8499154d386e3d253ff05262f0f5baf0b4506a 100644 --- a/src/app/component/court/request-creation/confirmation/confirmation.component.ts +++ b/src/app/component/court/request-creation/confirmation/confirmation.component.ts @@ -6,7 +6,6 @@ import { CourtAide } from '../../../../model/court-aide'; import { Expert } from '../../../../model/expert'; import { FileDuplicated } from '../../../../model/file-duplicated'; import { FileUpload } from '../../../../model/file-upload'; -import { Magistrate } from '../../../../model/magistrate'; @Component({ selector: 'app-confirmation', @@ -38,8 +37,16 @@ export class ConfirmationComponent { return this.requestCreationForm.get('selectedExperts')?.value; } - get magistrate(): Magistrate { - return this.requestCreationForm.get('magistrate')?.value; + get magistrate(): string { + if (this.requestCreationForm.get('magistrateId')?.enabled) { + return this.valueOf('magistrateFirstName'); + } else { + return ( + this.valueOf('magistrateLastName') + + ' ' + + this.valueOf('magistrateFirstName') + ); + } } get typeLabel(): string { diff --git a/src/app/component/court/request-creation/expert-selection/expert-selection.component.ts b/src/app/component/court/request-creation/expert-selection/expert-selection.component.ts index caf946594d9444a887b0d007b958b95371112c87..2f49a18cf44a0d2bc6c6bb0722e92bd9b856af52 100644 --- a/src/app/component/court/request-creation/expert-selection/expert-selection.component.ts +++ b/src/app/component/court/request-creation/expert-selection/expert-selection.component.ts @@ -22,7 +22,7 @@ export class ExpertSelectionComponent implements DoCheck { constructor( private readonly confirmationDialogService: ConfirmationDialogService, - private iterableDiffers: IterableDiffers + private readonly iterableDiffers: IterableDiffers ) { this.selectedExpertsDiffer = iterableDiffers.find([]).create(); } diff --git a/src/app/component/court/request-creation/information-input/information-input.component.css b/src/app/component/court/request-creation/information-input/information-input.component.css index 9fed9615f7358c373ecf0e84c0d5ae0d4625c0ae..030f5156a8bd03eca448063cae8203b5cb5d2da6 100644 --- a/src/app/component/court/request-creation/information-input/information-input.component.css +++ b/src/app/component/court/request-creation/information-input/information-input.component.css @@ -1,9 +1,17 @@ -:host ::ng-deep .fr-toggle label[data-fr-unchecked-label][data-fr-checked-label]:before { - padding-left: 0.6rem +:host + ::ng-deep + .fr-toggle + label[data-fr-unchecked-label][data-fr-checked-label]:before { + padding-left: 0.6rem; } .agree-urgent { border: solid 1px var(--border-default-grey); border-radius: 4px; padding: 20px; -} \ No newline at end of file +} + +.add-magistrate { + border: solid 1px var(--border-default-grey); + border-radius: 4px; +} diff --git a/src/app/component/court/request-creation/information-input/information-input.component.html b/src/app/component/court/request-creation/information-input/information-input.component.html index b202b0df6958cdf165574cb9f88d8fa5bd80e8cc..9074c6920917e5ba94373d57350655c6e0bd5212 100644 --- a/src/app/component/court/request-creation/information-input/information-input.component.html +++ b/src/app/component/court/request-creation/information-input/information-input.component.html @@ -28,30 +28,52 @@ </div> <div *ngIf="userService.isCourtAide" class="fr-my-10v"> - <div class="fr-my-3v"> - <span> La demande est faite au nom du magistrat suivant </span> - </div> - <div class="fr-select-group"> - <select - *ngIf="magistrates$ | async as magistrates" - formControlName="magistrate" - class="fr-select" - [compareWith]="compareFn"> - <option - *ngFor="let magistrate of magistrates" - [ngValue]="magistrate"> - {{ magistrate.name }} - </option> - </select> - </div> - <div - *ngIf=" - requestCreationForm.get('magistrate')?.errors?.['required'] && - showErrors - " - class="fr-message fr-message--error"> - Le magistrat doit être renseigné. + <dsfr-ext-multiselect + name="magistrate" + label="La demande est faite au nom du magistrat suivant" + placeHolder=" " + formControlName="magistrateId" + [disabled]="true" + selectionMode="single" + [options]="magistrateOptions" + messageSeverity="error" + [message]="magistrateIdError" + (selectionChange)="changeMagistrate($event)"></dsfr-ext-multiselect> + + <div class="fr-mt-5v"> + <dsfr-form-checkbox + label="Je ne trouve pas le magistrat." + formControlName="unknownMagistrate"> + </dsfr-form-checkbox> </div> + <fieldset + *ngIf="unknownMagistrate" + class="fr-fieldset add-magistrate fr-mt-5v fr-ml-6v fr-p-2v"> + <div class="fr-fieldset__element"> + <dsfr-form-input + label="Adresse e-mail @justice.fr" + type="text" + formControlName="magistrateUsername" + messageSeverity="error" + [message]="magistrateUserNameError"></dsfr-form-input> + </div> + <div class="fr-fieldset__element"> + <dsfr-form-input + label="Nom" + type="text" + formControlName="magistrateLastName" + messageSeverity="error" + [message]="magistrateLastNameError"></dsfr-form-input> + </div> + <div class="fr-fieldset__element"> + <dsfr-form-input + label="Prénom" + type="text" + formControlName="magistrateFirstName" + messageSeverity="error" + [message]="magistrateFirstNameError"></dsfr-form-input> + </div> + </fieldset> </div> <div class="fr-my-10v"> @@ -200,6 +222,16 @@ <label for="no-deliberation-date">Pas de date</label> </div> </div> + + <div class="fr-mt-10v"> + <dsfr-form-input + label="Délai (en mois) dans lequel l’expert devra rendre son avis à compter de la consignation par les parties" + type="number" + formControlName="delayAfterConsignation" + placeHolder="X mois" + [message]="delayAfterConsignationError" + messageSeverity="error"></dsfr-form-input> + </div> } <div class="fr-mt-10v" *ngIf="selectedExperts.length > 1"> diff --git a/src/app/component/court/request-creation/information-input/information-input.component.ts b/src/app/component/court/request-creation/information-input/information-input.component.ts index bec42d6061cf2c7c2ad7f3904108ebe2a3f5f2a3..d1e6bebc2710ebb33913b029af742acd763a7637 100644 --- a/src/app/component/court/request-creation/information-input/information-input.component.ts +++ b/src/app/component/court/request-creation/information-input/information-input.component.ts @@ -7,6 +7,7 @@ import { Output } from '@angular/core'; import { FormGroup } from '@angular/forms'; +import { DsfrOption } from '@edugouvfr/ngx-dsfr'; import { Observable, shareReplay } from 'rxjs'; import { RequestType } from 'src/app/model/request-type'; import Utils from '../../../../helper/utils'; @@ -34,7 +35,6 @@ export class InformationInputComponent implements OnInit { stepChanged = new EventEmitter<1 | -1>(); courtAides$: Observable<CourtAide[]>; - magistrates$: Observable<Magistrate[]>; showAddFile = false; showErrors = false; @@ -43,6 +43,9 @@ export class InformationInputComponent implements OnInit { avgAcceptationTime$: Observable<number>; tomorrow: string; + private magistrates: Magistrate[]; + magistrateOptions: DsfrOption[]; + constructor( private readonly apiService: ApiService, protected userService: UserService, @@ -51,11 +54,44 @@ export class InformationInputComponent implements OnInit { ngOnInit(): void { this.courtAides$ = this.apiService.getCourtAides(); - this.magistrates$ = this.apiService.getMagistrates(); + + if (this.userService.isCourtAide) { + this.apiService + .getMagistrates() + .subscribe((magistrates: Magistrate[]) => { + this.magistrates = magistrates; + this.magistrateOptions = magistrates.map(magistrate => ({ + label: magistrate.name, + value: magistrate.id + })); + }); + } + this.avgAcceptationTime$ = this.apiService .getAvgAcceptationTime() .pipe(shareReplay(1)); this.tomorrow = Utils.getTomorrow(); + + this.requestCreationForm + .get('unknownMagistrate') + ?.valueChanges.subscribe(value => { + this.requestCreationForm + .get('magistrateId') + ?.reset({ value: null, disabled: value }); + this.requestCreationForm + .get('magistrateUsername') + ?.reset({ value: null, disabled: !value }); + this.requestCreationForm + .get('magistrateFirstName') + ?.reset({ value: null, disabled: !value }); + this.requestCreationForm + .get('magistrateLastName') + ?.reset({ value: null, disabled: !value }); + }); + } + + get unknownMagistrate(): boolean { + return this.requestCreationForm.get('unknownMagistrate')?.value; } get selectedExperts(): Expert[] { @@ -124,6 +160,14 @@ export class InformationInputComponent implements OnInit { } } + changeMagistrate(magistrateId: unknown) { + if (magistrateId) { + this.requestCreationForm + .get('magistrateFirstName') + ?.setValue(this.magistrates.find(m => m.id === magistrateId)?.name); + } + } + onDateCheckboxChange(dateControlName: string, checkboxControlName: string) { const dateControl = this.requestCreationForm.get(dateControlName); const checkBoxControl = this.requestCreationForm.get(checkboxControlName); @@ -143,10 +187,6 @@ export class InformationInputComponent implements OnInit { ); } - compareFn(o1: any, o2: any) { - return o1 && o2 && o1.id === o2.id; - } - get procedureIdError(): string { const control = this.requestCreationForm.get('procedureId'); if (!this.showErrors || control?.valid) return ''; @@ -160,6 +200,52 @@ export class InformationInputComponent implements OnInit { return ''; } + get magistrateUserNameError(): string { + const control = this.requestCreationForm.get('magistrateUsername'); + if (!this.showErrors || control?.valid) return ''; + + if (control?.errors?.['required']) { + return "Veuillez renseigner l'adresse email du magistrat."; + } else if (control?.errors?.['pattern']) { + return "Le format de l'adresse email est invalide. Utilisez un email se terminant par @justice.fr."; + } + + return ''; + } + + get magistrateLastNameError(): string { + const control = this.requestCreationForm.get('magistrateLastName'); + if (!this.showErrors || control?.valid) return ''; + + if (control?.errors?.['required']) { + return 'Veuillez renseigner le nom du magistrat.'; + } + + return ''; + } + + get magistrateFirstNameError(): string { + const control = this.requestCreationForm.get('magistrateFirstName'); + if (!this.showErrors || control?.valid) return ''; + + if (control?.errors?.['required']) { + return 'Veuillez renseigner le prénom du magistrat.'; + } + + return ''; + } + + get magistrateIdError(): string { + const control = this.requestCreationForm.get('magistrateId'); + if (!this.showErrors || control?.valid) return ''; + + if (control?.errors?.['required']) { + return 'Le magistrat doit être renseigné.'; + } + + return ''; + } + get extraInfoError(): string { const control = this.requestCreationForm.get('extraInfo'); if (!this.showErrors) return ''; @@ -202,6 +288,7 @@ export class InformationInputComponent implements OnInit { return ''; } + get deliberationDateError(): string { const control = this.requestCreationForm.get('deliberationDate'); if (!this.showErrors || control?.valid) return ''; @@ -216,4 +303,17 @@ export class InformationInputComponent implements OnInit { return ''; } + + get delayAfterConsignationError(): string { + const control = this.requestCreationForm.get('delayAfterConsignation'); + if (!this.showErrors || control?.valid) return ''; + + if (control?.errors?.['required']) { + return 'Le délai doit être renseigné.'; + } else if (control?.errors?.['mustBePositiveInteger']) { + return 'Veuillez entrer un nombre entier positif, comme 1, 2 ...'; + } + + return ''; + } } diff --git a/src/app/component/court/request-creation/request-creation.component.html b/src/app/component/court/request-creation/request-creation.component.html index 52c0098c7d530aab6149e08d3ea93c8e1d0d1855..bb6785543df5e49d5669bbb14c3e9e32a7ca96d7 100644 --- a/src/app/component/court/request-creation/request-creation.component.html +++ b/src/app/component/court/request-creation/request-creation.component.html @@ -13,13 +13,12 @@ </div> </div> -<app-stepper - id="stepper" - [stepNumber]="activeStep" +<dsfr-stepper [totalSteps]="steps.length" - [title]="steps[activeStep - 1]" - [titleNext]="activeStep !== steps.length ? steps[activeStep] : ''"> -</app-stepper> + [currentStep]="activeStep" + [currentStepTitle]="steps[activeStep - 1]" + [nextStepTitle]="activeStep !== steps.length ? steps[activeStep] : ''"> +</dsfr-stepper> <app-type-selection [hidden]="activeStep !== 1" diff --git a/src/app/component/court/request-creation/request-creation.component.ts b/src/app/component/court/request-creation/request-creation.component.ts index d3e1b7a1ce6758c1a8cc668d0bda227da2247dd4..16e8ba03b504eecda9e005b90ed1edd20c0767da 100644 --- a/src/app/component/court/request-creation/request-creation.component.ts +++ b/src/app/component/court/request-creation/request-creation.component.ts @@ -17,7 +17,6 @@ import { Expert } from '../../../model/expert'; import { FileDuplicated } from '../../../model/file-duplicated'; import { FileType } from '../../../model/file-type'; import { FileUpload } from '../../../model/file-upload'; -import { Magistrate } from '../../../model/magistrate'; import { Request } from '../../../model/request'; import { RequestCreation } from '../../../model/request-creation'; import { RequestExpertStatus } from '../../../model/request-expert-status'; @@ -54,10 +53,28 @@ export class RequestCreationComponent implements OnInit { ] ], courtAides: [[]], - magistrate: [ + unknownMagistrate: [false, Validators.required], + magistrateId: [ null, this.userService.isCourtAide ? [Validators.required] : [] ], + magistrateUsername: [ + { value: '', disabled: true }, + this.userService.isCourtAide + ? [ + Validators.required, + Validators.pattern("^[a-zA-Z0-9._%+\\-']+@justice\\.fr$") + ] + : [] + ], + magistrateFirstName: [ + { value: '', disabled: true }, + this.userService.isCourtAide ? [Validators.required] : [] + ], + magistrateLastName: [ + { value: '', disabled: true }, + this.userService.isCourtAide ? [Validators.required] : [] + ], procedureId: ['', [Validators.required, Validators.pattern('^\\S+$')]], extraInfo: ['', Validators.maxLength(1000)], noDeliberationDate: [false, Validators.required], @@ -73,6 +90,22 @@ export class RequestCreationComponent implements OnInit { } ] ], + + delayAfterConsignation: [ + null, + [ + Validators.required, + (control: AbstractControl) => { + const value = control.value; + if (!value) return null; + const parsedValue = Number(value); + const isPositiveInteger = + Number.isInteger(parsedValue) && parsedValue > 0; + return isPositiveInteger ? null : { mustBePositiveInteger: true }; + } + ] + ], + noMissionDeadline: [false, Validators.required], missionDeadline: [ null, @@ -178,20 +211,23 @@ export class RequestCreationComponent implements OnInit { }); this.requestCreationForm.get('type')?.valueChanges.subscribe(type => { - const deliberationDateCtrl = - this.requestCreationForm.get('deliberationDate'); - const missionDeadlineCtrl = - this.requestCreationForm.get('missionDeadline'); - - if ([RequestType.PENAL, RequestType.CONTROL_PENAL].includes(type)) { - deliberationDateCtrl?.reset(); - deliberationDateCtrl?.disable(); - missionDeadlineCtrl?.enable(); - } else { - missionDeadlineCtrl?.reset(); - missionDeadlineCtrl?.disable(); - deliberationDateCtrl?.enable(); - } + const isPenalForm = [ + RequestType.PENAL, + RequestType.CONTROL_PENAL + ].includes(type); + + this.requestCreationForm + .get('deliberationDate') + ?.reset({ value: null, disabled: isPenalForm }); + + this.requestCreationForm.get('delayAfterConsignation')?.reset({ + value: null, + disabled: isPenalForm + }); + + this.requestCreationForm + .get('missionDeadline') + ?.reset({ value: null, disabled: !isPenalForm }); }); if (!history.state.duplicateRequestId) { @@ -272,7 +308,7 @@ export class RequestCreationComponent implements OnInit { requestCreationForm: FormGroup; steps = [ - 'Type de demande', + 'Votre demande s’inscrit dans le cadre d’une procédure', 'Sélection des experts', 'Saisie des informations', 'Confirmation' @@ -294,29 +330,40 @@ export class RequestCreationComponent implements OnInit { } } + private stringValueOf(formControl: string): string { + return this.requestCreationForm.get(formControl)?.value; + } + + private booleanValueOf(formControl: string): boolean { + return this.requestCreationForm.get(formControl)?.value; + } + + private numberValueOf(formControl: string): number { + return this.requestCreationForm.get(formControl)?.value; + } + createRequest() { if (!this.requestCreationForm.valid) return; const requestCreation: RequestCreation = { type: RequestType[ this.requestCreationForm.get('type')?.value as keyof typeof RequestType ], - procedureId: this.requestCreationForm.get('procedureId')?.value, - extraInfo: this.requestCreationForm.get('extraInfo')?.value, - urgent: this.requestCreationForm.get('emergencyMode')?.value, + procedureId: this.stringValueOf('procedureId'), + extraInfo: this.stringValueOf('extraInfo'), + urgent: this.booleanValueOf('emergencyMode'), expertIds: this.requestCreationForm .get('selectedExperts') ?.value.map((e: Expert) => e.id), - ...(this.userService.isCourtAide && { - magistrateId: ( - this.requestCreationForm.get('magistrate')?.value as Magistrate - ).id - }), + clerkIds: this.requestCreationForm .get('courtAides') ?.value.map((c: CourtAide) => c.id), deliberationDate: Utils.getDateISoString( this.requestCreationForm.get('deliberationDate')?.value ), + delayAfterConsignation: this.requestCreationForm.get( + 'delayAfterConsignation' + )?.value, missionDeadline: Utils.getDateISoString( this.requestCreationForm.get('missionDeadline')?.value ), @@ -330,6 +377,21 @@ export class RequestCreationComponent implements OnInit { .filter(d => d.selected) .map(d => d.path) }; + + if (this.userService.isCourtAide) { + if (this.booleanValueOf('unknownMagistrate')) { + requestCreation.magistrateUsername = + this.stringValueOf('magistrateUsername'); + requestCreation.magistrateFirstName = this.stringValueOf( + 'magistrateFirstName' + ); + requestCreation.magistrateLastName = + this.stringValueOf('magistrateLastName'); + } else { + requestCreation.magistrateId = this.numberValueOf('magistrateId'); + } + } + this.submitting = true; // create the request, get the id and then upload the files sequentially // warning: to upload the files in parallel, update backend mechanism and use forkJoin here @@ -426,7 +488,14 @@ export class RequestCreationComponent implements OnInit { this.requestCreationForm .get('courtAides') ?.setValue(request.aides.filter(c => c.jurisdiction.id === jId)); - if (request.magistrate.jurisdiction.id === jId) - this.requestCreationForm.get('magistrate')?.setValue(request.magistrate); + if (request.magistrate.jurisdiction.id === jId) { + this.requestCreationForm + .get('magistrateId') + ?.setValue(request.magistrate.id); + + this.requestCreationForm + .get('magistrateFirstName') + ?.setValue(request.magistrate.name); + } } } diff --git a/src/app/component/court/request-creation/type-selection/type-selection.component.css b/src/app/component/court/request-creation/type-selection/type-selection.component.css index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b94410cea6489dd84bcda63bbaad3ac43255be97 100644 --- a/src/app/component/court/request-creation/type-selection/type-selection.component.css +++ b/src/app/component/court/request-creation/type-selection/type-selection.component.css @@ -0,0 +1,12 @@ +::ng-deep dsfr-card .fr-card { + border: 1px solid var(--blue-ecume-975-75-active); + border-radius: 50px; + background: var(--blue-ecume-975-75); + box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.21); +} +::ng-deep dsfr-card .fr-card__body { + height: 7.5rem; +} +::ng-deep dsfr-card .fr-card__title { + text-align: center; +} diff --git a/src/app/component/court/request-creation/type-selection/type-selection.component.html b/src/app/component/court/request-creation/type-selection/type-selection.component.html index d0271a8995e75f4e6797d23899b81135d597cb00..41b041bf34be9b6d892cb16602eab02a0e20634d 100644 --- a/src/app/component/court/request-creation/type-selection/type-selection.component.html +++ b/src/app/component/court/request-creation/type-selection/type-selection.component.html @@ -1,12 +1,12 @@ -<dsfr-form-radio - legend="Votre demande s’inscrit dans le cadre d’une procédure :" - [formControl]="getTypeAsControl()" - [options]="options"> -</dsfr-form-radio> - -<button - class="fr-btn" - (click)="stepChanged.emit(1)" - [disabled]="!requestCreationForm.get('type')?.valid"> - Étape suivante -</button> +<div class="fr-grid-row fr-grid-row--gutters"> + <div + class="fr-col-12 fr-col-sm-6 fr-col-md-6 fr-col-lg-4" + *ngFor="let option of options"> + <dsfr-card + [heading]="option.label" + size="SM" + route="#" + (cardSelect)="chooseType(option.value)"> + </dsfr-card> + </div> +</div> diff --git a/src/app/component/court/request-creation/type-selection/type-selection.component.ts b/src/app/component/court/request-creation/type-selection/type-selection.component.ts index eb6424a17a2e7aa248f8f9cdf48f64eac641f120..16b3f9210f2c50638d287f24672dccd918d0d237 100644 --- a/src/app/component/court/request-creation/type-selection/type-selection.component.ts +++ b/src/app/component/court/request-creation/type-selection/type-selection.component.ts @@ -1,17 +1,14 @@ +import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { - DsfrFormRadioModule, - DsfrFormSelectModule, - DsfrRadio -} from '@edugouvfr/ngx-dsfr'; -import { RequestType } from '../../../../model/request-type'; +import { FormGroup } from '@angular/forms'; +import { DsfrCardModule, DsfrRadio } from '@edugouvfr/ngx-dsfr'; import Utils from '../../../../helper/utils'; +import { RequestType } from '../../../../model/request-type'; @Component({ selector: 'app-type-selection', standalone: true, - imports: [DsfrFormSelectModule, ReactiveFormsModule, DsfrFormRadioModule], + imports: [DsfrCardModule, CommonModule], templateUrl: './type-selection.component.html', styleUrl: './type-selection.component.css' }) @@ -20,7 +17,7 @@ export class TypeSelectionComponent implements OnInit { requestCreationForm: FormGroup; @Output() - stepChanged = new EventEmitter<1>(); + private readonly stepChanged = new EventEmitter<1>(); options: DsfrRadio[]; @@ -33,7 +30,9 @@ export class TypeSelectionComponent implements OnInit { }); } - getTypeAsControl(): FormControl { - return this.requestCreationForm.get('type') as FormControl; + chooseType(type: string) { + const control = this.requestCreationForm.get('type'); + control?.setValue(type); + this.stepChanged.emit(1); } } diff --git a/src/app/component/court/service-select/service-select.component.ts b/src/app/component/court/service-select/service-select.component.ts index 7bebf31193d40268adb6c650cd36b6e3909f895d..bc96e72cdb834c2ead4edf022f7ae54c8d6473ba 100644 --- a/src/app/component/court/service-select/service-select.component.ts +++ b/src/app/component/court/service-select/service-select.component.ts @@ -17,7 +17,7 @@ export class ServiceSelectComponent implements OnInit { showServiceOther = false; @Output() valueChanged = new EventEmitter<CourtUserServiceUpdate | null>(); - constructor(private apiService: ApiService) {} + constructor(private readonly apiService: ApiService) {} ngOnInit(): void { this.serviceOptions$ = this.apiService diff --git a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.css b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.css index 3b2d04401d3b71692c81cac7d9c32a553e962f2e..e69f5172189b2f6ff6444baba798ce7559ad694d 100644 --- a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.css +++ b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.css @@ -9,8 +9,8 @@ .honorStatement { border: solid 1px var(--border-default-grey); + font-size: 0.875rem; border-radius: 4px; - padding: 20px; } :host ::ng-deep .fr-card__content { @@ -24,3 +24,18 @@ :host ::ng-deep .fr-card__desc { white-space: pre-wrap; } + +:host ::ng-deep dsfr-form-checkbox .fr-label { + color: var(--text-default-grey); + font-size: 0.875rem; +} + +:host ::ng-deep dsfr-notice .fr-container { + padding-left: 1rem; + padding-right: 1rem; +} + +:host ::ng-deep dsfr-notice .fr-notice { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} diff --git a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.html b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.html index 25f69af3323cb0e99e0de6eb97989314244b3bce..29cd7333df3178db5c63e1cf59754b3f9d848b04 100644 --- a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.html +++ b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.html @@ -1,37 +1,44 @@ -<section class="fr-accordion"> - <div class="fr-accordion__title"> - <button - class="fr-accordion__btn" - (click)="toggleIsExpanded()" - [attr.aria-expanded]="expandAtInit" - [attr.aria-controls]="'accordion-' + request.id"> - <div> - <div> - <span class="fr-text--bold fr-mr-2v"> - <span *ngIf="request.archived">[archive] </span> - <span class="underlined uppercase"> - {{ typeLabel }} - <span class="no-wrap">nº {{ request.procedureId }}</span> - </span> - </span> - <dsfr-badge - size="MD" - [label]="statusLabel" - [noIcon]="!awaitingResponse" - [customClass]="statusBadgeColor"></dsfr-badge> - </div> - <div class="fr-my-1v fr-ml-3v"> - <i - >Demande reçue le {{ request.sentOn | date: 'dd/MM/yy à HH:mm' }}</i - > - </div> - <div> - Magistrat : {{ request.magistrate.name }} ({{ request.jurisdiction }}) +<dsfr-accordion + [index]="'accordion-' + request.id" + [expanded]="this.isExpanded" + (expandedChange)="expandedChange($event)"> + <ng-container heading> + <div style="width: 100%"> + <div class="fr-text--bold fr-toggle fr-mb-3v"> + <span *ngIf="request.archived">[archive] </span> + <span class="underlined uppercase">{{ typeLabel }} </span> + <div class="fr-mr-3v"> + <span class="underlined uppercase">nº {{ request.procedureId }}</span> </div> + <dsfr-badge + size="MD" + [label]="statusBadge.label" + [noIcon]="statusBadge.noIcon" + [customClass]="statusBadge.customClass"></dsfr-badge> + </div> + <div *ngIf="decision && !isConfirmed" class="box-left fr-my-2v"> + <dsfr-notice + [heading]=" + 'La décision a été ajoutée.' + + (isCivilType ? ' Veuillez confirmer votre acceptation.' : '') + " + [type]="isCivilType ? 'warning' : 'info'"></dsfr-notice> + </div> + <div *ngIf="escrow && isConfirmed" class="box-left fr-my-2v"> + <dsfr-notice + heading="L'avis de consignation a été ajouté." + type="info"></dsfr-notice> + </div> + <div class="fr-my-1v fr-ml-3v"> + <i>Demande reçue le {{ request.sentOn | date: 'dd/MM/yy à HH:mm' }}</i> + </div> + <div> + Magistrat : {{ request.magistrate.name }} ({{ request.jurisdiction }}) </div> - </button> - </div> - <div class="fr-collapse" id="accordion-{{ request.id }}"> + </div> + </ng-container> + + <ng-container content *ngIf="this.openRequestId === this.request.id"> <div class="fr-mb-10v"> <app-expert-question-list [request]="request" @@ -44,157 +51,211 @@ <div class="fr-mb-10v"></div> <dsfr-ext-timeline [events]="events"></dsfr-ext-timeline> - <ol class="dsfrx-timeline-container" *ngIf="customEvent"> - <li class="timeline--bloc"> - <dsfr-card - [description]="customEvent.description ?? ''" - [badges]="customEvent.badges ?? []" - [hasFooter]="true"> - <ng-container footer> - <div - *ngIf="awaitingResponse && !request.archived" - class="fr-ml-8v fr-px-6v"> - <form [formGroup]="responseForm" (ngSubmit)="onSubmit()"> - <fieldset class="fr-fieldset"> - <div class="fr-fieldset__element"> - <div class="fr-radio-group"> - <input - type="radio" - id="accept-{{ request.id }}" - formControlName="answer" - value="{{ ANSWER_YES }}" /> - <label class="fr-label" for="accept-{{ request.id }}"> - J'accepte - </label> - </div> - </div> - <div - *ngIf="responseForm.get('answer')!.value === ANSWER_YES" - class="fr-fieldset__element fr-ml-8v fr-p-4v honorStatement"> - <dsfr-form-checkbox - id="honorStatement-{{ request.id }}" - label="Je jure d'accomplir ma mission, de faire mon rapport et de donner mon avis en mon honneur et conscience." - formControlName="honorStatement" - class="fr-mt-4v"> - </dsfr-form-checkbox> - </div> - - <div class="fr-fieldset__element"> - <div class="fr-radio-group"> - <input - type="radio" - id="refuse-{{ request.id }}" - formControlName="answer" - value="{{ ANSWER_NO }}" /> - <label class="fr-label" for="refuse-{{ request.id }}"> - Je refuse - </label> - </div> - </div> - <div - *ngIf="responseForm.get('answer')!.value === ANSWER_NO" - class="fr-fieldset__element fr-ml-8v"> - <div class="fr-select-group"> - <select - formControlName="refusalReason" - class="fr-select" - id="refusal-reason-{{ request.id }}"> - <option value="" selected disabled hidden> - Selectionnez une raison - </option> - <option - *ngFor="let reason of REFUSAL_REASON_ARRAY" - [value]="reason.key"> - {{ reason.value }} - </option> - </select> - </div> - <div - *ngIf=" - responseForm.get('refusalReason')?.value === - 'UNAVAILABLE' && !isUnavailibleSet - " - class="fr-alert fr-alert--sm fr-alert--warning fr-mt-5v"> - Vous devez mettre à jour votre disponibilité sur la page - <a routerLink="/expert/infos-compte">infos compte</a> - avant de pouvoir refuser pour cette raison. - </div> - <div - *ngIf=" - !isGeoConstraintSet && - responseForm.get('refusalReason')?.value === - 'GEO_CONSTRAINT' - " - class="fr-alert fr-alert--sm fr-alert--warning fr-mt-5v"> - Vous devez mettre à jour votre zone géographique - d'intervention sur la page - <a routerLink="/expert/infos-compte">infos compte</a> - avant de pouvoir refuser pour cette raison. - </div> - <div - *ngIf=" - responseForm.get('refusalReason')?.value === 'OTHER' - " - class="fr-fieldset__element fr-p-0 fr-m-0"> - <textarea - formControlName="refusalJustification" - class="fr-input" - id="refusal-justification-{{ request.id }}" - placeholder="Précisez svp" - rows="5"></textarea> - <div class="fr-messages-group fr-mt-2v"> - <p - class="fr-message fr-message--error" - *ngIf=" - responseForm.get('refusalJustification')?.errors?.[ - 'minlength' - ] - "> - Votre saisie doit contenir au moins 20 caractères. - </p> + @if (answerCustomEvent) { + <ng-container + *ngTemplateOutlet=" + itemTemplate; + context: { + item: answerCustomEvent, + customContent: answerCustomContent + } + "> + </ng-container> + <ng-template #answerCustomContent> + <form [formGroup]="responseForm" (ngSubmit)="onResponseSubmit()"> + <fieldset class="fr-fieldset fr-ml-8v fr-px-6v"> + <div class="fr-fieldset__element"> + <div class="fr-radio-group"> + <input + type="radio" + id="accept-{{ request.id }}" + formControlName="answer" + value="{{ ANSWER_YES }}" /> + <label class="fr-label" for="accept-{{ request.id }}"> + J'accepte + </label> + </div> + </div> + <div + *ngIf="responseForm.get('honorStatement')!.enabled" + class="fr-fieldset__element fr-ml-8v fr-p-4v honorStatement"> + <dsfr-form-checkbox + id="honorStatement-{{ request.id }}" + label="Je jure d'accomplir ma mission, de faire mon rapport et de donner mon avis en mon honneur et conscience." + formControlName="honorStatement"> + </dsfr-form-checkbox> + </div> - <p - class="fr-message fr-message--error" - *ngIf=" - responseForm.get('refusalJustification')?.errors?.[ - 'maxlength' - ] - "> - Votre saisie doit contenir au maximum 1000 caractères. - </p> - </div> - </div> - </div> - <div class="fr-fieldset__element fr-m-0 fr-mt-2v"> - <button - class="fr-btn" - type="submit" - [disabled]="responseForm.invalid"> - Valider - </button> - </div> - </fieldset> - </form> + <div class="fr-fieldset__element"> + <div class="fr-radio-group"> + <input + type="radio" + id="refuse-{{ request.id }}" + formControlName="answer" + value="{{ ANSWER_NO }}" /> + <label class="fr-label" for="refuse-{{ request.id }}"> + Je refuse + </label> + </div> </div> - <div *ngIf="isAccepted && decision"> - <div class="text-xl text-bold underlined box-center"> - DÉCISION + <div + *ngIf="responseForm.get('answer')!.value === ANSWER_NO" + class="fr-fieldset__element fr-ml-8v"> + <dsfr-ext-multiselect + name="role" + appendTo="body" + placeHolder=" " + selectionMode="single" + [options]="REFUSAL_REASON_ARRAY" + formControlName="refusalReason"></dsfr-ext-multiselect> + + <div + *ngIf=" + responseForm.get('refusalReason')?.value === 'UNAVAILABLE' && + !isUnavailibleSet + " + class="fr-alert fr-alert--sm fr-alert--warning fr-mt-5v"> + Vous devez mettre à jour votre disponibilité sur la page + <a routerLink="/expert/infos-compte">infos compte</a> + avant de pouvoir refuser pour cette raison. + </div> + <div + *ngIf=" + !isGeoConstraintSet && + responseForm.get('refusalReason')?.value === 'GEO_CONSTRAINT' + " + class="fr-alert fr-alert--sm fr-alert--warning fr-mt-5v"> + Vous devez mettre à jour votre zone géographique d'intervention + sur la page + <a routerLink="/expert/infos-compte">infos compte</a> + avant de pouvoir refuser pour cette raison. </div> - <div class="box-center fr-mt-4v"> - <app-file-download - [file]="decision" - [procedureId]="request.procedureId" - [requestArchived]="request.archived"></app-file-download> + <div + *ngIf="responseForm.get('refusalReason')?.value === 'OTHER'" + class="fr-fieldset__element fr-p-0 fr-m-0"> + <dsfr-form-input + formControlName="refusalJustification" + placeholder="Précisez svp" + type="textarea" + messageSeverity="error" + [message]="refusalJustificationError" + [rows]="5"></dsfr-form-input> </div> </div> - </ng-container> - </dsfr-card> - </li> - </ol> + <div class="fr-fieldset__element fr-m-0 fr-mt-4v"> + <dsfr-button + label="Valider" + type="submit" + size="SM" + [disabled]="responseForm.invalid" + ariaControls="response-form-submit"></dsfr-button> + </div> + </fieldset> + </form> + </ng-template> + } - <div *ngIf="!request.status" class="fr-messages-group fr-message--error"> - erreur - </div> - </div> -</section> + @if (decisionCustomEvent) { + <ng-container + *ngTemplateOutlet=" + itemTemplate; + context: { + item: decisionCustomEvent, + customContent: decisionCustomContent + } + "> + </ng-container> + <ng-template #decisionCustomContent> + <div class="box-center"> + <app-file-download + [file]="decision!" + [procedureId]="request.procedureId" + [requestArchived]="request.archived"></app-file-download> + </div> + </ng-template> + } + + @if (escrowCustomEvent) { + <ng-container + *ngTemplateOutlet=" + itemTemplate; + context: { + item: escrowCustomEvent, + customContent: escrowCustomContent + } + "> + </ng-container> + <ng-template #escrowCustomContent> + <div class="box-center"> + <app-file-download + [file]="escrow!" + [procedureId]="request.procedureId" + [requestArchived]="request.archived"></app-file-download> + </div> + </ng-template> + } + + @if (confirmCustomEvent) { + <ng-container + *ngTemplateOutlet=" + itemTemplate; + context: { + item: confirmCustomEvent, + customContent: confirmCustomContent + } + "> + </ng-container> + <ng-template #confirmCustomContent> + <form [formGroup]="confirmForm" (ngSubmit)="onConfirmSubmit()"> + <fieldset class="fr-fieldset fr-ml-4v fr-px-6v"> + <div class="fr-fieldset__element fr-p-4v honorStatement"> + <dsfr-form-checkbox + id="confirmStatement-{{ request.id }}" + label="J’accepte la mission confiée par {{ + request.jurisdiction + }} dans la procédure n° {{ request.procedureId }}." + formControlName="confirmStatement"> + </dsfr-form-checkbox> + </div> + <div + *ngIf="confirmForm.get('honorStatement')!.enabled" + class="fr-fieldset__element fr-p-4v honorStatement"> + <dsfr-form-checkbox + id="honorStatement-{{ request.id }}" + label="Je jure d'accomplir ma mission, de faire mon rapport et de donner mon avis en mon honneur et conscience." + formControlName="honorStatement"> + </dsfr-form-checkbox> + </div> + <div class="fr-fieldset__element fr-m-0 fr-p-0"> + <dsfr-button + label="Valider" + type="submit" + size="SM" + [disabled]="confirmForm.invalid" + ariaControls="confirm-form-submit"></dsfr-button> + </div> + </fieldset> + </form> + </ng-template> + } + + <ng-template + #itemTemplate + let-item="item" + let-customContent="customContent"> + <ol class="dsfrx-timeline-container" *ngIf="item"> + <li class="timeline--bloc"> + <dsfr-card + [description]="item.description ?? ''" + [badges]="item.badges ?? []" + [hasFooter]="true"> + <div footer> + <ng-container *ngTemplateOutlet="customContent"> </ng-container> + </div> + </dsfr-card> + </li> + </ol> + </ng-template> + </ng-container> +</dsfr-accordion> diff --git a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.ts b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.ts index 85e3ce0fb99b6f7ef27b91cc6c84db8ca0f6128e..6be45f18932d7878424deca570f7ea0586d4f579 100644 --- a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.ts +++ b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.ts @@ -8,14 +8,21 @@ import { Output, SimpleChanges } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { + AbstractControl, + FormBuilder, + FormGroup, + Validators +} from '@angular/forms'; import { DsfrBadgeSeverity } from '@edugouvfr/ngx-dsfr'; import { DsfrTimelineEvent } from '@edugouvfr/ngx-dsfr-ext'; -import { concat } from 'rxjs'; +import LocaleDateUtils from 'src/app/helper/dateTransfromUtils'; import RequestTimeLineEventsUtils from 'src/app/helper/requestTimeLineEventsUtils'; +import { BadgeProperties } from 'src/app/model/badge-properties'; import { ExpertAvailabilityStatus } from 'src/app/model/expert-status'; import { RequestType } from 'src/app/model/request-type'; import { ExpertService } from 'src/app/service/expert.service'; +import { NotificationService } from 'src/app/service/notification.service'; import Utils from '../../../../helper/utils'; import { FileDownload } from '../../../../model/file-download'; import { FileType } from '../../../../model/file-type'; @@ -30,7 +37,6 @@ import { } from '../../../../model/request-expert-status'; import { RequestForExpert } from '../../../../model/request-for-expert'; import { ApiService } from '../../../../service/api.service'; -import { AuthService } from '../../../../service/auth.service'; import { UserService } from '../../../../service/user.service'; @Component({ @@ -41,65 +47,110 @@ import { UserService } from '../../../../service/user.service'; export class ExpertRequestItemComponent implements OnInit, OnChanges { @Input() request: RequestForExpert; @Input() openRequestId: number; - @Input() page: number; // used after adding experts to open the right page - @Output() expandToggled = new EventEmitter<number>(); + @Output() + openRequest = new EventEmitter<number>(); + + @Input() page: number; // used after adding experts to open the right page - expandAtInit: boolean; isExpanded: boolean; + tomorrow: string; - statusBadgeColor: string; - statusLabel: string; + statusBadge: BadgeProperties; typeLabel: string; + decision?: FileDownload; + escrow?: FileDownload; + attachments?: FileDownload[]; + + deliberationDate: string; + decisionDate: string; + missionDeadline: string; + progressReportDate: string; + events: DsfrTimelineEvent[]; - customEvent: DsfrTimelineEvent | undefined; + answerCustomEvent?: DsfrTimelineEvent; + decisionCustomEvent?: DsfrTimelineEvent; + escrowCustomEvent?: DsfrTimelineEvent; + confirmCustomEvent?: DsfrTimelineEvent; responseForm: FormGroup; + confirmForm: FormGroup; - readonly ANSWER_YES = 'y'; - readonly ANSWER_NO = 'n'; + readonly ANSWER_YES: string = 'y'; + readonly ANSWER_NO: string = 'n'; readonly REFUSAL_REASON_ARRAY = Object.keys(REFUSAL_REASON_LABEL_ENUM).map( key => ({ - key: key, - value: REFUSAL_REASON_LABEL_ENUM[key as keyof typeof RefusalReason] + label: REFUSAL_REASON_LABEL_ENUM[key as keyof typeof RefusalReason], + value: key }) ); - isGeoConstraintSet = false; - isUnavailibleSet = false; + isGeoConstraintSet: boolean = false; + isUnavailibleSet: boolean = false; + isRegisteredCA: boolean = false; + + isCivilType: boolean = false; + isConfirmed: boolean = false; constructor( private readonly fb: FormBuilder, private readonly apiService: ApiService, private readonly userService: UserService, private readonly expertService: ExpertService, - private readonly authService: AuthService, + private readonly notificationService: NotificationService, private readonly datePipe: DatePipe ) {} ngOnInit(): void { - this.expandAtInit = this.request.id === this.openRequestId; + this.isExpanded = this.request.id === this.openRequestId; this.typeLabel = Utils.requestTypeShortDisplay(this.request.type); this.tomorrow = Utils.getTomorrow(); + + this.isCivilType = [ + RequestType.CIVIL, + RequestType.CONTROL_CIVIL, + RequestType.SUMMARY_PROCEEDINGS + ].includes(this.request.type); + + this.deliberationDate = LocaleDateUtils.dateFormat( + this.request.deliberationDate + ); + + this.decisionDate = LocaleDateUtils.dateFormat(this.request.decisionDate); + this.missionDeadline = LocaleDateUtils.dateFormat( + this.request.missionDeadline + ); + this.progressReportDate = LocaleDateUtils.dateFormat( + this.request.progressReportDate + ); + + this.decision = this.request.files?.find(f => f.type === FileType.DECISION); + this.escrow = this.request.files?.find(f => f.type === FileType.ESCROW); + this.attachments = this.request.files?.filter( + f => f.type === FileType.ATTACHMENT + ); + this.refrechStatusAndBadgeColor(); - this.initializeForm(); this.userService.getUser$().subscribe(user => { this.isGeoConstraintSet = !!user?.expert?.geoConstraint; + this.isRegisteredCA = !user?.expert?.notRegistered; this.isUnavailibleSet = user?.expert?.availabilityStatus !== ExpertAvailabilityStatus.AVAILABLE; - this.responseForm.get('refusalReason')?.updateValueAndValidity(); }); this.buildEvents(this.request); } ngOnChanges(changes: SimpleChanges): void { if (changes['openRequestId']) { - this.isExpanded = - this.request.id === changes['openRequestId'].currentValue; + if (this.request.id === this.openRequestId) { + setTimeout(() => { + Utils.scrollTo(`request-${this.request.id}`); + }, 500); + } } } @@ -113,36 +164,53 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { }); } - toggleIsExpanded(): void { - this.expandToggled.emit(this.isExpanded ? 0 : this.request.id); + expandedChange(isExpanded: boolean): void { + if (isExpanded) { + this.openRequest.emit(this.request.id); + } } - private initializeForm(): void { - this.responseForm = this.fb.group({ - answer: ['', Validators.required], - honorStatement: [false], - refusalReason: [''], - refusalJustification: [''] + private initConfirmForm(): void { + this.confirmForm = this.fb.group({ + honorStatement: [ + { + value: null, + disabled: this.isRegisteredCA + }, + [ + Validators.required, + (control: AbstractControl) => + control.value === true ? null : { mustBeTrue: true } + ] + ], + confirmStatement: [ + null, + [ + Validators.required, + (control: AbstractControl) => + control.value === true ? null : { mustBeTrue: true } + ] + ] }); - - this.handleDynamicValidation(); } - private handleDynamicValidation(): void { - this.responseForm.get('answer')?.valueChanges.subscribe(answer => { - const honorStatement = this.responseForm.get('honorStatement'); - const refusalReason = this.responseForm.get('refusalReason'); - - honorStatement?.clearValidators(); - refusalReason?.clearValidators(); - - if (answer === this.ANSWER_YES) { - honorStatement?.setValidators(Validators.requiredTrue); - refusalReason?.setValue(''); - } else if (answer === this.ANSWER_NO) { - refusalReason?.setValidators([ + private initResponseForm(): void { + this.responseForm = this.fb.group({ + answer: ['', Validators.required], + honorStatement: [ + { value: null, disabled: true }, + [ + Validators.required, + (control: AbstractControl) => + control.value === true ? null : { mustBeTrue: true } + ] + ], + + refusalReason: [ + '', + [ Validators.required, - control => { + (control: AbstractControl) => { return (!this.isGeoConstraintSet && control.value === RefusalReason.GEO_CONSTRAINT) || (!this.isUnavailibleSet && @@ -150,33 +218,40 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { ? { invalid: '' } : null; } - ]); - honorStatement?.setValue(false); - } - - refusalReason?.updateValueAndValidity(); - honorStatement?.updateValueAndValidity(); - }); - - this.responseForm.get('refusalReason')?.valueChanges.subscribe(reason => { - const justification = this.responseForm.get('refusalJustification'); - - justification?.clearValidators(); - justification?.reset(''); - - if (reason === RefusalReason.OTHER) { - justification?.setValidators([ + ] + ], + refusalJustification: [ + { value: '', disabled: true }, + [ Validators.required, Validators.minLength(20), Validators.maxLength(1000) - ]); - } + ] + ] + }); + + this.responseForm.get('answer')?.valueChanges.subscribe(answer => { + this.responseForm.get('honorStatement')?.reset({ + value: null, + disabled: + this.isRegisteredCA || this.isCivilType || answer === this.ANSWER_NO + }); - justification?.updateValueAndValidity(); + this.responseForm.get('refusalReason')?.reset({ + value: null, + disabled: answer === this.ANSWER_YES + }); + }); + + this.responseForm.get('refusalReason')?.valueChanges.subscribe(reason => { + this.responseForm.get('refusalJustification')?.reset({ + value: null, + disabled: reason !== RefusalReason.OTHER + }); }); } - onSubmit(): void { + onResponseSubmit(): void { if (this.responseForm.value.answer === this.ANSWER_YES) { this.accept(); } else { @@ -184,24 +259,60 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { } } - get awaitingResponse(): boolean { - return this.request.status === RequestExpertStatus.SENT; + onConfirmSubmit() { + const values = this.confirmForm.value; + const confirmStatement = values.confirmStatement as boolean; + console.log(confirmStatement); + + if (confirmStatement) { + this.apiService.confirmRequest(this.request.id).subscribe({ + next: () => { + this.notificationService.toastSuccess( + 'La demande a été confirmée avec succès.' + ); + this.refresh(); + }, + error: () => + this.notificationService.toastError( + "Une erreur s'est produite lors de la confirmation de la demande. Veuillez réessayer." + ) + }); + } } - get isAccepted(): boolean { - return this.request.status === RequestExpertStatus.ACCEPTED; + private addRequestAcceptedEvent() { + if (this.request.acceptOn) { + this.events.push( + RequestTimeLineEventsUtils.createRequestEvent( + this.request.acceptOn, + 'Demande acceptée.', + 'SUCCESS', + this.decision + ? '' + : 'Vous serez averti par e-mail dès que la décision sera disponible.' + ) + ); + } } - get attachments(): FileDownload[] { - return (this.request.files || []).filter( - f => f.type === FileType.ATTACHMENT - ); + private addRequestDecisionEvent() { + if (this.decision) { + this.decisionCustomEvent = RequestTimeLineEventsUtils.createRequestEvent( + undefined, + 'Decision ajoutée.', + 'INFO' + ); + } } - get decision(): FileDownload | null { - return ( - (this.request.files || []).find(f => f.type === FileType.DECISION) || null - ); + private addRequestEscrowEvent() { + if (this.escrow) { + this.escrowCustomEvent = RequestTimeLineEventsUtils.createRequestEvent( + undefined, + 'Avis de consignation ajouté.', + 'INFO' + ); + } } private addRequestSendEvent() { @@ -209,15 +320,21 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { let description = ''; if (this.request.type === RequestType.PENAL) { - if (this.request.missionDeadline) { - description += `<div class="fr-mb-2v">Date fixée pour l'exécution de la mission: <b>${this.datePipe.transform(this.request.missionDeadline, 'dd/MM/yy')}</b></div>`; + if (this.missionDeadline) { + description += `<div class="fr-mb-2v">Date fixée pour l'exécution de la mission: <b>${this.missionDeadline}</b></div>`; } - if (this.request.progressReportDate) { - description += `<div class="fr-mb-2v">Date de dépôt du rapport d’étape: <b>${this.datePipe.transform(this.request.progressReportDate, 'dd/MM/yy')}</b></div>`; + if (this.progressReportDate) { + description += `<div class="fr-mb-2v">Date de dépôt du rapport d’étape: <b>${this.progressReportDate}</b></div>`; } - } else if (this.request.deliberationDate) { - description += `<div class="fr-mb-2v">Date du délibéré: <b>${this.datePipe.transform(this.request.deliberationDate, 'dd/MM/yy')}</b></div>`; + } else if (this.deliberationDate) { + description += `<div class="fr-mb-2v">Date du délibéré: <b>${this.deliberationDate}</b></div>`; + } else if (this.decisionDate) { + description += `<div class="fr-mb-2v">Date de la décision: <b>${this.decisionDate}</b></div>`; + } + + if (this.request.delayAfterConsignation) { + description += `<div class="fr-mb-2v">Délai (en mois) dans lequel vous devrez donner votre avis à compter de la consignation par les parties: <b>${this.request.delayAfterConsignation}</b></div>`; } description += `<u><b>Informations complémentaires: </b></u><div class="fr-mt-2v">${this.request.extraInfo?.length ? this.request.extraInfo : 'aucune information complémentaire'}</div>`; @@ -248,20 +365,6 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { ); } - private createCustomEvent( - date?: string, - badgeLabel?: string, - badgeSeverity?: DsfrBadgeSeverity, - description?: string - ) { - this.customEvent = RequestTimeLineEventsUtils.createRequestEvent( - date, - badgeLabel, - badgeSeverity, - description - ); - } - private addGrantedDaysEvents(request: RequestForExpert) { const eventsToAdd = RequestTimeLineEventsUtils.addGrantedDaysEvents( request.extraDaysGranted, @@ -275,19 +378,23 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { private buildEvents(requestExpert: RequestForExpert): void { this.events = []; - this.customEvent = undefined; + this.answerCustomEvent = undefined; + this.decisionCustomEvent = undefined; + this.confirmCustomEvent = undefined; this.addRequestSendEvent(); this.addGrantedDaysEvents(requestExpert); + this.addRequestAcceptedEvent(); switch (requestExpert.status) { case RequestExpertStatus.SENT: { + this.initResponseForm(); const description = `Réponse attendue ${this.request.paused ? '<s>' : ''}avant le <b>${this.datePipe.transform(this.request.deadline, 'dd/MM/yy à 23:59')}</b>${this.request.paused ? '</s>' : ''}.` + (requestExpert.paused ? '<br/><br/>Dans l’attente de réponse à votre question, le délai dont vous disposez pour accepter ou refuser la mission est suspendu. Vous pouvez tout de même choisir d’accepter ou de refuser la mission sans attendre.</em>' : ''); - this.createCustomEvent( + this.answerCustomEvent = RequestTimeLineEventsUtils.createRequestEvent( undefined, 'En attente de réponse.', 'WARNING', @@ -297,20 +404,37 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { break; } case RequestExpertStatus.ACCEPTED: { - this.addRequestLastEvent( - 'Demande acceptée.', - 'SUCCESS', - this.decision - ? '' - : 'Vous serez averti par e-mail dès que la décision sera disponible.' - ); - - if (this.decision) { - this.createCustomEvent(); + this.addRequestDecisionEvent(); + if (this.decision && this.isCivilType) { + this.initConfirmForm(); + this.confirmCustomEvent = + RequestTimeLineEventsUtils.createRequestEvent( + undefined, + 'En attente de confirmation.', + 'WARNING', + 'Afin de satisfaire à l’article 267 du code civil, veuillez confirmer votre acceptation s’il-vous-plaît.' + ); } break; } + + case RequestExpertStatus.CONFIRMED: { + this.addRequestDecisionEvent(); + this.addRequestEscrowEvent(); + this.events.push( + RequestTimeLineEventsUtils.createRequestEvent( + this.request.updatedOn, + 'Demande confirmée.', + 'SUCCESS', + this.escrow + ? '' + : "Vous serez averti par e-mail dès que l'avis de consignation sera disponible" + ) + ); + + break; + } case RequestExpertStatus.REFUSED: { const refusalReason = requestExpert.refusalReason ? `<b>Raison</b>: ${Utils.getRefusalReasonLabel(requestExpert.refusalReason)}.` @@ -338,17 +462,22 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { } } - accept(): void { + private accept(): void { this.apiService.acceptRequest(this.request.id).subscribe({ - next: () => this.refresh(), - error: () => { - // @ts-ignore - this.request.status = undefined; - } + next: () => { + this.notificationService.toastSuccess( + 'La demande a été acceptée avec succès.' + ); + this.refresh(); + }, + error: () => + this.notificationService.toastError( + "Une erreur s'est produite lors de l'acceptation de la demande. Veuillez réessayer." + ) }); } - refuse(): void { + private refuse(): void { const values = this.responseForm.value; const refusalReason = values.refusalReason as RefusalReason; const unavailableUntil: string = values.unavailableUntil; @@ -361,24 +490,41 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges { reasonDetail = values.refusalJustification; } - concat( - this.apiService.refuseRequest( - this.request.id, - refusalReason, - reasonDetail - ), - this.authService.getUserInfo() // in case of updated unavailability - ).subscribe({ - next: () => this.refresh(), - error: () => { - // @ts-ignore - this.request.status = undefined; - } - }); + this.apiService + .refuseRequest(this.request.id, refusalReason, reasonDetail) + .subscribe({ + next: () => { + this.notificationService.toastSuccess( + 'La demande a été refusée avec succès.' + ); + this.refresh(); + }, + error: () => + this.notificationService.toastError( + "Une erreur s'est produite lors du refus de la demande. Veuillez réessayer." + ) + }); + } + + private refrechStatusAndBadgeColor(): void { + this.isConfirmed = this.request.status === RequestExpertStatus.CONFIRMED; + this.statusBadge = { + label: REQUEST_EXPERT_STATUS_LABEL[this.request.status], + customClass: REQUEST_EXPERT_STATUS_COLOR[this.request.status], + noIcon: this.request.status !== RequestExpertStatus.SENT + }; } - refrechStatusAndBadgeColor(): void { - this.statusLabel = REQUEST_EXPERT_STATUS_LABEL[this.request.status]; - this.statusBadgeColor = REQUEST_EXPERT_STATUS_COLOR[this.request.status]; + get refusalJustificationError(): string { + const control = this.responseForm?.get('refusalJustification'); + if (control?.valid) return ''; + + if (control?.errors?.['minlength']) { + return 'Votre saisie doit contenir au moins 20 caractères.'; + } else if (control?.errors?.['maxlength']) { + return 'Votre saisie doit contenir au maximum 1000 caractères.'; + } + + return ''; } } diff --git a/src/app/component/expert/expert-request-list/expert-request-list.component.html b/src/app/component/expert/expert-request-list/expert-request-list.component.html index 670a41391e54d57bdd162c53bd9593f794ced212..c079ec6bdec3466bd4ed169dbc4fd563ffff2a10 100644 --- a/src/app/component/expert/expert-request-list/expert-request-list.component.html +++ b/src/app/component/expert/expert-request-list/expert-request-list.component.html @@ -6,16 +6,15 @@ class="fr-container--fluid fr-mb-3w fr-mt-10v"> <div class="fr-grid-row fr-grid-row--center"> <div class="fr-col-12 fr-col-md-8 fr-col-lg-7"> - <div class="fr-accordions-group"> + <dsfr-accordions-group> <app-expert-request-item *ngFor="let request of requestPage.elements" [request]="request" [id]="'request-' + request.id" [openRequestId]="openRequestId" - (expandToggled)=" - openRequestId = $event; scrollToRequest(openRequestId) - "></app-expert-request-item> - </div> + (openRequest)="openRequestId = $event"> + </app-expert-request-item> + </dsfr-accordions-group> </div> </div> </div> diff --git a/src/app/component/expert/expert-request-list/expert-request-list.component.ts b/src/app/component/expert/expert-request-list/expert-request-list.component.ts index 30eaa0934df663a24fd5bf4a9bd9339957a65514..b6479f1b5b9a44d6a695ed0e5215749610f99827 100644 --- a/src/app/component/expert/expert-request-list/expert-request-list.component.ts +++ b/src/app/component/expert/expert-request-list/expert-request-list.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit } from '@angular/core'; +import Utils from '../../../helper/utils'; +import { Page } from '../../../model/page'; import { RequestForExpert } from '../../../model/request-for-expert'; import { ApiService } from '../../../service/api.service'; -import { Page } from '../../../model/page'; -import Utils from '../../../helper/utils'; @Component({ selector: 'app-expert-request-list', @@ -14,7 +14,7 @@ export class ExpertRequestListComponent implements OnInit { openRequestId: number; - constructor(private apiService: ApiService) {} + constructor(private readonly apiService: ApiService) {} ngOnInit(): void { this.openRequestId = history.state.openRequestId; @@ -26,9 +26,6 @@ export class ExpertRequestListComponent implements OnInit { this.apiService.getRequestsOfExpert(page).subscribe(requestPage => { this.requestPage = requestPage; !isInitLoad && Utils.scrollTo('top'); - if (this.openRequestId) { - this.scrollToRequest(this.openRequestId); - } }); } @@ -36,10 +33,4 @@ export class ExpertRequestListComponent implements OnInit { this.openRequestId = 0; this.loadRequestPage(page); } - - scrollToRequest(requestId: number): void { - setTimeout(() => { - Utils.scrollTo(`request-${requestId}`); - }, 500); - } } diff --git a/src/app/component/layout/menu/menu.component.ts b/src/app/component/layout/menu/menu.component.ts index 7426fa8b0635f957264697dafdba4c149a6c6c55..92bafc16e7032b6a320767c0e09b17e200ffc78c 100644 --- a/src/app/component/layout/menu/menu.component.ts +++ b/src/app/component/layout/menu/menu.component.ts @@ -8,7 +8,7 @@ import { UserService } from '../../../service/user.service'; styleUrls: ['./menu.component.css'] }) export class MenuComponent implements OnInit { - constructor(private userService: UserService) {} + constructor(private readonly userService: UserService) {} menu: MenuItem[]; @@ -19,6 +19,7 @@ export class MenuComponent implements OnInit { case Role.MAGISTRATE: case Role.CLERK: case Role.CLERK_DIRECTOR: + case Role.ADMINISTRATIVE_ASSISTANT: case Role.ASSISTANT: case Role.ATTACHE: this.menu = [ diff --git a/src/app/helper/dateTransfromUtils.ts b/src/app/helper/dateTransfromUtils.ts new file mode 100644 index 0000000000000000000000000000000000000000..dce2fc92a808145c980b6e77590a6408a4360345 --- /dev/null +++ b/src/app/helper/dateTransfromUtils.ts @@ -0,0 +1,13 @@ +import { DatePipe } from '@angular/common'; + +export default class LocaleDateUtils { + private static readonly datePipe: DatePipe = new DatePipe('fr-FR'); + + static dateFormat(dateISOStr?: string): string { + return this.datePipe.transform(dateISOStr, 'dd/MM/yyyy') ?? ''; + } + + static dateWithHrsFormat(dateISOStr?: string): string { + return this.datePipe.transform(dateISOStr, 'dd/MM/yy à 23:59') ?? ''; + } +} diff --git a/src/app/helper/utils.ts b/src/app/helper/utils.ts index 165b19aadad1aa05dd61f660a0b0b00e30053a65..ba3d8934e74c003d6d24efac9c1bf61a7a099ede 100644 --- a/src/app/helper/utils.ts +++ b/src/app/helper/utils.ts @@ -19,7 +19,7 @@ export default class Utils { block: 'start' }); - static roleDisplay = (role: Role) => { + static readonly roleDisplay = (role: Role) => { switch (role) { case Role.EXPERT: return 'EXPERT·E'; @@ -29,6 +29,8 @@ export default class Utils { return 'GREFFIER·E'; case Role.CLERK_DIRECTOR: return 'DIRECTEUR·RICE DE GREFFE'; + case Role.ADMINISTRATIVE_ASSISTANT: + return 'ADJOINT·E ADMINISTRATIF·IVE'; case Role.ATTACHE: return 'ATTACHE·E DE JUSTICE'; case Role.ASSISTANT: @@ -38,7 +40,7 @@ export default class Utils { } }; - static roleDisplayShort = (role: Role) => { + static readonly roleDisplayShort = (role: Role) => { switch (role) { case Role.EXPERT: return 'E'; @@ -48,6 +50,8 @@ export default class Utils { return 'G'; case Role.CLERK_DIRECTOR: return 'DG'; + case Role.ADMINISTRATIVE_ASSISTANT: + return 'AA'; case Role.ATTACHE: return 'AT'; case Role.ASSISTANT: diff --git a/src/app/model/badge-properties.ts b/src/app/model/badge-properties.ts new file mode 100644 index 0000000000000000000000000000000000000000..72684d2850dd1db6e9120351231b10c8db3134c3 --- /dev/null +++ b/src/app/model/badge-properties.ts @@ -0,0 +1,5 @@ +export interface BadgeProperties { + label: string; + noIcon: boolean; + customClass: string; +} diff --git a/src/app/model/court-registration-form.ts b/src/app/model/court-registration-form.ts index 8a134a42ef3c8eb6142da4dc986bee819fe4a53b..7292ae1c8d150201c5da156bdac533a3bac8ab76 100644 --- a/src/app/model/court-registration-form.ts +++ b/src/app/model/court-registration-form.ts @@ -1,4 +1,5 @@ import { CourtUserServiceUpdate } from './court-user-service-update'; +import { CourtRole } from './role'; export interface CourtRegistrationForm { email: string; @@ -6,7 +7,7 @@ export interface CourtRegistrationForm { lastName: string; service: CourtUserServiceUpdate; jurisdictionId: number; - role: 'MAGISTRATE' | 'CLERK' | 'CLERK_DIRECTOR' | 'ASSISTANT' | 'ATTACHE'; + role: CourtRole; phoneLandline?: string; phoneMobile?: string; } diff --git a/src/app/model/file-type.ts b/src/app/model/file-type.ts index 34b3b481cf70225da2c365d230c0cd41499f5b9c..81802aed65e781d5175776eb45e9038defc7a3ac 100644 --- a/src/app/model/file-type.ts +++ b/src/app/model/file-type.ts @@ -1,4 +1,5 @@ export enum FileType { ATTACHMENT = 'ATTACHMENT', - DECISION = 'DECISION' + DECISION = 'DECISION', + ESCROW = 'ESCROW' } diff --git a/src/app/model/request-creation.ts b/src/app/model/request-creation.ts index 44571bf52ac547a1e5b1480b30cc31e10085d18d..327fa4792552e80e63fccc8a2cc6cc8356cbc0b2 100644 --- a/src/app/model/request-creation.ts +++ b/src/app/model/request-creation.ts @@ -8,7 +8,11 @@ export interface RequestCreation { expertIds: number[]; clerkIds: number[]; magistrateId?: number; + magistrateUsername?: string; + magistrateFirstName?: string; + magistrateLastName?: string; deliberationDate?: string; + delayAfterConsignation?: number; missionDeadline?: string; progressReportDate?: string; duplicatedFiles?: string[]; diff --git a/src/app/model/request-expert-status.ts b/src/app/model/request-expert-status.ts index d43aeb3160f816f5a9427bd21b60cbf5f7a3c1e2..c16647a7feb3667c24097ab9bce1b6c208a17366 100644 --- a/src/app/model/request-expert-status.ts +++ b/src/app/model/request-expert-status.ts @@ -3,6 +3,7 @@ export enum RequestExpertStatus { SENDING = 'SENDING', SENT = 'SENT', ACCEPTED = 'ACCEPTED', + CONFIRMED = 'CONFIRMED', REFUSED = 'REFUSED', REFUSED_AUTO = 'REFUSED_AUTO', CANCELLED = 'CANCELLED', @@ -15,6 +16,7 @@ export const REQUEST_EXPERT_STATUS_COLOR: Record<RequestExpertStatus, string> = [RequestExpertStatus.QUEUED]: 'fr-badge--new', [RequestExpertStatus.SENDING]: 'fr-badge--warning', [RequestExpertStatus.SENT]: 'fr-badge--warning', + [RequestExpertStatus.CONFIRMED]: 'fr-badge--success', [RequestExpertStatus.ACCEPTED]: 'fr-badge--success', [RequestExpertStatus.REFUSED]: 'fr-badge--error', [RequestExpertStatus.REFUSED_AUTO]: 'fr-badge--error', @@ -28,6 +30,7 @@ export const REQUEST_EXPERT_STATUS_LABEL: Record<RequestExpertStatus, string> = [RequestExpertStatus.QUEUED]: '???', [RequestExpertStatus.SENDING]: 'RSVP', [RequestExpertStatus.SENT]: 'RSVP', + [RequestExpertStatus.CONFIRMED]: 'Confirmée', [RequestExpertStatus.ACCEPTED]: 'Acceptée', [RequestExpertStatus.REFUSED]: 'Refusée', [RequestExpertStatus.REFUSED_AUTO]: 'Refus auto', diff --git a/src/app/model/request-expert.ts b/src/app/model/request-expert.ts index ffdb4cdd28f19247d94c7c1e4bf68c38d8996ec8..2875e2a37fe14204302e8870a8892cf5e36aa9f4 100644 --- a/src/app/model/request-expert.ts +++ b/src/app/model/request-expert.ts @@ -1,12 +1,13 @@ import { Expert } from './expert'; -import { RequestExpertStatus } from './request-expert-status'; import { RefusalReason } from './refusal-reason'; +import { RequestExpertStatus } from './request-expert-status'; export interface RequestExpert { expert: Expert; status: RequestExpertStatus; sentOn: string; updatedOn: string; + acceptOn: string; createdOn: string; timestamp: string; paused: boolean; diff --git a/src/app/model/request-for-expert.ts b/src/app/model/request-for-expert.ts index 553dcca32548398d682b5bc9b262db06bbb723dd..515bc491cc167c260881cd9d5e1b4ed3ce9820dd 100644 --- a/src/app/model/request-for-expert.ts +++ b/src/app/model/request-for-expert.ts @@ -11,12 +11,15 @@ export interface RequestForExpert { type: RequestType; extraInfo: string; deliberationDate?: string; + delayAfterConsignation?: number; + decisionDate?: string; missionDeadline?: string; progressReportDate?: string; sentOn: string; deadline: string; status: RequestExpertStatus; updatedOn: string; + acceptOn: string; createdOn: string; refusalReason?: RefusalReason; refusalJustification?: string; diff --git a/src/app/model/request-status.ts b/src/app/model/request-status.ts index 921c2648dfa0e00428cc77abc0a85e47902d06c6..c37157cc4aac4f21258e0b18455eeb3bb63ea1eb 100644 --- a/src/app/model/request-status.ts +++ b/src/app/model/request-status.ts @@ -3,6 +3,7 @@ export enum RequestStatus { ACCEPTED = 'ACCEPTED', REFUSED = 'REFUSED', COMPLETE = 'COMPLETE', + ESCROW_COMPLETED = 'ESCROW_COMPLETED', CANCELLED = 'CANCELLED', CANCELLED_AUTO = 'CANCELLED_AUTO' } @@ -12,6 +13,7 @@ export const REQUEST_STATUS_COLOR: Record<RequestStatus, string> = { [RequestStatus.ACCEPTED]: 'fr-badge--success', [RequestStatus.REFUSED]: 'fr-badge--error', [RequestStatus.COMPLETE]: 'fr-badge--success', + [RequestStatus.ESCROW_COMPLETED]: 'fr-badge--success', [RequestStatus.CANCELLED]: 'fr-badge--grey', [RequestStatus.CANCELLED_AUTO]: 'fr-badge--grey' }; @@ -21,6 +23,7 @@ export const REQUEST_STATUS_LABEL: Record<RequestStatus, string> = { [RequestStatus.ACCEPTED]: 'Acceptée', [RequestStatus.REFUSED]: 'Refusée', [RequestStatus.COMPLETE]: 'Décision', + [RequestStatus.ESCROW_COMPLETED]: 'Consignation', [RequestStatus.CANCELLED]: 'Annulée', [RequestStatus.CANCELLED_AUTO]: 'Annulée Auto' }; diff --git a/src/app/model/request-type.ts b/src/app/model/request-type.ts index 6a443527b64e6bdc6db02e3e10fd28d05646fc27..6808040f8b519ab12741ed7ca23d9dc8d19e4cb2 100644 --- a/src/app/model/request-type.ts +++ b/src/app/model/request-type.ts @@ -1,7 +1,8 @@ export enum RequestType { - SUMMARY_PROCEEDINGS = 'SUMMARY_PROCEEDINGS', CIVIL = 'CIVIL', + SUMMARY_PROCEEDINGS = 'SUMMARY_PROCEEDINGS', + CONTROL_CIVIL = 'CONTROL_CIVIL', - CONTROL_PENAL = 'CONTROL_PENAL', - PENAL = 'PENAL' + PENAL = 'PENAL', + CONTROL_PENAL = 'CONTROL_PENAL' } diff --git a/src/app/model/request-update-request.ts b/src/app/model/request-update-request.ts index 1a6d43152ab52a77a6f880fd75c29c06f720e076..df82a8ec629d271e51965133dfb5762c57b760e6 100644 --- a/src/app/model/request-update-request.ts +++ b/src/app/model/request-update-request.ts @@ -2,6 +2,7 @@ export interface RequestUpdateRequest { procedureId?: string; extraInfo?: string; deliberationDate?: string | null; + delayAfterConsignation?: number | null; missionDeadline?: string | null; progressReportDate?: string | null; } diff --git a/src/app/model/request.ts b/src/app/model/request.ts index 5634c9cf39aaf534c6d406f3f1ba3fd251e41ccf..02c69509d00dd0d335d421ed7ec633fcff3bbd91 100644 --- a/src/app/model/request.ts +++ b/src/app/model/request.ts @@ -25,6 +25,7 @@ export interface Request { files: FileDownload[]; archived: boolean; deliberationDate?: string; + delayAfterConsignation?: number; missionDeadline?: string; progressReportDate?: string; } @@ -42,7 +43,7 @@ export const ALL_REQUEST_TABS = [ tabId: 'AC', label: 'Acceptation', icon: 'fr-icon-checkbox-circle-line', - statues: [RequestExpertStatus.ACCEPTED] + statues: [RequestExpertStatus.ACCEPTED, RequestExpertStatus.CONFIRMED] }, { tabId: 'EC', diff --git a/src/app/model/role.ts b/src/app/model/role.ts index d4fbdcaf7348eb7ed8579ca6ec770223fc36cba9..bf67c2fed8bd3d685a09de8c127c08e4120fc06d 100644 --- a/src/app/model/role.ts +++ b/src/app/model/role.ts @@ -4,6 +4,29 @@ export enum Role { CLERK_DIRECTOR = 'CLERK_DIRECTOR', ASSISTANT = 'ASSISTANT', ATTACHE = 'ATTACHE', + ADMINISTRATIVE_ASSISTANT = 'ADMINISTRATIVE_ASSISTANT', EXPERT = 'EXPERT', ADMIN = 'ADMIN' } + +// Define COURT_AIDE_ROLES +export const COURT_AIDE_ROLES: Role[] = [ + Role.CLERK, + Role.CLERK_DIRECTOR, + Role.ADMINISTRATIVE_ASSISTANT, + Role.ASSISTANT, + Role.ATTACHE +]; + +// Define COURT_ROLES +export const COURT_ROLES = [ + Role.MAGISTRATE, + Role.CLERK, + Role.CLERK_DIRECTOR, + Role.ADMINISTRATIVE_ASSISTANT, + Role.ASSISTANT, + Role.ATTACHE +] as const; + +// Derive a strict literal union type from COURT_ROLES +export type CourtRole = (typeof COURT_ROLES)[number]; diff --git a/src/app/model/user-info.ts b/src/app/model/user-info.ts index d2c413ed01731400b17431dab801381b478dfd86..f599055ebcbca5a81e6353178bb3e215b8bf4bf4 100644 --- a/src/app/model/user-info.ts +++ b/src/app/model/user-info.ts @@ -1,12 +1,13 @@ -import { Role } from './role'; -import { Expert } from './expert'; import { AppealCourt } from './appeal-court'; -import { Jurisdiction } from './jurisdiction'; import { CourtUserService } from './court-user-service'; +import { Expert } from './expert'; +import { Jurisdiction } from './jurisdiction'; +import { Role } from './role'; export interface UserInfo { id?: number; name: string; + email: string; role: Role; accessToken: string; expert?: Expert; diff --git a/src/app/rest/api.rest.service.ts b/src/app/rest/api.rest.service.ts index 14c7bfb6f30e3541b0d4d8477e6110e07ed6f18c..4684f42c0854d1d0fc0f657b043c0b6002879aa7 100644 --- a/src/app/rest/api.rest.service.ts +++ b/src/app/rest/api.rest.service.ts @@ -170,6 +170,13 @@ export class ApiRestService { ); } + confirmRequest(requestId: number): Observable<void> { + return this.http.post<void>( + `${this.BASE_PATH}/expert/request/${requestId}/confirm`, + {} + ); + } + refuseRequest( requestId: number, reason: RefusalReason, diff --git a/src/app/service/api.service.ts b/src/app/service/api.service.ts index c0a13052098368d9f71d44b6cc96ffcf8dbd983d..bbe0fb514d704d5d80515e442fe1bd6e7415311a 100644 --- a/src/app/service/api.service.ts +++ b/src/app/service/api.service.ts @@ -40,7 +40,8 @@ export class ApiService { ...courtAides.filter(ca => ca.role === Role.CLERK_DIRECTOR), ...courtAides.filter(ca => ca.role === Role.CLERK), ...courtAides.filter(ca => ca.role === Role.ATTACHE), - ...courtAides.filter(ca => ca.role === Role.ASSISTANT) + ...courtAides.filter(ca => ca.role === Role.ASSISTANT), + ...courtAides.filter(ca => ca.role === Role.ADMINISTRATIVE_ASSISTANT) ]; }) ); @@ -131,6 +132,10 @@ export class ApiService { return this.apiRestService.acceptRequest(requestId); } + confirmRequest(requestId: number): Observable<void> { + return this.apiRestService.confirmRequest(requestId); + } + refuseRequest( requestId: number, reason: RefusalReason, diff --git a/src/app/service/crisp.service.spec.ts b/src/app/service/crisp.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..a6915278dea256df0b0866aa61c64097ee47b01f --- /dev/null +++ b/src/app/service/crisp.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { CrispService } from './crisp.service'; + +describe('CrispService', () => { + let service: CrispService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(CrispService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/service/crisp.service.ts b/src/app/service/crisp.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..5bbe5edcc929ed36d7f48e777857677558b0eb2d --- /dev/null +++ b/src/app/service/crisp.service.ts @@ -0,0 +1,82 @@ +import { Injectable } from '@angular/core'; +import { Crisp } from 'crisp-sdk-web'; +import { environment } from 'src/environments/environment'; +import Utils from '../helper/utils'; +import { Role } from '../model/role'; +import { UserInfo } from '../model/user-info'; +import { UserService } from './user.service'; + +@Injectable({ + providedIn: 'root' +}) +export class CrispService { + private readonly crispWebsiteId = environment.crispWebsiteId; + + constructor(protected userService: UserService) { + this.initializeCrisp(); + } + + /** + * Initialize Crisp chat widget and user subscription + */ + private initializeCrisp(): void { + if (this.crispWebsiteId) { + Crisp.configure(this.crispWebsiteId); + + // Subscribe to changes in user data + this.userService + .getUser$() + .subscribe(user => this.handleUserChange(user ?? undefined)); + } + } + + /** + * Handle Crisp session and user data updates + * @param user - User information from the UserService + */ + private handleUserChange(user?: UserInfo): void { + if (user && user.role === Role.ADMIN) { + Crisp.chat.hide(); + } else if (!user) { + Crisp.session.reset(); + } else { + this.updateCrispUser(user); + } + } + + /** + * Update Crisp user data with logged-in user information + * @param user - Logged-in user object + */ + private updateCrispUser(user: UserInfo): void { + const { email, name, role, phoneMobile, phoneLandline } = user; + + Crisp.user.setEmail(email); + + const displayRole = Utils.roleDisplay(role); + Crisp.user.setNickname(`${name} (${displayRole})`); + + const phone = this.determinePhoneNumber(phoneMobile, phoneLandline); + Crisp.user.setPhone(phone); + + Crisp.chat.show(); + } + + /** + * Determine the phone number to set for the user + * @param phoneMobile - Mobile phone number + * @param phoneLandline - Landline phone number + * @returns {string} - Selected phone number + */ + private determinePhoneNumber( + phoneMobile?: string, + phoneLandline?: string + ): string { + if (phoneMobile?.trim()) { + return phoneMobile; + } else if (phoneLandline?.trim()) { + return phoneLandline; + } + return ''; + } +} diff --git a/src/app/service/user.service.ts b/src/app/service/user.service.ts index fffc95ad9631eae572d843d02f0aeda320a4b753..0964ee25d350628b31950f020c78f83ff9f63815 100644 --- a/src/app/service/user.service.ts +++ b/src/app/service/user.service.ts @@ -1,14 +1,14 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { Jurisdiction } from '../model/jurisdiction'; -import { Role } from '../model/role'; +import { COURT_AIDE_ROLES, COURT_ROLES, CourtRole, Role } from '../model/role'; import { UserInfo } from '../model/user-info'; @Injectable({ providedIn: 'root' }) export class UserService { - private _user$ = new BehaviorSubject<UserInfo | null>(null); + private readonly _user$ = new BehaviorSubject<UserInfo | null>(null); getUser$(): Observable<UserInfo | null> { return this._user$.asObservable(); @@ -50,6 +50,8 @@ export class UserService { return 'greffier'; case Role.CLERK_DIRECTOR: return 'directeur-greffe'; + case Role.ADMINISTRATIVE_ASSISTANT: + return 'adjoint-administratif'; case Role.ATTACHE: return 'attache-justice'; case Role.ASSISTANT: @@ -76,21 +78,10 @@ export class UserService { } get isCourt(): boolean { - return [ - Role.MAGISTRATE, - Role.CLERK, - Role.CLERK_DIRECTOR, - Role.ATTACHE, - Role.ASSISTANT - ].includes(this.getRole()!); + return COURT_ROLES.includes(this.getRole()! as CourtRole); } get isCourtAide(): boolean { - return [ - Role.CLERK, - Role.CLERK_DIRECTOR, - Role.ATTACHE, - Role.ASSISTANT - ].includes(this.getRole()!); + return COURT_AIDE_ROLES.includes(this.getRole()!); } } diff --git a/src/environments/environment.demo.ts b/src/environments/environment.demo.ts index 187c35c0b67dd0c13e9502f7307340b535ba16d8..95d8f0a4bfc437d8a146380a55aac484ac0d39f1 100644 --- a/src/environments/environment.demo.ts +++ b/src/environments/environment.demo.ts @@ -1,7 +1,10 @@ -export const environment = { +import { Environment } from './environment.model'; + +export const environment: Environment = { envName: 'demo', production: false, apiUrl: process.env.NG_APP_API_URL, + crispWebsiteId: '', maxSelectedExperts: 3, maxFileSizeMb: 5 }; diff --git a/src/environments/environment.dev.ts b/src/environments/environment.dev.ts index 53f625dea80f753542511508f264bbef00498c79..46387565fdf2d9c5a6e265075e9fe334d4c497b7 100644 --- a/src/environments/environment.dev.ts +++ b/src/environments/environment.dev.ts @@ -1,7 +1,10 @@ -export const environment = { +import { Environment } from './environment.model'; + +export const environment: Environment = { envName: 'development', production: false, apiUrl: process.env.NG_APP_API_URL, + crispWebsiteId: '077412e6-1430-4997-b4e7-3df5edb51b69', maxSelectedExperts: 3, maxFileSizeMb: 5 }; diff --git a/src/environments/environment.model.ts b/src/environments/environment.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..7e8d0556a4976b796e8929a6a26b57393d3e66ca --- /dev/null +++ b/src/environments/environment.model.ts @@ -0,0 +1,8 @@ +export interface Environment { + envName: string; + production: boolean; + apiUrl: string; + crispWebsiteId: string; + maxSelectedExperts: number; + maxFileSizeMb: number; +} diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 0e34abd157c2e1725b2065f2391615b013682480..f0dfacc6128256d5ac115c06335f080bc1096037 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -1,7 +1,10 @@ -export const environment = { +import { Environment } from './environment.model'; + +export const environment: Environment = { envName: 'production', production: true, apiUrl: process.env.NG_APP_API_URL, + crispWebsiteId: '', maxSelectedExperts: 5, maxFileSizeMb: 5 }; diff --git a/src/environments/environment.staging.ts b/src/environments/environment.staging.ts index 31a52909528547759c94636f0d5244a6f88d4442..ba84b9e7ed780c456d856abe05ea3272ad30fff7 100644 --- a/src/environments/environment.staging.ts +++ b/src/environments/environment.staging.ts @@ -1,7 +1,10 @@ -export const environment = { +import { Environment } from './environment.model'; + +export const environment: Environment = { envName: 'staging', production: false, apiUrl: process.env.NG_APP_API_URL, + crispWebsiteId: '', maxSelectedExperts: 5, maxFileSizeMb: 5 }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index b816ec67cc2339b450164e713fa77c0900029ce8..59b4852d3bdb26d750f01dc9d9861d2eb096e871 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -1,7 +1,10 @@ -export const environment = { +import { Environment } from './environment.model'; + +export const environment: Environment = { envName: 'local', production: false, apiUrl: process.env.NG_APP_API_URL, + crispWebsiteId: '', maxSelectedExperts: 3, maxFileSizeMb: 5 };