diff --git a/package-lock.json b/package-lock.json index 5b0cfdb..771c739 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,13 +25,13 @@ "zone.js": "^0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^19.0.3", + "@angular-devkit/build-angular": "^19.1.3", "@angular-eslint/builder": "19.0.1", "@angular-eslint/eslint-plugin": "19.0.1", "@angular-eslint/eslint-plugin-template": "19.0.1", "@angular-eslint/schematics": "19.0.1", "@angular-eslint/template-parser": "19.0.1", - "@angular/cli": "^19.0.3", + "@angular/cli": "^19.1.3", "@angular/compiler-cli": "^19.0.3", "@angular/language-service": "^19.0.3", "@commitlint/cli": "^19.6.0", @@ -52,7 +52,7 @@ "karma-coverage-istanbul-reporter": "~3.0.3", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", - "ng-mocks": "^14.13.1", + "ng-mocks": "^14.13.2", "ng-packagr": "^19.0.1", "semantic-release": "^24.2.0", "semantic-release-cli": "^5.4.6", @@ -77,13 +77,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1900.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1900.4.tgz", - "integrity": "sha512-9XwZ21BPYS2vGOOwVB40fsMyuwJT0H1lWaAMo8Umwi6XbKBVfaWbEhjtR9dlarrySKtFuTz9hmTZkIXHLjXPdA==", + "version": "0.1901.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1901.3.tgz", + "integrity": "sha512-bXhcSP23MKGRuKjI0j+JEDssuFwyprVS0czIeNswj2VTuWyx9y8GjnH2kJXeDETbX0pNbUjThkMsk8cZ5b2YTg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.0.4", + "@angular-devkit/core": "19.1.3", "rxjs": "7.8.1" }, "engines": { @@ -93,19 +93,19 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.0.4.tgz", - "integrity": "sha512-n7fcRdNB7ed5j6aZI+qPI/1LylFv1OiRNgBIeJxX3HEmzQxsHHLcxWog2yZK2Fvw3390xFx/VjZaklITj6tBFA==", + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.1.3.tgz", + "integrity": "sha512-k9ZLXmtWFDxj/RN4RPKJ+tKDz1rUds7TZeqTvtfvOobgNzT5gSj0ZGlAlnMxcW3HJF7MuCTnAYua51tlJ5aTXw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1900.4", - "@angular-devkit/build-webpack": "0.1900.4", - "@angular-devkit/core": "19.0.4", - "@angular/build": "19.0.4", + "@angular-devkit/architect": "0.1901.3", + "@angular-devkit/build-webpack": "0.1901.3", + "@angular-devkit/core": "19.1.3", + "@angular/build": "19.1.3", "@babel/core": "7.26.0", - "@babel/generator": "7.26.2", + "@babel/generator": "7.26.3", "@babel/helper-annotate-as-pure": "7.25.9", "@babel/helper-split-export-declaration": "7.24.7", "@babel/plugin-transform-async-generator-functions": "7.25.9", @@ -114,21 +114,21 @@ "@babel/preset-env": "7.26.0", "@babel/runtime": "7.26.0", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "19.0.4", - "@vitejs/plugin-basic-ssl": "1.1.0", + "@ngtools/webpack": "19.1.3", + "@vitejs/plugin-basic-ssl": "1.2.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", "babel-loader": "9.2.1", "browserslist": "^4.21.5", "copy-webpack-plugin": "12.0.2", "css-loader": "7.1.2", - "esbuild-wasm": "0.24.0", - "fast-glob": "3.3.2", + "esbuild-wasm": "0.24.2", + "fast-glob": "3.3.3", "http-proxy-middleware": "3.0.3", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", - "less": "4.2.0", + "less": "4.2.1", "less-loader": "12.2.0", "license-webpack-plugin": "4.0.2", "loader-utils": "3.3.1", @@ -136,22 +136,22 @@ "open": "10.1.0", "ora": "5.4.1", "picomatch": "4.0.2", - "piscina": "4.7.0", + "piscina": "4.8.0", "postcss": "8.4.49", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", - "sass": "1.80.7", - "sass-loader": "16.0.3", + "sass": "1.83.1", + "sass-loader": "16.0.4", "semver": "7.6.3", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.36.0", + "terser": "5.37.0", "tree-kill": "1.2.2", "tslib": "2.8.1", - "webpack": "5.96.1", + "webpack": "5.97.1", "webpack-dev-middleware": "7.4.2", - "webpack-dev-server": "5.1.0", + "webpack-dev-server": "5.2.0", "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" }, @@ -161,14 +161,14 @@ "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.24.0" + "esbuild": "0.24.2" }, "peerDependencies": { "@angular/compiler-cli": "^19.0.0", "@angular/localize": "^19.0.0", "@angular/platform-server": "^19.0.0", "@angular/service-worker": "^19.0.0", - "@angular/ssr": "^19.0.4", + "@angular/ssr": "^19.1.3", "@web/test-runner": "^0.19.0", "browser-sync": "^3.0.2", "jest": "^29.5.0", @@ -177,7 +177,7 @@ "ng-packagr": "^19.0.0", "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.5 <5.7" + "typescript": ">=5.5 <5.8" }, "peerDependenciesMeta": { "@angular/localize": { @@ -218,14 +218,214 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular/build": { + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.1.3.tgz", + "integrity": "sha512-NRYBNAyCCn+6XEHv/guVZ+Y/Fan7klW6CL938G2aDzbVipSt5xCCRxYgXwACBv5BzieV16SFnQYldAzyNs0uUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1901.3", + "@babel/core": "7.26.0", + "@babel/helper-annotate-as-pure": "7.25.9", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.26.0", + "@inquirer/confirm": "5.1.1", + "@vitejs/plugin-basic-ssl": "1.2.0", + "beasties": "0.2.0", + "browserslist": "^4.23.0", + "esbuild": "0.24.2", + "fast-glob": "3.3.3", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "listr2": "8.2.5", + "magic-string": "0.30.17", + "mrmime": "2.0.0", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.8.0", + "rollup": "4.30.1", + "sass": "1.83.1", + "semver": "7.6.3", + "vite": "6.0.7", + "watchpack": "2.4.2" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.2.2" + }, + "peerDependencies": { + "@angular/compiler": "^19.0.0", + "@angular/compiler-cli": "^19.0.0", + "@angular/localize": "^19.0.0", + "@angular/platform-server": "^19.0.0", + "@angular/service-worker": "^19.0.0", + "@angular/ssr": "^19.1.3", + "less": "^4.2.0", + "ng-packagr": "^19.0.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.5 <5.8" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular/build/node_modules/vite": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.7.tgz", + "integrity": "sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.24.2", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.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 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@inquirer/confirm": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.1.tgz", + "integrity": "sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.2", + "@inquirer/type": "^3.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1900.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1900.4.tgz", - "integrity": "sha512-eovr5Am8EwxF7d/y0Hbfz/KYWnOXXVXVwquPUcg8JBI19lLbfctz4+71Vjz2qGroijr2FlZztRpmhd498SLt/A==", + "version": "0.1901.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1901.3.tgz", + "integrity": "sha512-sv5rL1/xdMuPxJskG+5FVyVpDH8/NMfvHn/bKUvdrYMcTowwepP5EVQ5MZDSfwWrksuCyqrIOxd0K2zIRohNSQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1900.4", + "@angular-devkit/architect": "0.1901.3", "rxjs": "7.8.1" }, "engines": { @@ -239,9 +439,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.0.4.tgz", - "integrity": "sha512-+imxIj1JLr2hbUYQePHgkTUKr0VmlxNSZvIREcCWtXUcdCypiwhJAtGXv6MfpB4hAx+FJZYEpVWeLwYOS/gW0A==", + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.1.3.tgz", + "integrity": "sha512-of/TKfJ/vL+/qvr4PbDTtqbFJGFHPfu6bEJrIZsLMYA+Mej8SyTx3kDm4LLnKQBtWVYDqkrxvcpOb4+NmHNLfA==", "dev": true, "license": "MIT", "dependencies": { @@ -267,15 +467,15 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.0.4.tgz", - "integrity": "sha512-2r6Qs4N5NSPho+qzegCYS8kIgylXyH4DHaS7HJ5+4XvM1I8V8AII8payLWkUK0i29XufVoD5XfPUFnjxZrBfYQ==", + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.1.3.tgz", + "integrity": "sha512-DfN45eJQtfXXeQwjb7vDqSJ+8e6BW3rXUB2i6IC2CbOYrLWhMBgfv3/uTm++IbCFW2zX3Yk3yqq3d4yua2no7w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.0.4", + "@angular-devkit/core": "19.1.3", "jsonc-parser": "3.3.1", - "magic-string": "0.30.12", + "magic-string": "0.30.17", "ora": "5.4.1", "rxjs": "7.8.1" }, @@ -403,104 +603,27 @@ "@angular/core": "19.0.3" } }, - "node_modules/@angular/build": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.0.4.tgz", - "integrity": "sha512-ubsNjLb54VkZwcPQ21Ke8aAHiIrRIcv7gG3R6/6XOoWeK1K2+tsv8bnO4mz5cHgzWOspLOT7FDC83NJjrKX3Nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1900.4", - "@babel/core": "7.26.0", - "@babel/helper-annotate-as-pure": "7.25.9", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-syntax-import-attributes": "7.26.0", - "@inquirer/confirm": "5.0.2", - "@vitejs/plugin-basic-ssl": "1.1.0", - "beasties": "0.1.0", - "browserslist": "^4.23.0", - "esbuild": "0.24.0", - "fast-glob": "3.3.2", - "https-proxy-agent": "7.0.5", - "istanbul-lib-instrument": "6.0.3", - "listr2": "8.2.5", - "magic-string": "0.30.12", - "mrmime": "2.0.0", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.7.0", - "rollup": "4.26.0", - "sass": "1.80.7", - "semver": "7.6.3", - "vite": "5.4.11", - "watchpack": "2.4.2" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "lmdb": "3.1.5" - }, - "peerDependencies": { - "@angular/compiler": "^19.0.0", - "@angular/compiler-cli": "^19.0.0", - "@angular/localize": "^19.0.0", - "@angular/platform-server": "^19.0.0", - "@angular/service-worker": "^19.0.0", - "@angular/ssr": "^19.0.4", - "less": "^4.2.0", - "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.5 <5.7" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@angular/ssr": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, "node_modules/@angular/cli": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.0.4.tgz", - "integrity": "sha512-jxnD9qkhelcRMCrHDCxNsWgn6HQCvMIj8uI0T2eB9Vy93q2YWUo/fWl2Sy4gFlR+VNeF+1hYhPLb/vqLLzjWuA==", + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.1.3.tgz", + "integrity": "sha512-GJGH3Xw7/zm12myA2R4Dg8+ny3p9tW00tx33YIK8vFjOUKycqgWaKfpYCe2s9egrm2Pew/DclHCD+IUwEAz1GQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1900.4", - "@angular-devkit/core": "19.0.4", - "@angular-devkit/schematics": "19.0.4", - "@inquirer/prompts": "7.1.0", + "@angular-devkit/architect": "0.1901.3", + "@angular-devkit/core": "19.1.3", + "@angular-devkit/schematics": "19.1.3", + "@inquirer/prompts": "7.2.1", "@listr2/prompt-adapter-inquirer": "2.0.18", - "@schematics/angular": "19.0.4", + "@schematics/angular": "19.1.3", "@yarnpkg/lockfile": "1.1.0", "ini": "5.0.0", "jsonc-parser": "3.3.1", "listr2": "8.2.5", - "npm-package-arg": "12.0.0", + "npm-package-arg": "12.0.1", "npm-pick-manifest": "10.0.0", "pacote": "20.0.0", - "resolve": "1.22.8", + "resolve": "1.22.10", "semver": "7.6.3", "symbol-observable": "4.0.0", "yargs": "17.7.2" @@ -818,13 +941,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -2316,22 +2439,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", - "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.3", - "@babel/types": "^7.26.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/types": { "version": "7.26.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", @@ -2636,28 +2743,436 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14.17.0" + "node": ">=18" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", - "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=18" @@ -2939,15 +3454,15 @@ } }, "node_modules/@inquirer/checkbox": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.3.tgz", - "integrity": "sha512-CEt9B4e8zFOGtc/LYeQx5m8nfqQeG/4oNNv0PUvXGG0mys+wR/WbJ3B4KfSQ4Fcr3AQfpiuFOi3fVvmPfvNbxw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.6.tgz", + "integrity": "sha512-PgP35JfmGjHU0LSXOyRew0zHuA9N6OJwOlos1fZ20b7j8ISeAdib3L+n0jIxBtX958UeEpte6xhG/gxJ5iUqMw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/figures": "^1.0.8", - "@inquirer/type": "^3.0.1", + "@inquirer/core": "^10.1.4", + "@inquirer/figures": "^1.0.9", + "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, @@ -2959,14 +3474,14 @@ } }, "node_modules/@inquirer/confirm": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.2.tgz", - "integrity": "sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.3.tgz", + "integrity": "sha512-fuF9laMmHoOgWapF9h9hv6opA5WvmGFHsTYGCmuFxcghIhEhb3dN0CdQR4BUMqa2H506NCj8cGX4jwMsE4t6dA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.0", - "@inquirer/type": "^3.0.1" + "@inquirer/core": "^10.1.4", + "@inquirer/type": "^3.0.2" }, "engines": { "node": ">=18" @@ -2976,14 +3491,14 @@ } }, "node_modules/@inquirer/core": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.1.tgz", - "integrity": "sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.4.tgz", + "integrity": "sha512-5y4/PUJVnRb4bwWY67KLdebWOhOc7xj5IP2J80oWXa64mVag24rwQ1VAdnj7/eDY/odhguW0zQ1Mp1pj6fO/2w==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.8", - "@inquirer/type": "^3.0.1", + "@inquirer/figures": "^1.0.9", + "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", @@ -2997,14 +3512,14 @@ } }, "node_modules/@inquirer/editor": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.0.tgz", - "integrity": "sha512-Z3LeGsD3WlItDqLxTPciZDbGtm0wrz7iJGS/uUxSiQxef33ZrBq7LhsXg30P7xrWz1kZX4iGzxxj5SKZmJ8W+w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.3.tgz", + "integrity": "sha512-S9KnIOJuTZpb9upeRSBBhoDZv7aSV3pG9TECrBj0f+ZsFwccz886hzKBrChGrXMJwd4NKY+pOA9Vy72uqnd6Eg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/type": "^3.0.1", + "@inquirer/core": "^10.1.4", + "@inquirer/type": "^3.0.2", "external-editor": "^3.1.0" }, "engines": { @@ -3015,14 +3530,14 @@ } }, "node_modules/@inquirer/expand": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.3.tgz", - "integrity": "sha512-MDszqW4HYBpVMmAoy/FA9laLrgo899UAga0itEjsYrBthKieDZNc0e16gdn7N3cQ0DSf/6zsTBZMuDYDQU4ktg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.6.tgz", + "integrity": "sha512-TRTfi1mv1GeIZGyi9PQmvAaH65ZlG4/FACq6wSzs7Vvf1z5dnNWsAAXBjWMHt76l+1hUY8teIqJFrWBk5N6gsg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/type": "^3.0.1", + "@inquirer/core": "^10.1.4", + "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -3033,9 +3548,9 @@ } }, "node_modules/@inquirer/figures": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.8.tgz", - "integrity": "sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.9.tgz", + "integrity": "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==", "dev": true, "license": "MIT", "engines": { @@ -3043,14 +3558,14 @@ } }, "node_modules/@inquirer/input": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.0.tgz", - "integrity": "sha512-16B8A9hY741yGXzd8UJ9R8su/fuuyO2e+idd7oVLYjP23wKJ6ILRIIHcnXe8/6AoYgwRS2zp4PNsW/u/iZ24yg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.3.tgz", + "integrity": "sha512-zeo++6f7hxaEe7OjtMzdGZPHiawsfmCZxWB9X1NpmYgbeoyerIbWemvlBxxl+sQIlHC0WuSAG19ibMq3gbhaqQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/type": "^3.0.1" + "@inquirer/core": "^10.1.4", + "@inquirer/type": "^3.0.2" }, "engines": { "node": ">=18" @@ -3060,14 +3575,14 @@ } }, "node_modules/@inquirer/number": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.3.tgz", - "integrity": "sha512-HA/W4YV+5deKCehIutfGBzNxWH1nhvUC67O4fC9ufSijn72yrYnRmzvC61dwFvlXIG1fQaYWi+cqNE9PaB9n6Q==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.6.tgz", + "integrity": "sha512-xO07lftUHk1rs1gR0KbqB+LJPhkUNkyzV/KhH+937hdkMazmAYHLm1OIrNKpPelppeV1FgWrgFDjdUD8mM+XUg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/type": "^3.0.1" + "@inquirer/core": "^10.1.4", + "@inquirer/type": "^3.0.2" }, "engines": { "node": ">=18" @@ -3077,14 +3592,14 @@ } }, "node_modules/@inquirer/password": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.3.tgz", - "integrity": "sha512-3qWjk6hS0iabG9xx0U1plwQLDBc/HA/hWzLFFatADpR6XfE62LqPr9GpFXBkLU0KQUaIXZ996bNG+2yUvocH8w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.6.tgz", + "integrity": "sha512-QLF0HmMpHZPPMp10WGXh6F+ZPvzWE7LX6rNoccdktv/Rov0B+0f+eyXkAcgqy5cH9V+WSpbLxu2lo3ysEVK91w==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/type": "^3.0.1", + "@inquirer/core": "^10.1.4", + "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2" }, "engines": { @@ -3095,22 +3610,22 @@ } }, "node_modules/@inquirer/prompts": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.1.0.tgz", - "integrity": "sha512-5U/XiVRH2pp1X6gpNAjWOglMf38/Ys522ncEHIKT1voRUvSj/DQnR22OVxHnwu5S+rCFaUiPQ57JOtMFQayqYA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.2.1.tgz", + "integrity": "sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^4.0.2", - "@inquirer/confirm": "^5.0.2", - "@inquirer/editor": "^4.1.0", - "@inquirer/expand": "^4.0.2", - "@inquirer/input": "^4.0.2", - "@inquirer/number": "^3.0.2", - "@inquirer/password": "^4.0.2", - "@inquirer/rawlist": "^4.0.2", - "@inquirer/search": "^3.0.2", - "@inquirer/select": "^4.0.2" + "@inquirer/checkbox": "^4.0.4", + "@inquirer/confirm": "^5.1.1", + "@inquirer/editor": "^4.2.1", + "@inquirer/expand": "^4.0.4", + "@inquirer/input": "^4.1.1", + "@inquirer/number": "^3.0.4", + "@inquirer/password": "^4.0.4", + "@inquirer/rawlist": "^4.0.4", + "@inquirer/search": "^3.0.4", + "@inquirer/select": "^4.0.4" }, "engines": { "node": ">=18" @@ -3120,14 +3635,14 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.3.tgz", - "integrity": "sha512-5MhinSzfmOiZlRoPezfbJdfVCZikZs38ja3IOoWe7H1dxL0l3Z2jAUgbBldeyhhOkELdGvPlBfQaNbeLslib1w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.6.tgz", + "integrity": "sha512-QoE4s1SsIPx27FO4L1b1mUjVcoHm1pWE/oCmm4z/Hl+V1Aw5IXl8FYYzGmfXaBT0l/sWr49XmNSiq7kg3Kd/Lg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/type": "^3.0.1", + "@inquirer/core": "^10.1.4", + "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -3138,15 +3653,15 @@ } }, "node_modules/@inquirer/search": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.3.tgz", - "integrity": "sha512-mQTCbdNolTGvGGVCJSI6afDwiSGTV+fMLPEIMDJgIV6L/s3+RYRpxt6t0DYnqMQmemnZ/Zq0vTIRwoHT1RgcTg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.6.tgz", + "integrity": "sha512-eFZ2hiAq0bZcFPuFFBmZEtXU1EarHLigE+ENCtpO+37NHCl4+Yokq1P/d09kUblObaikwfo97w+0FtG/EXl5Ng==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/figures": "^1.0.8", - "@inquirer/type": "^3.0.1", + "@inquirer/core": "^10.1.4", + "@inquirer/figures": "^1.0.9", + "@inquirer/type": "^3.0.2", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -3157,15 +3672,15 @@ } }, "node_modules/@inquirer/select": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.3.tgz", - "integrity": "sha512-OZfKDtDE8+J54JYAFTUGZwvKNfC7W/gFCjDkcsO7HnTH/wljsZo9y/FJquOxMy++DY0+9l9o/MOZ8s5s1j5wmw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.6.tgz", + "integrity": "sha512-yANzIiNZ8fhMm4NORm+a74+KFYHmf7BZphSOBovIzYPVLquseTGEkU5l2UTnBOf5k0VLmTgPighNDLE9QtbViQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.1", - "@inquirer/figures": "^1.0.8", - "@inquirer/type": "^3.0.1", + "@inquirer/core": "^10.1.4", + "@inquirer/figures": "^1.0.9", + "@inquirer/type": "^3.0.2", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, @@ -3177,9 +3692,9 @@ } }, "node_modules/@inquirer/type": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz", - "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.2.tgz", + "integrity": "sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==", "dev": true, "license": "MIT", "engines": { @@ -3366,9 +3881,9 @@ } }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", - "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz", + "integrity": "sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3452,9 +3967,9 @@ } }, "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.1.5.tgz", - "integrity": "sha512-ue5PSOzHMCIYrfvPP/MRS6hsKKLzqqhcdAvJCO8uFlDdj598EhgnacuOTuqA6uBK5rgiZXfDWyb7DVZSiBKxBA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.2.tgz", + "integrity": "sha512-WBSJT9Z7DTol5viq+DZD2TapeWOw7mlwXxiSBHgAzqVwsaVb0h/ekMD9iu/jDD8MUA20tO9N0WEdnT06fsUp+g==", "cpu": [ "arm64" ], @@ -3465,6 +3980,76 @@ "darwin" ] }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.2.tgz", + "integrity": "sha512-4S13kUtR7c/j/MzkTIBJCXv52hQ41LG2ukeaqw4Eng9K0pNKLFjo1sDSz96/yKhwykxrWDb13ddJ/ZqD3rAhUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.2.tgz", + "integrity": "sha512-uW31JmfuPAaLUYW7NsEU8gzwgDAzpGPwjvkxnKlcWd8iDutoPKDJi8Wk9lFmPEZRxVSB0j1/wDQ7N2qliR9UFA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.2.tgz", + "integrity": "sha512-4hdgZtWI1idQlWRp+eleWXD9KLvObgboRaVoBj2POdPEYvsKANllvMW0El8tEQwtw74yB9NT6P8ENBB5UJf5+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.2.tgz", + "integrity": "sha512-A0zjf4a2vM4B4GAx78ncuOTZ8Ka1DbTaG1Axf1e00Sa7f5coqlWiLg1PX7Gxvyibc2YqtqB+8tg1KKrE8guZVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.2.tgz", + "integrity": "sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", @@ -3479,6 +4064,76 @@ "darwin" ] }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@napi-rs/nice": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", @@ -3547,9 +4202,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.0.4.tgz", - "integrity": "sha512-N3WCbQz5ipdAZoSWHNf81RLET6+isq35+GZu9u0StpFtJCpXAmRRAv4vdMUYL7DLOzRmvEgwww6Rd5AwGeLFSw==", + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.1.3.tgz", + "integrity": "sha512-O6bKP8J8w8U5NfFCA4ukO82rpmvii5JtXQCo2FCwafZBfYuV5GHw97ezbdUIaTbPML+EC7gq9Y85EuFAyUHtAg==", "dev": true, "license": "MIT", "engines": { @@ -3559,7 +4214,7 @@ }, "peerDependencies": { "@angular/compiler-cli": "^19.0.0", - "typescript": ">=5.5 <5.7", + "typescript": ">=5.5 <5.8", "webpack": "^5.54.0" } }, @@ -4195,9 +4850,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.26.0.tgz", - "integrity": "sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", + "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", "cpu": [ "arm" ], @@ -4209,9 +4864,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.26.0.tgz", - "integrity": "sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", + "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", "cpu": [ "arm64" ], @@ -4223,9 +4878,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.26.0.tgz", - "integrity": "sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", + "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", "cpu": [ "arm64" ], @@ -4237,9 +4892,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.26.0.tgz", - "integrity": "sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", + "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", "cpu": [ "x64" ], @@ -4251,9 +4906,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.26.0.tgz", - "integrity": "sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", + "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", "cpu": [ "arm64" ], @@ -4265,9 +4920,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.26.0.tgz", - "integrity": "sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", + "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", "cpu": [ "x64" ], @@ -4279,9 +4934,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.26.0.tgz", - "integrity": "sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", + "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", "cpu": [ "arm" ], @@ -4293,9 +4948,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.26.0.tgz", - "integrity": "sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", + "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", "cpu": [ "arm" ], @@ -4307,9 +4962,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.26.0.tgz", - "integrity": "sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", + "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", "cpu": [ "arm64" ], @@ -4321,9 +4976,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.26.0.tgz", - "integrity": "sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", + "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", "cpu": [ "arm64" ], @@ -4334,10 +4989,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", + "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.26.0.tgz", - "integrity": "sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", + "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", "cpu": [ "ppc64" ], @@ -4349,9 +5018,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.26.0.tgz", - "integrity": "sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", + "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", "cpu": [ "riscv64" ], @@ -4363,9 +5032,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.26.0.tgz", - "integrity": "sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", + "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", "cpu": [ "s390x" ], @@ -4377,9 +5046,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz", - "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", + "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", "cpu": [ "x64" ], @@ -4390,9 +5059,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.26.0.tgz", - "integrity": "sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", + "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", "cpu": [ "x64" ], @@ -4404,9 +5073,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.26.0.tgz", - "integrity": "sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", + "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", "cpu": [ "arm64" ], @@ -4418,9 +5087,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.26.0.tgz", - "integrity": "sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", + "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", "cpu": [ "ia32" ], @@ -4432,9 +5101,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.26.0.tgz", - "integrity": "sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", + "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", "cpu": [ "x64" ], @@ -4466,14 +5135,14 @@ } }, "node_modules/@schematics/angular": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.0.4.tgz", - "integrity": "sha512-1fXBtkA/AjgMPxHLpGlw7NuT/wggCqAwBAmDnSiRnBBV7Pgs/tHorLgh7A9eoUi3c8CYCuAh8zqWNyjBGGigOQ==", + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.1.3.tgz", + "integrity": "sha512-LG3OKZG1Dl1lxNIc81jr82WSUaDCYlg/SEJ6A78p8AaZtTFKf14WenJTeG0XZPX45l26BdZSjn9MUTCggxQvGQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.0.4", - "@angular-devkit/schematics": "19.0.4", + "@angular-devkit/core": "19.1.3", + "@angular-devkit/schematics": "19.1.3", "jsonc-parser": "3.3.1" }, "engines": { @@ -5207,9 +5876,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", - "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.5.tgz", + "integrity": "sha512-GLZPrd9ckqEBFMcVM/qRFAP0Hg3qiVEojgEFsx/N/zKXsBzbGF6z5FBDpZ0+Xhp1xr+qRZYjfGr1cWHB9oFHSA==", "dev": true, "license": "MIT", "dependencies": { @@ -5308,9 +5977,9 @@ "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", - "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", "dev": true, "license": "MIT" }, @@ -5610,16 +6279,16 @@ } }, "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.2.0.tgz", + "integrity": "sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.6.0" + "node": ">=14.21.3" }, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" } }, "node_modules/@webassemblyjs/ast": { @@ -6490,9 +7159,9 @@ } }, "node_modules/beasties": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.1.0.tgz", - "integrity": "sha512-+Ssscd2gVG24qRNC+E2g88D+xsQW4xwakWtKAiGEQ3Pw54/FGdyo9RrfxhGhEv6ilFVbB7r3Lgx+QnAxnSpECw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.2.0.tgz", + "integrity": "sha512-Ljqskqx/tbZagIglYoJIMzH5zgssyp+in9+9sAyh15N22AornBeIDnb8EZ6Rk+6ShfMxd92uO3gfpT0NtZbpow==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6500,10 +7169,13 @@ "css-what": "^6.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", - "htmlparser2": "^9.0.0", + "htmlparser2": "^9.1.0", "picocolors": "^1.1.1", - "postcss": "^8.4.47", + "postcss": "^8.4.49", "postcss-media-query-parser": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" } }, "node_modules/before-after-hook": { @@ -9231,9 +9903,9 @@ } }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9809,9 +10481,9 @@ } }, "node_modules/esbuild": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", - "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -9822,36 +10494,37 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.0", - "@esbuild/android-arm": "0.24.0", - "@esbuild/android-arm64": "0.24.0", - "@esbuild/android-x64": "0.24.0", - "@esbuild/darwin-arm64": "0.24.0", - "@esbuild/darwin-x64": "0.24.0", - "@esbuild/freebsd-arm64": "0.24.0", - "@esbuild/freebsd-x64": "0.24.0", - "@esbuild/linux-arm": "0.24.0", - "@esbuild/linux-arm64": "0.24.0", - "@esbuild/linux-ia32": "0.24.0", - "@esbuild/linux-loong64": "0.24.0", - "@esbuild/linux-mips64el": "0.24.0", - "@esbuild/linux-ppc64": "0.24.0", - "@esbuild/linux-riscv64": "0.24.0", - "@esbuild/linux-s390x": "0.24.0", - "@esbuild/linux-x64": "0.24.0", - "@esbuild/netbsd-x64": "0.24.0", - "@esbuild/openbsd-arm64": "0.24.0", - "@esbuild/openbsd-x64": "0.24.0", - "@esbuild/sunos-x64": "0.24.0", - "@esbuild/win32-arm64": "0.24.0", - "@esbuild/win32-ia32": "0.24.0", - "@esbuild/win32-x64": "0.24.0" + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" } }, "node_modules/esbuild-wasm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.24.0.tgz", - "integrity": "sha512-xhNn5tL1AhkPg4ft59yXT6FkwKXiPSYyz1IeinJHUJpjvOHOIPvdmFQc0pGdjxlKSbzZc2mNmtVOWAR1EF/JAg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.24.2.tgz", + "integrity": "sha512-03/7Z1gD+ohDnScFztvI4XddTAbKVmMEzCvvkBpQdWKEXJ+73dTyeNrmdxP1Q0zpDMFjzUJwtK4rLjqwiHbzkw==", "dev": true, "license": "MIT", "bin": { @@ -11799,23 +12472,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -11885,9 +12541,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", + "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", "dev": true, "license": "MIT" }, @@ -11955,13 +12611,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -12568,9 +13224,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -13712,9 +14368,9 @@ } }, "node_modules/less": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", - "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.1.tgz", + "integrity": "sha512-CasaJidTIhWmjcqv0Uj5vccMI7pJgfD9lMkKtlnTHAdJdYK/7l8pM9tumLyJ0zhbD4KJLo/YvTj+xznQd5NBhg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13915,9 +14571,9 @@ } }, "node_modules/lmdb": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.1.5.tgz", - "integrity": "sha512-46Mch5Drq+A93Ss3gtbg+Xuvf5BOgIuvhKDWoGa3HcPHI6BL2NCOkRdSx1D4VfzwrxhnsjbyIVsLRlQHu6URvw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.2.2.tgz", + "integrity": "sha512-LriG93la4PbmPMwI7Hbv8W+0ncLK7549w4sbZSi4QGDjnnxnmNMgxUkaQTEMzH8TpwsfFvgEjpLX7V8B/I9e3g==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -13933,12 +14589,12 @@ "download-lmdb-prebuilds": "bin/download-prebuilds.js" }, "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.1.5", - "@lmdb/lmdb-darwin-x64": "3.1.5", - "@lmdb/lmdb-linux-arm": "3.1.5", - "@lmdb/lmdb-linux-arm64": "3.1.5", - "@lmdb/lmdb-linux-x64": "3.1.5", - "@lmdb/lmdb-win32-x64": "3.1.5" + "@lmdb/lmdb-darwin-arm64": "3.2.2", + "@lmdb/lmdb-darwin-x64": "3.2.2", + "@lmdb/lmdb-linux-arm": "3.2.2", + "@lmdb/lmdb-linux-arm64": "3.2.2", + "@lmdb/lmdb-linux-x64": "3.2.2", + "@lmdb/lmdb-win32-x64": "3.2.2" } }, "node_modules/load-json-file": { @@ -14339,9 +14995,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.12", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", - "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "license": "MIT", "dependencies": { @@ -14456,9 +15112,9 @@ } }, "node_modules/memfs": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.1.tgz", - "integrity": "sha512-Fq5CMEth+2iprLJ5mNizRcWuiwRZYjNkUD0zKk224jZunE9CRacTRDK8QLALbMBlNX2y3nY6lKZbesCwDwacig==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.0.tgz", + "integrity": "sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -15120,19 +15776,19 @@ "license": "MIT" }, "node_modules/ng-mocks": { - "version": "14.13.1", - "resolved": "https://registry.npmjs.org/ng-mocks/-/ng-mocks-14.13.1.tgz", - "integrity": "sha512-eyfnjXeC108SqVD09i/cBwCpKkK0JjBoAg8jp7oQS2HS081K3WJTttFpgLGeLDYKmZsZ6nYpI+HHNQ3OksaJ7A==", + "version": "14.13.2", + "resolved": "https://registry.npmjs.org/ng-mocks/-/ng-mocks-14.13.2.tgz", + "integrity": "sha512-ItAB72Pc0uznL1j4TPsFp1wehhitVp7DARkc67aafeIk1FDgwnAZvzJwntMnIp/IWMSbzrEQ6kl3cc5euX1NRA==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/help-me-mom" }, "peerDependencies": { - "@angular/common": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18", - "@angular/core": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18", - "@angular/forms": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18", - "@angular/platform-browser": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18" + "@angular/common": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18 || 19.0.0-alpha - 19", + "@angular/core": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18 || 19.0.0-alpha - 19", + "@angular/forms": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18 || 19.0.0-alpha - 19", + "@angular/platform-browser": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18 || 19.0.0-alpha - 19" } }, "node_modules/ng-packagr": { @@ -15792,9 +16448,9 @@ } }, "node_modules/npm-package-arg": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.0.tgz", - "integrity": "sha512-ZTE0hbwSdTNL+Stx2zxSqdu2KZfNDcrtrLdIk7XGnQFYBWYDho/ORvXtn5XEePcL3tFpGjHCV3X3xrtDh7eZ+A==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.1.tgz", + "integrity": "sha512-aDxjFfPV3Liw0WOBWlyZLMBqtbgbg03rmGvHDJa2Ttv7tIz+1oB5qWec4psCDFZcZi9b5XdGkPdQiJxOPzvQRQ==", "dev": true, "license": "ISC", "dependencies": { @@ -19752,9 +20408,9 @@ } }, "node_modules/piscina": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.7.0.tgz", - "integrity": "sha512-b8hvkpp9zS0zsfa939b/jXbe64Z2gZv0Ha7FYPNUiDIB1y2AtxcOZdfP8xN8HFjUaqQiT9gRlfjAsoL8vdJ1Iw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.8.0.tgz", + "integrity": "sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -20705,19 +21361,22 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -20846,9 +21505,9 @@ } }, "node_modules/rollup": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.26.0.tgz", - "integrity": "sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", + "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", "dev": true, "license": "MIT", "dependencies": { @@ -20862,41 +21521,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.26.0", - "@rollup/rollup-android-arm64": "4.26.0", - "@rollup/rollup-darwin-arm64": "4.26.0", - "@rollup/rollup-darwin-x64": "4.26.0", - "@rollup/rollup-freebsd-arm64": "4.26.0", - "@rollup/rollup-freebsd-x64": "4.26.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.26.0", - "@rollup/rollup-linux-arm-musleabihf": "4.26.0", - "@rollup/rollup-linux-arm64-gnu": "4.26.0", - "@rollup/rollup-linux-arm64-musl": "4.26.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.26.0", - "@rollup/rollup-linux-riscv64-gnu": "4.26.0", - "@rollup/rollup-linux-s390x-gnu": "4.26.0", - "@rollup/rollup-linux-x64-gnu": "4.26.0", - "@rollup/rollup-linux-x64-musl": "4.26.0", - "@rollup/rollup-win32-arm64-msvc": "4.26.0", - "@rollup/rollup-win32-ia32-msvc": "4.26.0", - "@rollup/rollup-win32-x64-msvc": "4.26.0", + "@rollup/rollup-android-arm-eabi": "4.30.1", + "@rollup/rollup-android-arm64": "4.30.1", + "@rollup/rollup-darwin-arm64": "4.30.1", + "@rollup/rollup-darwin-x64": "4.30.1", + "@rollup/rollup-freebsd-arm64": "4.30.1", + "@rollup/rollup-freebsd-x64": "4.30.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", + "@rollup/rollup-linux-arm-musleabihf": "4.30.1", + "@rollup/rollup-linux-arm64-gnu": "4.30.1", + "@rollup/rollup-linux-arm64-musl": "4.30.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", + "@rollup/rollup-linux-riscv64-gnu": "4.30.1", + "@rollup/rollup-linux-s390x-gnu": "4.30.1", + "@rollup/rollup-linux-x64-gnu": "4.30.1", + "@rollup/rollup-linux-x64-musl": "4.30.1", + "@rollup/rollup-win32-arm64-msvc": "4.30.1", + "@rollup/rollup-win32-ia32-msvc": "4.30.1", + "@rollup/rollup-win32-x64-msvc": "4.30.1", "fsevents": "~2.3.2" } }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.26.0.tgz", - "integrity": "sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -20998,9 +21644,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.80.7", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.7.tgz", - "integrity": "sha512-MVWvN0u5meytrSjsU7AWsbhoXi1sc58zADXFllfZzbsBT1GHjjar6JwBINYPRrkx/zqnQ6uqbQuHgE95O+C+eQ==", + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.1.tgz", + "integrity": "sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==", "dev": true, "license": "MIT", "dependencies": { @@ -21019,9 +21665,9 @@ } }, "node_modules/sass-loader": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.3.tgz", - "integrity": "sha512-gosNorT1RCkuCMyihv6FBRR7BMV06oKRAs+l4UMp1mlcVg9rWN6KMmUj3igjQwmYys4mDP3etEYJgiHRbgHCHA==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.4.tgz", + "integrity": "sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==", "dev": true, "license": "MIT", "dependencies": { @@ -27707,9 +28353,9 @@ "license": "ISC" }, "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -28773,21 +29419,22 @@ "license": "MIT" }, "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.10.tgz", + "integrity": "sha512-MEszunEcMo6pFsfXN1GhCFQqnE25tWRH0MA4f0Q7uanACi4y1Us+ZGpTMnITwCTnYzB2b9cpmnelTlxgTBmaBA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.24.2", + "postcss": "^8.4.49", + "rollup": "^4.23.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -28796,19 +29443,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -28829,65 +29482,15 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, "node_modules/void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -28941,17 +29544,17 @@ "optional": true }, "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", @@ -29018,9 +29621,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz", - "integrity": "sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", + "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==", "dev": true, "license": "MIT", "dependencies": { @@ -29037,10 +29640,9 @@ "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", - "express": "^4.19.2", + "express": "^4.21.2", "graceful-fs": "^4.2.6", - "html-entities": "^2.4.0", - "http-proxy-middleware": "^2.0.3", + "http-proxy-middleware": "^2.0.7", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", diff --git a/package.json b/package.json index 7fb0401..8cbf502 100644 --- a/package.json +++ b/package.json @@ -46,13 +46,13 @@ "zone.js": "^0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^19.0.3", + "@angular-devkit/build-angular": "^19.1.3", "@angular-eslint/builder": "19.0.1", "@angular-eslint/eslint-plugin": "19.0.1", "@angular-eslint/eslint-plugin-template": "19.0.1", "@angular-eslint/schematics": "19.0.1", "@angular-eslint/template-parser": "19.0.1", - "@angular/cli": "^19.0.3", + "@angular/cli": "^19.1.3", "@angular/compiler-cli": "^19.0.3", "@angular/language-service": "^19.0.3", "@commitlint/cli": "^19.6.0", @@ -73,7 +73,7 @@ "karma-coverage-istanbul-reporter": "~3.0.3", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", - "ng-mocks": "^14.13.1", + "ng-mocks": "^14.13.2", "ng-packagr": "^19.0.1", "semantic-release": "^24.2.0", "semantic-release-cli": "^5.4.6", diff --git a/projects/ngb-filterable-dropdown-example/.eslintrc.json b/projects/ngb-filterable-dropdown-example/.eslintrc.json index ed26270..659cdc4 100644 --- a/projects/ngb-filterable-dropdown-example/.eslintrc.json +++ b/projects/ngb-filterable-dropdown-example/.eslintrc.json @@ -33,7 +33,7 @@ "style": "kebab-case" } ], - "@angular-eslint/prefer-standalone": "off" + "@angular-eslint/prefer-standalone": "error" } }, { diff --git a/projects/ngb-filterable-dropdown-example/src/app/app.component.spec.ts b/projects/ngb-filterable-dropdown-example/src/app/app.component.spec.ts index bd55fc1..b6c0efb 100644 --- a/projects/ngb-filterable-dropdown-example/src/app/app.component.spec.ts +++ b/projects/ngb-filterable-dropdown-example/src/app/app.component.spec.ts @@ -1,36 +1,39 @@ -import { TestBed } from '@angular/core/testing'; -import { NgbCustomFilterableDropdownModule, NgbFilterableDropdownModule } from 'projects/ngb-filterable-dropdown/src'; -import { AppComponent } from './app.component'; +import { TestBed } from "@angular/core/testing"; +import { + NgbCustomFilterableDropdownModule, + NgbFilterableDropdownModule, +} from "projects/ngb-filterable-dropdown/src"; +import { AppComponent } from "./app.component"; -describe('AppComponent', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [ - AppComponent, - ], +describe("AppComponent", () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ imports: [ + AppComponent, NgbCustomFilterableDropdownModule, - NgbFilterableDropdownModule - ] + NgbFilterableDropdownModule, + ], }).compileComponents(); }); - it('should create the app', () => { + it("should create the app", () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.debugElement.componentInstance; expect(app).toBeTruthy(); }); - it('should have as title \'ngb-filterable-dropdown-examples\'', () => { + it("should have as title 'ngb-filterable-dropdown-examples'", () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.debugElement.componentInstance; - expect(app.title).toEqual('ngb-filterable-dropdown-examples'); + expect(app.title).toEqual("ngb-filterable-dropdown-examples"); }); - it('should render title', () => { + it("should render title", () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); const compiled = fixture.debugElement.nativeElement; - expect(compiled.querySelector('h2').textContent).toContain('ngb-filterable-dropdown-examples'); + expect(compiled.querySelector("h2").textContent).toContain( + "ngb-filterable-dropdown-examples" + ); }); }); diff --git a/projects/ngb-filterable-dropdown-example/src/app/app.component.ts b/projects/ngb-filterable-dropdown-example/src/app/app.component.ts index 11f3496..2b8c1c6 100644 --- a/projects/ngb-filterable-dropdown-example/src/app/app.component.ts +++ b/projects/ngb-filterable-dropdown-example/src/app/app.component.ts @@ -1,29 +1,51 @@ -import { Component } from '@angular/core'; -import { ItemCreatedEvent, NgbFilterableDropdownSelectionMode, OpenChangedEvent, SelectionChangedEvent } from 'projects/ngb-filterable-dropdown/src'; +import { CommonModule } from "@angular/common"; +import { Component } from "@angular/core"; +import { + ItemCreatedEvent, + NgbCustomFilterableDropdownModule, + NgbFilterableDropdownModule, + NgbFilterableDropdownSelectionMode, + OpenChangedEvent, + SelectionChangedEvent, +} from "projects/ngb-filterable-dropdown/src"; @Component({ - selector: 'app-root', // eslint-disable-line @angular-eslint/component-selector - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], - standalone: false + selector: "app-root", // eslint-disable-line @angular-eslint/component-selector + templateUrl: "./app.component.html", + styleUrls: ["./app.component.scss"], + imports: [ + NgbFilterableDropdownModule, + NgbCustomFilterableDropdownModule, + CommonModule, + ], }) export class AppComponent { - title = 'ngb-filterable-dropdown-examples'; - - selectionModes: Array = Object.values(NgbFilterableDropdownSelectionMode); - autoCloseValues = ['inside', 'outside', true, false]; - - items = ['Beetle', 'Ant', 'Moth', 'Fire Ant', 'Dung Beetle', 'Grass Ant', 'A Really Long Made Up Bug Name For Testing Tooltips Etc Etc Yadda Yadda Yadda']; + title = "ngb-filterable-dropdown-examples"; + + selectionModes: Array = Object.values( + NgbFilterableDropdownSelectionMode + ); + autoCloseValues = ["inside", "outside", true, false]; + + items = [ + "Beetle", + "Ant", + "Moth", + "Fire Ant", + "Dung Beetle", + "Grass Ant", + "A Really Long Made Up Bug Name For Testing Tooltips Etc Etc Yadda Yadda Yadda", + ]; allowCreateItem = false; - autoClose: boolean | 'inside' | 'outside' = false; + autoClose: boolean | "inside" | "outside" = false; customToggleText = false; disabled = false; genericHandleUseCustomHandle = true; - genericHandleSelection: string | Array = 'nothing'; + genericHandleSelection: string | Array = "nothing"; isGenericHandleDropdownOpen = false; - searchInputPlaceholder = 'Search Bugs'; - selection: string | Array = 'Moth'; + searchInputPlaceholder = "Search Bugs"; + selection: string | Array = "Moth"; selectionMode = NgbFilterableDropdownSelectionMode.SingleSelect; tooltips = false; tooltipsOpenDelay = 750; @@ -49,7 +71,7 @@ export class AppComponent { this.genericHandleSelection = $event.selection; } - onAutoCloseValueChanged(value: boolean | 'inside' | 'outside'): void { + onAutoCloseValueChanged(value: boolean | "inside" | "outside"): void { this.autoClose = value; } diff --git a/projects/ngb-filterable-dropdown-example/src/app/app.module.ts b/projects/ngb-filterable-dropdown-example/src/app/app.module.ts deleted file mode 100644 index 8aaa647..0000000 --- a/projects/ngb-filterable-dropdown-example/src/app/app.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { BrowserModule } from '@angular/platform-browser'; -import { AppComponent } from './app.component'; -import { - NgbCustomFilterableDropdownModule, - NgbFilterableDropdownModule, -} from 'projects/ngb-filterable-dropdown/src/index'; - - -@NgModule({ - declarations: [AppComponent], - imports: [ - BrowserModule, - NgbCustomFilterableDropdownModule, - NgbFilterableDropdownModule, - FormsModule, - ], - providers: [], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/projects/ngb-filterable-dropdown-example/src/main.ts b/projects/ngb-filterable-dropdown-example/src/main.ts index c7b673c..b66bca5 100644 --- a/projects/ngb-filterable-dropdown-example/src/main.ts +++ b/projects/ngb-filterable-dropdown-example/src/main.ts @@ -1,12 +1,10 @@ -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; +import { enableProdMode } from "@angular/core"; +import { bootstrapApplication } from "@angular/platform-browser"; +import { environment } from "./environments/environment"; +import { AppComponent } from "./app/app.component"; if (environment.production) { enableProdMode(); } -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); +bootstrapApplication(AppComponent); diff --git a/projects/ngb-filterable-dropdown/.eslintrc.json b/projects/ngb-filterable-dropdown/.eslintrc.json index a73600d..20f02e4 100644 --- a/projects/ngb-filterable-dropdown/.eslintrc.json +++ b/projects/ngb-filterable-dropdown/.eslintrc.json @@ -32,7 +32,7 @@ "style": "kebab-case" } ], - "@angular-eslint/prefer-standalone": "off" + "@angular-eslint/prefer-standalone": "error" } }, { diff --git a/projects/ngb-filterable-dropdown/src/lib/internals/icons/all.component.ts b/projects/ngb-filterable-dropdown/src/lib/internals/icons/all.component.ts index fc9ba11..eace1f7 100644 --- a/projects/ngb-filterable-dropdown/src/lib/internals/icons/all.component.ts +++ b/projects/ngb-filterable-dropdown/src/lib/internals/icons/all.component.ts @@ -1,15 +1,28 @@ -import { Component } from '@angular/core'; +import { Component } from "@angular/core"; @Component({ - selector: 'icon-all', // eslint-disable-line @angular-eslint/component-selector - template: ` - - - - - + selector: "icon-all", // eslint-disable-line @angular-eslint/component-selector + template: ` + + + + + - `, - standalone: false + `, }) -export class AllComponent { } +export class AllComponent {} diff --git a/projects/ngb-filterable-dropdown/src/lib/internals/icons/checkmark.component.ts b/projects/ngb-filterable-dropdown/src/lib/internals/icons/checkmark.component.ts index 139e40e..4c24393 100644 --- a/projects/ngb-filterable-dropdown/src/lib/internals/icons/checkmark.component.ts +++ b/projects/ngb-filterable-dropdown/src/lib/internals/icons/checkmark.component.ts @@ -1,19 +1,37 @@ -import { Component } from '@angular/core'; +import { Component } from "@angular/core"; @Component({ - selector: 'icon-checkmark', // eslint-disable-line @angular-eslint/component-selector - template: ` - + selector: "icon-checkmark", // eslint-disable-line @angular-eslint/component-selector + template: ` + - + - `, - standalone: false + `, }) -export class CheckmarkComponent { } +export class CheckmarkComponent {} diff --git a/projects/ngb-filterable-dropdown/src/lib/internals/icons/none.component.ts b/projects/ngb-filterable-dropdown/src/lib/internals/icons/none.component.ts index 3751108..b388374 100644 --- a/projects/ngb-filterable-dropdown/src/lib/internals/icons/none.component.ts +++ b/projects/ngb-filterable-dropdown/src/lib/internals/icons/none.component.ts @@ -1,14 +1,25 @@ -import { Component } from '@angular/core'; +import { Component } from "@angular/core"; @Component({ - selector: 'icon-none', // eslint-disable-line @angular-eslint/component-selector - template: ` - + selector: "icon-none", // eslint-disable-line @angular-eslint/component-selector + template: ` + - + - `, - standalone: false + `, }) -export class NoneComponent { } +export class NoneComponent {} diff --git a/projects/ngb-filterable-dropdown/src/lib/internals/icons/plus.component.ts b/projects/ngb-filterable-dropdown/src/lib/internals/icons/plus.component.ts index 25af29f..58dc537 100644 --- a/projects/ngb-filterable-dropdown/src/lib/internals/icons/plus.component.ts +++ b/projects/ngb-filterable-dropdown/src/lib/internals/icons/plus.component.ts @@ -1,10 +1,39 @@ -import { Component } from '@angular/core'; +import { Component } from "@angular/core"; @Component({ - selector: 'icon-plus', // eslint-disable-line @angular-eslint/component-selector - template: ` - - `, - standalone: false + selector: "icon-plus", // eslint-disable-line @angular-eslint/component-selector + template: ` + + + + + + `, }) -export class PlusComponent { } +export class PlusComponent {} diff --git a/projects/ngb-filterable-dropdown/src/lib/internals/internals.module.ts b/projects/ngb-filterable-dropdown/src/lib/internals/internals.module.ts deleted file mode 100644 index d204df6..0000000 --- a/projects/ngb-filterable-dropdown/src/lib/internals/internals.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule } from '@angular/core'; -import { AllComponent } from './icons/all.component'; -import { CheckmarkComponent } from './icons/checkmark.component'; -import { NoneComponent } from './icons/none.component'; -import { PlusComponent } from './icons/plus.component'; -import { MultiSelectPipe } from './multi-select-pipe/multi-select-pipe'; - -@NgModule({ - declarations: [ - MultiSelectPipe, - AllComponent, - CheckmarkComponent, - NoneComponent, - PlusComponent, - ], - imports: [], - exports: [ - MultiSelectPipe, - AllComponent, - CheckmarkComponent, - NoneComponent, - PlusComponent, - ], -}) -export class InternalsModule {} diff --git a/projects/ngb-filterable-dropdown/src/lib/internals/multi-select-pipe/multi-select-pipe.ts b/projects/ngb-filterable-dropdown/src/lib/internals/multi-select-pipe/multi-select-pipe.ts index 931272f..0808178 100644 --- a/projects/ngb-filterable-dropdown/src/lib/internals/multi-select-pipe/multi-select-pipe.ts +++ b/projects/ngb-filterable-dropdown/src/lib/internals/multi-select-pipe/multi-select-pipe.ts @@ -1,23 +1,19 @@ -import { Pipe, PipeTransform } from '@angular/core'; +import { Pipe, PipeTransform } from "@angular/core"; @Pipe({ - name: 'multiSelect', - standalone: false + name: "multiSelect", }) export class MultiSelectPipe implements PipeTransform { - - public static readonly MULTIPLE_ITEMS_STRING = 'Multiple'; + public static readonly MULTIPLE_ITEMS_STRING = "Multiple"; transform(val: Array | string, placeholderText: string): string { - if (typeof val === 'string') { + if (typeof val === "string") { if (!val) { return placeholderText; - } - else { + } else { return val; } - } - else if (val instanceof Array) { + } else if (val instanceof Array) { if (val.length === 0) { return placeholderText; } else if (val.length === 1) { diff --git a/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component.spec.ts b/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component.spec.ts index 555692e..4334176 100644 --- a/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component.spec.ts +++ b/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component.spec.ts @@ -1,14 +1,12 @@ -import { CommonModule } from '@angular/common'; -import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import { ReactiveFormsModule } from '@angular/forms'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { take, tap } from 'rxjs/operators'; -import { NgbCustomFilterableDropdownComponent } from './ngb-custom-filterable-dropdown.component'; -import { NgbFilterableDropdownSelectionMode } from '../ngb-filterable-drop-down-selection-mode'; -import { InternalsModule } from '../internals/internals.module'; -import { firstValueFrom } from 'rxjs'; - -describe('NgbCustomFilterableDropdownComponent', () => { +import { CommonModule } from "@angular/common"; +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; +import { firstValueFrom } from "rxjs"; +import { NgbFilterableDropdownSelectionMode } from "../ngb-filterable-drop-down-selection-mode"; +import { NgbCustomFilterableDropdownComponent } from "./ngb-custom-filterable-dropdown.component"; + +describe("NgbCustomFilterableDropdownComponent", () => { let component: NgbCustomFilterableDropdownComponent; let fixture: ComponentFixture; @@ -18,49 +16,47 @@ describe('NgbCustomFilterableDropdownComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ imports: [ + NgbCustomFilterableDropdownComponent, NgbModule, ReactiveFormsModule, CommonModule, - InternalsModule, ], - declarations: [ - NgbCustomFilterableDropdownComponent, - ] - }) - .compileComponents(); + }).compileComponents(); fixture = TestBed.createComponent(NgbCustomFilterableDropdownComponent); component = fixture.componentInstance; - filterItem = 'foo'; - items = [filterItem, 'bar', 'baz']; + filterItem = "foo"; + items = [filterItem, "bar", "baz"]; component.items = items; fixture.detectChanges(); }); - it('should create', () => { + it("should create", () => { expect(component).toBeTruthy(); }); - it('should populate filtered with correct list of filtered items', () => { - component.searchInput.setValue('oo'); + it("should populate filtered with correct list of filtered items", () => { + component.searchInput.setValue("oo"); expect(component.filtered.has(filterItem)).toEqual(true); - expect(component.filtered.has('baz')).toEqual(false); + expect(component.filtered.has("baz")).toEqual(false); }); - it('should display list of items', () => { + it("should display list of items", () => { fixture.detectChanges(); - items.forEach(item => expect(fixture.nativeElement.textContent).toContain(item)); + items.forEach((item) => + expect(fixture.nativeElement.textContent).toContain(item) + ); }); - describe('selection', () => { - describe('set', () => { - it('should set nextToggleState to SELECT if input length is 0', () => { + describe("selection", () => { + describe("set", () => { + it("should set nextToggleState to SELECT if input length is 0", () => { component.selection = []; expect(component.nextToggleState).toEqual(component.SELECT); }); - it('should set nextToggleState to DESELECT if input length is greater than 0', () => { + it("should set nextToggleState to DESELECT if input length is greater than 0", () => { component.selection = [filterItem]; expect(component.nextToggleState).toEqual(component.DESELECT); @@ -68,41 +64,44 @@ describe('NgbCustomFilterableDropdownComponent', () => { }); }); - describe('isFiltered', () => { + describe("isFiltered", () => { beforeEach(() => { component.searchInput.setValue(filterItem); }); - it('should should return true if item is selected', () => { + it("should should return true if item is selected", () => { expect(component.isFiltered(filterItem)).toEqual(true); }); - it('should set selected item when onItemSelect is called', () => { - expect(component.isFiltered('baz')).toEqual(false); + it("should set selected item when onItemSelect is called", () => { + expect(component.isFiltered("baz")).toEqual(false); }); }); - describe('isSelected', () => { + describe("isSelected", () => { beforeEach(() => { component.onItemSelect(filterItem); }); - it('should should return true if item is selected', () => { + it("should should return true if item is selected", () => { expect(component.isSelected(filterItem)).toEqual(true); }); - it('should set selected item when onItemSelect is called', () => { - expect(component.isSelected('baz')).toEqual(false); + it("should set selected item when onItemSelect is called", () => { + expect(component.isSelected("baz")).toEqual(false); }); }); - describe('onCreateItem', () => { - describe('when in mode that does not allow multi select', () => { - - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.SingleSelect); + describe("onCreateItem", () => { + describe("when in mode that does not allow multi select", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.SingleSelect) + ); - it('should select created item', () => { - const item = '🎃'; + it("should select created item", () => { + const item = "🎃"; component.searchInput.setValue(item); component.onCreateItem(); @@ -110,28 +109,33 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.selection).toEqual(item); }); - it('should emit created item, selection and items', async () => { - const resultPromise = firstValueFrom(component.itemCreated) - const item = '🎃'; + it("should emit created item, selection and items", async () => { + const resultPromise = firstValueFrom(component.itemCreated); + const item = "🎃"; component.searchInput.setValue(item); component.onCreateItem(); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - created: item, - selection: item, - items: [...items, item] - })); + expect(result).toEqual( + jasmine.objectContaining({ + created: item, + selection: item, + items: [...items, item], + }) + ); }); }); - describe('when in mode that allows multi select', () => { + describe("when in mode that allows multi select", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone) + ); - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone); - - it('should add created item to selection', () => { - const item = '🎃'; + it("should add created item to selection", () => { + const item = "🎃"; component.searchInput.setValue(item); component.selection = items; component.filtered = new Set(items); @@ -141,9 +145,9 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.selection).toEqual([...items, item]); }); - it('should emit created item, selection and items', async () => { - const resultPromise = firstValueFrom(component.itemCreated) - const item = '🎃'; + it("should emit created item, selection and items", async () => { + const resultPromise = firstValueFrom(component.itemCreated); + const item = "🎃"; component.searchInput.setValue(item); component.selection = items; component.filtered = new Set(items); @@ -151,48 +155,59 @@ describe('NgbCustomFilterableDropdownComponent', () => { component.onCreateItem(); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - created: item, - selection: [...items, item], - items: [...items, item] - })); + expect(result).toEqual( + jasmine.objectContaining({ + created: item, + selection: [...items, item], + items: [...items, item], + }) + ); }); }); }); - describe('onEnterKeyPressed', () => { + describe("onEnterKeyPressed", () => { + describe("when allowCreateItem is false", () => { + beforeEach(() => (component.allowCreateItem = false)); - describe('when allowCreateItem is false', () => { - beforeEach(() => component.allowCreateItem = false); + describe("and in mode that does not allow multi select", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.SingleSelect) + ); - describe('and in mode that does not allow multi select', () => { - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.SingleSelect); - - it('should select the first entry if filtered is not empty', () => { - component.selection = ''; + it("should select the first entry if filtered is not empty", () => { + component.selection = ""; component.onEnterKeyPressed(); expect(component.selection).toEqual(items[0]); }); - it('should emit selection', async () => { - const resultPromise = firstValueFrom(component.selectionChanged) - component.selection = ''; + it("should emit selection", async () => { + const resultPromise = firstValueFrom(component.selectionChanged); + component.selection = ""; component.onEnterKeyPressed(); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - selection: items[0] - })); + expect(result).toEqual( + jasmine.objectContaining({ + selection: items[0], + }) + ); }); }); - describe('and in mode that allows multi select', () => { - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone); + describe("and in mode that allows multi select", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone) + ); - it('should add items to selection if filtered is not empty', () => { + it("should add items to selection if filtered is not empty", () => { component.selection = []; component.onEnterKeyPressed(); @@ -200,8 +215,8 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.selection).toEqual(items); }); - it('should emit selection', async () => { - const resultPromise = firstValueFrom(component.selectionChanged) + it("should emit selection", async () => { + const resultPromise = firstValueFrom(component.selectionChanged); component.selection = []; component.onEnterKeyPressed(); @@ -212,14 +227,18 @@ describe('NgbCustomFilterableDropdownComponent', () => { }); }); - describe('when allowCreateItem is true', () => { - beforeEach(() => component.allowCreateItem = true); + describe("when allowCreateItem is true", () => { + beforeEach(() => (component.allowCreateItem = true)); - describe('and in mode that does not allow multi select', () => { - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.SingleSelect); + describe("and in mode that does not allow multi select", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.SingleSelect) + ); - it('should create item if filtered is empty', () => { - const item = '🎃'; + it("should create item if filtered is empty", () => { + const item = "🎃"; component.filtered = new Set([]); component.searchInput.setValue(item); @@ -228,8 +247,8 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.items).toEqual([...items, item]); }); - it('should select created item if filtered is empty', () => { - const item = '🎃'; + it("should select created item if filtered is empty", () => { + const item = "🎃"; component.filtered = new Set([]); component.searchInput.setValue(item); @@ -238,28 +257,34 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.selection).toEqual(item); }); - it('should emit created selection and items', async () => { - const resultPromise = firstValueFrom(component.itemCreated) - const item = '🎃'; + it("should emit created selection and items", async () => { + const resultPromise = firstValueFrom(component.itemCreated); + const item = "🎃"; component.filtered = new Set([]); component.searchInput.setValue(item); component.onEnterKeyPressed(); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - created: item, - selection: item, - items: [...items, item] - })); + expect(result).toEqual( + jasmine.objectContaining({ + created: item, + selection: item, + items: [...items, item], + }) + ); }); }); - describe('and in mode that allows multi select', () => { - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone); + describe("and in mode that allows multi select", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone) + ); - it('should create item if filtered is empty', () => { - const item = '🎃'; + it("should create item if filtered is empty", () => { + const item = "🎃"; component.filtered = new Set([]); component.searchInput.setValue(item); @@ -268,8 +293,8 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.items).toEqual([...items, item]); }); - it('should add created item to selected items if filtered is empty', () => { - const item = '🎃'; + it("should add created item to selected items if filtered is empty", () => { + const item = "🎃"; component.filtered = new Set([]); component.searchInput.setValue(item); @@ -278,28 +303,33 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.selection).toEqual([item]); }); - it('should emit created, selection and items', async () => { - const resultPromise = firstValueFrom(component.itemCreated) - const item = '🎃'; + it("should emit created, selection and items", async () => { + const resultPromise = firstValueFrom(component.itemCreated); + const item = "🎃"; component.filtered = new Set([]); component.searchInput.setValue(item); component.onEnterKeyPressed(); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - created: item, - selection: [item], - items: [...items, item] - })); + expect(result).toEqual( + jasmine.objectContaining({ + created: item, + selection: [item], + items: [...items, item], + }) + ); }); }); }); - describe('autoClose', () => { - beforeEach(() => component.dropdown = jasmine.createSpyObj('NgbDropdown', ['close'])); + describe("autoClose", () => { + beforeEach( + () => + (component.dropdown = jasmine.createSpyObj("NgbDropdown", ["close"])) + ); - it('should close dialog when enter key is pressed if autoClose is true', () => { + it("should close dialog when enter key is pressed if autoClose is true", () => { component.autoClose = true; component.onEnterKeyPressed(); @@ -307,7 +337,7 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.dropdown.close).toHaveBeenCalled(); }); - it('should not close dialog when enter key is pressed if autoClose is false', () => { + it("should not close dialog when enter key is pressed if autoClose is false", () => { component.autoClose = false; component.onEnterKeyPressed(); @@ -317,39 +347,48 @@ describe('NgbCustomFilterableDropdownComponent', () => { }); }); - describe('onItemSelect', () => { - - describe('when in mode that does not allow multi select', () => { - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.SingleSelect); + describe("onItemSelect", () => { + describe("when in mode that does not allow multi select", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.SingleSelect) + ); - it('should set item as selected', () => { - const item = '🎃'; - component.selection = ''; + it("should set item as selected", () => { + const item = "🎃"; + component.selection = ""; component.onItemSelect(item); expect(component.selection).toEqual(item); }); - it('should emit selected item as a string', async () => { - const resultPromise = firstValueFrom(component.selectionChanged) - const item = '🎃'; - component.selection = ''; + it("should emit selected item as a string", async () => { + const resultPromise = firstValueFrom(component.selectionChanged); + const item = "🎃"; + component.selection = ""; component.onItemSelect(item); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - selection: item - })); + expect(result).toEqual( + jasmine.objectContaining({ + selection: item, + }) + ); }); }); - describe('when in mode that supports multi select', () => { - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone); + describe("when in mode that supports multi select", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone) + ); - it('should add item to selected items if not selected', () => { - const item = '🎃'; + it("should add item to selected items if not selected", () => { + const item = "🎃"; component.selection = []; component.onItemSelect(item); @@ -357,8 +396,8 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.selection).toEqual([item]); }); - it('should remove item from selected items if selected', () => { - const item = '🎃'; + it("should remove item from selected items if selected", () => { + const item = "🎃"; component.selection = [item]; component.onItemSelect(item); @@ -366,24 +405,26 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.selection).toEqual([]); }); - it('should emit selected items as an array', async () => { - const resultPromise = firstValueFrom(component.selectionChanged) - const item = '🎃'; + it("should emit selected items as an array", async () => { + const resultPromise = firstValueFrom(component.selectionChanged); + const item = "🎃"; component.selection = []; component.onItemSelect(item); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - selection: [item] - })); + expect(result).toEqual( + jasmine.objectContaining({ + selection: [item], + }) + ); }); }); }); - describe('onOpenChange', () => { - it('should emit event with open true if dialog is being opened', async () => { - const resultPromise = firstValueFrom(component.openChanged) + describe("onOpenChange", () => { + it("should emit event with open true if dialog is being opened", async () => { + const resultPromise = firstValueFrom(component.openChanged); component.onOpenChange(true); const result = await resultPromise; @@ -391,8 +432,8 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(result.open).toEqual(true); }); - it('should emit event with open false if dialog is being closed', async () => { - const resultPromise = firstValueFrom(component.openChanged) + it("should emit event with open false if dialog is being closed", async () => { + const resultPromise = firstValueFrom(component.openChanged); component.onOpenChange(false); const result = await resultPromise; @@ -400,18 +441,21 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(result.open).toEqual(false); }); - it('should clear filter text if dialog is being closed', () => { - component.searchForm.controls['searchInput'].setValue(filterItem); + it("should clear filter text if dialog is being closed", () => { + component.searchForm.controls["searchInput"].setValue(filterItem); component.onOpenChange(false); - expect(component.searchForm.controls['searchInput'].value).toEqual(''); + expect(component.searchForm.controls["searchInput"].value).toEqual(""); }); }); - describe('onSelectAll', () => { + describe("onSelectAll", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone) + ); - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone); - - it('should set nextToggleState to DESELECT', () => { + it("should set nextToggleState to DESELECT", () => { component.nextToggleState = component.SELECT; component.onSelectAll(); @@ -419,28 +463,34 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.nextToggleState).toEqual(component.DESELECT); }); - it('should set selected items to all items', () => { + it("should set selected items to all items", () => { component.onSelectAll(); expect(component.selection).toEqual(items); }); - it('should emit selected items as an array', async () => { - const resultPromise = firstValueFrom(component.selectionChanged) + it("should emit selected items as an array", async () => { + const resultPromise = firstValueFrom(component.selectionChanged); component.onSelectAll(); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - selection: items - })); + expect(result).toEqual( + jasmine.objectContaining({ + selection: items, + }) + ); }); }); - describe('onSelectMultiple', () => { - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone); + describe("onSelectMultiple", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone) + ); - it('should set nextToggleState to DESELECT', () => { + it("should set nextToggleState to DESELECT", () => { component.nextToggleState = component.SELECT; component.onSelectMultiple(); @@ -448,29 +498,34 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.nextToggleState).toEqual(component.DESELECT); }); - it('should set selected items to filtered items', () => { + it("should set selected items to filtered items", () => { component.onSelectMultiple(); expect(component.selection).toEqual(items); }); - it('should emit selected items', async () => { - const resultPromise = firstValueFrom(component.selectionChanged) + it("should emit selected items", async () => { + const resultPromise = firstValueFrom(component.selectionChanged); component.onSelectMultiple(); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - selection: items - })); + expect(result).toEqual( + jasmine.objectContaining({ + selection: items, + }) + ); }); }); - describe('onSelectNone', () => { - - beforeEach(() => component.selectionMode = NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone); + describe("onSelectNone", () => { + beforeEach( + () => + (component.selectionMode = + NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone) + ); - it('should set nextToggledState to SELECT', () => { + it("should set nextToggledState to SELECT", () => { component.nextToggleState = component.DESELECT; component.onSelectNone(); @@ -478,34 +533,38 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.nextToggleState).toEqual(component.SELECT); }); - it('should set selected items to empty array', () => { + it("should set selected items to empty array", () => { component.onSelectNone(); expect(component.selection).toEqual([]); }); - it('should emit empty array', async () => { - const resultPromise = firstValueFrom(component.selectionChanged) + it("should emit empty array", async () => { + const resultPromise = firstValueFrom(component.selectionChanged); component.onSelectNone(); const result = await resultPromise; - expect(result).toEqual(jasmine.objectContaining({ - selection: [] - })); + expect(result).toEqual( + jasmine.objectContaining({ + selection: [], + }) + ); }); }); - describe('loading', () => { - it('should be hidden if loading false', () => { + describe("loading", () => { + it("should be hidden if loading false", () => { component.loading = false; fixture.detectChanges(); - expect(fixture.nativeElement.querySelector('#loading').hidden).toEqual(true); + expect(fixture.nativeElement.querySelector("#loading").hidden).toEqual( + true + ); }); - it('should not disable searchInput if loading false', () => { + it("should not disable searchInput if loading false", () => { component.loading = false; fixture.detectChanges(); @@ -513,15 +572,17 @@ describe('NgbCustomFilterableDropdownComponent', () => { expect(component.searchInput.disabled).toEqual(false); }); - it('should not be hidden if loading true', () => { + it("should not be hidden if loading true", () => { component.loading = true; fixture.detectChanges(); - expect(fixture.nativeElement.querySelector('#loading').hidden).toEqual(false); + expect(fixture.nativeElement.querySelector("#loading").hidden).toEqual( + false + ); }); - it('should disable searchInput if loading false', () => { + it("should disable searchInput if loading false", () => { component.loading = true; fixture.detectChanges(); @@ -530,63 +591,73 @@ describe('NgbCustomFilterableDropdownComponent', () => { }); }); - describe('noItemsToDisplay', () => { - it('should not be hidden if filteredItems length is 0', () => { - component.items = ['🍔']; - component.searchInput.setValue('alsdkjfals'); + describe("noItemsToDisplay", () => { + it("should not be hidden if filteredItems length is 0", () => { + component.items = ["🍔"]; + component.searchInput.setValue("alsdkjfals"); fixture.detectChanges(); expect(component.noItemsToDisplay).toEqual(true); - expect(fixture.nativeElement.querySelector('#no-items').hidden).toEqual(false); + expect(fixture.nativeElement.querySelector("#no-items").hidden).toEqual( + false + ); }); - it('should be hidden if filteredItems length is not 0', () => { - const item = '🍕'; + it("should be hidden if filteredItems length is not 0", () => { + const item = "🍕"; component.items = [item]; component.searchInput.setValue(item); fixture.detectChanges(); expect(component.noItemsToDisplay).toEqual(false); - expect(fixture.nativeElement.querySelector('#no-items').hidden).toEqual(true); + expect(fixture.nativeElement.querySelector("#no-items").hidden).toEqual( + true + ); }); - it('should be hidden if loading is true', () => { - const item = '🍕'; + it("should be hidden if loading is true", () => { + const item = "🍕"; component.items = [item]; - component.searchInput.setValue(''); + component.searchInput.setValue(""); component.loading = true; fixture.detectChanges(); expect(component.noItemsToDisplay).toEqual(false); - expect(fixture.nativeElement.querySelector('#no-items').hidden).toEqual(true); + expect(fixture.nativeElement.querySelector("#no-items").hidden).toEqual( + true + ); }); }); - describe('showCreateItem', () => { - it('should return false if searchInputValue length is 0', () => { - component.searchInput.setValue(''); + describe("showCreateItem", () => { + it("should return false if searchInputValue length is 0", () => { + component.searchInput.setValue(""); fixture.detectChanges(); expect(component.showCreateItem).toEqual(false); - expect(fixture.nativeElement.querySelector('#create-item').hidden).toEqual(true); + expect( + fixture.nativeElement.querySelector("#create-item").hidden + ).toEqual(true); }); - it('should return false if allowCreateItem is false', () => { - component.searchInput.setValue('🎃'); + it("should return false if allowCreateItem is false", () => { + component.searchInput.setValue("🎃"); component.allowCreateItem = false; fixture.detectChanges(); expect(component.showCreateItem).toEqual(false); - expect(fixture.nativeElement.querySelector('#create-item').hidden).toEqual(true); + expect( + fixture.nativeElement.querySelector("#create-item").hidden + ).toEqual(true); }); - it('should return false if items contains searchInputValue', () => { - const item = '🎃'; + it("should return false if items contains searchInputValue", () => { + const item = "🎃"; component.searchInput.setValue(item); component.items = [...items, item]; component.allowCreateItem = true; @@ -594,11 +665,13 @@ describe('NgbCustomFilterableDropdownComponent', () => { fixture.detectChanges(); expect(component.showCreateItem).toEqual(false); - expect(fixture.nativeElement.querySelector('#create-item').hidden).toEqual(true); + expect( + fixture.nativeElement.querySelector("#create-item").hidden + ).toEqual(true); }); - it('should return false if loading is true', () => { - const item = '🎃'; + it("should return false if loading is true", () => { + const item = "🎃"; component.searchInput.setValue(item); component.allowCreateItem = true; component.loading = true; @@ -606,11 +679,13 @@ describe('NgbCustomFilterableDropdownComponent', () => { fixture.detectChanges(); expect(component.showCreateItem).toEqual(false); - expect(fixture.nativeElement.querySelector('#create-item').hidden).toEqual(true); + expect( + fixture.nativeElement.querySelector("#create-item").hidden + ).toEqual(true); }); - it('should return true if searchInputValue length is greater than 0, allowCreateItem is true, loading is false and items does not contain searchInputValue', () => { - const item = '🎃'; + it("should return true if searchInputValue length is greater than 0, allowCreateItem is true, loading is false and items does not contain searchInputValue", () => { + const item = "🎃"; component.searchInput.setValue(item); component.allowCreateItem = true; component.loading = false; @@ -618,63 +693,75 @@ describe('NgbCustomFilterableDropdownComponent', () => { fixture.detectChanges(); expect(component.showCreateItem).toEqual(true); - expect(fixture.nativeElement.querySelector('#create-item').hidden).toEqual(false); + expect( + fixture.nativeElement.querySelector("#create-item").hidden + ).toEqual(false); }); }); - describe('typeToCreateItem', () => { - it('should return false if filtered length is not 0', () => { + describe("typeToCreateItem", () => { + it("should return false if filtered length is not 0", () => { component.items = items; fixture.detectChanges(); expect(component.typeToCreateItem).toEqual(false); - expect(fixture.nativeElement.querySelector('#type-to-create').hidden).toEqual(true); + expect( + fixture.nativeElement.querySelector("#type-to-create").hidden + ).toEqual(true); }); - it('should return false if searchInputValue length is not 0', () => { + it("should return false if searchInputValue length is not 0", () => { component.items = []; - component.searchInput.setValue('🎃'); + component.searchInput.setValue("🎃"); fixture.detectChanges(); expect(component.typeToCreateItem).toEqual(false); - expect(fixture.nativeElement.querySelector('#type-to-create').hidden).toEqual(true); + expect( + fixture.nativeElement.querySelector("#type-to-create").hidden + ).toEqual(true); }); - it('should return false if allowCreateItem is false', () => { + it("should return false if allowCreateItem is false", () => { component.items = []; - component.searchInput.setValue(''); + component.searchInput.setValue(""); component.allowCreateItem = false; fixture.detectChanges(); expect(component.typeToCreateItem).toEqual(false); - expect(fixture.nativeElement.querySelector('#type-to-create').hidden).toEqual(true); + expect( + fixture.nativeElement.querySelector("#type-to-create").hidden + ).toEqual(true); }); - it('should return false if loading is true', () => { + it("should return false if loading is true", () => { component.items = []; - component.searchInput.setValue(''); + component.searchInput.setValue(""); component.allowCreateItem = true; component.loading = true; fixture.detectChanges(); expect(component.typeToCreateItem).toEqual(false); - expect(fixture.nativeElement.querySelector('#type-to-create').hidden).toEqual(true); + expect( + fixture.nativeElement.querySelector("#type-to-create").hidden + ).toEqual(true); }); - it('should return true if filtered length is 0, searchInputValue length is 0, loading is false and allowCreateItem is true', () => { + it("should return true if filtered length is 0, searchInputValue length is 0, loading is false and allowCreateItem is true", () => { component.items = []; - component.searchInput.setValue(''); + component.searchInput.setValue(""); component.allowCreateItem = true; component.loading = false; fixture.detectChanges(); expect(component.typeToCreateItem).toEqual(true); - expect(fixture.nativeElement.querySelector('#type-to-create').hidden).toEqual(false); + expect( + fixture.nativeElement.querySelector("#type-to-create").hidden + ).toEqual(false); }); }); }); diff --git a/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component.ts b/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component.ts index 2582169..8b967e0 100644 --- a/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component.ts +++ b/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component.ts @@ -1,25 +1,64 @@ -import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core'; -import { AbstractControl, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; -import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap'; -import { Subscription } from 'rxjs'; -import { ItemCreatedEvent, OpenChangedEvent, SelectionChangedEvent } from '../events'; -import { SelectionType } from '../selection-type'; +import { CommonModule } from "@angular/common"; +import { + Component, + ElementRef, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, + ViewChild, +} from "@angular/core"; +import { + AbstractControl, + ReactiveFormsModule, + UntypedFormControl, + UntypedFormGroup, +} from "@angular/forms"; +import { + NgbDropdown, + NgbDropdownMenu, + NgbDropdownToggle, + NgbTooltip, +} from "@ng-bootstrap/ng-bootstrap"; +import { Subscription } from "rxjs"; +import { + ItemCreatedEvent, + OpenChangedEvent, + SelectionChangedEvent, +} from "../events"; +import { AllComponent } from "../internals/icons/all.component"; +import { CheckmarkComponent } from "../internals/icons/checkmark.component"; +import { NoneComponent } from "../internals/icons/none.component"; +import { PlusComponent } from "../internals/icons/plus.component"; +import { SelectionType } from "../selection-type"; @Component({ - selector: 'ngb-custom-filterable-dropdown', // eslint-disable-line @angular-eslint/component-selector - templateUrl: './ngb-custom-filterable-dropdown.component.html', - styleUrls: ['./ngb-custom-filterable-dropdown.component.scss'], - standalone: false + selector: "ngb-custom-filterable-dropdown", // eslint-disable-line @angular-eslint/component-selector + templateUrl: "./ngb-custom-filterable-dropdown.component.html", + styleUrls: ["./ngb-custom-filterable-dropdown.component.scss"], + imports: [ + NgbDropdown, + NgbDropdownToggle, + NgbTooltip, + NgbDropdownMenu, + ReactiveFormsModule, + AllComponent, + NoneComponent, + PlusComponent, + CheckmarkComponent, + CommonModule, + ], }) export class NgbCustomFilterableDropdownComponent implements OnInit, OnDestroy { public readonly SELECT = SelectionType.All; public readonly DESELECT = SelectionType.None; - @Input() autoClose: boolean | 'outside' | 'inside' = 'outside'; + @Input() autoClose: boolean | "outside" | "inside" = "outside"; @Input() allowCreateItem = false; @Input() customClickHandle = false; @Input() disabled = false; - @Input() searchInputPlaceholder = 'Search'; + @Input() searchInputPlaceholder = "Search"; @Input() tooltips = false; @Input() tooltipsOpenDelay = 0; @Input() set items(value: Array) { @@ -49,7 +88,7 @@ export class NgbCustomFilterableDropdownComponent implements OnInit, OnDestroy { return arr[0]; } - return ''; + return ""; } @Input() set selectionMode(value: NgbFilterableDropdownSelectionMode) { @@ -57,18 +96,23 @@ export class NgbCustomFilterableDropdownComponent implements OnInit, OnDestroy { } @Output() - itemCreated: EventEmitter = new EventEmitter(); + itemCreated: EventEmitter = + new EventEmitter(); @Output() - selectionChanged: EventEmitter = new EventEmitter(); + selectionChanged: EventEmitter = + new EventEmitter(); @Output() - openChanged: EventEmitter = new EventEmitter(); + openChanged: EventEmitter = + new EventEmitter(); - @ViewChild('search', { static: true }) search: ElementRef; - @ViewChild('dropdown', { static: true }) dropdown: NgbDropdown; + @ViewChild("search", { static: true }) search: ElementRef; + @ViewChild("dropdown", { static: true }) dropdown: NgbDropdown; public filtered: Set = new Set(); public nextToggleState: SelectionType = this.SELECT; - public searchForm = new UntypedFormGroup({ searchInput: new UntypedFormControl() }); + public searchForm = new UntypedFormGroup({ + searchInput: new UntypedFormControl(), + }); private _itemsSet: Set = new Set(); private _items: Array = []; @@ -128,11 +172,11 @@ export class NgbCustomFilterableDropdownComponent implements OnInit, OnDestroy { } get searchInput(): AbstractControl { - return this.searchForm.controls['searchInput']; + return this.searchForm.controls["searchInput"]; } get searchInputValue(): string { - return this.searchInput.value || ''; + return this.searchInput.value || ""; } get typeToCreateItem(): boolean { @@ -146,7 +190,7 @@ export class NgbCustomFilterableDropdownComponent implements OnInit, OnDestroy { ngOnInit(): void { this._valueChangesSubscription = this.searchForm - .get('searchInput') + .get("searchInput") .valueChanges.subscribe((value) => { if (!value) { this.filtered = new Set(this.items); @@ -258,7 +302,7 @@ export class NgbCustomFilterableDropdownComponent implements OnInit, OnDestroy { } private resetFilterInput(): void { - this.searchInput.setValue(''); + this.searchInput.setValue(""); } private createItem(item: string): void { @@ -322,7 +366,7 @@ export class NgbCustomFilterableDropdownComponent implements OnInit, OnDestroy { return; } - if (typeof value === 'string') { + if (typeof value === "string") { this._selectedSet = new Set([value]); return; } @@ -343,9 +387,9 @@ export class NgbCustomFilterableDropdownComponent implements OnInit, OnDestroy { } export enum NgbFilterableDropdownSelectionMode { - SingleSelect = 'Single Select', - MultiSelectWithSelectAllSelectNone = 'Multi-Select with Select All and Select None', - MultiSelectWithSelectAll = 'Multi-Select with Select All', - MultiSelectWithSelectNone = 'Multi-Select with Select None', - MultiSelect = 'Multi-Select' + SingleSelect = "Single Select", + MultiSelectWithSelectAllSelectNone = "Multi-Select with Select All and Select None", + MultiSelectWithSelectAll = "Multi-Select with Select All", + MultiSelectWithSelectNone = "Multi-Select with Select None", + MultiSelect = "Multi-Select", } diff --git a/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.module.ts b/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.module.ts index 2a06f6e..88b91c6 100644 --- a/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.module.ts +++ b/projects/ngb-filterable-dropdown/src/lib/ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.module.ts @@ -1,19 +1,20 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { NgbDropdownModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; -import { InternalsModule } from '../internals/internals.module'; -import { NgbCustomFilterableDropdownComponent } from './ngb-custom-filterable-dropdown.component'; +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; +import { FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { + NgbDropdownModule, + NgbTooltipModule, +} from "@ng-bootstrap/ng-bootstrap"; +import { NgbCustomFilterableDropdownComponent } from "./ngb-custom-filterable-dropdown.component"; @NgModule({ - declarations: [NgbCustomFilterableDropdownComponent], imports: [ + NgbCustomFilterableDropdownComponent, FormsModule, ReactiveFormsModule, CommonModule, NgbDropdownModule, NgbTooltipModule, - InternalsModule, ], exports: [NgbCustomFilterableDropdownComponent], }) diff --git a/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.component.spec.ts b/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.component.spec.ts index 2b03748..3470b7f 100644 --- a/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.component.spec.ts +++ b/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.component.spec.ts @@ -1,13 +1,13 @@ -import { CommonModule } from '@angular/common'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ReactiveFormsModule } from '@angular/forms'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgbFilterableDropdownComponent } from './ngb-filterable-dropdown.component'; -import { NgbFilterableDropdownSelectionMode } from '../ngb-filterable-drop-down-selection-mode'; -import { InternalsModule } from '../internals/internals.module'; -import { NgbCustomFilterableDropdownModule } from '../ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.module'; +import { CommonModule } from "@angular/common"; +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; +import { MultiSelectPipe } from "../internals/multi-select-pipe/multi-select-pipe"; +import { NgbCustomFilterableDropdownModule } from "../ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.module"; +import { NgbFilterableDropdownSelectionMode } from "../ngb-filterable-drop-down-selection-mode"; +import { NgbFilterableDropdownComponent } from "./ngb-filterable-dropdown.component"; -describe('NgbFilterableDropdownComponent', () => { +describe("NgbFilterableDropdownComponent", () => { let component: NgbFilterableDropdownComponent; let fixture: ComponentFixture; @@ -17,60 +17,60 @@ describe('NgbFilterableDropdownComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ imports: [ + NgbFilterableDropdownComponent, + MultiSelectPipe, NgbModule, ReactiveFormsModule, CommonModule, - InternalsModule, NgbCustomFilterableDropdownModule, ], - declarations: [NgbFilterableDropdownComponent], }).compileComponents(); fixture = TestBed.createComponent(NgbFilterableDropdownComponent); component = fixture.componentInstance; - filterItem = 'foo'; - items = [filterItem, 'bar', 'baz']; + filterItem = "foo"; + items = [filterItem, "bar", "baz"]; component.items = items; fixture.detectChanges(); }); - it('should create', () => { + it("should create", () => { expect(component).toBeTruthy(); }); - it('should be disabled if disabled input is true', () => { + it("should be disabled if disabled input is true", () => { component.disabled = true; fixture.detectChanges(); expect( - fixture.nativeElement.querySelector('button[disabled]') + fixture.nativeElement.querySelector("button[disabled]") ).toBeTruthy(); }); - it('should display placeholder as currentItem if no items are selected', () => { - component.items = ['it\'s a living']; + it("should display placeholder as currentItem if no items are selected", () => { + component.items = ["it's a living"]; fixture.detectChanges(); - expect(fixture.nativeElement.querySelector('#toggle').innerText).toEqual( + expect(fixture.nativeElement.querySelector("#toggle").innerText).toEqual( component.placeholder ); }); - it('should display currentItem if one item is selected', () => { - const currentItem = 'MyDatabaseName'; + it("should display currentItem if one item is selected", () => { + const currentItem = "MyDatabaseName"; component.items = [currentItem]; component.selection = [currentItem]; fixture.detectChanges(); - expect(fixture.nativeElement.querySelector('#toggle').innerText).toEqual( + expect(fixture.nativeElement.querySelector("#toggle").innerText).toEqual( currentItem ); }); - it('should display Multiple as currentItem if more than one item is selected', () => { + it("should display Multiple as currentItem if more than one item is selected", () => { component.selectionMode = NgbFilterableDropdownSelectionMode.MultiSelectWithSelectAllSelectNone; - component.selection = ['one', 'two', 'three']; + component.selection = ["one", "two", "three"]; fixture.detectChanges(); - expect(fixture.nativeElement.querySelector('#toggle').innerText).toEqual( - 'Multiple' + expect(fixture.nativeElement.querySelector("#toggle").innerText).toEqual( + "Multiple" ); }); }); diff --git a/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.component.ts b/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.component.ts index a048d15..27345aa 100644 --- a/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.component.ts +++ b/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.component.ts @@ -1,32 +1,46 @@ -import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { ItemCreatedEvent, OpenChangedEvent, SelectionChangedEvent } from '../events'; -import { NgbFilterableDropdownSelectionMode } from '../ngb-filterable-drop-down-selection-mode'; +import { CommonModule } from "@angular/common"; +import { Component, EventEmitter, Input, Output } from "@angular/core"; +import { + ItemCreatedEvent, + OpenChangedEvent, + SelectionChangedEvent, +} from "../events"; +import { MultiSelectPipe } from "../internals/multi-select-pipe/multi-select-pipe"; +import { NgbCustomFilterableDropdownComponent } from "../ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.component"; +import { NgbFilterableDropdownSelectionMode } from "../ngb-filterable-drop-down-selection-mode"; @Component({ - selector: 'ngb-filterable-dropdown', // eslint-disable-line @angular-eslint/component-selector - templateUrl: './ngb-filterable-dropdown.component.html', - styleUrls: ['./ngb-filterable-dropdown.component.scss'], - standalone: false + selector: "ngb-filterable-dropdown", // eslint-disable-line @angular-eslint/component-selector + templateUrl: "./ngb-filterable-dropdown.component.html", + styleUrls: ["./ngb-filterable-dropdown.component.scss"], + imports: [ + NgbCustomFilterableDropdownComponent, + MultiSelectPipe, + CommonModule, + ], }) export class NgbFilterableDropdownComponent { @Input() allowCreateItem = false; - @Input() autoClose: boolean | 'outside' | 'inside' = false; + @Input() autoClose: boolean | "outside" | "inside" = false; @Input() disabled = false; @Input() items: string | Array = []; @Input() loading = false; - @Input() placeholder = 'No Items Selected'; - @Input() searchInputPlaceholder = 'Search'; + @Input() placeholder = "No Items Selected"; + @Input() searchInputPlaceholder = "Search"; @Input() selection: string | Array = []; @Input() selectionMode: NgbFilterableDropdownSelectionMode; @Input() tooltips = false; @Input() tooltipsOpenDelay = 0; @Output() - itemCreated: EventEmitter = new EventEmitter(); + itemCreated: EventEmitter = + new EventEmitter(); @Output() - openChanged: EventEmitter = new EventEmitter(); + openChanged: EventEmitter = + new EventEmitter(); @Output() - selectionChanged: EventEmitter = new EventEmitter(); + selectionChanged: EventEmitter = + new EventEmitter(); onItemCreated($event: ItemCreatedEvent) { this.itemCreated.next($event); diff --git a/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.module.ts b/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.module.ts index bfe327a..763ab8d 100644 --- a/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.module.ts +++ b/projects/ngb-filterable-dropdown/src/lib/ngb-filterable-dropdown/ngb-filterable-dropdown.module.ts @@ -1,19 +1,17 @@ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { InternalsModule } from '../internals/internals.module'; -import { NgbFilterableDropdownComponent } from './ngb-filterable-dropdown.component'; -import { NgbCustomFilterableDropdownModule } from '../ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.module'; +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; +import { FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; +import { NgbCustomFilterableDropdownModule } from "../ngb-custom-filterable-dropdown/ngb-custom-filterable-dropdown.module"; +import { NgbFilterableDropdownComponent } from "./ngb-filterable-dropdown.component"; @NgModule({ - declarations: [NgbFilterableDropdownComponent], imports: [ + NgbFilterableDropdownComponent, FormsModule, ReactiveFormsModule, CommonModule, NgbModule, - InternalsModule, NgbCustomFilterableDropdownModule, ], exports: [NgbFilterableDropdownComponent],