diff --git a/angular.json b/angular.json index 6cb3b53..73d4c4e 100644 --- a/angular.json +++ b/angular.json @@ -43,7 +43,11 @@ { "glob": "axios.min.js", "input": "./node_modules/axios/dist", "output": "swagger-ui" }, { "glob": "**/*", "input": "src/main/webapp/swagger-ui/", "output": "swagger-ui" } ], - "styles": ["src/main/webapp/content/scss/paper-dashboard.scss", "./node_modules/swiper/swiper-bundle.min.css"], + "styles": [ + "src/main/webapp/content/scss/paper-dashboard.scss", + "./node_modules/swiper/swiper-bundle.min.css", + "node_modules/chartist/dist/chartist.css" + ], "scripts": [ "./node_modules/jquery/dist/jquery.min.js", "src/main/webapp/content/js/jquery.bootstrap.wizard.min.js", diff --git a/package-lock.json b/package-lock.json index 82ef242..bea9194 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,17 @@ { "name": "data-survey", "version": "0.0.1-SNAPSHOT", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, + "packages": { "": { "name": "data-survey", "version": "0.0.1-SNAPSHOT", + "hasInstallScript": true, "license": "MIT", "dependencies": { + "@angular/cdk": "^12.1.4", "@angular/common": "12.0.5", "@angular/compiler": "12.0.5", "@angular/core": "12.0.5", @@ -17,18 +20,26 @@ "@angular/platform-browser": "12.0.5", "@angular/platform-browser-dynamic": "12.0.5", "@angular/router": "12.0.5", - "@fortawesome/angular-fontawesome": "0.9.0", - "@fortawesome/fontawesome-svg-core": "1.2.35", - "@fortawesome/free-solid-svg-icons": "5.15.3", + "@fortawesome/angular-fontawesome": "^0.9.0", + "@fortawesome/fontawesome-svg-core": "^1.2.35", + "@fortawesome/free-brands-svg-icons": "^5.15.3", + "@fortawesome/free-solid-svg-icons": "^5.15.3", "@ng-bootstrap/ng-bootstrap": "9.1.3", "@ngx-translate/core": "13.0.0", "@ngx-translate/http-loader": "6.0.0", "@types/gapi.auth2": "0.0.54", "angularx-social-login": "^4.0.1", "bootstrap": "4.6.0", + "chartist": "^0.11.4", "dayjs": "1.10.5", + "file-saver": "^2.0.5", "jquery": "^3.6.0", + "jspdf": "^2.3.1", + "jw-angular-social-buttons": "^1.0.0", + "ng-chartist": "^5.0.0", "ngx-infinite-scroll": "10.0.1", + "ngx-paypal": "^8.0.0", + "ngx-sharebuttons": "^8.0.5", "ngx-webstorage": "8.0.0", "rxjs": "6.6.7", "sockjs-client": "1.5.0", @@ -36,6 +47,7 @@ "swiper": "^6.7.5", "tslib": "2.3.0", "webstomp-client": "1.2.6", + "xlsx": "^0.17.0", "zone.js": "0.11.4" }, "devDependencies": { @@ -46,6 +58,8 @@ "@angular/compiler-cli": "12.0.5", "@angular/service-worker": "12.0.5", "@types/bootstrap": "^5.0.17", + "@types/chartist": "^0.11.1", + "@types/file-saver": "^2.0.3", "@types/jest": "26.0.23", "@types/jquery": "^3.5.6", "@types/node": "15.12.2", @@ -82,6 +96,19 @@ "node": ">=14.17.1" } }, + "node_modules/@ampproject/remapping": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", + "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "1.0.0", + "sourcemap-codec": "1.4.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@angular-builders/custom-webpack": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-12.1.0.tgz", @@ -119,12 +146,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1201.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.1.tgz", - "integrity": "sha512-n7ycxrIPbtnV7q8PH5Uvs8Jd++u6hWUiB+8EUxznSfdHGA+fE7TTnJTkc27LoMlYZAImc/Axp/uyYZ6Awt72ZQ==", + "version": "0.1202.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.0.tgz", + "integrity": "sha512-99O8iLO9LEVTPYN6kj6XINHxjw13ofTS48hm3D0i44QMEyq3SRH1ctH6HcUAtbgPF3VjOUFr5vRYpQN1OdOCXw==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.1.1", + "@angular-devkit/core": "12.2.0", "rxjs": "6.6.7" }, "engines": { @@ -134,76 +161,76 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.1.tgz", - "integrity": "sha512-mJjpPuJlS55gwi/W2g8CIMjPVtUjKCKJdjn34eeYk1Kgw9JYRIsiEivx1hcGyLmiSTF8gRGvW1TEyO+k55/QqA==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.0.tgz", + "integrity": "sha512-hcnlTZo1iWVVDiq2MSwbEJtc2E4rf7tSvsBvSVQLH1GILtVvN64L3YW0wVThNctWL8nicHWjtGQ+z3kjCOhxYw==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1201.1", - "@angular-devkit/build-optimizer": "0.1201.1", - "@angular-devkit/build-webpack": "0.1201.1", - "@angular-devkit/core": "12.1.1", - "@babel/core": "7.14.6", - "@babel/generator": "7.14.5", + "@ampproject/remapping": "1.0.1", + "@angular-devkit/architect": "0.1202.0", + "@angular-devkit/build-optimizer": "0.1202.0", + "@angular-devkit/build-webpack": "0.1202.0", + "@angular-devkit/core": "12.2.0", + "@babel/core": "7.14.8", + "@babel/generator": "7.14.8", "@babel/helper-annotate-as-pure": "7.14.5", "@babel/plugin-proposal-async-generator-functions": "7.14.7", "@babel/plugin-transform-async-to-generator": "7.14.5", "@babel/plugin-transform-runtime": "7.14.5", - "@babel/preset-env": "7.14.7", - "@babel/runtime": "7.14.6", + "@babel/preset-env": "7.14.8", + "@babel/runtime": "7.14.8", "@babel/template": "7.14.5", "@discoveryjs/json-ext": "0.5.3", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.1.1", + "@ngtools/webpack": "12.2.0", "ansi-colors": "4.1.1", "babel-loader": "8.2.2", "browserslist": "^4.9.1", "cacache": "15.2.0", "caniuse-lite": "^1.0.30001032", "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.0", - "core-js": "3.15.1", + "copy-webpack-plugin": "9.0.1", + "core-js": "3.16.0", "critters": "0.0.10", - "css-loader": "5.2.6", - "css-minimizer-webpack-plugin": "3.0.1", + "css-loader": "6.2.0", + "css-minimizer-webpack-plugin": "3.0.2", + "esbuild": "0.12.17", "find-cache-dir": "3.3.1", "glob": "7.1.7", "https-proxy-agent": "5.0.0", - "inquirer": "8.1.1", - "jest-worker": "27.0.2", + "inquirer": "8.1.2", "karma-source-map-support": "1.4.0", "less": "4.1.1", - "less-loader": "10.0.0", - "license-webpack-plugin": "2.3.19", + "less-loader": "10.0.1", + "license-webpack-plugin": "2.3.20", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "1.6.2", + "mini-css-extract-plugin": "2.1.0", "minimatch": "3.0.4", "open": "8.2.1", "ora": "5.4.1", "parse5-html-rewriting-stream": "6.0.1", - "postcss": "8.3.5", + "piscina": "3.1.0", + "postcss": "8.3.6", "postcss-import": "14.0.2", - "postcss-loader": "6.1.0", + "postcss-loader": "6.1.1", "postcss-preset-env": "6.7.0", - "raw-loader": "4.0.2", - "regenerator-runtime": "0.13.7", + "regenerator-runtime": "0.13.9", "resolve-url-loader": "4.0.0", "rxjs": "6.6.7", - "sass": "1.35.1", + "sass": "1.36.0", "sass-loader": "12.1.0", "semver": "7.3.5", - "source-map": "0.7.3", "source-map-loader": "3.0.0", "source-map-support": "0.5.19", - "style-loader": "2.0.0", + "style-loader": "3.2.1", "stylus": "0.54.8", "stylus-loader": "6.1.0", - "terser": "5.7.0", - "terser-webpack-plugin": "5.1.3", + "terser": "5.7.1", + "terser-webpack-plugin": "5.1.4", "text-table": "0.2.0", "tree-kill": "1.2.2", "tslib": "2.3.0", - "webpack": "5.41.1", + "webpack": "5.47.1", "webpack-dev-middleware": "5.0.0", "webpack-dev-server": "3.11.2", "webpack-merge": "5.8.0", @@ -215,9 +242,9 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^12.0.0 || ^12.1.0-next", - "@angular/localize": "^12.0.0 || ^12.1.0-next", - "@angular/service-worker": "^12.0.0 || ^12.1.0-next", + "@angular/compiler-cli": "^12.0.0 || ^12.2.0-next", + "@angular/localize": "^12.0.0 || ^12.2.0-next", + "@angular/service-worker": "^12.0.0 || ^12.2.0-next", "karma": "^6.3.0", "ng-packagr": "^12.0.0 || ^12.1.0-next", "protractor": "^7.0.0", @@ -249,15 +276,101 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/copy-webpack-plugin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.5", + "glob-parent": "^6.0.0", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/glob-parent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/@angular-devkit/build-optimizer": { - "version": "0.1201.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.1.tgz", - "integrity": "sha512-SdAffCpjRNFKwnEq8xdPdCWPgdrfY8rlmTZXGY7e1whR4vnyZi+afk1BAsmbNyWlHYVv0Zcnh+Q1VH3OBDLwhw==", + "version": "0.1202.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.0.tgz", + "integrity": "sha512-ORZGPrBTlzfSUzAZTrbpMgTbx1TaMcJ+nEFDj0hVBK+DUgf7GnaRjltlIqfKKphh7c6h3OKZAu3k2Lo57WqcIA==", "dev": true, "dependencies": { "source-map": "0.7.3", "tslib": "2.3.0", - "typescript": "4.3.4" + "typescript": "4.3.5" }, "bin": { "build-optimizer": "src/build-optimizer/cli.js" @@ -277,9 +390,9 @@ } }, "node_modules/@angular-devkit/build-optimizer/node_modules/typescript": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", - "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -290,12 +403,12 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1201.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.1.tgz", - "integrity": "sha512-isgj6bSFr16tuXEoX0VypvsQmg3uDOdvYDQZvkwzUrIyvQo5TeoOy/MLgrb9v+tXjEA7oZrzuigE4Hjzn466bQ==", + "version": "0.1202.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.0.tgz", + "integrity": "sha512-G2Iljb8Vpu5+N6jWUii2m8p5NRJe84pgiQbIOxQvegEYkdmbISQYmW3ubFjWDQgjArCpZyWJQ/AIwhmkRef5xQ==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1201.1", + "@angular-devkit/architect": "0.1202.0", "rxjs": "6.6.7" }, "engines": { @@ -309,12 +422,12 @@ } }, "node_modules/@angular-devkit/core": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.1.tgz", - "integrity": "sha512-z5+O3ugXbo8djKPjUtf/UfnYCmco2K1LVhQ6cWLhKi3NKRBiHeNmZh5nAycqFD8/Q+oI/+Ao40MkmkK1Tq0jsw==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.0.tgz", + "integrity": "sha512-9H2NfE4eazpMPwbAx4ZbtTNijo6419DZsmQzlzwQWzTInO3+CAjQuyW53W5Nt/IoauNVOgOEsC8/YbYjNmN0Aw==", "dev": true, "dependencies": { - "ajv": "8.6.0", + "ajv": "8.6.2", "ajv-formats": "2.1.0", "fast-json-stable-stringify": "2.1.0", "magic-string": "0.25.7", @@ -502,6 +615,28 @@ "typescript": "*" } }, + "node_modules/@angular/cdk": { + "version": "12.2.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.1.tgz", + "integrity": "sha512-UOzuDXcfaJlBd+o7EJb6CZ3my1AmU7XHriC/hFT6bFianhVK/I/0gcOwxyMx8VAplEip8msLczX0IlZSJ1GCCg==", + "dependencies": { + "tslib": "^2.2.0" + }, + "optionalDependencies": { + "parse5": "^5.0.0" + }, + "peerDependencies": { + "@angular/common": "^12.0.0 || ^13.0.0-0", + "@angular/core": "^12.0.0 || ^13.0.0-0", + "rxjs": "^6.5.3 || ^7.0.0" + } + }, + "node_modules/@angular/cdk/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + }, "node_modules/@angular/cli": { "version": "12.0.4", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.0.4.tgz", @@ -983,6 +1118,12 @@ "@angular/core": "12.0.5" } }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, "node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", @@ -1004,20 +1145,20 @@ } }, "node_modules/@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz", + "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", + "@babel/helper-module-transforms": "^7.14.8", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.14.8", "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1052,11 +1193,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "dependencies": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -1125,16 +1266,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", + "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.14.5", "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.15.0", "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", "@babel/helper-split-export-declaration": "^7.14.5" }, "engines": { @@ -1236,12 +1377,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.0" }, "engines": { "node": ">=6.9.0" @@ -1260,19 +1401,19 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" }, "engines": { "node": ">=6.9.0" @@ -1314,27 +1455,27 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.15.0", "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.14.8" }, "engines": { "node": ">=6.9.0" @@ -1364,9 +1505,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "engines": { "node": ">=6.9.0" } @@ -1396,13 +1537,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", + "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", "dependencies": { "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" }, "engines": { "node": ">=6.9.0" @@ -1422,9 +1563,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "version": "7.15.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.2.tgz", + "integrity": "sha512-bMJXql1Ss8lFnvr11TZDH4ArtwlAS5NG9qBmdiFW2UHHm6MVoR+GDc5XE2b9K938cyjc9O6/+vjjcffLDtfuDg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1976,9 +2117,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", + "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.14.5", @@ -2152,14 +2293,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz", + "integrity": "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-module-transforms": "^7.15.0", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-simple-access": "^7.14.8", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -2205,9 +2346,9 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", - "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.14.5" @@ -2447,9 +2588,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.8.tgz", + "integrity": "sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.14.7", @@ -2519,7 +2660,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.14.5", "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "babel-plugin-polyfill-corejs2": "^0.2.2", "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", @@ -2559,9 +2700,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -2570,6 +2711,19 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz", + "integrity": "sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==", + "optional": true, + "dependencies": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", @@ -2584,17 +2738,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.15.0", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2602,12 +2756,33 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2743,9 +2918,9 @@ } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==", + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", + "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", "hasInstallScript": true, "engines": { "node": ">=6" @@ -2763,6 +2938,18 @@ "node": ">=6" } }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.15.4.tgz", + "integrity": "sha512-f1witbwycL9cTENJegcmcZRYyawAFbm8+c6IirLmwbbpqz46wyjbQYLuxOc7weXFXfB7QR8/Vd2u5R3q6JYD9g==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@fortawesome/free-solid-svg-icons": { "version": "5.15.3", "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", @@ -3522,6 +3709,15 @@ "node": ">=8" } }, + "node_modules/@jridgewell/resolve-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", + "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jsdevtools/coverage-istanbul-loader": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", @@ -3551,20 +3747,17 @@ } }, "node_modules/@ngtools/webpack": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.1.tgz", - "integrity": "sha512-NOHTBEjUkawQSU6sHA7EJSi5Ixw+oVmlYi17HXAhGRY1czasLQMiKQPnigbSgMLBR9Jhez7TttqAUtx6Pey2FQ==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.0.tgz", + "integrity": "sha512-EocGfCbpPAnanDlagtlbVHpgSWE0a5NyWOY6RCw0pAxj1zL9SYMMId4X+ZJ21C23m6JqNXnWNZ4ib+LaXBIOBg==", "dev": true, - "dependencies": { - "enhanced-resolve": "5.8.2" - }, "engines": { "node": "^12.14.1 || >=14.0.0", "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^12.0.0 || ^12.1.0-next", + "@angular/compiler-cli": "^12.0.0 || ^12.2.0-next", "typescript": "~4.2.3 || ~4.3.2", "webpack": "^5.30.0" } @@ -4202,6 +4395,12 @@ "@types/jquery": "*" } }, + "node_modules/@types/chartist": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@types/chartist/-/chartist-0.11.1.tgz", + "integrity": "sha512-85eNd7rF+e5sLnpprgcDdeqARgNvczEXaBfnrkw0292TBCE4KF/2HmOPA6dIblyHUWV4OZ2kuQBH2R12F+VwYg==", + "dev": true + }, "node_modules/@types/concat-stream": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", @@ -4232,9 +4431,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.49", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.49.tgz", - "integrity": "sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw==", + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, "node_modules/@types/expect": { @@ -4243,6 +4442,12 @@ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", "dev": true }, + "node_modules/@types/file-saver": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.3.tgz", + "integrity": "sha512-MBIou8pd/41jkff7s97B47bc9+p0BszqqDJsO51yDm49uUxeKzrfuNl5fSLC6BpLEWKA8zlwyqALVmXrFwoBHQ==", + "dev": true + }, "node_modules/@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", @@ -4328,9 +4533,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "node_modules/@types/json5": { @@ -4375,6 +4580,12 @@ "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", "dev": true }, + "node_modules/@types/raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "optional": true + }, "node_modules/@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", @@ -4801,148 +5012,148 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, @@ -5042,6 +5253,21 @@ "node": ">=8.9" } }, + "node_modules/adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "adler32": "bin/adler32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -5088,9 +5314,9 @@ } }, "node_modules/ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -5454,7 +5680,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, "bin": { "atob": "bin/atob.js" }, @@ -6514,6 +6739,17 @@ "node-int64": "^0.4.0" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -6659,12 +6895,42 @@ "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", "dev": true }, + "node_modules/canvg": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.7.tgz", + "integrity": "sha512-4sq6iL5Q4VOXS3PL1BapiXIZItpxYyANVzsAKpTPS5oq4u3SKbGfUcbZh2gdLCQ3jWpG/y5wRkMlBBAJhXeiZA==", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.9.6", + "@types/raf": "^3.4.0", + "raf": "^3.4.1", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^5.0.5" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "node_modules/cfb": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz", + "integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==", + "dependencies": { + "adler-32": "~1.2.0", + "crc-32": "~1.2.0", + "printj": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -6693,6 +6959,14 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "node_modules/chartist": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/chartist/-/chartist-0.11.4.tgz", + "integrity": "sha512-H4AimxaUD738/u9Mq8t27J4lh6STsLi4BQHt65nOtpLk3xyrBPaLiLMrHw7/WV9CmsjGA02WihjuL5qpSagLYw==", + "engines": { + "node": ">=4.6.0" + } + }, "node_modules/chevrotain": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-9.0.2.tgz", @@ -7058,6 +7332,26 @@ "node": ">=0.10.0" } }, + "node_modules/codepage": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=", + "dependencies": { + "commander": "~2.14.1", + "exit-on-epipe": "~1.0.1" + }, + "bin": { + "codepage": "bin/codepage.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/codepage/node_modules/commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + }, "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -7111,9 +7405,9 @@ } }, "node_modules/colord": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", - "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.6.0.tgz", + "integrity": "sha512-8yMrtE20ZxH1YWvvSoeJFtvqY+GIAOfU+mZ3jx7ZSiEMasnAmNqD1BKUP3CuCWcy/XHgcXkLW6YU8C35nhOYVg==", "dev": true }, "node_modules/colorette": { @@ -7613,10 +7907,10 @@ } }, "node_modules/core-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", - "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==", - "dev": true, + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "devOptional": true, "hasInstallScript": true, "funding": { "type": "opencollective", @@ -7646,6 +7940,17 @@ "semver": "bin/semver.js" } }, + "node_modules/core-js-pure": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.1.tgz", + "integrity": "sha512-TyofCdMzx0KMhi84mVRS8rL1XsRk2SPUNz2azmth53iRN0/08Uim9fdhQTaZTG1LqaXHYVci4RDHka6WrXfnvg==", + "hasInstallScript": true, + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -7668,6 +7973,21 @@ "node": ">=10" } }, + "node_modules/crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -7846,9 +8166,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz", + "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==", "dev": true, "dependencies": { "timsort": "^0.3.0" @@ -7941,86 +8261,62 @@ "node": ">=6" } }, + "node_modules/css-line-break": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.0.1.tgz", + "integrity": "sha512-gwKYIMUn7xodIcb346wgUhE2Dt5O1Kmrc16PWi8sL4FTfyDj8P5095rzH7+O8CTZudJr+uw2GCI/hwEkDJFI2w==", + "optional": true, + "dependencies": { + "base64-arraybuffer": "^0.2.0" + } + }, + "node_modules/css-line-break/node_modules/base64-arraybuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", + "optional": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.2.0.tgz", + "integrity": "sha512-/rvHfYRjIpymZblf49w8jYcRo2y9gj6rV8UroHGmBxKrIyGLokpycyKzp9OkitvqT29ZSpzJ0Ic7SpnJX3sC8g==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", "semver": "^7.3.5" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/css-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "webpack": "^5.0.0" } }, "node_modules/css-minimizer-webpack-plugin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.1.tgz", - "integrity": "sha512-RGFIv6iZWUPO2T1vE5+5pNCSs2H2xtHYRdfZPiiNH8Of6QOn9BeFnZSoHiQMkmsxOO/JkPe4BpKfs7slFIWcTA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", "dev": true, "dependencies": { - "cssnano": "^5.0.0", + "cssnano": "^5.0.6", "jest-worker": "^27.0.2", "p-limit": "^3.0.2", - "postcss": "^8.2.9", + "postcss": "^8.3.5", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" }, "engines": { @@ -8065,12 +8361,12 @@ "dev": true }, "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -8082,6 +8378,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/css-minimizer-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8266,14 +8571,15 @@ } }, "node_modules/cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.7.tgz", + "integrity": "sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" + "is-resolvable": "^1.1.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -9049,6 +9355,12 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.0.tgz", + "integrity": "sha512-VV5C6Kr53YVHGOBKO/F86OYX6/iLTw2yVSI721gKetxpHCK/V5TaLEf9ODjRgl1KLSWRMY6cUhAbv/c+IUnwQw==", + "optional": true + }, "node_modules/domutils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", @@ -9420,9 +9732,9 @@ } }, "node_modules/es-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", - "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", "dev": true }, "node_modules/es6-promise": { @@ -9431,6 +9743,16 @@ "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=", "dev": true }, + "node_modules/esbuild": { + "version": "0.12.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.17.tgz", + "integrity": "sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -10004,6 +10326,12 @@ "node": ">= 0.6" } }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -10062,6 +10390,14 @@ "node": ">= 0.8.0" } }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -10555,6 +10891,11 @@ "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==", "dev": true }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -10582,6 +10923,11 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -10829,6 +11175,14 @@ "node": ">= 0.6" } }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -11541,6 +11895,23 @@ "node": ">=0.10.0" } }, + "node_modules/hdr-histogram-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz", + "integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, "node_modules/hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", @@ -11631,6 +12002,18 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/html2canvas": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.2.2.tgz", + "integrity": "sha512-cxZR1bGxtmhxeoCxM+s1WfRzDtpKPuHHZ7ExX01EdhgdEQCvMDZLDj3aknE8ywSoed8JM8AXhQiuD1KFwMm3Gw==", + "optional": true, + "dependencies": { + "css-line-break": "2.0.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/http-basic": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", @@ -12196,9 +12579,9 @@ } }, "node_modules/inquirer": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", - "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.2.tgz", + "integrity": "sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", @@ -12211,7 +12594,7 @@ "mute-stream": "0.0.8", "ora": "^5.3.0", "run-async": "^2.4.0", - "rxjs": "^6.6.6", + "rxjs": "^7.2.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" @@ -12278,6 +12661,15 @@ "node": ">=8" } }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.3.0.tgz", + "integrity": "sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==", + "dev": true, + "dependencies": { + "tslib": "~2.1.0" + } + }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12290,6 +12682,12 @@ "node": ">=8" } }, + "node_modules/inquirer/node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, "node_modules/insight": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/insight/-/insight-0.10.3.tgz", @@ -15735,6 +16133,22 @@ "node >= 0.2.0" ] }, + "node_modules/jspdf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.3.1.tgz", + "integrity": "sha512-1vp0USP1mQi1h7NKpwxjFgQkJ5ncZvtH858aLpycUc/M+r/RpWJT8PixAU7Cw/3fPd4fpC8eB/Bj42LnsR21YQ==", + "dependencies": { + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.4.8" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "html2canvas": "^1.0.0-rc.5" + } + }, "node_modules/jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -15762,6 +16176,11 @@ "integrity": "sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w==", "dev": true }, + "node_modules/jw-angular-social-buttons": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jw-angular-social-buttons/-/jw-angular-social-buttons-1.0.0.tgz", + "integrity": "sha512-E1xxsZBj0+DzJC7iPrwqq08UnfMbYuUHibMt5ijSqrR2LyBKmrZIlRM+8I+4e3m0bNNt1nwBbXcKlY6DsvOCOQ==" + }, "node_modules/karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -15849,9 +16268,9 @@ } }, "node_modules/less-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.0.tgz", - "integrity": "sha512-JjioAkw9qyavL0BzMPUOHJa0a20fh+ipq/MNZH4OkU8qERsCMeZIWRE0FDBIx2O+cFguvY01vHh/lmBA9LyWDg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.1.tgz", + "integrity": "sha512-Crln//HpW9M5CbtdfWm3IO66Cvx1WhZQvNybXgfB2dD/6Sav9ppw+IWqs/FQKPBFO4B6X0X28Z0WNznshgwUzA==", "dev": true, "dependencies": { "klona": "^2.0.4" @@ -15941,9 +16360,9 @@ } }, "node_modules/license-webpack-plugin": { - "version": "2.3.19", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.19.tgz", - "integrity": "sha512-z/izhwFRYHs1sCrDgrTUsNJpd+Xsd06OcFWSwHz/TiZygm5ucweVZi1Hu14Rf6tOj/XAl1Ebyc7GW6ZyyINyWA==", + "version": "2.3.20", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.20.tgz", + "integrity": "sha512-AHVueg9clOKACSHkhmEI+PCC9x8+qsQVuKECZD3ETxETK5h/PCv5/MUzyG1gm8OMcip/s1tcNxqo9Qb7WhjGsg==", "dev": true, "dependencies": { "@types/webpack-sources": "^0.1.5", @@ -15955,6 +16374,15 @@ } } }, + "node_modules/lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/limiter": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", @@ -16806,24 +17234,22 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.1.0.tgz", + "integrity": "sha512-SV1GgjMcfqy6hW07rAniUbQE4qS3inh3v4rZEUySkPRWy3vMbS3jUCjMOvNI4lUnDlQYJEmuUqKktTCNY5koFQ==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^3.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" + "webpack": "^5.0.0" } }, "node_modules/mini-css-extract-plugin/node_modules/ajv": { @@ -16849,12 +17275,12 @@ "dev": true }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -17179,6 +17605,20 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/ng-chartist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ng-chartist/-/ng-chartist-5.0.0.tgz", + "integrity": "sha512-lTHuND77RuYNxpt0qPlGW5LuohCMUTX0LCMYEhTqCPstBImPP+ZHM7+Dnpzx8FpNstBPandzvlEWVbKPMfn2FA==", + "dependencies": { + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@angular/common": ">=12.0.2", + "@angular/core": ">=12.0.2", + "@types/chartist": "^0.11.0", + "chartist": ">=0.11.4" + } + }, "node_modules/ngx-infinite-scroll": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-10.0.1.tgz", @@ -17189,6 +17629,32 @@ "opencollective-postinstall": "^2.0.2" } }, + "node_modules/ngx-paypal": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ngx-paypal/-/ngx-paypal-8.0.0.tgz", + "integrity": "sha512-cmXpEb8Gfwwk/Yn43w0OsURpRXiXghgZ5MbVKBYsPdkAqVacoQtYiWLcNmmU/DYGoPN5lRVqZb+Svg6qbbOvTw==", + "dependencies": { + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/common": "^12.0.0", + "@angular/core": "^12.0.0" + } + }, + "node_modules/ngx-sharebuttons": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/ngx-sharebuttons/-/ngx-sharebuttons-8.0.5.tgz", + "integrity": "sha512-LAaZQk1i/yuYkX+SK72OkJBMNmGJ7SS/yoGEIyuUd7r9F9SwLpWfUAjccmtuM0qDzd48h+1CCnPGIB6WYlKY4g==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/cdk": ">=8.0.0", + "@angular/common": ">=8.0.0", + "@angular/core": ">=8.0.0", + "rxjs": ">=6.0.0" + } + }, "node_modules/ngx-webstorage": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/ngx-webstorage/-/ngx-webstorage-8.0.0.tgz", @@ -17201,12 +17667,34 @@ "@angular/core": "^12.0.0" } }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, "node_modules/node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -17249,6 +17737,18 @@ "node": ">= 10.12.0" } }, + "node_modules/node-gyp-build": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", + "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -18180,6 +18680,12 @@ "node": ">=10" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -18371,7 +18877,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "devOptional": true }, "node_modules/picomatch": { "version": "2.3.0", @@ -18427,6 +18933,20 @@ "node": ">= 6" } }, + "node_modules/piscina": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", + "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -18674,9 +19194,9 @@ } }, "node_modules/postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", "dev": true, "dependencies": { "colorette": "^1.2.2", @@ -19831,9 +20351,9 @@ } }, "node_modules/postcss-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", - "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.1.tgz", + "integrity": "sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug==", "dev": true, "dependencies": { "cosmiconfig": "^7.0.0", @@ -21062,6 +21582,17 @@ "node": ">=8" } }, + "node_modules/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", @@ -21230,6 +21761,15 @@ } ] }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, "node_modules/randexp": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", @@ -21276,66 +21816,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/raw-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/raw-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/raw-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -21547,10 +22027,10 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "devOptional": true }, "node_modules/regenerator-transform": { "version": "0.14.5", @@ -21994,6 +22474,15 @@ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -22093,9 +22582,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz", - "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==", + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.36.0.tgz", + "integrity": "sha512-fQzEjipfOv5kh930nu3Imzq3ie/sGDc/4KtQMJlt7RRdrkQSfe37Bwi/Rf/gfuYHsIuE1fIlDMvpyMcEwjnPvg==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0" @@ -23305,6 +23794,17 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -23383,6 +23883,15 @@ "node": ">=8" } }, + "node_modules/stackblur-canvas": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", + "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -23697,63 +24206,19 @@ } }, "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.2.1.tgz", + "integrity": "sha512-1k9ZosJCRFaRbY6hH49JFlRB0fVSbmnyq1iTPjNxUmGVjBNEmwrrHPenhlp+Lgo51BojHSf6pl2FcqYaN3PfVg==", "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/style-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/style-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/style-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "webpack": "^5.0.0" } }, "node_modules/stylehacks": { @@ -23891,6 +24356,15 @@ "node": ">=8" } }, + "node_modules/svg-pathdata": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-5.0.5.tgz", + "integrity": "sha512-TAAvLNSE3fEhyl/Da19JWfMAdhSXTYeviXsLSoDT1UM76ADj5ndwAPX1FKQEgB/gFMPavOy6tOqfalXKUiXrow==", + "optional": true, + "engines": { + "node": ">=6.9.5" + } + }, "node_modules/svgo": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", @@ -23928,9 +24402,9 @@ } }, "node_modules/svgo/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -24102,9 +24576,9 @@ } }, "node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.6.tgz", + "integrity": "sha512-oaWyu5dQbHaYcyZCTfyPpC+VmI62/OM2RTUYavTk1MDr1cwW5Boi3baeYQKiZbY2uSQJGr+iMOzb/JFxLrft+g==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -24135,9 +24609,9 @@ } }, "node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", "dev": true, "dependencies": { "commander": "^2.20.0", @@ -24152,15 +24626,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dev": true, "dependencies": { "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.0" }, @@ -24215,6 +24689,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/terser-webpack-plugin/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -25293,21 +25776,21 @@ } }, "node_modules/webpack": { - "version": "5.41.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.1.tgz", - "integrity": "sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug==", + "version": "5.47.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.47.1.tgz", + "integrity": "sha512-cW+Mzy9SCDapFV4OrkHuP6EFV2mAsiQd+gOa3PKtHNoKg6qPqQXZzBlHH+CnQG1osplBCqwsJZ8CfGO6XWah0g==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.48", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.6.0", + "es-module-lexer": "^0.7.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -25316,11 +25799,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" + "webpack-sources": "^3.1.1" }, "bin": { "webpack": "bin/webpack.js" @@ -26394,12 +26877,6 @@ } } }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", - "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==", - "dev": true - }, "node_modules/webpack/node_modules/acorn": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", @@ -26444,12 +26921,12 @@ "dev": true }, "node_modules/webpack/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -26461,24 +26938,11 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack/node_modules/webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, "engines": { "node": ">=10.13.0" } @@ -26832,6 +27296,22 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -26925,6 +27405,39 @@ } } }, + "node_modules/xlsx": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.17.0.tgz", + "integrity": "sha512-bZ36FSACiAyjoldey1+7it50PMlDp1pcAJrZKcVZHzKd8BC/z6TQ/QAN8onuqcepifqSznR6uKnjPhaGt6ig9A==", + "dependencies": { + "adler-32": "~1.2.0", + "cfb": "^1.1.4", + "codepage": "~1.14.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "fflate": "^0.3.8", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "node_modules/xlsx/node_modules/fflate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", + "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + }, "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", @@ -27356,6 +27869,16 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", + "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "1.0.0", + "sourcemap-codec": "1.4.8" + } + }, "@angular-builders/custom-webpack": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-12.1.0.tgz", @@ -27384,128 +27907,192 @@ } }, "@angular-devkit/architect": { - "version": "0.1201.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1201.1.tgz", - "integrity": "sha512-n7ycxrIPbtnV7q8PH5Uvs8Jd++u6hWUiB+8EUxznSfdHGA+fE7TTnJTkc27LoMlYZAImc/Axp/uyYZ6Awt72ZQ==", + "version": "0.1202.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.0.tgz", + "integrity": "sha512-99O8iLO9LEVTPYN6kj6XINHxjw13ofTS48hm3D0i44QMEyq3SRH1ctH6HcUAtbgPF3VjOUFr5vRYpQN1OdOCXw==", "dev": true, "requires": { - "@angular-devkit/core": "12.1.1", + "@angular-devkit/core": "12.2.0", "rxjs": "6.6.7" } }, "@angular-devkit/build-angular": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.1.1.tgz", - "integrity": "sha512-mJjpPuJlS55gwi/W2g8CIMjPVtUjKCKJdjn34eeYk1Kgw9JYRIsiEivx1hcGyLmiSTF8gRGvW1TEyO+k55/QqA==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.0.tgz", + "integrity": "sha512-hcnlTZo1iWVVDiq2MSwbEJtc2E4rf7tSvsBvSVQLH1GILtVvN64L3YW0wVThNctWL8nicHWjtGQ+z3kjCOhxYw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.1", - "@angular-devkit/build-optimizer": "0.1201.1", - "@angular-devkit/build-webpack": "0.1201.1", - "@angular-devkit/core": "12.1.1", - "@babel/core": "7.14.6", - "@babel/generator": "7.14.5", + "@ampproject/remapping": "1.0.1", + "@angular-devkit/architect": "0.1202.0", + "@angular-devkit/build-optimizer": "0.1202.0", + "@angular-devkit/build-webpack": "0.1202.0", + "@angular-devkit/core": "12.2.0", + "@babel/core": "7.14.8", + "@babel/generator": "7.14.8", "@babel/helper-annotate-as-pure": "7.14.5", "@babel/plugin-proposal-async-generator-functions": "7.14.7", "@babel/plugin-transform-async-to-generator": "7.14.5", "@babel/plugin-transform-runtime": "7.14.5", - "@babel/preset-env": "7.14.7", - "@babel/runtime": "7.14.6", + "@babel/preset-env": "7.14.8", + "@babel/runtime": "7.14.8", "@babel/template": "7.14.5", "@discoveryjs/json-ext": "0.5.3", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.1.1", + "@ngtools/webpack": "12.2.0", "ansi-colors": "4.1.1", "babel-loader": "8.2.2", "browserslist": "^4.9.1", "cacache": "15.2.0", "caniuse-lite": "^1.0.30001032", "circular-dependency-plugin": "5.2.2", - "copy-webpack-plugin": "9.0.0", - "core-js": "3.15.1", + "copy-webpack-plugin": "9.0.1", + "core-js": "3.16.0", "critters": "0.0.10", - "css-loader": "5.2.6", - "css-minimizer-webpack-plugin": "3.0.1", + "css-loader": "6.2.0", + "css-minimizer-webpack-plugin": "3.0.2", + "esbuild": "0.12.17", "find-cache-dir": "3.3.1", "glob": "7.1.7", "https-proxy-agent": "5.0.0", - "inquirer": "8.1.1", - "jest-worker": "27.0.2", + "inquirer": "8.1.2", "karma-source-map-support": "1.4.0", "less": "4.1.1", - "less-loader": "10.0.0", - "license-webpack-plugin": "2.3.19", + "less-loader": "10.0.1", + "license-webpack-plugin": "2.3.20", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "1.6.2", + "mini-css-extract-plugin": "2.1.0", "minimatch": "3.0.4", "open": "8.2.1", "ora": "5.4.1", "parse5-html-rewriting-stream": "6.0.1", - "postcss": "8.3.5", + "piscina": "3.1.0", + "postcss": "8.3.6", "postcss-import": "14.0.2", - "postcss-loader": "6.1.0", + "postcss-loader": "6.1.1", "postcss-preset-env": "6.7.0", - "raw-loader": "4.0.2", - "regenerator-runtime": "0.13.7", + "regenerator-runtime": "0.13.9", "resolve-url-loader": "4.0.0", "rxjs": "6.6.7", - "sass": "1.35.1", + "sass": "1.36.0", "sass-loader": "12.1.0", "semver": "7.3.5", - "source-map": "0.7.3", "source-map-loader": "3.0.0", "source-map-support": "0.5.19", - "style-loader": "2.0.0", + "style-loader": "3.2.1", "stylus": "0.54.8", "stylus-loader": "6.1.0", - "terser": "5.7.0", - "terser-webpack-plugin": "5.1.3", + "terser": "5.7.1", + "terser-webpack-plugin": "5.1.4", "text-table": "0.2.0", "tree-kill": "1.2.2", "tslib": "2.3.0", - "webpack": "5.41.1", + "webpack": "5.47.1", "webpack-dev-middleware": "5.0.0", "webpack-dev-server": "3.11.2", "webpack-merge": "5.8.0", "webpack-subresource-integrity": "1.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "copy-webpack-plugin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", + "dev": true, + "requires": { + "fast-glob": "^3.2.5", + "glob-parent": "^6.0.0", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0" + } + }, + "glob-parent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + } } }, "@angular-devkit/build-optimizer": { - "version": "0.1201.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1201.1.tgz", - "integrity": "sha512-SdAffCpjRNFKwnEq8xdPdCWPgdrfY8rlmTZXGY7e1whR4vnyZi+afk1BAsmbNyWlHYVv0Zcnh+Q1VH3OBDLwhw==", + "version": "0.1202.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.0.tgz", + "integrity": "sha512-ORZGPrBTlzfSUzAZTrbpMgTbx1TaMcJ+nEFDj0hVBK+DUgf7GnaRjltlIqfKKphh7c6h3OKZAu3k2Lo57WqcIA==", "dev": true, "requires": { "source-map": "0.7.3", "tslib": "2.3.0", - "typescript": "4.3.4" + "typescript": "4.3.5" }, "dependencies": { "typescript": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", - "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true } } }, "@angular-devkit/build-webpack": { - "version": "0.1201.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1201.1.tgz", - "integrity": "sha512-isgj6bSFr16tuXEoX0VypvsQmg3uDOdvYDQZvkwzUrIyvQo5TeoOy/MLgrb9v+tXjEA7oZrzuigE4Hjzn466bQ==", + "version": "0.1202.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.0.tgz", + "integrity": "sha512-G2Iljb8Vpu5+N6jWUii2m8p5NRJe84pgiQbIOxQvegEYkdmbISQYmW3ubFjWDQgjArCpZyWJQ/AIwhmkRef5xQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1201.1", + "@angular-devkit/architect": "0.1202.0", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.1.1.tgz", - "integrity": "sha512-z5+O3ugXbo8djKPjUtf/UfnYCmco2K1LVhQ6cWLhKi3NKRBiHeNmZh5nAycqFD8/Q+oI/+Ao40MkmkK1Tq0jsw==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.0.tgz", + "integrity": "sha512-9H2NfE4eazpMPwbAx4ZbtTNijo6419DZsmQzlzwQWzTInO3+CAjQuyW53W5Nt/IoauNVOgOEsC8/YbYjNmN0Aw==", "dev": true, "requires": { - "ajv": "8.6.0", + "ajv": "8.6.2", "ajv-formats": "2.1.0", "fast-json-stable-stringify": "2.1.0", "magic-string": "0.25.7", @@ -27636,6 +28223,23 @@ "@typescript-eslint/experimental-utils": "4.23.0" } }, + "@angular/cdk": { + "version": "12.2.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.1.tgz", + "integrity": "sha512-UOzuDXcfaJlBd+o7EJb6CZ3my1AmU7XHriC/hFT6bFianhVK/I/0gcOwxyMx8VAplEip8msLczX0IlZSJ1GCCg==", + "requires": { + "parse5": "^5.0.0", + "tslib": "^2.2.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + } + } + }, "@angular/cli": { "version": "12.0.4", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.0.4.tgz", @@ -27948,6 +28552,12 @@ "tslib": "^2.1.0" } }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, "@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", @@ -27963,20 +28573,20 @@ "dev": true }, "@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz", + "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.14.8", "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", + "@babel/helper-module-transforms": "^7.14.8", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.14.8", "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -28000,11 +28610,11 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -28056,16 +28666,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", + "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.14.5", "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.15.0", "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", "@babel/helper-split-export-declaration": "^7.14.5" } }, @@ -28139,12 +28749,12 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.0" } }, "@babel/helper-module-imports": { @@ -28157,19 +28767,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/helper-optimise-call-expression": { @@ -28199,24 +28809,24 @@ } }, "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.15.0", "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.14.8" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -28237,9 +28847,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" }, "@babel/helper-validator-option": { "version": "7.14.5", @@ -28260,13 +28870,13 @@ } }, "@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", + "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", "requires": { "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8" } }, "@babel/highlight": { @@ -28280,9 +28890,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.15.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.2.tgz", + "integrity": "sha512-bMJXql1Ss8lFnvr11TZDH4ArtwlAS5NG9qBmdiFW2UHHm6MVoR+GDc5XE2b9K938cyjc9O6/+vjjcffLDtfuDg==" }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.14.5", @@ -28645,9 +29255,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", + "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.14.5", @@ -28755,14 +29365,14 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz", + "integrity": "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-module-transforms": "^7.15.0", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-simple-access": "^7.14.8", "babel-plugin-dynamic-import-node": "^2.3.3" } }, @@ -28790,9 +29400,9 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", - "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.14.5" @@ -28941,9 +29551,9 @@ } }, "@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.8.tgz", + "integrity": "sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==", "dev": true, "requires": { "@babel/compat-data": "^7.14.7", @@ -29013,7 +29623,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.14.5", "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", + "@babel/types": "^7.14.8", "babel-plugin-polyfill-corejs2": "^0.2.2", "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", @@ -29043,14 +29653,24 @@ } }, "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, + "@babel/runtime-corejs3": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz", + "integrity": "sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==", + "optional": true, + "requires": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + } + }, "@babel/template": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", @@ -29062,27 +29682,44 @@ } }, "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.15.0", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "requires": { + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" } }, @@ -29188,9 +29825,9 @@ } }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz", - "integrity": "sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==" + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", + "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==" }, "@fortawesome/fontawesome-svg-core": { "version": "1.2.35", @@ -29200,6 +29837,14 @@ "@fortawesome/fontawesome-common-types": "^0.2.35" } }, + "@fortawesome/free-brands-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.15.4.tgz", + "integrity": "sha512-f1witbwycL9cTENJegcmcZRYyawAFbm8+c6IirLmwbbpqz46wyjbQYLuxOc7weXFXfB7QR8/Vd2u5R3q6JYD9g==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + } + }, "@fortawesome/free-solid-svg-icons": { "version": "5.15.3", "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz", @@ -29775,6 +30420,12 @@ } } }, + "@jridgewell/resolve-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", + "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", + "dev": true + }, "@jsdevtools/coverage-istanbul-loader": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", @@ -29797,13 +30448,10 @@ } }, "@ngtools/webpack": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.1.1.tgz", - "integrity": "sha512-NOHTBEjUkawQSU6sHA7EJSi5Ixw+oVmlYi17HXAhGRY1czasLQMiKQPnigbSgMLBR9Jhez7TttqAUtx6Pey2FQ==", - "dev": true, - "requires": { - "enhanced-resolve": "5.8.2" - } + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.0.tgz", + "integrity": "sha512-EocGfCbpPAnanDlagtlbVHpgSWE0a5NyWOY6RCw0pAxj1zL9SYMMId4X+ZJ21C23m6JqNXnWNZ4ib+LaXBIOBg==", + "dev": true }, "@ngx-translate/core": { "version": "13.0.0", @@ -30356,6 +31004,20 @@ "@types/jquery": "*" } }, + "@types/chart.js": { + "version": "2.9.34", + "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.34.tgz", + "integrity": "sha512-CtZVk+kh1IN67dv+fB0CWmCLCRrDJgqOj15qPic2B1VCMovNO6B7Vhf/TgPpNscjhAL1j+qUntDMWb9A4ZmPTg==", + "requires": { + "moment": "^2.10.2" + } + }, + "@types/chartist": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@types/chartist/-/chartist-0.11.1.tgz", + "integrity": "sha512-85eNd7rF+e5sLnpprgcDdeqARgNvczEXaBfnrkw0292TBCE4KF/2HmOPA6dIblyHUWV4OZ2kuQBH2R12F+VwYg==", + "dev": true + }, "@types/concat-stream": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", @@ -30386,9 +31048,9 @@ } }, "@types/estree": { - "version": "0.0.49", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.49.tgz", - "integrity": "sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw==", + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, "@types/expect": { @@ -30397,6 +31059,12 @@ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", "dev": true }, + "@types/file-saver": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.3.tgz", + "integrity": "sha512-MBIou8pd/41jkff7s97B47bc9+p0BszqqDJsO51yDm49uUxeKzrfuNl5fSLC6BpLEWKA8zlwyqALVmXrFwoBHQ==", + "dev": true + }, "@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", @@ -30482,9 +31150,9 @@ } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/json5": { @@ -30529,6 +31197,12 @@ "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", "dev": true }, + "@types/raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "optional": true + }, "@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", @@ -30800,148 +31474,148 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, @@ -31023,6 +31697,15 @@ "regex-parser": "^2.2.11" } }, + "adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -31060,9 +31743,9 @@ } }, "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -31342,8 +32025,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "atomically": { "version": "1.7.0", @@ -32170,6 +32852,11 @@ "node-int64": "^0.4.0" } }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -32293,12 +32980,36 @@ "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", "dev": true }, + "canvg": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.7.tgz", + "integrity": "sha512-4sq6iL5Q4VOXS3PL1BapiXIZItpxYyANVzsAKpTPS5oq4u3SKbGfUcbZh2gdLCQ3jWpG/y5wRkMlBBAJhXeiZA==", + "optional": true, + "requires": { + "@babel/runtime-corejs3": "^7.9.6", + "@types/raf": "^3.4.0", + "raf": "^3.4.1", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^5.0.5" + } + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "cfb": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz", + "integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==", + "requires": { + "adler-32": "~1.2.0", + "crc-32": "~1.2.0", + "printj": "~1.1.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -32321,6 +33032,16 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chart.js": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.5.0.tgz", + "integrity": "sha512-J1a4EAb1Gi/KbhwDRmoovHTRuqT8qdF0kZ4XgwxpGethJHUdDrkqyPYwke0a+BuvSeUxPf8Cos6AX2AB8H8GLA==" + }, + "chartist": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/chartist/-/chartist-0.11.4.tgz", + "integrity": "sha512-H4AimxaUD738/u9Mq8t27J4lh6STsLi4BQHt65nOtpLk3xyrBPaLiLMrHw7/WV9CmsjGA02WihjuL5qpSagLYw==" + }, "chevrotain": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-9.0.2.tgz", @@ -32609,6 +33330,22 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "codepage": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=", + "requires": { + "commander": "~2.14.1", + "exit-on-epipe": "~1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + } + } + }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -32659,9 +33396,9 @@ } }, "colord": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.1.0.tgz", - "integrity": "sha512-H5sDP9XDk2uP+x/xSGkgB9SEFc1bojdI5DMKU0jmSXQtml2GIe48dj1DcSS0e53QQAHn+JKqUXbGeGX24xWD7w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.6.0.tgz", + "integrity": "sha512-8yMrtE20ZxH1YWvvSoeJFtvqY+GIAOfU+mZ3jx7ZSiEMasnAmNqD1BKUP3CuCWcy/XHgcXkLW6YU8C35nhOYVg==", "dev": true }, "colorette": { @@ -33071,10 +33808,10 @@ } }, "core-js": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.1.tgz", - "integrity": "sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==", - "dev": true + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "devOptional": true }, "core-js-compat": { "version": "3.15.2", @@ -33094,6 +33831,12 @@ } } }, + "core-js-pure": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.1.tgz", + "integrity": "sha512-TyofCdMzx0KMhi84mVRS8rL1XsRk2SPUNz2azmth53iRN0/08Uim9fdhQTaZTG1LqaXHYVci4RDHka6WrXfnvg==", + "optional": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -33113,6 +33856,15 @@ "yaml": "^1.10.0" } }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -33257,9 +34009,9 @@ "dev": true }, "css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz", + "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==", "dev": true, "requires": { "timsort": "^0.3.0" @@ -33320,67 +34072,51 @@ } } }, + "css-line-break": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.0.1.tgz", + "integrity": "sha512-gwKYIMUn7xodIcb346wgUhE2Dt5O1Kmrc16PWi8sL4FTfyDj8P5095rzH7+O8CTZudJr+uw2GCI/hwEkDJFI2w==", + "optional": true, + "requires": { + "base64-arraybuffer": "^0.2.0" + }, + "dependencies": { + "base64-arraybuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", + "optional": true + } + } + }, "css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.2.0.tgz", + "integrity": "sha512-/rvHfYRjIpymZblf49w8jYcRo2y9gj6rV8UroHGmBxKrIyGLokpycyKzp9OkitvqT29ZSpzJ0Ic7SpnJX3sC8g==", "dev": true, "requires": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", "postcss": "^8.2.15", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", "semver": "^7.3.5" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } } }, "css-minimizer-webpack-plugin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.1.tgz", - "integrity": "sha512-RGFIv6iZWUPO2T1vE5+5pNCSs2H2xtHYRdfZPiiNH8Of6QOn9BeFnZSoHiQMkmsxOO/JkPe4BpKfs7slFIWcTA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", "dev": true, "requires": { - "cssnano": "^5.0.0", + "cssnano": "^5.0.6", "jest-worker": "^27.0.2", "p-limit": "^3.0.2", - "postcss": "^8.2.9", + "postcss": "^8.3.5", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" }, "dependencies": { @@ -33403,16 +34139,25 @@ "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -33550,14 +34295,15 @@ "dev": true }, "cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.7.tgz", + "integrity": "sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw==", "dev": true, "requires": { - "cosmiconfig": "^7.0.0", "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" + "is-resolvable": "^1.1.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" } }, "cssnano-preset-default": { @@ -34147,6 +34893,12 @@ "domelementtype": "^2.2.0" } }, + "dompurify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.0.tgz", + "integrity": "sha512-VV5C6Kr53YVHGOBKO/F86OYX6/iLTw2yVSI721gKetxpHCK/V5TaLEf9ODjRgl1KLSWRMY6cUhAbv/c+IUnwQw==", + "optional": true + }, "domutils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", @@ -34436,9 +35188,9 @@ } }, "es-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", - "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", "dev": true }, "es6-promise": { @@ -34447,6 +35199,12 @@ "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=", "dev": true }, + "esbuild": { + "version": "0.12.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.17.tgz", + "integrity": "sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -34863,6 +35621,12 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -34906,6 +35670,11 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -35326,6 +36095,11 @@ "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==", "dev": true }, + "fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -35344,6 +36118,11 @@ "flat-cache": "^3.0.4" } }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -35539,6 +36318,11 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -36086,6 +36870,23 @@ } } }, + "hdr-histogram-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz", + "integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, "hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", @@ -36172,6 +36973,15 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "html2canvas": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.2.2.tgz", + "integrity": "sha512-cxZR1bGxtmhxeoCxM+s1WfRzDtpKPuHHZ7ExX01EdhgdEQCvMDZLDj3aknE8ywSoed8JM8AXhQiuD1KFwMm3Gw==", + "optional": true, + "requires": { + "css-line-break": "2.0.1" + } + }, "http-basic": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", @@ -36618,9 +37428,9 @@ "dev": true }, "inquirer": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.1.tgz", - "integrity": "sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.2.tgz", + "integrity": "sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -36633,7 +37443,7 @@ "mute-stream": "0.0.8", "ora": "^5.3.0", "run-async": "^2.4.0", - "rxjs": "^6.6.6", + "rxjs": "^7.2.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" @@ -36679,6 +37489,15 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "rxjs": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.3.0.tgz", + "integrity": "sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==", + "dev": true, + "requires": { + "tslib": "~2.1.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -36687,6 +37506,12 @@ "requires": { "has-flag": "^4.0.0" } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true } } }, @@ -39295,6 +40120,20 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "jspdf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.3.1.tgz", + "integrity": "sha512-1vp0USP1mQi1h7NKpwxjFgQkJ5ncZvtH858aLpycUc/M+r/RpWJT8PixAU7Cw/3fPd4fpC8eB/Bj42LnsR21YQ==", + "requires": { + "atob": "^2.1.2", + "btoa": "^1.2.1", + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "fflate": "^0.4.8", + "html2canvas": "^1.0.0-rc.5" + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -39319,6 +40158,11 @@ "integrity": "sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w==", "dev": true }, + "jw-angular-social-buttons": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jw-angular-social-buttons/-/jw-angular-social-buttons-1.0.0.tgz", + "integrity": "sha512-E1xxsZBj0+DzJC7iPrwqq08UnfMbYuUHibMt5ijSqrR2LyBKmrZIlRM+8I+4e3m0bNNt1nwBbXcKlY6DsvOCOQ==" + }, "karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -39426,9 +40270,9 @@ } }, "less-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.0.tgz", - "integrity": "sha512-JjioAkw9qyavL0BzMPUOHJa0a20fh+ipq/MNZH4OkU8qERsCMeZIWRE0FDBIx2O+cFguvY01vHh/lmBA9LyWDg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.1.tgz", + "integrity": "sha512-Crln//HpW9M5CbtdfWm3IO66Cvx1WhZQvNybXgfB2dD/6Sav9ppw+IWqs/FQKPBFO4B6X0X28Z0WNznshgwUzA==", "dev": true, "requires": { "klona": "^2.0.4" @@ -39451,15 +40295,21 @@ } }, "license-webpack-plugin": { - "version": "2.3.19", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.19.tgz", - "integrity": "sha512-z/izhwFRYHs1sCrDgrTUsNJpd+Xsd06OcFWSwHz/TiZygm5ucweVZi1Hu14Rf6tOj/XAl1Ebyc7GW6ZyyINyWA==", + "version": "2.3.20", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.20.tgz", + "integrity": "sha512-AHVueg9clOKACSHkhmEI+PCC9x8+qsQVuKECZD3ETxETK5h/PCv5/MUzyG1gm8OMcip/s1tcNxqo9Qb7WhjGsg==", "dev": true, "requires": { "@types/webpack-sources": "^0.1.5", "webpack-sources": "^1.2.0" } }, + "lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true + }, "limiter": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", @@ -39630,6 +40480,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -40125,14 +40980,12 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.1.0.tgz", + "integrity": "sha512-SV1GgjMcfqy6hW07rAniUbQE4qS3inh3v4rZEUySkPRWy3vMbS3jUCjMOvNI4lUnDlQYJEmuUqKktTCNY5koFQ==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^3.0.0" }, "dependencies": { "ajv": { @@ -40154,12 +41007,12 @@ "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -40295,6 +41148,11 @@ "mkdirp": "^1.0.3" } }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -40416,6 +41274,24 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "ng-chartist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ng-chartist/-/ng-chartist-5.0.0.tgz", + "integrity": "sha512-lTHuND77RuYNxpt0qPlGW5LuohCMUTX0LCMYEhTqCPstBImPP+ZHM7+Dnpzx8FpNstBPandzvlEWVbKPMfn2FA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "ng2-charts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-2.4.2.tgz", + "integrity": "sha512-mY3C2uKCaApHCQizS2YxEOqQ7sSZZLxdV6N1uM9u/VvUgVtYvlPtdcXbKpN52ak93ZE22I73DiLWVDnDNG4/AQ==", + "requires": { + "@types/chart.js": "^2.9.24", + "lodash-es": "^4.17.15", + "tslib": "^2.0.0" + } + }, "ngx-infinite-scroll": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-10.0.1.tgz", @@ -40425,6 +41301,22 @@ "opencollective-postinstall": "^2.0.2" } }, + "ngx-paypal": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ngx-paypal/-/ngx-paypal-8.0.0.tgz", + "integrity": "sha512-cmXpEb8Gfwwk/Yn43w0OsURpRXiXghgZ5MbVKBYsPdkAqVacoQtYiWLcNmmU/DYGoPN5lRVqZb+Svg6qbbOvTw==", + "requires": { + "tslib": "^2.2.0" + } + }, + "ngx-sharebuttons": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/ngx-sharebuttons/-/ngx-sharebuttons-8.0.5.tgz", + "integrity": "sha512-LAaZQk1i/yuYkX+SK72OkJBMNmGJ7SS/yoGEIyuUd7r9F9SwLpWfUAjccmtuM0qDzd48h+1CCnPGIB6WYlKY4g==", + "requires": { + "tslib": "^2.0.0" + } + }, "ngx-webstorage": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/ngx-webstorage/-/ngx-webstorage-8.0.0.tgz", @@ -40433,12 +41325,30 @@ "tslib": "^2.0.0" } }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -40469,6 +41379,13 @@ "which": "^2.0.2" } }, + "node-gyp-build": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", + "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", + "dev": true, + "optional": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -41171,6 +42088,12 @@ "tar": "^6.1.0" } }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -41328,8 +42251,7 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "picomatch": { "version": "2.3.0", @@ -41367,6 +42289,18 @@ "node-modules-regexp": "^1.0.0" } }, + "piscina": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", + "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -41563,9 +42497,9 @@ "dev": true }, "postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", "dev": true, "requires": { "colorette": "^1.2.2", @@ -42393,9 +43327,9 @@ } }, "postcss-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", - "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.1.tgz", + "integrity": "sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug==", "dev": true, "requires": { "cosmiconfig": "^7.0.0", @@ -43266,6 +44200,11 @@ } } }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, "proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", @@ -43392,6 +44331,15 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "requires": { + "performance-now": "^2.1.0" + } + }, "randexp": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", @@ -43429,47 +44377,6 @@ "unpipe": "1.0.0" } }, - "raw-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -43640,10 +44547,11 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true + + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "devOptional": true }, "regenerator-transform": { "version": "0.14.5", @@ -43984,6 +44892,12 @@ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, + "rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", + "optional": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -44058,9 +44972,9 @@ "dev": true }, "sass": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.35.1.tgz", - "integrity": "sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ==", + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.36.0.tgz", + "integrity": "sha512-fQzEjipfOv5kh930nu3Imzq3ie/sGDc/4KtQMJlt7RRdrkQSfe37Bwi/Rf/gfuYHsIuE1fIlDMvpyMcEwjnPvg==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0" @@ -45077,6 +45991,14 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -45137,6 +46059,12 @@ } } }, + "stackblur-canvas": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", + "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", + "optional": true + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -45248,23 +46176,6 @@ "readable-stream": "^3.0.6" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, "string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -45291,6 +46202,23 @@ "strip-ansi": "^6.0.0" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -45373,45 +46301,10 @@ "dev": true }, "style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.2.1.tgz", + "integrity": "sha512-1k9ZosJCRFaRbY6hH49JFlRB0fVSbmnyq1iTPjNxUmGVjBNEmwrrHPenhlp+Lgo51BojHSf6pl2FcqYaN3PfVg==", + "dev": true }, "stylehacks": { "version": "5.0.1", @@ -45514,6 +46407,12 @@ } } }, + "svg-pathdata": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-5.0.5.tgz", + "integrity": "sha512-TAAvLNSE3fEhyl/Da19JWfMAdhSXTYeviXsLSoDT1UM76ADj5ndwAPX1FKQEgB/gFMPavOy6tOqfalXKUiXrow==", + "optional": true + }, "svgo": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", @@ -45539,9 +46438,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -45664,9 +46563,9 @@ "dev": true }, "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.6.tgz", + "integrity": "sha512-oaWyu5dQbHaYcyZCTfyPpC+VmI62/OM2RTUYavTk1MDr1cwW5Boi3baeYQKiZbY2uSQJGr+iMOzb/JFxLrft+g==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -45688,9 +46587,9 @@ } }, "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", "dev": true, "requires": { "commander": "^2.20.0", @@ -45707,15 +46606,15 @@ } }, "terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dev": true, "requires": { "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.0" }, @@ -45749,6 +46648,15 @@ "ajv-keywords": "^3.5.2" } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -46591,21 +47499,21 @@ "dev": true }, "webpack": { - "version": "5.41.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.41.1.tgz", - "integrity": "sha512-AJZIIsqJ/MVTmegEq9Tlw5mk5EHdGiJbDdz9qP15vmUH+oxI1FdWcL0E9EO8K/zKaRPWqEs7G/OPxq1P61u5Ug==", + "version": "5.47.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.47.1.tgz", + "integrity": "sha512-cW+Mzy9SCDapFV4OrkHuP6EFV2mAsiQd+gOa3PKtHNoKg6qPqQXZzBlHH+CnQG1osplBCqwsJZ8CfGO6XWah0g==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.48", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.6.0", + "es-module-lexer": "^0.7.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -46614,19 +47522,13 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" + "webpack-sources": "^3.1.1" }, "dependencies": { - "@types/estree": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", - "integrity": "sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==", - "dev": true - }, "acorn": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", @@ -46658,31 +47560,21 @@ "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw==", + "dev": true } } }, @@ -47275,15 +48167,6 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -47312,6 +48195,15 @@ } } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -47792,6 +48684,16 @@ } } }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -47854,6 +48756,35 @@ "integrity": "sha512-2c6faOUH/nhoQN6abwMloF7Iyl0ZS2E9HGtsiLrWn0zOOMWlhtDmdf/uihDt6jnuCxgtwGBNy6Onsoy2s2O2Ow==", "dev": true }, + "xlsx": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.17.0.tgz", + "integrity": "sha512-bZ36FSACiAyjoldey1+7it50PMlDp1pcAJrZKcVZHzKd8BC/z6TQ/QAN8onuqcepifqSznR6uKnjPhaGt6ig9A==", + "requires": { + "adler-32": "~1.2.0", + "cfb": "^1.1.4", + "codepage": "~1.14.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "fflate": "^0.3.8", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "fflate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", + "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + } + } + }, "xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", diff --git a/package.json b/package.json index 2cceb89..8dcb5f7 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,8 @@ "preci:e2e:server:start": "npm run docker:db:await --if-present && npm run docker:others:await --if-present", "ci:e2e:server:start": "java -jar target/e2e.$npm_package_config_packaging --spring.profiles.active=$npm_package_config_default_environment -Dlogging.level.ROOT=OFF -Dlogging.level.org.zalando=OFF -Dlogging.level.tech.jhipster=OFF -Dlogging.level.org.datasurvey=OFF -Dlogging.level.org.springframework=OFF -Dlogging.level.org.springframework.web=OFF -Dlogging.level.org.springframework.security=OFF --logging.level.org.springframework.web=ERROR", "ci:frontend:build": "npm run webapp:build:$npm_package_config_default_environment", - "ci:frontend:test": "npm run ci:frontend:build && npm test" + "ci:frontend:test": "npm run ci:frontend:build && npm test", + "postinstall": "ngcc" }, "config": { "backend_port": 8080, @@ -66,6 +67,7 @@ "packaging": "jar" }, "dependencies": { + "@angular/cdk": "^12.1.4", "@angular/common": "12.0.5", "@angular/compiler": "12.0.5", "@angular/core": "12.0.5", @@ -74,18 +76,28 @@ "@angular/platform-browser": "12.0.5", "@angular/platform-browser-dynamic": "12.0.5", "@angular/router": "12.0.5", - "@fortawesome/angular-fontawesome": "0.9.0", - "@fortawesome/fontawesome-svg-core": "1.2.35", - "@fortawesome/free-solid-svg-icons": "5.15.3", + "@fortawesome/angular-fontawesome": "^0.9.0", + "@fortawesome/fontawesome-svg-core": "^1.2.35", + "@fortawesome/free-brands-svg-icons": "^5.15.3", + "@fortawesome/free-solid-svg-icons": "^5.15.3", "@ng-bootstrap/ng-bootstrap": "9.1.3", "@ngx-translate/core": "13.0.0", "@ngx-translate/http-loader": "6.0.0", "@types/gapi.auth2": "0.0.54", "angularx-social-login": "^4.0.1", "bootstrap": "4.6.0", + "chart.js": "^3.5.0", + "chartist": "^0.11.4", "dayjs": "1.10.5", + "file-saver": "^2.0.5", "jquery": "^3.6.0", + "jspdf": "^2.3.1", + "jw-angular-social-buttons": "^1.0.0", + "ng-chartist": "^5.0.0", + "ng2-charts": "^2.4.2", "ngx-infinite-scroll": "10.0.1", + "ngx-paypal": "^8.0.0", + "ngx-sharebuttons": "^8.0.5", "ngx-webstorage": "8.0.0", "rxjs": "6.6.7", "sockjs-client": "1.5.0", @@ -93,6 +105,7 @@ "swiper": "^6.7.5", "tslib": "2.3.0", "webstomp-client": "1.2.6", + "xlsx": "^0.17.0", "zone.js": "0.11.4" }, "devDependencies": { @@ -103,6 +116,8 @@ "@angular/compiler-cli": "12.0.5", "@angular/service-worker": "12.0.5", "@types/bootstrap": "^5.0.17", + "@types/chartist": "^0.11.1", + "@types/file-saver": "^2.0.3", "@types/jest": "26.0.23", "@types/jquery": "^3.5.6", "@types/node": "15.12.2", diff --git a/pom.xml b/pom.xml index 7595ca8..72bad53 100644 --- a/pom.xml +++ b/pom.xml @@ -318,6 +318,12 @@ org.springframework.security spring-security-messaging + + + org.webjars + bootstrap + 4.0.0-2 + diff --git a/src/main/java/org/datasurvey/domain/UsuarioExtra.java b/src/main/java/org/datasurvey/domain/UsuarioExtra.java index 9f8708b..411dbc3 100644 --- a/src/main/java/org/datasurvey/domain/UsuarioExtra.java +++ b/src/main/java/org/datasurvey/domain/UsuarioExtra.java @@ -64,7 +64,7 @@ public class UsuarioExtra implements Serializable { joinColumns = @JoinColumn(name = "usuario_extra_id"), inverseJoinColumns = @JoinColumn(name = "plantilla_id") ) - @JsonIgnoreProperties(value = { "pPreguntaCerradas", "pPreguntaAbiertas", "categoria", "usuarioExtras" }, allowSetters = true) + @JsonIgnoreProperties(value = { "pPreguntaCerradas", "pPreguntaAbiertas", "usuarioExtras" }, allowSetters = true) private Set plantillas = new HashSet<>(); // jhipster-needle-entity-add-field - JHipster will add fields here diff --git a/src/main/java/org/datasurvey/service/MailService.java b/src/main/java/org/datasurvey/service/MailService.java index 13b50b3..525e75d 100644 --- a/src/main/java/org/datasurvey/service/MailService.java +++ b/src/main/java/org/datasurvey/service/MailService.java @@ -4,6 +4,7 @@ import java.nio.charset.StandardCharsets; import java.util.Locale; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; +import org.datasurvey.domain.Factura; import org.datasurvey.domain.User; import org.datasurvey.domain.UsuarioEncuesta; import org.datasurvey.domain.UsuarioExtra; @@ -33,6 +34,8 @@ public class MailService { private static final String CONTRASENNA = "contrasenna"; + private static final String FACTURA = "factura"; + private static final String BASE_URL = "baseUrl"; private final JHipsterProperties jHipsterProperties; @@ -128,6 +131,22 @@ public class MailService { sendEmail(user.getEmail(), subject, content, false, true); } + @Async + public void sendEmailFromTemplateFactura(User user, Factura factura, String templateName, String titleKey) { + if (user.getEmail() == null) { + log.debug("Email doesn't exist for user '{}'", user.getLogin()); + return; + } + Locale locale = Locale.forLanguageTag(user.getLangKey()); + Context context = new Context(locale); + context.setVariable(USER, user); + context.setVariable(FACTURA, factura); + context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl()); + String content = templateEngine.process(templateName, context); + String subject = messageSource.getMessage(titleKey, null, locale); + sendEmail(user.getEmail(), subject, content, false, true); + } + @Async public void sendActivationEmail(User user) { log.debug("Sending activation email to '{}'", user.getEmail()); @@ -203,4 +222,10 @@ public class MailService { "email.deleteColaborator.title" ); } + + @Async + public void sendReceiptUser(UsuarioExtra user, Factura factura) { + log.debug("Sending paypal receipt mail to '{}'", user.getUser().getEmail()); + sendEmailFromTemplateFactura(user.getUser(), factura, "mail/facturaPayPalEmail", "email.receipt.title"); + } } diff --git a/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java b/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java index 07e194d..1061665 100644 --- a/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java +++ b/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java @@ -80,6 +80,14 @@ public class EPreguntaCerradaOpcionResource { .body(result); } + @PostMapping("/e-pregunta-cerrada-opcions/count/{id}") + public ResponseEntity updateOpcionCount(@PathVariable(value = "id", required = true) final Long id) { + EPreguntaCerradaOpcion updatedOpcion = getEPreguntaCerradaOpcion(id).getBody(); + int cantidad = updatedOpcion.getCantidad(); + updatedOpcion.setCantidad(cantidad += 1); + return ResponseEntity.ok(updatedOpcion); + } + /** * {@code PUT /e-pregunta-cerrada-opcions/:id} : Updates an existing ePreguntaCerradaOpcion. * diff --git a/src/main/java/org/datasurvey/web/rest/EncuestaResource.java b/src/main/java/org/datasurvey/web/rest/EncuestaResource.java index 992ae8f..5744a97 100644 --- a/src/main/java/org/datasurvey/web/rest/EncuestaResource.java +++ b/src/main/java/org/datasurvey/web/rest/EncuestaResource.java @@ -11,10 +11,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import javax.validation.Valid; import javax.validation.constraints.NotNull; -import org.datasurvey.domain.EPreguntaAbierta; -import org.datasurvey.domain.EPreguntaCerrada; -import org.datasurvey.domain.EPreguntaCerradaOpcion; -import org.datasurvey.domain.Encuesta; +import org.datasurvey.domain.*; import org.datasurvey.domain.enumeration.AccesoEncuesta; import org.datasurvey.repository.EncuestaRepository; import org.datasurvey.service.*; @@ -59,6 +56,14 @@ public class EncuestaResource { private final EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService; + private final PlantillaService plantillaService; + + private final PPreguntaCerradaService pPreguntaCerradaService; + + private final PPreguntaAbiertaService pPreguntaAbiertaService; + + private final PPreguntaCerradaOpcionService pPreguntaCerradaOpcionService; + public EncuestaResource( EncuestaService encuestaService, EncuestaRepository encuestaRepository, @@ -66,7 +71,11 @@ public class EncuestaResource { MailService mailService, EPreguntaCerradaService ePreguntaCerradaService, EPreguntaAbiertaService ePreguntaAbiertaService, - EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService + EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService, + PlantillaService plantillaService, + PPreguntaCerradaService pPreguntaCerradaService, + PPreguntaAbiertaService pPreguntaAbiertaService, + PPreguntaCerradaOpcionService pPreguntaCerradaOpcionService ) { this.encuestaService = encuestaService; this.encuestaRepository = encuestaRepository; @@ -75,6 +84,10 @@ public class EncuestaResource { this.ePreguntaCerradaService = ePreguntaCerradaService; this.ePreguntaAbiertaService = ePreguntaAbiertaService; this.ePreguntaCerradaOpcionService = ePreguntaCerradaOpcionService; + this.plantillaService = plantillaService; + this.pPreguntaCerradaService = pPreguntaCerradaService; + this.pPreguntaAbiertaService = pPreguntaAbiertaService; + this.pPreguntaCerradaOpcionService = pPreguntaCerradaOpcionService; } /** @@ -97,6 +110,78 @@ public class EncuestaResource { .body(result); } + @PostMapping("/encuestas/{plantillaId}") + public ResponseEntity createEncuestaFromTemplate( + @Valid @RequestBody Encuesta encuesta, + @PathVariable(value = "plantillaId", required = false) final Long plantillaId + ) throws URISyntaxException { + log.debug("REST request to save Encuesta : {}", encuesta); + if (encuesta.getId() != null) { + throw new BadRequestAlertException("A new encuesta cannot already have an ID", ENTITY_NAME, "idexists"); + } + + // Copy from survey template to survey + Optional plantilla = plantillaService.findOne(plantillaId); + + if (plantilla.isPresent()) { + encuesta.setNombre(plantilla.get().getNombre()); + encuesta.setDescripcion(plantilla.get().getDescripcion()); + encuesta.setCategoria(plantilla.get().getCategoria()); + + Encuesta encuestaCreated = encuestaService.save(encuesta); + + // Preguntas cerradas + List preguntasCerradas = pPreguntaCerradaService.findAll(); + for (PPreguntaCerrada pPreguntaCerrada : preguntasCerradas) { + if (pPreguntaCerrada.getPlantilla().getId().equals(plantillaId)) { + EPreguntaCerrada newEPreguntaCerrada = new EPreguntaCerrada(); + newEPreguntaCerrada.setNombre(pPreguntaCerrada.getNombre()); + newEPreguntaCerrada.setTipo(pPreguntaCerrada.getTipo()); + newEPreguntaCerrada.setOpcional(pPreguntaCerrada.getOpcional()); + newEPreguntaCerrada.setOrden(pPreguntaCerrada.getOrden()); + newEPreguntaCerrada.setEncuesta(encuestaCreated); + + ePreguntaCerradaService.save(newEPreguntaCerrada); + + // Opciones de preguntas cerradas + List opciones = pPreguntaCerradaOpcionService.findAll(); + for (PPreguntaCerradaOpcion pPreguntaCerradaOpcion : opciones) { + if (pPreguntaCerradaOpcion.getPPreguntaCerrada().getId().equals(pPreguntaCerrada.getId())) { + EPreguntaCerradaOpcion newEPreguntaCerradaOpcion = new EPreguntaCerradaOpcion(); + newEPreguntaCerradaOpcion.setNombre(pPreguntaCerradaOpcion.getNombre()); + newEPreguntaCerradaOpcion.setOrden(pPreguntaCerradaOpcion.getOrden()); + newEPreguntaCerradaOpcion.setCantidad(0); + newEPreguntaCerradaOpcion.setEPreguntaCerrada(newEPreguntaCerrada); + + ePreguntaCerradaOpcionService.save(newEPreguntaCerradaOpcion); + } + } + } + } + + // Preguntas abiertas + List preguntasAbiertas = pPreguntaAbiertaService.findAll(); + for (PPreguntaAbierta pPreguntaAbierta : preguntasAbiertas) { + if (pPreguntaAbierta.getPlantilla().getId().equals(plantillaId)) { + EPreguntaAbierta newEPreguntaAbierta = new EPreguntaAbierta(); + newEPreguntaAbierta.setNombre(pPreguntaAbierta.getNombre()); + newEPreguntaAbierta.setOpcional(pPreguntaAbierta.getOpcional()); + newEPreguntaAbierta.setOrden(pPreguntaAbierta.getOrden()); + newEPreguntaAbierta.setEncuesta(encuestaCreated); + + ePreguntaAbiertaService.save(newEPreguntaAbierta); + } + } + + return ResponseEntity + .created(new URI("/api/encuestas/" + encuestaCreated.getId())) + .headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, encuestaCreated.getId().toString())) + .body(encuestaCreated); + } + + return ResponseEntity.ok().body(null); + } + /** * {@code PUT /encuestas/:id} : Updates an existing encuesta. * diff --git a/src/main/java/org/datasurvey/web/rest/FacturaResource.java b/src/main/java/org/datasurvey/web/rest/FacturaResource.java index 4a407dc..419318c 100644 --- a/src/main/java/org/datasurvey/web/rest/FacturaResource.java +++ b/src/main/java/org/datasurvey/web/rest/FacturaResource.java @@ -8,9 +8,12 @@ import java.util.Optional; import javax.validation.Valid; import javax.validation.constraints.NotNull; import org.datasurvey.domain.Factura; +import org.datasurvey.domain.UsuarioExtra; import org.datasurvey.repository.FacturaRepository; import org.datasurvey.service.FacturaQueryService; import org.datasurvey.service.FacturaService; +import org.datasurvey.service.MailService; +import org.datasurvey.service.UsuarioExtraService; import org.datasurvey.service.criteria.FacturaCriteria; import org.datasurvey.web.rest.errors.BadRequestAlertException; import org.slf4j.Logger; @@ -41,10 +44,22 @@ public class FacturaResource { private final FacturaQueryService facturaQueryService; - public FacturaResource(FacturaService facturaService, FacturaRepository facturaRepository, FacturaQueryService facturaQueryService) { + private final UsuarioExtraService userExtraService; + + private final MailService mailService; + + public FacturaResource( + FacturaService facturaService, + FacturaRepository facturaRepository, + FacturaQueryService facturaQueryService, + UsuarioExtraService userExtraService, + MailService mailService + ) { this.facturaService = facturaService; this.facturaRepository = facturaRepository; this.facturaQueryService = facturaQueryService; + this.userExtraService = userExtraService; + this.mailService = mailService; } /** @@ -60,11 +75,22 @@ public class FacturaResource { if (factura.getId() != null) { throw new BadRequestAlertException("A new factura cannot already have an ID", ENTITY_NAME, "idexists"); } + + Optional usuarioExtra = userExtraService.findOne(Long.parseLong(factura.getNombreUsuario())); + + factura.setNombreUsuario(usuarioExtra.get().getNombre()); + Factura result = facturaService.save(factura); + + mailService.sendReceiptUser(usuarioExtra.get(), factura); + return ResponseEntity .created(new URI("/api/facturas/" + result.getId())) .headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, result.getId().toString())) .body(result); + //retrieve yser + + //Enviar el correo } /** diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 9e05ac2..cab8dde 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -60,7 +60,15 @@ email.invitation.text1=Fue invitado a la encuesta "{0}(#{1})". Para aceptar la s email.invitation.text2=Saludos, #Delete Colaborator -email.deleteColaborator.title=Se le ha expulsado de una encuesta como colaborador -email.deleteColaborator.greeting=¡Se le ha expulsado, {0}! -email.deleteColaborator.text1=Fue expulsado de la encuesta {0}(#{1})" +email.deleteColaborator.title=Eliminado de colaboración +email.deleteColaborator.greeting=Hola, {0} +email.deleteColaborator.text1=Le informamos que ya no cuenta con los permisos de colaborador para la encuesta {0}(#{1}), ya que su colaboración ha sido eliminada por el dueño de la encuesta" email.deleteColaborator.text2=Saludos, + + +email.receipt.title=Comprobante de pago +email.receipt.user={0} +email.receipt.fecha={0} +email.receipt.plantilla={0} +email.receipt.precio=${0} + diff --git a/src/main/resources/templates/mail/facturaPayPalEmail.html b/src/main/resources/templates/mail/facturaPayPalEmail.html new file mode 100644 index 0000000..2764744 --- /dev/null +++ b/src/main/resources/templates/mail/facturaPayPalEmail.html @@ -0,0 +1,262 @@ + + + + + + + + + + + JHipster activation + + + + + + + + + +
+
+ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  +
+ +
+ + + + + + + + diff --git a/src/main/webapp/app/account/register/register.component.spec.ts b/src/main/webapp/app/account/register/register.component.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/account/register/register.component.spec.ts rename to src/main/webapp/app/account/register/register.component.tmpSpec.ts diff --git a/src/main/webapp/app/account/register/register.component.ts b/src/main/webapp/app/account/register/register.component.ts index a1727ff..1d14fa4 100644 --- a/src/main/webapp/app/account/register/register.component.ts +++ b/src/main/webapp/app/account/register/register.component.ts @@ -91,7 +91,7 @@ export class RegisterComponent implements AfterViewInit { login, email, password, - langKey: this.translateService.currentLang, + langKey: this.translateService.currentLang!, name, firstName, profileIcon: this.profileIcon, diff --git a/src/main/webapp/app/app.module.ts b/src/main/webapp/app/app.module.ts index 7c6db5a..0495c9c 100644 --- a/src/main/webapp/app/app.module.ts +++ b/src/main/webapp/app/app.module.ts @@ -33,6 +33,12 @@ import { PageRibbonComponent } from './layouts/profiles/page-ribbon.component'; import { ErrorComponent } from './layouts/error/error.component'; import { SidebarComponent } from './layouts/sidebar/sidebar.component'; import { PaginaPrincipalComponent } from './pagina-principal/pagina-principal.component'; +import { ChartistModule } from 'ng-chartist'; +import { ListarPlantillaTiendaModule } from './entities/tienda/listar-tienda-plantilla/listar-plantilla-tienda.module'; +import { PaypalDialogComponent } from './entities/tienda/paypal-dialog/paypal-dialog.component'; +import { NgxPayPalModule } from 'ngx-paypal'; +import { ShareButtonsModule } from 'ngx-sharebuttons/buttons'; +import { ShareIconsModule } from 'ngx-sharebuttons/icons'; @NgModule({ imports: [ @@ -41,6 +47,7 @@ import { PaginaPrincipalComponent } from './pagina-principal/pagina-principal.co SharedModule, HomeModule, PaginaPrincipalModule, + ListarPlantillaTiendaModule, // jhipster-needle-angular-add-module JHipster will add new module here EntityRoutingModule, AppRoutingModule, @@ -60,6 +67,10 @@ import { PaginaPrincipalComponent } from './pagina-principal/pagina-principal.co useFactory: missingTranslationHandler, }, }), + ChartistModule, // add ChartistModule to your imports + ShareButtonsModule, + ShareIconsModule, + NgxPayPalModule, ], providers: [ Title, @@ -79,7 +90,15 @@ import { PaginaPrincipalComponent } from './pagina-principal/pagina-principal.co } as SocialAuthServiceConfig, }, ], - declarations: [MainComponent, NavbarComponent, ErrorComponent, PageRibbonComponent, FooterComponent, SidebarComponent], + declarations: [ + MainComponent, + NavbarComponent, + ErrorComponent, + PageRibbonComponent, + FooterComponent, + SidebarComponent, + PaypalDialogComponent, + ], bootstrap: [MainComponent], }) export class AppModule { diff --git a/src/main/webapp/app/core/auth/account.service.spec.ts b/src/main/webapp/app/core/auth/account.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/core/auth/account.service.spec.ts rename to src/main/webapp/app/core/auth/account.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/categoria/delete/categoria-delete-dialog.component.html b/src/main/webapp/app/entities/categoria/delete/categoria-delete-dialog.component.html index d1ad4e4..a603aea 100644 --- a/src/main/webapp/app/entities/categoria/delete/categoria-delete-dialog.component.html +++ b/src/main/webapp/app/entities/categoria/delete/categoria-delete-dialog.component.html @@ -19,7 +19,7 @@  Cancel - diff --git a/src/main/webapp/app/entities/categoria/delete/categoria-delete-dialog.component.ts b/src/main/webapp/app/entities/categoria/delete/categoria-delete-dialog.component.ts index 8d665e3..f231513 100644 --- a/src/main/webapp/app/entities/categoria/delete/categoria-delete-dialog.component.ts +++ b/src/main/webapp/app/entities/categoria/delete/categoria-delete-dialog.component.ts @@ -5,7 +5,7 @@ import { IEncuesta } from 'app/entities/encuesta/encuesta.model'; import { EncuestaService } from 'app/entities/encuesta/service/encuesta.service'; import { EstadoCategoria } from 'app/entities/enumerations/estado-categoria.model'; import { Observable } from 'rxjs'; -import { finalize, map } from 'rxjs/operators'; +import { finalize } from 'rxjs/operators'; import { Categoria, ICategoria } from '../categoria.model'; import { CategoriaService } from '../service/categoria.service'; @@ -42,7 +42,7 @@ export class CategoriaDeleteDialogComponent { this.encuestas!.forEach(encuesta => { if (encuesta.categoria != null && encuesta.categoria!.id === categoria.id) { encuesta.categoria = categoriaNula; - this.subscribeToSaveResponse(this.encuestaService.update(encuesta)); + this.subscribeToSaveResponse(this.encuestaService.updateSurvey(encuesta)); } }); categoria.estado = EstadoCategoria.INACTIVE; diff --git a/src/main/webapp/app/entities/categoria/list/categoria.component.html b/src/main/webapp/app/entities/categoria/list/categoria.component.html index b486a5d..780d299 100644 --- a/src/main/webapp/app/entities/categoria/list/categoria.component.html +++ b/src/main/webapp/app/entities/categoria/list/categoria.component.html @@ -44,7 +44,7 @@ - +
@@ -67,7 +67,7 @@ Edit - diff --git a/src/main/webapp/app/entities/categoria/route/categoria-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/categoria/route/categoria-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/categoria/route/categoria-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/categoria/route/categoria-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.html b/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.html new file mode 100644 index 0000000..3a64b9c --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.html @@ -0,0 +1,246 @@ +
+
+ + + + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+

Ganancias por plantillas

+ ${{ gananciasTotales | number: '1.2' }} +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+

Cantidad usuarios activos

+ {{ cantUsuarioActivos }} +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+

Cantidad usuarios bloqueados

+ {{ cantUsuarioBloqueados }} +
+
+
+
+ +
+
+
+
+
+
+
+

Cantidad de encuestas publicadas por mes

+ +
+
+
+
+
+
+
+

Cantidad de Encuestas Publicadas por Categoria

+
+
+
+
+
+
Nombre
+ + + + + + + +
{{ categoria.nombre }} + {{ encuestasPublicadasCategoria[i] }} +
+ + + + + + +
+
+
+

Cantidad de Encuestas Finalizadas por Categoria

+
+
+
+
+
+ + + + + + + + +
{{ categoria.nombre }} + {{ encuestasFinalzadasCategoria[i] }} +
+
+
+
+
+
+
+ +
+
+
+
+
Encuestas En Borrador
+
+
+
{{ encuestasBorrador }}
+
+
+
+
+
+
+
Encuestas Publicadas
+
+
+
{{ encuestasPublicadas }}
+
+
+
+
+
+
+
Encuestas Finalizadas
+
+
+
{{ encuestasFinalizadas }}
+
+
+
+
+
+
+
Encuestas Completadas por Usuarios
+
+
+
{{ encuestasCompletadas }}
+
+
+
+
+ +
+
+
+
+
+

Reporte de Encuestas Usuarios

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
UsuarioTotal de encuestasEncuestas en borradorEncuestas publicadasEncuestas finalizadasEncuestas completadas por usuario
+
+
{{ usuario.nombre }} + {{ encuestasUsuario[j] }} + + {{ encuestasUsuarioBorrador[j] }} + + {{ encuestasUsuarioPublicadas[j] }} + + {{ encuestasUsuarioFinalizadas[j] }} + + {{ encuestasUsuarioCompletadas[j] }} +
+
+
+
+
+
+
+
+
+ diff --git a/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.scss b/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.scss new file mode 100644 index 0000000..487f841 --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.scss @@ -0,0 +1,46 @@ +.ct-chart { + width: 100%; + height: 400px; + overflow-x: scroll; +} +.grafico-encuestas-fecha .card { + width: 100%; +} + +.card .icon-big { + font-size: 3em; +} + +.icon-success { + color: #00b88d; +} + +.icon-users-active { + color: #018adf; +} + +.icon-users-block { + color: #da1b2b; +} + +.encuestas-por-categoria .table-responsive { + height: 300px; + max-height: 300px; +} + +.por-categoria { + padding: 5% 0; +} +.encuestas-por-usuario .table-responsive { + height: 500px; + max-height: 500px; +} + +.encuestas-por-usuario .photo { + width: 40px; + height: 40px; +} + +.encuestas-por-usuario .photo img { + border-radius: 100%; +} diff --git a/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.tempSpec.ts b/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.tempSpec.ts new file mode 100644 index 0000000..f199b58 --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.tempSpec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashboardAdminComponent } from './dashboard-admin.component'; + +describe('DashboardAdminComponent', () => { + let component: DashboardAdminComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [DashboardAdminComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DashboardAdminComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.ts b/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.ts new file mode 100644 index 0000000..72d3363 --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/dashboard-admin/dashboard-admin.component.ts @@ -0,0 +1,534 @@ +import { Component, OnInit } from '@angular/core'; +import * as XLSX from 'xlsx'; +import * as FileSaver from 'file-saver'; +import { jsPDF } from 'jspdf'; +import { exportAsExcelFile, exportAsExcelTable } from '../export/export_excel'; +import { generatePDFTableData, createPDFTableHeaders, generatePDFTable, saveGeneratedPDF } from '../export/export_pdf'; + +import { FacturaService } from '../../factura/service/factura.service'; +import { UsuarioExtraService } from '../../usuario-extra/service/usuario-extra.service'; +import { CategoriaService } from '../../categoria/service/categoria.service'; +import { EncuestaService } from '../../encuesta/service/encuesta.service'; + +import { ICategoria } from '../../categoria/categoria.model'; +import { IEncuesta } from '../../encuesta/encuesta.model'; +import { finalize } from 'rxjs/operators'; + +import * as Chartist from 'chartist'; + +import { faWallet, faUsers, faUsersSlash } from '@fortawesome/free-solid-svg-icons'; +import { IUsuarioExtra } from '../../usuario-extra/usuario-extra.model'; +import { IUser } from '../../user/user.model'; + +@Component({ + selector: 'jhi-dashboard-admin', + templateUrl: './dashboard-admin.component.html', + styleUrls: ['./dashboard-admin.component.scss'], +}) +export class DashboardAdminComponent implements OnInit { + cantUsuarioActivos: number | undefined = 0; + cantUsuarioBloqueados: number | undefined = 0; + encuestasPublicadasCategoria: number[] = []; + encuestasFinalzadasCategoria: number[] = []; + encuestasPublicadasMesAnno: number[] = []; + listaMesesAnnos: string[] = []; + gananciasTotales: number = 0; + categorias: ICategoria[] | undefined = []; + encuestas: IEncuesta[] | undefined = []; + usuarios: IUsuarioExtra[] | undefined = []; + faWallet = faWallet; + faUsers = faUsers; + faUsersSlash = faUsersSlash; + encuestasPublicadas: number = 0; + encuestasFinalizadas: number = 0; + encuestasBorrador: number = 0; + encuestasCompletadas: number = 0; + encuestasUsuario: number[] = []; + encuestasUsuarioPublicadas: number[] = []; + encuestasUsuarioFinalizadas: number[] = []; + encuestasUsuarioBorrador: number[] = []; + encuestasUsuarioCompletadas: number[] = []; + usuariosGenerales: IUser[] | null = []; + + reportsGeneral = false; + reportForUsers = true; + + chartFechas = []; + + constructor( + protected facturaService: FacturaService, + protected usuarioExtraService: UsuarioExtraService, + protected encuestaService: EncuestaService, + protected categoriaService: CategoriaService + ) {} + + ngOnInit(): void { + this.loadAll(); + } + + trackId(_index: number, item: ICategoria): number { + return item.id!; + } + + trackIdUsuario(_index: number, item: IUsuarioExtra): number { + return item.id!; + } + + cambiarVista() { + if (this.reportsGeneral) { + this.reportsGeneral = false; + this.reportForUsers = true; + } else if (this.reportForUsers) { + this.reportsGeneral = true; + this.reportForUsers = false; + } + } + + loadAll() { + this.cargarGananciasTotales(); + this.cargarUsers(); + } + + cargarGananciasTotales() { + this.facturaService.query().subscribe(res => { + const tempFacturas = res.body; + tempFacturas?.forEach(f => { + if (f.costo != undefined) { + this.gananciasTotales += f.costo; + } + }); + }); + } + + cargarUsers() { + this.usuarioExtraService + .retrieveAllPublicUsers() + .pipe(finalize(() => this.cargarCantidadUsuarios())) + .subscribe(res => { + res.forEach(user => { + let rolList: string[] | undefined; + rolList = user.authorities; + let a = rolList?.pop(); + if (a == 'ROLE_ADMIN') { + user.authorities = ['Admin']; + } else if (a == 'ROLE_USER') { + user.authorities = ['Usuario']; + } + }); + this.usuariosGenerales = res; + }); + } + + cargarCantidadUsuarios() { + this.usuarioExtraService + .query() + .pipe(finalize(() => this.cargarEncuestas())) + .subscribe(res => { + const tmpUsuarios = res.body; + + if (tmpUsuarios) { + tmpUsuarios.forEach(u => { + u.user = this.usuariosGenerales?.find(g => g.id == u.user?.id); + }); + } + this.usuarios = tmpUsuarios?.filter(u => u.user?.authorities && u.user?.authorities[0] === 'Usuario'); + this.cantUsuarioActivos = tmpUsuarios?.filter(u => u.estado === 'ACTIVE').length; + this.cantUsuarioBloqueados = tmpUsuarios?.filter(u => u.estado === 'SUSPENDED').length; + }); + } + + cargarEncuestas() { + this.encuestaService + .query() + .pipe(finalize(() => this.cargarCategorias())) + .subscribe(res => { + const tmpEncuestas = res.body; + this.encuestas = tmpEncuestas?.filter(e => e.estado === 'ACTIVE' || e.estado === 'FINISHED' || e.estado === 'DRAFT'); + if (tmpEncuestas) { + this.encuestasPublicadas = tmpEncuestas.filter(e => e.estado === 'ACTIVE').length; + this.encuestasFinalizadas = tmpEncuestas.filter(e => e.estado === 'FINISHED').length; + this.encuestasBorrador = tmpEncuestas.filter(e => e.estado === 'DRAFT').length; + let cantidadCompletadas: number = 0; + tmpEncuestas + .filter(e => e.estado === 'ACTIVE') + .forEach(e => { + const _contadorCompletadas = e.calificacion; + cantidadCompletadas = cantidadCompletadas + (Number(_contadorCompletadas?.toString().split('.')[1]) - 1); + }); + this.encuestasCompletadas = cantidadCompletadas; + + //reportes generales de todos los usuarios + const publicadasUser: number[] | null = []; + const finalizadasUser: number[] | null = []; + const borradoresUser: number[] | null = []; + const encuestasUser: number[] | null = []; + const encuestasCompletadasUser: number[] | null = []; + + if (this.usuarios) { + this.usuarios.forEach(u => { + let cantEncuestas = 0; + let cantPublicadas = 0; + let cantFinalizadas = 0; + let cantBorradores = 0; + cantEncuestas = tmpEncuestas.filter(e => e.estado !== 'DELETED' && e.usuarioExtra?.id === u.id).length; + cantPublicadas = tmpEncuestas.filter(e => e.estado === 'ACTIVE' && e.usuarioExtra?.id === u.id).length; + cantFinalizadas = tmpEncuestas.filter(e => e.estado === 'FINISHED' && e.usuarioExtra?.id === u.id).length; + cantBorradores = tmpEncuestas.filter(e => e.estado === 'DRAFT' && e.usuarioExtra?.id === u.id).length; + + encuestasUser.push(cantEncuestas); + borradoresUser.push(cantBorradores); + publicadasUser.push(cantPublicadas); + finalizadasUser.push(cantFinalizadas); + + let cantidadCompletadasUser: number = 0; + tmpEncuestas + .filter(e => e.estado === 'ACTIVE' && e.usuarioExtra?.id === u.id) + .forEach(e => { + const _contadorCompletadas = e.calificacion; + cantidadCompletadasUser = cantidadCompletadasUser + (Number(_contadorCompletadas?.toString().split('.')[1]) - 1); + }); + encuestasCompletadasUser.push(cantidadCompletadasUser); + }); + this.encuestasUsuarioCompletadas = encuestasCompletadasUser; + this.encuestasUsuario = encuestasUser; + this.encuestasUsuarioBorrador = borradoresUser; + this.encuestasUsuarioPublicadas = publicadasUser; + this.encuestasUsuarioFinalizadas = finalizadasUser; + } + } + }); + } + + cargarCategorias() { + this.categoriaService + .query() + .pipe(finalize(() => this.acomodarMesesYAnnos())) + .subscribe(res => { + const tmpCategorias = res.body; + this.categorias = tmpCategorias?.filter(c => c.estado === 'ACTIVE'); + const publicadas: number[] | null = []; + const finalizadas: number[] | null = []; + this.categorias?.forEach(c => { + let cantPublicadas = 0; + let cantFinalizadas = 0; + this.encuestas?.forEach(e => { + if (e.categoria?.id === c.id && e.estado === 'ACTIVE') { + cantPublicadas = cantPublicadas + 1; + } + if (e.categoria?.id === c.id && e.estado === 'FINISHED') { + cantFinalizadas = cantFinalizadas + 1; + } + }); + publicadas.push(cantPublicadas); + finalizadas.push(cantFinalizadas); + }); + this.encuestasPublicadasCategoria = publicadas; + this.encuestasFinalzadasCategoria = finalizadas; + }); + } + + acomodarMesesYAnnos() { + const fechas: string[] | null = []; + const cantEncuestasFechas: number[] | null = []; + var encuestasPublicadas = this.encuestas?.filter(e => e.estado === 'ACTIVE'); + if (encuestasPublicadas) { + encuestasPublicadas = this.ordenarFechas(encuestasPublicadas); + encuestasPublicadas.forEach(e => { + if (e.fechaPublicacion) { + let fecha = this.formatoFecha(e.fechaPublicacion); + if (!fechas.includes(fecha)) { + fechas.push(fecha); + } + } + }); + this.listaMesesAnnos = fechas; + + this.listaMesesAnnos.forEach(f => { + let contEncuestaDeFecha = 0; + if (encuestasPublicadas) { + encuestasPublicadas.forEach(e => { + if (e.fechaPublicacion) { + let fecha = this.formatoFecha(e.fechaPublicacion); + if (f === fecha) { + contEncuestaDeFecha++; + } + } + }); + } + cantEncuestasFechas.push(contEncuestaDeFecha); + }); + this.encuestasPublicadasMesAnno = cantEncuestasFechas; + } + this.llenarGraficoEncuestasXFechas(); + } + + llenarGraficoEncuestasXFechas() { + if (this.listaMesesAnnos && this.encuestasPublicadasMesAnno) { + var data = { + // A labels array that can contain any sort of values + labels: this.listaMesesAnnos, + // Our series array that contains series objects or in this case series data arrays + series: [this.encuestasPublicadasMesAnno], + }; + var options = { + low: 0, + showArea: true, + showLabel: true, + axisY: { + onlyInteger: true, + }, + }; + new Chartist.Line('.ct-chart', data, options); + } + } + + formatoFecha(fecha: any): string { + return fecha.month() + 1 + '/' + fecha.year(); + } + + ordenarFechas(encuestasPublicadas: IEncuesta[]): IEncuesta[] { + if (encuestasPublicadas) { + encuestasPublicadas.sort((e1, e2) => { + if (e1.fechaPublicacion && e2.fechaPublicacion) { + return e1.fechaPublicacion < e2.fechaPublicacion ? -1 : e1.fechaPublicacion > e2.fechaPublicacion ? 1 : 0; + } + return 0; + }); + } + return encuestasPublicadas; + } + + exportReportesGeneralesAdministradorExcel(): void { + /* + Cantidad de usuarios activos + Cantidad de usuarios bloqueados + Cantidad de encuestas publicadas por categoría + Cantidad de encuestas finalizadas por categoría + Cantidad de encuestas publicadas por mes y año + + Cantidad de encuestas + Cantidad de personas que han completado sus encuestas + Cantidad de encuestas activas + Cantidad de encuestas finalizadas + Cantidad de comentarios de retroalimentación + */ + + const _sheets = [ + 'usuarios generales', + 'enc. publicadas', + 'enc. publicadas categoría', + 'enc. finalizadas categoría', + 'encuestas generales', + 'reporte de usuarios', + ]; + + const _reporteUsuarios = [ + { + ganancias_plantillas: this.gananciasTotales, + usuarios_activos: this.cantUsuarioActivos, + usuarios_bloqueados: this.cantUsuarioBloqueados, + }, + ]; + + // listaMesesAnnos + // encuestasPublicadasMesAnno + const _reporteEncuestasPublicadas: any[] = []; + this.listaMesesAnnos.forEach((date: any, index) => { + let _report: any = {}; + _report['fecha'] = date; + _report['cantidad'] = this.encuestasPublicadasMesAnno[index]; + _reporteEncuestasPublicadas.push(_report); + }); + + // this.categorias + // this.encuestasPublicadasCategoria + const _reporteCantidadEncuestasPublicadasCategoria: any[] = []; + this.categorias!.forEach((categoria: any, index) => { + let _report: any = {}; + _report['categoria'] = categoria.nombre; + _report['cantidad'] = this.encuestasPublicadasCategoria[index]; + _reporteCantidadEncuestasPublicadasCategoria.push(_report); + }); + + // this.categorias + // this.encuestasFinalzadasCategoria + const _reporteCantidadEncuestasFinalizadasCategoria: any[] = []; + this.categorias!.forEach((categoria: any, index) => { + let _report: any = {}; + _report['categoria'] = categoria.nombre; + _report['cantidad'] = this.encuestasFinalzadasCategoria[index]; + _reporteCantidadEncuestasFinalizadasCategoria.push(_report); + }); + + // this.encuestasPublicadas + // this.encuestasFinalizadas + // this.encuestasBorrador + // this.encuestasCompletadas + const _reporteEncuestasReportesGenerales = [ + { + encuestas_borrador: this.encuestasBorrador, + encuestas_publicadas: this.encuestasPublicadas, + encuestas_finalizadas: this.encuestasFinalizadas, + encuestas_completadas: this.encuestasCompletadas, + }, + ]; + + // this.encuestasUsuario; + // this.encuestasUsuarioPublicadas; + // this.encuestasUsuarioFinalizadas; + // this.encuestasUsuarioBorrador; + // this.encuestasUsuarioCompletadas; + // this.usuarios; + const _reporteEncuestasUsuarios: any[] = []; + this.usuarios!.forEach((user, index) => { + let _report: any = {}; + _report['usuario_nombre'] = user.nombre; + _report['usuario_encuestas'] = this.encuestasUsuario[index]; + _report['encuestas_borrador'] = this.encuestasUsuarioBorrador[index]; + _report['encuestas_publicadas'] = this.encuestasUsuarioPublicadas[index]; + _report['encuestas_finalizadas'] = this.encuestasUsuarioFinalizadas[index]; + _report['encuestas_completadas_usuarios'] = this.encuestasUsuarioCompletadas[index]; + _reporteEncuestasUsuarios.push(_report); + }); + + const _excelFinalData = [ + _reporteUsuarios, + _reporteEncuestasPublicadas, + _reporteCantidadEncuestasPublicadasCategoria, + _reporteCantidadEncuestasFinalizadasCategoria, + _reporteEncuestasReportesGenerales, + _reporteEncuestasUsuarios, + ]; + const _fileName = 'reportes_datasurvey'; + exportAsExcelFile(_sheets, _excelFinalData, _fileName); + } + + exportReportesGeneralesAdministradorPDF(): void { + /* + Cantidad de usuarios activos + Cantidad de usuarios bloqueados + Cantidad de encuestas publicadas por categoría + Cantidad de encuestas finalizadas por categoría + Cantidad de encuestas publicadas por mes y año + + Cantidad de encuestas + Cantidad de personas que han completado sus encuestas + Cantidad de encuestas activas + Cantidad de encuestas finalizadas + Cantidad de comentarios de retroalimentación + + */ + + const doc = new jsPDF(); + const _fileName = 'reportes_datasurvey'; + let _docData, _headers, _docHeaders, _docTitle; + + // Usuarios Generales + const _reporteUsuarios = [ + { + ganancias_plantillas: this.gananciasTotales!.toString(), + usuarios_activos: this.cantUsuarioActivos!.toString(), + usuarios_bloqueados: this.cantUsuarioBloqueados!.toString(), + }, + ]; + _docData = generatePDFTableData(_reporteUsuarios); + _headers = ['ganancias_plantillas', 'usuarios_activos', 'usuarios_bloqueados']; + _docHeaders = createPDFTableHeaders(_headers); + _docTitle = 'Reporte Usuarios Generales'; + + generatePDFTable(doc, _docData, _docHeaders, _docTitle); + doc.addPage('p'); + + // Encuestas Publicadas + const _reporteEncuestasPublicadas: any[] = []; + this.listaMesesAnnos.forEach((date: any, index) => { + let _report: any = {}; + _report['fecha'] = date; + _report['cantidad'] = this.encuestasPublicadasMesAnno[index].toString(); + _reporteEncuestasPublicadas.push(_report); + }); + _docData = generatePDFTableData(_reporteEncuestasPublicadas); + _headers = ['fecha', 'cantidad']; + _docHeaders = createPDFTableHeaders(_headers); + _docTitle = 'Reporte Encuestas Publicadas'; + + generatePDFTable(doc, _docData, _docHeaders, _docTitle); + doc.addPage('p'); + + // Encuestas Publicadas + const _reporteCantidadEncuestasPublicadasCategoria: any[] = []; + this.categorias!.forEach((categoria: any, index) => { + let _report: any = {}; + _report['categoria'] = categoria.nombre; + _report['cantidad'] = this.encuestasPublicadasCategoria[index].toString(); + _reporteCantidadEncuestasPublicadasCategoria.push(_report); + }); + _docData = generatePDFTableData(_reporteCantidadEncuestasPublicadasCategoria); + _headers = ['categoria', 'cantidad']; + _docHeaders = createPDFTableHeaders(_headers); + _docTitle = 'Reporte Encuestas Publicadas por Categoría'; + + generatePDFTable(doc, _docData, _docHeaders, _docTitle); + doc.addPage('p'); + + // Encuestas Publicadas + const _reporteCantidadEncuestasFinalizadasCategoria: any[] = []; + this.categorias!.forEach((categoria: any, index) => { + let _report: any = {}; + _report['categoria'] = categoria.nombre; + _report['cantidad'] = this.encuestasFinalzadasCategoria[index].toString(); + _reporteCantidadEncuestasFinalizadasCategoria.push(_report); + }); + _docData = generatePDFTableData(_reporteCantidadEncuestasFinalizadasCategoria); + _headers = ['categoria', 'cantidad']; + _docHeaders = createPDFTableHeaders(_headers); + _docTitle = 'Reporte Encuestas Finalizadas por Categoría'; + + generatePDFTable(doc, _docData, _docHeaders, _docTitle); + doc.addPage('', 'l'); + + // Encuestas Generales + const _reporteEncuestasReportesGenerales = [ + { + encuestas_borrador: this.encuestasBorrador.toString(), + encuestas_publicadas: this.encuestasPublicadas.toString(), + encuestas_finalizadas: this.encuestasFinalizadas.toString(), + encuestas_completadas: this.encuestasCompletadas.toString(), + }, + ]; + _docData = generatePDFTableData(_reporteEncuestasReportesGenerales); + _headers = ['encuestas_borrador', 'encuestas_publicadas', 'encuestas_finalizadas', 'encuestas_completadas']; + _docHeaders = createPDFTableHeaders(_headers); + _docTitle = 'Reporte Encuestas Generales'; + generatePDFTable(doc, _docData, _docHeaders, _docTitle); + doc.addPage('', 'l'); + + // Usuarios + const _reporteEncuestasUsuarios: any[] = []; + this.usuarios!.forEach((user, index) => { + let _report: any = {}; + _report['usuario_nombre'] = user.nombre; + _report['usuario_encuestas'] = this.encuestasUsuario[index].toString(); + _report['encuestas_borrador'] = this.encuestasUsuarioBorrador[index].toString(); + _report['encuestas_publicadas'] = this.encuestasUsuarioPublicadas[index].toString(); + _report['encuestas_finalizadas'] = this.encuestasUsuarioFinalizadas[index].toString(); + _report['encuestas_completadas_usuarios'] = this.encuestasUsuarioCompletadas[index].toString(); + _reporteEncuestasUsuarios.push(_report); + }); + _docData = generatePDFTableData(_reporteEncuestasUsuarios); + _headers = [ + 'usuario_nombre', + 'usuario_encuestas', + 'encuestas_borrador', + 'encuestas_publicadas', + 'encuestas_finalizadas', + 'encuestas_completadas_usuarios', + ]; + _docHeaders = createPDFTableHeaders(_headers); + _docTitle = 'Reporte de Usuarios'; + + generatePDFTable(doc, _docData, _docHeaders, _docTitle); + + saveGeneratedPDF(doc, _fileName); + } +} diff --git a/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.html b/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.html new file mode 100644 index 0000000..e1abbc3 --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.html @@ -0,0 +1,266 @@ +
+
+ + + + + +
+ +
+
+

Reportes generales

+

En esta sección encontrará los reportes generales de todas sus encuestas

+
+ +
+

Reportes por encuesta

+

En esta sección encontrará los reportes de cada una de sus encuestas

+
+ +
+

Detalles de la encuesta

+

En esta sección encontrará los reportes con respecto al contenido de las preguntas de su encuesta

+
+
+ + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+

Cantidad de encuestas creadas

+ {{ cantEncuestas }} +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+

Cantidad de usuario que han completado las encuestas

+ {{ cantPersonas }} +
+
+
+
+ +
+
+
+ +
+
+
+
+

Cantidad de encuestas por estado

+ +
+
+
+
+ +
+
+
+

Cantidad de encuestas por acceso

+ +
+
+
+
+
+
+
+ + + +
+
+
+
+
+
{{ encuesta.nombre }}
+
+ {{ encuesta.categoria?.nombre | lowercase }} +
+
+ {{ encuesta.descripcion | titlecase }} +
+
+
+
+ Duración:     {{ + duracion + }} + Duración:     Un día o + menos + + Duración:     No ha + finalizado +
+ +
+

Calificación:

+ + +
+
+ +
+
+
+
+
+
+
+
+ + + +
+
+
+ No se encontraron preguntas +
+ +
+
+
+
+
+ {{ i + 1 }}. {{ ePregunta.nombre }} +
+
+ Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.SINGLE' | translate | lowercase }} + {{ ePregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.MULTIPLE' | translate | lowercase }} + {{ ePregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta abierta {{ ePregunta.opcional ? '(opcional)' : '' }} +
+ + + + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.scss b/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.tempSpec.ts b/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.tempSpec.ts new file mode 100644 index 0000000..d1665ea --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.tempSpec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashboardUserComponent } from './dashboard-user.component'; + +describe('DashboardUserComponent', () => { + let component: DashboardUserComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [DashboardUserComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DashboardUserComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.ts b/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.ts new file mode 100644 index 0000000..2318998 --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/dashboard-user/dashboard-user.component.ts @@ -0,0 +1,218 @@ +import { Component, OnInit } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { IEncuesta } from '../../encuesta/encuesta.model'; +import { EstadoEncuesta } from '../../enumerations/estado-encuesta.model'; +import { EncuestaService } from '../../encuesta/service/encuesta.service'; +import { UsuarioExtra } from '../../usuario-extra/usuario-extra.model'; +import { Account } from '../../../core/auth/account.model'; +import { AccountService } from '../../../core/auth/account.service'; +import { UsuarioExtraService } from '../../usuario-extra/service/usuario-extra.service'; +import { faListAlt, faUser, faEye, faStar, faCalendarAlt } from '@fortawesome/free-solid-svg-icons'; +import * as Chartist from 'chartist'; +import { finalize } from 'rxjs/operators'; +import { EPreguntaAbiertaRespuestaService } from '../../e-pregunta-abierta-respuesta/service/e-pregunta-abierta-respuesta.service'; +import { each } from 'chart.js/helpers'; +import { IEPreguntaAbiertaRespuesta } from '../../e-pregunta-abierta-respuesta/e-pregunta-abierta-respuesta.model'; + +@Component({ + selector: 'jhi-dashboard-user', + templateUrl: './dashboard-user.component.html', + styleUrls: ['./dashboard-user.component.scss'], +}) +export class DashboardUserComponent implements OnInit { + cantEncuestas: number = 0; + cantPersonas: number = 0; + cantActivas: number = 0; + cantFinalizadas: number = 0; + cantDraft: number = 0; + cantPublicas: number = 0; + cantPrivadas: number = 0; + faListAlt = faListAlt; + faUser = faUser; + faEye = faEye; + faStar = faStar; + faCalendarAlt = faCalendarAlt; + reportsGeneral = false; + reportForEncuestas = true; + reportPreguntas = true; + duracion?: number = 0; + ePreguntas?: any[]; + ePreguntasOpciones?: any[]; + respuestaAbierta?: IEPreguntaAbiertaRespuesta[]; + isLoading = false; + encuestas?: IEncuesta[]; + usuarioExtra: UsuarioExtra | null = null; + account: Account | null = null; + encuesta: IEncuesta | null = null; + preguntaId?: number = 0; + + constructor( + protected encuestaService: EncuestaService, + protected accountService: AccountService, + protected usuarioExtraService: UsuarioExtraService, + protected resAbierta: EPreguntaAbiertaRespuestaService + ) {} + + ngOnInit(): void { + this.loadUser(); + } + + cambiarVista() { + if (this.reportsGeneral) { + this.reportsGeneral = false; + this.reportForEncuestas = true; + this.reportPreguntas = true; + } else if (this.reportForEncuestas) { + this.reportsGeneral = true; + this.reportForEncuestas = false; + this.reportPreguntas = true; + } else if (this.reportPreguntas) { + this.reportForEncuestas = false; + this.reportPreguntas = true; + this.reportsGeneral = true; + } + } + + loadEncuestas() { + this.encuestaService.query().subscribe( + (res: HttpResponse) => { + this.isLoading = false; + const tmpEncuestas = res.body ?? []; + + this.encuestas = tmpEncuestas.filter(e => e.usuarioExtra?.id === this.usuarioExtra?.id); + this.cantEncuestas = this.encuestas.length; + this.cantActivas = tmpEncuestas.filter(e => e.estado === 'ACTIVE' && e.usuarioExtra?.id === this.usuarioExtra?.id).length; + this.cantDraft = tmpEncuestas.filter(e => e.estado === 'DRAFT' && e.usuarioExtra?.id === this.usuarioExtra?.id).length; + this.cantFinalizadas = tmpEncuestas.filter(e => e.estado === 'FINISHED' && e.usuarioExtra?.id === this.usuarioExtra?.id).length; + this.cantPublicas = tmpEncuestas.filter(e => e.acceso === 'PUBLIC' && e.usuarioExtra?.id === this.usuarioExtra?.id).length; + this.cantPrivadas = tmpEncuestas.filter(e => e.acceso === 'PRIVATE' && e.usuarioExtra?.id === this.usuarioExtra?.id).length; + + tmpEncuestas.forEach(encuesta => { + const _calificacion = encuesta.calificacion; + encuesta.calificacion = Number(_calificacion?.toString().split('.')[0]); + + if (encuesta.fechaFinalizada == null) { + this.duracion = -1; + } else { + this.duracion = encuesta.fechaPublicacion?.diff(encuesta.fechaFinalizada!, 'days'); + } + }); + + this.cantPersonas = tmpEncuestas.filter(e => e.calificacion && e.usuarioExtra?.id === this.usuarioExtra?.id).length; + //cantidad de personas que han completado la encuesta + + this.loadFirstChart(); + this.loadSecondChart(); + }, + () => { + this.isLoading = false; + } + ); + } + + loadUser(): void { + this.accountService.getAuthenticationState().subscribe(account => { + if (account !== null) { + this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { + this.usuarioExtra = usuarioExtra.body; + }); + } + }); + + this.loadEncuestas(); + } + + loadFirstChart(): void { + var dataEstado = { + labels: ['ACTIVOS', 'BORRADOR', 'FINALIZADOS'], + series: [this.cantActivas, this.cantDraft, this.cantFinalizadas], + }; + + new Chartist.Pie('#chartEstado', dataEstado); + } + + loadSecondChart(): void { + var dataAcceso = { + labels: ['PÚBLICA', 'PRIVADA'], + series: [this.cantPublicas, this.cantPrivadas], + }; + + new Chartist.Pie('#chartAcceso', dataAcceso); + } + + detallesPreguntas(encuesta: IEncuesta): void { + if (!this.reportForEncuestas) { + this.reportPreguntas = false; + this.reportForEncuestas = true; + this.reportsGeneral = true; + } + + this.encuesta = encuesta; + debugger; + this.isLoading = true; + this.encuestaService + .findQuestions(encuesta?.id!) + .pipe( + finalize(() => + this.encuestaService.findQuestionsOptions(encuesta?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.ePreguntasOpciones = res.body ?? []; + + debugger; + + this.getOpenQuestionAnswers(); + }, + () => { + this.isLoading = false; + } + ) + ) + ) + .subscribe( + (res: any) => { + this.isLoading = false; + this.ePreguntas = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); + if (this.ePreguntas!.length == 0) { + this.previousState(); + } + } + + previousState(): void { + window.history.back(); + } + + getOpenQuestionAnswers() { + this.ePreguntas!.forEach(pregunta => { + debugger; + if (!pregunta.tipo) { + this.resAbierta.query().subscribe(res => { + debugger; + + this.preguntaId = pregunta.id; + + this.respuestaAbierta = res.body ?? []; + /* const respuesta = res.body ?? []; + + respuesta.forEach( e => { + debugger + + + if (e.epreguntaAbierta?.id == pregunta.id){ + this.respuestaAbierta?.push(e); + } + /!*debugger + this.eRespuestaAbierta?.push(respuesta.filter(e.ePreguntaAbierta?.id == pregunta.id));*!/ + }) +*/ + console.log(this.respuestaAbierta); + }); + } + }); + } +} diff --git a/src/main/webapp/app/entities/dashboard/dashboard.module.ts b/src/main/webapp/app/entities/dashboard/dashboard.module.ts new file mode 100644 index 0000000..c172c5c --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/dashboard.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { DashboardUserComponent } from './dashboard-user/dashboard-user.component'; +import { DashboardAdminComponent } from './dashboard-admin/dashboard-admin.component'; +import { SharedModule } from '../../shared/shared.module'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; +import { DashboardRoutingModule } from './route/dashboard-routing.module'; + +@NgModule({ + declarations: [DashboardUserComponent, DashboardAdminComponent], + imports: [CommonModule, SharedModule, DashboardRoutingModule, FontAwesomeModule], +}) +export class DashboardModule {} diff --git a/src/main/webapp/app/entities/dashboard/export/export_common.ts b/src/main/webapp/app/entities/dashboard/export/export_common.ts new file mode 100644 index 0000000..d3a083e --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/export/export_common.ts @@ -0,0 +1,10 @@ +export const generateFileName = (fileName: string, extension: string): string => { + return ( + fileName + + '_' + + new Date().toLocaleDateString().substr(0, 10).split('/').join('-') + + '_' + + Math.random().toString().substring(2) + + extension + ); +}; diff --git a/src/main/webapp/app/entities/dashboard/export/export_excel.ts b/src/main/webapp/app/entities/dashboard/export/export_excel.ts new file mode 100644 index 0000000..8054a73 --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/export/export_excel.ts @@ -0,0 +1,37 @@ +import * as XLSX from 'xlsx'; +import * as FileSaver from 'file-saver'; +import { generateFileName } from './export_common'; + +const EXCEL_TYPE: string = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'; +const EXCEL_EXTENSION: string = '.xlsx'; + +export const exportAsExcelFile = (sheetNames: string[], arrayOfData: any[], excelFileName: any) => { + const workbook = XLSX.utils.book_new(); + + arrayOfData.forEach((data, index) => { + let sheetName = sheetNames[index]; + let worksheet = XLSX.utils.json_to_sheet(data); + XLSX.utils.book_append_sheet(workbook, worksheet, sheetName); + }); + + const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); + saveAsExcelFile(excelBuffer, excelFileName); +}; + +const saveAsExcelFile = (buffer: any, fileName: any) => { + const data = new Blob([buffer], { type: EXCEL_EXTENSION }); + const generatedFileName = generateFileName(fileName, EXCEL_EXTENSION); + + FileSaver.saveAs(data, generatedFileName); +}; + +export const exportAsExcelTable = () => { + const workbook = XLSX.utils.book_new(); + + let worksheet = XLSX.utils.json_to_sheet([{ test: 1 }, { test: 2 }]); + + XLSX.utils.book_append_sheet(workbook, worksheet, 'test'); + + const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); + saveAsExcelFile(excelBuffer, 'test'); +}; diff --git a/src/main/webapp/app/entities/dashboard/export/export_pdf.ts b/src/main/webapp/app/entities/dashboard/export/export_pdf.ts new file mode 100644 index 0000000..0fbced1 --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/export/export_pdf.ts @@ -0,0 +1,42 @@ +import { jsPDF } from 'jspdf'; +import { generateFileName } from './export_common'; + +const PDF_EXTENSION: string = '.pdf'; + +export const generatePDFTableData = (data: any): any => { + const result: any = []; + + data.forEach((item: any) => { + result.push(Object.assign({}, item)); + }); + + return result; +}; + +export const createPDFTableHeaders = (keys: any): any[] => { + let result = []; + for (let i = 0; i < keys.length; i += 1) { + result.push({ + id: keys[i], + name: keys[i], + prompt: keys[i], + align: 'left', + padding: 0, + }); + } + return result; +}; + +export const generatePDFTable = (doc: jsPDF, _docData: any, _docHeaders: string[], _docTitle: string): void => { + doc.setFontSize(20); + doc.setFont('helvetica', 'bold'); + doc.text(_docTitle, 20, 20); + doc.setFont('helvetica'); + + doc.table(20, 30, _docData, _docHeaders, { fontSize: 10, autoSize: true }); +}; + +export const saveGeneratedPDF = (doc: jsPDF, _fileName: string) => { + const generatedFileName = generateFileName(_fileName, PDF_EXTENSION); + doc.save(generatedFileName); +}; diff --git a/src/main/webapp/app/entities/dashboard/route/dashboard-routing.module.ts b/src/main/webapp/app/entities/dashboard/route/dashboard-routing.module.ts new file mode 100644 index 0000000..6e23128 --- /dev/null +++ b/src/main/webapp/app/entities/dashboard/route/dashboard-routing.module.ts @@ -0,0 +1,25 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { DashboardUserComponent } from '../dashboard-user/dashboard-user.component'; +import { DashboardAdminComponent } from '../dashboard-admin/dashboard-admin.component'; +import { UserRouteAccessService } from '../../../core/auth/user-route-access.service'; + +const dashboardRoute: Routes = [ + { + path: 'admin', + component: DashboardAdminComponent, + canActivate: [UserRouteAccessService], + }, + { + path: 'user', + component: DashboardUserComponent, + canActivate: [UserRouteAccessService], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(dashboardRoute)], + exports: [RouterModule], +}) +export class DashboardRoutingModule {} diff --git a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/detail/e-pregunta-abierta-respuesta-detail.component.html b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/detail/e-pregunta-abierta-respuesta-detail.component.html index 03e44c2..690f2c3 100644 --- a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/detail/e-pregunta-abierta-respuesta-detail.component.html +++ b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/detail/e-pregunta-abierta-respuesta-detail.component.html @@ -22,9 +22,9 @@
E Pregunta Abierta
-
diff --git a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/e-pregunta-abierta-respuesta.model.ts b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/e-pregunta-abierta-respuesta.model.ts index 8439571..ca33127 100644 --- a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/e-pregunta-abierta-respuesta.model.ts +++ b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/e-pregunta-abierta-respuesta.model.ts @@ -3,11 +3,11 @@ import { IEPreguntaAbierta } from 'app/entities/e-pregunta-abierta/e-pregunta-ab export interface IEPreguntaAbiertaRespuesta { id?: number; respuesta?: string; - ePreguntaAbierta?: IEPreguntaAbierta | null; + epreguntaAbierta?: IEPreguntaAbierta | null; } export class EPreguntaAbiertaRespuesta implements IEPreguntaAbiertaRespuesta { - constructor(public id?: number, public respuesta?: string, public ePreguntaAbierta?: IEPreguntaAbierta | null) {} + constructor(public id?: number, public respuesta?: string, public epreguntaAbierta?: IEPreguntaAbierta | null) {} } export function getEPreguntaAbiertaRespuestaIdentifier(ePreguntaAbiertaRespuesta: IEPreguntaAbiertaRespuesta): number | undefined { diff --git a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/list/e-pregunta-abierta-respuesta.component.html b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/list/e-pregunta-abierta-respuesta.component.html index c26f340..a96871f 100644 --- a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/list/e-pregunta-abierta-respuesta.component.html +++ b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/list/e-pregunta-abierta-respuesta.component.html @@ -45,9 +45,9 @@ {{ ePreguntaAbiertaRespuesta.respuesta }} -
- {{ - ePreguntaAbiertaRespuesta.ePreguntaAbierta?.id + diff --git a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/route/e-pregunta-abierta-respuesta-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/route/e-pregunta-abierta-respuesta-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/e-pregunta-abierta-respuesta/route/e-pregunta-abierta-respuesta-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/e-pregunta-abierta-respuesta/route/e-pregunta-abierta-respuesta-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.spec.ts b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.tmpSpec.ts similarity index 98% rename from src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.spec.ts rename to src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.tmpSpec.ts index 5a62399..30e6916 100644 --- a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.spec.ts +++ b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.tmpSpec.ts @@ -43,7 +43,7 @@ describe('Component Tests', () => { it('Should call EPreguntaAbierta query and add missing value', () => { const ePreguntaAbiertaRespuesta: IEPreguntaAbiertaRespuesta = { id: 456 }; const ePreguntaAbierta: IEPreguntaAbierta = { id: 35011 }; - ePreguntaAbiertaRespuesta.ePreguntaAbierta = ePreguntaAbierta; + ePreguntaAbiertaRespuesta.epreguntaAbierta = ePreguntaAbierta; const ePreguntaAbiertaCollection: IEPreguntaAbierta[] = [{ id: 58318 }]; jest.spyOn(ePreguntaAbiertaService, 'query').mockReturnValue(of(new HttpResponse({ body: ePreguntaAbiertaCollection }))); @@ -65,7 +65,7 @@ describe('Component Tests', () => { it('Should update editForm', () => { const ePreguntaAbiertaRespuesta: IEPreguntaAbiertaRespuesta = { id: 456 }; const ePreguntaAbierta: IEPreguntaAbierta = { id: 40814 }; - ePreguntaAbiertaRespuesta.ePreguntaAbierta = ePreguntaAbierta; + ePreguntaAbiertaRespuesta.epreguntaAbierta = ePreguntaAbierta; activatedRoute.data = of({ ePreguntaAbiertaRespuesta }); comp.ngOnInit(); diff --git a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.ts b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.ts index 1563265..653cf1c 100644 --- a/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.ts +++ b/src/main/webapp/app/entities/e-pregunta-abierta-respuesta/update/e-pregunta-abierta-respuesta-update.component.ts @@ -81,12 +81,12 @@ export class EPreguntaAbiertaRespuestaUpdateComponent implements OnInit { this.editForm.patchValue({ id: ePreguntaAbiertaRespuesta.id, respuesta: ePreguntaAbiertaRespuesta.respuesta, - ePreguntaAbierta: ePreguntaAbiertaRespuesta.ePreguntaAbierta, + ePreguntaAbierta: ePreguntaAbiertaRespuesta.epreguntaAbierta, }); this.ePreguntaAbiertasSharedCollection = this.ePreguntaAbiertaService.addEPreguntaAbiertaToCollectionIfMissing( this.ePreguntaAbiertasSharedCollection, - ePreguntaAbiertaRespuesta.ePreguntaAbierta + ePreguntaAbiertaRespuesta.epreguntaAbierta ); } @@ -110,7 +110,7 @@ export class EPreguntaAbiertaRespuestaUpdateComponent implements OnInit { ...new EPreguntaAbiertaRespuesta(), id: this.editForm.get(['id'])!.value, respuesta: this.editForm.get(['respuesta'])!.value, - ePreguntaAbierta: this.editForm.get(['ePreguntaAbierta'])!.value, + epreguntaAbierta: this.editForm.get(['ePreguntaAbierta'])!.value, }; } } diff --git a/src/main/webapp/app/entities/e-pregunta-abierta/route/e-pregunta-abierta-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/e-pregunta-abierta/route/e-pregunta-abierta-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/e-pregunta-abierta/route/e-pregunta-abierta-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/e-pregunta-abierta/route/e-pregunta-abierta-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/route/e-pregunta-cerrada-opcion-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/route/e-pregunta-cerrada-opcion-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/e-pregunta-cerrada-opcion/route/e-pregunta-cerrada-opcion-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/e-pregunta-cerrada-opcion/route/e-pregunta-cerrada-opcion-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service.ts b/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service.ts index 0f02ff1..761cbbe 100644 --- a/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service.ts +++ b/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service.ts @@ -16,6 +16,10 @@ export class EPreguntaCerradaOpcionService { constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} + updateCount(id: any) { + return this.http.post(`${this.resourceUrl}/count/${id}`, id, { observe: 'response' }); + } + create(ePreguntaCerradaOpcion: IEPreguntaCerradaOpcion, preguntaId?: number): Observable { return this.http.post(`${this.resourceUrl}/${preguntaId}`, ePreguntaCerradaOpcion, { observe: 'response' }); } diff --git a/src/main/webapp/app/entities/e-pregunta-cerrada/route/e-pregunta-cerrada-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/e-pregunta-cerrada/route/e-pregunta-cerrada-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/e-pregunta-cerrada/route/e-pregunta-cerrada-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/e-pregunta-cerrada/route/e-pregunta-cerrada-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/encuesta/complete/complete.component.html b/src/main/webapp/app/entities/encuesta/complete/complete.component.html new file mode 100644 index 0000000..b9b3560 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/complete/complete.component.html @@ -0,0 +1,193 @@ +
+
+

+
+

Vista previa de {{ encuesta!.nombre }}

+    +
+ +

Creada el día {{ encuesta!.fechaCreacion | formatShortDatetime | lowercase }}

+
+ +
+

+ + + +
+ No se encontraron preguntas +
+ +
+
+
+
+
+ {{ i + 1 }}. {{ ePregunta.nombre }} +
+
+ Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.SINGLE' | translate | lowercase }} + {{ ePregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.MULTIPLE' | translate | lowercase }} + {{ ePregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta abierta {{ ePregunta.opcional ? '(opcional)' : '' }} +
+ + + + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ Calificación +
+
+ +
+
+
+
+ +
+ +
+
+
diff --git a/src/main/webapp/app/entities/encuesta/complete/complete.component.scss b/src/main/webapp/app/entities/encuesta/complete/complete.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/encuesta/complete/complete.component.tmpspec.ts b/src/main/webapp/app/entities/encuesta/complete/complete.component.tmpspec.ts new file mode 100644 index 0000000..7ac3c84 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/complete/complete.component.tmpspec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EncuestaCompleteComponent } from './complete.component'; + +describe('EncuestaCompleteComponent', () => { + let component: EncuestaCompleteComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [EncuestaCompleteComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(EncuestaCompleteComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/encuesta/complete/complete.component.ts b/src/main/webapp/app/entities/encuesta/complete/complete.component.ts new file mode 100644 index 0000000..1ee1f99 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/complete/complete.component.ts @@ -0,0 +1,269 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; +import { finalize } from 'rxjs/operators'; +import { IEncuesta } from '../encuesta.model'; +import { EncuestaService } from '../service/encuesta.service'; +import { ICategoria } from 'app/entities/categoria/categoria.model'; +import { IUsuarioExtra } from 'app/entities/usuario-extra/usuario-extra.model'; +import { UsuarioExtraService } from 'app/entities/usuario-extra/service/usuario-extra.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { IEPreguntaCerrada } from 'app/entities/e-pregunta-cerrada/e-pregunta-cerrada.model'; +import { EPreguntaCerradaService } from 'app/entities/e-pregunta-cerrada/service/e-pregunta-cerrada.service'; +import { EPreguntaAbiertaService } from '../../e-pregunta-abierta/service/e-pregunta-abierta.service'; +import { EPreguntaAbiertaRespuestaService } from '../../e-pregunta-abierta-respuesta/service/e-pregunta-abierta-respuesta.service'; +import { EPreguntaCerradaOpcionService } from '../../e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service'; +import { faStar, faQuestion } from '@fortawesome/free-solid-svg-icons'; +import { AccesoEncuesta } from 'app/entities/enumerations/acceso-encuesta.model'; +import { EncuestaPasswordDialogComponent } from '../encuesta-password-dialog/encuesta-password-dialog.component'; +import { PreguntaCerradaTipo } from 'app/entities/enumerations/pregunta-cerrada-tipo.model'; +import { EPreguntaAbiertaRespuesta } from 'app/entities/e-pregunta-abierta-respuesta/e-pregunta-abierta-respuesta.model'; +import { Observable } from 'rxjs/internal/Observable'; +import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; + +@Component({ + selector: 'jhi-complete', + templateUrl: './complete.component.html', +}) +export class EncuestaCompleteComponent implements OnInit { + categoriasSharedCollection: ICategoria[] = []; + usuarioExtrasSharedCollection: IUsuarioExtra[] = []; + faStar = faStar; + faQuestion = faQuestion; + encuesta?: IEncuesta; + isLoading = false; + ePreguntas?: any[]; + ePreguntasOpciones?: any[]; + isLocked?: boolean; + selectedOpenOptions: any; + selectedSingleOptions: any; + selectedMultiOptions: any; + error: boolean; + calificacion: number; + stars: number[] = [1, 2, 3, 4, 5]; + cantidadCalificaciones: number = 0; + avgCalificacion: number = 0; + sumCalificacion: number = 0; + + constructor( + protected activatedRoute: ActivatedRoute, + protected encuestaService: EncuestaService, + protected usuarioExtraService: UsuarioExtraService, + protected fb: FormBuilder, + protected modalService: NgbModal, + protected ePreguntaCerradaService: EPreguntaCerradaService, + protected ePreguntaCerradaOpcionService: EPreguntaCerradaOpcionService, + protected ePreguntaAbiertaService: EPreguntaAbiertaService, + protected ePreguntaAbiertaRespuestaService: EPreguntaAbiertaRespuestaService + ) { + this.selectedOpenOptions = {}; + this.selectedSingleOptions = {}; + this.selectedMultiOptions = []; + this.error = false; + this.calificacion = 0; + } + + ngOnInit(): void { + this.activatedRoute.data.subscribe(({ encuesta }) => { + if (encuesta) { + this.encuesta = encuesta; + this.avgCalificacion = parseInt(this.encuesta!.calificacion!.toString().split('.')[0]); + this.cantidadCalificaciones = parseInt(this.encuesta!.calificacion!.toString().split('.')[1]); + this.sumCalificacion = this.avgCalificacion * this.cantidadCalificaciones; + } + this.isLocked = this.verifyPassword(); + if (this.isLocked) { + this.previousState(); + } else { + this.loadAll(); + } + }); + for (let pregunta of this.ePreguntas!) { + if (pregunta.tipo && pregunta.tipo === PreguntaCerradaTipo.SINGLE) { + this.selectedSingleOptions[pregunta.id] = null; + } + } + } + + verifyPassword(): boolean { + if (this.encuesta!.acceso === AccesoEncuesta.PUBLIC) { + return false; + } else { + const modalRef = this.modalService.open(EncuestaPasswordDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.encuesta = this.encuesta; + modalRef.closed.subscribe(reason => { + return reason === 'success'; + }); + } + return true; + } + + ngAfterViewChecked(): void { + this.initListeners(); + } + + initListeners(): void { + const questions = document.getElementsByClassName('ds-survey--question-wrapper'); + for (let i = 0; i < questions.length; i++) { + if (questions[i].classList.contains('ds-survey--closed-option')) { + questions[i].addEventListener('click', e => { + if ((e.target as HTMLInputElement).checked) { + (e.target as HTMLElement).offsetParent!.classList.add('ds-survey--closed-option--active'); + (e.target as HTMLElement).id; + } else { + (e.target as HTMLElement).offsetParent!.classList.remove('ds-survey--closed-option--active'); + } + }); + } + } + } + + trackId(_index: number, item: IEPreguntaCerrada): number { + return item.id!; + } + + trackEPreguntaCerradaById(_index: number, item: IEPreguntaCerrada): number { + return item.id!; + } + + trackCategoriaById(_index: number, item: ICategoria): number { + return item.id!; + } + + trackUsuarioExtraById(_index: number, item: IUsuarioExtra): number { + return item.id!; + } + + loadAll(): void { + this.isLoading = true; + this.encuestaService + .findQuestions(this.encuesta?.id!) + .pipe( + finalize(() => + this.encuestaService.findQuestionsOptions(this.encuesta?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.ePreguntasOpciones = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ) + ) + ) + .subscribe( + (res: any) => { + this.isLoading = false; + this.ePreguntas = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); + if (this.ePreguntas!.length == 0) { + this.previousState(); + } + } + + previousState(): void { + window.history.back(); + } + + onCheck(preguntaOpcion: { epreguntaCerrada: any; id: any }): void { + this.selectedSingleOptions[preguntaOpcion.epreguntaCerrada!.id!] = preguntaOpcion.id; + } + + toggleOption(ePreguntaOpcionFinal: { id: any }): void { + if (this.selectedMultiOptions.includes(ePreguntaOpcionFinal.id)) { + for (let i = 0; i < this.selectedMultiOptions.length; i++) { + if (this.selectedMultiOptions[i] === ePreguntaOpcionFinal.id) { + this.selectedMultiOptions.splice(i, 1); + } + } + } else { + this.selectedMultiOptions.push(ePreguntaOpcionFinal.id); + } + } + + finish(): void { + this.updateEncuestaRating(); + this.getOpenQuestionAnswers(); + this.registerOpenQuestionAnswers(); + this.updateClosedOptionsCount(); + } + + updateEncuestaRating() { + if (this.calificacion !== 0) { + const newSumCalificacion = this.sumCalificacion + this.calificacion; + const newCantidadCalificacion = this.cantidadCalificaciones + 1; + const newAvgCalificacion = newSumCalificacion / newCantidadCalificacion; + const newRating = this.joinRatingValues(newAvgCalificacion, newCantidadCalificacion); + this.encuesta!.calificacion = Number(newRating); + this.encuestaService.updateSurvey(this.encuesta!); + } + } + + updateClosedOptionsCount() { + for (let key in this.selectedSingleOptions) { + this.ePreguntaCerradaOpcionService.updateCount(this.selectedSingleOptions[key]); + } + this.selectedMultiOptions.forEach((option: any) => { + this.ePreguntaCerradaOpcionService.updateCount(option); + }); + } + + registerOpenQuestionAnswers() { + for (let id in this.selectedOpenOptions) { + let pregunta = this.ePreguntas!.find(p => { + return p.id == id; + }); + let newRespuesta = new EPreguntaAbiertaRespuesta(0, this.selectedOpenOptions[id], pregunta); + this.ePreguntaAbiertaRespuestaService.create(newRespuesta); + } + } + + protected onSaveFinalize(): void { + // this.isSaving = false; + } + + processError(response: HttpErrorResponse): void { + if (response.status === 400) { + this.error = true; + } + } + + protected subscribeToSaveResponse(result: Observable>): void { + result.pipe(finalize(() => this.onSaveFinalize())).subscribe( + () => this.previousState(), + response => this.processError(response) + ); + } + + getOpenQuestionAnswers() { + this.ePreguntas!.forEach(pregunta => { + if (!pregunta.tipo) { + let textValue = (document.getElementById(pregunta.id) as HTMLInputElement).value; + this.selectedOpenOptions[pregunta.id] = textValue; + } + }); + } + + joinRatingValues(totalValue: number, ratingCount: number): Number { + const result = totalValue.toString() + '.' + ratingCount.toString(); + return parseFloat(result); + } + + updateRating(value: number) { + this.calificacion = value; + this.stars.forEach(starNumber => { + let starElement = document.getElementById(`star-${starNumber}`); + if (starNumber > this.calificacion!) { + starElement!.classList.add('entity-icon--star--off'); + starElement!.classList.remove('entity-icon--star'); + } else { + starElement!.classList.add('entity-icon--star'); + starElement!.classList.remove('entity-icon--star--off'); + } + }); + } +} diff --git a/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html b/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html index 81681aa..b70a0a8 100644 --- a/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html +++ b/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html @@ -34,7 +34,7 @@

Inicie creando preguntas y opciones para su encuesta.

-
+
{ if (encuesta) { this.encuesta = encuesta; + + // Fix calificacion + const _calificacion = encuesta.calificacion; + this.encuesta!.calificacion = Number(_calificacion?.toString().split('.')[0]); + this.loadAll(); } else { this.previousState(); diff --git a/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.html b/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.html index fdebcc2..cd4c8c5 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.html +++ b/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.html @@ -1 +1,39 @@ -

encuesta-compartir-dialog works!

+
+ + + + + +
diff --git a/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.scss b/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.scss index e69de29..a6675a7 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.scss +++ b/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.scss @@ -0,0 +1,7 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@500&display=swap'); + +@import '~ngx-sharebuttons/themes/default/default-theme'; + +.compartir { + width: 100% !important; +} diff --git a/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.spec.ts b/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.spec.ts deleted file mode 100644 index 7dd0e6b..0000000 --- a/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { EncuestaCompartirDialogComponent } from './encuesta-compartir-dialog.component'; - -describe('EncuestaCompartirDialogComponent', () => { - let component: EncuestaCompartirDialogComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [EncuestaCompartirDialogComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(EncuestaCompartirDialogComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.ts b/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.ts index bc1ad54..1c8b1d9 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.ts +++ b/src/main/webapp/app/entities/encuesta/encuesta-compartir-dialog/encuesta-compartir-dialog.component.ts @@ -1,4 +1,6 @@ import { Component, OnInit } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { IEncuesta } from '../encuesta.model'; @Component({ selector: 'jhi-encuesta-compartir-dialog', @@ -6,7 +8,21 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./encuesta-compartir-dialog.component.scss'], }) export class EncuestaCompartirDialogComponent implements OnInit { - constructor() {} + encuesta?: IEncuesta; + baseURL: string = ''; + imagen: string = ''; + mensaje: string = 'Encuesta en DatasSurvey'; + name = 'ngx sharebuttons'; - ngOnInit(): void {} + constructor(protected activeModal: NgbActiveModal) {} + + ngOnInit(): void { + this.baseURL = location.origin + '/encuesta/' + this.encuesta?.id + '/complete'; + } + + compartir(): void {} + + cancel(): void { + this.activeModal.dismiss(); + } } diff --git a/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.html b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.html index 9c7d1b1..261261b 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.html +++ b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.html @@ -1,9 +1,8 @@
- + diff --git a/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.ts b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.ts index eef9f2e..f9a188a 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.ts +++ b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.ts @@ -19,7 +19,6 @@ export class EncuestaFinalizarDialogComponent implements OnInit { ngOnInit(): void {} confirmFinalizar(encuesta: IEncuesta): void { - debugger; const now = dayjs(); encuesta.estado = EstadoEncuesta.FINISHED; diff --git a/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.html b/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.html new file mode 100644 index 0000000..22a1e3c --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.html @@ -0,0 +1,28 @@ + +
+

Contraseña incorrecta

+
+ + + +
diff --git a/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.scss b/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.scss new file mode 100644 index 0000000..dc8c1be --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.scss @@ -0,0 +1,4 @@ +input { + margin: 2%; + width: 100%; +} diff --git a/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.tmpspec.ts b/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.tmpspec.ts new file mode 100644 index 0000000..f2285b2 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.tmpspec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EncuestaPasswordDialogComponent } from './encuesta-password-dialog.component'; + +describe('EncuestaPasswordDialogComponent', () => { + let component: EncuestaPasswordDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [EncuestaPasswordDialogComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(EncuestaPasswordDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.ts b/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.ts new file mode 100644 index 0000000..f2514e1 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-password-dialog/encuesta-password-dialog.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, Validators } from '@angular/forms'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { IEncuesta } from '../encuesta.model'; + +@Component({ + selector: 'jhi-encuesta-password-dialog', + templateUrl: './encuesta-password-dialog.component.html', + styleUrls: ['./encuesta-password-dialog.component.scss'], +}) +export class EncuestaPasswordDialogComponent implements OnInit { + passwordForm = this.fb.group({ + password: [null, [Validators.required]], + }); + encuesta?: IEncuesta; + isWrong?: boolean; + passwordInput?: string; + + constructor(protected activeModal: NgbActiveModal, protected fb: FormBuilder) {} + + ngOnInit(): void {} + + submitPassword() { + const password = this.passwordForm.get(['password'])!.value; + + if (this.passwordForm.valid && password === this.encuesta!.contrasenna) { + this.activeModal.close('success'); + } else { + this.isWrong = true; + } + } + + cancel(): void { + this.activeModal.close('cancel'); + } +} diff --git a/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.html b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.html index 0baeb1f..f01705e 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.html +++ b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.html @@ -1,6 +1,6 @@
diff --git a/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.ts b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.ts index 1bd7127..a2d9082 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.ts +++ b/src/main/webapp/app/entities/encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component.ts @@ -107,7 +107,6 @@ export class EncuestaPublishDialogComponent implements OnInit { fechaFinalizacionIsInvalid(fechaFinalizar: dayjs.Dayjs, fechaPublicacion: dayjs.Dayjs): boolean { let numberDays: number; - debugger; numberDays = fechaFinalizar?.diff(fechaPublicacion, 'days'); diff --git a/src/main/webapp/app/entities/encuesta/encuesta.module.ts b/src/main/webapp/app/entities/encuesta/encuesta.module.ts index 6d65e36..d06bc12 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta.module.ts +++ b/src/main/webapp/app/entities/encuesta/encuesta.module.ts @@ -10,13 +10,14 @@ import { EncuestaPublishDialogComponent } from './encuesta-publish-dialog/encues import { EncuestaDeleteQuestionDialogComponent } from './encuesta-delete-question-dialog/encuesta-delete-question-dialog.component'; import { EncuestaDeleteOptionDialogComponent } from './encuesta-delete-option-dialog/encuesta-delete-option-dialog.component'; import { EncuestaCompartirDialogComponent } from './encuesta-compartir-dialog/encuesta-compartir-dialog.component'; - +import { ShareButtonsModule } from 'ngx-sharebuttons/buttons'; +import { EncuestaCompleteComponent } from './complete/complete.component'; +import { EncuestaPasswordDialogComponent } from './encuesta-password-dialog/encuesta-password-dialog.component'; import { EncuestaFinalizarDialogComponent } from './encuesta-finalizar-dialog/encuesta-finalizar-dialog.component'; - import { EncuestaDeleteColaboratorDialogComponent } from './encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component'; @NgModule({ - imports: [SharedModule, EncuestaRoutingModule, FontAwesomeModule], + imports: [SharedModule, EncuestaRoutingModule, FontAwesomeModule, ShareButtonsModule], declarations: [ EncuestaComponent, EncuestaDetailComponent, @@ -26,6 +27,8 @@ import { EncuestaDeleteColaboratorDialogComponent } from './encuesta-delete-cola EncuestaDeleteQuestionDialogComponent, EncuestaDeleteOptionDialogComponent, EncuestaCompartirDialogComponent, + EncuestaCompleteComponent, + EncuestaPasswordDialogComponent, EncuestaFinalizarDialogComponent, EncuestaDeleteColaboratorDialogComponent, ], diff --git a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html index 249c71d..4c1d9c9 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html @@ -40,10 +40,6 @@
-
- No surveys found -
-
@@ -83,8 +79,17 @@
+
+
+ +

No posee encuestas

+

Incie a explorar, colaborar y adquirir datos al crear encuestas mundialmente

+
+
+
+ -
+
    @@ -115,9 +120,11 @@ Publicar - +
  • + +
  • @@ -170,9 +177,11 @@ style="animation-delay: 3s" >
  • -
    - -
    +
    @@ -208,7 +217,7 @@
    - +
    diff --git a/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts b/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts index f22fa92..09e79e8 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts @@ -41,6 +41,7 @@ import { } from '@fortawesome/free-solid-svg-icons'; import * as $ from 'jquery'; +import { EncuestaCompartirDialogComponent } from '../encuesta-compartir-dialog/encuesta-compartir-dialog.component'; @Component({ selector: 'jhi-encuesta', @@ -176,6 +177,13 @@ export class EncuestaComponent implements OnInit, AfterViewInit { (res: HttpResponse) => { this.isLoading = false; const tmpEncuestas = res.body ?? []; + + // Fix calificacion + tmpEncuestas.forEach(encuesta => { + const _calificacion = encuesta.calificacion; + encuesta.calificacion = Number(_calificacion?.toString().split('.')[0]); + }); + if (this.isAdmin()) { this.encuestas = tmpEncuestas.filter(e => e.estado !== EstadoEncuesta.DELETED); @@ -417,7 +425,7 @@ export class EncuestaComponent implements OnInit, AfterViewInit { nombre: this.editForm.get(['nombre'])!.value, descripcion: this.editForm.get(['descripcion'])!.value, fechaCreacion: dayjs(now, DATE_TIME_FORMAT), - calificacion: 5, + calificacion: 5.1, acceso: this.editForm.get(['acceso'])!.value, contrasenna: undefined, estado: EstadoEncuesta.DRAFT, @@ -491,12 +499,18 @@ export class EncuestaComponent implements OnInit, AfterViewInit { document.getElementById('contextmenu-edit')!.style.display = 'block'; document.getElementById('contextmenu-publish')!.style.display = 'block'; document.getElementById('contextmenu-duplicate')!.style.display = 'block'; + document.getElementById('contextmenu-share')!.style.display = 'none'; } else { document.getElementById('contextmenu-edit')!.style.display = 'none'; document.getElementById('contextmenu-publish')!.style.display = 'none'; document.getElementById('contextmenu-duplicate')!.style.display = 'none'; + document.getElementById('contextmenu-share')!.style.display = 'block'; } - // document.getElementById('contextmenu-share')!.style.display = 'block'; + + if (this.selectedSurvey!.estado === 'FINISHED') { + document.getElementById('contextmenu-share')!.style.display = 'none'; + } + document.getElementById('contextmenu-create--separator')!.style.display = 'none'; } @@ -548,4 +562,16 @@ export class EncuestaComponent implements OnInit, AfterViewInit { categoria: this.selectedSurvey!.categoria, }); } + + compartir(): void { + const modalRef = this.modalService.open(EncuestaCompartirDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.encuesta = this.selectedSurvey; + // unsubscribe not needed because closed completes on modal close + modalRef.closed.subscribe(reason => { + if (reason === 'published') { + this.successPublished = true; + this.loadAll(); + } + }); + } } diff --git a/src/main/webapp/app/entities/encuesta/route/encuesta-routing.module.ts b/src/main/webapp/app/entities/encuesta/route/encuesta-routing.module.ts index df9a23d..f2147e8 100644 --- a/src/main/webapp/app/entities/encuesta/route/encuesta-routing.module.ts +++ b/src/main/webapp/app/entities/encuesta/route/encuesta-routing.module.ts @@ -6,6 +6,7 @@ import { EncuestaComponent } from '../list/encuesta.component'; import { EncuestaDetailComponent } from '../detail/encuesta-detail.component'; import { EncuestaUpdateComponent } from '../update/encuesta-update.component'; import { EncuestaRoutingResolveService } from './encuesta-routing-resolve.service'; +import { EncuestaCompleteComponent } from '../complete/complete.component'; const encuestaRoute: Routes = [ { @@ -37,6 +38,14 @@ const encuestaRoute: Routes = [ }, canActivate: [UserRouteAccessService], }, + { + path: ':id/complete', + component: EncuestaCompleteComponent, + resolve: { + encuesta: EncuestaRoutingResolveService, + }, + canActivate: [UserRouteAccessService], + }, ]; @NgModule({ diff --git a/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts index 8e241c3..3d854c5 100644 --- a/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts +++ b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts @@ -26,6 +26,13 @@ export class EncuestaService { .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); } + createFromTemplate(encuesta: IEncuesta, plantillaId: Number): Observable { + const copy = this.convertDateFromClient(encuesta); + return this.http + .post(`${this.resourceUrl}/${plantillaId}`, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + //update para publicar update(encuesta: IEncuesta): Observable { const copy = this.convertDateFromClient(encuesta); diff --git a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html index 5f0a4d0..b857f99 100644 --- a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html +++ b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html @@ -42,9 +42,6 @@

    Creada el día {{ encuesta!.fechaCreacion | formatShortDatetime | lowercase }}

    -
    + +
    diff --git a/src/main/webapp/app/entities/entity-routing.module.ts b/src/main/webapp/app/entities/entity-routing.module.ts index f01eb05..47e08ea 100644 --- a/src/main/webapp/app/entities/entity-routing.module.ts +++ b/src/main/webapp/app/entities/entity-routing.module.ts @@ -77,6 +77,21 @@ import { RouterModule } from '@angular/router'; loadChildren: () => import('./p-pregunta-cerrada-opcion/p-pregunta-cerrada-opcion.module').then(m => m.PPreguntaCerradaOpcionModule), }, + { + path: 'mis-plantillas', + data: { pageTitle: 'dataSurveyApp.usuarioExtra.plantillas.title' }, + loadChildren: () => import('./usuario-plantillas/usuario-plantillas.module').then(m => m.UsuarioPlantillasModule), + }, + { + path: 'dashboard', + data: { pageTitle: 'dataSurveyApp.Dashboard.title' }, + loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule), + }, + { + path: 'dashboard', + data: { pageTitle: 'dataSurveyApp.Dashboard.title' }, + loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule), + }, /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ ]), ], diff --git a/src/main/webapp/app/entities/factura/route/factura-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/factura/route/factura-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/factura/route/factura-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/factura/route/factura-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/p-pregunta-abierta/route/p-pregunta-abierta-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/p-pregunta-abierta/route/p-pregunta-abierta-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/p-pregunta-abierta/route/p-pregunta-abierta-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/p-pregunta-abierta/route/p-pregunta-abierta-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/p-pregunta-cerrada-opcion/route/p-pregunta-cerrada-opcion-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/p-pregunta-cerrada-opcion/route/p-pregunta-cerrada-opcion-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/p-pregunta-cerrada-opcion/route/p-pregunta-cerrada-opcion-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/p-pregunta-cerrada-opcion/route/p-pregunta-cerrada-opcion-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/p-pregunta-cerrada/route/p-pregunta-cerrada-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/p-pregunta-cerrada/route/p-pregunta-cerrada-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/p-pregunta-cerrada/route/p-pregunta-cerrada-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/p-pregunta-cerrada/route/p-pregunta-cerrada-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/parametro-aplicacion/route/parametro-aplicacion-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/parametro-aplicacion/route/parametro-aplicacion-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/parametro-aplicacion/route/parametro-aplicacion-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/parametro-aplicacion/route/parametro-aplicacion-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.html b/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.html index e43778d..4042602 100644 --- a/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.html +++ b/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.html @@ -1,24 +1,23 @@ -
    - - + diff --git a/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.spec.ts deleted file mode 100644 index 0e2d24c..0000000 --- a/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ -jest.mock('@ng-bootstrap/ng-bootstrap'); - -import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { of } from 'rxjs'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -import { PlantillaService } from '../service/plantilla.service'; - -import { PlantillaDeleteDialogComponent } from './plantilla-delete-dialog.component'; - -describe('Component Tests', () => { - describe('Plantilla Management Delete Component', () => { - let comp: PlantillaDeleteDialogComponent; - let fixture: ComponentFixture; - let service: PlantillaService; - let mockActiveModal: NgbActiveModal; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - declarations: [PlantillaDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(PlantillaDeleteDialogComponent, '') - .compileComponents(); - fixture = TestBed.createComponent(PlantillaDeleteDialogComponent); - comp = fixture.componentInstance; - service = TestBed.inject(PlantillaService); - mockActiveModal = TestBed.inject(NgbActiveModal); - }); - - describe('confirmDelete', () => { - it('Should call delete service on confirmDelete', inject( - [], - fakeAsync(() => { - // GIVEN - jest.spyOn(service, 'delete').mockReturnValue(of(new HttpResponse({}))); - - // WHEN - comp.confirmDelete(123); - tick(); - - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); - }) - )); - - it('Should not call delete service on clear', () => { - // GIVEN - jest.spyOn(service, 'delete'); - - // WHEN - comp.cancel(); - - // THEN - expect(service.delete).not.toHaveBeenCalled(); - expect(mockActiveModal.close).not.toHaveBeenCalled(); - expect(mockActiveModal.dismiss).toHaveBeenCalled(); - }); - }); - }); -}); diff --git a/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.ts b/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.ts index 972e8c8..55326af 100644 --- a/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.ts +++ b/src/main/webapp/app/entities/plantilla/delete/plantilla-delete-dialog.component.ts @@ -3,6 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { IPlantilla } from '../plantilla.model'; import { PlantillaService } from '../service/plantilla.service'; +import { EstadoPlantilla } from '../../enumerations/estado-plantilla.model'; @Component({ templateUrl: './plantilla-delete-dialog.component.html', @@ -16,8 +17,9 @@ export class PlantillaDeleteDialogComponent { this.activeModal.dismiss(); } - confirmDelete(id: number): void { - this.plantillaService.delete(id).subscribe(() => { + confirmDelete(pPlantilla: IPlantilla): void { + pPlantilla.estado = EstadoPlantilla.DELETED; + this.plantillaService.update(pPlantilla).subscribe(() => { this.activeModal.close('deleted'); }); } diff --git a/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.html b/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.html index 8308da3..ca0e3e1 100644 --- a/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.html +++ b/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.html @@ -24,7 +24,7 @@

    Inicie creando preguntas y opciones para su plantilla.

    -
    +
    - +
    diff --git a/src/main/webapp/app/entities/plantilla/list/plantilla.component.html b/src/main/webapp/app/entities/plantilla/list/plantilla.component.html index 565edfe..4c2782e 100644 --- a/src/main/webapp/app/entities/plantilla/list/plantilla.component.html +++ b/src/main/webapp/app/entities/plantilla/list/plantilla.component.html @@ -25,7 +25,36 @@
    + +
    +
    +
    + +
    +
    +
    + +
    + +
    + @@ -35,11 +64,10 @@
    -
    Nombre
    +
    - @@ -49,9 +77,11 @@ - + - @@ -61,7 +91,7 @@
    NombreDescripcion Fecha Publicacion Tienda Estado
    {{ plantilla.nombre }}{{ plantilla.descripcion }} {{ plantilla.fechaPublicacionTienda | formatShortDatetime | titlecase }} No establecida{{ plantilla.categoria?.nombre }}
    - - + --> - + + + +
    + diff --git a/src/main/webapp/app/entities/plantilla/plantilla-change-status-dialog/plantilla-change-status-dialog.component.scss b/src/main/webapp/app/entities/plantilla/plantilla-change-status-dialog/plantilla-change-status-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/plantilla/plantilla-change-status-dialog/plantilla-change-status-dialog.component.temSpec.ts b/src/main/webapp/app/entities/plantilla/plantilla-change-status-dialog/plantilla-change-status-dialog.component.temSpec.ts new file mode 100644 index 0000000..0cd0af9 --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-change-status-dialog/plantilla-change-status-dialog.component.temSpec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PlantillaChangeStatusDialogComponent } from './plantilla-change-status-dialog.component'; + +describe('PlantillaChangeStatusDialogComponent', () => { + let component: PlantillaChangeStatusDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [PlantillaChangeStatusDialogComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PlantillaChangeStatusDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/plantilla/plantilla-change-status-dialog/plantilla-change-status-dialog.component.ts b/src/main/webapp/app/entities/plantilla/plantilla-change-status-dialog/plantilla-change-status-dialog.component.ts new file mode 100644 index 0000000..ff5f9f0 --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-change-status-dialog/plantilla-change-status-dialog.component.ts @@ -0,0 +1,36 @@ +import { Component } from '@angular/core'; +import { PlantillaService } from '../service/plantilla.service'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { EstadoPlantilla } from '../../enumerations/estado-plantilla.model'; +import { IPlantilla } from '../plantilla.model'; + +import { faExchangeAlt } from '@fortawesome/free-solid-svg-icons'; + +@Component({ + selector: 'jhi-plantilla-change-status-dialog', + templateUrl: './plantilla-change-status-dialog.component.html', + styleUrls: ['./plantilla-change-status-dialog.component.scss'], +}) +export class PlantillaChangeStatusDialogComponent { + plantilla?: IPlantilla; + + faExchangeAlt = faExchangeAlt; + constructor(protected plantillaService: PlantillaService, protected activeModal: NgbActiveModal) {} + + cancel(): void { + this.activeModal.dismiss(); + } + + confirmChangeStatus(pPlantilla: IPlantilla) { + if (this.plantilla) { + if (pPlantilla.estado === EstadoPlantilla.DISABLED) { + this.plantilla.estado = EstadoPlantilla.DRAFT; + } else { + this.plantilla.estado = EstadoPlantilla.DISABLED; + } + this.plantillaService.update(this.plantilla).subscribe(() => { + this.activeModal.close('updated'); + }); + } + } +} diff --git a/src/main/webapp/app/entities/plantilla/plantilla.module.ts b/src/main/webapp/app/entities/plantilla/plantilla.module.ts index 602dba7..5ead5a0 100644 --- a/src/main/webapp/app/entities/plantilla/plantilla.module.ts +++ b/src/main/webapp/app/entities/plantilla/plantilla.module.ts @@ -10,6 +10,7 @@ import { PlantillaDeleteQuestionDialogComponent } from './plantilla-delete-quest import { PlantillaDeleteOptionDialogComponent } from './plantilla-delete-option-dialog/plantilla-delete-option-dialog.component'; import { PlantillaPublishStoreDialogComponent } from './plantilla-publish-store-dialog/plantilla-publish-store-dialog.component'; import { PlantillaDeleteStoreDialogComponent } from './plantilla-delete-store-dialog/plantilla-delete-store-dialog.component'; +import { PlantillaChangeStatusDialogComponent } from './plantilla-change-status-dialog/plantilla-change-status-dialog.component'; @NgModule({ imports: [SharedModule, PlantillaRoutingModule, FontAwesomeModule], @@ -22,6 +23,7 @@ import { PlantillaDeleteStoreDialogComponent } from './plantilla-delete-store-di PlantillaDeleteOptionDialogComponent, PlantillaPublishStoreDialogComponent, PlantillaDeleteStoreDialogComponent, + PlantillaChangeStatusDialogComponent, ], entryComponents: [PlantillaDeleteDialogComponent], }) diff --git a/src/main/webapp/app/entities/plantilla/route/plantilla-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/plantilla/route/plantilla-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/plantilla/route/plantilla-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/plantilla/route/plantilla-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html index 8f4999e..19ce233 100644 --- a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html +++ b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html @@ -4,6 +4,7 @@

    {{ plantilla!.nombre }}

    +   

    Creada el día {{ plantilla!.fechaCreacion | formatShortDatetime | lowercase }}

    diff --git a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts index 3ccf1f5..5e11b79 100644 --- a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts +++ b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts @@ -186,7 +186,7 @@ export class PlantillaUpdateComponent implements OnInit, AfterViewChecked { openPreview() { const surveyId = this.plantilla?.id; - this.router.navigate(['/plantilla', surveyId, 'preview']); + this.router.navigate(['/plantilla', surveyId, 'view']); } resetForm(event: any): void { diff --git a/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-plantilla-tienda.module.ts b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-plantilla-tienda.module.ts new file mode 100644 index 0000000..4a6c185 --- /dev/null +++ b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-plantilla-tienda.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { SharedModule } from 'app/shared/shared.module'; +import { TIENDA_PLANTILLA_ROUTE } from './listar-tienda-plantilla.route'; +import { ListarTiendaPlantillaComponent } from './listar-tienda-plantilla.component'; + +@NgModule({ + imports: [SharedModule, RouterModule.forChild([TIENDA_PLANTILLA_ROUTE])], + declarations: [ListarTiendaPlantillaComponent], +}) +export class ListarPlantillaTiendaModule {} diff --git a/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.html b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.html new file mode 100644 index 0000000..3dd2031 --- /dev/null +++ b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.html @@ -0,0 +1,124 @@ +
    +
    +
    +
    +

    ¡Compre y utilice las plantillas!

    + +

    Puede comprar sus plantillas mediante PayPal

    +
    +
    + +
    +
    + + +
    +
    +
    + +
    + + + +
    + +
    + +
    +

    Plantillas

    + +
    + +
    + + + +
    +
    +
    + +
    +
    {{ plantilla.nombre }}
    +
    + Precio: {{ plantilla.precio | currency }} + Precio: GRATIS +
    + +
    + {{ plantilla.categoria.nombre | lowercase }} +
    +
    + {{ plantilla.descripcion | lowercase }} +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    diff --git a/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.scss b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.scss new file mode 100644 index 0000000..c594f74 --- /dev/null +++ b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.scss @@ -0,0 +1,449 @@ +/* ========================================================================== +Main page styles +========================================================================== */ + +.hipster { + display: inline-block; + width: 347px; + height: 497px; + + background-size: contain; +} + +.bg-img-cover { + background-position: center; + background-size: cover; + background-repeat: no-repeat; + background-color: #192e4d; +} +/*SPLIT CSS*/ +.split { + height: 90%; + width: 100%; + position: fixed; + z-index: 1; + top: 0; + overflow-x: hidden; + padding-top: 20px; +} +.left { + left: 0; + background-color: #192e4d; +} + +.right { + right: 0; +} + +.centered { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + text-align: center; +} + +.bg-img-style { + padding-top: 2px; + margin-left: 50%; + margin-top: 0; + width: 400px; + height: 300px; +} + +.overlay { + position: relative; +} +.overlay:before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #000; + opacity: 0.1; +} + +.overlay-10:before { + opacity: 0.1; +} + +.overlay-20:before { + opacity: 0.2; +} + +.overlay-30:before { + opacity: 0.3; +} + +.overlay-40:before { + opacity: 0.4; +} + +.overlay-50:before { + opacity: 0.5; +} + +.overlay-60:before { + opacity: 0.6; +} + +.overlay-70:before { + opacity: 0.7; +} + +.overlay-80:before { + opacity: 0.8; +} + +.overlay-90:before { + opacity: 0.9; +} + +.fixed-top, +.page-header-ui.navbar-fixed .navbar { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.text-white-75, +.page-header-ui-dark .page-header-ui-text a { + color: rgba(255, 255, 255, 0.75) !important; +} +.page-header-ui { + position: relative; + padding-top: 4%; + padding-bottom: 4%; +} +.page-header-ui .page-header-ui-content .page-header-ui-title { + font-size: 2.5rem; + color: #000000; +} +.page-header-ui .page-header-ui-content .page-header-ui-text { + font-size: 1.15rem; +} +.page-header-ui .page-header-ui-content .page-header-ui-text.small { + font-size: 0.9rem; +} + +.page-header-ui-dark { + color: #fffcf5 !important; + background-color: #212832; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +.svg-border-rounded svg { + position: absolute; + bottom: 0; + left: 0; + height: 1rem; + width: 100%; +} +@media (min-width: 576px) { + .svg-border-rounded svg { + height: 1.5rem; + } +} +@media (min-width: 768px) { + .svg-border-rounded svg { + height: 2rem; + } +} +@media (min-width: 992px) { + .svg-border-rounded svg { + height: 2.5rem; + } +} +@media (min-width: 1200px) { + .svg-border-rounded svg { + height: 3rem; + } +} + +/** + Cards +**/ +.lift { + box-shadow: 0 0.15rem 1.75rem 0 rgba(33, 40, 50, 0.15); + transition: transform 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +.lift:hover { + transform: translateY(-0.3333333333rem); + box-shadow: 0 0.5rem 2rem 0 rgba(33, 40, 50, 0.25); +} +.lift:active { + transform: none; + box-shadow: 0 0.15rem 1.75rem 0 rgba(33, 40, 50, 0.15); +} + +.lift-sm { + box-shadow: 0 0.125rem 0.25rem 0 rgba(33, 40, 50, 0.2); +} +.lift-sm:hover { + transform: translateY(-0.1666666667rem); + box-shadow: 0 0.25rem 1rem 0 rgba(33, 40, 50, 0.25); +} +.lift-sm:active { + transform: none; + box-shadow: 0 0.125rem 0.25rem 0 rgba(33, 40, 50, 0.2); +} + +/*.card.lift { + text-decoration: none; + color: inherit; +} + +.card-flag { + position: absolute; + font-size: 0.7rem; + padding: 0.3rem 0.5rem; + line-height: 1; +} + +.card-flag-dark { + background-color: rgba(33, 40, 50, 0.7); + color: #fff; +} + +.card-flag-light { + background-color: rgba(255, 255, 255, 0.7); + color: #69707a; +} + +.card-flag-lg { + font-size: 0.9rem; + padding: 0.5rem 0.65rem; +} + +.card-flag-top-right { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + top: 0.5rem; + right: 0; +} + +.card-flag-top-left { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + top: 0.5rem; + left: 0; +}*/ + +.border-cyan { + border-color: #00cfd5 !important; +} + +.py-10 { + padding-top: 6rem !important; + padding-bottom: 6rem !important; +} + +/* wait autoprefixer update to allow simple generation of high pixel density media query */ +@media only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and (-moz-min-device-pixel-ratio: 2), + only screen and (-o-min-device-pixel-ratio: 2/1), + only screen and (min-resolution: 192dpi), + only screen and (min-resolution: 2dppx) { + .hipster { + background-size: contain; + } +} + +.icon-stack { + display: inline-flex; + justify-content: center; + align-items: center; + border-radius: 100%; + height: 2.5rem; + width: 2.5rem; + font-size: 1rem; + background-color: #f2f6fc; + flex-shrink: 0; +} +.icon-stack svg { + height: 1rem; + width: 1rem; +} + +.icon-stack-sm { + height: 2rem; + width: 2rem; +} + +.icon-stack-lg { + height: 4rem; + width: 4rem; + font-size: 1.5rem; +} +.icon-stack-lg svg { + height: 1.5rem; + width: 1.5rem; +} + +.icon-stack-xl { + height: 5rem; + width: 5rem; + font-size: 1.75rem; +} +.icon-stack-xl svg { + height: 1.75rem; + width: 1.75rem; +} + +.container-encuestas { + max-height: 1536px; + overflow-y: auto; +} +.bg-gradient-primary-to-secondary { + background-color: #1c44b2 !important; + background-image: linear-gradient(135deg, #1c44b2 0%, #00b88d 100%) !important; +} + +/*.card .entity-icon--star { + color: #ffcc47; + margin-right: 0.2rem; +} + +.card .card-title { + font-size: 2em; +} + +.card .tag { + font-size: 0.8rem; + color: #f8f8f8; + margin-top: 0.5rem; + padding: 0.2rem 1.5rem; + background-color: #2962ff94; + border-radius: 15px; +} + +.card .subtitle { + color: rgba(0, 0, 0, 0.54); + font-size: 0.9rem; +} + +.card .btn-card { + padding: 11px 10px !important; +}*/ + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: 1rem 1.25rem; + font-size: 1rem; + color: #69707a; + text-align: left; + background-color: #fff; + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, + border-radius 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; + } +} +.accordion-button:not(.collapsed) { + color: #0057da; + background-color: #e6effe; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125); +} +.accordion-button:not(.collapsed)::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230057da'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + transform: rotate(-180deg); +} +.accordion-button::after { + flex-shrink: 0; + width: 1.25rem; + height: 1.25rem; + margin-left: auto; + content: ''; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2369707a'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-size: 1.25rem; + transition: transform 0.2s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; + } +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + z-index: 3; + border-color: transparent; + outline: 0; + box-shadow: 0 0 0 0.25rem #00b88d3a; +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.accordion-item:first-of-type { + border-top-left-radius: 0.35rem; + border-top-right-radius: 0.35rem; +} +.accordion-item:first-of-type .accordion-button { + border-top-left-radius: calc(0.35rem - 1px); + border-top-right-radius: calc(0.35rem - 1px); +} +.accordion-item:not(:first-of-type) { + border-top: 0; +} +.accordion-item:last-of-type { + border-bottom-right-radius: 0.35rem; + border-bottom-left-radius: 0.35rem; +} +.accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: calc(0.35rem - 1px); + border-bottom-left-radius: calc(0.35rem - 1px); +} +.accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: 0.35rem; + border-bottom-left-radius: 0.35rem; +} + +.accordion-body { + padding: 1rem 1.25rem; +} + +.accordion-flush .accordion-collapse { + border-width: 0; +} +.accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} +.accordion-flush .accordion-item:first-child { + border-top: 0; +} +.accordion-flush .accordion-item:last-child { + border-bottom: 0; +} +.accordion-flush .accordion-item .accordion-button { + border-radius: 0; +} + +.card-header { + padding: 0; +} + +.card-header .collapsed { + background-color: #e6effe; +} diff --git a/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.tmpSpec.ts b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.tmpSpec.ts new file mode 100644 index 0000000..2a604cb --- /dev/null +++ b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.tmpSpec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ListarTiendaPlantillaComponent } from './listar-tienda-plantilla.component'; + +describe('ListarTiendaPlantillaComponent', () => { + let component: ListarTiendaPlantillaComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ListarTiendaPlantillaComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ListarTiendaPlantillaComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.ts b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.ts new file mode 100644 index 0000000..da767ba --- /dev/null +++ b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.component.ts @@ -0,0 +1,131 @@ +import { Component, OnInit } from '@angular/core'; +import { ICategoria } from '../../categoria/categoria.model'; +import { Account } from '../../../core/auth/account.model'; +import { UsuarioExtra } from '../../usuario-extra/usuario-extra.model'; +import { IEncuesta } from '../../encuesta/encuesta.model'; +import { Subject } from 'rxjs'; +import { EncuestaService } from '../../encuesta/service/encuesta.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { CategoriaService } from '../../categoria/service/categoria.service'; +import { UsuarioExtraService } from '../../usuario-extra/service/usuario-extra.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { FormBuilder } from '@angular/forms'; +import { AccountService } from '../../../core/auth/account.service'; +import { takeUntil } from 'rxjs/operators'; +import { HttpResponse } from '@angular/common/http'; +import { faPollH, faCalendarAlt, faStar, faListAlt, faFileAlt, faCreditCard } from '@fortawesome/free-solid-svg-icons'; +import { IPlantilla } from '../../plantilla/plantilla.model'; +import { PlantillaService } from '../../plantilla/service/plantilla.service'; +import { EncuestaPublishDialogComponent } from '../../encuesta/encuesta-publish-dialog/encuesta-publish-dialog.component'; +import { PaypalDialogComponent } from '../paypal-dialog/paypal-dialog.component'; + +@Component({ + selector: 'jhi-listar-tienda-plantilla', + templateUrl: './listar-tienda-plantilla.component.html', + styleUrls: ['./listar-tienda-plantilla.component.scss'], +}) +export class ListarTiendaPlantillaComponent implements OnInit { + public searchString: string; + public searchCategoria: string; + public searchPrecio: string; + categorias?: ICategoria[]; + account: Account | null = null; + public searchEncuestaPublica: string; + notAccount: boolean = true; + usuarioExtra: UsuarioExtra | null = null; + plantillas?: IPlantilla[]; + successPayment = false; + + isLoading = false; + private readonly destroy$ = new Subject(); + + faStar = faStar; + faCalendarAlt = faCalendarAlt; + faPollH = faPollH; + faListAlt = faListAlt; + faFileAlt = faFileAlt; + faCreditCard = faCreditCard; + + constructor( + protected plantillaService: PlantillaService, + protected modalService: NgbModal, + protected categoriaService: CategoriaService, + protected usuarioExtraService: UsuarioExtraService, + protected activatedRoute: ActivatedRoute, + protected fb: FormBuilder, + protected accountService: AccountService, + protected router: Router + ) { + this.searchEncuestaPublica = ''; + this.searchString = ''; + this.searchCategoria = ''; + this.searchPrecio = ''; + } + + ngOnInit(): void { + this.searchEncuestaPublica = ''; + this.accountService + .getAuthenticationState() + .pipe(takeUntil(this.destroy$)) + .subscribe(account => { + if (account !== null) { + this.account = account; + this.notAccount = false; + } else { + this.notAccount = true; + } + }); + this.loadAll(); + this.loadAllCategorias(); + } + + ngOnDestroy(): void { + this.destroy$.next(); + this.destroy$.complete(); + } + + loadAll(): void { + this.isLoading = true; + + this.plantillaService.query().subscribe( + (res: HttpResponse) => { + this.isLoading = false; + const plantillasBody = res.body ?? []; + this.plantillas = plantillasBody.filter(e => e.estado === 'ACTIVE'); + }, + () => { + this.isLoading = false; + } + ); + } + + loadAllCategorias(): void { + this.isLoading = true; + + this.categoriaService.query().subscribe( + (res: HttpResponse) => { + this.isLoading = false; + this.categorias = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); + } + + trackId(index: number, item: IEncuesta): number { + return item.id!; + } + + triggerPaypalDialog(plantilla: IPlantilla): void { + const modalRef = this.modalService.open(PaypalDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.plantilla = plantilla; + // unsubscribe not needed because closed completes on modal close + modalRef.closed.subscribe(reason => { + if (reason === 'published') { + this.successPayment = true; + this.loadAll(); + } + }); + } +} diff --git a/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.route.ts b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.route.ts new file mode 100644 index 0000000..41d7973 --- /dev/null +++ b/src/main/webapp/app/entities/tienda/listar-tienda-plantilla/listar-tienda-plantilla.route.ts @@ -0,0 +1,10 @@ +import { Route, RouterModule } from '@angular/router'; +import { ListarTiendaPlantillaComponent } from './listar-tienda-plantilla.component'; + +export const TIENDA_PLANTILLA_ROUTE: Route = { + path: 'tienda-plantilla', + component: ListarTiendaPlantillaComponent, + data: { + pageTitle: 'tiendaPlantilla.title', + }, +}; diff --git a/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.html b/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.html new file mode 100644 index 0000000..f9f5c07 --- /dev/null +++ b/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.html @@ -0,0 +1,28 @@ +
    + + + + + +
    diff --git a/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.scss b/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.tmpSpec.ts b/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.tmpSpec.ts new file mode 100644 index 0000000..ad83b67 --- /dev/null +++ b/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.tmpSpec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PaypalDialogComponent } from './paypal-dialog.component'; + +describe('PaypalDialogComponent', () => { + let component: PaypalDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [PaypalDialogComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PaypalDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.ts b/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.ts new file mode 100644 index 0000000..d04dc09 --- /dev/null +++ b/src/main/webapp/app/entities/tienda/paypal-dialog/paypal-dialog.component.ts @@ -0,0 +1,158 @@ +import { Component, OnInit } from '@angular/core'; +import { IPayPalConfig, ICreateOrderRequest } from 'ngx-paypal'; +import { ParametroAplicacionService } from '../../parametro-aplicacion/service/parametro-aplicacion.service'; +import { EncuestaService } from '../../encuesta/service/encuesta.service'; +import { FormBuilder } from '@angular/forms'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { IPlantilla } from '../../plantilla/plantilla.model'; +import { faCreditCard, faCheck } from '@fortawesome/free-solid-svg-icons'; +import { Account } from '../../../core/auth/account.model'; +import { UsuarioExtra } from '../../usuario-extra/usuario-extra.model'; +import { UsuarioExtraService } from '../../usuario-extra/service/usuario-extra.service'; +import { IFactura } from '../../factura/factura.model'; +import { takeUntil } from 'rxjs/operators'; +import { AccountService } from '../../../core/auth/account.service'; +import { Subject } from 'rxjs'; +import * as dayjs from 'dayjs'; +import { FacturaService } from '../../factura/service/factura.service'; + +@Component({ + selector: 'jhi-paypal-dialog', + templateUrl: './paypal-dialog.component.html', + styleUrls: ['./paypal-dialog.component.scss'], +}) +export class PaypalDialogComponent implements OnInit { + public payPalConfig?: IPayPalConfig; + showSuccess = false; + plantilla?: IPlantilla; + account: Account | null = null; + usuarioExtra: UsuarioExtra | null = null; + factura?: IFactura; + notAccount: boolean = true; + private readonly destroy$ = new Subject(); + + faCreditCard = faCreditCard; + faCheck = faCheck; + + constructor( + protected facturaService: FacturaService, + protected usuarioExtraService: UsuarioExtraService, + protected activeModal: NgbActiveModal, + protected accountService: AccountService + ) {} + + ngOnInit(): void { + this.accountService + .getAuthenticationState() + .pipe(takeUntil(this.destroy$)) + .subscribe(account => { + if (account !== null) { + this.account = account; + this.notAccount = false; + } else { + this.notAccount = true; + } + }); + + this.getUser(); + + this.initConfig(); + } + + private initConfig(): void { + this.payPalConfig = { + currency: 'USD', + clientId: 'AUIxW_mYvd_h3mMqTtHdrSNMJ9yPmJkpiOCkNq454vDxXCN6hgadgPHIX_9PTeQn1Qv8m-ozcQUQkUjZ', + createOrderOnClient: data => + { + intent: 'CAPTURE', + purchase_units: [ + { + amount: { + currency_code: 'USD', + value: String(this.plantilla?.precio), + breakdown: { + item_total: { + currency_code: 'USD', + value: String(this.plantilla?.precio), + }, + }, + }, + items: [ + { + name: this.plantilla?.nombre, + quantity: '1', + unit_amount: { + currency_code: 'USD', + value: String(this.plantilla?.precio), + }, + }, + ], + }, + ], + }, + advanced: { + commit: 'true', + }, + style: { + label: 'paypal', + layout: 'vertical', + }, + onApprove: (data, actions) => { + console.log('onApprove - transaction was approved, but not authorized', data, actions); + actions.order.get().then((details: any) => { + //calls baxkend + console.log('onApprove - you can get full order details inside onApprove: ', details); + }); + }, + onClientAuthorization: data => { + console.log('onClientAuthorization - you should probably inform your server about completed transaction at this point', data); + this.updateUser(); + this.sendReceipt(); + }, + }; + } + + cancel(): void { + this.activeModal.dismiss(); + } + + getUser(): void { + // Get jhi_user and usuario_extra information + if (this.account !== null) { + this.usuarioExtraService.find(this.account.id).subscribe(usuarioExtra => { + this.usuarioExtra = usuarioExtra.body; + }); + } + } + + updateUser(): void { + this.usuarioExtra?.plantillas?.push(this.plantilla!); + + this.usuarioExtraService.update(this.usuarioExtra!).subscribe(() => { + this.showSuccess = true; + }); + } + sendReceipt(): void { + const now = dayjs(); + + this.factura = { + nombreUsuario: String(this.usuarioExtra?.id!), + nombrePlantilla: this.plantilla?.nombre!, + costo: this.plantilla?.precio, + fecha: now, + }; + + this.facturaService.create(this.factura).subscribe(() => { + this.showSuccess = true; + this.cancel(); + }); + + //send + } + + freePurchase(): void { + this.getUser(); + this.sendReceipt(); + } +} diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html index 3d47290..167dae8 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html +++ b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html @@ -33,12 +33,18 @@ -
    - No usuarioEncuestas found + +
    +
    + +

    No posee colaboraciones

    +

    Inicie colaborando con otros usuarios mundialmente al recibir una invitación

    +
    +
    - +
    diff --git a/src/main/webapp/app/entities/usuario-encuesta/route/usuario-encuesta-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/usuario-encuesta/route/usuario-encuesta-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/usuario-encuesta/route/usuario-encuesta-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/usuario-encuesta/route/usuario-encuesta-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html index e550920..9388306 100644 --- a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html +++ b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html @@ -15,7 +15,7 @@  Cancel - diff --git a/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html b/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html index 313c27a..aa52b7e 100644 --- a/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html +++ b/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html @@ -43,7 +43,7 @@
    -
    Rol
    +
    @@ -96,7 +96,7 @@ View --> - diff --git a/src/main/webapp/app/entities/usuario-extra/route/usuario-extra-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/usuario-extra/route/usuario-extra-routing-resolve.service.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/usuario-extra/route/usuario-extra-routing-resolve.service.spec.ts rename to src/main/webapp/app/entities/usuario-extra/route/usuario-extra-routing-resolve.service.tmpSpec.ts diff --git a/src/main/webapp/app/entities/usuario-extra/update/usuario-extra-update.component.spec.ts b/src/main/webapp/app/entities/usuario-extra/update/usuario-extra-update.component.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/usuario-extra/update/usuario-extra-update.component.spec.ts rename to src/main/webapp/app/entities/usuario-extra/update/usuario-extra-update.component.tmpSpec.ts diff --git a/src/main/webapp/app/entities/usuario-extra/update/usuario-extra-update.component.ts b/src/main/webapp/app/entities/usuario-extra/update/usuario-extra-update.component.ts index 4f61529..0ee3e4a 100644 --- a/src/main/webapp/app/entities/usuario-extra/update/usuario-extra-update.component.ts +++ b/src/main/webapp/app/entities/usuario-extra/update/usuario-extra-update.component.ts @@ -88,7 +88,7 @@ export class UsuarioExtraUpdateComponent { login, email, password, - langKey: this.translateService.currentLang, + langKey: this.translateService.currentLang!, name, firstName, profileIcon: this.profileIcon, diff --git a/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.html b/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.html new file mode 100644 index 0000000..06bcf5f --- /dev/null +++ b/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.html @@ -0,0 +1,86 @@ +
    +
    +

    +
    +

    Vista previa de {{ plantilla!.nombre }}

    +
    + +

    Creada el día {{ plantilla!.fechaCreacion | formatShortDatetime | lowercase }}

    +
    + +
    +

    + + + + + +
    +
    + +

    Plantilla vacía

    +

    Inicie creando preguntas y opciones para su plantilla.

    +
    + +
    +
    +
    + {{ i + 1 }}. {{ pPregunta.nombre }} +
    +
    + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.SINGLE' | translate | lowercase }} + {{ pPregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.MULTIPLE' | translate | lowercase }} + {{ pPregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta abierta {{ pPregunta.opcional ? '(opcional)' : '' }} +
    + + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    diff --git a/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.tmpSpec.ts b/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.tmpSpec.ts new file mode 100644 index 0000000..a630550 --- /dev/null +++ b/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.tmpSpec.ts @@ -0,0 +1,37 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { UsuarioPlantillasDetailComponent } from './usuario-plantillas-detail.component'; + +describe('Component Tests', () => { + describe('Plantilla Management Detail Component', () => { + let comp: UsuarioPlantillasDetailComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [UsuarioPlantillasDetailComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: { data: of({ plantilla: { id: 123 } }) }, + }, + ], + }) + .overrideTemplate(UsuarioPlantillasDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(UsuarioPlantillasDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should load plantilla on init', () => { + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.plantilla).toEqual(expect.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.ts b/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.ts new file mode 100644 index 0000000..f667944 --- /dev/null +++ b/src/main/webapp/app/entities/usuario-plantillas/detail/usuario-plantillas-detail.component.ts @@ -0,0 +1,155 @@ +import { Component, OnInit } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { FormBuilder, Validators } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; +import { EstadoPlantilla } from 'app/entities/enumerations/estado-plantilla.model'; + +import { Observable } from 'rxjs'; +import { finalize, map } from 'rxjs/operators'; + +import * as dayjs from 'dayjs'; +import { DATE_TIME_FORMAT } from 'app/config/input.constants'; + +import { ICategoria } from 'app/entities/categoria/categoria.model'; +import { CategoriaService } from 'app/entities/categoria/service/categoria.service'; +import { IUsuarioExtra, UsuarioExtra } from 'app/entities/usuario-extra/usuario-extra.model'; +import { UsuarioExtraService } from 'app/entities/usuario-extra/service/usuario-extra.service'; + +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { IPPreguntaCerrada } from 'app/entities/p-pregunta-cerrada/p-pregunta-cerrada.model'; +import { PPreguntaCerradaService } from 'app/entities/p-pregunta-cerrada/service/p-pregunta-cerrada.service'; +import { PPreguntaCerradaDeleteDialogComponent } from 'app/entities/p-pregunta-cerrada/delete/p-pregunta-cerrada-delete-dialog.component'; +import { IPPreguntaAbierta } from '../../p-pregunta-abierta/p-pregunta-abierta.model'; +import { PPreguntaCerrada } from '../../p-pregunta-cerrada/p-pregunta-cerrada.model'; +import { PPreguntaCerradaOpcion, IPPreguntaCerradaOpcion } from '../../p-pregunta-cerrada-opcion/p-pregunta-cerrada-opcion.model'; +import { PPreguntaAbiertaService } from '../../p-pregunta-abierta/service/p-pregunta-abierta.service'; +import { PPreguntaCerradaOpcionService } from '../../p-pregunta-cerrada-opcion/service/p-pregunta-cerrada-opcion.service'; +import { PreguntaCerradaTipo } from 'app/entities/enumerations/pregunta-cerrada-tipo.model'; + +import { faTimes, faPlus, faStar, faQuestion } from '@fortawesome/free-solid-svg-icons'; +import { Account } from '../../../core/auth/account.model'; +import { AccountService } from 'app/core/auth/account.service'; +import { IPlantilla } from 'app/entities/plantilla/plantilla.model'; +import { PlantillaService } from 'app/entities/plantilla/service/plantilla.service'; + +@Component({ + selector: 'jhi-usuario-plantillas-detail', + templateUrl: './usuario-plantillas-detail.component.html', +}) +export class UsuarioPlantillasDetailComponent implements OnInit { + categoriasSharedCollection: ICategoria[] = []; + usuarioExtrasSharedCollection: IUsuarioExtra[] = []; + faTimes = faTimes; + faPlus = faPlus; + faStar = faStar; + faQuestion = faQuestion; + plantilla: IPlantilla | null = null; + isLoading = false; + successPublished = false; + pPreguntas?: any[]; + pPreguntasOpciones?: any[]; + usuarioExtra: UsuarioExtra | null = null; + + constructor( + protected activatedRoute: ActivatedRoute, + protected plantillaService: PlantillaService, + protected categoriaService: CategoriaService, + protected usuarioExtraService: UsuarioExtraService, + protected fb: FormBuilder, + protected modalService: NgbModal, + protected pPreguntaCerradaService: PPreguntaCerradaService, + protected pPreguntaCerradaOpcionService: PPreguntaCerradaOpcionService, + protected pPreguntaAbiertaService: PPreguntaAbiertaService, + protected accountService: AccountService + ) {} + + ngOnInit(): void { + this.activatedRoute.data.subscribe(({ plantilla }) => { + if (plantilla) { + this.plantilla = plantilla; + this.loadAll(); + } else { + this.previousState(); + } + }); + + // Get jhi_user and usuario_extra information + this.accountService.getAuthenticationState().subscribe(account => { + if (account !== null) { + this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { + this.usuarioExtra = usuarioExtra.body; + }); + } + }); + } + + ngAfterViewChecked(): void { + this.initListeners(); + } + + initListeners(): void { + const checkboxes = document.getElementsByClassName('ds-survey--checkbox'); + for (let i = 0; i < checkboxes.length; i++) { + checkboxes[i].addEventListener('click', e => { + if ((e.target as HTMLInputElement).checked) { + (e.target as HTMLElement).offsetParent!.classList.add('ds-survey--closed-option--active'); + } else { + (e.target as HTMLElement).offsetParent!.classList.remove('ds-survey--closed-option--active'); + } + }); + } + } + + trackId(index: number, item: IPPreguntaCerrada): number { + return item.id!; + } + + trackPPreguntaCerradaById(index: number, item: IPPreguntaCerrada): number { + return item.id!; + } + + trackCategoriaById(index: number, item: ICategoria): number { + return item.id!; + } + + trackUsuarioExtraById(index: number, item: IUsuarioExtra): number { + return item.id!; + } + + getPlantilla(id: number) { + return this.plantillaService.findPlantilla(id); + } + + loadAll(): void { + this.isLoading = true; + + this.plantillaService + .findQuestions(this.plantilla?.id!) + .pipe( + finalize(() => + this.plantillaService.findQuestionsOptions(this.plantilla?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.pPreguntasOpciones = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ) + ) + ) + .subscribe( + (res: any) => { + this.isLoading = false; + this.pPreguntas = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); + } + + previousState(): void { + window.history.back(); + } +} diff --git a/src/main/webapp/app/entities/usuario-plantillas/list/usuario-plantillas.component.html b/src/main/webapp/app/entities/usuario-plantillas/list/usuario-plantillas.component.html new file mode 100644 index 0000000..e236f6e --- /dev/null +++ b/src/main/webapp/app/entities/usuario-plantillas/list/usuario-plantillas.component.html @@ -0,0 +1,73 @@ +
    +

    + Mis Plantillas +

    Cree encuestas a partir de las plantillas previamente compradas

    + +
    + +
    +

    + + + + +
    +
    +
    + +
    + +
    +
    + +

    No posee plantillas

    +

    Adquiera y compre diferentes plantillas disponibles en nuestra tienda

    +
    +
    +
    + +
    +
    Rol
    + + + + + + + + + + + + + + + + +
    NombreDescripcionCategoria
    {{ miPlantilla.nombre }}{{ miPlantilla.descripcion }}{{ miPlantilla.categoria?.nombre }} +
    + + + +
    +
    +
    +
    diff --git a/src/main/webapp/app/entities/usuario-plantillas/list/usuario-plantillas.component.scss b/src/main/webapp/app/entities/usuario-plantillas/list/usuario-plantillas.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/usuario-plantillas/list/usuario-plantillas.component.ts b/src/main/webapp/app/entities/usuario-plantillas/list/usuario-plantillas.component.ts new file mode 100644 index 0000000..bdffc05 --- /dev/null +++ b/src/main/webapp/app/entities/usuario-plantillas/list/usuario-plantillas.component.ts @@ -0,0 +1,100 @@ +import { Component, OnInit } from '@angular/core'; +import { UsuarioExtra } from '../../usuario-extra/usuario-extra.model'; +import { IPlantilla } from '../../plantilla/plantilla.model'; + +import { PlantillaService } from '../../plantilla/service/plantilla.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { CategoriaService } from '../../categoria/service/categoria.service'; +import { UsuarioExtraService } from '../../usuario-extra/service/usuario-extra.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { FormBuilder } from '@angular/forms'; +import { AccountService } from '../../../core/auth/account.service'; +import * as dayjs from 'dayjs'; +import { DATE_TIME_FORMAT } from 'app/config/input.constants'; +import { Account } from '../../../core/auth/account.model'; +import { Encuesta } from './../../encuesta/encuesta.model'; +import { EncuestaService } from 'app/entities/encuesta/service/encuesta.service'; +import { AccesoEncuesta } from 'app/entities/enumerations/acceso-encuesta.model'; +import { EstadoEncuesta } from 'app/entities/enumerations/estado-encuesta.model'; + +@Component({ + selector: 'jhi-usuario-plantillas', + templateUrl: './usuario-plantillas.component.html', + styleUrls: ['./usuario-plantillas.component.scss'], +}) +export class UsuarioPlantillasComponent implements OnInit { + misPlantillas?: IPlantilla[] | null | undefined; + isLoading = false; + usuarioExtra: UsuarioExtra | null = null; + account: Account | null = null; + searchString: string; + + constructor( + protected plantillaService: PlantillaService, + protected modalService: NgbModal, + protected categoriaService: CategoriaService, + protected usuarioExtraService: UsuarioExtraService, + protected activatedRoute: ActivatedRoute, + protected fb: FormBuilder, + protected accountService: AccountService, + protected encuestaService: EncuestaService, + protected router: Router + ) { + this.searchString = ''; + } + + ngOnInit(): void { + this.accountService.getAuthenticationState().subscribe(account => { + if (account !== null) { + this.account = account; + this.loadAll(); + } + }); + } + + loadAll() { + this.isLoading = true; + // Get jhi_user and usuario_extra information + if (this.account !== null) { + this.usuarioExtraService.find(this.account.id).subscribe(usuarioExtra => { + this.usuarioExtra = usuarioExtra.body; + this.misPlantillas = usuarioExtra.body?.plantillas; + this.isLoading = false; + if (this.usuarioExtra !== null) { + if (this.usuarioExtra.id === undefined) { + const today = dayjs().startOf('day'); + this.usuarioExtra.fechaNacimiento = today; + } + } + }); + } + } + + trackId(_index: number, item: IPlantilla): number { + return item.id!; + } + + crearEncuesta(plantillaId: any): void { + const now = dayjs(); + + const newSurvey = { + ...new Encuesta(), + id: undefined, + nombre: 'This is a survey', + descripcion: 'This is a survey', + fechaCreacion: dayjs(now, DATE_TIME_FORMAT), + calificacion: 5.1, + acceso: AccesoEncuesta.PUBLIC, + contrasenna: undefined, + estado: EstadoEncuesta.DRAFT, + categoria: undefined, + usuarioExtra: this.usuarioExtra, + }; + + console.log(plantillaId, newSurvey); + + this.encuestaService.createFromTemplate(newSurvey, plantillaId).subscribe(_res => { + this.router.navigate(['/encuesta']); + }); + } +} diff --git a/src/main/webapp/app/entities/usuario-plantillas/route/usuario-plantillas-routing-resolve.service.ts b/src/main/webapp/app/entities/usuario-plantillas/route/usuario-plantillas-routing-resolve.service.ts new file mode 100644 index 0000000..a57172a --- /dev/null +++ b/src/main/webapp/app/entities/usuario-plantillas/route/usuario-plantillas-routing-resolve.service.ts @@ -0,0 +1,29 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { mergeMap } from 'rxjs/operators'; +import { IPlantilla, Plantilla } from 'app/entities/plantilla/plantilla.model'; +import { PlantillaService } from 'app/entities/plantilla/service/plantilla.service'; + +@Injectable({ providedIn: 'root' }) +export class UsuarioPlantillasRoutingResolveService implements Resolve { + constructor(protected service: PlantillaService, protected router: Router) {} + + resolve(route: ActivatedRouteSnapshot): Observable | Observable { + const id = route.params['id']; + if (id) { + return this.service.find(id).pipe( + mergeMap((plantilla: HttpResponse) => { + if (plantilla.body) { + return of(plantilla.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) + ); + } + return of(new Plantilla()); + } +} diff --git a/src/main/webapp/app/entities/usuario-plantillas/route/usuario-plantillas.route.ts b/src/main/webapp/app/entities/usuario-plantillas/route/usuario-plantillas.route.ts new file mode 100644 index 0000000..e962e19 --- /dev/null +++ b/src/main/webapp/app/entities/usuario-plantillas/route/usuario-plantillas.route.ts @@ -0,0 +1,31 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; +import { UsuarioPlantillasDetailComponent } from '../detail/usuario-plantillas-detail.component'; + +import { UsuarioPlantillasComponent } from '../list/usuario-plantillas.component'; +import { UsuarioPlantillasRoutingResolveService } from './usuario-plantillas-routing-resolve.service'; + +const USUARIO_PLANTILLAS_ROUTE: Routes = [ + { + path: '', + component: UsuarioPlantillasComponent, + data: { + pageTitle: 'dataSurveyApp.usuarioExtra.plantillas.title', + }, + }, + { + path: ':id/preview', + component: UsuarioPlantillasDetailComponent, + resolve: { + plantilla: UsuarioPlantillasRoutingResolveService, + }, + canActivate: [UserRouteAccessService], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(USUARIO_PLANTILLAS_ROUTE)], + exports: [RouterModule], +}) +export class UsuarioPlantillasRoutingModule {} diff --git a/src/main/webapp/app/entities/usuario-plantillas/usuario-plantillas.model.ts b/src/main/webapp/app/entities/usuario-plantillas/usuario-plantillas.model.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/usuario-plantillas/usuario-plantillas.module.ts b/src/main/webapp/app/entities/usuario-plantillas/usuario-plantillas.module.ts new file mode 100644 index 0000000..22a2b5c --- /dev/null +++ b/src/main/webapp/app/entities/usuario-plantillas/usuario-plantillas.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { UsuarioPlantillasComponent } from './list/usuario-plantillas.component'; +import { RouterModule } from '@angular/router'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; +import { SharedModule } from '../../shared/shared.module'; +import { UsuarioPlantillasRoutingModule } from './route/usuario-plantillas.route'; +import { UsuarioPlantillasDetailComponent } from './detail/usuario-plantillas-detail.component'; + +@NgModule({ + imports: [CommonModule, UsuarioPlantillasRoutingModule, FontAwesomeModule, SharedModule], + declarations: [UsuarioPlantillasComponent, UsuarioPlantillasDetailComponent], +}) +export class UsuarioPlantillasModule {} diff --git a/src/main/webapp/app/home/home.component.html b/src/main/webapp/app/home/home.component.html index 6ce258b..3044200 100644 --- a/src/main/webapp/app/home/home.component.html +++ b/src/main/webapp/app/home/home.component.html @@ -3,7 +3,7 @@