diff --git a/virtual-desktop-v2/.editorconfig b/virtual-desktop-v2/.editorconfig deleted file mode 100644 index fc7fd1def..000000000 --- a/virtual-desktop-v2/.editorconfig +++ /dev/null @@ -1,29 +0,0 @@ -# This program and the accompanying materials are -# made available under the terms of the Eclipse Public License v2.0 which accompanies -# this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html -# -# SPDX-License-Identifier: EPL-2.0 -# -# Copyright Contributors to the Zowe Project. -# Editor configuration, see http://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.md] -max_line_length = off -trim_trailing_whitespace = false - - -# This program and the accompanying materials are -# made available under the terms of the Eclipse Public License v2.0 which accompanies -# this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html -# -# SPDX-License-Identifier: EPL-2.0 -# -# Copyright Contributors to the Zowe Project. diff --git a/virtual-desktop-v2/.gitignore b/virtual-desktop-v2/.gitignore deleted file mode 100644 index ff900190c..000000000 --- a/virtual-desktop-v2/.gitignore +++ /dev/null @@ -1,66 +0,0 @@ -# This program and the accompanying materials are -# made available under the terms of the Eclipse Public License v2.0 which accompanies -# this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html -# -# SPDX-License-Identifier: EPL-2.0 -# -# Copyright Contributors to the Zowe Project. -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/tmp -/web -/dll/dist -/out-tsc -*CVS/ -/lib -!lib/assets - -# dependencies -/node_modules -**/node_modules - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -# misc -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -testem.log -/typings - -# developer proxy file -proxy.conf.json - -# e2e -/e2e/*.js -/e2e/*.map - -# System Files -.DS_Store -Thumbs.db - - -# This program and the accompanying materials are -# made available under the terms of the Eclipse Public License v2.0 which accompanies -# this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html -# -# SPDX-License-Identifier: EPL-2.0 -# -# Copyright Contributors to the Zowe Project. diff --git a/virtual-desktop-v2/README.md b/virtual-desktop-v2/README.md deleted file mode 100644 index 69b4879b6..000000000 --- a/virtual-desktop-v2/README.md +++ /dev/null @@ -1,48 +0,0 @@ -This program and the accompanying materials are -made available under the terms of the Eclipse Public License v2.0 which accompanies -this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - -SPDX-License-Identifier: EPL-2.0 - -Copyright Contributors to the Zowe Project. - -## non-Angular package information -* Any package described as generic does not depend upon Angular -##### Redux -* @angular-redux/store - * Angular redux wrapper - * https://github.com/angular-redux/store -* redux-logger - * generic - * logger: development only - * https://github.com/evgenyrodionov/redux-logger -* redux - * generic - * https://github.com/reactjs/redux -##### Other -* @angular/animations - * google package - * required by PrimeNG -* angular-split - * Angular window splitting - * https://github.com/bertrandg/angular-split -* bootstrap - * generic - * twitter bootstrap - * https://v4-alpha.getbootstrap.com/ -* font-awesome - * generic - * https://github.com/FortAwesome/Font-Awesome -* primeng - * Angular charting/trees, etc. - * https://www.primefaces.org/primeng/#/ - -## package installation - npm i --save @angular-redux/store @angular/animations angular-split bootstrap@next font-awesome primeng@latest redux redux-logger - npm i --save-dev @types/redux-logger - -## package.json script changes - "scripts": { - "start": "ng serve --proxy-config proxy.conf.json", - "build": "ng build -aot", - } diff --git a/virtual-desktop-v2/nodeServer/package-lock.json b/virtual-desktop-v2/nodeServer/package-lock.json deleted file mode 100644 index 06358b823..000000000 --- a/virtual-desktop-v2/nodeServer/package-lock.json +++ /dev/null @@ -1,174 +0,0 @@ -{ - "name": "com.rs.mvd.ng2desktop.server", - "version": "0.9.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "com.rs.mvd.ng2desktop.server", - "version": "0.9.0", - "devDependencies": { - "@types/express": "~4.16.0", - "@types/node": "~8.10.23", - "typescript": "~4.2.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", - "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", - "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.16.9", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.9.tgz", - "integrity": "sha512-GqpaVWR0DM8FnRUJYKlWgyARoBUAVfRIeVDZQKOttLFp5SmhhF9YFIYeTPwMd/AXfxlP7xVO2dj1fGu0Q+krKQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "8.10.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.54.tgz", - "integrity": "sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true - }, - "node_modules/@types/serve-static": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", - "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - } - }, - "dependencies": { - "@types/body-parser": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", - "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", - "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.9", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.9.tgz", - "integrity": "sha512-GqpaVWR0DM8FnRUJYKlWgyARoBUAVfRIeVDZQKOttLFp5SmhhF9YFIYeTPwMd/AXfxlP7xVO2dj1fGu0Q+krKQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==", - "dev": true - }, - "@types/node": { - "version": "8.10.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.54.tgz", - "integrity": "sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true - }, - "@types/serve-static": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", - "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true - } - } -} diff --git a/virtual-desktop-v2/nodeServer/package.json b/virtual-desktop-v2/nodeServer/package.json deleted file mode 100644 index 9509887d0..000000000 --- a/virtual-desktop-v2/nodeServer/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "com.rs.mvd.ng2desktop.server", - "version": "0.9.0", - "description": "Manage Client-Side preferences", - "scripts": { - "build": "tsc", - "start": "tsc --watch" - }, - "dependencies": {}, - "devDependencies": { - "@types/express": "~4.16.0", - "@types/node": "~8.10.23", - "typescript": "~4.2.0" - } -} diff --git a/virtual-desktop-v2/nodeServer/src/browserPreferences.ts b/virtual-desktop-v2/nodeServer/src/browserPreferences.ts deleted file mode 100644 index 90ae1637d..000000000 --- a/virtual-desktop-v2/nodeServer/src/browserPreferences.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Response, Request } from 'express'; -import { Router } from 'express-serve-static-core'; - - -const express = require('express'); -const Promise = require('bluebird'); - -class BrowserPreferencesDataservice { - private context: any; - private router: Router; - - constructor(context: any) { - this.context = context; - const router = express.Router(); - router.use(function noteRequest(req: Request, res: Response, next: any): void { - context.logger.info('ZWED0017I', req.method); /*context.logger.info('Saw request, method=' + req.method);*/ - next(); - }); - context.addBodyParseMiddleware(router); - router.post('/', function(req: Request, res: Response): void { - const requestBody = req.body; - const languageFromClient = req.body ? req.body.language : null; - const localFromClient = req.body ? req.body.locale : null; - const savedPreferences: any = {}; - const responseBody = { - '_objectType': 'com.rs.mvd.ng2desktop.browserPreferences', - '_metaDataVersion': '1.0.0', - 'requestBody': req.body, - 'requestURL': req.originalUrl, - 'savedPreferences': savedPreferences - } - - if (requestBody) { - for (const key of Object.keys(requestBody)) { - let value = requestBody[key]; - const expirationDate: Date = new Date(); - - // If the key is there and has a value: set the cookie for 100 years (effectively permanent) - // If the key is there but the value is null: clear the cookie by making it expire in the past - if (value) { - expirationDate.setFullYear(expirationDate.getFullYear() + 100); - } else { - expirationDate.setFullYear(expirationDate.getFullYear() - 100); - value = 'expire'; - } - - const maxAge = expirationDate.getTime(); - - res.cookie(key, value, {maxAge: maxAge}); - savedPreferences[key] = { - 'value': value, - 'maxAge': maxAge - } - } - } - - res.status(200).json(responseBody); - }); - this.router = router; - } - - getRouter(): Router { - return this.router; - } -} - - -exports.browserPreferencesRouter = function(context): Router { - return new Promise(function(resolve, reject): void { - const dataservice = new BrowserPreferencesDataservice(context); - resolve(dataservice.getRouter()); - }); -} diff --git a/virtual-desktop-v2/nodeServer/tsconfig.json b/virtual-desktop-v2/nodeServer/tsconfig.json deleted file mode 100644 index 196dd0d89..000000000 --- a/virtual-desktop-v2/nodeServer/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compileOnSave": true, - "include": [ - "src/*.ts" - ], - "compilerOptions": { - "outDir": "../lib", - "sourceMap": true, - "moduleResolution": "node", - "types": [ - "node", - "express" - ] - } -} \ No newline at end of file diff --git a/virtual-desktop-v2/package-lock.json b/virtual-desktop-v2/package-lock.json deleted file mode 100644 index ad87bd040..000000000 --- a/virtual-desktop-v2/package-lock.json +++ /dev/null @@ -1,6426 +0,0 @@ -{ - "name": "mainframe-virtual-desktop", - "version": "0.0.0-zlux.version.replacement", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "mainframe-virtual-desktop", - "version": "0.0.0-zlux.version.replacement", - "license": "EPL-2.0", - "dependencies": { - "cpx": "^1.5.0" - }, - "devDependencies": { - "@angular/animations": "~12.0.0", - "@angular/cdk": "~12.0.0", - "@angular/common": "~12.0.0", - "@angular/compiler": "~12.0.0", - "@angular/compiler-cli": "~12.0.0", - "@angular/core": "~12.0.0", - "@angular/forms": "~12.0.0", - "@angular/material": "~12.0.0", - "@angular/platform-browser": "~12.0.0", - "@angular/platform-browser-dynamic": "~12.0.0", - "@angular/router": "~12.0.0", - "@types/xmldom": "0.1.29", - "@zlux/widgets": "git+https://github.com/zowe/zlux-widgets.git#feature/upgrade-angular", - "angular-l10n": "~12.0.0", - "angular2-template-loader": "~0.6.2", - "bootstrap": "~4.3.1", - "codelyzer": "~6.0.2", - "compression-webpack-plugin": "~9.2.0", - "copy-webpack-plugin": "~10.2.0", - "core-js": "~3.19.0", - "css-loader": "~6.5.1", - "exports-loader": "~3.1.0", - "font-awesome": "~4.7.0", - "html-loader": "~3.0.1", - "html2canvas": "~1.3.2", - "jquery": "~3.6.0", - "moment": "~2.29.4", - "ngx-file-drop": "~11.3.0", - "ngx-i18nsupport": "~0.17.1", - "popper.js": "~1.14.7", - "requirejs": "~2.3.7", - "rxjs": "~6.6.0", - "source-map-loader": "~3.0.0", - "style-loader": "~3.3.1", - "ts-loader": "~8.3.0", - "tslib": "~2.3.0", - "tslint": "~6.1.0", - "tslint-react": "~5.0.0", - "typeface-roboto": "~1.1.13", - "typescript": "~4.2.0", - "webpack": "~5.76.0", - "webpack-cli": "~4.9.1", - "zone.js": "~0.11.4" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular/animations": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.0.5.tgz", - "integrity": "sha512-BPdTCtgDJ9zNzHpuA6X3NmtzDiIt5SHZk840j0q3HCq6rP6C/oo2UnPT6w8YDOGMejDpWdHvTgXH4jVKDN1wCQ==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - }, - "peerDependencies": { - "@angular/core": "12.0.5" - } - }, - "node_modules/@angular/cdk": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.0.6.tgz", - "integrity": "sha512-GroS6U9u2GhZmm26XQ/YjKEtJvawI0p25eANi7mPg0pDvvi18Q+inJHE5TvCP8Xnw4Vd27oWv8k7OSm/UQOrAA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.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" - } - }, - "node_modules/@angular/common": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.0.5.tgz", - "integrity": "sha512-jKiPjWVL3jXVKgXwINlsF5O0r9gX/mAoa5UVy57O8jcg+ENbH9LLSOikgiF/0HPxk2uvRV5OYmbBgOY1xT41kQ==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - }, - "peerDependencies": { - "@angular/core": "12.0.5", - "rxjs": "^6.5.3" - } - }, - "node_modules/@angular/compiler": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.0.5.tgz", - "integrity": "sha512-G255aP4hhQ04hSQ1/JgiKNeTzRCuLgK220lJXkHubpu+f67os5LArhFNxZaUC/EVa/sloOT7Fo5tn8C5gy7iLA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - } - }, - "node_modules/@angular/compiler-cli": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.0.5.tgz", - "integrity": "sha512-XBZWU2S7N2kvQJK0H5KyLHiLVhYJrjh3NtbVBv67sCY9Ft8fv2jjbozTgXqeoYZ1xAxcZ2ZAB0n5SkhmY75Mow==", - "dev": true, - "dependencies": { - "@babel/core": "^7.8.6", - "@babel/types": "^7.8.6", - "canonical-path": "1.0.0", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.25.0", - "minimist": "^1.2.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "source-map": "^0.6.1", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.1.0", - "yargs": "^16.2.0" - }, - "bin": { - "ivy-ngcc": "ngcc/main-ivy-ngcc.js", - "ng-xi18n": "src/extract_i18n.js", - "ngc": "src/main.js", - "ngcc": "ngcc/main-ngcc.js" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - }, - "peerDependencies": { - "@angular/compiler": "12.0.5", - "typescript": ">=4.2.3 <4.3" - } - }, - "node_modules/@angular/core": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.0.5.tgz", - "integrity": "sha512-uVYsZa1VqVw8vNcjUYgfjXBc1M3WaxLXoLnCsDvutJiln4csa8Yw8p7RqQSrZ6AgQ8o2LHD2JJ5kus3EDMwfcA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3", - "zone.js": "~0.11.4" - } - }, - "node_modules/@angular/forms": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.0.5.tgz", - "integrity": "sha512-Ew/fGPTsywoYnm6DFPA/DyLl4Sb+1/uzpledrbxUHzaSKIrnXFrjQiUTmsbbq+8qono3JzbUIblqH1DrNThYiA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - }, - "peerDependencies": { - "@angular/common": "12.0.5", - "@angular/core": "12.0.5", - "@angular/platform-browser": "12.0.5", - "rxjs": "^6.5.3" - } - }, - "node_modules/@angular/material": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.0.6.tgz", - "integrity": "sha512-xZ3+f+obADIg1nRaTBy43/+lvCDkG/5J6SXOgCVP60rZJ3NYhlMcYvRcY8c2sd1//PCOJ+nQeGx3NHxhC7dUqA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@angular/animations": "^12.0.0 || ^13.0.0-0", - "@angular/cdk": "12.0.6", - "@angular/common": "^12.0.0 || ^13.0.0-0", - "@angular/core": "^12.0.0 || ^13.0.0-0", - "@angular/forms": "^12.0.0 || ^13.0.0-0", - "rxjs": "^6.5.3" - } - }, - "node_modules/@angular/platform-browser": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.0.5.tgz", - "integrity": "sha512-MLioK9gcdZOKINE8OmIHZICRnFySaWyCBeVbHS4Z4Vxgr+E2S2eO1IxBmGyQpJq1wDPBP9A/9LVLMUNbHu4Cdw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - }, - "peerDependencies": { - "@angular/animations": "12.0.5", - "@angular/common": "12.0.5", - "@angular/core": "12.0.5" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.0.5.tgz", - "integrity": "sha512-sYkOJxXj4vEZICT2oODkQF9wNaKoScSkiw2ooBYN0UX02mFKlWKa9vkzp6JmN1EF8YOWF0JnRqBPAi1WbOnAMw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - }, - "peerDependencies": { - "@angular/common": "12.0.5", - "@angular/compiler": "12.0.5", - "@angular/core": "12.0.5", - "@angular/platform-browser": "12.0.5" - } - }, - "node_modules/@angular/router": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.0.5.tgz", - "integrity": "sha512-2jiaT+OxCmJbeJ0MTPmIHBsTFLysenvPZteozYsjcmUo9mOzJHAjqHLJvTC+Ri+E9xvnplh+8BPETRleV1pAFw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0" - }, - "peerDependencies": { - "@angular/common": "12.0.5", - "@angular/core": "12.0.5", - "@angular/platform-browser": "12.0.5", - "rxjs": "^6.5.3" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.5", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", - "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-simple-access": "^7.24.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/helper-validator-identifier": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", - "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", - "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/types": "^7.24.5", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.12.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", - "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/xmldom": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/@types/xmldom/-/xmldom-0.1.29.tgz", - "integrity": "sha512-oRYcK5kVgldZpuVFspwRanft+h7/fLqyjMy3Ya/SgdnnuGoD7UIGX8KVGPknS29vXEVT1CoThAOh8WpZC9O7mA==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "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.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "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.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.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.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.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@zlux/widgets": { - "version": "0.0.4", - "resolved": "git+ssh://git@github.com/zowe/zlux-widgets.git#5e7e8390f3e9bf39887104ac58eefeef62cc0697", - "dev": true, - "license": "EPL-2.0", - "dependencies": { - "@angular/animations": "~12.0.0", - "@angular/common": "~12.0.0", - "@angular/core": "~12.0.0", - "@angular/forms": "~12.0.0", - "@angular/platform-browser": "~12.0.0", - "@angular/router": "~12.0.0", - "zone.js": "~0.11.4" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "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/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/angular-l10n": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/angular-l10n/-/angular-l10n-12.0.1.tgz", - "integrity": "sha512-Juh+FsAiK47MOPA3WniisNhfY0h393Tnr1oH/D1rnopGY1xVDFCKSzeLNpL8n4SIumnVLY5rst0+1pX7r8tEUg==", - "dev": true, - "dependencies": { - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/common": ">= 12.0.0", - "@angular/core": ">= 12.0.0", - "@angular/forms": ">= 12.0.0", - "@angular/router": ">= 12.0.0", - "rxjs": ">= 6.5.4" - } - }, - "node_modules/angular2-template-loader": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/angular2-template-loader/-/angular2-template-loader-0.6.2.tgz", - "integrity": "sha512-jBSrm2yDsTA48GG0H57upn8rmTfJS3/R7EhUeAL/3ryWS8deT9You8UQKWpW4eVSEY7uMJ52iFwpOYXc8QEtGg==", - "dev": true, - "dependencies": { - "loader-utils": "^0.2.15" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argparse/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", - "dev": true, - "dependencies": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, - "node_modules/arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", - "dependencies": { - "arr-flatten": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, - "dependencies": { - "ast-types-flow": "0.0.7" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bootstrap": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", - "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jquery": "1.9.1 - 3", - "popper.js": "^1.14.7" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001616", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", - "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/codelyzer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", - "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", - "dev": true, - "dependencies": { - "@angular/compiler": "9.0.0", - "@angular/core": "9.0.0", - "app-root-path": "^3.0.0", - "aria-query": "^3.0.0", - "axobject-query": "2.0.2", - "css-selector-tokenizer": "^0.7.1", - "cssauron": "^1.4.0", - "damerau-levenshtein": "^1.0.4", - "rxjs": "^6.5.3", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.2", - "tslib": "^1.10.0", - "zone.js": "~0.10.3" - }, - "peerDependencies": { - "@angular/compiler": ">=2.3.1 <13.0.0 || ^12.0.0-next || ^12.1.0-next || ^12.2.0-next", - "@angular/core": ">=2.3.1 <13.0.0 || ^12.0.0-next || ^12.1.0-next || ^12.2.0-next", - "tslint": "^5.0.0 || ^6.0.0" - } - }, - "node_modules/codelyzer/node_modules/@angular/compiler": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", - "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", - "dev": true, - "peerDependencies": { - "tslib": "^1.10.0" - } - }, - "node_modules/codelyzer/node_modules/@angular/core": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", - "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", - "dev": true, - "peerDependencies": { - "rxjs": "^6.5.3", - "tslib": "^1.10.0", - "zone.js": "~0.10.2" - } - }, - "node_modules/codelyzer/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/codelyzer/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/codelyzer/node_modules/zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/compression-webpack-plugin": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz", - "integrity": "sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.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/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", - "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.7", - "glob-parent": "^6.0.1", - "globby": "^12.0.2", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 12.20.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz", - "integrity": "sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cpx": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cpx/-/cpx-1.5.0.tgz", - "integrity": "sha512-jHTjZhsbg9xWgsP2vuNW2jnnzBX+p4T+vNI9Lbjzs1n4KhOfa22bQppiFYLsWQKd8TzmL5aSP/Me3yfsCwXbDA==", - "dependencies": { - "babel-runtime": "^6.9.2", - "chokidar": "^1.6.0", - "duplexer": "^0.1.1", - "glob": "^7.0.5", - "glob2base": "^0.0.12", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "resolve": "^1.1.7", - "safe-buffer": "^5.0.1", - "shell-quote": "^1.6.1", - "subarg": "^1.0.0" - }, - "bin": { - "cpx": "bin/index.js" - } - }, - "node_modules/cpx/node_modules/anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dependencies": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "node_modules/cpx/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", - "dependencies": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dependencies": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - }, - "optionalDependencies": { - "fsevents": "^1.0.0" - } - }, - "node_modules/cpx/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/cpx/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/cpx/node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/cpx/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", - "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/cpx/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/readdirp/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpx/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "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==", - "dev": true, - "dependencies": { - "base64-arraybuffer": "^0.2.0" - } - }, - "node_modules/css-loader": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", - "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.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", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "node_modules/cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", - "dev": true, - "dependencies": { - "through": "X.X.X" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.758", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.758.tgz", - "integrity": "sha512-/o9x6TCdrYZBMdGeTifAP3wlF/gVT+TtWJe3BSmtNh92Mw81U9hrYwW9OAGUh+sEOX/yz5e34sksqRruZbjYrw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", - "dependencies": { - "is-posix-bracket": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", - "dependencies": { - "fill-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dependencies": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exports-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-3.1.0.tgz", - "integrity": "sha512-zkMR5OHDn8qHq2w5BLv6SnLmUK5QAtPkjTA7CNIYBB9kIxBFIeA+TA1GcMw3p/vn5Avnmq80L7MviA4tZclRmQ==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "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", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "node_modules/filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==" - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/font-awesome": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", - "integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==", - "dev": true, - "engines": { - "node": ">=0.10.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", - "dependencies": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/glob-base/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==", - "dependencies": { - "find-index": "^0.1.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", - "dev": true, - "dependencies": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/html-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-3.0.1.tgz", - "integrity": "sha512-90Sxg9FhTkQEzmmHT2KOAQniTZgC72aifcfR0fZsuo1PJz0K4EXiTwxejTUombF8XShLj5RaZKYsUJhxR6G2dA==", - "dev": true, - "dependencies": { - "html-minifier-terser": "^6.0.2", - "parse5": "^6.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/html-loader/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/html2canvas": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.3.4.tgz", - "integrity": "sha512-81pWiqkzRVu5ap/IEd4g+YDAZu3ozTFvJxnlRfrRVQ4JK4A1optD6Qu4YhGF2HdPZXzt89KwUi1C9TmH1O8Etg==", - "dev": true, - "dependencies": { - "css-line-break": "2.0.1", - "text-segmentation": "^1.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", - "dependencies": { - "is-primitive": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jquery": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", - "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "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/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==", - "dev": true, - "dependencies": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" - }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/ngx-file-drop": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-11.3.0.tgz", - "integrity": "sha512-w+N6y7ow74j8uJGrIXGhOt/YtxL5ZRE/WjZ9UKWAEd54vA40GI4BJ7zd5vGAmILSoiXXE21k3ON6c+QQ0dEPyg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 6.9.0" - }, - "peerDependencies": { - "@angular/common": ">=9.0.0", - "@angular/core": ">=9.0.0" - } - }, - "node_modules/ngx-i18nsupport": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/ngx-i18nsupport/-/ngx-i18nsupport-0.17.1.tgz", - "integrity": "sha512-d8OCQs/XYBEI9qvztQyEkd8gEPFEBmyRg8UcriGQV8Ew1ujvrIieHxmX8YpDpFZKQ4ePextQGUSvjpGd2NauEQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "commander": "^2.15.1", - "he": "^1.1.1", - "ngx-i18nsupport-lib": "^1.10.2", - "request": "^2.85.0", - "rxjs": "^6.0.0" - }, - "bin": { - "xliffmerge": "dist/xliffmerge/xliffmerge" - }, - "engines": { - "node": ">=6.9" - } - }, - "node_modules/ngx-i18nsupport-lib": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/ngx-i18nsupport-lib/-/ngx-i18nsupport-lib-1.10.2.tgz", - "integrity": "sha512-Z81I2/HUtZ/7X7C3sioJj/Zr/M0iQs0aR5EhYsrWTzdEy7fZWFVYabzzZs+8h6lhQ/4yIl+3sVOCBkI9BiUUEQ==", - "dev": true, - "dependencies": { - "@types/xmldom": "^0.1.29", - "tokenizr": "^1.3.4", - "xmldom": "^0.1.27" - }, - "engines": { - "node": ">=6.9" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", - "dependencies": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", - "dependencies": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "optional": true - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/popper.js": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz", - "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ==", - "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", - "dev": true - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dependencies": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/randomatic/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", - "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", - "dev": true - }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "node_modules/regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dependencies": { - "is-equal-shallow": "^0.1.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requirejs": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", - "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==", - "dev": true, - "bin": { - "r_js": "bin/r.js", - "r.js": "bin/r.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/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==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/semver": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", - "dev": true, - "dependencies": { - "semver": "^5.3.0" - } - }, - "node_modules/semver-dsl/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", - "dependencies": { - "minimist": "^1.1.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", - "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "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/text-segmentation": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", - "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", - "dev": true, - "dependencies": { - "utrie": "^1.0.2" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tokenizr": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/tokenizr/-/tokenizr-1.7.0.tgz", - "integrity": "sha512-XHJRmcTZRK4xr9Rjci/Z5JerDwV4SOczO7G/hhrIddNLDJY9hZY7pX6vC7GvDUtlfjFb0BvBblE5JAVKbB2OEQ==", - "dev": true - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "*" - } - }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-loader/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" - } - }, - "node_modules/tslint-react": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tslint-react/-/tslint-react-5.0.0.tgz", - "integrity": "sha512-/IbcSmoBPlFic8kQaRfQ4knTY4mivwo5LVzvozvX6Dyu2ynEnrh1dIcR2ujjyp/IodXqY/H5GbxFxSMo/Kf2Hg==", - "deprecated": "tslint-react is deprecated along with TSLint", - "dev": true, - "dependencies": { - "tsutils": "^3.17.1" - }, - "peerDependencies": { - "tslint": "^6.0.0", - "typescript": ">=3.4.1" - } - }, - "node_modules/tslint-react/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tslint-react/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/typeface-roboto": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/typeface-roboto/-/typeface-roboto-1.1.13.tgz", - "integrity": "sha512-YXvbd3a1QTREoD+FJoEkl0VQNJoEjewR2H11IjVv4bp6ahuIcw0yyw/3udC4vJkHw3T3cUh85FTg8eWef3pSaw==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", - "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utrie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", - "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", - "dev": true, - "dependencies": { - "base64-arraybuffer": "^1.0.2" - } - }, - "node_modules/utrie/node_modules/base64-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.76.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.3.tgz", - "integrity": "sha512-18Qv7uGPU8b2vqGeEEObnfICyw2g39CHlDEK4I7NK13LOur1d0HGmGNKGT58Eluwddpn3oEejwvBPoP4M7/KSA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "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/webpack/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", - "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", - "dev": true, - "engines": { - "node": ">=0.1" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/zone.js": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", - "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", - "dev": true, - "dependencies": { - "tslib": "^2.3.0" - } - } - } -} diff --git a/virtual-desktop-v2/package.json b/virtual-desktop-v2/package.json deleted file mode 100644 index 7d06a7bf7..000000000 --- a/virtual-desktop-v2/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "mainframe-virtual-desktop", - "version": "0.0.0-zlux.version.replacement", - "license": "EPL-2.0", - "repository": { - "type": "git", - "url": "https://github.com/zowe/zlux-app-manager.git" - }, - "scripts": { - "build:externals": "webpack --progress --config webpack.externals.js", - "start": "webpack --watch --progress", - "build": "webpack --progress && webpack --progress --config webpack.externals.js && npm run copy", - "i18n": "ng-xi18n -p tsconfig.ngx-i18n.json --i18nFormat=xlf --outFile=messages.xlf && xliffmerge -p xliffmerge.json", - "lint": "tslint -c tslint.json \"src/**/*.ts\"", - "copy": "cpx node_modules/requirejs/require.js web/" - }, - "dependencies": { - "cpx": "^1.5.0" - }, - "devDependencies": { - "@angular/animations": "~12.0.0", - "@angular/cdk": "~12.0.0", - "@angular/common": "~12.0.0", - "@angular/compiler": "~12.0.0", - "@angular/compiler-cli": "~12.0.0", - "@angular/core": "~12.0.0", - "@angular/forms": "~12.0.0", - "@angular/material": "~12.0.0", - "@angular/platform-browser": "~12.0.0", - "@angular/platform-browser-dynamic": "~12.0.0", - "@angular/router": "~12.0.0", - "@types/xmldom": "0.1.29", - "@zlux/widgets": "git+https://github.com/zowe/zlux-widgets.git#feature/upgrade-angular", - "angular-l10n": "~12.0.0", - "angular2-template-loader": "~0.6.2", - "bootstrap": "~4.3.1", - "codelyzer": "~6.0.2", - "compression-webpack-plugin": "~9.2.0", - "copy-webpack-plugin": "~10.2.0", - "core-js": "~3.19.0", - "css-loader": "~6.5.1", - "exports-loader": "~3.1.0", - "font-awesome": "~4.7.0", - "html-loader": "~3.0.1", - "html2canvas": "~1.3.2", - "jquery": "~3.6.0", - "moment": "~2.29.4", - "ngx-file-drop": "~11.3.0", - "ngx-i18nsupport": "~0.17.1", - "popper.js": "~1.14.7", - "requirejs": "~2.3.7", - "rxjs": "~6.6.0", - "source-map-loader": "~3.0.0", - "style-loader": "~3.3.1", - "ts-loader": "~8.3.0", - "tslib": "~2.3.0", - "tslint": "~6.1.0", - "tslint-react": "~5.0.0", - "typeface-roboto": "~1.1.13", - "typescript": "~4.2.0", - "webpack": "~5.76.0", - "webpack-cli": "~4.9.1", - "zone.js": "~0.11.4" - } -} diff --git a/virtual-desktop-v2/plugin-config/tsconfig.base.json b/virtual-desktop-v2/plugin-config/tsconfig.base.json deleted file mode 100644 index 45c28b24a..000000000 --- a/virtual-desktop-v2/plugin-config/tsconfig.base.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compileOnSave": false, - "files": [ - "../../../zlux-platform/interface/src/index.d.ts", - "../../../zlux-platform/interface/src/mvd-hosting.d.ts", - "../../../zlux-platform/interface/src/mvd-window-management.d.ts" - ], - "compilerOptions": { - "baseUrl": "..", - "sourceMap": true, - "declaration": false, - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "target": "es5", - "typeRoots": [ - "../node_modules/@types" - ], - "lib": [ - "es2016", - "dom" - ], - "paths": { - "pluginlib/*": [ - "./src/pluginlib/*" - ], - "bootstrap/*": [ - "../bootstrap/dts/*" - ], - "zlux-base/*": [ - "../../../zlux-platform/base/src/*" - ] - } - } -} \ No newline at end of file diff --git a/virtual-desktop-v2/plugin-config/tsconfig.ngx-i18n.json b/virtual-desktop-v2/plugin-config/tsconfig.ngx-i18n.json deleted file mode 100644 index c0d13eb4a..000000000 --- a/virtual-desktop-v2/plugin-config/tsconfig.ngx-i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "paths": { - "pluginlib/*": [ - "./src/pluginlib/*" - ], - "@angular/core": [ - "node_modules/@angular/core" - ] - } - }, - "angularCompilerOptions": { - "enableIvy": false - } -} diff --git a/virtual-desktop-v2/plugin-config/tsconfig.react.base.json b/virtual-desktop-v2/plugin-config/tsconfig.react.base.json deleted file mode 100644 index 911a2026e..000000000 --- a/virtual-desktop-v2/plugin-config/tsconfig.react.base.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "jsx": "react" - } -} \ No newline at end of file diff --git a/virtual-desktop-v2/plugin-config/tsconfig.strict.json b/virtual-desktop-v2/plugin-config/tsconfig.strict.json deleted file mode 100644 index 799db5534..000000000 --- a/virtual-desktop-v2/plugin-config/tsconfig.strict.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "noImplicitAny": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noUnusedLocals": true, - "strictNullChecks": true, - "skipLibCheck": true - } -} \ No newline at end of file diff --git a/virtual-desktop-v2/plugin-config/tslint.angular.base.json b/virtual-desktop-v2/plugin-config/tslint.angular.base.json deleted file mode 100644 index 4a2f85211..000000000 --- a/virtual-desktop-v2/plugin-config/tslint.angular.base.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["./tslint.base.lenient.json", "codelyzer"] -} diff --git a/virtual-desktop-v2/plugin-config/tslint.base.json b/virtual-desktop-v2/plugin-config/tslint.base.json deleted file mode 100644 index a29e7dc8c..000000000 --- a/virtual-desktop-v2/plugin-config/tslint.base.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "rules": { - "callable-types": true, - "class-name": true, - "comment-format": [ - true, - "check-space" - ], - "curly": true, - "eofline": true, - "forin": true, - "import-blacklist": [ - true, - "rxjs" - ], - "import-spacing": true, - "indent": [ - true, - "spaces" - ], - "interface-over-type-literal": true, - "label-position": true, - "max-line-length": [ - true, - 140 - ], - "member-access": false, - "member-ordering": [ - true, - "static-before-instance", - "variables-before-functions" - ], - "no-arg": true, - "no-bitwise": true, - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": false, - "no-empty-interface": true, - "no-eval": true, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-shadowed-variable": true, - "no-string-literal": false, - "no-string-throw": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-use-before-declare": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [ - true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "prefer-const": true, - "quotemark": [ - true, - "single" - ], - "radix": true, - "semicolon": [ - "always" - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "typedef": [ - true, - "call-signature", - "property-declaration" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "typeof-compare": true, - "unified-signatures": true, - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ], - "directive-selector": [ - true, - "attribute", - "app", - "camelCase" - ], - "component-selector": [ - true, - "element", - "app", - "kebab-case" - ], - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, - "no-input-rename": true, - "no-output-rename": true, - "use-life-cycle-interface": true, - "use-pipe-transform-interface": true, - "component-class-suffix": true, - "directive-class-suffix": true, - "no-access-missing-member": true, - "templates-use-public": true, - "invoke-injectable": true - } -} diff --git a/virtual-desktop-v2/plugin-config/tslint.base.lenient.json b/virtual-desktop-v2/plugin-config/tslint.base.lenient.json deleted file mode 100644 index 91d7569e3..000000000 --- a/virtual-desktop-v2/plugin-config/tslint.base.lenient.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["tslint:recommended"] -} diff --git a/virtual-desktop-v2/plugin-config/tslint.react.base.json b/virtual-desktop-v2/plugin-config/tslint.react.base.json deleted file mode 100644 index 57feb8ba9..000000000 --- a/virtual-desktop-v2/plugin-config/tslint.react.base.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["./tslint.base.lenient.json", "tslint:latest", "tslint-react"] -} diff --git a/virtual-desktop-v2/plugin-config/webpack.base.js b/virtual-desktop-v2/plugin-config/webpack.base.js deleted file mode 100644 index f4cfce490..000000000 --- a/virtual-desktop-v2/plugin-config/webpack.base.js +++ /dev/null @@ -1,111 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -var path = require('path'); -var os = require('os'); - -var desktopDir = path.resolve(__dirname, '..'); - -var config = { - 'devtool': 'source-map', - 'output': { - 'libraryTarget': 'umd', - 'umdNamedDefine': true - }, - 'resolve': { - 'extensions': ['.js', '.ts'], - 'alias': { - 'pluginlib': path.resolve(desktopDir, 'src/pluginlib'), - 'zlux-base': path.resolve(__dirname, '../../zlux-platform/base/src'), - 'zlux-interface': path.resolve(__dirname, '../../zlux-platform/interface/src') - } - }, - 'module': { - 'rules': [ - { - /* Javascript source map loader */ - 'enforce': 'pre', - 'test': /\.js$/, - 'loader': 'source-map-loader', - 'exclude': [ - /\/node_modules\// - ] - }, - { - /* HTML URL resolution loader */ - 'test': /\.html$/, - 'loader': 'html-loader' - }, - { - 'test': /\.svg$/, - 'loader': 'svg-sprite-loader' - }, - { - /* External file loader */ - 'test': /\.eot$/, - 'loader': 'file-loader?name=[name].[hash:20].[ext]' - }, - { - /* External (or inline) file loader */ - 'test': /\.(jpg|png|gif|otf|ttf|woff|woff2|cur|ani)$/, - 'loader': 'url-loader?name=[name].[hash:20].[ext]&limit=10000' - }, - { - /* CSS URL loader, TODO: reconsider */ - 'test': /\.css$/, - 'use': [ - 'exports-loader?module.exports.toString()', - { - 'loader': 'css-loader', - 'options': { - 'sourceMap': false - } - } - ] - }, - { - /* TS and angular loader */ - 'test': /\.ts$/, - 'loaders': [ - 'ts-loader', - 'angular2-template-loader' - ] - } - ] - }, - 'externals': [ - function(context, request, callback) { - if (/(@angular)|(angular\-l10n)|(^bootstrap$)|(^popper.js$)|(^jquery$)|(^rxjs(\/operators)?$)/.test(request)){ - return callback(null, { - commonjs: request, - commonjs2: request, - amd: request - }); - } - callback(); - } - ] -}; - -module.exports = config; - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/plugin-config/webpack.react.base.js b/virtual-desktop-v2/plugin-config/webpack.react.base.js deleted file mode 100644 index 0d403abed..000000000 --- a/virtual-desktop-v2/plugin-config/webpack.react.base.js +++ /dev/null @@ -1,117 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -var webpack = require('webpack'); -var path = require('path'); -var os = require('os'); - -var desktopDir = path.resolve(__dirname, '..'); - -var config = { - 'devtool': 'source-map', - 'output': { - 'libraryTarget': 'umd', - 'umdNamedDefine': true - }, - 'resolve': { - 'extensions': ['.js', '.ts', '.jsx', '.tsx'], - 'alias': { - 'pluginlib': path.resolve(desktopDir, 'src/pluginlib'), - "zlux-base": path.resolve(desktopDir, "../../zlux-platform/base/src"), - "zlux-interface": path.resolve(desktopDir, "../../zlux-platform/interface/src") - } - }, - 'module': { - 'rules': [ - { - /* Javascript source map loader */ - 'enforce': 'pre', - 'test': /\.js$/, - 'loader': 'source-map-loader', - 'exclude': [ - /\/node_modules\// - ] - }, - { - /* JSON inline loader */ - 'test': /\.json$/, - 'loader': 'json-loader' - }, - { - /* HTML URL resolution loader */ - 'test': /\.html$/, - 'loader': 'html-loader' - }, - { - 'test': /\.svg$/, - 'loader': 'svg-sprite-loader' - }, - { - /* External file loader */ - 'test': /\.eot$/, - 'loader': 'file-loader?name=[name].[hash:20].[ext]' - }, - { - /* External (or inline) file loader */ - 'test': /\.(jpg|png|gif|otf|ttf|woff|woff2|cur|ani)$/, - 'loader': 'url-loader?name=[name].[hash:20].[ext]&limit=10000' - }, - { - /* CSS URL loader, TODO: reconsider */ - 'test': /\.css$/, - 'use': [ - 'exports-loader?module.exports.toString()', - { - 'loader': 'css-loader', - 'options': { - 'sourceMap': false - } - } - ] - }, - { - /* TS and angular loader */ - 'test': /\.(ts|tsx)$/, - 'loaders': [ - 'ts-loader', - ] - } - ] - }, - "externals": [ - function(context, request, callback) { - /* TODO: should we share react? */ - if (/(@angular)|(^bootstrap$)|(^jquery$)|(^rxjs\/Rx$)/.test(request)){ - return callback(null, { - commonjs: request, - commonjs2: request, - amd: request - }); - } - callback(); - } - ] -}; - -module.exports = config; - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/plugin-config/webpack5.base.js b/virtual-desktop-v2/plugin-config/webpack5.base.js deleted file mode 100644 index 8e60c81ed..000000000 --- a/virtual-desktop-v2/plugin-config/webpack5.base.js +++ /dev/null @@ -1,114 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -const path = require('path'); -const desktopDir = path.resolve(__dirname, '..'); - -const config = { - devtool: 'source-map', - mode: 'production', - output: { - libraryTarget: 'umd', - umdNamedDefine: true - }, - resolve: { - extensions: ['.js', '.ts'], - alias: { - 'pluginlib': path.resolve(desktopDir, 'src/pluginlib'), - 'zlux-base': path.resolve(__dirname, '../../zlux-platform/base/src'), - 'zlux-interface': path.resolve(__dirname, '../../zlux-platform/interface/src') - } - }, - module: { - rules: [ - { - test: /\.ts$/, - use: ['ts-loader', 'angular2-template-loader'] - }, - { - /* Javascript source map loader */ - enforce: 'pre', - test: /\.js$/, - use: ['source-map-loader'], - exclude: [ - /\/node_modules\// - ] - }, - { - /* HTML URL resolution loader */ - test: /\.html$/, - use: [ - { - loader: 'html-loader', - options: { esModule: false } - } - ] - }, - { - test: /\.eot$/, - type: 'asset/resource', - generator: { - filename: '[name].[hash:20].[ext]' - } - }, - { - test: /\.(jpg|png|gif|otf|ttf|woff|woff2|cur|ani|svg)$/, - type: 'asset', - generator: { - filename: '[name].[hash:20].[ext]' - }, - parser: { - dataUrlCondition: { - maxSize: 10000 - } - } - }, - { - test: /\.css$/, - use: [{ - loader: 'css-loader', - options: { - exportType: 'string', - esModule: false, - sourceMap: false - } - }] - } - ] - }, - externals: [ - function ({ context, request }, callback) { - if (/(@angular)|(angular\-l10n)|(^bootstrap$)|(^popper.js$)|(^jquery$)|(^rxjs(\/operators)?$)/.test(request)) { - return callback(null, { - commonjs: request, - commonjs2: request, - amd: request - }); - } - callback(); - } - ] -}; - -module.exports = config; - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/pluginDefinition.json b/virtual-desktop-v2/pluginDefinition.json deleted file mode 100644 index 4c922c781..000000000 --- a/virtual-desktop-v2/pluginDefinition.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "identifier": "org.zowe.zlux.ng2desktop", - "apiVersion": "2.0.0", - "pluginVersion": "0.0.0-zlux.version.replacement", - "pluginType": "desktop", - "license": "EPL-2.0", - "homepage": "zowe.org", - "webContent": { - "framework": "angular" - }, - "configurationData": { - "resources": { - "recognizers": { - "aggregationPolicy": "none" - }, - "actions": { - "aggregationPolicy": "none" - }, - "ui": { - "subResources":{ - "launchbar": { - "subResources": { - "plugins": { - "aggregationPolicy": "override", - "variable": false - } - } - }, - "themebin": { - "binary": true - }, - "theme": { - "aggregationPolicy": "none" - } - } - }, - "session": { - "subResources": { - "security": { - "aggregationPolicy": "none" - } - } - }, - "pluginData": { - "aggregationPolicy": "override", - "subResources": { - "app": { - "aggregationPolicy": "override" - }, - "singleApp": { - "aggregationPolicy": "override" - } - } - } - } - }, - "dataServices": [ - { - "type": "router", - "name": "browser-preferences", - "filename": "browserPreferences.js", - "routerFactory": "browserPreferencesRouter", - "dependenciesIncluded": true, - "initializerLookupMethod": "external", - "version": "1.0.0" - } - ] -} diff --git a/virtual-desktop-v2/src/app/application-manager/application-instance.ts b/virtual-desktop-v2/src/app/application-manager/application-instance.ts deleted file mode 100644 index eed719730..000000000 --- a/virtual-desktop-v2/src/app/application-manager/application-instance.ts +++ /dev/null @@ -1,128 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModuleRef, ComponentRef, Type } from '@angular/core'; - -declare var Reflect: any; - -// import { DesktopPluginDefinitionImpl } from 'app/plugin-manager/shared/desktop-plugin-definition'; - -// import { ViewportId } from './viewport-manager/viewport'; -import { BaseLogger } from 'virtual-desktop-logger'; - - - -export class ApplicationInstance { - readonly instanceId: MVDHosting.InstanceId; - readonly plugin: MVDHosting.DesktopPluginDefinition; - readonly viewportContents: Map>; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - moduleRef: NgModuleRef | null; - mainComponent: Type | null; - isIFrame:boolean = false; - iframeId:string; - iframeElement:HTMLElement|null; - inputFields: string[]; - outputFields: string[]; - - constructor(instanceId: MVDHosting.InstanceId, plugin: MVDHosting.DesktopPluginDefinition) { - this.instanceId = instanceId; - this.plugin = plugin; - this.viewportContents = new Map(); - this.mainComponent = null; - this.moduleRef = null; - this.inputFields = []; - this.outputFields = []; - } - - private cleanupComponentRefFor(viewportId: MVDHosting.ViewportId): void { - const component = this.viewportContents.get(viewportId); - - if (component != null) { - component.destroy(); - } else { - this.logger.warn('ZWED5167W'); //this.logger.warn('Attempted to clean up undefined component'); - } - } - - deregisterViewport(viewportId: MVDHosting.ViewportId): void { - this.cleanupComponentRefFor(viewportId); - this.viewportContents.delete(viewportId); - } - - getComponentRefFor(viewportId: MVDHosting.ViewportId): ComponentRef | null { - return this.viewportContents.get(viewportId) || null; - } - - setModuleRef(moduleRef: NgModuleRef): void { - this.moduleRef = moduleRef; - } - - setMainComponent(component: Type): void { - this.mainComponent = component; - this.discoverMainComponentInputsAndOutputs(); - } - - isMainComponentInput(fieldName: string): boolean { - return this.inputFields.find(field => field === fieldName) !== undefined; - } - - isMainComponentOutput(fieldName: string): boolean { - return this.outputFields.find(field => field === fieldName) !== undefined; - } - - discoverMainComponentInputsAndOutputs(): void { - this.inputFields = []; - this.outputFields = []; - const propMetadata = (this.mainComponent as any)[PROP_METADATA]; - for (const fieldName in propMetadata) { - if (propMetadata.hasOwnProperty(fieldName)) { - const annotation = this.getMainComponentFieldAnnotation(propMetadata[fieldName]); - if (annotation === 'Input') { - this.inputFields.push(fieldName); - } else if (annotation === 'Output') { - this.outputFields.push(fieldName); - } - } - } - } - - getMainComponentInputs(): string[] { - return this.inputFields; - } - - getMainComponentOutputs(): string[] { - return this.outputFields; - } - - getMainComponentFieldAnnotation(meta: any): string { - return meta[0].ngMetadataName; - } - - getMainComponentFieldType(fieldName: string, instance: object): Type { - return Reflect.getMetadata("design:type", instance, fieldName); - } - -} - -const PROP_METADATA = '__prop__metadata__'; - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/application-manager.module.ts b/virtual-desktop-v2/src/app/application-manager/application-manager.module.ts deleted file mode 100644 index 1adcb303f..000000000 --- a/virtual-desktop-v2/src/app/application-manager/application-manager.module.ts +++ /dev/null @@ -1,62 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -import { SharedModule } from 'app/shared/shared.module'; - -import { ApplicationManager } from './application-manager.service'; -import { InjectionManager } from './injection-manager/injection-manager.service'; -import { ViewportManager } from './viewport-manager/viewport-manager.service'; -import { ViewportComponent } from './viewport-manager/viewport/viewport.component'; -import { I18nModule } from '../i18n/i18n.module'; - -@NgModule({ - imports: [ - SharedModule, - CommonModule, - I18nModule - ], - declarations: [ - ViewportComponent - ], - providers: [ - ApplicationManager, - ViewportManager, - InjectionManager, - /* Make application and viewport manager accessible externally */ - { provide: MVDHosting.Tokens.ApplicationManagerToken, useExisting: ApplicationManager }, - { provide: MVDHosting.Tokens.ViewportManagerToken, useExisting: ViewportManager } - ], - exports: [ - ViewportComponent - ], - entryComponents: [ - ViewportComponent - ] -}) -export class ApplicationManagerModule { - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/application-manager.service.ts b/virtual-desktop-v2/src/app/application-manager/application-manager.service.ts deleted file mode 100644 index 7d761d6f7..000000000 --- a/virtual-desktop-v2/src/app/application-manager/application-manager.service.ts +++ /dev/null @@ -1,423 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, Injector, NgModuleFactory, Compiler, ComponentRef, Type, SimpleChanges, SimpleChange, OnChanges } from '@angular/core'; -import { Observable } from 'rxjs'; -import { HttpClient } from '@angular/common/http'; - -import { PluginLoader } from 'app/plugin-manager/shared/plugin-loader'; -import { DesktopPluginDefinitionImpl } from 'app/plugin-manager/shared/desktop-plugin-definition'; -import { PluginManager } from 'app/plugin-manager/shared/plugin-manager'; - -import { LoadFailureComponent } from './load-failure/load-failure.component'; -import { InjectionManager } from './injection-manager/injection-manager.service'; -import { ApplicationInstance } from './application-instance'; -import { FailureModule } from './load-failure/failure.module'; -// import { ViewportId } from './viewport-manager/viewport'; -import { ViewportManager } from './viewport-manager/viewport-manager.service'; -import { EmbeddedInstance } from 'pluginlib/inject-resources'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { IFRAME_NAME_PREFIX, INNER_IFRAME_NAME } from '../shared/named-elements'; -import { LanguageLocaleService } from '../i18n/language-locale.service'; - -@Injectable() -export class ApplicationManager implements MVDHosting.ApplicationManagerInterface { - private failureModuleFactory: NgModuleFactory; - private applicationInstances: Map; - private nextInstanceId: MVDHosting.InstanceId; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private knownLoggerMessageChecks: string[]; - - constructor( - private injector: Injector, - private pluginLoader: PluginLoader, - private viewportManager: ViewportManager, // convention in angular is that injectable singleton provider from module will by keyed by type and placed in slot. - private pluginManager: PluginManager, - private injectionManager: InjectionManager, - private compiler: Compiler, - private languageLocaleService: LanguageLocaleService, - private http: HttpClient, - ) { - this.failureModuleFactory = this.compiler.compileModuleSync(FailureModule); - this.applicationInstances = new Map(); - this.knownLoggerMessageChecks = []; - this.nextInstanceId = 0; - ZoweZLUX.dispatcher.setLaunchHandler((zluxPlugin:ZLUX.Plugin, metadata: any) => { - return this.pluginManager.findPluginDefinition(zluxPlugin.getIdentifier()).then(plugin => { - if (plugin == null) { - throw new Error('ZWED5146E - Unknown plugin in launch handler '+zluxPlugin); - } - return this.spawnApplication(plugin as DesktopPluginDefinitionImpl, metadata); - }); - }); - - ZoweZLUX.dispatcher.setPostMessageHandler( (instanceId:MVDHosting.InstanceId, message:any ) => { - let applicationInstance:ApplicationInstance|undefined = this.applicationInstances.get(instanceId); - if (applicationInstance){ - let theIframe:HTMLElement|null = document.getElementById(`${IFRAME_NAME_PREFIX}${instanceId}`); - if (theIframe){ - /* checking if iframe-in-iframe, which we can see in a remote host scenario. - Sending the message to the wrong iframe will result in the message being dropped. - The inner iframe is not under control of the zlux framework, so the name here is by convention. - If people use the wrong name, they get nothing. - */ - let secondIframe = (theIframe as HTMLIFrameElement).contentWindow?.document.getElementById(INNER_IFRAME_NAME); - if (secondIframe) { - theIframe = secondIframe; - } - this.logger.debug(`ZWED5292I`, applicationInstance); //this.logger.debug(`PostMessage for instance=`,applicationInstance); - let iframeWindow:Window|null = (theIframe as HTMLIFrameElement).contentWindow!; - iframeWindow.postMessage(message, "*"); - } else { - this.logger.warn("ZWED5293I", applicationInstance.plugin.getIdentifier(),instanceId); //this.logger.warn(`iframe postMessage failed, no iframe found for ${applicationInstance.plugin.getIdentifier()}, id=${instanceId}`); - } - } - }); - window.addEventListener('message',(message:any)=> { - if (message.data === 'iframeload') { - this.applicationInstances.forEach((appInstance)=> { - let instance = appInstance.instanceId; - const iframe:HTMLElement|null = document.getElementById(`${IFRAME_NAME_PREFIX}${instance}`); - if (iframe) { - // this always resolved as true oddly enough - if ((iframe as any).contentWindow === message.source - || (iframe as any).contentWindow === message.source.parent - || ((iframe as any).src.indexOf(message.origin) == 0)) { -// if ((iframe as any).contentWindow.frameElement.id === message.source.frameElement.id) { - //it's this one - const appInstance = this.applicationInstances.get(instance); - if (appInstance) { - const pluginId = appInstance.plugin.getIdentifier(); - this.logger.info(`ZWED5057I`, pluginId, instance); /*this.logger.info(`Iframe loaded: ${pluginId}, instance=${instance}`);*/ - return ZoweZLUX.dispatcher.iframeLoaded(instance, pluginId); - } - } - } - }); - this.logger.warn(`ZWED5189W`); //this.logger.warn(`No iframe identified as source of message`); - } - }); - } - - private generateInstanceId(): MVDHosting.InstanceId { - return this.nextInstanceId ++; - } - - private createApplicationInstance(plugin: MVDHosting.DesktopPluginDefinition): ApplicationInstance { - const id = this.generateInstanceId(); - const applicationInstance = new ApplicationInstance(id, plugin); - this.applicationInstances.set(id, applicationInstance); - - return applicationInstance; - } - - private instantiateApplicationInstance(instance: ApplicationInstance, moduleFactory: NgModuleFactory, injector: Injector): void { - const moduleRef = moduleFactory.create(injector); - instance.setModuleRef(moduleRef); - } - - // This is the component instantiator and injector - - private generateComponentRefFor(instance: ApplicationInstance, viewportId: MVDHosting.ViewportId, component: Type): void { - if (instance.moduleRef == null) { - this.logger.warn('ZWED5190W'); //this.logger.warn('Component ref requested before module ref available'); - return; - } else if (instance.viewportContents.get(viewportId) != null) { - this.logger.warn('ZWED5191W'); //this.logger.warn('Overwriting existing component ref for window'); - } - - const viewport = this.viewportManager.getViewport(viewportId); - - if (viewport == null) { - throw new Error('ZWED5147E - Unknown viewport when requesting component generation'); - } - - const factory = instance.moduleRef.componentFactoryResolver.resolveComponentFactory(component); - const componentRef = factory.create(this.injectionManager.generateComponentInjector(viewport, instance.moduleRef.injector)); - //this.logger.info("AppMgr about to associate aInst with component "+componentRef); - //this.logger.info(componentRef); - instance.viewportContents.set(viewportId, componentRef); - let instanceOfComponent:any = componentRef.instance; - //this.logger.info("instance = "+instanceOfComponent); - //this.logger.info(instanceOfComponent); - if (instanceOfComponent.iframeId){ - instance.isIFrame = true; - instance.iframeId = instanceOfComponent.iframeId; - this.logger.debug("ZWED5294I", instance.iframeId); //this.logger.debug("iframeID found = ",instance.iframeId); - } - } - - private generateMainComponentRefFor(instance: ApplicationInstance, viewportId: MVDHosting.ViewportId): void { - if (instance.mainComponent == null) { - throw new Error('ZWED5150E - Plugin does not have a main component to generate'); //throw new Error('Plugin does not have a main component to generate'); - } - - this.generateComponentRefFor(instance, viewportId, instance.mainComponent); - } - - private generateInjectorAfterCheckingForLoggerMessages(compiled: any, plugin: DesktopPluginDefinitionImpl, launchMetadata: any, - applicationInstance: ApplicationInstance, viewportId: MVDHosting.ViewportId, messages: any): number { - // When angular module is compiled, it produces and ngModuleFactory - // The ngModuleFactory, when given an injector produces a module ref - // The moduleRef, when given type of component and component-level injector produces component-ref - // ComponentRef contains instantiated instance of Component - if (applicationInstance.mainComponent) { - // applicationInstance should not have its main component initialized (gets set further down the method) - // if applicationInstance does have a mainComponent, it means the application generation became out of sync - // so we return as to not repeat the process and create two Viewports for one instance - return applicationInstance.instanceId; - } - const injector = this.injectionManager.generateModuleInjector(plugin, launchMetadata, applicationInstance.instanceId, messages); - - this.instantiateApplicationInstance(applicationInstance, compiled.moduleFactory, injector); - this.logger.debug("ZWED5295I", plugin.getIdentifier(), compiled.initialComponent); //this.logger.debug(`appMgr spawning plugin ID=${plugin.getIdentifier()}, ` - //+`compiled.initialComponent=`,compiled.initialComponent); - applicationInstance.setMainComponent(compiled.initialComponent); - this.generateMainComponentRefFor(applicationInstance, viewportId); // new component is added to DOM here - - //Beneath all the abstraction is the instance of the App object, framework-independent - let notATurtle = this.getJavascriptObjectForApplication(applicationInstance, viewportId); - // JOE HAX - register to dispatcher - ZoweZLUX.dispatcher.registerPluginInstance(plugin.getBasePlugin(), // this is Plugin class instance - applicationInstance.instanceId, - applicationInstance.isIFrame ); // instanceId is proxy handle to isntance - if (applicationInstance.isIFrame) { - // TODO does this work with iframe-adapter.js - //ZoweZLUX.dispatcher.addPendingIframe(plugin.getBasePlugin(), null) - } - if (notATurtle && (typeof notATurtle.provideZLUXDispatcherCallbacks == 'function')) { - ZoweZLUX.dispatcher.registerApplicationCallbacks(plugin.getBasePlugin(), applicationInstance.instanceId, notATurtle.provideZLUXDispatcherCallbacks()); - } else if (!applicationInstance.isIFrame) { - this.logger.info(`ZWED5021W`, plugin.getIdentifier(), notATurtle) - /*this.logger.info(`App callbacks not registered. Couldn't find instance object or object didn't provide callbacks.` - +`App ID=${plugin.getIdentifier()}, Instance Obj=`,notATurtle); */ - } - - - return applicationInstance.instanceId; - } - - private spawnApplicationIntoViewport(plugin: DesktopPluginDefinitionImpl, launchMetadata: any, - applicationInstance: ApplicationInstance, viewportId: MVDHosting.ViewportId): Promise { - // TODO: Race condition problem, this Promise may become out of sync. A check is used to handle this inside this.generateInjectorAfterCheckingForLoggerMessages - // but would be best to solve the root cause (if there is a better way) - return new Promise((resolve, reject)=> { - this.pluginLoader.loadPlugin(plugin, applicationInstance.instanceId) - .then((compiled): void => { - if (this.knownLoggerMessageChecks.indexOf(plugin.getIdentifier()) > -1) { // Check if logger has been instantiated (no need to re-generate messages) - resolve(this.generateInjectorAfterCheckingForLoggerMessages(compiled, plugin, launchMetadata, applicationInstance, viewportId, null)); - } else { - this.knownLoggerMessageChecks.push(plugin.getIdentifier()); - let languageCode = this.languageLocaleService.getBaseLanguage(); // Figure out the desktop language - let messageLoc = ZoweZLUX.uriBroker.pluginResourceUri(plugin.getBasePlugin(), `assets/i18n/log/messages_${languageCode}.json`); - this.http.get(messageLoc).subscribe( // Try to load log messages of desired language - messages => { - if (languageCode != 'en') { - let messageLocEN = ZoweZLUX.uriBroker.pluginResourceUri(plugin.getBasePlugin(), `assets/i18n/log/messages_en.json`); - this.http.get(messageLocEN).subscribe( // Try to load English log messages - messagesEN => { - let mergedMessages = Object.assign(messagesEN, messages); // Merge the messages (so English is used as a fallback) - resolve(this.generateInjectorAfterCheckingForLoggerMessages(compiled, plugin, launchMetadata, applicationInstance, viewportId, mergedMessages)); - }, - error => { // If English is not found, just return the previously obtained messages. - resolve(this.generateInjectorAfterCheckingForLoggerMessages(compiled, plugin, launchMetadata, applicationInstance, viewportId, messages)); - }); - } else { - resolve(this.generateInjectorAfterCheckingForLoggerMessages(compiled, plugin, launchMetadata, applicationInstance, viewportId, messages)); - } - }, error => { - if (error.status = 404 && languageCode != 'en') { // If log messages are not available in desired language, - let messageLocEN = ZoweZLUX.uriBroker.pluginResourceUri(plugin.getBasePlugin(), `assets/i18n/log/messages_en.json`); // Default to English - this.http.get(messageLocEN).subscribe( // ...try English. - messages => { - resolve(this.generateInjectorAfterCheckingForLoggerMessages(compiled, plugin, launchMetadata, applicationInstance, viewportId, messages)); - }, error => { // In all other cases, load the logger without messages. - resolve(this.generateInjectorAfterCheckingForLoggerMessages(compiled, plugin, launchMetadata, applicationInstance, viewportId, null)); - }); - } else { - resolve(this.generateInjectorAfterCheckingForLoggerMessages(compiled, plugin, launchMetadata, applicationInstance, viewportId, null)); - } - }); - } - }) - .catch((errors) => { - const injector = this.injectionManager.generateFailurePluginInjector(errors); - this.instantiateApplicationInstance(applicationInstance, this.failureModuleFactory, injector); - applicationInstance.setMainComponent(LoadFailureComponent); - this.generateMainComponentRefFor(applicationInstance, viewportId); - - reject(errors); - }); - - }); - - } - - spawnApplicationWithParms(plugin:ZLUX.Plugin, viewParms:any, launchMetadata:any):Promise{ - let pluginDefinition:DesktopPluginDefinitionImpl = new DesktopPluginDefinitionImpl(plugin); - if (viewParms.width){ - pluginDefinition.widthOverride = viewParms.width; - } - if (viewParms.height){ - pluginDefinition.heightOverride = viewParms.height; - } - return this.spawnApplication(pluginDefinition,launchMetadata); - } - - spawnApplication(plugin: DesktopPluginDefinitionImpl, launchMetadata: any): Promise { - // Create fresh application instance - //console.trace("AppManager.service spawnApp called with plugin (type DPD) = "+JSON.stringify(plugin)); - const applicationInstance = this.createApplicationInstance(plugin); - - // Generate initial instance window - const windowManager: MVDWindowManagement.WindowManagerServiceInterface = this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - let windowId; - if (launchMetadata && launchMetadata.zlux && launchMetadata.zlux.isFirstFullscreenApp) { - windowId = windowManager.createFullscreenStandaloneWindow(plugin); - } else { - windowId = windowManager.createWindow(plugin); - } - const viewportId = windowManager.getViewportId(windowId); - this.viewportManager.registerViewport(viewportId, applicationInstance.instanceId); - - return this.spawnApplicationIntoViewport(plugin, launchMetadata, applicationInstance, viewportId); - } - - spawnApplicationWithTargetAndParms(plugin: ZLUX.Plugin, viewParms:any, launchMetadata: any, - viewportId: MVDHosting.ViewportId): Promise { - let pluginDefinition:DesktopPluginDefinitionImpl = new DesktopPluginDefinitionImpl(plugin); - if (viewParms.width){ - pluginDefinition.widthOverride = viewParms.width; - } - if (viewParms.height){ - pluginDefinition.heightOverride = viewParms.height; - } - return this.spawnApplicationWithTarget(pluginDefinition,launchMetadata,viewportId); - } - - - spawnApplicationWithTarget(plugin: DesktopPluginDefinitionImpl, launchMetadata: any, - viewportId: MVDHosting.ViewportId): Promise { - // Create fresh application instance - const applicationInstance = this.createApplicationInstance(plugin); - - // Generate initial instance window - this.viewportManager.registerViewport(viewportId, applicationInstance.instanceId); - - return this.spawnApplicationIntoViewport(plugin, launchMetadata, applicationInstance, viewportId); - } - - showApplicationWindow(plugin: DesktopPluginDefinitionImpl): Promise { - const windowManager: MVDWindowManagement.WindowManagerServiceInterface = this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - const windowId = windowManager.getWindow(plugin); - if (windowId != null) { - windowManager.showWindow(windowId); - return new Promise((resolve,reject)=> { - resolve(windowId); //possibly a bug: windowid and instanceid could be different? - }); - } else { - return this.spawnApplication(plugin, null); - } - } - - showApplicationInstanceWindow(plugin: DesktopPluginDefinitionImpl, viewportId: MVDHosting.ViewportId): void { - this.logger.warn('ZWED5160W'); //this.logger.warn('Not yet implemented: showapplicationinstancewindow'); - } - - isApplicationRunning(plugin: DesktopPluginDefinitionImpl): boolean { - const windowManager: MVDWindowManagement.WindowManagerServiceInterface = this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - return windowManager.getWindow(plugin) != null; - } - - getViewportComponentRef(viewportId: MVDHosting.ViewportId): ComponentRef | null { - const instanceId = this.viewportManager.getApplicationInstanceId(viewportId); - if (instanceId == null) { - return null; - } - - const applicationInstance = this.applicationInstances.get(instanceId); - if (applicationInstance != null) { - return applicationInstance.getComponentRefFor(viewportId); - } else { - return null; - } - } - - private getJavascriptObjectForApplication(appInstance:ApplicationInstance, viewportId: MVDHosting.ViewportId): any { - const componentRef = appInstance.viewportContents.get(viewportId); - if (componentRef) { - return componentRef.instance; - } else { - return null; - } - } - - setEmbeddedInstanceInput(embeddedInstance: EmbeddedInstance, input: string, value: any): void { - this.logger.debug("ZWED5296I", input, value); //this.logger.debug(`setEmbeddedInstanceInput '${input}' to value '${value}'`); - let appInstance = this.applicationInstances.get(embeddedInstance.instanceId); - if (appInstance == undefined) { - return; - } - const componentRef = appInstance.viewportContents.get(embeddedInstance.viewportId); - if (componentRef === undefined) { - return; - } - if (!appInstance.isMainComponentInput(input)) { - return; - } - const instance = componentRef.instance; - const previousValue = instance[input]; - if (previousValue === value) { - return; - } - instance[input] = value; - const onChanges = instance as OnChanges; - if (typeof onChanges.ngOnChanges === 'function') { - const change: SimpleChange = new SimpleChange(instance[input], value, false); - const changes: SimpleChanges = {}; - changes[input] = change; - onChanges.ngOnChanges(changes); - } - } - - getEmbeddedInstanceOutput(embeddedInstance: EmbeddedInstance, output: string): Observable | undefined { - this.logger.debug("ZWED5297I", output); //this.logger.debug(`getEmbeddedInstanceOutput '${output}'`); - let appInstance = this.applicationInstances.get(embeddedInstance.instanceId); - if (appInstance !== undefined) { - const componentRef = appInstance.viewportContents.get(embeddedInstance.viewportId); - if (componentRef !== undefined) { - const instance = componentRef.instance; - if (appInstance.isMainComponentOutput(output)) { - return instance[output]; - } - } - } - return undefined; - } - - killApplication(plugin:ZLUX.Plugin, appId:MVDHosting.InstanceId):void { - ZoweZLUX.dispatcher.deregisterPluginInstance(plugin, - appId); // instanceId is proxy handle to isntance - - } - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/injection-manager/injection-manager.service.ts b/virtual-desktop-v2/src/app/application-manager/injection-manager/injection-manager.service.ts deleted file mode 100644 index 18ee74933..000000000 --- a/virtual-desktop-v2/src/app/application-manager/injection-manager/injection-manager.service.ts +++ /dev/null @@ -1,119 +0,0 @@ - - -/* -This program and the accompanying materials are -made available under the terms of the Eclipse Public License v2.0 which accompanies -this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - -SPDX-License-Identifier: EPL-2.0 - -Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, Injector, NgModuleRef, ValueProvider } from '@angular/core'; -import { L10nConfigService } from './../../i18n/l10n-config.service'; -import { Angular2InjectionTokens } from 'pluginlib/inject-resources'; -import { LOAD_FAILURE_ERRORS } from '../load-failure/failure-injection-tokens'; -import { Viewport } from '../viewport-manager/viewport'; -import { L10nStorage, L10nTranslationLoader, L10N_CONFIG, L10N_LOCALE } from 'angular-l10n'; -import { L10nTranslationLoaderService } from 'app/i18n/l10n-translation-loader.service'; -import { HttpClient } from '@angular/common/http'; -import { L10nPluginStorageService } from 'app/i18n/l10n-plugin-storage.service'; -import { LanguageLocaleService } from 'app/i18n/language-locale.service'; - -const ComponentLoggerContainer:Map = new Map(); - -@Injectable() -export class InjectionManager { - constructor( - private injector: Injector, - private l10nConfigService: L10nConfigService, - ) { - - } - - // Angular2 injectors are built into a tree-like structure - // module injectors are a tree - // injector above in constructor is injector of the AppManager module - // generateModuleInjector make root injector augmented with addition providers - - generateModuleInjector(pluginDefinition: MVDHosting.DesktopPluginDefinition, launchMetadata: any, - instanceId: MVDHosting.InstanceId, messages?: any): Injector { - let identifier = pluginDefinition.getIdentifier(); - const plugin = pluginDefinition.getBasePlugin(); - - let logger:ZLUX.ComponentLogger|undefined = ComponentLoggerContainer.get(identifier); - if (!logger) { - logger = ZoweZLUX.logger.makeComponentLogger(identifier, messages); - ComponentLoggerContainer.set(identifier,logger); - } - return Injector.create([ - { - provide: Angular2InjectionTokens.LOGGER, - useValue: logger - }, - { - provide: Angular2InjectionTokens.PLUGIN_DEFINITION, - useValue: pluginDefinition - }, - { - provide: Angular2InjectionTokens.LAUNCH_METADATA, - useValue: launchMetadata - }, - { - provide: L10N_LOCALE, - useValue: this.l10nConfigService.getDefaultLocale() - }, - { - provide: L10N_CONFIG, - useValue: this.l10nConfigService.getL10nConfig(plugin) - }, - { - provide: L10nTranslationLoader, - useClass: L10nTranslationLoaderService, - deps: [HttpClient] - }, - { - provide: L10nStorage, - useClass: L10nPluginStorageService, - deps: [LanguageLocaleService] - }, - { - provide: Angular2InjectionTokens.INSTANCE_ID, - useValue: instanceId - } - ], this.injector.get(NgModuleRef).injector); // gets root injector of virtualDesktop tree - } - - generateComponentInjector(viewport: Viewport, parent: Injector): Injector { - var mappings: ValueProvider[] = []; - viewport.providers.forEach((value, provide) => { - mappings.push({ - provide: provide, - useValue: value - }); - }); - return Injector.create(mappings, parent); - } - - generateFailurePluginInjector(errors: any[]): Injector { - const errorProvider: ValueProvider = { - provide: LOAD_FAILURE_ERRORS, - useValue: errors - }; - - return Injector.create([errorProvider], this.injector); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/load-failure/failure-injection-tokens.ts b/virtual-desktop-v2/src/app/application-manager/load-failure/failure-injection-tokens.ts deleted file mode 100644 index ad63f8973..000000000 --- a/virtual-desktop-v2/src/app/application-manager/load-failure/failure-injection-tokens.ts +++ /dev/null @@ -1,27 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { InjectionToken } from '@angular/core'; - -export const LOAD_FAILURE_ERRORS = new InjectionToken('load-failure.errors'); - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/load-failure/failure.module.ts b/virtual-desktop-v2/src/app/application-manager/load-failure/failure.module.ts deleted file mode 100644 index 93f0d8881..000000000 --- a/virtual-desktop-v2/src/app/application-manager/load-failure/failure.module.ts +++ /dev/null @@ -1,43 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -import { LoadFailureComponent } from './load-failure.component'; - -@NgModule({ - imports: [ - CommonModule - ], - declarations: [ - LoadFailureComponent - ], - entryComponents: [ - LoadFailureComponent - ] -}) -export class FailureModule { - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.css b/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.css deleted file mode 100644 index c65b9a99b..000000000 --- a/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.css +++ /dev/null @@ -1,41 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -h1 { - text-align: center; - font-size: 100pt; -} - -.title { - text-align: center; - font-size: 15pt; -} - -.error-name { - font-weight: bold; -} - -.error-value { - padding-left: 20px; - text-indent: -20px; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.html b/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.html deleted file mode 100644 index 4eee77d69..000000000 --- a/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - -

?

-
The plugin failed to load
-
-
-
    -
  • - {{error.name}}: {{error.message}} -
  • -
-
- - - diff --git a/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.ts b/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.ts deleted file mode 100644 index b908394f6..000000000 --- a/virtual-desktop-v2/src/app/application-manager/load-failure/load-failure.component.ts +++ /dev/null @@ -1,39 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Inject } from '@angular/core'; - -import { LOAD_FAILURE_ERRORS } from 'app/application-manager/load-failure/failure-injection-tokens'; - -@Component({ - templateUrl: 'load-failure.component.html', - styleUrls: ['load-failure.component.css'] -}) -export class LoadFailureComponent { - constructor( - @Inject(LOAD_FAILURE_ERRORS) public errors: any[] - ) { - - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport-manager.service.ts b/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport-manager.service.ts deleted file mode 100644 index 517c05112..000000000 --- a/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport-manager.service.ts +++ /dev/null @@ -1,108 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable } from '@angular/core'; -import { Viewport } from './viewport'; -// import { InstanceId } from '../application-instance'; -import { BaseLogger } from 'virtual-desktop-logger'; - -@Injectable() -export class ViewportManager implements MVDHosting.ViewportManagerInterface { - private viewports: Map; - private viewportInstances: Map; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private closeHandlers: Map Promise>>; - constructor() { - this.viewports = new Map(); - this.viewportInstances = new Map(); - this.closeHandlers = new Map(); - } - - createViewport(providersProvider: any): MVDHosting.ViewportId { - const viewport = new Viewport(providersProvider); - this.viewports.set(viewport.viewportId, viewport); - - return viewport.viewportId; - } - - registerViewport(viewportId: MVDHosting.ViewportId, instanceId: MVDHosting.InstanceId): void { - if (this.viewportInstances.has(viewportId)) { - this.logger.warn("ZWED5161W", viewportId); //this.logger.warn('Attempting to replace an existing viewport id=${viewportId} in registration '); - } - - this.viewportInstances.set(viewportId, instanceId); - } - - registerViewportCloseHandler(viewportId: MVDHosting.ViewportId, handler: () => Promise):void { - let handlers = this.closeHandlers.get(viewportId); - if (!handlers) { - handlers = new Array<() => Promise>(); - this.closeHandlers.set(viewportId, handlers); - } - handlers.push(handler); - } - - private closeWatcherLoop(pos: number, handlers: Array<() => Promise>, finishedCallback: any, rejectCallback: any): void { - if (pos >= handlers.length) { - finishedCallback(); - } else { - handlers[pos]().then(()=> { - this.closeWatcherLoop(++pos, handlers, finishedCallback, rejectCallback); - }).catch((reason:any)=> { - rejectCallback(); - }); - } - } - - destroyViewport(viewportId: MVDHosting.ViewportId): Promise { - // TODO there may be other actions desired for destroyviewport - this.logger.info(`ZWED5044I`, viewportId); /*this.logger.info(`Closing viewport ID=${viewportId}`);*/ - return new Promise((resolve,reject)=> { - let handlers = this.closeHandlers.get(viewportId); - if (handlers) { - this.closeWatcherLoop(0,handlers,()=> { - resolve(null); - }, (reason:any)=> { - reject(reason); - }); - } else { - resolve(null); - } - }); - } - - getApplicationInstanceId(viewportId: MVDHosting.ViewportId): MVDHosting.InstanceId | null { - const id = this.viewportInstances.get(viewportId); - - if (id != null) { - return id; - } else { - return null; - } - } - - getViewport(viewportId: MVDHosting.ViewportId): Viewport | null { - return this.viewports.get(viewportId) || null; - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport.ts b/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport.ts deleted file mode 100644 index ea364f665..000000000 --- a/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport.ts +++ /dev/null @@ -1,50 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Angular2InjectionTokens } from 'pluginlib/inject-resources'; -import { BaseLogger } from 'virtual-desktop-logger'; - -export class Viewport { - private static nextViewportId: MVDHosting.ViewportId = 0; - readonly viewportId: MVDHosting.ViewportId; - readonly providers: Map; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - - constructor(providersProvider: any) { - this.viewportId = Viewport.nextViewportId ++; - this.providers = providersProvider(this.viewportId); - - this.checkProviders(); - } - - checkProviders(): void { - if (!this.providers.has(Angular2InjectionTokens.VIEWPORT_EVENTS)) { - this.logger.warn('ZWED5165W'); //this.logger.warn('No VIEWPORT_EVENTS provided to custom viewport. This may cause plugins to behave unexpectedly.'); - } - - if (!this.providers.has(Angular2InjectionTokens.PLUGIN_EMBED_ACTIONS)) { - this.logger.warn('ZWED5166W'); //this.logger.warn('No PLUGIN_EMBED_ACTIONS provided to custom viewport. This may cause plugins to behave unexpectedly.'); - } - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport/viewport.component.html b/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport/viewport.component.html deleted file mode 100644 index 202338acd..000000000 --- a/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport/viewport.component.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport/viewport.component.ts b/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport/viewport.component.ts deleted file mode 100644 index 184753e48..000000000 --- a/virtual-desktop-v2/src/app/application-manager/viewport-manager/viewport/viewport.component.ts +++ /dev/null @@ -1,52 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, ComponentRef, Input, Injector } from '@angular/core'; - -// import { ViewportId } from '../viewport'; -import { ApplicationManager } from '../../application-manager.service'; - -@Component({ - selector: 'com-rs-mvd-viewport', - templateUrl: 'viewport.component.html' -}) -export class ViewportComponent { - @Input() viewportId: MVDHosting.ViewportId | null; - - constructor( - private injector: Injector - ) { - } - - get componentRef(): ComponentRef | null { - if (this.viewportId == null) { - /* Viewport is not yet ready */ - return null; - } - - const applicationManager = this.injector.get(ApplicationManager); - - return applicationManager.getViewportComponentRef(this.viewportId); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/authentication-manager/authentication-manager.module.ts b/virtual-desktop-v2/src/app/authentication-manager/authentication-manager.module.ts deleted file mode 100644 index 1fcbf30c5..000000000 --- a/virtual-desktop-v2/src/app/authentication-manager/authentication-manager.module.ts +++ /dev/null @@ -1,60 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { HttpClientModule } from '@angular/common/http'; -import { ZluxPopupManagerModule } from '@zlux/widgets'; -import { LoginComponent } from './login/login.component'; -import { AuthenticationManager } from './authentication-manager.service'; -import { StartURLManagerModule } from '../start-url-manager'; -import { StorageService } from './storage.service'; -import { IdleWarnService } from './idleWarn.service'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - HttpClientModule, - ZluxPopupManagerModule, - StartURLManagerModule, - ], - declarations: [ - LoginComponent - ], - exports: [ - LoginComponent - ], - providers: [ - AuthenticationManager, - /* Expose authentication manager to window managers */ - { provide: MVDHosting.Tokens.AuthenticationManagerToken, useExisting: AuthenticationManager }, - StorageService, - IdleWarnService - ] -}) -export class AuthenticationModule { - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/authentication-manager/authentication-manager.service.ts b/virtual-desktop-v2/src/app/authentication-manager/authentication-manager.service.ts deleted file mode 100644 index cdbdd9d56..000000000 --- a/virtual-desktop-v2/src/app/authentication-manager/authentication-manager.service.ts +++ /dev/null @@ -1,379 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, Injector, EventEmitter } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable, throwError } from 'rxjs'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { PluginManager } from 'app/plugin-manager/shared/plugin-manager'; -import { StartURLManager } from '../start-url-manager'; -import { StorageService } from './storage.service'; -import { Subscription } from 'rxjs'; -import { map } from 'rxjs/operators'; - - -class ClearZoweZLUX implements MVDHosting.LogoutActionInterface { - onLogout(username: string | null): boolean { - ZoweZLUX.notificationManager.removeAll() - ZoweZLUX.dispatcher.clear(); - return true; - } -} - -class initializeNotificationManager implements MVDHosting.LoginActionInterface { - onLogin(username: string, plugins: ZLUX.Plugin[]): boolean { - ZoweZLUX.pluginManager.loadPlugins('bootstrap').then((res: any) => { - ZoweZLUX.notificationManager._setURL(ZoweZLUX.uriBroker.pluginWSUri(res[0], 'adminnotificationdata', ''), - ZoweZLUX.uriBroker.pluginRESTUri(res[0], 'adminnotificationdata', 'write')) - }) - return true; - } -} - - -//5 minutes default. Less if session is shorter than twice this -const WARNING_BEFORE_SESSION_EXPIRATION_MS = 300000; - -export type LoginExpirationIdleCheckEvent = { - shortestSessionDuration: number; - expirationInMS: number; -}; - -@Injectable() -export class AuthenticationManager { - username: string | null; - private postLoginActions: Array; - private preLogoutActions: Array; - readonly loginScreenVisibilityChanged: EventEmitter; - readonly loginExpirationIdleCheck: EventEmitter; - private nearestExpiration: number; - private expirations: Map; - private expirationWarning: any; - private storageSubscription: Subscription; - private readonly log: ZLUX.ComponentLogger = BaseLogger; - - constructor( - private storageService: StorageService, - public http: HttpClient, - private injector: Injector, - private pluginManager: PluginManager, - private startURLManager: StartURLManager - ) { - this.username = null; - this.postLoginActions = new Array(); - this.preLogoutActions = new Array(); - this.registerPreLogoutAction(new ClearZoweZLUX()); - this.registerPreLogoutAction(this.pluginManager) - this.registerPostLoginAction(new initializeNotificationManager()); - this.registerPostLoginAction(this.startURLManager); - this.loginScreenVisibilityChanged = new EventEmitter(); - this.loginExpirationIdleCheck = new EventEmitter(); - this.log = BaseLogger.makeSublogger("auth"); - this.storageSubscription = new Subscription(); - } - - subscribeStorageEvent() { - this.unsubscribeStorageEvent(); - this.storageSubscription = new Subscription(); - this.storageSubscription.add(this.storageService.sessionEvent.subscribe((reason:MVDHosting.LoginScreenChangeReason)=>{ - this.log.info('ZWED5060I', reason); // Logout on storage Event - //added extra property to avoid infinite loop - this.doLogoutInner(reason, true); - })); - } - - unsubscribeStorageEvent() { - this.storageSubscription.unsubscribe(); - } - - registerPostLoginAction(action:MVDHosting.LoginActionInterface):void { - this.postLoginActions.push(action); - } - - registerPreLogoutAction(action:MVDHosting.LogoutActionInterface):void { - this.preLogoutActions.push(action); - } - - getUsername(): string | null { - return this.username; - } - - defaultUsername(): string | null { - return window.localStorage.getItem('username'); - } - - checkSessionValidity(): Observable { - return this.http.get(ZoweZLUX.uriBroker.serverRootUri('auth-refresh')).pipe( - map(result => { - let jsonMessage = (result as any); - if (jsonMessage && jsonMessage.categories) { - let failedTypes = []; - let keys = Object.keys(jsonMessage.categories); - if (!this.username) { - this.username = this.defaultUsername(); - } - let needUsername = !!this.username; - for (let i = 0; i < keys.length; i++) { - const category = jsonMessage.categories[keys[i]]; - if (!category.success) { - failedTypes.push(keys[i]); - } else if (needUsername && jsonMessage.defaultCategory == keys[i]) { - //the ui needs to know what the primary username is even if you are signed into different accounts on different apps. So, here is a search for that handler. - //this could cause a casing difference: standard login uses casing typed, this uses server info. - let firstHandler = category[Object.keys(category)[1]]; - if (firstHandler.username) { - this.username = firstHandler.username; - } - } - } - if (this.username) { - (ZoweZLUX.logger as any)._setBrowserUsername(this.username); - } - if (failedTypes.length > 0) { - return throwError('');//no need for a message here, just standard login prompt. - } - this.setSessionTimeoutWatcher(jsonMessage.categories); - this.performPostLoginActions().subscribe( - ()=> { - this.log.debug('ZWED5298I'); //this.log.debug('Done performing post-login actions'); - this.loginScreenVisibilityChanged.emit(MVDHosting.LoginScreenChangeReason.UserLogin); - } - ); - return result; - } else { - return throwError((result as any).text()); - } - }));//or throw err to subscriber - } - - //requestLogin() used to exist here but it was counter-intuitive in behavior to requestLogout. - //This was not documented and therefore has been removed to prevent misuse and confusion. - - private doLogoutInner(reason: MVDHosting.LoginScreenChangeReason, isStorage: boolean = false): void { - const windowManager: MVDWindowManagement.WindowManagerServiceInterface = - this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - if (reason == MVDHosting.LoginScreenChangeReason.UserLogout) { - windowManager.autoSaveFileAllowDelete = false; - windowManager.closeAllWindows(); - } - - if(!isStorage) { - this.storageService.updateSessionEvent(reason); - } - - this.performLogout().subscribe( - response => { - if (reason == MVDHosting.LoginScreenChangeReason.UserLogout) { - this.username = null; - (ZoweZLUX.logger as any)._setBrowserUsername('N/A'); - } - this.loginScreenVisibilityChanged.emit(reason); - clearTimeout(this.expirationWarning); - this.unsubscribeStorageEvent(); - this.storageService.clearOnLogout(reason); - }, - (error: any) => { - this.loginScreenVisibilityChanged.emit(reason); - this.log.warn('ZWED5149E', error); //this.log.warn('Logout failed! Error=', error); - } - ); - } - - requestLogout(): void { - this.doLogoutInner(MVDHosting.LoginScreenChangeReason.UserLogout); - } - - public spawnApplicationsWithNoUsername(): any { - window.localStorage.setItem('username', ""); - this.username = ""; - (ZoweZLUX.logger as any)._setBrowserUsername(""); - this.performPostLoginActions().subscribe( - () => { - this.log.debug('ZWED5303I'); //this.log.debug('Done performing post-login actions'); - this.loginScreenVisibilityChanged.emit(MVDHosting.LoginScreenChangeReason.UserLogin); - } - ); - } - - private performPostLoginActions(launchAutoSaved?: boolean): Observable { - return new Observable((observer)=> { - this.pluginManager.loadApplicationPluginDefinitions().then((pluginDefs:MVDHosting.DesktopPluginDefinition[])=> { - let plugins = pluginDefs.map(plugin => plugin.getBasePlugin()); - if (this.username != null) { - for (let i = 0; i < this.postLoginActions.length; i++) { - let success = this.postLoginActions[i].onLogin(this.username, plugins); - this.log.debug("ZWED5299I", i, success); //this.log.debug(`LoginAction ${i}=${success}`); - } - } - observer.next(true); - observer.complete(); - }).catch((err:any)=> { - observer.error(err); - }); - - if (launchAutoSaved !== false) { - const windowManager: MVDWindowManagement.WindowManagerServiceInterface = this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - windowManager.launchDesktopAutoSavedApplications(); - } - }); - } - - private performPreLogoutActions() { - for (let i = 0; i < this.preLogoutActions.length; i++) { - let success = this.preLogoutActions[i].onLogout(this.username); - this.log.debug("ZWED5300I", i, success); //this.log.debug(`LogoutAction ${i}=${success}`); - } - ZoweZLUX.pluginManager.pluginsById.clear() - } - - private setSessionTimeoutWatcher(categories: any|undefined) { - if (!categories) { - return; - } - this.subscribeStorageEvent(); - clearTimeout(this.expirationWarning); - this.nearestExpiration = -1; - let canRefresh = true; - let expirations = new Map(); - let now = Date.now(); - for (let key in categories) { - let category:any = categories[key]; - let nearestExpirationForCategory: number = -1; - for (let pluginKey in category.plugins) { - let plugin = category.plugins[pluginKey]; - if (plugin.expms) { - if (nearestExpirationForCategory == -1 || nearestExpirationForCategory > plugin.expms) { - nearestExpirationForCategory = plugin.expms; - if (this.nearestExpiration == -1 || this.nearestExpiration > nearestExpirationForCategory) { - this.nearestExpiration = nearestExpirationForCategory; - // if the response does not include capabilities or capabilities.canRefresh - // we should assume true - // because a popup that fails is better than expiration when refresh is possible - canRefresh = true; - if (typeof plugin.capabilities === 'object') { - const capabilities: Partial = plugin.capabilities; - if (typeof capabilities.canRefresh === 'boolean') { - canRefresh = capabilities.canRefresh; - } - } - } - } - } - } - expirations.set(category, now+nearestExpirationForCategory); - } - this.expirations = expirations; - if (this.nearestExpiration != -1) { - //if someone has a very tiny session, adjust timer - let logoutAfterWarnTimer = this.nearestExpiration < (WARNING_BEFORE_SESSION_EXPIRATION_MS*2) ? - Math.round(this.nearestExpiration/5) : WARNING_BEFORE_SESSION_EXPIRATION_MS; - - let warnTimer = this.nearestExpiration - logoutAfterWarnTimer; - - this.expirationWarning = setTimeout(()=> { - this.log.info(`ZWED5022W`, logoutAfterWarnTimer/1000); /*this.log.info(`Session will expire soon! Logout will occur in ${logoutAfterWarnTimer/1000} seconds.`);*/ - this.log.debug("ZWED5301I", this.expirations); //this.log.debug(`Session expirations=`,this.expirations); - if (canRefresh) { - this.loginExpirationIdleCheck.emit({ - shortestSessionDuration: this.nearestExpiration, - expirationInMS: logoutAfterWarnTimer - }); - } - this.expirationWarning = setTimeout(()=> { - this.log.warn("ZWED5162W"); //this.log.warn(`Session timeout reached. Clearing desktop for new login.`); - this.doLogoutInner(MVDHosting.LoginScreenChangeReason.SessionExpired); - },logoutAfterWarnTimer); - },warnTimer); - this.log.debug("ZWED5302I", warnTimer); //this.log.debug(`Set session timeout watcher to notify ${warnTimer}ms before expiration`); - } - window.localStorage.setItem("ZoweZLUX.expirationTime",this.nearestExpiration.toString()) - } - - performSessionRenewal(): Observable { - this.log.info('ZWED5045I');/*this.log.info('Renewing session');*/ - return this.http.get(ZoweZLUX.uriBroker.serverRootUri('auth-refresh')).pipe(map(result=> { - let jsonMessage = (result as any); - if (jsonMessage && jsonMessage.success === true) { - this.log.info('ZWED5046I');/*this.log.info('Session renewal successful');*/ - this.setSessionTimeoutWatcher(jsonMessage.categories); - return result; - } else { - this.log.warn("ZWED5163W"); //this.log.warn('Session renewal unsuccessful'); - return throwError(result); - } - })); - } - - performPasswordReset(username: string, password: string, newPassword: string, serviceHandler: string): Observable { - return this.http.post(ZoweZLUX.uriBroker.serverRootUri('auth-password'), - {username: username, password: password, newPassword: newPassword, serviceHandler: serviceHandler}); - } - - performLogin(username: string, password: string): Observable { - if (this.username != null && (username != this.username)) { - const windowManager: MVDWindowManagement.WindowManagerServiceInterface = - this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - windowManager.closeAllWindows(); - } - const windowManager: MVDWindowManagement.WindowManagerServiceInterface = - this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - windowManager.autoSaveFileAllowDelete = true; - return this.http.post(ZoweZLUX.uriBroker.serverRootUri('auth'), { username: username, password: password }) - .pipe(map(result => { - let jsonMessage = (result as any); - if (jsonMessage && jsonMessage.success === true) { - this.setSessionTimeoutWatcher(jsonMessage.categories); - window.localStorage.setItem('username', username); - this.username = username; - (ZoweZLUX.logger as any)._setBrowserUsername(username); - this.performPostLoginActions().subscribe( - ()=> { - this.log.debug('ZWED5303I'); //this.log.debug('Done performing post-login actions'); - this.loginScreenVisibilityChanged.emit(MVDHosting.LoginScreenChangeReason.UserLogin); - }); - return result; - } else { - return throwError(result); - } - })); - } - - private performLogout(): Observable { - this.performPreLogoutActions(); - return this.http.post(ZoweZLUX.uriBroker.serverRootUri('auth-logout'), {}); - } - - requestPasswordChangeScreen() { - this.loginScreenVisibilityChanged.emit(MVDHosting.LoginScreenChangeReason.PasswordChange); - } - - hidePasswordChangeScreen() { - this.loginScreenVisibilityChanged.emit(MVDHosting.LoginScreenChangeReason.HidePasswordChange); - } - - passwordChangeSuccessfulScreen() { - this.loginScreenVisibilityChanged.emit(MVDHosting.LoginScreenChangeReason.PasswordChangeSuccess); - } -} - - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/authentication-manager/idleWarn.service.ts b/virtual-desktop-v2/src/app/authentication-manager/idleWarn.service.ts deleted file mode 100644 index 5f8f8123c..000000000 --- a/virtual-desktop-v2/src/app/authentication-manager/idleWarn.service.ts +++ /dev/null @@ -1,118 +0,0 @@ -import moment from 'moment'; -import { Injectable } from '@angular/core'; -import { ZluxPopupManagerService, ZluxErrorSeverity } from '@zlux/widgets'; -import { L10nTranslationService } from 'angular-l10n'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { Subscription } from 'rxjs'; -import { StorageService } from './storage.service'; - -@Injectable() -export class IdleWarnService { - - private report: any; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - - constructor(private popupManager: ZluxPopupManagerService, - public translation: L10nTranslationService, - private storageService: StorageService - ) { - } - - public createRetryErrorReport(renewSession: any, isIdle: any) { - this.removeErrorReport(); - this.report = this.popupManager.createErrorReport( - ZluxErrorSeverity.WARNING, - this.translation.translate('Session Renewal Error'), - this.translation.translate('Session could not be renewed. Logout will occur unless renewed. Click here to retry.'), - { - blocking: false, - buttons: [this.translation.translate('Retry'), this.translation.translate('Dismiss')] - } - ); - - this.report.subscription = new Subscription(); - this.onUserActionSubscribe(renewSession,'Retry'); - this.onActivitySubscribe(renewSession, isIdle); - } - - onUserActionSubscribe(renewSession: any, action: string) { - if(this.report) { - this.report.subscription.add(this.report.subject.subscribe((buttonName:any)=> { - if (buttonName == this.translation.translate(action)) { - renewSession(); - } - })); - } - } - - public createContinueErrorReport(renewSession: any, isIdle: any, expirationInMS: number, desktopSize: any) { - this.removeErrorReport(); - let popupStyle; - - /* According to the size of the desktop, we move the expiration prompt to align with the app bar */ - switch (desktopSize) { - case 3: { - popupStyle = { - 'margin-bottom': '70px', - 'margin-right': '-5px' - }; - break; - } - case 1: { - popupStyle = { - 'margin-bottom': '15px', - 'margin-right': '-10px' - }; - break; - } - default: { - popupStyle = { - 'margin-bottom': '35px', - 'margin-right': '-5px' - }; - break; - } - } - - this.report = this.popupManager.createErrorReport( - ZluxErrorSeverity.WARNING, - this.translation.translate('Session Expiring Soon'), - //TODO: Add translation - //this.translation.translate('You will be logged out at ', { expirationInMS: moment().add(expirationInMS/1000, 'seconds').format('LT') }), - this.translation.translate('You will be logged out at ' + moment().add(expirationInMS/1000, 'seconds').format('LT')), - { - blocking: false, - buttons: [this.translation.translate('Continue session')], - timestamp: false, - theme: "dark", - style: popupStyle, - callToAction: true - }); - - this.report.subscription = new Subscription(); - this.onUserActionSubscribe(renewSession, 'Continue session'); - this.onActivitySubscribe(renewSession, isIdle); - } - - - onActivitySubscribe(renewSession: any, isIdle: any) { - if(this.report) { - this.report.subscription.add(this.storageService.lastActive.subscribe(()=> { - if (!isIdle()) { - this.logger.info('ZWED5047I', 'renew on activity'); /*this.logger.info('Near session expiration, but renewing session due to activity');*/ - renewSession(); - this.removeErrorReport(); - } - })); - } - } - - removeErrorReport() { - if (this.report) { - this.popupManager.removeReport(this.report.id); - this.report.subscription.unsubscribe(); - this.report = undefined; - } - } - -} \ No newline at end of file diff --git a/virtual-desktop-v2/src/app/authentication-manager/login/login.component.css b/virtual-desktop-v2/src/app/authentication-manager/login/login.component.css deleted file mode 100644 index 071a19891..000000000 --- a/virtual-desktop-v2/src/app/authentication-manager/login/login.component.css +++ /dev/null @@ -1,225 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.desktop-cover { - position: fixed; - width: 100%; - height: 100%; - top: 0; - left: 0; - transition: 0.5s filter ease-out; -} - -.login-overlay { - width: 450px; - position: fixed; - top: 0; bottom: 0; - left: 0; right: 0; - margin: 0 auto; - - text-align: center; - background: white; - - display: flex; - flex-direction: column; - justify-content: center; -} - -.login-overlay > div { - background: white; - overflow-x: hidden; - max-height: fit-content; - padding: 20px 50px 100px; - min-height: 500px; - overflow: auto; -} - -.login-panel { - position: fixed; - width: 100%; - height: 100%; - top: 0; - left: 0; - background: url(../../../assets/images/background.jpg) no-repeat center/cover; -} - -.login-panel.hidden { - display: none; -} - -.login-form { - margin-top: 20%; - margin-left: auto; - margin-right: auto; - text-align: left; -} - -.login-form-expired { - margin-top: 0% !important; -} - -.password-login-form { - margin-left: auto; - margin-right: auto; - text-align: left; -} - -.password-login-form input { - width: 100%; - height: 30px; - padding-left: 10px; - margin-bottom: 10px; - border: 1px #777 solid; -} - -.login-form input { - width: 100%; - height: 30px; - padding-left: 10px; - margin-bottom: 10px; - border: 1px #777 solid; -} - -.login-form .userid { - font-family: 'Roboto', sans-serif; - color: #353535; -} - -.login-form .password { - font-family: 'Roboto', sans-serif; - text-transform: uppercase; -} - -.login-form label { - font-family: 'Roboto', sans-serif; - color: #474747; - margin-bottom: 0; -} - -.login-button { - text-align: center; - background-color: rgba(0, 51, 161, 1); - width: 350px; - height: 40px; - border: none; - border-radius: 7px; - color: white; -} - -.login-button-icon { - display: inline-block; - width: 76px; - height: 76px; - background-image: url('../../../assets/images/login/login-btn-normal.png'); - background-position: center center; - background-repeat: no-repeat; -} - -.login-button > .login-button-icon:hover { - background-image: url('../../../assets/images/login/login-btn-hover.png'); -} - -.login-button > .login-button-icon:active { - background-image: url('../../../assets/images/login/login-btn-pressed.png'); -} - -.login-button:disabled { - opacity: 0.3; - filter: grayscale(100%); -} - -.login-label { - font-family: 'Roboto', sans-serif; - font-size: 20px; - color: #474747; -} - -.login-plugin-version { - font-family: 'Roboto', sans-serif; - font-size: 16px; - color: #47474785; -} - -.login-click-blocker { - position: fixed; - height: 100%; - width: 100%; - top: 0; - left: 0; - z-index: 3; -} - -.login-error { - color: #f44336; - font-size: 12pt; -} - -.login-error-details { - width: 350px; - height: 50px; - color: #f44336; - font-size: 9pt; - border-color: Transparent; - border: none; - text-align: center; - outline: none; - overflow: auto; - resize: none; -} - -.error-details-wrapper { - padding-bottom: 20px; -} - -.login-message { - text-align: center; - background-color: lightgoldenrodyellow; - border-radius: 5px; -} - -.logo-img { - width: 90%; - margin: 1em; -} - -.password-logo-img { - width: 60%; - margin-top: -50px; -} - -.back-button { - font-family: 'Roboto-Medium', 'Roboto Medium', 'Roboto', sans-serif; - font-weight: 500; - font-style: normal; - font-size: 15px; - color: #4B8EFF; - border: none; - background: none; - width: 10%; - margin-left: 25px; - margin-top: 10px; -} - -.back-button:hover { - color:black; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/authentication-manager/login/login.component.html b/virtual-desktop-v2/src/app/authentication-manager/login/login.component.html deleted file mode 100644 index 5775206a7..000000000 --- a/virtual-desktop-v2/src/app/authentication-manager/login/login.component.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - -
- -
- - - - - - - - - diff --git a/virtual-desktop-v2/src/app/authentication-manager/login/login.component.ts b/virtual-desktop-v2/src/app/authentication-manager/login/login.component.ts deleted file mode 100644 index 03466977e..000000000 --- a/virtual-desktop-v2/src/app/authentication-manager/login/login.component.ts +++ /dev/null @@ -1,434 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, OnInit, ChangeDetectorRef, Injector } from '@angular/core'; -import { AuthenticationManager, - LoginExpirationIdleCheckEvent } from '../authentication-manager.service'; -import { L10nTranslationService } from 'angular-l10n'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { StorageService } from '../storage.service'; -import { StorageKey } from '../storage-enum'; -import { IdleWarnService } from '../idleWarn.service'; - -let ACTIVITY_IDLE_TIMEOUT_MS = 300000; //5 minutes -const HTTP_STATUS_PRECONDITION_REQUIRED = 428; -const PASSWORD_EXPIRED = "PasswordExpired"; - -type ErrorInfo = { - errorMessage: string; - errorDetails: string; - isFallback: boolean; -}; - -@Component({ - selector: 'rs-com-login', - templateUrl: 'login.component.html', - styleUrls: [ 'login.component.css' ] -}) -export class LoginComponent implements OnInit { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private readonly plugin: any = ZoweZLUX.pluginManager.getDesktopPlugin(); - logo: string = require('../../../assets/images/login/Zowe_Logo.png'); - passwordLogo: string = require('../../../assets/images/login/password-reset.png'); - isLoading:boolean; - needLogin:boolean; - changePassword:boolean; - locked: boolean; - username: string; - password: string; - newPassword: string; - confirmNewPassword: string; - errorMessage: string; - showErrorDetails: boolean; - errorDetails: string; - loginMessage: string; - expiredPassword: boolean; - private passwordServices: Set; - private themeManager: any; - public showLogin: boolean; - public enableExpirationPrompt: boolean; - - constructor( - private authenticationService: AuthenticationManager, - private storageService: StorageService, - public translation: L10nTranslationService, - private idleWarnService: IdleWarnService, - private cdr: ChangeDetectorRef, - private injector: Injector - ) { - this.themeManager = this.injector.get(MVDHosting.Tokens.ThemeEmitterToken); - this.isLoading = true; - this.needLogin = false; - this.changePassword = false; - this.locked = false; - this.username = ''; - this.password = ''; - this.newPassword = ''; - this.confirmNewPassword = ''; - this.errorMessage = ''; - this.expiredPassword = false; - this.passwordServices = new Set(); - this.enableExpirationPrompt = true; - this.renewSession = this.renewSession.bind(this); - this.isIdle = this.isIdle.bind(this); - this.showErrorDetails = false; - this.errorDetails = ''; - this.authenticationService.loginScreenVisibilityChanged.subscribe((eventReason: MVDHosting.LoginScreenChangeReason) => { - switch (eventReason) { - case MVDHosting.LoginScreenChangeReason.UserLogout: - this.needLogin = true; - this.passwordServices.clear(); - break; - case MVDHosting.LoginScreenChangeReason.UserLogin: - this.errorMessage = ''; - this.needLogin = false; - this.renewSession(); - this.detectActivity(); - break; - case MVDHosting.LoginScreenChangeReason.PasswordChange: - this.changePassword = true; - break; - case MVDHosting.LoginScreenChangeReason.PasswordChangeSuccess: - this.changePassword = false; - break; - case MVDHosting.LoginScreenChangeReason.HidePasswordChange: - this.changePassword = false; - break; - case MVDHosting.LoginScreenChangeReason.SessionExpired: - this.backButton(); - this.idleWarnService.removeErrorReport(); - this.errorMessage = this.translation.translate('Session Expired'); - this.needLogin = true; - break; - default: - this.logger.warn('ZWED5168W', eventReason); //this.logger.warn('Ignoring unknown login screen change reason='+eventReason); - } - this.isLoading = false; - }); - this.authenticationService.loginExpirationIdleCheck.subscribe((e: LoginExpirationIdleCheckEvent)=> { - //it's not just about if its idle, but how long we've been idle for or when we were last active - if (!this.isIdle()) { - this.logger.info('ZWED5047I'); /*this.logger.info('Near session expiration, but renewing session due to activity');*/ - this.renewSession(); - } else { - this.logger.info('ZWED5048I'); /*this.logger.info('Near session expiration. No activity detected, prompting to renew session');*/ - this.spawnExpirationPrompt(e.expirationInMS); - this.enableExpirationPrompt = true; - } - }); - this.showLogin = window.ZOWE_SWM_SHOW_LOGIN == true ? true : false; - } - - private isIdle(): boolean { - const activityTime = parseInt(StorageService.getItem(StorageKey.LAST_ACTIVE) || '0'); - let idle = (Date.now() - activityTime) > ACTIVITY_IDLE_TIMEOUT_MS; - this.logger.debug("ZWED5304I", activityTime, Date.now(), idle); - //this.logger.debug(`User lastActive=${lastActive}, now=${Date.now()}, idle={idle}`); - return idle; - } - - renewSession(): void { - this.authenticationService.performSessionRenewal().subscribe((result:any)=> { - this.idleWarnService.removeErrorReport(); - }, (errorObservable)=> { - this.idleWarnService.createRetryErrorReport(this.renewSession, this.isIdle); - }); - } - - spawnExpirationPrompt(expirationInMS: number): void { - let desktopSize = this.themeManager.mainSize || 2; - this.idleWarnService.createContinueErrorReport(this.renewSession, this.isIdle, expirationInMS, desktopSize) - } - - ngOnInit(): void { - this.passwordServices.clear(); - const storedUsername = this.authenticationService.defaultUsername(); - if (storedUsername != null) { - this.username = storedUsername; - } - this.isLoading = true; - this.authenticationService.checkSessionValidity().subscribe( - response => { - let jsonMessage = response; - if (jsonMessage.categories) { - let keys = Object.keys(jsonMessage.categories); - for (let i = 0; i < keys.length; i++) { - let plugins = Object.keys(jsonMessage.categories[keys[i]].plugins); - for (let j = 0; j < plugins.length; j++) { - if (jsonMessage.categories[keys[i]].plugins[plugins[j]].canChangePassword) { - this.passwordServices.add(plugins[j]); - } - } - } - } - this.needLogin = false; - }, errorObservable => { - let error = errorObservable.error; - if (error !== 'No Session Found') {//generated from auth manager, dont display to user - try { - let jsonMessage = error; - if(jsonMessage) { - if(jsonMessage.categories) { - let errorInfo = this.getErrorDetails(jsonMessage); - if (!errorInfo.isFallback) { - if (errorInfo.errorMessage) { - this.errorMessage = errorInfo.errorMessage; - } - if (errorInfo.errorDetails) { - this.errorDetails = errorInfo.errorDetails; - } - } - } - } - } catch (e) { - this.errorMessage = error; - } - } - this.isLoading = false; - if (!this.showLogin && window['GIZA_PLUGIN_TO_BE_LOADED']) { - this.authenticationService.spawnApplicationsWithNoUsername(); - this.enableExpirationPrompt = false; - this.needLogin = false; - } else { - this.needLogin = true; - } - }); - } - - considerSubmit(event: KeyboardEvent): void { - if (event.keyCode === 13) { - if (this.needLogin && !this.expiredPassword) { - this.attemptLogin(); - } else if (this.expiredPassword || this.changePassword) { - this.attemptPasswordReset(); - } - } - } - - detectActivity(): void { - this.storageService.updateLastActive(); - this.idleWarnService.removeErrorReport(); - } - - attemptPasswordReset(): void { - if (this.newPassword != this.confirmNewPassword) { - this.errorMessage = "New passwords do not match. Please try again."; - } else if (this.passwordServices.size == 0) { - this.errorMessage = "No password reset service available." - } else if (this.passwordServices.size != 1) { - this.errorMessage = "Multiple password reset is not available."; - } else { - this.authenticationService.performPasswordReset(this.username, this.password, this.newPassword, this.passwordServices.values().next().value).subscribe( - result => { - if (this.needLogin) { - this.password = this.newPassword; - this.attemptLogin(); - } - if (this.changePassword) { - this.authenticationService.passwordChangeSuccessfulScreen(); - } - this.loginMessage = ""; - this.errorMessage = ""; - this.password = ''; - this.newPassword = ''; - this.confirmNewPassword = ''; - }, - error => { - let jsonMessage = error.error; - this.loginMessage = ""; - this.errorMessage = jsonMessage.response; - } - ) - } - } - - attemptLogin(): void { - this.errorMessage = ''; - this.errorDetails = ''; - this.needLogin = false; - this.locked = true; - this.isLoading = true; - this.showErrorDetails = false; - // See https://github.com/angular/angular/issues/22426 - this.cdr.detectChanges(); - this.passwordServices.clear(); - if (this.username==null || this.username==''){ - this.errorMessage= this.translation.translate('UsernameRequired'); - this.password = ''; - this.locked = false; - this.needLogin = true; - this.isLoading = false; - return; - } - this.authenticationService.performLogin(this.username!, this.password!).subscribe( - ( result: any) => { - let jsonMessage = (result as any); - if (jsonMessage.categories) { - let nearestExpiration = -1; - let keys = Object.keys(jsonMessage.categories); - for (let i = 0; i < keys.length; i++) { - let category = jsonMessage.categories[keys[i]]; - let nearestExpirationForCategory = -1; - let pluginKeys = Object.keys(category.plugins); - for (let j = 0; j < pluginKeys.length; j++) { - let plugin = category.plugins[pluginKeys[j]]; - if (plugin.expms) { - if (nearestExpirationForCategory == -1 || nearestExpirationForCategory > plugin.expms) { - nearestExpirationForCategory = plugin.expms; - if (nearestExpiration == -1 || nearestExpiration > nearestExpirationForCategory) { - nearestExpiration = nearestExpirationForCategory; - window.localStorage.setItem("ZoweZLUX.expirationTime",nearestExpiration.toString()) - } - } - } - if (plugin.canChangePassword) { - this.passwordServices.add(pluginKeys[j]); - } - } - } - if (nearestExpiration != -1 && nearestExpiration < 300000) { - ACTIVITY_IDLE_TIMEOUT_MS = Math.round(nearestExpiration/2); - } else { - ACTIVITY_IDLE_TIMEOUT_MS = 300000; - } - } - if (this.expiredPassword) { - this.authenticationService.passwordChangeSuccessfulScreen(); - this.expiredPassword = false; - } - this.password = ''; - this.locked = false; - //little bit of a hack: uriBroker cant finish init due to needing environment which needs login - (ZoweZLUX.uriBroker as any).fetchAgentPrefix(); - }, - error => { - this.needLogin = true; - let jsonMessage = error.error; - if(jsonMessage) { - if(jsonMessage.categories) { - let keys = Object.keys(jsonMessage.categories); - for (let i = 0; i < keys.length; i++) { - let plugins = Object.keys(jsonMessage.categories[keys[i]].plugins); - for (let j = 0; j < plugins.length; j++) { - if (jsonMessage.categories[keys[i]].plugins[plugins[j]].canChangePassword) { - this.passwordServices.add(plugins[j]); - } - } - } - if (error.status == HTTP_STATUS_PRECONDITION_REQUIRED) { - this.expiredPassword = true; - this.loginMessage = this.translation.translate(PASSWORD_EXPIRED); - } else { - this.displayErrorDetails(jsonMessage); - this.password = ''; - } - } - } - else { - this.errorMessage = error.error.text(); - } - this.locked = false; - this.isLoading = false; - } - ); - } - - getPluginVersion(): string | null { - return "v. " + this.plugin.version; - } - - backButton(): void { - if (this.changePassword) { - this.authenticationService.hidePasswordChangeScreen(); - this.loginMessage = ""; - this.errorMessage = ""; - this.password = ""; - this.newPassword = ""; - this.confirmNewPassword = ""; - } - if (this.expiredPassword) { - this.expiredPassword = false; - this.loginMessage = ""; - this.errorMessage = ""; - this.newPassword = ""; - this.confirmNewPassword = ""; - } - } - - private getErrorDetails(jsonMessage: any): ErrorInfo { - let errorMessage: string=''; - let errorDetails: string=''; - let isFallback: boolean = false; - let failedTypes: string[] = []; - let failedPlugins = new Set(); - let err; - this.errorDetails = ''; - let keys = Object.keys(jsonMessage.categories); - for (let i = 0; i < keys.length; i++) { - if (!jsonMessage.categories[keys[i]].success) { - failedTypes.push(keys[i]); - let plugins = Object.keys(jsonMessage.categories[keys[i]].plugins); - for (let j = 0; j < plugins.length; j++) { - err = jsonMessage.categories[keys[i]].plugins[plugins[j]].error; - if(err) { - if(err.message) { - errorMessage = err.message; - } - if(!failedPlugins.has(plugins[j]) && (err.message || err.body)) { - // Appending the error message, error body and corresponding unique plugin-id that have errors - errorDetails += `${plugins[j]}: ${err.message === undefined ? "": err.message+"\n"}${err.body === undefined ? "":err.body+"\n"}`; - failedPlugins.add(plugins[j]) - } - } - } - } - } - if(!err || !this.errorMessage) { - isFallback = true; - errorMessage = this.translation.translate('AuthenticationFailed', - { numTypes: failedTypes.length, types: JSON.stringify(failedTypes) }); - } - return { - errorMessage, errorDetails, isFallback - } - } - - displayErrorDetails(jsonMessage:any): void { - let errorInfo = this.getErrorDetails(jsonMessage); - if (errorInfo.errorMessage) { - this.errorMessage = errorInfo.errorMessage; - } - if (errorInfo.errorDetails) { - this.errorDetails = errorInfo.errorDetails; - } - } - - expandError(): void { - this.showErrorDetails = true; - } - - collapseError(): void { - this.showErrorDetails = false; - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/authentication-manager/storage-enum.ts b/virtual-desktop-v2/src/app/authentication-manager/storage-enum.ts deleted file mode 100644 index 862c4ad1e..000000000 --- a/virtual-desktop-v2/src/app/authentication-manager/storage-enum.ts +++ /dev/null @@ -1,31 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -export const enum StorageKey { - LAST_ACTIVE = 'ZoweZLUX.lastActive', - I18_NEXT_LANG = 'i18nextLng', - USERNAME = 'username', - SESSION_EVENT = 'ZoweZLUX.sessionEvent', - EXPIRATION_TIME = 'ZoweZLUX.expirationTime' -}; - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/authentication-manager/storage.service.ts b/virtual-desktop-v2/src/app/authentication-manager/storage.service.ts deleted file mode 100644 index 288587dd3..000000000 --- a/virtual-desktop-v2/src/app/authentication-manager/storage.service.ts +++ /dev/null @@ -1,110 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ -import { Injectable, EventEmitter } from '@angular/core'; -import { StorageKey } from './storage-enum'; -import { BaseLogger } from 'virtual-desktop-logger'; - - -@Injectable() -export class StorageService { - public static setItem(key: string, newValue: string) { - window.localStorage.setItem(key, newValue); - } - - public static getItem(key: string): string | null { - return window.localStorage.getItem(key); - } - - public static removeItem(key: string) { - return window.localStorage.removeItem(key); - } - - public static clear(key: string) { - return window.localStorage.clear(); - } - - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - public lastActive:EventEmitter; - public sessionEvent:EventEmitter; - - constructor() { - this.lastActive = new EventEmitter(); - this.sessionEvent = new EventEmitter(); - this.storageEventHandler = this.storageEventHandler.bind(this); - window.addEventListener("storage", this.storageEventHandler); - } - - private storageEventHandler(event: StorageEvent) { - this.logger.debug('storageEventListener'); - if (event.storageArea == localStorage) { - const newValue = event.newValue; - switch(event.key) { - case StorageKey.LAST_ACTIVE: { - this.lastActive.emit(Number(newValue)); - } - break; - case StorageKey.SESSION_EVENT: { - this.emitSessionEvent(newValue || undefined); - } - break; - default: break; - } - } - } - - public updateLastActive() { - this.logger.debug('ZWED5305I'); //this.logger.debug('User activity detected'); - const activityTime = Date.now(); - StorageService.setItem(StorageKey.LAST_ACTIVE,activityTime.toString()); - this.lastActive.next(activityTime); - } - - public updateSessionEvent(reason: MVDHosting.LoginScreenChangeReason) { - this.logger.info('ZWED5062I'); // Update SESSION EVENT Storage - // appended timestamp at end of value to make value unique to trigger events - StorageService.setItem(StorageKey.SESSION_EVENT, reason.toString()+','+Date.now().toString()); - } - - private emitSessionEvent(newValue?: string | null) { - this.logger.debug('ZWED5063I', newValue); - let reason; - if(newValue && newValue.indexOf(',')>0) { - reason = newValue.split(',')[0]; - } - if(reason === MVDHosting.LoginScreenChangeReason.SessionExpired.toString() ) { - this.logger.info('ZWED5058I'); //Received Session Expired from Storage - this.sessionEvent.emit(MVDHosting.LoginScreenChangeReason.SessionExpired); - } else if (reason === MVDHosting.LoginScreenChangeReason.UserLogout.toString()) { - this.logger.info('ZWED5059I'); //Received Session Logout from Storage - this.sessionEvent.emit(MVDHosting.LoginScreenChangeReason.UserLogout); - } - } - - public clearOnLogout(reason: MVDHosting.LoginScreenChangeReason) { - this.logger.info('ZWED5061I'); //Clear Storage on Logout - StorageService.removeItem(StorageKey.LAST_ACTIVE); - StorageService.removeItem(StorageKey.SESSION_EVENT); - StorageService.removeItem(StorageKey.EXPIRATION_TIME) - } - -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/context-menu/context-menu.component.css b/virtual-desktop-v2/src/app/context-menu/context-menu.component.css deleted file mode 100644 index 740b280d1..000000000 --- a/virtual-desktop-v2/src/app/context-menu/context-menu.component.css +++ /dev/null @@ -1,165 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -li.disabled { - pointer-events: none; -} - -.menuitem-content.disabled { - opacity: 0.3; -} - -.context-menu .menuitem-content.disabled { - color: #9b9ea4; -} - -.context-menu { - position: absolute; - z-index: 20000; - min-width: 180px; - width: auto; - -webkit-box-shadow: 3px 3px 2px 1px #0000004a; - -moz-box-shadow: 3px 3px 2px 1px #0000004a; - box-shadow: 3px 3px 2px 1px #0000004a; -} - -.context-menu .menu-item.active { - background-color: #55585c; - border-color: #f3f4f4; -} - -.context-menu .menu-item.top { - border-top-width: 1px; - border-radius: 4px 4px 0 0; -} - -.context-menu .menu-item.bottom { - border-bottom-width: 1px; - border-radius: 0 0 4px 4px; -} - -.context-menu>ul { - list-style: none; - padding: 0; - margin: 0; -} - -.context-menu .menu-item { - background-color: #1f242d; /* Blue-shifted version of Cool Gray 90 */ - width: 100%; - height: auto; - padding:3px; - font-family: 'Helvetica', sans-serif; - font-size: 14px; - font-weight: 400; - white-space:nowrap; - color: #f3f4f4; - border-style: solid; - border-width: 1px 1px 1px 1px; - border-color: #3d3f42; - cursor: pointer; - position:relative; -} - -.context-menu .multi-menu-item .menu-expand-caret { - position: absolute; - margin: auto; - top: 0; - bottom: 0; - right: 5px; - width: 0; - height: 0; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid #666; -} - -.context-menu .multi-menu-item.propagateChildLeft { - left: 5px; - margin: auto; - margin-left: 0; - margin-right: 0; - border-left: none; - border-right: 5px solid #666; -} - -.context-menu .multi-menu-item.active>.menu-expand-caret { - border-left: 5px solid #fff; -} - -.context-menu .multi-menu-item.active>.submenu { - display: block; -} - -.context-menu .multi-menu-item>.submenu { - right: 0px; - top: 0; - position: absolute; - display: none; - z-index: 1; -} - -.context-menu .multi-menu-item>.submenu.propagateChildLeft { - left: 0px; -} - -.context-menu .multi-menu-item>.submenu>.mvd-context-menu>.context-menu { - left: 0; - top: 0; -} - -.context-menu .multi-menu-item>.submenu>.mvd-context-menu>.context-menu.propagateChildLeft>ul { - position: absolute; - right: 100%; -} - -.menuitem-content { - display: flex; - justify-content: space-between; -} - -.menuitem-content-left { - display: flex; - margin-right: 15px; -} - -.icon { - width: 19px; - height: 19px; - margin-right: 5px; - background-size: contain; -} - -.icon.propagateChildLeft { - margin-left: 25px; -} - -.shortcut { - margin-left: 15px; - right: 5px; - font-weight: bold; -} - -.hide-icon { - display: none; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/context-menu/context-menu.component.html b/virtual-desktop-v2/src/app/context-menu/context-menu.component.html deleted file mode 100644 index 8c10df601..000000000 --- a/virtual-desktop-v2/src/app/context-menu/context-menu.component.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - -
-
    - - - - - - - - - -
-
- - - diff --git a/virtual-desktop-v2/src/app/context-menu/context-menu.component.ts b/virtual-desktop-v2/src/app/context-menu/context-menu.component.ts deleted file mode 100644 index 07d684a9c..000000000 --- a/virtual-desktop-v2/src/app/context-menu/context-menu.component.ts +++ /dev/null @@ -1,408 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { - Input, - Component, - EventEmitter, - Output, - HostListener, - ElementRef, - ViewChild, - ViewChildren, - AfterViewInit, - QueryList, -} from '@angular/core'; - -import { ContextMenuItem } from 'pluginlib/inject-resources'; -import { DomSanitizer } from '@angular/platform-browser'; - -@Component({ - selector: 'com-rs-mvd-context-menu', - templateUrl: './context-menu.component.html', - styleUrls: ['./context-menu.component.css'], -}) -export class ContextMenuComponent implements AfterViewInit { - static ItemHeight:number; - _itemHeight: number; - hovering: ContextMenuItem; - newX: number; - newY: number; - menuHeight: number; - menuWidth: number; - activeIndex: number; // Index of active item in menu. -1 if none active. - _isChildMenu: boolean; // True if menu is child of another menu, false otherwise. - _isParentActive: boolean; // True if parent item is active (ie. menu should be displayed), false otherwise. - isNavigable: boolean; // True if menu is keyboard-navigable, false otherwise. Only one menu can be navigable at a time. - _propagateChildLeft: boolean; // True if child menus will appear to the left of their parent. - _parentText: string; // Text of parent menu item - children: { [key: string]: any }; // Array of child elements - - @ViewChild('contextmenu') - set menu(contextmenu: any) { - contextmenu.nativeElement.style.opacity = 0; - setTimeout(() => { - let menuWidth = contextmenu.nativeElement.clientWidth; - if (!ContextMenuComponent.ItemHeight) { - ContextMenuComponent.ItemHeight = Math.floor(contextmenu.nativeElement.clientHeight / this.menuItems.length); - } - //hack for template - this._itemHeight = ContextMenuComponent.ItemHeight; - // Apply specific styling to parent menu, and to parent menu that will propagate children to the left. - if (!this._isChildMenu) { - this.newY = this.validateY(this.newY, contextmenu.nativeElement.clientHeight); - this.newX = this.validateX(this.newX, menuWidth); - if (!this._propagateChildLeft) { - this.newX = this.newX + 3; - } - } else { - this.newY = this.validateY(this.newY, (ContextMenuComponent.ItemHeight*this.menuItems.length), this.parentY); - } - contextmenu.nativeElement.style.opacity = 1; - this.menuHeight = contextmenu.nativeElement.clientHeight; - this.menuWidth = menuWidth; - this.activeIndex = -1; // By default, no item is selected. - this._isParentActive = false; // Since by default no item is selected, all parent items are inactive. - this.isNavigable = !this._isChildMenu; // By default, surface-depth menu is navigable, and all others are not. - }, 0); - } - - @ViewChildren(ContextMenuComponent) _children: QueryList; - - // Set initial horizontal position of menu - @Input() set xPos(xPos: number) { - this.newX = xPos + 2; - }; - - // Set initial vertical position of menu - @Input() set yPos(yPos: number) { - this.newY = yPos + 4; - }; - - // Set initial vertical position of menu - @Input() parentY: number; - - // Initialize array of menu items - @Input() menuItems: ContextMenuItem[]; - - // Declare value of _isChildMenu based on input isChildMenu - // This is set on every child menu - @Input() set isChildMenu(isChildMenu: boolean) { - this._isChildMenu = isChildMenu; - }; - - // Set values of _isParentActive and activeIndex based on input isParentActive - // _isParentActive set to true by parent menu if activeIndex of parent menu corresponds to this child menu - // activeIndex set to existing value of activeIndex if parent is active (ie. child menu visible), -1 otherwise, so that any active item in child menu reset when child meny disappears, thus none selected when it reappears. - @Input() set isParentActive(isParentActive: boolean) { - this._isParentActive = isParentActive; // Set _isParentActive based on input - this.activeIndex = isParentActive ? this.activeIndex : -1; // If parent not active, reset this.activeIndex to -1 - }; - - // Set value of isNavigable based on input parentNavigable. - // If parent menu is navigable, child menu cannot be. - @Input() set parentNavigable(parentNavigable: boolean) { - if (parentNavigable) { - this.isNavigable = false; - } - }; - - // Set value of parentText based on input - @Input() set parentText(parentText: string) { - this._parentText = parentText; - }; - - // If parent propagated child left, child should also propagate its child left. - @Input() set propagateChildLeft(propagateChildLeft: boolean) { - this._propagateChildLeft = propagateChildLeft; - } - - @Output() complete: EventEmitter; - - @Output() makeParentUnnavigable = new EventEmitter(); - - @Output() makeParentNavigable = new EventEmitter(); - - @Output() sendRefToParent = new EventEmitter(); - - constructor( - private elementRef: ElementRef, - private sanitizer:DomSanitizer, - ) { - this.complete = new EventEmitter(); - } - - // Make menu navigable, and emit makeParentUnnavigable event. - // Emitting makeParentUnnavigable event will trigger any parent menu to call makeUnnavigable(). - makeNavigable = () => { - // Make navigable - this.isNavigable = true; - // If menu has parent, un-focus parent - if (this._isChildMenu) { - this.makeParentUnnavigable.emit() - } - } - - // Make menu unnavigable, and emit makeParentUnnavigable event. - // Emitting makeParentUnnavigable event will recursively make all subsequent parent menus call makeUnnavigable(). - makeUnnavigable() { - // Make un-navigable - this.isNavigable = false; - // If menu has parent, un-focus parent - if (this._isChildMenu) { - this.makeParentUnnavigable.emit() - } - } - - // After child elements retrieved from DOM, convert from array to object for faster access - ngAfterViewInit() { - this.elementRef.nativeElement.focus() - this.children = this._children.toArray().reduce((acc, curr) => ( - { - ...acc, - [curr._parentText]: curr - } - ), {}) - } - - // Recalculate horizontal position at which to spawn menu, correcting for proximity to edges of screen - validateX(xPos: number, menuWidth: number): number { - let menuLeft = xPos; - let menuRight = xPos + menuWidth; - let screenWidth = window.innerWidth - 10; /* Give a 10 pixel buffer so isn't right on the edge */ - // If initial position or menu too close to right edge of screen, shift left until right edge of menu is at least 10px from right edge of screen - if (menuRight > screenWidth) { - this._propagateChildLeft = true; - let overshoot = menuLeft - screenWidth; - xPos = xPos - (menuWidth + (overshoot > 0 ? overshoot : 0)) - } - // If initial position or menu too close to left edge of screen, shift right until left edge of menu is at least 10px from left edge of screen - if (menuLeft < 10) { - let difference = 10 - menuLeft; - xPos = xPos + difference; - } - return xPos; - } - - // Recalculate vertical position at which to spawn menu, correcting for proximity to edges of screen - validateY(yPos: number, menuHeight: number, parentY?: number): number { - let menuTop = parentY ? parentY : yPos; - let menuBottom = menuTop + menuHeight; - let screenHeight = window.innerHeight - 10; /* Give a 10 pixel buffer so isn't right on the edge */ - // If initial position of menu too close to bottom of screen, shift left until bottom edge of menu is at least 10px from bottom of screen - if (menuBottom > screenHeight) { - let overshoot = menuTop - screenHeight; - yPos = yPos - (menuHeight + (overshoot > 0 ? overshoot : 0)); - if (parentY) { - yPos += ContextMenuComponent.ItemHeight; - } - } - // If initial position of menu too close to top of screen, shift left until top edge of menu is at least 10px from top of screen - if (menuTop < 10) { - let difference = 10 - menuTop; - yPos = yPos + difference; - } - return yPos; - } - - // Triggered when menu item clicked. - // If item has associated action and is not disabled, execute action - itemClicked(menuItem: ContextMenuItem): void { - if (menuItem.action && !menuItem.disabled) { - menuItem.action(); - } - if (!menuItem.preventCloseMenu) { - this.closeContextMenu(); - } - } - - // Close context menu - closeContextMenu = (): void => { - this.complete.emit(); - } - - // Set active index - setActiveIndex = (index: number) => { - this.activeIndex = index; - } - - computeShortcutString = (item: ContextMenuItem) => { - let shortcutString = ""; - if (item.shortcutProps) { - let props = item.shortcutProps; - if (props.altKey) { - shortcutString += "Alt "; - } - if (props.ctrlKey) { - shortcutString += "Ctrl "; - } - if (props.metaKey) { - shortcutString += "Cmd "; - } - if (props.shiftKey) { - shortcutString += "Shift "; - } - } - if (item.shortcutText) { - shortcutString += item.shortcutText; - } - return shortcutString; - } - - generateIcon = (base64Image: string) => { - return this.sanitizer.bypassSecurityTrustResourceUrl(base64Image); - } - - shortcutProps?: { - "code": string; - "altKey": boolean; - "ctrlKey": boolean; - "metaKey": boolean; - "shiftKey": boolean; - }; - - // When area of screen outside of menu is clicked, close menu - @HostListener('document:mousedown', ['$event']) - onMouseDown(event: MouseEvent): void { - if (event && !this.elementRef.nativeElement.contains(event.target) && !this._isChildMenu) { - this.closeContextMenu(); - } - } - - // When window resized, close menu - @HostListener('window:resize') - onResize(): void { - this.closeContextMenu(); - } - - // Handle key presses that occur while context menu is open - @HostListener('window:keydown', ['$event']) - onWindowKeyDown(event: KeyboardEvent) { - // console.log(event) - let mod = (x: number, n: number): number => ((x == -2 ? -1 : x % n) + n) % n; - let hasChildren; - if (this.activeIndex > -1) { - hasChildren = this.menuItems && this.menuItems[this.activeIndex].children ? true : false; - } - // Execute action of any visible item whose shortcut has been pressed - if (this.elementRef.nativeElement.firstChild.scrollWidth > 0) { - this.menuItems.forEach(item => { - if (!item.disabled && item.shortcutProps && item.action) { - // If all properties of shortcut associated with given item match those of key(s) clicked, execute action associated with item. - if (Object.keys(item.shortcutProps).every(shortcutProp => ((event)[shortcutProp] === (item.shortcutProps)[shortcutProp]))){ - event.preventDefault(); - item.action(); - if (!item.preventCloseMenu) { - this.closeContextMenu(); - } - } - } - }) - } - // Perform navigation of navigable menu - if (this.isNavigable) { - let newIndex; - switch (event.key){ - case 'ArrowUp': - newIndex = mod(this.activeIndex - 1, this.menuItems.length) - while (this.menuItems[newIndex].disabled) { - newIndex = mod(newIndex - 1, this.menuItems.length) - } - this.activeIndex = newIndex; - event.stopPropagation(); - event.preventDefault(); - break; - case 'ArrowDown': - newIndex = mod(this.activeIndex + 1, this.menuItems.length) - while (this.menuItems[newIndex].disabled) { - newIndex = mod(newIndex + 1, this.menuItems.length) - } - this.activeIndex = newIndex; - event.stopPropagation(); - event.preventDefault(); - break; - case 'ArrowRight': - if (this._propagateChildLeft) { - if (this.isNavigable && this._isChildMenu) { - this.makeParentNavigable.emit(); - this.setActiveIndex(-1); - } - } else { - if (hasChildren) { - this.makeUnnavigable(); // Make un-navigable because navigability will transfer to child menu - setTimeout(() => { - this.children[this.menuItems[this.activeIndex].text].makeNavigable(); - this.children[this.menuItems[this.activeIndex].text].setActiveIndex(0); - }, 0) - } - } - event.stopPropagation(); - event.preventDefault(); - break; - case 'ArrowLeft': - if (this._propagateChildLeft) { - if (hasChildren) { - this.makeUnnavigable(); // Make un-navigable because navigability will transfer to child menu - setTimeout(() => { - this.children[this.menuItems[this.activeIndex].text].makeNavigable(); - this.children[this.menuItems[this.activeIndex].text].setActiveIndex(0); - }, 0) - } - } else { - if (this.isNavigable && this._isChildMenu) { - this.makeParentNavigable.emit(); - this.setActiveIndex(-1); - } - } - event.stopPropagation(); - event.preventDefault(); - break; - case 'Enter': - let item = this.menuItems[this.activeIndex]; - if (item.action) { - item.action(); - } - if (!item.preventCloseMenu) { - this.closeContextMenu(); - } - event.stopPropagation(); - event.preventDefault(); - break; - case 'Escape': - this.closeContextMenu(); - event.stopPropagation(); - event.preventDefault(); - break; - } - } - } - - mouseLeave(event: any) { - this.activeIndex = -1; // When cursor leaves, no item is selected. - } - -} - - - - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/context-menu/context-menu.module.ts b/virtual-desktop-v2/src/app/context-menu/context-menu.module.ts deleted file mode 100644 index 3b63a6983..000000000 --- a/virtual-desktop-v2/src/app/context-menu/context-menu.module.ts +++ /dev/null @@ -1,41 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { ContextMenuComponent } from './context-menu.component'; -import { CommonModule } from '@angular/common'; - -@NgModule({ - imports: [ - CommonModule - ], - declarations: [ - ContextMenuComponent - ], - exports: [ - ContextMenuComponent - ] -}) -export class ContextMenuModule { - -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/i18n/globalization.ts b/virtual-desktop-v2/src/app/i18n/globalization.ts deleted file mode 100644 index d7952d030..000000000 --- a/virtual-desktop-v2/src/app/i18n/globalization.ts +++ /dev/null @@ -1,127 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { BaseLogger } from '../shared/logger'; - -export class Globalization implements ZLUX.Globalization { - - - private readonly plugin: ZLUX.Plugin = ZoweZLUX.pluginManager.getDesktopPlugin(); - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - - private readonly resourcePath = 'browser-preferences'; - // Maybe this could be a constructor arg in the future - private readonly preferencePrefix = 'org.zowe.zlux.zlux-app-manager.preferences'; // this.plugin.getIdentifier(); - - constructor() { - } - - setPreference(preference: string, value: string): Promise { - const uri = ZoweZLUX.uriBroker.pluginRESTUri(this.plugin, this.resourcePath, ''); - this.logger.info(`ZWED5049I`, preference, value, uri); /*this.logger.info(`set preference ${preference} to ${value} at uri ${uri}`);*/ - const body: any = {}; - body[`${this.preferencePrefix}.${preference}`] = value; - - return new Promise(function (resolve, reject) { - const xhr: XMLHttpRequest = new XMLHttpRequest(); - xhr.open('POST', uri); - - xhr.onload = function () { - const status: number = this.status; - if (status >= 200 && status < 300) { - resolve(xhr.response); - } else { - reject(xhr.response) - } - } - - xhr.onerror = function () { - reject(xhr.response); - } - - xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - - xhr.send(JSON.stringify(body)); - - }); - } - - getPreferences(preferencePrefix: string): any { - // this is the only part of the client code that knows the preferences - // are cookies - const cookieStrings: string[] = document.cookie.split(';'); - const preferences: any = {}; - - for (const cookieString of cookieStrings) { - const pair: string[] = cookieString.split('='); - // apparently the cookieString is not reliable with regard to where the spaces are - const left: string = pair[0].trim(); - - if (left.startsWith(preferencePrefix)) { - const key = left.substring(this.preferencePrefix.length + 1).trim(); - const right: string = pair[1]; - preferences[key] = right && right.trim(); - } - } - - return preferences; - } - - getPreference(key: string): string { - const preferences = this.getPreferences(this.preferencePrefix); - - return preferences[key]; - } - - /** - * @returns The one or two-part language (the ISO-639 language abbreviation and optional ISO-3166 country code - * e.g., 'en' or 'en-US'). - * This defaults to the navigator.language, but can be overriden by setLanguage - */ - getLanguage(): string { - const configuredLanguage = this.getPreference('language') - - if (configuredLanguage) { - return configuredLanguage; - } else { - return navigator.language; - } - } - - /** - * @returns the ISO-3166 country code. This defaults to the subtag of the navigator.language(if present), but - * can be overriden by setLocale. If no subtag is provided, this will return US - * NOTE: this locale can differ from the ISO-3166 country code of the navigator.language. This option is provided - * in light of the recommendations from W3C: https://www.w3.org/International/questions/qa-accept-lang-locales - */ - getLocale(): string { - const configuredLanguage = this.getPreference('locale') - - if (configuredLanguage) { - return configuredLanguage; - } else { - const navigatorLanguage: string[] = navigator.language.split('-'); - if (navigatorLanguage && navigatorLanguage.length > 1) { - return navigatorLanguage[1]; - } else { - return 'US'; - } - } - } - - setLanguage(language: string): Promise { - return this.setPreference('language', language); - } - - setLocale(locale: string): Promise { - return this.setPreference('locale', locale); - } - -} diff --git a/virtual-desktop-v2/src/app/i18n/i18n.module.ts b/virtual-desktop-v2/src/app/i18n/i18n.module.ts deleted file mode 100644 index 5edbc8200..000000000 --- a/virtual-desktop-v2/src/app/i18n/i18n.module.ts +++ /dev/null @@ -1,70 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule, APP_INITIALIZER, LOCALE_ID } from '@angular/core'; -import { LanguageLocaleService } from './language-locale.service'; -import { localeInitializer, localeIdFactory } from './locale-initializer.provider'; -import { HttpClientModule } from '@angular/common/http'; -import { L10nConfig, L10nIntlModule, L10nTranslationModule, L10nTranslationService } from 'angular-l10n'; -import { L10nStorageService } from './l10n-storage.service'; -import { L10nConfigService } from './l10n-config.service'; -import { L10nTranslationLoaderService } from './l10n-translation-loader.service'; - -export const l10nConfig: L10nConfig = { - format: 'language-region', - providers: [ - { name: 'app', asset: null, options: {plugin: ZoweZLUX.pluginManager.getDesktopPlugin()} }, - ], - cache: true, - keySeparator: '.', - defaultLocale: { language: 'en-US' }, - schema: [], -}; -@NgModule({ - imports: [ - HttpClientModule, - L10nTranslationModule.forRoot( - l10nConfig, - { - translationLoader: L10nTranslationLoaderService, - storage: L10nStorageService, - } - ), - L10nIntlModule - ], - providers: [ - L10nConfigService, - { provide: LOCALE_ID, useFactory: localeIdFactory, deps: [LanguageLocaleService] }, - { - provide: APP_INITIALIZER, - multi: true, - useFactory: localeInitializer, - deps: [LanguageLocaleService, LOCALE_ID] - } - ] -}) -export class I18nModule { - constructor(private translation: L10nTranslationService) { - this.translation.init(); - } - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/i18n/l10n-config.service.ts b/virtual-desktop-v2/src/app/i18n/l10n-config.service.ts deleted file mode 100644 index 5f5027df0..000000000 --- a/virtual-desktop-v2/src/app/i18n/l10n-config.service.ts +++ /dev/null @@ -1,54 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable } from '@angular/core'; -import { L10nConfig, L10nLocale } from 'angular-l10n'; -import { LanguageLocaleService } from './language-locale.service'; - -@Injectable() -export class L10nConfigService { - constructor( - private languageLocaleService: LanguageLocaleService - ) { - } - - getDefaultLocale(): L10nLocale { - const language = this.languageLocaleService.getBaseLanguage(); - const locale = this.languageLocaleService.getLocale(); - const composedLanguage = locale ? `${language}-${locale}` : language; - return { - language: composedLanguage - }; - } - - getL10nConfig(plugin: ZLUX.Plugin): L10nConfig { - return { - format: 'language-region', - providers: [ - { name: 'app', asset: null, options: { plugin } }, - ], - cache: true, - keySeparator: '.', - defaultLocale: this.getDefaultLocale(), - schema: [], - }; - } - - } - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/i18n/l10n-plugin-storage.service.ts b/virtual-desktop-v2/src/app/i18n/l10n-plugin-storage.service.ts deleted file mode 100644 index 41acbbb08..000000000 --- a/virtual-desktop-v2/src/app/i18n/l10n-plugin-storage.service.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* -This program and the accompanying materials are -made available under the terms of the Eclipse Public License v2.0 which accompanies -this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - -SPDX-License-Identifier: EPL-2.0 - -Copyright Contributors to the Zowe Project. -*/ - -import { Injectable } from '@angular/core'; -import { L10nLocale, L10nStorage } from 'angular-l10n'; -import { LanguageLocaleService } from './language-locale.service'; - -@Injectable() -export class L10nPluginStorageService implements L10nStorage { - - constructor(private localeService: LanguageLocaleService) { - - } - - public async read(): Promise { - const language = this.localeService.getLanguage(); - return Promise.resolve({ language }); - } - - public async write(_l11Locale: L10nLocale): Promise { - // plugins are not allowed to change language globally - } - -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/i18n/l10n-storage.service.ts b/virtual-desktop-v2/src/app/i18n/l10n-storage.service.ts deleted file mode 100644 index 373b70e0d..000000000 --- a/virtual-desktop-v2/src/app/i18n/l10n-storage.service.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* -This program and the accompanying materials are -made available under the terms of the Eclipse Public License v2.0 which accompanies -this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - -SPDX-License-Identifier: EPL-2.0 - -Copyright Contributors to the Zowe Project. -*/ - -import { Injectable } from '@angular/core'; -import { L10nLocale, L10nStorage } from 'angular-l10n'; -import { mapTo } from 'rxjs/operators'; -import { LanguageLocaleService } from './language-locale.service'; - -@Injectable() -export class L10nStorageService implements L10nStorage { - - constructor(private localeService: LanguageLocaleService) { - - } - - public async read(): Promise { - const language = this.localeService.getLanguage(); - return Promise.resolve({ language }); - } - - public async write(l11Locale: L10nLocale): Promise { - return this.localeService.setLanguage(l11Locale.language).pipe(mapTo(void (0))).toPromise(); - } - -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/i18n/l10n-translation-loader.service.ts b/virtual-desktop-v2/src/app/i18n/l10n-translation-loader.service.ts deleted file mode 100644 index ac57aa07b..000000000 --- a/virtual-desktop-v2/src/app/i18n/l10n-translation-loader.service.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { L10nTranslationLoader, L10nProvider } from 'angular-l10n'; -import { Observable, of } from 'rxjs'; -import { catchError } from 'rxjs/operators'; - -export type KeyValue = { [key: string]: any }; - -@Injectable() -export class L10nTranslationLoaderService implements L10nTranslationLoader { - - constructor(private http: HttpClient) { - } - - public get(composedLanguage: string, provider: L10nProvider): Observable { - const plugin: ZLUX.Plugin | undefined = provider.options?.plugin; - if (!plugin) { - return of({}); - } - const asset = `assets/i18n/messages`; - const prefix = ZoweZLUX.uriBroker.pluginResourceUri(plugin, asset); - const [language, _locale] = composedLanguage.split('-'); - const composedLanguageUrl = `${prefix}.${composedLanguage}.json`; - const languageUrl = `${prefix}.${language}.json`; - const fallbackUrl = `${prefix}.en.json`; - - return this.load(composedLanguageUrl).pipe( - catchError(_err => this.load(languageUrl)), - catchError(_err => this.load(fallbackUrl)), - catchError(_err => of({})) - ); - } - - private load(url: string): Observable<{ [key: string]: any }> { - return this.http.get(url); - } -} - diff --git a/virtual-desktop-v2/src/app/i18n/language-locale.service.ts b/virtual-desktop-v2/src/app/i18n/language-locale.service.ts deleted file mode 100644 index d8f2a5444..000000000 --- a/virtual-desktop-v2/src/app/i18n/language-locale.service.ts +++ /dev/null @@ -1,101 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable /*, Inject */ } from '@angular/core'; -import { from, Observable, throwError } from 'rxjs'; -import { mergeMap } from 'rxjs/operators'; -import { BaseLogger } from '../shared/logger'; -import { Globalization } from './globalization'; - -@Injectable() -export class LanguageLocaleService { - - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - - readonly globalization: Globalization = new Globalization(); - - constructor( - ) { - const lang = this.getLanguage(); - if (document.documentElement) { - document.documentElement.lang = lang; - } - } - - getLanguage(): string { - return this.globalization.getLanguage(); - } - - getBaseLanguage(): string { - const language = this.getLanguage(); - return language.split('-')[0]; - } - - isConfiguredForDefaultLanguage(): boolean { - const language = this.getLanguage(); - return !language || language === 'en-US' || language === 'en'; - } - - getLocale(): string { - return this.globalization.getLocale(); - } - - makeLocaleURI(localeId: string): string { - const baseURI: string = ZoweZLUX.uriBroker.desktopRootUri(); - return `${baseURI}locales/${localeId}`; - } - - checkForLocaleFile(localeId: string): Observable { - const uri = `${this.makeLocaleURI(localeId)}.js`; - // From lchudinov: This code is called before Angular's Http API is initialized, - // hence the call to window.fetch. - return from(window.fetch(uri).then(res => { - if (res.ok) { - return res.text(); - } - throw new Error(`${res.status} ${res.statusText}`); - })); - } - - /** - * For both locale and language choices, we check if there is a corresponding locale file - * and reject the choice if none is found. - * - * @param preferenceName either 'language' or 'locale' - * @param requestedValue - */ - private setLanguageOrLocale(preferenceName: string, requestedValue: string): Observable { - if (requestedValue == null) { - // clear the preference, other code will revert to using the browser-specified lang/locale - return from(this.globalization.setPreference(preferenceName, requestedValue)); - } else { - return this.checkForLocaleFile(requestedValue).pipe( - mergeMap((value: any) => { - if (value) { - return from(this.globalization.setPreference(preferenceName, requestedValue)); - } else { - const message: string = `ZWED5169W - no locale data found for locale id ${value}`; - this.logger.warn(message) - return throwError(message); - } - })); - } - } - - setLanguage(language: string): Observable { - this.logger.debug("ZWED5313I", language) //this.logger.debug(`Attempting to set language to ${language}`) - return this.setLanguageOrLocale('language', language); - } - - setLocale(locale: string): Observable { - return this.setLanguageOrLocale('locale', locale); - } - -} diff --git a/virtual-desktop-v2/src/app/i18n/locale-initializer.provider.ts b/virtual-desktop-v2/src/app/i18n/locale-initializer.provider.ts deleted file mode 100644 index e57562a5e..000000000 --- a/virtual-desktop-v2/src/app/i18n/locale-initializer.provider.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { registerLocaleData } from '@angular/common'; -import { Globalization } from './globalization'; -import { LanguageLocaleService } from './language-locale.service'; -import { Observable, of } from 'rxjs'; -import { catchError } from 'rxjs/operators'; - -const logger: ZLUX.ComponentLogger = ZoweZLUX.logger.makeComponentLogger('org.zowe.zlux.virtual-desktop.i18n'); - -export const localeIdFactory = (localeService: LanguageLocaleService): string => { - const zoweGlobal = ZoweZLUX; - - // chicken and egg bootstrapping problem. virtual-desktop wants a particular implementation - // of globalization that can use cookies set by the browser-preferences service of this plugin - // We may move that service into zlux-proxy-server, then Globalization can maybe move to bootstrap. - if (!(zoweGlobal.globalization instanceof Globalization)) { - logger.info('ZWED5050I - Setting ZoweZLUX.globalization to an implementation specific to com.rs.mvd.ng2desktop') - zoweGlobal.globalization = localeService.globalization; - } - return localeService.getLanguage(); -} - -export const localeInitializer = (localeService: LanguageLocaleService, localeId: string) => { - return (): Promise => { - const baseURI: string = ZoweZLUX.uriBroker.desktopRootUri(); - if (localeService.isConfiguredForDefaultLanguage()) { - return Promise.resolve(); - } - const baseLanguage: string = localeService.getBaseLanguage(); - const localeFileURL = `${baseURI}locales/${localeId}`; - const fallbackLocaleFileURL = baseLanguage !== localeId ? `${baseURI}locales/${baseLanguage}` : null; - return loadLocale(localeId, localeFileURL).pipe( - catchError(err => (fallbackLocaleFileURL != null) ? loadLocale(baseLanguage, fallbackLocaleFileURL) : of({})) - ) - .toPromise() - .catch(_err => {}) - }; -} - -const loadLocale = (localeId: string, url: string): Observable => { - // NOTE: static loading using "import" bloated the desktop.js from - // ~800Kb to 2.2Mb. Using lazy loading with "import" resulted in - // 1047 .js files and 1047.js.map files in the web folder. - // "require" seemed cleaner in the end. - // - // We're not emulating the whole path in our deployment directory, - // but we're showing the original paths so it's clear from the this code - // where the locale files originally come from. - // They are copied into the web/locales folder during build of the plugin. - - return new Observable(observer => { - const path = `@angular/common/locales/${localeId}`; - const paths: any = {}; - paths[path] = url; - (window as any).require.config({paths: paths}); - (window as any).require([path], - (res: any) => { - registerLocaleData(res.default, localeId); - observer.complete(); - }, - (err: any) => observer.error(err) - ); - }); -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/i18n/translation-loader.service.ts b/virtual-desktop-v2/src/app/i18n/translation-loader.service.ts deleted file mode 100644 index e6155587e..000000000 --- a/virtual-desktop-v2/src/app/i18n/translation-loader.service.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { - Injectable, - LOCALE_ID, - StaticProvider, - TRANSLATIONS, - TRANSLATIONS_FORMAT, -} from '@angular/core'; -import { from, Observable, throwError } from 'rxjs'; -import { LanguageLocaleService } from './language-locale.service'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { catchError } from 'rxjs/operators'; - -@Injectable() -export class TranslationLoaderService { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - - constructor( - private languageLocaleService: LanguageLocaleService - ) { - } - - getTranslationProviders(plugin: ZLUX.Plugin): Promise { - // Get the language id from the global - // According to Mozilla.org this will work well enough for the - // browsers we support (Chrome, Firefox, Edge, Safari) - // https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/language - // NOTES: - // 1. The desktop can override the browser language and locale preferences (see https://github.com/zowe/zlux-app-manager/issues/10), - // so we don't just use the navigator language, but go through a "globalization" interface here. - // 2. Per the design of the above implementation (https://github.com/zowe/zlux-app-manager/pull/21), "true locale" can be separate - // from language. - // That pull request takes into account the subtleties about "locale" as discussed here: - // https://www.w3.org/International/questions/qa-accept-lang-locales - // - // SUMMARY: The one part ('en') or two part ('en-US') language is treated *here* as *just language*, Maybe a specific sub language - // e.g., en-GB has different spellings, so the "language" aspect of the second part can be important in choosing a template, - // separate from implications for currency and decimal separator. - // MERGE QUESTION: should be put this in polyfills? abstract it somewhere? etc.? - const language: string = this.languageLocaleService.getLanguage(); - // return no providers if fail to get translation file for language - const noProviders: StaticProvider[] = []; - // No language or U.S. English: no translation providers - if (this.languageLocaleService.isConfiguredForDefaultLanguage()) { - return Promise.resolve(noProviders); - } - const baseLanguage = this.languageLocaleService.getBaseLanguage(); - // ex.: messages.es-ES.xlf - const translationFileURL = this.getTranslationFileURL(plugin, language); - // ex.: messages.es.xlf - const fallbackTranslationFileURL = baseLanguage !== language ? this.getTranslationFileURL(plugin, baseLanguage) : null; - let currentTranslationFileURL = translationFileURL; - return this.loadTranslations(currentTranslationFileURL).pipe( - catchError(err => { - if (fallbackTranslationFileURL != null) { - this.logger.warn("ZWED5170W", translationFileURL, fallbackTranslationFileURL); //this.logger.warn(`Failed to load language file ${translationFileURL}, using ${fallbackTranslationFileURL}.`); - currentTranslationFileURL = fallbackTranslationFileURL; - return this.loadTranslations(currentTranslationFileURL); - } - return throwError(err); - })) - .toPromise() - .then((translations: string) => [ - { provide: TRANSLATIONS, useValue: translations }, - { provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }, - { provide: LOCALE_ID, useValue: language } - ]) - .catch(() => { - this.logger.warn("ZWED5171W", currentTranslationFileURL); //this.logger.warn(`Failed to load language file ${currentTranslationFileURL}, using no translation files.`); - return noProviders; - }); - } - - private loadTranslations(fileURL: string): Observable { - return from(window.fetch(fileURL).then(res => { - if (res.ok) { - return res.text(); - } - throw new Error(`${res.status} ${res.statusText}`); - })); - } - - private getTranslationFileURL(plugin: ZLUX.Plugin, language: string): string { - return ZoweZLUX.uriBroker.pluginResourceUri(plugin, `assets/i18n/messages.${language}.xlf`); - } - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/mvd-module-factory.ts b/virtual-desktop-v2/src/app/mvd-module-factory.ts deleted file mode 100644 index 2c4510890..000000000 --- a/virtual-desktop-v2/src/app/mvd-module-factory.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -// Angular -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { NgModule, Type, StaticProvider } from '@angular/core'; -// import { HttpModule } from '@angular/http'; -import { HttpClientModule } from '@angular/common/http'; -import { HashLocationStrategy, LocationStrategy } from '@angular/common'; - -// Modules -import { PluginManagerModule } from './plugin-manager/plugin-manager.module'; -import { ApplicationManagerModule } from './application-manager/application-manager.module'; -import { AuthenticationModule } from './authentication-manager/authentication-manager.module'; -import { SharedModule } from './shared/shared.module'; -import { LanguageLocaleService } from './i18n/language-locale.service'; -import { TranslationLoaderService } from './i18n/translation-loader.service'; -import { I18nModule } from './i18n/i18n.module'; - -export class MvdModuleFactory { - private static localeService: LanguageLocaleService; - private static translationLoaderService: TranslationLoaderService; - - static generateModule(windowManagerModule: Type, mainComponent: Type): Type { - return NgModule({ - imports: [ - BrowserModule, - BrowserAnimationsModule, - // HttpModule, - HttpClientModule, - // Our stuff, - SharedModule, - PluginManagerModule, - I18nModule, - windowManagerModule, - ApplicationManagerModule, - AuthenticationModule - ], - providers: [ - { provide: LocationStrategy, useClass: HashLocationStrategy }, - { provide: LanguageLocaleService, useFactory: MvdModuleFactory.getLocaleService}, - { provide: TranslationLoaderService, useFactory: MvdModuleFactory.getTranslationLoaderService} - ], - bootstrap: [mainComponent] - })(class MvdModule {}); - } - - public static getTranslationProviders(): Promise { - const translationLoader = MvdModuleFactory.getTranslationLoaderService(); - return translationLoader.getTranslationProviders(ZoweZLUX.pluginManager.getDesktopPlugin()); - } - - private static getLocaleService(): LanguageLocaleService { - if (!MvdModuleFactory.localeService) { - MvdModuleFactory.localeService = new LanguageLocaleService(); - } - return MvdModuleFactory.localeService; - } - - private static getTranslationLoaderService(): TranslationLoaderService { - if (!MvdModuleFactory.translationLoaderService) { - const languageLocaleService = MvdModuleFactory.getLocaleService(); - MvdModuleFactory.translationLoaderService = new TranslationLoaderService(languageLocaleService); - } - return MvdModuleFactory.translationLoaderService; - } - -} - - - /* webpackMode: "lazy" - webpackExclude: /\.ts$/ - webpackChunkName: "testing" */ - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/angular2/angular2-plugin-factory.ts b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/angular2/angular2-plugin-factory.ts deleted file mode 100644 index 331362ba4..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/angular2/angular2-plugin-factory.ts +++ /dev/null @@ -1,180 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, CompilerFactory } from '@angular/core'; - -import { PluginFactory } from '../plugin-factory'; -import { CompiledPlugin } from '../../shared/compiled-plugin'; -import { Compiler, CompilerOptions, ApplicationRef, Injector } from '@angular/core'; -import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal'; -import { from, Observable } from 'rxjs'; - -import { ComponentFactory } from 'zlux-base/registry/registry'; -import { TranslationLoaderService } from '../../../i18n/translation-loader.service'; -import { BaseLogger } from 'virtual-desktop-logger'; - -interface MvdNativeAngularPlugin { - pluginModule: any; - pluginComponent: any; -} - -interface MvdNativeAngularComponent { - componentNgModule: any; - componentNgComponent: any; -} - -interface AngularComponentFactoryDefinition { - componentScriptUrl: string; - componentClass: ZLUX.ComponentClass; - capabilities: ZLUX.Capability[]; -} - -interface MvdNativeAngularPluginComponentDefinition { - getComponentFactoryDefinitions(pluginDefinition: MVDHosting.DesktopPluginDefinition): AngularComponentFactoryDefinition[]; -} - -class SimpleAngularComponentFactory extends ComponentFactory { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - constructor( - private compiler: Compiler, - private applicationRef: ApplicationRef, - private injector: Injector, - private componentModulePath: string, - componentClass: ZLUX.ComponentClass, - capabilities: ZLUX.Capability[] - ) { - super(componentClass, capabilities); - } - - instantiateIntoDOM(target: HTMLElement): Observable { - const promise: Promise = new Promise((resolve, reject) => { - (window as any).require([this.componentModulePath], - (fullPlugin: MvdNativeAngularComponent) => { - this.logger.debug("ZWED5314I",fullPlugin); //this.logger.debug(`Instantiating into DOM=`,fullPlugin); - return this.compiler.compileModuleAsync(fullPlugin.componentNgModule).then(factory => { - const resolver = factory.create(this.injector).componentFactoryResolver; - const outlet = new DomPortalOutlet(target, resolver, this.applicationRef, this.injector); - const portal = new ComponentPortal(fullPlugin.componentNgComponent, null); /* TODO */ - const componentRef = outlet.attachComponentPortal(portal); - - resolve(componentRef.instance as ZLUX.IComponent); - }).catch((failure: any) => { - this.logger.warn("ZWED5315I", failure); //this.logger.warn(`Could not instantiate into DOM,`, failure); - reject(); - }); - }, - (failure: any) => { - reject(); - }); - }); - - return from(promise); - } -} - -@Injectable() -export class Angular2PluginFactory extends PluginFactory { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private static getAngularModuleURL(pluginDefinition: MVDHosting.DesktopPluginDefinition): string { - return ZoweZLUX.uriBroker.pluginResourceUri(pluginDefinition.getBasePlugin(), 'main.js'); - } - - private static getAngularComponentsURL(pluginDefinition: MVDHosting.DesktopPluginDefinition): string { - return ZoweZLUX.uriBroker.pluginResourceUri(pluginDefinition.getBasePlugin(), 'components.js'); - } - - constructor( - private compilerFactory: CompilerFactory, - private compiler: Compiler, - private applicationRef: ApplicationRef, - private injector: Injector, - private translationLoaderService: TranslationLoaderService - ) { - super(); - } - - acceptableFrameworks(): string[] { - return ['angular2', 'angular']; - } - - loadComponentFactories(pluginDefinition: MVDHosting.DesktopPluginDefinition): Promise { - const scriptUrl = Angular2PluginFactory.getAngularComponentsURL(pluginDefinition); - - return new Promise((resolve, reject) => { - if (pluginDefinition.hasComponents()) { - (window as any).require([scriptUrl], - (components: MvdNativeAngularPluginComponentDefinition) => { - const factoryDefs = components.getComponentFactoryDefinitions(pluginDefinition); - factoryDefs.forEach((factory: AngularComponentFactoryDefinition) => { - const componentFactory = new SimpleAngularComponentFactory(this.compiler, this.applicationRef, this.injector, - factory.componentScriptUrl, factory.componentClass, factory.capabilities); - - this.logger.info(`ZWED5051I`, pluginDefinition.getIdentifier()); //this.logger.info(`Registering component factory for plugin=${pluginDefinition.getIdentifier()}:`); - this.logger.debug("ZWED5306I", componentFactory); //this.logger.debug(componentFactory); - - ZoweZLUX.registry.registerComponentFactory(componentFactory); - - resolve(); - }); - }, - (failure: any) => { - this.logger.warn("ZWED5164W", pluginDefinition.getIdentifier()); //this.logger.warn(`No component definition for plugin ${pluginDefinition.getIdentifier()}`); - resolve(); - }); - } else { - resolve(); - } - }); - } - - loadPlugin(pluginDefinition: MVDHosting.DesktopPluginDefinition, instanceId: MVDHosting.InstanceId): Promise { - this.loadComponentFactories(pluginDefinition); - const scriptUrl = Angular2PluginFactory.getAngularModuleURL(pluginDefinition); - - this.logger.info(`ZWED5052I`, pluginDefinition.getIdentifier(), scriptUrl); //this.logger.info(`Loading Angular Plugin ID=${pluginDefinition.getIdentifier()}, URL=${scriptUrl}`); - - return new Promise((resolve, reject) => { - (window as any).require([scriptUrl], - (plugin: MvdNativeAngularPlugin) => - this.getCompiler(pluginDefinition).then(compiler => { - resolve(compiler.compileModuleAsync(plugin.pluginModule).then(factory => - new CompiledPlugin(plugin.pluginComponent, factory) - )); - }), - (failure: any) => - reject(failure) - ); - }); - } - - getCompiler(pluginDefinition: MVDHosting.DesktopPluginDefinition): Promise { - return this.translationLoaderService.getTranslationProviders(pluginDefinition.getBasePlugin()).then(providers => { - const options: CompilerOptions = { - providers: providers - }; - return this.compilerFactory.createCompiler([options]); - }); - } - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin-factory.ts b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin-factory.ts deleted file mode 100644 index fa92d6a09..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin-factory.ts +++ /dev/null @@ -1,162 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Compiler, Component, Injectable, NgModule, Type, Injector } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; -import { PluginFactory } from '../plugin-factory'; -import { CompiledPlugin } from '../../shared/compiled-plugin'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { IFRAME_NAME_PREFIX } from '../../../shared/named-elements'; -import { IFramePluginComponent } from '../iframe/iframe-plugin.component' - -var dragOn = false; -var mouseDown = false; -let iFrameElement: HTMLElement; - -@NgModule({ - declarations: [IFramePluginComponent], -}) - -@Injectable() -export class IFramePluginFactory extends PluginFactory { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - constructor( - private injector: Injector, - private compiler: Compiler, - private sanitizer: DomSanitizer - ) { - super(); - window.addEventListener("blur", (event) => { //Checks if focus is lost from the desktop - if (iFrameElement != null && document.activeElement?.className == "mvd-iframe") //Checks if an IFrame caused it - { - const windowManager: MVDWindowManagement.WindowManagerServiceInterface = this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - let stringId = iFrameElement.id.replace(/[^0-9\.]+/g, ""); //Extracts the instance ID from the IFrame ID - windowManager.requestWindowFocus(parseInt(stringId, 10)); - } - }, false); - window.addEventListener("mouseover", (event) => { - window.focus(); //Without giving focus back to the desktop, there is no easy way to tell for clicks between IFrame to IFrame - }, false); - } - - static iframeIndex:number = 1; - - acceptableFrameworks(): string[] { - return ['iframe']; - } - - private getStartingPageUri(basePlugin: ZLUX.Plugin): string { - let startingPage; - let startingPageUri; - - //remote iframe with destination property - if(basePlugin.getWebContent().destination > '') { - startingPageUri = ZoweZLUX.uriBroker.pluginIframeUri(basePlugin, ''); - } - //iframe with startingPage property - else { - startingPage = basePlugin.getWebContent().startingPage || 'index.html'; - if (startingPage.startsWith('http://') || startingPage.startsWith('https://')) { - startingPageUri = startingPage; - } else { - startingPageUri = ZoweZLUX.uriBroker.pluginResourceUri(basePlugin, startingPage); - } - } - - this.logger.debug('ZWED5307I', startingPage); //this.logger.debug('iframe startingPage', startingPage); - return startingPageUri; - } - - - private createIFrameComponentClass(pluginDefinition: MVDHosting.DesktopPluginDefinition, instanceId: MVDHosting.InstanceId): Type { - const basePlugin = pluginDefinition.getBasePlugin(); - const startingPageUri = this.getStartingPageUri(basePlugin); - this.logger.debug('ZWED5308I', startingPageUri); //this.logger.debug('iframe startingPageUri', startingPageUri); - const safeStartingPageUri: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(startingPageUri); - this.logger.info(`ZWED5053I`, startingPageUri); //this.logger.info(`Loading iframe, URI=${startingPageUri}`); - const theIframeId = IFRAME_NAME_PREFIX + (instanceId); //Syncs the IFrame ID with its instance ID counterpart - class IFrameComponentClass extends IFramePluginComponent { - startingPage: SafeResourceUrl = safeStartingPageUri; - iframeId:string = theIframeId; - iFrameMouseOver(event: any) { - iFrameElement = event.target; - if(dragOn) { - event.target.style.pointerEvents = "none"; - } - else { - event.target.style.pointerEvents = "auto"; - } - } - }; - return IFrameComponentClass; - } - - loadComponentFactories(pluginDefinition: MVDHosting.DesktopPluginDefinition): Promise { - this.logger.info(`ZWED5054I`, pluginDefinition.getIdentifier()); - /*this.logger.info(`IFrame component factories currently unsupported. ` - +`Skipping for plugin ID=${pluginDefinition.getIdentifier()}`);*/ - - return Promise.resolve(); - } - - loadPlugin(pluginDefinition: MVDHosting.DesktopPluginDefinition, instanceId: MVDHosting.InstanceId): Promise { - const componentClass = this.createIFrameComponentClass(pluginDefinition, instanceId); - const metadata = { - selector: 'rs-com-mvd-iframe-component', - templateUrl: './iframe-plugin.component.html', - styleUrls: ['./iframe-plugin.component.css'] - }; - const decoratedComponent = Component(metadata)(componentClass); - @NgModule({ - imports: [CommonModule], - declarations: [decoratedComponent], - entryComponents: [decoratedComponent] - }) - class RuntimePluginModule {} - return this.compiler.compileModuleAsync(RuntimePluginModule).then(factory => - new CompiledPlugin(decoratedComponent, factory) - ); - } -} - -window.addEventListener("mousedown", (event) => { - mouseDown = true; - setTimeout( () => { - if (mouseDown == true){ - dragOn = true; - if (iFrameElement != null) { - iFrameElement.style.pointerEvents = "none"; - } - } else { - dragOn = false; - } - }, 100) -}, false); -window.addEventListener("mouseup", (event) => { - mouseDown = false; - dragOn = false; - if (iFrameElement != null) { - iFrameElement.style.pointerEvents = "auto"; - } -}, false); - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.css b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.css deleted file mode 100644 index 5aac9a025..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.css +++ /dev/null @@ -1,34 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.mvd-iframe { - position: absolute !important; - top: 0; - left: 0; - right: 0; - bottom: 0; - padding: 0; - margin: 0; - overflow: hidden; - pointer-events: auto; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.html b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.html deleted file mode 100644 index a46ec9167..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.ts b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.ts deleted file mode 100644 index ef4743522..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/iframe/iframe-plugin.component.ts +++ /dev/null @@ -1,320 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ -import { Injectable, Inject, Component, Optional } from '@angular/core'; -import { Angular2InjectionTokens, Angular2PluginWindowActions, Angular2PluginWindowEvents, - Angular2PluginSessionEvents, Angular2PluginViewportEvents, Angular2PluginThemeEvents } from '../../../../pluginlib/inject-resources'; -import { SafeResourceUrl } from '@angular/platform-browser'; -import { BaseLogger } from '../../../../app/shared/logger' - -@Component({ - templateUrl: './iframe-plugin.component.html' -}) - -@Injectable() -export class IFramePluginComponent { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - startingPage: SafeResourceUrl; - iframeId: string; - instanceId: number = -1; - frameSource: any; - responses: any = {}; - DEFAULT_CLOSE_TIMEOUT: number = 5000; - - constructor( - @Optional() @Inject(Angular2InjectionTokens.WINDOW_ACTIONS) private windowActions: Angular2PluginWindowActions, - @Optional() @Inject(Angular2InjectionTokens.WINDOW_EVENTS) private windowEvents: Angular2PluginWindowEvents, - @Inject(Angular2InjectionTokens.VIEWPORT_EVENTS) private viewportEvents: Angular2PluginViewportEvents, - @Inject(Angular2InjectionTokens.PLUGIN_DEFINITION) private pluginDefintion: ZLUX.ContainerPluginDefinition, - @Inject(Angular2InjectionTokens.LAUNCH_METADATA) private launchMetadata: any, - @Inject(Angular2InjectionTokens.SESSION_EVENTS) private sessionEvents: Angular2PluginSessionEvents, - @Optional() @Inject(Angular2InjectionTokens.THEME_EVENTS) private themeEvents: Angular2PluginThemeEvents - ){ - addEventListener("message", this.postMessageListener.bind(this)); - //The following references are to suppress typescript warnings - this.iFrameMouseOver; - } - - private postWindowEvent(originCall: string){ - this.frameSource.postMessage({ - key: -1, - originCall: originCall, - instanceId: this.instanceId - }, '*') - } - - private postMessageListener(message: any): void { - if(!message.data.request || !message.data.request.function || message.data.key === undefined - || message.data.request.instanceId === undefined){ - return; - } - let data: any = message.data; - let key: number = message.data.key; - let fnString: string = data.request.function; - let split: Array = fnString.split('.'); - if(split[0] === 'registerAdapterInstance' && this.instanceId == -1){ - this.instanceId = data.request.instanceId; - this.frameSource = message.source; - try{ - this.frameSource.postMessage({ - key: -1, - constructorData: { - pluginDef: JSON.parse(JSON.stringify(this.pluginDefintion)), - launchMetadata: this.launchMetadata - }, - instanceId: this.instanceId - }, '*') - }catch(e){ - this.frameSource.postMessage({ - key: -1, - constructorData: { - pluginDef: {}, - launchMetadata: this.launchMetadata - }, - instanceId: this.instanceId, - error: 'Unable to parse plugin definition' - }, '*'); - this.logger.warn("ZWED5172W", e); //this.logger.warn('Unable to parse plugin definition. Error: ', e); - } - this.windowEvents.minimized.subscribe(() => { - this.postWindowEvent('windowEvents.minimized'); - }); - this.windowEvents.maximized.subscribe(() => { - this.postWindowEvent('windowEvents.maximized'); - }); - this.windowEvents.restored.subscribe(() => { - this.postWindowEvent('windowEvents.restored'); - }); - this.windowEvents.moved.subscribe(() => { - this.postWindowEvent('windowEvents.moved'); - }); - this.windowEvents.resized.subscribe(() => { - this.postWindowEvent('windowEvents.resized'); - }); - this.windowEvents.titleChanged.subscribe(() => { - this.postWindowEvent('windowEvents.titleChanged'); - }); - this.sessionEvents.login.subscribe(() => { - this.postWindowEvent('sessionEvents.login') - }); - this.sessionEvents.sessionExpire.subscribe(() => { - this.postWindowEvent('sessionEvents.sessionExpire') - }); - this.themeEvents.colorChanged.subscribe(() => { - this.postWindowEvent('themeEvents.colorChanged') - }); - this.themeEvents.sizeChanged.subscribe(() => { - this.postWindowEvent('themeEvents.sizeChanged') - }); - this.themeEvents.wallpaperChanged.subscribe(() => { - this.postWindowEvent('themeEvents.wallpaperChanged') - }); - this.sessionEvents.autosaveEmitter.subscribe(() => { - this.postWindowEvent('sessionEvents.saveData') - }); - return; - } - if(data.request.instanceId === this.instanceId){ - this.resolvePromisesRecursively(this.translateFunction(message)).then(res => { - message.source.postMessage({ - key: key, - value: res, - originCall: data.request.function, - instanceId: data.request.instanceId - }, '*'); - }); - } - return; - } - - private resolvePromisesRecursively(p: any){ - if(p instanceof Promise){ - return p.then(res => { - this.resolvePromisesRecursively(res); - }) - } else { - return Promise.resolve(p); - } - } - - private getAttrib(object: object, path: string){ - if(object === undefined || path === undefined || - typeof path !== 'string' || typeof object !== 'object') return undefined; - let objCopy: object = Object.assign({}, object); - try{ - let props = (path || '').split('.'); - for(let i = 0; i < props.length; i++){ - objCopy = (objCopy as any)[props[i]]; - } - }catch(e){ - return undefined; - } - return (objCopy === undefined) ? undefined : objCopy; - } - - private addActionsToContextMenu(key: number, source: any, itemsArray: Array, type: string){ - try{ - let copy = JSON.parse(JSON.stringify(itemsArray)); - for(let i = 0; i < copy.length; i++){ - copy[i].action = () => { - source.postMessage({ - key: key, - originCall: type+'.spawnContextMenu', - instanceId: this.instanceId, - contextMenuItemIndex: i - }, '*') - } - } - return copy; - }catch(e){ - this.logger.warn('ZWED5151E', e); //this.logger.warn('Unable to parse context menu items. Error: ', e); - return undefined; - } - } - - private windowActionsHandler(fnSplit: Array, args: Array, message: any){ - let fn: Function; - let fnRet: any; - let fnString: string = message.data.request.function; - fn = (this.getAttrib(Object.assign({}, this.windowActions), fnSplit.join('.')) as Function); - if(typeof fn === 'function'){ - fn = fn.bind(this.windowActions); - if(args.length === 0){ - fnRet = fn(); - } else { - if(fnString == 'windowActions.spawnContextMenu' && Array.isArray(args[2])){ - args[2] = this.addActionsToContextMenu(message.data.key, message.source, args[2], 'windowActions') - } - fnRet = fn(...args); - } - return fnRet; - } else { - return undefined; - } - } - - private viewportEventsHandler(fnSplit: Array, args: Array, message: any){ - let fn: Function; - let fnString: string = message.data.request.function; - fn = (this.getAttrib(Object.assign({}, this.viewportEvents), fnSplit.join('.')) as Function); - if(typeof fn === 'function'){ - fn = fn.bind(this.viewportEvents); - if(fnString === 'viewportEvents.registerCloseHandler' && args.length === 1){ - let that = this; - args[0] = function(): Promise{ - return new Promise(function(resolve: any, reject: any){ - that.responses[message.data.key] = { - resolve: function(){ - resolve(); - } - } - message.source.postMessage({ - key: message.data.key, - originCall: 'viewportEvents.callCloseHandler', - instanceId: that.instanceId - }, '*') - setTimeout(() => { - resolve(); - }, that.DEFAULT_CLOSE_TIMEOUT) - }.bind(this)) - } - return fn(...args); - } else if(fnString == 'viewportEvents.spawnContextMenu' && Array.isArray(args[2])){ - args[2] = this.addActionsToContextMenu(message.data.key, message.source, args[2], 'viewportEvents'); - return fn(...args); - } - return undefined; - } - return undefined; - } - - private zoweZLUXHandler(split: Array, args: Array, message: any){ - let fn: Function; - let fnRet: any; - let fnString: string = message.data.request.function; - let instanceId: number = message.data.request.instanceId; - // TODO: This looks like Iframe handler workaround code. Is this still relevant? - let fakeHMA = function(this: any, key: any, notification: any){ - try { - message.source.postMessage({ - key: key, - originCall: 'handleMessageAdded', - notification: notification, - instanceId: instanceId - }, '*') - } catch (e) { /* TODO: Every once in a while, message.source won't exist after app2app. - This could be a timing issue with the echoes or at least, doesn't seem to affect app2app. */ - this.logger.warn("ZWED5199W", 'handleMessageAdded'); //this.logger.warn("Attempted to postMessage for type %s without source", e); - } - } - let fakeHMR = function(this: any, key: any, notificationId: any){ - try { - message.source.postMessage({ - key: key, - originCall: 'handleMessageRemoved', - notificationId: notificationId, - instanceId: instanceId - }, '*') - } catch (e) { /* TODO: Every once in a while, message.source won't exist after app2app. - This could be a timing issue with the echoes or at least, doesn't seem to affect app2app. */ - this.logger.warn("ZWED5199W", 'handleMessageRemoved'); //this.logger.warn("Attempted to postMessage for type %s without source", e); - } - } - fn = (this.getAttrib(Object.assign({}, ZoweZLUX), split.join('.')) as Function); - if(typeof fn === 'function'){ - fn = fn.bind((ZoweZLUX as any)[split[0]]); - if(args.length === 0){ - fnRet = fn(); - } else { - if(fnString === 'ZoweZLUX.notificationManager.addMessageHandler'){ - args[0] = { - handleMessageAdded(notification: any){ - fakeHMA(message.data.key, notification); - }, - handleMessageRemoved(id: any){ - fakeHMR(message.data.key, id); - } - } - } - fnRet = fn(...args); - } - return fnRet; - } else { - return undefined; - } - } - - private translateFunction(message: any){ - let args = message.data.request.args || []; - let fnString: string = message.data.request.function; - let split: Array = fnString.split('.'); - if(split.length > 0){ - switch(split[0]){ - case 'ZoweZLUX': - split.shift(); - return this.zoweZLUXHandler(split, args, message); - case 'windowActions': - split.shift(); - return this.windowActionsHandler(split, args, message); - case 'viewportEvents': - split.shift(); - return this.viewportEventsHandler(split, args, message); - case 'resolveCloseHandler': - if(this.responses[args[0]]){ - this.responses[args[0]].resolve(); - } - return undefined; - default: - return undefined; - } - } - } - - iFrameMouseOver(event: any){} -} diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/plugin-factory.ts b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/plugin-factory.ts deleted file mode 100644 index d063cdf3c..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/plugin-factory.ts +++ /dev/null @@ -1,32 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -//import { DesktopPluginDefinition } from '../shared/desktop-plugin-definition'; -import { CompiledPlugin } from '../shared/compiled-plugin'; - -export abstract class PluginFactory { - abstract acceptableFrameworks(): string[]; - abstract loadPlugin(plugin: MVDHosting.DesktopPluginDefinition, id: MVDHosting.ViewportId): Promise; - abstract loadComponentFactories(plugin: MVDHosting.DesktopPluginDefinition): Promise; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin-factory.ts b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin-factory.ts deleted file mode 100644 index 82b891706..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin-factory.ts +++ /dev/null @@ -1,106 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Compiler, Injectable, NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -import { PluginFactory } from '../plugin-factory'; -import { CompiledPlugin } from '../../shared/compiled-plugin'; - -import { ReactPluginComponent, ReactEntryHook } from './react-plugin.component'; -import { BaseLogger } from 'virtual-desktop-logger'; - -interface MvdNativeReactPluginComponentDefinition { - registerComponentFactories(): void; -} - -@Injectable() -export class ReactPluginFactory extends PluginFactory { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private static getReactModuleURL(pluginDefinition: MVDHosting.DesktopPluginDefinition): string { - // TODO: clean this up with .d.ts file - return ZoweZLUX.uriBroker.pluginResourceUri(pluginDefinition.getBasePlugin(), 'main.js'); - } - - private static getReactComponentsURL(pluginDefinition: MVDHosting.DesktopPluginDefinition): string { - return ZoweZLUX.uriBroker.pluginResourceUri(pluginDefinition.getBasePlugin(), 'components.js'); - } - - constructor( - private compiler: Compiler - ) { - super(); - } - - acceptableFrameworks(): string[] { - return ['react']; - } - - loadComponentFactories(pluginDefinition: MVDHosting.DesktopPluginDefinition): Promise { - const scriptUrl = ReactPluginFactory.getReactComponentsURL(pluginDefinition); - - return new Promise((resolve, reject) => { - if (pluginDefinition.hasComponents()) { - (window as any).require([scriptUrl], - (components: MvdNativeReactPluginComponentDefinition) => { - components.registerComponentFactories(); - }, - (failure: any) => { - this.logger.warn("ZWED5173W", pluginDefinition.getIdentifier()); //this.logger.warn(`No component definition for plugin ${pluginDefinition.getIdentifier()}`); - resolve(); - }); - } else { - resolve(); - } - }); - } - - loadPlugin(pluginDefinition: MVDHosting.DesktopPluginDefinition, instanceId: MVDHosting.InstanceId): Promise { - const scriptUrl = ReactPluginFactory.getReactModuleURL(pluginDefinition); - return new Promise((resolve, reject) => { - (window as any).require([scriptUrl], - (reactHook: any) => { - class ReactPluginComponentPrime extends ReactPluginComponent {} - @NgModule({ - imports: [CommonModule], - declarations: [ReactPluginComponentPrime], - entryComponents: [ReactPluginComponentPrime], - providers: [ - { - provide: ReactEntryHook, - useValue: reactHook - } - ] - }) - class ReactPluginModule {} - resolve(this.compiler.compileModuleAsync(ReactPluginModule).then(factory => - new CompiledPlugin(ReactPluginComponentPrime, factory) - )); - }, - (failure: any) => - reject(failure) - ); - }); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin.component.html b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin.component.html deleted file mode 100644 index 890771966..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin.component.html +++ /dev/null @@ -1,20 +0,0 @@ - - -
- diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin.component.ts b/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin.component.ts deleted file mode 100644 index 646882a89..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-factory/react/react-plugin.component.ts +++ /dev/null @@ -1,80 +0,0 @@ - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ -import { ViewChild, ElementRef, AfterViewInit, OnDestroy, InjectionToken, Inject, Component, Optional } from '@angular/core'; - -import { ReactMVDResources } from 'pluginlib/react-inject-resources'; -import { Angular2InjectionTokens, Angular2PluginWindowActions, Angular2PluginWindowEvents, - Angular2PluginSessionEvents, Angular2PluginViewportEvents, Angular2PluginThemeEvents } from 'pluginlib/inject-resources'; - -interface MvdNativeReactPlugin { - renderPlugin: (domElement: HTMLElement, resources: ReactMVDResources) => void; - unmountPlugin?: (domElement: HTMLElement) => void; -} - -export const ReactEntryHook = new InjectionToken('react-entry-hook'); - -@Component({ - templateUrl: './react-plugin.component.html' -}) -export class ReactPluginComponent implements AfterViewInit, OnDestroy { - @ViewChild('container') element: ElementRef; - resources: ReactMVDResources; - - constructor( - @Inject(ReactEntryHook) private reactEntryHook: MvdNativeReactPlugin, - @Optional() @Inject(Angular2InjectionTokens.MAIN_WINDOW_ID) mainWindowId: MVDWindowManagement.WindowId | null, - @Optional() @Inject(Angular2InjectionTokens.WINDOW_ACTIONS) windowActions: Angular2PluginWindowActions | null, - @Optional() @Inject(Angular2InjectionTokens.WINDOW_EVENTS) windowEvents: Angular2PluginWindowEvents | null, - @Inject(Angular2InjectionTokens.VIEWPORT_EVENTS) viewportEvents: Angular2PluginViewportEvents, - @Inject(Angular2InjectionTokens.PLUGIN_DEFINITION) pluginDefinition: MVDHosting.DesktopPluginDefinition, - @Inject(Angular2InjectionTokens.LOGGER) logger: ZLUX.ComponentLogger, - @Inject(Angular2InjectionTokens.LAUNCH_METADATA) launchMetadata: any, - @Inject(Angular2InjectionTokens.INSTANCE_ID) instanceId: MVDHosting.InstanceId, - @Inject(Angular2InjectionTokens.SESSION_EVENTS) sessionEvents: Angular2PluginSessionEvents, - @Optional() @Inject(Angular2InjectionTokens.THEME_EVENTS) themeEvents: Angular2PluginThemeEvents - ) { - this.resources = { - mainWindowId: mainWindowId, - windowActions: windowActions, - windowEvents: windowEvents, - viewportEvents: viewportEvents, - logger: logger, - pluginDefinition: pluginDefinition, - launchMetadata: launchMetadata, - instanceId: instanceId, - sessionEvents: sessionEvents, - themeEvents: themeEvents - }; - } - - ngAfterViewInit(): void { - /* Unpleasantry... https://github.com/angular/angular/issues/6005 */ - setTimeout(() => { - this.reactEntryHook.renderPlugin(this.element.nativeElement, this.resources); - }); - } - - ngOnDestroy(): void { - if (this.reactEntryHook.unmountPlugin != null) { - this.reactEntryHook.unmountPlugin(this.element.nativeElement); - } - } -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/plugin-manager/plugin-manager.module.ts b/virtual-desktop-v2/src/app/plugin-manager/plugin-manager.module.ts deleted file mode 100644 index bce78b30a..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/plugin-manager.module.ts +++ /dev/null @@ -1,50 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; - -import { PluginManager } from './shared/plugin-manager'; -import { PluginLoader } from './shared/plugin-loader'; -import { Angular2PluginFactory } from './plugin-factory/angular2/angular2-plugin-factory'; -import { IFramePluginFactory } from './plugin-factory/iframe/iframe-plugin-factory'; -import { ReactPluginFactory } from './plugin-factory/react/react-plugin-factory'; -import { ReactPluginComponent } from './plugin-factory/react/react-plugin.component'; - -@NgModule({ - declarations: [ - ReactPluginComponent - ], - providers: [ - Angular2PluginFactory, - IFramePluginFactory, - ReactPluginFactory, - PluginManager, - PluginLoader, - /* Expose plugin manager to external window managers */ - { provide: MVDHosting.Tokens.PluginManagerToken, useExisting: PluginManager } - ] -}) -export class PluginManagerModule { - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/shared/compiled-plugin.ts b/virtual-desktop-v2/src/app/plugin-manager/shared/compiled-plugin.ts deleted file mode 100644 index 5021a128d..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/shared/compiled-plugin.ts +++ /dev/null @@ -1,34 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModuleFactory, Type } from '@angular/core'; - -export class CompiledPlugin { - - constructor( - public initialComponent: Type, - public moduleFactory: NgModuleFactory - ) { - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/shared/desktop-plugin-definition.ts b/virtual-desktop-v2/src/app/plugin-manager/shared/desktop-plugin-definition.ts deleted file mode 100644 index 30ad706a2..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/shared/desktop-plugin-definition.ts +++ /dev/null @@ -1,135 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { PluginWindowStyle } from './plugin-window-style'; -import { BaseLogger } from 'virtual-desktop-logger'; - -export class DesktopPluginDefinitionImpl implements MVDHosting.DesktopPluginDefinition { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - public widthOverride:number|undefined; - public heightOverride:number|undefined; - - /* A default style simplifies the programming, since consumers of defaultWindowStyle - * don't have to choke on a plugin that lacks a default style in its pluginDefinition.json. - * If we add proper validation of pluginDefinitions, we maybe should get rid of this (or use it during - * some UI-driven plugin creation...) - */ - private static readonly PLUGIN_DEFAULT_WINDOW_STYLE: PluginWindowStyle = { - width: MVDHosting.DESKTOP_PLUGIN_DEFAULTS.WIDTH, - height: MVDHosting.DESKTOP_PLUGIN_DEFAULTS.HEIGHT - }; - - private key:string; - - constructor( - public readonly basePlugin: ZLUX.Plugin - ) { - this.key = basePlugin.getKey(); - } - - get standaloneUseFramework(): boolean { - return !!this.basePlugin.getWebContent().standaloneUseFramework; - } - - get hasWebContent(): boolean { - return this.basePlugin.getWebContent() != null; - } - - getFramework(): string { - if (this.hasWebContent) { - if ('framework' in this.basePlugin.getWebContent()) { - return this.basePlugin.getWebContent().framework; - } else { - this.logger.warn("ZWED5174W", this.getIdentifier()); //this.logger.warn(`Plugin ${this.getIdentifier()} has no framework specified`); - return 'unsupported'; - } - } else { - return 'n/a'; - } - } - - getIdentifier(): string { - return this.basePlugin.getIdentifier(); - } - - getKey(): string { - return this.key; - } - - getBasePlugin(): ZLUX.Plugin { - return this.basePlugin; - } - - getCopyright():string { - return this.basePlugin.getCopyright(); - } - - hasComponents(): boolean { - return this.basePlugin.hasComponents(); - } - - get label(): string { - if (this.hasWebContent && this.basePlugin.getWebContent().launchDefinition != null) { - return this.basePlugin.getWebContent().launchDefinition.pluginShortNameDefault; - } else { - return this.basePlugin.getIdentifier().split('\.').slice(-1)[0]; - } - } - - get image(): string | null { - const uriBroker = ZoweZLUX.uriBroker; - if (!this.hasWebContent){ - return null; - } - let webContent:any = this.basePlugin.getWebContent(); - if (webContent.launchDefinition != null - && webContent.launchDefinition.imageSrc != null) { - return uriBroker.pluginResourceUri(this.basePlugin, webContent.launchDefinition.imageSrc); - } else { - return null; - } - } - - get defaultWindowTitle(): string { - // TODO - return this.label; - } - - get defaultWindowStyle(): PluginWindowStyle { - let style:PluginWindowStyle = - ((this.hasWebContent && this.basePlugin.getWebContent().defaultWindowStyle) ? - (this.basePlugin.getWebContent().defaultWindowStyle as PluginWindowStyle) : - { - width: DesktopPluginDefinitionImpl.PLUGIN_DEFAULT_WINDOW_STYLE.width, - height: DesktopPluginDefinitionImpl.PLUGIN_DEFAULT_WINDOW_STYLE.height - }); - if (this.widthOverride){ - style.width = this.widthOverride; - } - if (this.heightOverride){ - style.height = this.heightOverride; - } - return style; - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-loader.ts b/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-loader.ts deleted file mode 100644 index fcc69d833..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-loader.ts +++ /dev/null @@ -1,106 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable } from '@angular/core'; - -import { CompiledPlugin } from './compiled-plugin'; -// import { DesktopPluginDefinition } from './desktop-plugin-definition'; -import { PluginFactory } from '../plugin-factory/plugin-factory'; -import { Angular2PluginFactory } from '../plugin-factory/angular2/angular2-plugin-factory'; -import { IFramePluginFactory } from '../plugin-factory/iframe/iframe-plugin-factory'; -import { ReactPluginFactory } from '../plugin-factory/react/react-plugin-factory'; -import { BaseLogger } from 'virtual-desktop-logger'; - -@Injectable() -export class PluginLoader { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private frameworkMap: Map; - - constructor( - angular2: Angular2PluginFactory, - iframe: IFramePluginFactory, - react: ReactPluginFactory - ) { - this.frameworkMap = new Map(); - /* This can be moved to a more substantial registration system later on */ - this.registerPluginFactory(angular2); - this.registerPluginFactory(iframe); - this.registerPluginFactory(react); - } - - private registerPluginFactory(pluginFactory: PluginFactory): void { - pluginFactory.acceptableFrameworks().forEach(framework => { - if (!this.frameworkMap.has(framework)) { - this.frameworkMap.set(framework, []); - } - - this.frameworkMap.get(framework)!.push(pluginFactory); - }); - } - - loadPlugin(pluginDefinition: MVDHosting.DesktopPluginDefinition, instanceId: MVDHosting.InstanceId): Promise { - const candidateFactories = this.frameworkMap.get(pluginDefinition.getFramework()) || []; - if (pluginDefinition.getFramework() === 'unsupported') { - return new Promise((resolve, reject) => { - this.logger.warn("ZWED5175W", pluginDefinition.getIdentifier()); //this.logger.warn(`${pluginDefinition.getIdentifier()} does not use supported framework`); - resolve(null); - }); - } else if (pluginDefinition.getFramework() === 'n/a') { - return new Promise((resolve, reject) => { - resolve(null); - }); - } - - /* Attempt all registered factories for the given framework */ - return candidateFactories.reduce( - (promise, factory) => promise.catch((errors: any[]) => - factory.loadPlugin(pluginDefinition, instanceId).catch((error) => Promise.reject(errors.concat([error]))) - ), - Promise.reject([new Error(`ZWED5152E - All plugin factories for framework type "${pluginDefinition.getFramework()}" failed`)]) - ); - } - - loadPluginComponentFactories(pluginDefinition: MVDHosting.DesktopPluginDefinition): Promise { - const candidateFactories = this.frameworkMap.get(pluginDefinition.getFramework()) || []; - - if (pluginDefinition.getFramework() === 'unsupported') { - return new Promise((resolve, reject) => { - this.logger.warn("ZWED5176W", pluginDefinition.getIdentifier()); //this.logger.warn(`${pluginDefinition.getIdentifier()} does not use supported framework`); - resolve(); - }); - } else if (pluginDefinition.getFramework() === 'n/a') { - return new Promise((resolve, reject) => { - resolve(); - }); - } - - /* Attempt all registered factories for the given framework */ - return candidateFactories.reduce( - (promise, factory) => promise.catch((errors: any[]) => - factory.loadComponentFactories(pluginDefinition).catch((error) => Promise.reject(errors.concat([error]))) - ), - Promise.reject([new Error(`ZWED5153E - All plugin factories for framework type "${pluginDefinition.getFramework()}" failed`)]) - ); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-manager.ts b/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-manager.ts deleted file mode 100644 index 62033a3f0..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-manager.ts +++ /dev/null @@ -1,116 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, EventEmitter } from '@angular/core'; - -import { DesktopPluginDefinitionImpl } from './desktop-plugin-definition'; -import { PluginLoader } from './plugin-loader'; - -const SCAN_INTERVAL_MINIMUM = 300000; - -@Injectable() -export class PluginManager implements MVDHosting.PluginManagerInterface, MVDHosting.LogoutActionInterface { - private static _pluginDefinitions: Map = new Map(); - private static _scanner: any; - - public pluginsAdded: EventEmitter = new EventEmitter(); - - constructor( - private pluginLoader: PluginLoader - ) { - } - - unsetScanner(): boolean { - return this.setScanInterval(0); - } - - setScanInterval(ms: number): boolean { - if (ms <= 0) { - if (PluginManager._scanner) { - clearInterval(PluginManager._scanner); - } - return true; - } - - if (ms >= SCAN_INTERVAL_MINIMUM) { - if (PluginManager._scanner) { - clearInterval(PluginManager._scanner); - } - PluginManager._scanner = setInterval(()=> { - this.updateMap(); - },ms); - return true; - } - return false; - } - - onLogout(): boolean { - if (PluginManager._scanner) { - clearInterval(PluginManager._scanner); - } - PluginManager._pluginDefinitions.clear(); - return true; - } - - loadApplicationPluginDefinitions(update?:boolean): Promise { - if (!update && PluginManager._pluginDefinitions != null) { - if (PluginManager._pluginDefinitions.size != 0) { - return Promise.resolve(Array.from(PluginManager._pluginDefinitions.values())); - } - } - return ZoweZLUX.pluginManager.loadPlugins('application', update) - .then((plugins: ZLUX.Plugin[]) => { - if (PluginManager._pluginDefinitions.size != 0) { - plugins = plugins.filter(plugin => !PluginManager._pluginDefinitions.get(plugin.getIdentifier())) - } - const pluginDefs = plugins.map(plugin => new DesktopPluginDefinitionImpl(plugin)); - pluginDefs.forEach((plugin) => PluginManager._pluginDefinitions.set(plugin.getIdentifier(), plugin)); - pluginDefs.forEach((plugin) => this.pluginLoader.loadPluginComponentFactories(plugin)); - if (pluginDefs.length > 0) { - this.pluginsAdded.emit(pluginDefs); - } - return pluginDefs; - }); - } - - loadApplicationPluginDefinitionsMap(update?:boolean): Promise> { - if (!update && PluginManager._pluginDefinitions != null) { - if (PluginManager._pluginDefinitions.size != 0) { - return Promise.resolve(PluginManager._pluginDefinitions); - } - } - return this.loadApplicationPluginDefinitions() - .then((plugins: MVDHosting.DesktopPluginDefinition[]) => { - return PluginManager._pluginDefinitions; - }); - } - - updateMap(): Promise> { - return this.loadApplicationPluginDefinitionsMap(true); - } - - findPluginDefinition(identifier: string, update?:boolean): Promise { - return this.loadApplicationPluginDefinitionsMap(update).then(map => map.get(identifier) || null); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-window-style.ts b/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-window-style.ts deleted file mode 100644 index 1ef808457..000000000 --- a/virtual-desktop-v2/src/app/plugin-manager/shared/plugin-window-style.ts +++ /dev/null @@ -1,28 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -export interface PluginWindowStyle { - width: number; - height: number; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/shared/css-url.pipe.ts b/virtual-desktop-v2/src/app/shared/css-url.pipe.ts deleted file mode 100644 index ede69161c..000000000 --- a/virtual-desktop-v2/src/app/shared/css-url.pipe.ts +++ /dev/null @@ -1,35 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Pipe, PipeTransform } from '@angular/core'; - -@Pipe({ - name: 'cssUrl' -}) -export class CssUrlPipe implements PipeTransform { - transform(value: string): string { - return `url('${value}')`; - } - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/shared/direct-embed.component.ts b/virtual-desktop-v2/src/app/shared/direct-embed.component.ts deleted file mode 100644 index f6baa9d38..000000000 --- a/virtual-desktop-v2/src/app/shared/direct-embed.component.ts +++ /dev/null @@ -1,51 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, ViewContainerRef, ComponentRef, Input, SimpleChanges } from '@angular/core'; -import { BaseLogger } from 'virtual-desktop-logger'; - -@Component({ - selector: 'direct-embed-component', - template: '' -}) -export class DirectEmbedComponent { - @Input() component: ComponentRef; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - constructor( - private viewContainerRef: ViewContainerRef - ) { - - } - - ngOnChanges(changes: SimpleChanges): void { - if (changes['component']) { - this.viewContainerRef.clear(); - - this.logger.debug("ZWED5322I", this.component); //this.logger.debug(`ngOnChanges=`,this.component); - if (this.component != null) { - this.viewContainerRef.insert(this.component.hostView); - } - } - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/shared/logger.ts b/virtual-desktop-v2/src/app/shared/logger.ts deleted file mode 100644 index 17940fea0..000000000 --- a/virtual-desktop-v2/src/app/shared/logger.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -const baseLoggerIdentifier = 'org.zowe.zlux.ng2desktop' //the one hardcoded place -export var BaseLogger: any = ZoweZLUX.logger.makeComponentLogger(baseLoggerIdentifier); - -let lang = ZoweZLUX.globalization.getLanguage(); -let plugin = ZoweZLUX.pluginManager.getDesktopPlugin(); -let messageLoc = ZoweZLUX.uriBroker.pluginResourceUri(plugin, `assets/i18n/log/messages_${lang}.json`); - -fetch(messageLoc) // Attempt to find log messages for global language -.then((resp) => resp.json()) -.then(function(messages) { - BaseLogger._setMessages(messages); - afterBaseLoggerInit(); -}) - .catch(function() { // If it doesn't work... - if (lang != 'en') { - lang = "en"; // Try English log messages (default) - messageLoc = ZoweZLUX.uriBroker.pluginResourceUri(plugin, `assets/i18n/log/messages_${lang}.json`); - - fetch(messageLoc) - .then((resp) => resp.json()) - .then(function(messages) { - BaseLogger._setMessages(messages); - afterBaseLoggerInit(); - }) - .catch(function() { // If that still doesn't work, just do nothing... - afterBaseLoggerInit(); - }); - } else { - afterBaseLoggerInit(); - } -}); - -function afterBaseLoggerInit() { - BaseLogger.info(`ZWED5321I`, navigator.userAgent); //BaseLogger.info(`App framework initializing. User agent=${navigator.userAgent}`); -} diff --git a/virtual-desktop-v2/src/app/shared/named-elements.ts b/virtual-desktop-v2/src/app/shared/named-elements.ts deleted file mode 100644 index 31cb3bd82..000000000 --- a/virtual-desktop-v2/src/app/shared/named-elements.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -export const IFRAME_NAME_PREFIX = 'mvd_iframe_'; -export const INNER_IFRAME_NAME = 'zluxIframe'; diff --git a/virtual-desktop-v2/src/app/shared/shared.module.ts b/virtual-desktop-v2/src/app/shared/shared.module.ts deleted file mode 100644 index ef22c3416..000000000 --- a/virtual-desktop-v2/src/app/shared/shared.module.ts +++ /dev/null @@ -1,50 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -import { CssUrlPipe } from './css-url.pipe'; -import { WindowMonitor } from './window-monitor.service'; -import { DirectEmbedComponent } from './direct-embed.component'; - -@NgModule({ - imports: [ - CommonModule - ], - declarations: [ - CssUrlPipe, - DirectEmbedComponent - ], - providers: [ - WindowMonitor - ], - exports: [ - CssUrlPipe, - DirectEmbedComponent - ] -}) -export class SharedModule { - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/shared/window-monitor.service.ts b/virtual-desktop-v2/src/app/shared/window-monitor.service.ts deleted file mode 100644 index ed7f9b962..000000000 --- a/virtual-desktop-v2/src/app/shared/window-monitor.service.ts +++ /dev/null @@ -1,38 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable } from '@angular/core'; - -import { Subject, Observable, fromEvent } from 'rxjs'; - -@Injectable() -export class WindowMonitor { - windowResized: Subject; - - constructor() { - this.windowResized = new Subject(); - const observable = fromEvent(window, 'resize') as Observable; - observable.subscribe(this.windowResized); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/start-url-manager/app2app-args-parser.service.ts b/virtual-desktop-v2/src/app/start-url-manager/app2app-args-parser.service.ts deleted file mode 100644 index 6cb8fa4f3..000000000 --- a/virtual-desktop-v2/src/app/start-url-manager/app2app-args-parser.service.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable } from '@angular/core'; -import { App2AppArgs } from './app2app-args'; - - -@Injectable() -export class App2AppArgsParser { - private startIndex: number; - private length: number; - private data: string; - private isFirstFullscreenApp: boolean; - - constructor() { - this.isFirstFullscreenApp = true; // Variable used to keep track of if plugin in desktop URL is for standalone mode - } - - parse(app2appArray: string[]): App2AppArgs { - let app2appKey = app2appArray[0]; - let app2app = app2appArray[1]; - let pluginId, actionType, actionMode, formatter, contextData, contextZlux; - this.startIndex = 0; - this.length = app2app.length; - this.data = app2app; - - switch(app2appKey) { - case "pluginId": // Assuming pluginId=xxx.xxx.xxx:formatter:{"xxx":"xxx" ...} - pluginId = this.getPart(); - if (!pluginId) { // If pluginId=xxx.xx.xxx (no app2app data) - pluginId = app2app; - formatter = "data"; - contextData = "{}"; - } else { - formatter = this.getPart(); - contextData = this.getLastPart(); - } - actionType = "launch"; - actionMode = "create"; - contextZlux = JSON.stringify({isFirstFullscreenApp: this.isFirstFullscreenApp}); - this.isFirstFullscreenApp = false; - break; - default: // Assume normal app2app, app2app=xxx.xxx.xxx:type:mode:formatter:{contextdata ...} - pluginId = this.getPart(); - actionType = this.getPart(); - actionMode = this.getPart(); - formatter = this.getPart(); - contextData = this.getLastPart(); - contextZlux = "{}"; - } - return { - pluginId, - actionType, - actionMode, - formatter, - contextData, - contextZlux - } - } - - private getPart(): string { - for (let index = this.startIndex; index < this.length; index++) { - if (this.data[index] === ':') { - const part = this.data.substring(this.startIndex, index); - this.startIndex = index + 1; - return part; - } - } - return ''; - } - - private getLastPart(): string { - const part = this.data.substring(this.startIndex); - this.startIndex = this.length; - return part; - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/start-url-manager/app2app-args.ts b/virtual-desktop-v2/src/app/start-url-manager/app2app-args.ts deleted file mode 100644 index 4e6b28686..000000000 --- a/virtual-desktop-v2/src/app/start-url-manager/app2app-args.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -export interface App2AppArgs { - pluginId: string; - actionType: string; - actionMode: string, - formatter: string; - contextData: string; - contextZlux: string; - error?: string; -} - - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/start-url-manager/index.ts b/virtual-desktop-v2/src/app/start-url-manager/index.ts deleted file mode 100644 index ee9755dca..000000000 --- a/virtual-desktop-v2/src/app/start-url-manager/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -export * from './start-url-manager.module'; -export * from './start-url-manager.service'; - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/start-url-manager/start-url-manager.module.ts b/virtual-desktop-v2/src/app/start-url-manager/start-url-manager.module.ts deleted file mode 100644 index 35a16d266..000000000 --- a/virtual-desktop-v2/src/app/start-url-manager/start-url-manager.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { StartURLManager } from './start-url-manager.service'; -import { App2AppArgsParser } from './app2app-args-parser.service'; - -@NgModule({ - providers: [ - StartURLManager, - App2AppArgsParser, - ] -}) -export class StartURLManagerModule { } - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/start-url-manager/start-url-manager.service.ts b/virtual-desktop-v2/src/app/start-url-manager/start-url-manager.service.ts deleted file mode 100644 index 0537537d1..000000000 --- a/virtual-desktop-v2/src/app/start-url-manager/start-url-manager.service.ts +++ /dev/null @@ -1,181 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable } from '@angular/core'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { App2AppArgs } from './app2app-args'; -import { App2AppArgsParser } from './app2app-args-parser.service'; -import { ZluxPopupManagerService, ZluxErrorSeverity } from '@zlux/widgets'; -import { L10nTranslationService } from 'angular-l10n'; - -const ZOWE_URL_ARGS = [ - "app2app", - "pluginId", - "windowManager", - "showLogin" -] - -@Injectable() -export class StartURLManager implements MVDHosting.LoginActionInterface { - private done = false; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - - constructor( - public parser: App2AppArgsParser, - private popupManager: ZluxPopupManagerService, - public translation: L10nTranslationService, - ) { - this.registerTestAction(); - } - - onLogin(_username: string, _plugins: ZLUX.Plugin[]): boolean { - if (this.done) { - return true; - } - this.done = true; - const allArgs = this.getAllApp2AppArgsFromURL(); - for (const args of allArgs) { - if (this.validateApp2AppArgs(args)) { - this.invokeApp2App(args); - } - } - return true; - } - - private validateApp2AppArgs(args: App2AppArgs): boolean { - const { dispatcher, pluginManager } = ZoweZLUX; - const plugin = pluginManager.getPlugin(args.pluginId); - if (!plugin) { - // this.logger.warn('Plugin not found for identifier %s specified in app2app query URL parameter', args.pluginId); - this.logger.warn('ZWED5193W', args.pluginId); - return false; - } - if (args.actionType !== 'launch' && args.actionType !== 'message') { - // this.logger.warn('Action Type(%s) specified in app2app query URL parameter is invalid', args.actionType); - this.logger.warn('ZWED5194W', args.actionType); - return false; - } - if (args.actionMode !== 'create' && args.actionMode !== 'system') { - // this.logger.warn('Action Mode(%s) specified in app2app query URL parameter is invalid', args.actionMode); - this.logger.warn('ZWED5195W', args.actionMode); - return false; - } - try { - JSON.parse(args.contextData); - } catch (e) { - // this.logger.warn('Context Data(%s) specified in app2app query URL parameter is not valid JSON', args.contextData); - this.logger.warn('ZWED5196W', args.contextData); - if (args.formatter == 'data') { // If we know what the plugin is, we can still try to launch it w/o app2app data - args.error = "Context Data specified in app2app query URL parameter is not valid JSON"; - } - } - if (args.formatter !== 'data') { - const abstractAction = dispatcher.getAbstractActionById(args.formatter); - if (!abstractAction) { - // this.logger.warn('Unable to find registered action for identifier %s specified in app2app query URL parameter', args.formatter); - this.logger.warn('ZWED5197W', args.formatter); - return false; - } - } - return true; - } - - private invokeApp2App(args: App2AppArgs): void { - const { dispatcher } = ZoweZLUX; - const ActionType = dispatcher.constants.ActionType; - const ActionTargetMode = dispatcher.constants.ActionTargetMode; - const targetPluginId = args.pluginId; - const type = args.actionType === 'launch' ? ActionType.Launch : ActionType.Message; - const mode = args.actionMode === 'create' ? ActionTargetMode.PluginCreate : ActionTargetMode.System; - let contextData: any; - let contextZlux = args.contextZlux ? JSON.parse(args.contextZlux) : undefined; - let action: ZLUX.Action; - let argumentData: any; - if (args.error) { - this.popupManager.createErrorReport( - ZluxErrorSeverity.WARNING, - this.translation.translate(args.error), - (this.translation.translate('Bad data: ') + args.contextData), - { - blocking: false, - buttons: [this.translation.translate('Dismiss')] - } - ); - } else { - contextData = JSON.parse(args.contextData); - } - if (args.formatter === 'data') { - const actionTitle = 'Launch app from URL'; - const actionId = 'org.zowe.zlux.url.launch'; - const argumentFormatter = { data: { op: 'deref', source: 'event', path: ['data'] } }; - action = dispatcher.makeAction(actionId, actionTitle, mode, type, args.pluginId, argumentFormatter); - argumentData = contextZlux ? { data: contextData, zlux: contextZlux } : { data: contextData }; - } else { - const abstractAction = dispatcher.getAbstractActionById(args.formatter); - action = { - ...abstractAction, - targetPluginID: targetPluginId, - type: type, - targetMode: mode, - }; - argumentData = contextData; - } - dispatcher.invokeAction(action, argumentData) - .then(() => {}) - .catch((e:any) => this.handleInvokeActionError(e)); - } - - private getAllApp2AppArgsFromURL(): App2AppArgs[] { - const app2appArray: string[][] = StartURLManager.getApp2AppArgsArray(); - return app2appArray.map(value => this.parser.parse(value)); - } - - public static getApp2AppArgsArray(url?: string): string[][] { - const queryString = url || location.search.substr(1); - const app2appArray: string[][] = []; - queryString.split('&').forEach(part => { - const [key, value] = part.split('=').map(v => decodeURIComponent(v)); - if (ZOWE_URL_ARGS.includes(key)) { - app2appArray.push([key, value]); - } - }); - return app2appArray; - } - - private registerTestAction(): void { - const { dispatcher } = ZoweZLUX; - const actionTitle = 'test action'; - const actionId = 'org.zowe.zlux.test.action'; - const argumentFormatter = { data: { op: 'deref', source: 'event', path: ['data'] } }; - const type = dispatcher.constants.ActionType.Launch; - const mode = dispatcher.constants.ActionTargetMode.PluginCreate; - const testAction = dispatcher.makeAction(actionId, actionTitle, mode, type, 'org.zowe.zlux.ng2desktop', argumentFormatter); - dispatcher.registerAction(testAction); - } - - private handleInvokeActionError(e: Error | string) { - if (typeof e === 'string') { - this.logger.warn(e); - } else if (e instanceof Error) { - this.logger.warn(e.message); - } - } - -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/desktop/desktop.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/desktop/desktop.component.html deleted file mode 100644 index e3c0a1b8f..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/desktop/desktop.component.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/desktop/desktop.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/desktop/desktop.component.ts deleted file mode 100644 index 5734adce6..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/desktop/desktop.component.ts +++ /dev/null @@ -1,254 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Injector } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { ContextMenuItem } from 'pluginlib/inject-resources'; -import { WindowManagerService } from '../shared/window-manager.service'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { AuthenticationManager } from '../../../authentication-manager/authentication-manager.service'; -import { L10nTranslationService } from 'angular-l10n'; -import { Colors } from '../shared/colors'; - -const ACCOUNT_PASSWORD = "Account Password"; -const PASSWORD_CHANGED = "PasswordChanged" -const ENABLE_PLUGINS_ADDED_TIMEOUT = 1000; - -@Component({ - selector: 'rs-com-mvd-desktop', - templateUrl: 'desktop.component.html' -}) -export class DesktopComponent implements MVDHosting.LoginActionInterface { - contextMenuDef: {xPos: number, yPos: number, items: ContextMenuItem[]} | null; - private authenticationManager: MVDHosting.AuthenticationManagerInterface; - public isPersonalizationPanelVisible: boolean; - private readonly log: ZLUX.ComponentLogger = BaseLogger; - - /* Default theme is a dark grey, with white text, on medium size desktop */ - public _theme: DesktopTheme = { - color: { - windowTextActive: '#f4f4f4', - windowTextInactive: '#828282', - windowColorActive: Colors.COOLGREY_80, - windowColorInactive: Colors.COOLGREY_90, - launchbarText: Colors.COOLGREY_20, - launchbarColor: '#0d0d0eb2', - launchbarMenuText: Colors.COOLGREY_20, - launchbarMenuColor: Colors.COOLGREY_90 - }, - size: { - window: 2, - launchbar: 2, - launchbarMenu: 2 - } - } - - constructor( - public windowManager: WindowManagerService, - private authenticationService: AuthenticationManager, - private http: HttpClient, - private injector: Injector, - private translation: L10nTranslationService - ) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken); - this.contextMenuDef = null; - this.authenticationManager.registerPostLoginAction(this); - this.authenticationManager.registerPostLoginAction(new AppDispatcherLoader(this.http, this.injector)); - this.authenticationService.loginScreenVisibilityChanged.subscribe((eventReason: MVDHosting.LoginScreenChangeReason) => { - switch (eventReason) { - case MVDHosting.LoginScreenChangeReason.PasswordChangeSuccess: - const notifTitle = this.translation.translate(ACCOUNT_PASSWORD); - const notifMessage = this.translation.translate(PASSWORD_CHANGED); - const desktopPluginId = ZoweZLUX.pluginManager.getDesktopPlugin().getIdentifier(); - this.hidePersonalizationPanel(); - ZoweZLUX.notificationManager.notify(ZoweZLUX.notificationManager.createNotification(notifTitle, notifMessage, 1, desktopPluginId)); - break; - default: - } - }); - } - - ngOnInit(): void { - this.windowManager.contextMenuRequested.subscribe(menuDef => { - this.contextMenuDef = menuDef; - }); - } - - onLogin(username:string, plugins: ZLUX.Plugin[]): boolean { - // When the user logs in, we attempt to retrieve their theme settings from the configuration dataservice - this.http.get(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(), 'ui/theme', 'config.json')).subscribe((data: any) => { - if (data) { - this.log.debug('Desktop config=',data.contents); - if (Object.keys(data.contents).length !== 0) { //If the retrived theme became blank, we don't replace existing one with a corrupt object - this._theme = (data.contents as DesktopTheme); - } - } else { - this.log.debug('No Desktop config found. Using defaults.'); - } - }); - return true; - } - - setTheme(newTheme: DesktopTheme) { - this.log.debug('Req to change to =', newTheme); - this._theme = Object.assign({}, newTheme); - this.http.put(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(), 'ui/theme', 'config.json'), this._theme).subscribe((data: any) => { this.log.info(`Theme saved.`) }); - } - - previewTheme(newTheme: DesktopTheme) { - this.log.debug('Previewing (not saved yet) to =', newTheme); - this._theme = Object.assign({}, newTheme); - } - - getTheme() { - return this._theme; - } - - showPersonalizationPanel(): void { - this.isPersonalizationPanelVisible = true; - } - - hidePersonalizationPanel(): void { - this.isPersonalizationPanelVisible = false; - } - - personalizationPanelToggle(): void { - if (this.isPersonalizationPanelVisible) - { - this.isPersonalizationPanelVisible = false; - } else { - this.isPersonalizationPanelVisible = true; - } - } - - closeContextMenu(): void { - this.contextMenuDef = null; - } -} - -export type DesktopTheme = { - color: { - windowTextActive: string; - windowTextInactive: string; - windowColorActive: string; - windowColorInactive: string; - launchbarText: string; - launchbarColor: string; - launchbarMenuColor: string; - launchbarMenuText: string; - } - size: { - window: number; - launchbar: number; - launchbarMenu: number; - } -} - -class AppDispatcherLoader implements MVDHosting.LoginActionInterface { - private readonly log: ZLUX.ComponentLogger = BaseLogger; - private pluginManager: MVDHosting.PluginManagerInterface; - static enablePluginsAddedSubscribe: boolean; - constructor( - private http: HttpClient, - private injector: Injector) { - this.pluginManager = this.injector.get(MVDHosting.Tokens.PluginManagerToken); - AppDispatcherLoader.enablePluginsAddedSubscribe = false; - this.pluginManager.pluginsAdded.subscribe((plugins: ZLUX.Plugin[])=> { - if (AppDispatcherLoader.enablePluginsAddedSubscribe) { - this.getAndDispatchRecognizers(plugins); - this.getAndDispatchActions(plugins); - } - }); - } - - onLogin(username:string, plugins:ZLUX.Plugin[]):boolean { - this.getAndDispatchRecognizers(plugins); - this.getAndDispatchActions(plugins); - // To not double-load recognizers & actions, we enable pluginsAdded subscribe after 1 second - setTimeout(() => { AppDispatcherLoader.enablePluginsAddedSubscribe = true; }, ENABLE_PLUGINS_ADDED_TIMEOUT); - return true; - } - - getAndDispatchRecognizers(plugins: ZLUX.Plugin[]) { - let desktop:ZLUX.Plugin = ZoweZLUX.pluginManager.getDesktopPlugin(); - let recognizersUri = ZoweZLUX.uriBroker.pluginConfigUri(desktop,'recognizers'); - this.log.debug(`Getting recognizers from "${recognizersUri}"`); - this.http.get(recognizersUri).subscribe((config: any)=> { - if (config && config.contents) { - let appContents = config.contents; - plugins.forEach((plugin:ZLUX.Plugin)=> { - const id = plugin.getIdentifier(); - if (appContents[id] && appContents[id].recognizers) { // If config has pre-existing recognizers for this plugin id, - appContents[id].recognizers.forEach((recognizerObject: any)=> { - ZoweZLUX.dispatcher.addRecognizerObject(recognizerObject); // register each object with the Dispatcher. - }); - this.log.info(`ZWED5055I`, appContents[id].recognizers.length, id); //this.log.info(`Loaded ${appContents[id].recognizers.length} recognizers for App(${id})`); - } - }); - } - }); - } - - getAndDispatchActions(plugins: ZLUX.Plugin[]) { - let desktop:ZLUX.Plugin = ZoweZLUX.pluginManager.getDesktopPlugin(); - let actionsUri = ZoweZLUX.uriBroker.pluginConfigUri(desktop,'actions'); - this.log.debug(`Getting actions from "${actionsUri}"`); - this.http.get(actionsUri).subscribe((config: any)=> { - if (config && config.contents) { - let appContents = config.contents; - plugins.forEach((plugin:ZLUX.Plugin)=> { - const id = plugin.getIdentifier(); - if (appContents[id] && appContents[id].actions) { // If config has pre-existing actions for this plugin id, - appContents[id].actions.forEach((actionObject: any)=> { - if (this.isValidAction(actionObject)) { - ZoweZLUX.dispatcher.registerAbstractAction(ZoweZLUX.dispatcher.makeActionFromObject(actionObject)); - } - }); - this.log.info(`ZWED5056I`, appContents[id].actions.length, id); //this.log.info(`Loaded ${appContents[id].actions.length} actions for App(${id})`); - } - }); - } - }); - } - - isValidAction(actionObject: any): boolean { - switch (actionObject.objectType) { - case 'ActionContainer': - return actionObject.id && actionObject.defaultName && actionObject.children && actionObject.children.length > 0; - - default: - const mode: any = ZoweZLUX.dispatcher.constants.ActionTargetMode[actionObject.targetMode]; - const type: any = ZoweZLUX.dispatcher.constants.ActionType[actionObject.type]; - return (actionObject.id && actionObject.defaultName && actionObject.targetId - && actionObject.arg && mode !== undefined && type !== undefined); - } - } -} - -window.onbeforeunload = function(e: Event) { - let dialogText = 'Are you sure you want to navigate away from the Desktop? Apps & Changes will be lost.'; - e.returnValue = false; - return dialogText; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.css deleted file mode 100644 index 728662b02..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.css +++ /dev/null @@ -1,113 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.launchbar-icon-container { - display: inline-block; - box-sizing: border-box; - position: relative; - margin-top: 5px; - margin-left: 5px; - margin-right: 5px; - padding: 0; - user-select: none; - -ms-user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - z-index: 7; - text-align: center; -} - -.launchbar-icon-image.active { - background-position-y: 0px; -} - -.launchbar-caption { - display: inline-block; - position: absolute; - width: 60px; - color: white; - background-color: #00000090; - padding: 2px; - border-radius: 4px; - font-size: 8pt; - bottom: 55px; - left: 0; - line-height: 120%; - z-index: 7; -} - -.launchbar-icon-marker { - margin-bottom: -16px; - padding: 0; - position: absolute; - width: 100%; - height: 5px; - bottom: 2px; - background: transparent; -} - -.launchbar-icon-marker.running { - background: #6de2ff -} - -.launchbar-icon-marker { - display: inline-block; - padding: 0; - margin: 0; - position: absolute; - left: 0; - bottom: 1px; - width: 100%; - height: 4px; - background-color: #dddee0; -} - -.launchbar-icon-marker-blank { - background-color: #ffffff00; -} - - -.launchbar-icon-marker-more { - display: inline-block; - position: absolute; - height: 5px; - width: 5px; - bottom: 13px; - margin: 2px; - right: 3px; - color: #6de2ff; - font-size: 8pt; -} - - -/* SB */ -.launchbar-icon-marker.running.running-multiple { - width: 80%; -} - -.launchbar-icon-marker.launch-bar-running-count { - font-size: 10px; - padding: 0 0 34px 10px; - color: #6de2ff; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.html deleted file mode 100644 index 2dc01a3ab..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.html +++ /dev/null @@ -1,48 +0,0 @@ - - - -
- - -

{{launchbarItem.label}} -

-
-
-
-
-
- - - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.ts deleted file mode 100644 index 0cc2ea42d..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-icon/launchbar-icon.component.ts +++ /dev/null @@ -1,130 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Input, Output, EventEmitter, Injector, ElementRef, ViewChild } from '@angular/core'; -import { DesktopTheme } from "../../desktop/desktop.component"; -import { LaunchbarItem } from '../shared/launchbar-item'; -import { BaseLogger } from '../../../../shared/logger'; - -@Component({ - selector: 'rs-com-launchbar-icon', - templateUrl: './launchbar-icon.component.html', - styleUrls: ['./launchbar-icon.component.css', '../shared/shared.css'] -}) -export class LaunchbarIconComponent { - public iconSize: string; - public indicatorSize: string; - public indicatorPos: string; - public hoverOffset: string; - public hoverBottom: string; - public _theme:DesktopTheme; - private applicationManager: MVDHosting.ApplicationManagerInterface; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private mouseDownListener: boolean; - - @Input() launchbarItem: LaunchbarItem; - @ViewChild('launchbarIconContainer') componentElement: ElementRef; - @Input() set theme(newTheme: DesktopTheme) { - this._theme = newTheme; - this.logger.debug("Set new launchbar icon theme with: ", this._theme); - switch (newTheme.size.launchbar) { - case 1: - this.iconSize="16px"; - this.hoverBottom="14px"; - this.hoverOffset="-22px"; - this.indicatorPos="2px"; - this.indicatorSize = '2px'; - break; - case 3: - this.iconSize="64px"; - this.hoverOffset="0px"; - this.hoverBottom="62px"; - this.indicatorPos="-2px"; - this.indicatorSize = '4px'; - break; - default: //Medium size - 2 - this.iconSize="32px"; - this.hoverOffset="-14px"; - this.hoverBottom="30px"; - this.indicatorPos="2px"; - this.indicatorSize = '2px'; - break; - } - } - @Output() iconClicked: EventEmitter; - - constructor(private injector: Injector) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.applicationManager = this.injector.get(MVDHosting.Tokens.ApplicationManagerToken); - this.iconClicked = new EventEmitter(); - this.mouseDownListener = false; - } - -/* - clicked(): void { - if (this.launchbarItem.instanceCount > 1) { - this.instanceViewVisible = true; - } - } -*/ - - onMouseEnter(event: MouseEvent) { - if (!this.launchbarItem.showInstanceView) { - this.launchbarItem.showIconLabel = true; - } - } - - onMouseLeave(event: MouseEvent) { - this.launchbarItem.showIconLabel = false; - } - - onMouseLeaveInstanceView(event: MouseEvent) { - if (!this.mouseDownListener) { - window.addEventListener('mousedown', () => this.onMouseDownInstanceView()); - this.mouseDownListener = true; - } - } - - onMouseEnterInstanceView(event: MouseEvent) { - this.launchbarItem.showIconLabel = false; - if (!this.mouseDownListener) { - window.addEventListener('mousedown', () => this.onMouseDownInstanceView()); - this.mouseDownListener = true; - } - } - - onMouseDownInstanceView() { - if (this.launchbarItem.showInstanceView && event - && !this.componentElement.nativeElement.contains(event.target)) { - this.launchbarItem.showInstanceView = false; - this.launchbarItem.showIconLabel = false; - this.mouseDownListener = false; - window.removeEventListener('mousedown', () => this.onMouseDownInstanceView()); - } - } - - isRunning(): boolean { - return this.applicationManager.isApplicationRunning(this.launchbarItem.plugin); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.css deleted file mode 100644 index 9c52fb47d..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.css +++ /dev/null @@ -1,71 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.instance-item { - width: 200px; - height: 140px; - margin: 3px; -} - -.instance-viewer { - position: fixed; - height: 156px; - padding: 5px 5px 5px 5px; - background-color: rgb(51,75,107, 0.7); - z-index: 0; - border-radius: 10px; -} - -.all-instances-box { - display: flex; - flex-direction: row; - height: 150px; -} - -.caption { - color: white; - font-size: 8pt; - display: inline-block; -} - -.label-caption { - margin-top: 0px; -} - -.instance-preview { - opacity: 1; - transition: .5s ease; - backface-visibility: hidden; - width: 200px; - height: 120px; - margin-top: -10px; -} - -.instance-preview-caption { - font-size: large; - padding-top: 1rem; -} - -.instance-snapshot:hover .instance-preview { - opacity: 0.5; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.html deleted file mode 100644 index bb0329fcf..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.html +++ /dev/null @@ -1,26 +0,0 @@ - -
-
-
-
-

{{i}} {{getTitleForWindow(windowId)}}

-
-
-

{{i}} {{getTitleForWindow(windowId)}}

-
-
- -
-
-
-
diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.ts deleted file mode 100644 index 12ae2ab65..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-instance-view/launchbar-instance-view.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Input } from '@angular/core'; -import { DesktopTheme } from "../../desktop/desktop.component"; -import { LaunchbarItem } from '../shared/launchbar-item'; -import { WindowManagerService } from '../../shared/window-manager.service'; - -const INSTANCE_INITIAL_OFFSET = 180 -const INSTANCE_ADDITIONAL_OFFSET = 105 - -@Component({ - selector: 'zowe-launchbar-instance-view', - templateUrl: './launchbar-instance-view.component.html', - styleUrls: ['./launchbar-instance-view.component.css'] -}) -export class LaunchbarInstanceViewComponent { - - public viewerBottom:string; - public color:any; - - @Input() launchbarItem: LaunchbarItem; - @Input() set theme(newTheme: DesktopTheme) { - this.color = newTheme.color; - switch (newTheme.size.launchbar) { - case 1: - this.viewerBottom = '29px'; - break; - case 3: - this.viewerBottom = '80px'; - break; - default: // Default size is medium - 2 - this.viewerBottom = '45px'; - } - } - constructor(/*@Inject(MVDHosting.Tokens.ApplicationManagerToken) private applicationManager: MVDHosting.ApplicationManagerInterface*/ - public windowManager: WindowManagerService) { - } - - ngOnInit(){ - //Doesn't check right bounds yet, for somereason bounds.right isn't giving the expected values - //and not sure why at this time - this.launchbarItem.showIconLabel = false; - let bounds = (document.getElementsByClassName("instance-viewer")[0]).getBoundingClientRect(); - if (bounds != null) { - if (bounds.left - (INSTANCE_INITIAL_OFFSET + (INSTANCE_ADDITIONAL_OFFSET * (this.launchbarItem.instanceIds.length - 2))) < 0 ) { - (document.getElementsByClassName("instance-viewer")[0]).style.left = '4px'; - } else { - (document.getElementsByClassName("instance-viewer")[0]).style.left = - bounds.left - (INSTANCE_INITIAL_OFFSET + (INSTANCE_ADDITIONAL_OFFSET * (this.launchbarItem.instanceIds.length - 2))) + 'px'; - } - } - } - - getTitleForWindow(windowId: MVDWindowManagement.WindowId): string { - let title = this.windowManager.getWindowTitle(windowId); - if (title === null) { - return ''; - } - return title; - } - - isWindowFocused(windowId: MVDWindowManagement.WindowId): boolean { - return this.windowManager.windowHasFocus(windowId); - } - - clicked(windowId: MVDWindowManagement.WindowId, item: LaunchbarItem): void { - this.windowManager.requestWindowFocus(windowId); - } - - getPreview(index: number, item: LaunchbarItem) { - try { - return item.windowPreviews[index].src; - } - catch(err) { - // this spams when preview is pending or App doesnt work with preview, - // and the failure case is obvious enough that a console log doesnt help - return null; - } - } -} diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.css deleted file mode 100644 index 6ec477a54..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.css +++ /dev/null @@ -1,159 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ -.launchbar-menu-icon { - margin-top: 5px; - margin-left: 5px; - margin-right: 5px; - padding: 0; - background-image: url("../../../../../assets/images/launchbar/menu-zowe-icon.png"); -} - -.app-label { - display: inherit; -} - -.launch-menu-search { - position:absolute; - bottom: 5px; - left: 10px; - width: 100%; -} - -.launch-menu-search-input { - width: calc(100% - 10px); - border-color: transparent; - background-color: #ffffff55; - border-radius: 0px 0px 7px 7px; - padding-left: 30px; - margin-left: -5px; -} - -.launch-menu-search-input::placeholder { - color: white; -} - -.launch-menu-search-icon { - padding: 5px; - float: left; - position: absolute; - background-color: transparent; -} - -.launch-menu-scroller { - overflow-y: scroll; - width: 315px; - height: 295px; - bottom: 35px; - position: absolute; - background: #dde8f1; -} - -.launch-menu-scroller::-webkit-scrollbar:enabled { - background: #ffffff55; -} - -.refresh-plugins { - float:right; -} - -.launch-widget { - height: 100%; - text-align: center; - display: inline-block; - position: absolute; - left: 0; - bottom: 0; - z-index: 7; -} - -.icon { - box-sizing: border-box; - margin: 5px 10px 5px 0px; - padding: 0; - background: transparent; - background-size: 100%; -} - -.launch-widget-row-settings p { - margin-left: 60px; - line-height: 50px; -} - - -.launch-widget-row { - list-style: none; - margin: 0px 5px; - text-align: left; - cursor: pointer; - display: flex; -} - -.launch-widget-row .icon { - width: 50px; - height: 50px; -} - -.launch-widget-row p { - margin-left: 60px; - line-height: 50px; -} - -.launch-widget-popup { - user-select: none; - width: 335px; - height: 365px; - position: absolute; - bottom: 90px; - left: 5px; - border-radius: 10px; - background: #dde8f1; - padding: 5px 10px 0px 5px; -} - -.caret-up { - width: 0; - height: 0; - border-left: 20px solid transparent; - border-right: 20px solid transparent; - - border-bottom: 20px solid #dde8f1; -} - -.caret-down { - width: 0; - height: 0; - border-left: 20px solid transparent; - border-right: 20px solid transparent; - - border-top: 20px solid #dde8f1; -} - -.launch-widget-caret { - position: absolute; - bottom: 70px; - left: 45px; -} - -.launch-widget-row.active { - background-color: #ffffff61; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.html deleted file mode 100644 index 932a8847d..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.html +++ /dev/null @@ -1,78 +0,0 @@ - - -
-
-
- - -
-
- {{translation.translate("Refresh Applications")}} - -
-
-
-
-
-
{{item.label}}
-
-
- -
-
- - - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.ts deleted file mode 100644 index 6de01ac06..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-menu/launchbar-menu.component.ts +++ /dev/null @@ -1,354 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, ElementRef, HostListener, Input, Output, EventEmitter, Injector, ViewChild } from '@angular/core'; -import { Subject } from 'rxjs'; -import { PluginsDataService } from '../../services/plugins-data.service'; -import { LaunchbarItem } from '../shared/launchbar-item'; -import { ContextMenuItem } from 'pluginlib/inject-resources'; -import { WindowManagerService } from '../../shared/window-manager.service'; -import { DesktopComponent, DesktopTheme } from "../../desktop/desktop.component"; -import { L10nTranslationService } from 'angular-l10n'; -import { DesktopPluginDefinitionImpl } from "app/plugin-manager/shared/desktop-plugin-definition"; -import { generateInstanceActions } from '../shared/context-utils'; -import { KeybindingService } from '../../shared/keybinding.service'; -import { KeyCode } from '../../shared/keycode-enum'; - -const FONT_SIZE=12; - -@Component({ - selector: 'rs-com-launchbar-menu', - templateUrl: './launchbar-menu.component.html', - styleUrls: ['./launchbar-menu.component.css', '../shared/shared.css'] -}) -export class LaunchbarMenuComponent implements MVDHosting.LoginActionInterface{ - public displayItems:LaunchbarItem[]; - private _menuItems:LaunchbarItem[]; - public color: any = {}; - public menuIconSize: string; - public appIconSize: string; - public appLabelPadding: string; - public menuBottom: string; - public menuText: string; - public menuWidth: string; - public menuWidthInner: string; - public borderRadius: string; - /* TODO: Implement later - public launchbarIconSize; - public launchbarTextSize; - public launchbarMenuSize; - */ - - public isActive: boolean = false; - public contextMenuRequested: Subject<{xPos: number, yPos: number, items: ContextMenuItem[]}>; - public pluginManager: MVDHosting.PluginManagerInterface; - public applicationManager: MVDHosting.ApplicationManagerInterface; - public propertyWindowPluginDef : DesktopPluginDefinitionImpl; - public authenticationManager : MVDHosting.AuthenticationManagerInterface; - public appFilter:string=""; - public activeIndex:number; - private isContextMenuPresent:boolean; - - @Input() set menuItems(items: LaunchbarItem[]) { - this._menuItems = items; - this.displayItems = items; - this.filterMenuItems(); - } - - @Input() set theme(newTheme: DesktopTheme) { - this.color = newTheme.color; - let menuIcon:number; - let appIcon:number; - - switch (newTheme.size.launchbarMenu) { - case 1: - //dont go smaller than 32 for apps - menuIcon = 16; - appIcon = 32; - this.menuWidth = '300px'; - this.menuWidthInner = '290px'; - this.menuText = '12px'; - this.menuBottom = '29px'; - this.borderRadius = '3px 3px 3px 0px'; - break; - case 3: - menuIcon = 64; - appIcon = menuIcon; - this.menuWidth = '410px'; - this.menuWidthInner = '400px'; - this.menuText = '16px'; - this.menuBottom = '80px'; - this.borderRadius = '7px 7px 7px 0px'; - break; - default: // Default is medium size - 2 - menuIcon = 32; - appIcon = menuIcon; - this.menuWidth = '335px'; - this.menuWidthInner = '325px'; - this.menuText = '14px'; - this.menuBottom = '45px'; - this.borderRadius = '5px 5px 5px 0px'; - } - - this.menuIconSize = menuIcon+'px'; - this.appIconSize = appIcon+'px'; - let appLabel:number = Math.round((appIcon/2) - (FONT_SIZE/2)); - this.appLabelPadding = appLabel+'px'; - }; - - @ViewChild('searchapp') searchAppInputRef: ElementRef; - @ViewChild('menudiv') menuDivRef: ElementRef; - - @Output() refreshClicked: EventEmitter; - @Output() itemClicked: EventEmitter; - @Output() menuStateChanged: EventEmitter; - - constructor( - private elementRef: ElementRef, - public windowManager: WindowManagerService, - private pluginsDataService: PluginsDataService, - private injector: Injector, - private translation: L10nTranslationService, - private desktopComponent: DesktopComponent, - private appKeyboard: KeybindingService, - ) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.applicationManager = this.injector.get(MVDHosting.Tokens.ApplicationManagerToken); - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken); - this.pluginManager = this.injector.get(MVDHosting.Tokens.PluginManagerToken); - this.itemClicked = new EventEmitter(); - this.refreshClicked = new EventEmitter(); - this.menuStateChanged = new EventEmitter(); - this.authenticationManager.registerPostLoginAction(this); - - this.activeIndex = 0; - this.isContextMenuPresent = false; - } - - onLogin(plugins:any): boolean { - this.pluginManager.findPluginDefinition("org.zowe.zlux.appmanager.app.propview", false).then(viewerPlugin => { - const pluginImpl:DesktopPluginDefinitionImpl = viewerPlugin as DesktopPluginDefinitionImpl; - this.propertyWindowPluginDef=pluginImpl; - }) - return true; - } - - ngOnInit(): void { - this.appKeyboard.keyUpEvent - .subscribe((event:KeyboardEvent) => { - // TODO: Disable bottom app bar once mvd-window-manager single app mode is functional. Variable subject to change. - if (event.which === KeyCode.KEY_M && !window['GIZA_PLUGIN_TO_BE_LOADED']) { - this.activeToggle(); - } - }); - } - - getAppPropertyInformation(plugin: DesktopPluginDefinitionImpl):any{ - const basePlugin = plugin.getBasePlugin(); - return {"isPropertyWindow":true, - "appName":plugin.defaultWindowTitle, - "appVersion":basePlugin.getVersion(), - "appType":basePlugin.getType(), - "copyright":plugin.getCopyright(), - "image":plugin.image - }; - } - - launchPluginPropertyWindow(plugin: DesktopPluginDefinitionImpl){ - let propertyWindowID = this.windowManager.getWindow(this.propertyWindowPluginDef); - if (propertyWindowID!=null){ - this.windowManager.showWindow(propertyWindowID); - } else { - this.applicationManager.spawnApplication(this.propertyWindowPluginDef,this.getAppPropertyInformation(plugin)); - } - } - - activeToggle(): void { - this.isActive = !this.isActive; - // gain focus and clear on toggle when active - if(this.isActive) { - setTimeout(() => { - this.searchAppInputRef.nativeElement.focus(); - },0); - } - this.emitState(); - } - - setSearchFocus() { - this.searchAppInputRef.nativeElement.focus(); - } - - refresh(): void { - this.resetMenu(); - this.refreshClicked.emit(); - } - - resetMenu(): void { - this.appFilter = ''; - this.displayItems = this._menuItems; - } - - filterMenuItems(): void { - this.activeIndex = 0; - if (this.appFilter) { - let filter = this.appFilter.toLowerCase(); - this.displayItems = this._menuItems.filter((item)=> { - return ((item.tooltip.toLowerCase() as any).includes(filter) - || (item.label.toLowerCase() as any).includes(filter)); - }); - } else { - this.displayItems = this._menuItems; - } - } - - clicked(item: LaunchbarItem): void { - this.itemClicked.emit(item); - this.isActive = false; - this.emitState(); - } - - closeApplication(item: LaunchbarItem): void { - let windowId = this.windowManager.getWindow(item.plugin); - if (windowId != null) { - this.windowManager.closeWindow(windowId); - } - } - - /** - * Close the launchbar icon if the user clicks anywhere other than on the launchbar area - */ - @HostListener('document:mousedown', ['$event']) - onMouseDown(event: MouseEvent): void { - if (this.isActive && event && !this.elementRef.nativeElement.contains(event.target)) { - this.activeToggle(); - } - } - - - - @HostListener('keydown', ['$event']) - onKeyDown(event: KeyboardEvent) { - if(this.isContextMenuInDom()) { - event.preventDefault(); - return; - } - - // eating one render cycle - if(this.isContextMenuPresent) { - event.preventDefault(); - this.isContextMenuPresent = false; - return; - } - - if(!this.isSearchFocus()) return; - - switch(event.which) { - case KeyCode.ESCAPE: { - this.activeToggle(); - break; - } - case KeyCode.ENTER: { - if(this.activeIndex0) { - this.activeIndex--; - } else { - this.activeIndex=0; - } - this.scrollToActiveMenuItem(); - break; - } - case KeyCode.DOWN_ARROW: { - if(this.activeIndex < this.displayItems.length-1) { - this.activeIndex++; - } - this.scrollToActiveMenuItem(); - break; - } - } - } - - private getActiveMenuItem():any { - return this.menuDivRef.nativeElement.querySelectorAll('.launch-widget-row')[this.activeIndex]; - } - - private getContextMenu(item:LaunchbarItem):void { - const elm = this.getActiveMenuItem(); - if(elm) { - const pos = this.getElementPosition(elm); - let menuItems: ContextMenuItem[] = generateInstanceActions(item, this.pluginsDataService, this.translation, this.applicationManager, this.windowManager); - this.windowManager.contextMenuRequested.next({ xPos: pos.x, yPos: pos.y - 20, items: menuItems }); - this.isContextMenuPresent = true; - } - } - - private getElementPosition(elm: any): any { - let x = window.scrollX + elm.getBoundingClientRect().left + 40; - let y = window.scrollY + elm.getBoundingClientRect().top + 50; - return {x:x, y:y}; - } - - private scrollToActiveMenuItem(): void { - const elm = this.getActiveMenuItem(); - if(elm) { - elm.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'start' }); - } - } - - private isContextMenuInDom(): boolean { - return document.querySelector('com-rs-mvd-context-menu') !== null; - } - - private isSearchFocus(): boolean { - return document.activeElement === this.searchAppInputRef.nativeElement; - } - - private emitState(): void { - this.menuStateChanged.emit(this.isActive); - } - - onRightClick(event: MouseEvent, item: LaunchbarItem): boolean { - event.stopPropagation(); - let menuItems: ContextMenuItem[] = generateInstanceActions(item, this.pluginsDataService, this.translation, this.applicationManager, this.windowManager); - this.windowManager.contextMenuRequested.next({ xPos: event.clientX, yPos: event.clientY - 20, items: menuItems }); - this.isContextMenuPresent = true; - return false; - } - - personalizationPanelToggle() { - this.desktopComponent.personalizationPanelToggle(); - //this.activeToggle(); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.css deleted file mode 100644 index 685e96de2..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.css +++ /dev/null @@ -1,250 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.clock { - float: right; - user-select: none; -} - -.two-row { - line-height: 1.25; -} - -.widget-area { - float: right; - position: absolute; - bottom: 0; - right: 0; - width: fit-content; - min-width: 175px; /* fit-content seems to fail at times with Safari, min-width here as a safety */ - height: 100%; - z-index: 7; - color: #eee; - padding-left: 5px; - padding-right: 10px; - text-align: right; - display: block; -} - -.launchbar-tray-icon { - float: left; - width: 32px; - height: 32px; - margin-right: 7px; - background-size: 32px 32px; - background-repeat: no-repeat; - background-position: center; - cursor: pointer; -} - -.launchbar-tray-icon.user { - background-image: url('../../../../../assets/images/launchbar/person.png'); - margin-right: 12px; -} - -.launchbar-tray-icon.settings { - background-image: url('../../../../../assets/images/launchbar/settings.png'); -} - -.launchbar-tray-icon.notification { - background-image: url('../../../../../assets/images/launchbar/notifications/notification.png'); -} - -.launchbar-user:hover { - opacity: 0.9; -} - -.launchbar-user-popup { - width: 155px; - min-height: 120px; - position: absolute; - bottom: 70px; - border-radius: 10px; - right: 5px; - background: #dde8f1; - padding: 10px 15px; - z-index: 7; -} - -.launchbar-user-popup.hidden { - display: none; -} - -.launchbar-plugin-version { - font-size: smaller; - margin-top: 5px; - color: #3333337d; -} - -.btn.btn-primary.launchbar-button{ - width: 100%; - margin: 5px 0px 5px 0px; -} - -.launch-user-caret { - position: absolute; - bottom: 70px; - right: 10px; -} - -.launchbar-username { - text-align: center; -} - -.notifications { - width: 335px; - height: 350px; - border-radius: 10px; - background: #dde8f1; - overflow-y: auto; - position: absolute; - right: 5px; - bottom: 46px; -} - -.caret-up { - width: 0; - height: 0; - border-left: 20px solid transparent; - border-right: 20px solid transparent; - - border-bottom: 20px solid #dde8f1; -} - -.caret-down { - width: 0; - height: 0; - border-left: 20px solid transparent; - border-right: 20px solid transparent; - border-top: 20px solid #dde8f1; - float: right; - margin-right: 140px; - margin-top: -90px; -} - -.outer-container { - padding: 10px; -} - -.notification-item { - transition: 0.3s; -} - -.notification-item:after:hover { - background: rgba(255,255,255,0.1); -} - -.notification-icon-container { - width: 55px; - height: 40px; - display: inline-block; - vertical-align: top; -} - - -.notification-icon { - max-width: 40px; - margin-left: 2px; - margin-top: 2px; -} - -.notification-content { - display: inline-block; - width: 210px; -} - -.notification-title { - font-weight: 600; - font-size: 16px; -} - -.notification-message { - word-break: break-word; -} - -.delete-notification { - display: inline-block; - width: 12px; - height: 12px; - color: black; - vertical-align: top; - float: right; - opacity: .5; - transition: 0.3s; - -} - -.delete-notification:hover { - opacity: 1; -} - -.time { - font-size: 12px; - float: left; -} - -.timeAgo { - font-size: 12px; - float: right; -} - -.time-container { - display: inline-block; - margin-left: 55px; - width: 240px; - margin-top: 5px; -} - -.launchbar-tray-indicator { - float: left; - width: 22px; - height: 22px; - border-radius: 50%; - background: red; - margin-top: -13px; - margin-left: 17px; - background-size: 32px 32px; - background-repeat: no-repeat; - background-position: center; - cursor: pointer; - text-align: center; - vertical-align: middle; - line-height: 22px; -} - -.notification-breaker { - margin-top: 0px; - margin-bottom: 0px; -} - -::ng-deep .org_zowe_zlux_ng2desktop_snackbar { - background-color: #dde8f1 !important; - color: black !important; - padding: 5px !important; -} - -.no-notifications { - font-size: x-large; - text-align: center; - vertical-align: middle; - line-height: 13; -} -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.html deleted file mode 100644 index 677dfcba9..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.html +++ /dev/null @@ -1,105 +0,0 @@ - - -
-
{{getUsername()}}
- -
{{getPluginVersion()}}
-
- -
-
{{NoNotifications}}
-
-
-
- -
-
-
{{item['notification'].title}}
-
{{item['notification'].message}}
-
- Delete notification -
-
{{item.recievedDate.toLocaleTimeString()}}
-
{{timeSince[i]}}
-
-
-
-
-
- -
-
- {{date | date:'shortTime'}} -
- {{date | date:'shortDate'}} -
-
- {{date | date:'shortDate'}} {{date | date:'shortTime'}} -
-
-
- {{notifications.length}} -
-
-
-
-
- - - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts deleted file mode 100644 index e7712d4e3..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts +++ /dev/null @@ -1,320 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { - Component, - ElementRef, - EventEmitter, - HostListener, - Injector, - OnInit, - Output, - ViewChild, - Input - } from '@angular/core'; -import { interval } from 'rxjs'; -import { DesktopComponent, DesktopTheme } from "../../desktop/desktop.component"; -import { LanguageLocaleService } from '../../../../i18n/language-locale.service'; -import { BaseLogger } from '../../../../shared/logger'; -import { MatSnackBar } from '@angular/material/snack-bar'; -import { SnackbarComponent } from '../shared/snackbar/snackbar.component'; -import { LaunchbarItem } from '../shared/launchbar-item'; -import { WindowManagerService } from '../../shared/window-manager.service'; -import { L10nTranslationService } from 'angular-l10n'; - -@Component({ - selector: 'rs-com-launchbar-widget', - templateUrl: 'launchbar-widget.component.html', - styleUrls: [ 'launchbar-widget.component.css', '../shared/shared.css' ], - providers: [LanguageLocaleService], -}) -export class LaunchbarWidgetComponent implements MVDHosting.ZoweNotificationWatcher, OnInit { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private readonly plugin: any = ZoweZLUX.pluginManager.getDesktopPlugin(); - public date: Date; - public popupVisible: boolean; - public fontSize:string; - - public clockTwoRow: boolean = true; - public clockOffset: string; - public widgetOffset: string; - public widgetSize: string; - public areaSize: string; - public popupBottom: string; - public color: any; - public borderRadius: string; - public notifCountSize: string; - public notifTopOffset: string; - public notifLeftOffset: string; - public closeImage: string = require('../../../../../assets/images/window/close-active.png') - - private authenticationManager: MVDHosting.AuthenticationManagerInterface; - public notificationsVisible: boolean; - private info: any[]; - private applicationManager: MVDHosting.ApplicationManagerInterface; - public notifications: any[]; - - /* I18n strings */ - - public NoNotifications: string; - - @Input() set theme (newTheme: DesktopTheme) { - this.info; - this.color = newTheme.color; - - switch (newTheme.size.launchbar) { - case 1: - this.clockTwoRow = false; - this.clockOffset = '5px'; - this.widgetOffset = '5px'; - this.areaSize = "188px"; - this.widgetSize="16px"; - this.fontSize = '12px'; - this.popupBottom = '30px'; - this.borderRadius = '3px 3px 0px 3px'; - this.notifCountSize = '15px'; - this.notifTopOffset = '-9px'; - this.notifLeftOffset = '7px'; - break; - case 3: - this.clockTwoRow = true; - this.widgetOffset = '24px'; - this.clockOffset = '20px'; - this.areaSize = "200px"; - this.widgetSize="32px"; - this.fontSize = '16px'; - this.popupBottom = '81px'; - this.borderRadius = '7px 7px 0px 7px'; - this.notifCountSize = '22px'; - this.notifTopOffset = '-13px'; - this.notifLeftOffset = '17px'; - break; - default: //Default size is medium - 2 - this.clockTwoRow = true; - this.clockOffset = '5px'; - this.widgetOffset = '10px'; - this.areaSize = "175px"; - this.widgetSize="24px"; - this.fontSize = '14px'; - this.popupBottom = '46px'; - this.borderRadius = '5px 5px 0px 5px'; - this.notifCountSize = '18px'; - this.notifTopOffset = '-11px'; - this.notifLeftOffset = '10px'; - break; - } - } - - @Output() popupStateChanged = new EventEmitter(); - - @ViewChild('usericon') userIcon: ElementRef; - @ViewChild('logoutbutton') logoutButton: ElementRef; - @ViewChild('notificationarea') notificationArea: ElementRef; - @ViewChild('notificationicon') notificationIcon: ElementRef; - - @Input() menuItems: LaunchbarItem[]; - - // Convenience widgets for testing the i18n work - // @ViewChild('languagebutton') languageButton: ElementRef; - // @ViewChild('clearlanguagebutton') clearLanguageButton: ElementRef; - // @ViewChild('localebutton') localeButton: ElementRef; - - constructor( - private injector: Injector, - private languageLocaleService: LanguageLocaleService, - private desktopComponent: DesktopComponent, - private snackBar: MatSnackBar, - public windowManager: WindowManagerService, - public translation: L10nTranslationService, - ) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken); - this.applicationManager = this.injector.get(MVDHosting.Tokens.ApplicationManagerToken); - this.date = new Date(); - this.popupVisible = false; - this.notificationsVisible = false; - this.notifications = []; - ZoweZLUX.notificationManager.addMessageHandler(this); - this.updateLanguageStrings(); - } - - ngOnInit(): void { - this.date = new Date(); - - interval(1000).subscribe(() => this.date = new Date()); - } - - getUsername(): string | null { - return this.authenticationManager.getUsername(); - } - - getPluginVersion(): string | null { - return "v. " + this.plugin.version; - } - - logout(): void { - this.notifications.length = 0 - this.popupVisible = false; - this.popupStateChanged.emit(this.popupVisible); - this.authenticationManager.requestLogout(); - } - - togglePopup(): void { - this.popupVisible = !this.popupVisible; - this.popupStateChanged.emit(this.popupVisible); - } - - toggleNotifications(): void { - this.notificationsVisible = !this.notificationsVisible; - } - - togglePersonalizationPanel() { - this.desktopComponent.personalizationPanelToggle(); - } - - @HostListener('document:mousedown', ['$event']) - onMouseDown(event: MouseEvent): void { - if (this.popupVisible && event - && !this.userIcon.nativeElement.contains(event.target) - && this.logoutButton.nativeElement !== event.target - // Convenience widgets for testing the i18n work - // && this.languageButton.nativeElement !== event.target - // && this.clearLanguageButton.nativeElement !== event.target - // && this.localeButton.nativeElement !== event.target - ) { - this.popupVisible = false; - this.popupStateChanged.emit(this.popupVisible); - } - - if(this.notificationsVisible && event - && !this.notificationArea.nativeElement.contains(event.target) - && this.notificationIcon.nativeElement !== event.target) { - this.notificationsVisible = false; - } - } - - setLanguage(value: string): void { - this.languageLocaleService.setLanguage(value).subscribe( - arg => this.logger.debug("ZWED5316I", arg), - err => { - this.logger.warn("ZWED5177W", err); - } - ) - } - - setLocale(value: string): void { - this.languageLocaleService.setLocale('US').subscribe(arg => this.logger.debug("ZWED5317I",arg)) - } - - handleMessageAdded(message: any): void { - let recievedDate = new Date(message.notification.date); - message.recievedDate = recievedDate; - this.notifications.unshift(message) - this.info = this.parsePluginInfo() - let styleClass = "org_zowe_zlux_ng2desktop_snackbar"; - if (message.notification.styleClass) { - styleClass = message.notification.styleClass; - } - let ref = this.snackBar.openFromComponent(SnackbarComponent, {data: this.info[0], duration: 5000, panelClass: styleClass, verticalPosition: 'top', horizontalPosition: 'end'}) - ref.onAction().subscribe(() => { - ZoweZLUX.notificationManager.dismissNotification(message.id) - this.info = this.parsePluginInfo() - }); - } - - handleMessageRemoved(id: number): void { - this.notifications.splice(this.notifications.findIndex(x => x.id === id), 1) - } - - get timeSince() { - let times = [] - for (let notification of this.notifications) { - let currentDate = new Date(); - var seconds = Math.floor((currentDate.getTime() - notification.recievedDate.getTime())/1000); - - var h = Math.floor(seconds / 3600); - var m = Math.floor(seconds % 3600 / 60); - - //TODO: This whole section needs internationalization - var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : ""; - var mDisplay = m > 0 ? m + (m == 1 ? " minute " : " minutes ") : ""; - - if (h > 0) { - times.push(hDisplay + " ago") - } else if (m > 0) { - times.push(mDisplay + " ago"); - } else { - times.push("Less than a minute ago") - } - } - return times - } - - parsePluginInfo(): any[] { - let info: any[] = []; - - for (let notification of this.notifications) { - let imgSrc = "" - for(let item of this.menuItems) { - if (item.plugin.getBasePlugin().getIdentifier() === notification['notification'].plugin) { - imgSrc = item.image || "" - } - } - if (imgSrc === "") { - imgSrc = require('../../../../../assets/images/launchbar/notifications/zowe.png') - } - - - info.push({'title': notification['notification'].title, 'message': notification['notification'].message, "imgSrc": imgSrc}) - } - - return info - } - - deleteNotification(item: any) { - ZoweZLUX.notificationManager.dismissNotification(item.id) - this.info = this.parsePluginInfo(); - } - - focusApplication(i: any) { - let pluginId = this.notifications[i].notification.plugin - - for(let item of this.menuItems) { - if (item.plugin.getBasePlugin().getIdentifier() === pluginId) { - let windowIds = this.windowManager.getWindowIDs(item.plugin) - if (windowIds != null){ - if (windowIds.length > 0) { - this.windowManager.requestWindowFocus(windowIds[0]) - } else { - this.applicationManager.showApplicationWindow(item.plugin); - } - } - } - } - } - - updateLanguageStrings(): void { - this.NoNotifications = this.translation.translate('No Notifications', null); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar.module.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar.module.ts deleted file mode 100644 index d5c6ef11a..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar.module.ts +++ /dev/null @@ -1,63 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { SharedModule } from 'app/shared/shared.module'; - -import { LaunchbarComponent } from './launchbar/launchbar.component'; -import { LaunchbarIconComponent } from './launchbar-icon/launchbar-icon.component'; -import { LaunchbarMenuComponent } from './launchbar-menu/launchbar-menu.component'; -import { LaunchbarWidgetComponent } from './launchbar-widget/launchbar-widget.component'; -import { LaunchbarInstanceViewComponent } from './launchbar-instance-view/launchbar-instance-view.component'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { SnackbarComponent } from './shared/snackbar/snackbar.component' -import { SortArray } from './shared/sort-array' -import { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar'; - - -@NgModule({ - imports: [ - CommonModule, - SharedModule, - MatSnackBarModule, - FormsModule - ], - declarations: [ - LaunchbarComponent, - LaunchbarIconComponent, - LaunchbarMenuComponent, - LaunchbarWidgetComponent, - LaunchbarInstanceViewComponent, - SnackbarComponent, - SortArray - ], - entryComponents: [SnackbarComponent], - exports: [ - LaunchbarComponent - ], - providers: [ { provide: MAT_SNACK_BAR_DATA, useValue: {} }] -}) -export class LaunchbarModule { } - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.css deleted file mode 100644 index b79e3bf01..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.css +++ /dev/null @@ -1,53 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.launchbar-container { - box-sizing: border-box; - position: absolute; - width: 100%; - bottom: 0; - background: transparent; - text-align: left; - margin: 0; - padding: 0; - z-index: 19000; - display: flex; - flex-direction: column; - justify-content: flex-end; -} - -.launchbar-container.active { - z-index: 10000; -} - -.applist { - box-sizing: border-box; - display: flex; - background: transparent; - text-align: left; - z-index: 6; - margin: 0; - height: 100%; - padding: 0; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.html deleted file mode 100644 index 6c3a0fbba..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - -
- - -
- - - - -
- -
- - - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.ts deleted file mode 100644 index 784b981a8..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/launchbar/launchbar.component.ts +++ /dev/null @@ -1,380 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Injector, Input, Output, EventEmitter } from '@angular/core'; -import { Subject } from 'rxjs'; -import { LaunchbarItem } from '../shared/launchbar-item'; -import { PluginLaunchbarItem } from '../shared/launchbar-items/plugin-launchbar-item'; -import { DesktopPluginDefinitionImpl } from "app/plugin-manager/shared/desktop-plugin-definition"; -import { ContextMenuItem } from 'pluginlib/inject-resources'; -import { WindowManagerService } from '../../shared/window-manager.service'; -import { PluginsDataService } from '../../services/plugins-data.service'; -import { L10nTranslationService } from 'angular-l10n'; -import { generateInstanceActions } from '../shared/context-utils'; -import { DesktopTheme } from '../../desktop/desktop.component'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { ThemeEmitterService } from '../../services/theme-emitter.service'; -import { Colors } from '../../shared/colors' - -/* Current default theme is dark grey, with light text */ -const DEFAULT_COLOR = "#252628" -const DEFAULT_TEXT_COLOR = "#dddee0" -const DEFAULT_SIZE = 2; - -@Component({ - selector: 'rs-com-launchbar', - templateUrl: './launchbar.component.html', - styleUrls: ['./launchbar.component.css', '../shared/shared.css'], - providers: [PluginsDataService] -}) -export class LaunchbarComponent implements MVDHosting.LogoutActionInterface { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - @Output() changeTheme = new EventEmitter(); - @Output() previewTheme = new EventEmitter(); - - //Always 6+icon size, due to need for space for padding and such - public barSize: string; - public displayAppBar: string; - public applistMargin: string; - public applistPadding: string; - public _theme: DesktopTheme; - - @Input() set theme(newTheme: DesktopTheme) { - this.logger.info('Launchbar theme set=',newTheme); - // Used to update the emitter service to sync up personalization panel with loaded theme color upon startup - this.themeService.mainColor = newTheme.color.launchbarMenuColor; - this.themeService.mainSize = newTheme.size.window; - this._theme = newTheme; - - switch (newTheme.size.launchbar) { - case 1: - //16 for icon, 2 for indicator, 1 for bottom and 3 for top - this.barSize = '25px'; - this.applistPadding = '3px'; - this.applistMargin = `0px 191px 0px 29px`; - break; - case 3: - //64 for icon, 4 for indicator, 2 for pad bottom, 6 for pad top - this.barSize = '76px'; - this.applistPadding = '7px'; - this.applistMargin = `0px 205px 0px 79px`; - break; - default: //Default is medium size - 2 - //32 for icon, 2 for indicator, 2 for pad bottom, 4 for pad top - this.barSize = '41px'; - this.applistPadding = '5px'; - this.applistMargin = `0px 179px 0px 46px`; - break; - } - - // TODO: Disable bottom app bar once mvd-window-manager single app mode is functional. Variable subject to change. - if (window['GIZA_PLUGIN_TO_BE_LOADED']) { - this.displayAppBar = "none"; - } else { - this.displayAppBar = "inherit"; - } - } - - public allItems: LaunchbarItem[]; - public runItems: LaunchbarItem[]; - public isActive: boolean; - public contextMenuRequested: Subject<{xPos: number, yPos: number, items: ContextMenuItem[]}>; - public originalX: number; - public mouseOriginalX: number; - public currentEvent: EventTarget | null; - private currentItem: LaunchbarItem | null; - public moving: boolean; - public newPosition: number; - public loggedIn: boolean; - public helperLoggedIn: boolean; - private applicationManager: MVDHosting.ApplicationManagerInterface; - private authenticationManager: MVDHosting.AuthenticationManagerInterface; - private pluginManager: MVDHosting.PluginManagerInterface; - public propertyWindowPluginDef: DesktopPluginDefinitionImpl; - public size: number; - - constructor( - private themeService: ThemeEmitterService, - private pluginsDataService: PluginsDataService, - private injector: Injector, - public windowManager: WindowManagerService, - private translation: L10nTranslationService - ) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.size = 2; - this.applicationManager = this.injector.get(MVDHosting.Tokens.ApplicationManagerToken); - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken); - this.authenticationManager.registerPreLogoutAction(this); - this.pluginManager = this.injector.get(MVDHosting.Tokens.PluginManagerToken); - this.allItems = []; - this.runItems = []; - this.isActive = false; - this.contextMenuRequested = new Subject(); - this.loggedIn = false; - this.helperLoggedIn = false; //helperLoggedIn is to indicate when the initial login happens - this.pluginManager.pluginsAdded.subscribe((plugins:MVDHosting.DesktopPluginDefinition[])=> { - plugins.forEach((p: any)=> { - let pluginDef = p.getBasePlugin().getBasePlugin(); - if (pluginDef.identifier === 'org.zowe.zlux.appmanager.applugin.propview') { - this.propertyWindowPluginDef = p; - } else if (!pluginDef.isSystemPlugin && pluginDef.webContent) { - this.allItems.push(new PluginLaunchbarItem(p, this.windowManager)); - } - }); - this.pluginsDataService.refreshPinnedPlugins(this.allItems); - }); - } - - ngOnInit() { - this.themeService.onColorChange - .subscribe((color:any) => { - this._theme.color.windowColorActive = this.adjustColorByLightness(color.themeColor, 20); - this._theme.color.windowTextActive = color.textColor; - this._theme.color.launchbarColor = this.adjustColorByLightness(color.themeColor, -20)+'b2'; // Adds some transparency to bottom app bar - this._theme.color.launchbarText = color.textColor; - this._theme.color.launchbarMenuColor = color.themeColor; - this._theme.color.launchbarMenuText = color.textColor; - - this.changeTheme.emit(this._theme); - }); - - this.themeService.onColorPreview - .subscribe((color:any) => { - this._theme.color.windowColorActive = this.adjustColorByLightness(color.themeColor, 20); - this._theme.color.windowTextActive = color.textColor; - this._theme.color.launchbarColor = this.adjustColorByLightness(color.themeColor, -20)+'b2'; // Adds some transparency to bottom app bar - this._theme.color.launchbarText = color.textColor; - this._theme.color.launchbarMenuColor = color.themeColor; - this._theme.color.launchbarMenuText = color.textColor; - - this.previewTheme.emit(this._theme); - }); - - this.themeService.onSizeChange - .subscribe((size:any) => { - this._theme.size.window = size.windowSize; - this._theme.size.launchbar = size.launchbarSize; - this._theme.size.launchbarMenu = size.launchbarMenuSize; - - this.changeTheme.emit(this._theme); - }); - - this.themeService.onResetAllDefault - .subscribe(() => { - this.resetThemeDefault(); - }); - } - - resetThemeDefault(): void { // Current default theme is dark grey, with light text - this._theme.size.window = DEFAULT_SIZE; - this._theme.size.launchbar = DEFAULT_SIZE; - this._theme.size.launchbarMenu = DEFAULT_SIZE; - - this._theme.color.windowColorActive = Colors.COOLGREY_80; - this._theme.color.windowTextActive = "#f4f4f4"; - this._theme.color.launchbarColor = "#0d0d0e"+'b2'; - //this._theme.color.launchbarColor = "0d0d0e"+'b2'; - this._theme.color.launchbarText = DEFAULT_TEXT_COLOR; - this._theme.color.launchbarMenuColor = DEFAULT_COLOR; - this._theme.color.launchbarMenuText = DEFAULT_TEXT_COLOR; - - this.changeTheme.emit(this._theme); - } - - // A regex expression roughly equating to lighten (positive num) vs darken (negative num) - adjustColorByLightness(color: string, amount: number): string { - return '#' + color.replace(/^#/, '').replace(/../g, color => ('0'+Math.min(255, Math.max(0, parseInt(color, 16) + amount)).toString(16)).substr(-2)); - } - - getNewItems(): void { - this.pluginManager.loadApplicationPluginDefinitions(true); - } - - onLogout(): boolean { - this.allItems = []; - return true; - } - - ngDoCheck(): void { - if (this.authenticationManager.getUsername() != null) { - this.loggedIn = true; - } else { - this.allItems = []; - this.loggedIn = false; - this.helperLoggedIn = false; - } - if (this.loggedIn) { - this.helperLoggedIn = true; - } - } - - activeToggle(): void { - this.isActive = !this.isActive; - } - - get pinnedItems(): LaunchbarItem[] { - return this.pluginsDataService.pinnedPlugins; - } - - get runningItems(): LaunchbarItem[] { - let openPlugins = this.allItems.filter(item => - this.applicationManager.isApplicationRunning(item.plugin)); - let openItems: LaunchbarItem[]; - openItems = []; - openPlugins.forEach(p => { - if (!this.pluginsDataService.isPinnedPlugin(p)){ - openItems.push(p); - } - }) - return openItems; - } - menuItemClicked(item: LaunchbarItem): void { - this.applicationManager.spawnApplication(item.plugin, null) - } - - launchbarItemClicked(event: MouseEvent, item: LaunchbarItem): void { - if (item.instanceIds.length > 1) { - item.showInstanceView = !item.showInstanceView; - (event.target)!.parentElement!.parentElement!.style.zIndex = '0'; - } else if (item.instanceIds.length == 1) { - let windowId = this.windowManager.getWindow(item.plugin); - if (windowId != null) { - if (this.windowManager.windowHasFocus(windowId)){ - this.windowManager.minimizeToggle(windowId); - } else { - this.windowManager.requestWindowFocus(windowId); - } - } - } else { - item.showInstanceView = false; - this.applicationManager.showApplicationWindow(item.plugin) - } - } - - onStateChanged(isActive: boolean): void { - this.isActive = isActive; - } - - onRightClick(event: MouseEvent, item: LaunchbarItem): boolean { - event.stopPropagation(); - let menuItems: ContextMenuItem[] = generateInstanceActions(item, this.pluginsDataService, this.translation, this.applicationManager, this.windowManager); - this.windowManager.contextMenuRequested.next({xPos: event.clientX, yPos: event.clientY, items: menuItems}); - return false; - } - - onMouseDown(event: MouseEvent, item: LaunchbarItem): void { - (event.target).style.zIndex = '999'; - this.originalX = (event.target).getBoundingClientRect().left - this.mouseOriginalX = event.clientX; - if (event.target != null){ - this.currentItem = item; - this.currentEvent = event.target; - } - if(event.button == 3){ - this.onRightClick(event, item); - } - } - - // Commented out to disable rearrange functionality since there is a bug - onMouseMove(event: MouseEvent, item: LaunchbarItem): void{ - /* - let widget = document.getElementsByClassName("launch-widget"); - let clockStart = window.innerWidth - document.getElementsByClassName("launchbar-clock")[0].clientWidth; - if(event.which == 1){ - let mouseDifference = event.clientX - this.mouseOriginalX; - if (Math.abs(mouseDifference) > 5 && event.target == this.currentEvent && - event.clientX > widget[0].clientWidth + 30 && event.clientX < clockStart - 65) { - this.moving = true; - (event.target).style.position = 'absolute'; - (event.target).style.left = (event.clientX - 30) + 'px'; - } else if (event.clientX < widget[0].clientWidth) { - (event.target).style.left = widget[0].clientWidth +'px'; - } else if (event.clientX > clockStart - 35) { - (event.target).style.left = (clockStart - 65) + 'px'; - } - } - */ - } - - onMouseUpContainer(event: MouseEvent): void { - if (this.currentItem != null) { - this.onMouseUp(event, this.currentItem); - } - } - - onMouseUp(event: MouseEvent, item: LaunchbarItem): void { - let mouseDifference = event.clientX - this.mouseOriginalX; - if (Math.abs(mouseDifference) < 5 && event.button == 0) { - this.launchbarItemClicked(event, item); - } else if (!this.pluginsDataService.isPinnedPlugin(item)) { - // The remaining logic assumes a pinned plugin, and messes up when the item is - // not pinned, so, if the plugin is not pinned, jump out here. - return; - } else { - this.moving = false; - } - // Commented out to disable rearrange functionality since there is a bug - /* - if (event.button == 0 && Math.abs(mouseDifference) > 30) { - if(mouseDifference > 0 ) { - mouseDifference += 30; - } else { - mouseDifference += 75; - } - let offset = Math.floor((mouseDifference)/60); - let pluginArray: string[] = []; - this.pluginsDataService.pinnedPlugins.forEach(item => pluginArray.push(item.plugin.getBasePlugin().getIdentifier())); - let index = pluginArray.indexOf(item.plugin.getBasePlugin().getIdentifier()); - if (pluginArray.length > 0) { - this.pluginsDataService.arrayMove(pluginArray, index, index+offset); - } - } else if(event.button == 0 && Math.abs(mouseDifference) > 5) { - this.pluginsDataService.refreshPinnedPlugins(this.allItems); - } - */ - (event.target).style.zIndex = '7'; - this.currentEvent = null; - this.currentItem = null; - } - - // Commented out to disable rearrange functionality since there is a bug - onMouseMoveContainer(event: MouseEvent): void { - /*let widgetEnd = document.getElementsByClassName("launch-widget")[0].clientWidth; - let clockStart = window.innerWidth - document.getElementsByClassName("launchbar-clock")[0].clientWidth; - if (this.moving) { - (event.target)!.parentElement!.parentElement!.style.zIndex = '7'; - if (this.currentEvent != undefined){ - this.newPosition = Math.floor(((this.currentEvent).getBoundingClientRect().left - this.originalX)/60); - if (event.clientX > widgetEnd + 30 && event.clientX < clockStart - 65){ - (this.currentEvent).style.position = 'absolute'; - (this.currentEvent).style.left = (event.clientX - 30) + 'px'; - } else if (event.clientX < widgetEnd) { - (this.currentEvent).style.left = widgetEnd + 'px'; - } else if (event.clientX > clockStart - 35) { - (this.currentEvent).style.left = (clockStart - 65) + 'px'; - } - } - }*/ - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/context-utils.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/context-utils.ts deleted file mode 100644 index 43c0c83c7..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/context-utils.ts +++ /dev/null @@ -1,120 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ -import { LaunchbarItem } from './launchbar-item'; -import { DesktopPluginDefinitionImpl } from 'app/plugin-manager/shared/desktop-plugin-definition'; -import { WindowManagerService } from '../../shared/window-manager.service'; -import { PluginsDataService } from '../../services/plugins-data.service'; -import { ContextMenuItem } from 'pluginlib/inject-resources'; -import { L10nTranslationService } from 'angular-l10n'; - -const PROPERTIES_APP = 'org.zowe.zlux.appmanager.app.propview'; -const PROPERTIES_ARGUMENT_FORMATTER = {data: {op:'deref',source:'event',path:['data']}}; -const UPDATE_PROPERTIES_ACTION = ZoweZLUX.dispatcher.makeAction(PROPERTIES_APP+'.update', - 'Update Properties View', - ZoweZLUX.dispatcher.constants.ActionTargetMode.PluginFindAnyOrCreate, - ZoweZLUX.dispatcher.constants.ActionType.Message, - PROPERTIES_APP, - PROPERTIES_ARGUMENT_FORMATTER); - -function closeAllWindows(item: LaunchbarItem, windowManager: WindowManagerService): void { - let windowIds = windowManager.getWindowIDs(item.plugin); - if (windowIds != null) { - windowIds.forEach(windowId => { - windowManager.closeWindow(windowId); - }); - } -} - -function bringItemFront(item: LaunchbarItem, windowManager: WindowManagerService): void { - let windowId = windowManager.getWindow(item.plugin); - if (windowId != null) { - windowManager.requestWindowFocus(windowId); - } -} - -function getAppPropertyInformation(plugin: DesktopPluginDefinitionImpl):any{ - const pluginImpl:DesktopPluginDefinitionImpl = plugin as DesktopPluginDefinitionImpl; - const basePlugin = pluginImpl.getBasePlugin(); - return {data:{"isPropertyWindow":true, - "appName":pluginImpl.defaultWindowTitle, - "appId":pluginImpl.getIdentifier(), - "appVersion":basePlugin.getVersion(), - "appType":basePlugin.getType(), - "copyright":pluginImpl.getCopyright(), - "image":plugin.image - }}; -} - - -function launchPluginPropertyWindow(plugin: DesktopPluginDefinitionImpl, windowManager: WindowManagerService){ - let propertyPluginDef = ZoweZLUX.pluginManager.getPlugin(PROPERTIES_APP); - let propertyWindowID = windowManager.getWindow(propertyPluginDef); - if (propertyWindowID!=null){ - windowManager.requestWindowFocus(propertyWindowID); - } - const info = getAppPropertyInformation(plugin); - ZoweZLUX.dispatcher.invokeAction(UPDATE_PROPERTIES_ACTION, info); -} - -function openWindow(item: LaunchbarItem, applicationManager: MVDHosting.ApplicationManagerInterface): void { - item.showInstanceView = false; - applicationManager.spawnApplication(item.plugin, null) -} - -function openStandalone(item: LaunchbarItem): void { - const pluginType:string = item.plugin.getFramework(); - //future TODO: initialize cross-window app2app communication?? - if (pluginType === 'iframe' && !(item.plugin.standaloneUseFramework)) { - // Still allows IFrames to comprehend URL parameters if address is copy/pasted later. Should not break any app2app possibilities - let pluginWebContent = item.plugin.getBasePlugin().getWebContent(); - if(pluginWebContent.destination > '') { - window.open(`${location.origin}${ZoweZLUX.uriBroker.pluginIframeUri(item.plugin.getBasePlugin(), '')}`); - } else { - window.open(`${location.origin}${ZoweZLUX.uriBroker.pluginResourceUri(item.plugin.getBasePlugin(), pluginWebContent.startingPage)}`); - } - } else { - window.open(`${location.href}?pluginId=${item.plugin.basePlugin.getIdentifier()}&showLogin=true`); - } -} - -export function generateInstanceActions(item: LaunchbarItem, - pluginsDataService: PluginsDataService, - translationService: L10nTranslationService, - applicationManager: MVDHosting.ApplicationManagerInterface, - windowManager: WindowManagerService): ContextMenuItem[] { - let menuItems: ContextMenuItem[]; - if (item.instanceIds.length == 1) { - menuItems = [ - { "text": translationService.translate("Open New"), "action": ()=> openWindow(item, applicationManager)}, - { "text" : translationService.translate("Open in New Browser Tab"), "action": () => openStandalone(item)}, - { "text": translationService.translate('BringToFront'), "action": () => bringItemFront(item, windowManager) }, - pluginsDataService.pinContext(item), - { "text": translationService.translate('Properties'), "action": () => launchPluginPropertyWindow(item.plugin, windowManager) }, - { "text": translationService.translate("Close All"), "action": ()=> closeAllWindows(item, windowManager)}, - ]; - } else if (item.instanceIds.length != 0) { - menuItems = [ - { "text": translationService.translate("Open New"), "action": ()=> openWindow(item, applicationManager)}, - { "text" : translationService.translate("Open in New Browser Tab"), "action": () => openStandalone(item)}, - pluginsDataService.pinContext(item), - { "text": translationService.translate('Properties'), "action": () => launchPluginPropertyWindow(item.plugin, windowManager) }, - { "text": translationService.translate("Close All"), "action": ()=> closeAllWindows(item, windowManager)} - ]; - } else { - menuItems = - [ - { "text": translationService.translate('Open'), "action": () => openWindow(item, applicationManager) }, - { "text" : translationService.translate("Open in New Browser Tab"), "action": () => openStandalone(item)}, - pluginsDataService.pinContext(item), - { "text": translationService.translate('Properties'), "action": () => launchPluginPropertyWindow(item.plugin, windowManager) }, - ] - } - return menuItems; -} diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/launchbar-item.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/launchbar-item.ts deleted file mode 100644 index 08a6bf5e3..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/launchbar-item.ts +++ /dev/null @@ -1,37 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { DesktopPluginDefinitionImpl } from 'app/plugin-manager/shared/desktop-plugin-definition'; - -export abstract class LaunchbarItem { - abstract readonly label: string; - abstract readonly image: string | null; - abstract readonly tooltip: string; - abstract readonly plugin: DesktopPluginDefinitionImpl; - abstract readonly launchMetadata: any; - abstract readonly windowPreviews: Array; - abstract readonly instanceIds: Array; - showInstanceView: boolean; - showIconLabel: boolean; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/launchbar-items/plugin-launchbar-item.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/launchbar-items/plugin-launchbar-item.ts deleted file mode 100644 index 398f7d9a3..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/launchbar-items/plugin-launchbar-item.ts +++ /dev/null @@ -1,132 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { DesktopPluginDefinitionImpl } from 'app/plugin-manager/shared/desktop-plugin-definition'; -import { LaunchbarItem } from '../launchbar-item'; -import { WindowManagerService } from '../../../shared/window-manager.service'; -import html2canvas from 'html2canvas'; - -export class PluginLaunchbarItem extends LaunchbarItem{// implements ZLUX.PluginWatcher { - public instanceIds: Array; - public windowPreviews: Array; - - constructor( - public readonly plugin: DesktopPluginDefinitionImpl, - public windowManager: WindowManagerService, - ) { - super(); - - this.instanceIds = []; - this.windowPreviews = []; - let pluginId = this.plugin.getBasePlugin().getIdentifier(); - ZoweZLUX.dispatcher.registerPluginWatcher(this.plugin.getBasePlugin(), this); - this.windowManager.screenshotRequestEmitter.subscribe((window: {pluginId: string, windowId: number})=> { - if (window.pluginId != pluginId) { - return; - } - if (this.instanceIds.length < 2) { - return; //performance hack until we get some task viewer that needs this - } - let index = this.instanceIds.indexOf(window.windowId); - if (index != -1) { - // TODO: Generate snapshot code needs optimization due to incredible desktop performance slowdown - // this.generateSnapshot(index); - } - }); - } - - get tooltip(): string { - return this.plugin.basePlugin.getWebContent().descriptionDefault; - } - - get label(): string { - return this.plugin.label; - } - - get image(): string | null { - return this.plugin.image; - } - - get launchMetadata(): any { - return null; - } - - get instanceIdArray(): Array { - return this.instanceIds; - } - - generateSnapshot(index: number){ - var self = this; - let instanceId = self.instanceIds[index]; - if (instanceId != -1) { - var windowHTML = this.windowManager.getHTML(instanceId); - var imgPrev = new Image(); - - if (windowHTML) { - html2canvas(windowHTML, {logging:false}).then(function(canvas) { - imgPrev.src = canvas.toDataURL(); - if (self.instanceIds.length == self.windowPreviews.length){ - self.windowPreviews[index] = imgPrev; - } else { - self.windowPreviews.push(imgPrev); - } - }); - } else if (self.instanceIds.length == self.windowPreviews.length){ - self.windowPreviews.push(imgPrev); - } - } - } - - destroySnapshot(index: number) { - if (index > -1) { - this.windowPreviews.splice(index, 1); - } - } - - instanceAdded(instanceId: MVDHosting.InstanceId, isEmbedded: boolean|undefined) { - //var self = this; - if (!isEmbedded) { - this.instanceIds.push(instanceId); - //let index = this.instanceIds.length-1; - if (this.instanceIds.length != 1) { - //skip first for performance - setTimeout(function() { - // TODO: Generate snapshot code needs optimization due to incredible desktop performance slowdown - //self.generateSnapshot(index); - }, 3000); - } if (this.instanceIds.length == 2) { - //go back and init first. slightly worse for performance - // TODO: Generate snapshot code needs optimization due to incredible desktop performance slowdown - //self.generateSnapshot(0); - } - } - } - instanceRemoved(instanceId: MVDHosting.InstanceId) { - let index = this.instanceIds.indexOf(instanceId); - if (index != -1) { - this.destroySnapshot(index); - this.instanceIds.splice(index,1); - } - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/shared.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/shared.css deleted file mode 100644 index f58ff27c5..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/shared.css +++ /dev/null @@ -1,56 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.launchbar-separator { - position: absolute; - bottom: 0; - height: 100%; - width: 5px; - background-color: #36617a; -} - -.launchbar-separator.right { - right: 0; -} - -.launchbar-separator.left { - left: 0; -} - -.mvd-launchbar-icon { - display: inline-block; - box-sizing: border-box; - position: relative; - user-select: none; - -ms-user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - background-repeat: no-repeat; - background-position-y: 0; - background-position-x: center; - cursor: pointer; - z-index: 7; -} - -.launchbar-large { - height: 70px; -} - -.launchbar-small { - height: 40px; -} - -.mvd-launchbar-icon-large { - background-size: 100%; - width: 60px; - height: 60px; -} diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.css deleted file mode 100644 index c73e9466b..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.css +++ /dev/null @@ -1,91 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.snackbar-icon { - display: inline-block; - margin: 5px; - width: 40px; - height: 40px; -} - -.snackbar-title { - font-weight: 600; - font-size: 16px; -} - -.snackbar-data { - word-break: break-word; - font-size: small; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; -} - -.snackbar-container { - width: 315px; - display: inline-block; -} - -.outer-snackbar-container { - overflow: hidden; -} - -.snackbar-info { - width: 200px; - display: inline-block; - vertical-align: top; - margin: 5px; -} - -.snackbar-dismiss { - display: inline-block; - border-left-style: solid; - vertical-align: top; - position: absolute; - height: 100%; - top:0; - bottom: 0; - right: 0; - margin: auto; - border-width: 1px; - border-color: #8080808f; -} - -.snackbar-dismiss-button { - width: 100%; - height: 100%; - background-color: Transparent; - background-repeat:no-repeat; - overflow: hidden; - outline:none; - border: none; - transition: 0.3s; - padding: 5px; - color: inherit; -} - -.snackbar-dismiss-button:hover { - background-color: #B1BAC1; - border-top-right-radius: 2px; - border-bottom-right-radius: 2px; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.html deleted file mode 100644 index fecee12e7..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - -
-
-
- New notification. {{data.title}} {{data.message}} -
-
{{data.title}}
-
{{data.message}}
-
-
-
- -
-
-
- - - \ No newline at end of file diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.ts deleted file mode 100644 index 44362b987..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/snackbar/snackbar.component.ts +++ /dev/null @@ -1,39 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Inject } from '@angular/core'; -import { MatSnackBarRef, MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar'; -import { L10nTranslationService } from 'angular-l10n'; - -@Component({ - selector: 'app-snackbar', - templateUrl: './snackbar.component.html', - styleUrls: [ 'snackbar.component.css' ] -}) -export class SnackbarComponent { - constructor( - public translation: L10nTranslationService, - public snackBarRef: MatSnackBarRef, - @Inject(MAT_SNACK_BAR_DATA) public data: any - ) { } - -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/sort-array.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/sort-array.ts deleted file mode 100644 index 7e9dab4f7..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/launchbar/shared/sort-array.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Pipe, PipeTransform } from '@angular/core'; - -@Pipe({ - name: "sortBy" -}) -export class SortArray implements PipeTransform { - transform(array: any[], attribute: string): any[] { - array.sort((a: any, b: any) => { - if (a[attribute] < b[attribute]) { - return -1; - } else if (a[attribute] > b[attribute]) { - return 1; - } else { - return 0; - } - }); - return array; - } -} diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/mvd.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/mvd.component.html deleted file mode 100644 index b75a4beab..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/mvd.component.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - -
- - - - -
- - - - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/mvd.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/mvd.component.ts deleted file mode 100644 index 1bd1f031a..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/mvd.component.ts +++ /dev/null @@ -1,35 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component } from '@angular/core'; - -@Component({ - selector: 'rs-com-root', - templateUrl: './mvd.component.html', -}) -export class MvdComponent { - - constructor() { - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.css deleted file mode 100644 index 8bd618cae..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.css +++ /dev/null @@ -1,80 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.personalization-panel { - width: 100%; - height: 100%; - background: black; /* Alpha transparency colors do not work in MS Edge, so opacity must be set */ - opacity: 0.85; - z-index: 5000; /* Set to 5000 so panel stacks on top of windows, - but does not take precendence over launchbar UI (6000+ z-index) */ - position: relative; - float: right; -} - -.personalization-panel-item { - background-repeat: no-repeat; - background-position: center; - cursor: pointer; - border: none; - padding: 70px; - -webkit-filter: drop-shadow( 0px 0px 5px #00000063 ); - filter: drop-shadow( 0px 0px 5px #00000063 ); -} - -.panel-item-foreign_language{ - background-image: url('../../../../../../system-apps/system-settings-preferences/webClient/src/assets/language_icon.png'); -} - -.panel-item-personalization{ - background-image: url('../../../../../../system-apps/system-settings-preferences/webClient/src/assets/personalization.png'); -} - -.panel-item-password{ - background-image: url('../../../../assets/images/login/password-reset.png'); - background-size: contain; -} - -.personalization-panel-ul { - height: 100%; - width: 100%; - padding: 2%; - overflow: auto; - display: flow-root; - text-align: center; -} - -.personalization-panel-li { - display: inline-block; - padding: 2%; -} - -.personalization-panel-span { - color: white; - font-size: x-large; - font-family: inherit; - display: block; - filter: drop-shadow( 0px 0px 5px #000000); - -webkit-filter: drop-shadow( 0px 0px 5px #000000); -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - - \ No newline at end of file diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.html deleted file mode 100644 index 0cb827d79..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.html +++ /dev/null @@ -1,36 +0,0 @@ - - - -
-
    -
  • -
    - {{tool.title}} -
  • -
- - -
- - \ No newline at end of file diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.ts deleted file mode 100644 index 9028f8e81..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization-panel.component.ts +++ /dev/null @@ -1,154 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Injector, HostListener } from '@angular/core'; -import { WindowManagerService } from '../shared/window-manager.service'; -import { DesktopPluginDefinitionImpl } from "../../../../app/plugin-manager/shared/desktop-plugin-definition"; -import { DesktopComponent } from "../desktop/desktop.component"; -import { L10nTranslationService } from 'angular-l10n'; -import { ThemeEmitterService } from '../services/theme-emitter.service'; - -const CHANGE_PASSWORD = "Change Password" -const LANGUAGES = "Languages" -const PERSONALIZATION = "Personalization" - -@Component({ - selector: 'rs-com-personalization-panel', - templateUrl: './personalization-panel.component.html', - styleUrls: ['./personalization-panel.component.css'], - providers: [WindowManagerService] -}) -export class PersonalizationPanelComponent { - @HostListener('document:click', ['$event.target']) - public onClick(targetElement: any) { - if (this.panelMouseHover == false) - { - this.desktopComponent.hidePersonalizationPanel(); - } - } - private settingsWindowPluginDef: DesktopPluginDefinitionImpl; - private pluginManager: MVDHosting.PluginManagerInterface; - public applicationManager: MVDHosting.ApplicationManagerInterface; - public authenticationManager: MVDHosting.AuthenticationManagerInterface; - public personalizationTools = [ /* The following code is commented out, as these host the prototype for future modules - of the Settings & Personalization app. */ - { - "title":this.translation.translate(LANGUAGES), - "imgSrc":"foreign_language", - }, - { - "title":this.translation.translate(CHANGE_PASSWORD), - "imgSrc":"password" - }, - /* { - "title":"User Profile", - "imgSrc":"management", - }, */ - { - "title":this.translation.translate(PERSONALIZATION), - "imgSrc":"personalization", - }, - ]; - private panelMouseHover: boolean; - public showPanel: boolean; - public showPersonalization: boolean; - public panelWidth: string; - public panelMaxWidth: string; - - constructor( - private injector: Injector, - private windowManager: WindowManagerService, - private desktopComponent: DesktopComponent, - private translation: L10nTranslationService, - private themeService: ThemeEmitterService - ) { - this.pluginManager = this.injector.get(MVDHosting.Tokens.PluginManagerToken); - this.applicationManager = this.injector.get(MVDHosting.Tokens.ApplicationManagerToken); - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken); - this.goToPanel(); - } - - ngOnInit(): void { - this.pluginManager.findPluginDefinition("org.zowe.zlux.ng2desktop.settings").then(personalizationsPlugin => { - const pluginImpl:DesktopPluginDefinitionImpl = personalizationsPlugin as DesktopPluginDefinitionImpl; - this.settingsWindowPluginDef=pluginImpl; - }) - this.themeService.onGoBack - .subscribe(() => { - this.goToPanel(); - }); - } - - getAppPropertyInformation(toolName: string):any{ - return { - "isPropertyWindow":false, - "settingsToolName":toolName, - "copyright":this.settingsWindowPluginDef.getCopyright(), - "image":this.settingsWindowPluginDef.image - }; - } - - openTool(tool: any): void { - switch(tool.title) { - case this.translation.translate(CHANGE_PASSWORD): { - this.authenticationManager.requestPasswordChangeScreen(); - break; - } - case this.translation.translate(PERSONALIZATION): { - this.goToPersonalization(); - break; - } - default: { - let propertyWindowID = this.windowManager.getWindow(this.settingsWindowPluginDef); - if (propertyWindowID == null) { - this.desktopComponent.hidePersonalizationPanel(); - this.applicationManager.spawnApplication(this.settingsWindowPluginDef, this.getAppPropertyInformation(tool.title)); - } else { - this.windowManager.showWindow(propertyWindowID); - } - break; - } - } - } - - panelMouseEnter(): void { - this.panelMouseHover = true; - } - - panelMouseLeave(): void { - this.panelMouseHover = false; - } - - goToPanel(): void { - this.showPanel = true; - this.panelWidth = "100%"; - this.panelMaxWidth = "100%"; - } - - goToPersonalization(): void { - this.showPanel = false; - this.showPersonalization = true; - this.panelWidth = "420px"; - this.panelMaxWidth = "420px"; - } - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -} \ No newline at end of file diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.css deleted file mode 100644 index 02b5fb2ff..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.css +++ /dev/null @@ -1,173 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.personalization-label { - font-size: larger; - padding: 5px; - width: 100%; - color:#f3f4f4; - padding-top: 15px; -} - -.personalization-label.small { - font-size: small; -} - -.personalization-label.top { - padding-top: 0px; -} - -.personalization-label.small.reset-button { - float: right; - position: absolute; - margin-left: -105px; - margin-top: -5px; - cursor: pointer; -} - -.personalization-label.small.back-button { - margin-top: -6px; - margin-left: -15px; - cursor: pointer; -} - -.personalization-text { - text-align: center; - color: white; - padding-bottom: 5px; -} - -.personalization-submit { - margin-top: 10px; -} - -.personalization-upload { - color: #f3f4f4 -} - -.personalization-preview-item { - background-repeat: round; - cursor: pointer; - border: none; - padding: 62px; - margin-right: 6px; -} - -.personalization-preview-item.selected { - border: 2px solid white; -} - -.personalization-preview-item.preview-small{ - background-image: url('../../../../../assets/images/personalization/preview-1.png'); -} - -.personalization-preview-item.preview-medium{ - background-image: url('../../../../../assets/images/personalization/preview-2.png'); -} - -.personalization-preview-item.preview-large{ - background-image: url('../../../../../assets/images/personalization/preview-3.png'); - margin-right: 0px; -} - -.personalization-main-window { - height: 100%; - width: 100%; - padding: 15px; - flex-direction: row; - justify-content: space-around; -} - -.personalization-color-1 { - padding-left: 15px; -} - -.personalization-color-2 { - padding-bottom: 30px; -} - -.personalization-color-3 { - padding-right: 30px; - width: 420px; - display: grid; -} - -.personalization-file-drop-content { - display: flex !important; - align-items: center !important; - justify-content: center !important; - height: 100px !important; - color: #f3f4f4 !important; -} - -.personalization-file-drop-border { - height: 100px !important; - margin: auto !important; - border: 2px dotted #f3f4f4 !important; - border-radius: 15px !important; -} - -.personalization-circle { - padding: 2px; -} - -.personalization-circle.selected{ - border: 2px solid white; - border-radius: 30px; - width: 44px; - height: 44px; -} - -.personalization-swatch { - width: 77px; - height: 14px; -} - -.personalization-swatch.selected{ - border: 2px solid white; - height: 16px; -} - -#swatch1 { - grid-column-start: 1; - grid-column-end: 2; -} - -#swatch2 { - grid-column-start: 2; - grid-column-end: 3; -} - -#swatch3 { - grid-column-start: 3; - grid-column-end: 4; -} - -#swatch4 { - grid-column-start: 4; - grid-column-end: 5; -} - -#swatch5 { - grid-column-start: 5; - grid-column-end: 6; -} -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.html deleted file mode 100644 index a947194eb..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.html +++ /dev/null @@ -1,111 +0,0 @@ - - - -
- - - - - -
{{DragWallpaperHereOr}}
- - - - -
-
{{SelectColor}}
- - - - - - - - - - - - - - - - - - -
-
-
{{OrHue}}
- -
-
{{SelectLightness}}
-
-
-
-
-
-
-
- - - - - - - - - -
- - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.ts deleted file mode 100644 index 1430366ec..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/personalization-panel/personalization/personalization.component.ts +++ /dev/null @@ -1,415 +0,0 @@ - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ -import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core'; -import { BaseLogger } from '../../../../shared/logger'; -// import { Angular2InjectionTokens, Angular2PluginWindowActions } from 'pluginlib/inject-resources'; -import { ThemeEmitterService } from '../../services/theme-emitter.service'; -import { NgxFileDropEntry, FileSystemFileEntry } from 'ngx-file-drop'; -import { Colors } from '../../shared/colors'; -import { L10nTranslationService } from 'angular-l10n'; - -const SLIDER_NAME = 'slider' -const CIRCLE_NAME = 'circle' - -@Component({ - selector: 'personalization-component', - templateUrl: './personalization.component.html', - styleUrls: ['./personalization.component.css'], - providers: [], -}) - -export class PersonalizationComponent implements AfterViewInit { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - public selectedColor: string; - public selectedSize: string | Object; - public selectedLightness: number; - public selectedCircle: number; - public files: NgxFileDropEntry[]; - - @ViewChild('circle1') circle1: ElementRef; - @ViewChild('circle2') circle2: ElementRef; - @ViewChild('circle3') circle3: ElementRef; - @ViewChild('circle4') circle4: ElementRef; - @ViewChild('circle5') circle5: ElementRef; - @ViewChild('circle6') circle6: ElementRef; - @ViewChild('circle7') circle7: ElementRef; - @ViewChild('circle8') circle8: ElementRef; - @ViewChild('circle9') circle9: ElementRef; - @ViewChild('circle10') circle10: ElementRef; - @ViewChild('circle11') circle11: ElementRef; - @ViewChild('circle12') circle12: ElementRef; - @ViewChild('circle13') circle13: ElementRef; - @ViewChild('circle14') circle14: ElementRef; - @ViewChild('circle15') circle15: ElementRef; - @ViewChild('circle16') circle16: ElementRef; - @ViewChild('circle17') circle17: ElementRef; - @ViewChild('circle18') circle18: ElementRef; - - @ViewChild('slider1') slider1: ElementRef; - private sliderImgData: any; - - private paletteColors: string[]; - - public swatch1Style: any; - public swatch2Style: any; - public swatch3Style: any; - public swatch4Style: any; - public swatch5Style: any; - - /* I18n strings used in the UI */ - - public Back: string; - public ResetToDefault: string; - public Background: string; - public DragWallpaperHereOr: string; - public Color: string; - public SelectColor: string; - public OrHue: string; - public SelectLightness: string; - public Size: string; - public Upload: string; - - constructor( - private desktopThemeService: ThemeEmitterService, - private translation: L10nTranslationService - ) { - this.selectedColor = Colors.COOLGREY_90; - this.selectedSize = 2; - this.paletteColors = ["#f44336", "#e91e63", "#9c27b0", "#673ab7", "#3f51b5", "#2196f3", - "#03a9f4", "#00bcd4", "#009688", "#4caf50", "#8bc34a", "#cddc39", "#ffeb3b", "#ffc107", - "#ff9800", "#252628", "#6d7176", "#f3f4f4"]; - this.files = []; - this.swatch1Style; this.swatch2Style; this.swatch3Style; this.swatch4Style; this.swatch5Style; // Avoid TS compile problems - this.updateLanguageStrings(); - } - - ngAfterViewInit(): void { - this.selectedColor = this.desktopThemeService.mainColor; - this.selectedSize = this.desktopThemeService.mainSize; - - this.spawnCircles(this.paletteColors); - this.spawnSlider(); - - let selectedColorHSL = this.hexToHSL(this.selectedColor); - if (selectedColorHSL != null) { - this.updateLightnessSwatches(selectedColorHSL); - } - this.whichColorAmI(); - } - - /* More info on conversion chart can be found at: https://css-tricks.com/converting-color-spaces-in-javascript/ */ - hexToHSL(hex: string) { - // Convert hex to RGB first - var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - - if (result != null && result[1] != null && result[2] != null && result[3] != null) - { - var r = parseInt(result[1], 16); - var g = parseInt(result[2], 16); - var b = parseInt(result[3], 16); - // Then to HSL - r /= 255; - g /= 255; - b /= 255; - let cmin = Math.min(r,g,b), - cmax = Math.max(r,g,b), - delta = cmax - cmin, - h = 0, - s = 0, - l = 0; - - if (delta == 0) - h = 0; - else if (cmax == r) - h = ((g - b) / delta) % 6; - else if (cmax == g) - h = (b - r) / delta + 2; - else - h = (r - g) / delta + 4; - - h = Math.round(h * 60); - - if (h < 0) - h += 360; - - l = (cmax + cmin) / 2; - s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1)); - - return [h, s, l] - } - return null; - } - - hSLtoHex(hsl: number[]) { - let h = hsl[0]; - let s = hsl[1]; - let l = hsl[2]; - - let c = (1 - Math.abs(2 * l - 1)) * s, - x = c * (1 - Math.abs((h / 60) % 2 - 1)), - m = l - c/2, - r = 0, - g = 0, - b = 0; - - if (0 <= h && h < 60) { - r = c; g = x; b = 0; - } else if (60 <= h && h < 120) { - r = x; g = c; b = 0; - } else if (120 <= h && h < 180) { - r = 0; g = c; b = x; - } else if (180 <= h && h < 240) { - r = 0; g = x; b = c; - } else if (240 <= h && h < 300) { - r = x; g = 0; b = c; - } else if (300 <= h && h < 360) { - r = c; g = 0; b = x; - } - - // Having obtained RGB, convert channels to hex - let rString = Math.round((r + m) * 255).toString(16); - let gString = Math.round((g + m) * 255).toString(16); - let bString = Math.round((b + m) * 255).toString(16); - - // Prepend 0s, if necessary - if (rString.length == 1) - rString = "0" + rString; - if (gString.length == 1) - gString = "0" + gString; - if (bString.length == 1) - bString = "0" + bString; - - return "#" + rString + gString + bString; - } - - rGBtoHex(r: number, g: number, b: number) { - let rString = r.toString(16); - let gString = g.toString(16); - let bString = b.toString(16); - - if (rString.length == 1) - rString = "0" + rString; - if (gString.length == 1) - gString = "0" + gString; - if (bString.length == 1) - bString = "0" + bString; - - return "#" + rString + gString + bString; - } - - clickCircle(index: any) { - this.selectedColor = this.paletteColors[index-1]; - let textColor = Colors.COOLGREY_10 - const hslColor = this.hexToHSL(this.selectedColor); - - if (hslColor != null) { - if (hslColor[2] >= .65) { // If lightness of color is too high, we change the text to be dark - textColor = Colors.COOLGREY_90 - } - this.updateLightnessSwatches(hslColor); - } - - this.selectedCircle = index; - this.selectedLightness = -1; - this.desktopThemeService.changeColor(this.selectedColor, textColor); - } - - clickLightness(lightness: number): void { - const selectedColorHSL = this.hexToHSL(this.selectedColor); - let newHSL: number[]; - let newColor: string; - if (selectedColorHSL != null) { - newHSL = [selectedColorHSL[0], selectedColorHSL[1], lightness]; - newColor = this.hSLtoHex(newHSL); - let textColor = Colors.COOLGREY_10 - - if (newHSL != null) { - if (newHSL[2] >= .65) { // If lightness of color is too high, we change the text to be dark - textColor = Colors.COOLGREY_90 - } - } - this.selectedLightness = lightness; - this.desktopThemeService.changeColor(newColor, textColor); - } - } - - clickSlider($event: any) { - this.sliderImgData; - let index = ($event.layerY * this.sliderImgData.width + $event.layerX) * 4; - let red = this.sliderImgData.data[index]; - let green = this.sliderImgData.data[index+1]; - let blue = this.sliderImgData.data[index+2]; - let hexColor = this.rGBtoHex(red, green, blue); - - // TODO: Adjust lightness of text color based on color theory/contrast/relative luminance - let textColor = Colors.COOLGREY_10; - - this.selectedCircle = -1; - this.selectedLightness = -1; - let hslColor = this.hexToHSL(hexColor); - if (hslColor != null) { - this.updateLightnessSwatches(hslColor); - } - this.selectedColor = hexColor; - this.desktopThemeService.changeColor(hexColor, textColor); - } - - spawnCircles(colors: string[]): void { - var index: number; - var canvasName: string; - var canvasElem: ElementRef; - var numOfCircles = colors.length; - - for (index = 1; index <= numOfCircles; index++) { - canvasName = CIRCLE_NAME + index; - canvasElem = (this)[canvasName]; // We typecast this to 'any' to avoid silly TS compile problems - - var context = canvasElem.nativeElement.getContext('2d'); - var centerX = canvasElem.nativeElement.width / 2; - var centerY = canvasElem.nativeElement.height / 2; - - var radius = 20; - - if (context != null) { - context.beginPath(); - context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false); - context.fillStyle = colors[index-1]; - context.fill(); - context.stroke(); - } - } - } - - spawnSlider(): void { - var canvasName: string = SLIDER_NAME + '1'; - var canvasElem: ElementRef = (this)[canvasName]; // We typecast this to 'any' to avoid silly TS compile problems - - // Create gradient - var ctx = canvasElem.nativeElement.getContext("2d"); - var gradient = ctx.createLinearGradient(14, 0, 389, 0); - gradient.addColorStop(0, 'red'); - gradient.addColorStop(1 / 6, 'orange'); - gradient.addColorStop(2 / 6, 'yellow'); - gradient.addColorStop(3 / 6, 'green'); - gradient.addColorStop(4 / 6, 'blue'); - gradient.addColorStop(5 / 6, 'indigo'); - gradient.addColorStop(1, 'violet'); - - // Fill - ctx.fillStyle = gradient; - ctx.fillRect(0, 0, 389, 14); - - // Save imgData - this.sliderImgData = ctx.getImageData(0, 0, canvasElem.nativeElement.width, canvasElem.nativeElement.height); - } - - updateLanguageStrings(): void { - this.Back = this.translation.translate('Back', null); - this.ResetToDefault = this.translation.translate('Reset to default', null); - this.Background = this.translation.translate('Wallpaper', null); - this.DragWallpaperHereOr = this.translation.translate('Drag wallpaper here or', null); // TODO: Needs updated translations - this.Color = this.translation.translate('Color', null); - this.SelectColor = this.translation.translate('Select color', null); - this.OrHue = this.translation.translate('or hue.', null); - this.SelectLightness = this.translation.translate('Select lightness.', null); - this.Size = this.translation.translate('Size', null); - this.Upload = this.translation.translate('Upload', null); - } - - updateLightnessSwatches(hslColor: number[]): void { - this.swatch1Style = { 'background-color': 'hsl(' + hslColor[0] + ',' + hslColor[1]*100 + '%,' + 80 + '%)'}; - this.swatch2Style = { 'background-color': 'hsl(' + hslColor[0] + ',' + hslColor[1]*100 + '%,' + 65 + '%)'}; - this.swatch3Style = { 'background-color': 'hsl(' + hslColor[0] + ',' + hslColor[1]*100 + '%,' + 50 + '%)'}; - this.swatch4Style = { 'background-color': 'hsl(' + hslColor[0] + ',' + hslColor[1]*100 + '%,' + 35 + '%)'}; - this.swatch5Style = { 'background-color': 'hsl(' + hslColor[0] + ',' + hslColor[1]*100 + '%,' + 20 + '%)'}; - } - - colorPreview(color: any): void { - this.selectedColor = color.hsl; - let textColor = Colors.COOLGREY_10 - - if (color.hsl.l >= .65) { // If lightness of color is too high, we change the text to be dark - textColor = Colors.COOLGREY_90 - } - this.desktopThemeService.previewColor(color.hex, textColor); - } - - sizeSelected(size: string): void { - switch(size) { - case "small": { - this.desktopThemeService.changeSize(1, 1, 1); - this.selectedSize = 1; - break; - } - case "large": { - this.desktopThemeService.changeSize(3, 3, 3); - this.selectedSize = 3; - break; - } - default: { - this.desktopThemeService.changeSize(2, 2, 2); - this.selectedSize = 2; - break; - } - } - } - - fileDrop(files: any): void { - this.files = files; - for (const droppedFile of files) { - - // Is it a file? - if (droppedFile.fileEntry.isFile) { // TODO: Verify file extensions here - const fileEntry = droppedFile.fileEntry as FileSystemFileEntry; - fileEntry.file((file: File) => { - - // Here you can access the real file - this.logger.debug(droppedFile.relativePath, file); - this.desktopThemeService.changeWallpaper(file); - }); - } else { // It was a directory - // TODO: Folders are disabled by default, so not sure how this would trigger, but maybe notification for fail? - return - } - } - } - - resetAllDefault(): void { - this.files = []; - this.desktopThemeService.resetAllDefault(); - this.selectedColor = Colors.COOLGREY_90; - this.selectedSize = 2; - this.selectedCircle = 16; - } - - goBack(): void { - this.desktopThemeService.goBack(); - } - - whichColorAmI(): void { - var index: number; - for (index = 0; index <= this.paletteColors.length; index++) { - if (this.selectedColor == this.paletteColors[index]) { - this.selectedCircle = index+1; - } - } - } - -} -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/services/plugins-data.service.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/services/plugins-data.service.ts deleted file mode 100644 index 4c1d9eb64..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/services/plugins-data.service.ts +++ /dev/null @@ -1,186 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, Injector } from '@angular/core'; -import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { LaunchbarItem } from '../launchbar/shared/launchbar-item'; -import { PluginLaunchbarItem } from '../launchbar/shared/launchbar-items/plugin-launchbar-item'; -import { DesktopPluginDefinitionImpl } from '../../../plugin-manager/shared/desktop-plugin-definition'; -import { ContextMenuItem } from 'pluginlib/inject-resources'; -import { L10nTranslationService } from 'angular-l10n'; -import { WindowManagerService } from '../shared/window-manager.service'; -import { BaseLogger } from 'virtual-desktop-logger'; - -@Injectable() -export class PluginsDataService implements MVDHosting.LogoutActionInterface { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - public counter: number; - public pinnedPlugins: LaunchbarItem[]; - private accessiblePlugins: LaunchbarItem[]; - private scope: string = "user"; - private resourcePath: string = "ui/launchbar/plugins"; - private fileName: string = "pinnedPlugins.json" - private pluginManager: MVDHosting.PluginManagerInterface; - private authenticationManager: MVDHosting.AuthenticationManagerInterface; - - constructor( - private injector: Injector, - private http: HttpClient, - private translation: L10nTranslationService, - private windowManager: WindowManagerService - ) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.pluginManager = this.injector.get(MVDHosting.Tokens.PluginManagerToken); - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken); - this.authenticationManager.registerPreLogoutAction(this); - this.refreshPinnedPlugins; - this.counter = 0; - } - - onLogout(username: string): boolean { - this.pinnedPlugins = []; - return true; - } - - public refreshPinnedPlugins(accessiblePlugins: LaunchbarItem[]): void { - this.accessiblePlugins = accessiblePlugins; - this.pinnedPlugins = []; - this.getResource(this.scope, this.resourcePath, this.fileName) - .subscribe(res =>{ - res.body.contents.plugins.forEach((p: string) => { - let found = false; - for (let i = 0; i < accessiblePlugins.length; i++) { - if (accessiblePlugins[i].plugin.getIdentifier() == p) { - this.pinnedPlugins.push(new PluginLaunchbarItem(accessiblePlugins[i].plugin, this.windowManager)); - found = true; - break; - } - } - if (!found) { - this.logger.warn(`Pinned plugin not found=${p}`) - } - }) - }) - } - - public getResource(scope: string, resourcePath: string, fileName: string): Observable>{ - let uri = ZoweZLUX.uriBroker.pluginConfigForScopeUri(ZoweZLUX.pluginManager.getDesktopPlugin(), scope, resourcePath, fileName); - let headers = new HttpHeaders({ 'Content-Type': 'application/json' }); - return this.http.get(uri, { headers: headers, observe: 'response' }); - } - - public saveResource(plugins: string[], scope: string, resourcePath: string, fileName: string): void{ - let uri = ZoweZLUX.uriBroker.pluginConfigForScopeUri(ZoweZLUX.pluginManager.getDesktopPlugin(), scope, resourcePath, fileName); - let params = {"plugins": plugins}; - this.http.put(uri, params).subscribe((res) => { - this.pinnedPlugins = this.getMatchingPlugins(this.accessiblePlugins, plugins); - }, (err)=> { - this.logger.warn("ZWED5179W", err); //this.logger.warn(`Could not update pinned plugins, err=${err}`); - }); - } - - private getMatchingPlugins(items: LaunchbarItem[], plugins: string[]): LaunchbarItem[] { - let list: LaunchbarItem[] = []; - plugins.forEach((p: string) => { - this.pluginManager.findPluginDefinition(p) - .then(res => { - if (res == null) { - this.logger.warn("ZWED5180W", p) //this.logger.warn(`Bad Plugin Definition for plugin=${p}`) - } else { - for (let i = 0; i < items.length; i++) { - if (items[i].plugin.getKey() == (res as DesktopPluginDefinitionImpl).getKey()) { - list.push(items[i]); - break; - } - } - } - }) - }); - return list; - } - - public isPinnedPlugin(item: LaunchbarItem): boolean{ - const itemIdentifier: string = item.plugin.getBasePlugin().getIdentifier(); - let foundPlugin = this.pinnedPlugins.find(function(launchbarItem: LaunchbarItem): boolean { - return launchbarItem.plugin.getBasePlugin().getIdentifier() == itemIdentifier; - }); - if (foundPlugin != undefined) { - return true; - } else { - return false; - } - } - - public saveToConfigServer(item: LaunchbarItem): void { - this.getResource(this.scope, this.resourcePath, this.fileName) - .subscribe(res=>{ - let plugins:string[]; - if (res.status === 204) { - plugins = []; - } else { - plugins = res.body.contents.plugins; - } - let exists = false; - let id = item.plugin.getBasePlugin().getIdentifier(); - for (let i = 0; i < plugins.length; i++) { - if (plugins[i] == id) { - exists = true; - break; - } - } - if (!exists) { - plugins.push(id); - this.saveResource(plugins, this.scope, this.resourcePath, this.fileName); - } - }) - } - - public removeFromConfigServer(item: LaunchbarItem): void { - this.getResource(this.scope, this.resourcePath, this.fileName) - .subscribe(res=>{ - let index = res.body.contents.plugins.indexOf(item.plugin.getBasePlugin().getIdentifier()); - let plugins = res.body.contents.plugins; - if (index != -1) { - plugins.splice(index, 1); - this.saveResource(plugins, this.scope, this.resourcePath, this.fileName); - } - }) - } - - public pinContext(item: LaunchbarItem): ContextMenuItem { - return { - "text": this.isPinnedPlugin(item) ? this.translation.translate('UnpinFromTaskbar') : this.translation.translate('PinToTaskbar'), - "action": () => this.isPinnedPlugin(item) ? this.removeFromConfigServer(item) : this.saveToConfigServer(item) - }; - } - - public arrayMove(arr: string[], fromIndex: number, toIndex: number): void{ - if (toIndex > arr.length) { - toIndex = arr.length; - } else if(toIndex < 0) { - toIndex = 0; - } - var element = arr[fromIndex]; - arr.splice(fromIndex, 1); - arr.splice(toIndex, 0, element); - this.saveResource(arr, this.scope, this.resourcePath, this.fileName); - } -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/services/theme-emitter.service.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/services/theme-emitter.service.ts deleted file mode 100644 index 6aaefcf60..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/services/theme-emitter.service.ts +++ /dev/null @@ -1,86 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, EventEmitter } from '@angular/core'; -import { Colors } from '../shared/colors'; - -@Injectable() -export class ThemeEmitterService { - public onColorChange = new EventEmitter(); - public onColorPreview = new EventEmitter(); - public onSizeChange = new EventEmitter(); - public onWallpaperChange = new EventEmitter(); - public onResetAllDefault = new EventEmitter(); - public onGoBack = new EventEmitter(); - public mainColor: string; - public mainSize: number; - - constructor() { - this.mainColor = Colors.COOLGREY_80; - this.mainSize = 2; - } - - /* Expected input in 'hex' format */ - changeColor(themeColor: any, textColor: any) { - let colorObj = { - themeColor: themeColor || Colors.COOLGREY_80, // Fallback is dark grey - textColor: textColor || Colors.COOLGREY_20 // Fallback is nearly white - } - this.mainColor = colorObj.themeColor; - this.onColorChange.emit(colorObj); - } - - /* Expected input in 'hex' format */ - previewColor(themeColor: any, textColor: any) { - let colorObj = { - themeColor: themeColor || Colors.COOLGREY_80, // Fallback is dark grey - textColor: textColor || Colors.COOLGREY_20 // Fallback is nearly white - } - this.mainColor = colorObj.themeColor; - this.onColorPreview.emit(colorObj); - } - - /* 1 - small, 2 - medium, 3 - large */ - changeSize(windowSize: number, launchbarSize: number, launchbarMenuSize: number) { - let sizeObj = { // Fallback is medium - windowSize: windowSize || 2, - launchbarSize: launchbarSize || 2, - launchbarMenuSize: launchbarMenuSize || 2 - } - this.mainSize = sizeObj.windowSize; - this.onSizeChange.emit(sizeObj); - } - - changeWallpaper(image: any) { //Fallback is default Zowe blue background - this.onWallpaperChange.emit(image); - } - - resetAllDefault(): void { - this.onResetAllDefault.emit(); - } - - goBack(): void { - this.onGoBack.emit(); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/colors.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/colors.ts deleted file mode 100644 index 9f0205226..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/colors.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -/* For more info, please visit https://docs.zowe.org/stable/contribute/guidelines-ui/colors.html to - follow Zowe best practices! */ -export enum Colors { - COOLGREY_10= "#f3f4f4", - COOLGREY_20= "#dddee0", - COOLGREY_30= "#c7c9cc", - COOLGREY_40= "#9b9ea4", - COOLGREY_50= "#858990", - COOLGREY_60= "#6d7176", - COOLGREY_70= "#55585c", - COOLGREY_80= "#3d3f42", - COOLGREY_90= "#252628", - COOLGREY_100= "#0d0d0e", - -} \ No newline at end of file diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/desktop-window-state.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/desktop-window-state.ts deleted file mode 100644 index 8e9fa865b..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/desktop-window-state.ts +++ /dev/null @@ -1,122 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { EventEmitter } from '@angular/core'; - -import { WindowPosition } from './window-position'; - -export enum DesktopWindowStateType { - Minimized, - Maximized, - Normal, - MaximizedFullscreen -} - -export class DesktopWindowState { - private _stateType: DesktopWindowStateType; - private _previousStateType : DesktopWindowStateType; - private _normalPosition: WindowPosition; - private _position: WindowPosition; - zIndex: number; - - stateChanged: EventEmitter; - positionChanged: EventEmitter; - - constructor(zIndex: number, position: WindowPosition) { - this._stateType = DesktopWindowStateType.Normal; - this._previousStateType = DesktopWindowStateType.Normal; - this._normalPosition = position; - this._position = position; - this.zIndex = zIndex; - this.stateChanged = new EventEmitter(true); - this.positionChanged = new EventEmitter(true); - } - - /* State transformations */ - - private setStateType(stateType: DesktopWindowStateType): void { - if (this._stateType !== stateType) { - this._previousStateType = this._stateType; - this._stateType = stateType; - this.stateChanged.emit(stateType); - } - } - - maximize(): void { - this._normalPosition = this.position; - this.setStateType(DesktopWindowStateType.Maximized); - } - - _maximizeFullscreen(): void { - this._normalPosition = this.position; - this.setStateType(DesktopWindowStateType.MaximizedFullscreen); - } - - minimize(): void { - if (this._stateType !== DesktopWindowStateType.Maximized) { - this._normalPosition = this.position; - } - this.setStateType(DesktopWindowStateType.Minimized); - } - - restore(): void { - if(this.PreviousStateType && this.PreviousStateType === DesktopWindowStateType.Maximized){ - this.setStateType(DesktopWindowStateType.Maximized); - } else { - this.position = this._normalPosition; - this.setStateType(DesktopWindowStateType.Normal); - } - } - - /* Accessors and mutators */ - - get stateType(): DesktopWindowStateType { - return this._stateType; - } - - get PreviousStateType(): DesktopWindowStateType { - return this._previousStateType; - } - - get position(): WindowPosition { - return this._position; - } - - set position(position: WindowPosition) { - const { top, left, width, height} = position; - const { top: pTop, left: pLeft, width: pWidth, height: pHeight} = this._position; - if (top !== pTop || left !== pLeft || width !== pWidth || height !== pHeight) { - this._position = position; - this.positionChanged.emit(position); - } - } - - get normalPosition(): WindowPosition { - return this._normalPosition; - } - - get shouldRender(): boolean { - return this._stateType !== DesktopWindowStateType.Minimized; - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/desktop-window.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/desktop-window.ts deleted file mode 100644 index 3ca285ece..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/desktop-window.ts +++ /dev/null @@ -1,143 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { EventEmitter } from '@angular/core'; - -import { DesktopWindowState, DesktopWindowStateType } from './desktop-window-state'; -import { WindowPosition } from '../shared/window-position'; - -export interface LocalWindowEvents { - readonly windowMaximized: EventEmitter; - readonly windowMinimized: EventEmitter; - readonly windowRestored: EventEmitter; - readonly windowMoved: EventEmitter<{top: number, left: number}>; - readonly windowResized: EventEmitter<{width: number, height: number}>; - readonly windowTitleChanged: EventEmitter; -} - -export class DesktopWindow { - private _windowTitle: string; - readonly windowId: MVDWindowManagement.WindowId; - readonly windowState: DesktopWindowState; - readonly localWindowEvents: LocalWindowEvents; - private childViewports: Array; - public readonly plugin: ZLUX.Plugin; - viewportId: MVDHosting.ViewportId; //primary, if children exist - public isFullscreenStandalone: boolean; - - closeHandler: (() => Promise) | null; //DEPRECATED 1.0.1, use viewport close handler instead of window - - constructor(windowId: MVDWindowManagement.WindowId, windowState: DesktopWindowState, plugin: ZLUX.Plugin) { - this._windowTitle = ''; - this.windowId = windowId; - this.windowState = windowState; - this.closeHandler = null; - this.plugin = plugin; - this.childViewports = new Array(); - this.localWindowEvents = { - windowMaximized: new EventEmitter(true), - windowMinimized: new EventEmitter(true), - windowRestored: new EventEmitter(true), - windowMoved: new EventEmitter<{top: number, left: number}>(true), - windowResized: new EventEmitter<{width: number, height: number}>(true), - windowTitleChanged: new EventEmitter(true) - }; - - this.windowState.stateChanged.subscribe((state: DesktopWindowStateType) => { - switch (state) { - case DesktopWindowStateType.Maximized: - this.localWindowEvents.windowMaximized.emit(); - break; - case DesktopWindowStateType.Minimized: - this.localWindowEvents.windowMinimized.emit(); - break; - case DesktopWindowStateType.Normal: - this.localWindowEvents.windowRestored.emit(); - break; - } - }); - - let lastPosition: WindowPosition | null = null; - this.windowState.positionChanged.subscribe((state: WindowPosition) => { - if (lastPosition == null) { - this.localWindowEvents.windowMoved.emit({ top: state.top, left: state.left }); - this.localWindowEvents.windowResized.emit({ width: state.width, height: state.height }); - } else { - if (state.top !== lastPosition.top || state.left !== lastPosition.left) { - this.localWindowEvents.windowMoved.emit({ top: state.top, left: state.left }); - } - if (state.width !== lastPosition.width || state.height !== lastPosition.height) { - this.localWindowEvents.windowResized.emit({ width: state.width, height: state.height }); - } - } - - lastPosition = state; - }); - this.isFullscreenStandalone = false; - } - - get windowTitle(): string { - return this._windowTitle; - } - - set windowTitle(value: string) { - this._windowTitle = value; - this.localWindowEvents.windowTitleChanged.emit(value); - } - - addChildViewport(viewportId: MVDHosting.ViewportId): void{ - this.childViewports.push(viewportId); - } - - closeViewports(viewportManager: MVDHosting.ViewportManagerInterface): Promise { - return new Promise((resolve, reject)=> { - viewportManager.destroyViewport(this.viewportId).then(()=> { - if (this.childViewports.length == 0) { - resolve(null); - } else { - this.closeViewportLoop(0, viewportManager, ()=> { - resolve(null); - }, (reason:any)=> { - reject({viewport:this.viewportId, reason:reason}); - }); - } - }).catch((reason:any)=> { - reject({viewport:this.viewportId, reason:reason}); - }); - }); - } - - private closeViewportLoop(pos: number, viewportManager: MVDHosting.ViewportManagerInterface, finishedCallback: any, rejectedCallback: any): void { - if (pos >= this.childViewports.length) { - finishedCallback(); - } - else { - viewportManager.destroyViewport(this.childViewports[pos]).then(()=> { - this.closeViewportLoop(++pos,viewportManager,finishedCallback,rejectedCallback); - }).catch((reason:any)=> { - rejectedCallback(reason); - }); - } - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/draggable.directive.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/draggable.directive.ts deleted file mode 100644 index 0b02a1fea..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/draggable.directive.ts +++ /dev/null @@ -1,152 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { ChangeDetectorRef, Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core'; - -import { DesktopWindow } from './desktop-window'; -//import { BaseLogger } from 'virtual-desktop-logger'; - -@Directive({ - selector: '[rs-com-draggable]' -}) -export class DraggableDirective implements OnInit { - //private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private static readonly draggleCss = ' cursor-draggable'; - - @Input('rs-com-draggable-window') desktopWindow: DesktopWindow; - @Input('rs-com-draggable-handle') handle: HTMLElement; - @Input('rs-com-draggable-enabled') draggable: boolean; - topOffset: number; - leftOffset: number; - mouseDown: boolean; - - public static topLeft(e: MouseEvent | TouchEvent): {top: number, left: number} { - let mouseTouch: MouseEvent | Touch; - - if (e instanceof MouseEvent) { - mouseTouch = e as MouseEvent; - } else { - mouseTouch = (e as TouchEvent).changedTouches[0]; - } - - return {top: mouseTouch.clientY, left: mouseTouch.clientX}; - } - - constructor( - public element: ElementRef, private ref: ChangeDetectorRef - ) { - this.topOffset = 0; - this.leftOffset = 0; - this.mouseDown = false; - ref.detach(); // deactivate change detection - setInterval(() => { - this.ref.detectChanges(); // manually trigger change detection - }, 17); - } - - // TODO: This is a bit of a mess - ngOnInit(): void { - let {className} = this.element.nativeElement; - - if (this.draggable) { - if (className.indexOf(DraggableDirective.draggleCss) < 0) { - className += DraggableDirective.draggleCss; - } - } else { - className = className.replace(DraggableDirective.draggleCss, ''); - } - - this.element.nativeElement.className = className; - } - - @HostListener('mousedown', ['$event']) - onMouseDown(event: MouseEvent): void { - //this.logger.debug('Draggable=Down'); - - if (!this.draggable || event.button === 2 || (this.handle !== undefined && event.target !== this.handle)) { - return; - } - - this.mouseDown = true; - this.setTopLeft(event); - } - - @HostListener('document:mouseup', ['$event']) - onMouseUp(event: MouseEvent | null): void { - if (this.mouseDown) { - this.mouseDown = false; - } - } - - @HostListener('document:mousemove', ['$event']) - onMouseMove(event: MouseEvent): void { - if (this.mouseDown) { - this.move(event); - event.stopPropagation(); - } - } - - @HostListener('document:mouseleave', ['$event']) - onMouseLeave(event: MouseEvent): void { - this.onMouseMove(event); - } - - // Touch events are used for mobile/touch devices, similar to ones above - @HostListener('touchstart', ['$event']) - onTouchStart(event: Event): void { - this.mouseDown = true; - this.setTopLeft(event as TouchEvent); - event.stopPropagation(); - } - - @HostListener('document:touchend', ['$event']) - onTouchEnd(): void { - this.onMouseUp(null); - } - - @HostListener('document:touchmove', ['$event']) - onTouchMove(event: Event): void { - if (this.mouseDown) { - this.move(event as TouchEvent); - } - - event.stopPropagation(); - } - - setTopLeft(event: MouseEvent | TouchEvent): void { - const {top, left} = DraggableDirective.topLeft(event); - - this.topOffset = top - this.desktopWindow.windowState.position.top; - this.leftOffset = left - this.desktopWindow.windowState.position.left; - } - - move(event: MouseEvent | TouchEvent): void { - const {top, left} = DraggableDirective.topLeft(event); - const {width, height} = this.desktopWindow.windowState.position; - - const nTop = (top - this.topOffset); - const nLeft = (left - this.leftOffset); - this.desktopWindow.windowState.position = { top: nTop, left: nLeft, width: width, height: height}; - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/keybinding.service.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/keybinding.service.ts deleted file mode 100644 index 6a440ddba..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/keybinding.service.ts +++ /dev/null @@ -1,44 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, EventEmitter } from '@angular/core'; - -@Injectable() -export class KeybindingService { - public keyUpEvent = new EventEmitter(); - constructor() { - this.keyUpHandler = this.keyUpHandler.bind(this); - } - - registerKeyUpEvent() { - document.addEventListener('keyup', this.keyUpHandler, true); - } - - keyUpHandler(event: KeyboardEvent) { - if(event.altKey && event.ctrlKey) { - event.stopImmediatePropagation(); - this.keyUpEvent.emit(event); - } - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/keycode-enum.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/keycode-enum.ts deleted file mode 100644 index dfedffe41..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/keycode-enum.ts +++ /dev/null @@ -1,111 +0,0 @@ -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -export enum KeyCode { - BACKSPACE= 8, - TAB= 9, - ENTER= 13, - SHIFT= 16, - CTRL= 17, - ALT= 18, - PAUSE= 19, - CAPS_LOCK= 20, - ESCAPE= 27, - SPACE= 32, - PAGE_UP= 33, - PAGE_DOWN= 34, - END= 35, - HOME= 36, - LEFT_ARROW= 37, - UP_ARROW= 38, - RIGHT_ARROW= 39, - DOWN_ARROW= 40, - INSERT= 45, - DELETE= 46, - KEY_0= 48, - KEY_1= 49, - KEY_2= 50, - KEY_3= 51, - KEY_4= 52, - KEY_5= 53, - KEY_6= 54, - KEY_7= 55, - KEY_8= 56, - KEY_9= 57, - KEY_A= 65, - KEY_B= 66, - KEY_C= 67, - KEY_D= 68, - KEY_E= 69, - KEY_F= 70, - KEY_G= 71, - KEY_H= 72, - KEY_I= 73, - KEY_J= 74, - KEY_K= 75, - KEY_L= 76, - KEY_M= 77, - KEY_N= 78, - KEY_O= 79, - KEY_P= 80, - KEY_Q= 81, - KEY_R= 82, - KEY_S= 83, - KEY_T= 84, - KEY_U= 85, - KEY_V= 86, - KEY_W= 87, - KEY_X= 88, - KEY_Y= 89, - KEY_Z= 90, - LEFT_META= 91, - RIGHT_META= 92, - SELECT= 93, - NUMPAD_0= 96, - NUMPAD_1= 97, - NUMPAD_2= 98, - NUMPAD_3= 99, - NUMPAD_4= 100, - NUMPAD_5= 101, - NUMPAD_6= 102, - NUMPAD_7= 103, - NUMPAD_8= 104, - NUMPAD_9= 105, - MULTIPLY= 106, - ADD= 107, - SUBTRACT= 109, - DECIMAL= 110, - DIVIDE= 111, - F1= 112, - F2= 113, - F3= 114, - F4= 115, - F5= 116, - F6= 117, - F7= 118, - F8= 119, - F9= 120, - F10= 121, - F11= 122, - F12= 123, - NUM_LOCK= 144, - SCROLL_LOCK= 145, - SEMICOLON= 186, - EQUALS= 187, - COMMA= 188, - DASH= 189, - PERIOD= 190, - FORWARD_SLASH= 191, - GRAVE_ACCENT= 192, - OPEN_BRACKET= 219, - BACK_SLASH= 220, - CLOSE_BRACKET= 221, - SINGLE_QUOTE= 222 -} \ No newline at end of file diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/sizeable.directive.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/sizeable.directive.ts deleted file mode 100644 index 05e7d4747..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/sizeable.directive.ts +++ /dev/null @@ -1,246 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { ChangeDetectorRef, Directive, HostListener, Input, OnInit } from '@angular/core'; - -import { DesktopWindow } from './desktop-window'; -import { DraggableDirective } from './draggable.directive'; - -// TODO calculate the size of Compass -const enum Compass { - n, s, e, w, ne, nw, se, sw, size -} - -@Directive({ - selector: '[rs-com-sizeable]' -}) -export class SizeableDirective implements OnInit { - @Input('rs-com-sizeable-window') desktopWindow: DesktopWindow; - @Input('rs-com-sizeable-min-width') minWidth: number; - @Input('rs-com-sizeable-min-height') minHeight: number; - @Input('rs-com-sizeable-n') handle_n: HTMLElement; - @Input('rs-com-sizeable-s') handle_s: HTMLElement; - @Input('rs-com-sizeable-e') handle_e: HTMLElement; - @Input('rs-com-sizeable-w') handle_w: HTMLElement; - @Input('rs-com-sizeable-ne') handle_ne: HTMLElement; - @Input('rs-com-sizeable-nw') handle_nw: HTMLElement; - @Input('rs-com-sizeable-se') handle_se: HTMLElement; - @Input('rs-com-sizeable-sw') handle_sw: HTMLElement; - @Input('rs-com-sizeable-enabled') sizeable: boolean; - - top: number; - left: number; - overshootWidth: number; - overshootHeight: number; - handle: HTMLElement | null; - handles: Array; - - constructor(private ref: ChangeDetectorRef) { - this.top = 0; - this.left = 0; - this.overshootWidth = 0; - this.overshootHeight = 0; - this.handle = null; - this.handles = new Array(Compass.size); - ref.detach(); // deactivate change detection - setInterval(() => { - this.ref.detectChanges(); // manually trigger change detection - }, 17); - } - - ngOnInit(): void { - const {handles, handle_n, handle_e, handle_s, handle_w, handle_ne, handle_nw, handle_se, handle_sw} = this; - - handles[Compass.n] = handle_n; - handles[Compass.s] = handle_s; - handles[Compass.e] = handle_e; - handles[Compass.w] = handle_w; - handles[Compass.ne] = handle_ne; - handles[Compass.nw] = handle_nw; - handles[Compass.se] = handle_se; - handles[Compass.sw] = handle_sw; - } - - get mouseDown(): boolean { - return this.handle != null; - } - - @HostListener('mousedown', ['$event']) - onMouseDown(event: MouseEvent): void { - if (event.button !== 2) { - this.testDownTarget(event.target!, event); - } - } - - @HostListener('document:mouseup', ['$event']) - onMouseUp(event: MouseEvent | null): void { - if (this.mouseDown) { - this.handle = null; - } - } - - @HostListener('document:mousemove', ['$event']) - onMouseMove(event: MouseEvent): void { - if (this.mouseDown) { - this.resize(event); - event.stopPropagation(); - } - } - - @HostListener('document:mouseleave', ['$event']) - onMouseLeave(event: MouseEvent): void { - this.onMouseUp(null); - } - - // Touch events are used for mobile/touch devices, similar to ones above - @HostListener('touchstart', ['$event']) - onTouchStart(event: Event): void { - this.testDownTarget(event.target!, event as TouchEvent); - event.stopPropagation(); - } - - @HostListener('document:touchend', ['$event']) - onTouchEnd(): void { - this.onMouseUp(null); - } - - @HostListener('document:touchmove', ['$event']) - onTouchMove(event: Event): void { - if (this.mouseDown) { - this.resize(event as TouchEvent); - } - - event.stopPropagation(); - } - - testDownTarget(target: EventTarget, event: MouseEvent|TouchEvent): void { - if (this.sizeable) { - for (const handle of this.handles) { - if (target === handle) { - this.handle = handle; - this.setTopLeft(event); - break; - } - } - } - } - - resize(event: MouseEvent | TouchEvent): void { - const {top, left} = DraggableDirective.topLeft(event); - const [topDelta, leftDelta] = [top - this.top, left - this.left]; - const compass: Compass = this.handles.indexOf(this.handle!); - - [this.top, this.left] = [top, left]; - - switch (compass) { - case Compass.n: - case Compass.s: - case Compass.e: - case Compass.w: - this.resizeCompass(compass, topDelta, leftDelta); - break; - case Compass.ne: - this.resizeCompass(Compass.e, topDelta, leftDelta); - this.resizeCompass(Compass.n, topDelta, leftDelta); - break; - case Compass.nw: - this.resizeCompass(Compass.w, topDelta, leftDelta); - this.resizeCompass(Compass.n, topDelta, leftDelta); - break; - case Compass.se: - this.resizeCompass(Compass.e, topDelta, leftDelta); - this.resizeCompass(Compass.s, topDelta, leftDelta); - break; - case Compass.sw: - this.resizeCompass(Compass.w, topDelta, leftDelta); - this.resizeCompass(Compass.s, topDelta, leftDelta); - break; - } - } - - resizeCompass(compass: Compass, topDelta: number, leftDelta: number): void { - let { top, left, width, height } = this.desktopWindow.windowState.position; - switch (compass) { - case Compass.n: - topDelta = Math.max(-top, topDelta); - top += topDelta; - height -= topDelta; - break; - case Compass.s: - height += topDelta; - break; - case Compass.e: - width += leftDelta; - break; - case Compass.w: - leftDelta = Math.max(-left, leftDelta); - left += leftDelta; - width -= leftDelta; - break; - } - - if (this.overshootWidth > 0 && width > this.minWidth) { - const loss = Math.min(width - this.minWidth, this.overshootWidth); - this.overshootWidth -= loss; - width -= loss; - if(compass == Compass.w) { - left += loss; - } - } - - if (this.overshootHeight > 0 && height > this.minHeight) { - const loss = Math.min(height - this.minHeight, this.overshootHeight); - this.overshootHeight -= loss; - height -= loss; - if(compass == Compass.n) { - top += loss; - } - } - - if (width < this.minWidth) { - this.overshootWidth += this.minWidth - width; - if(compass == Compass.w) { - left -= this.minWidth - width; - } - width = this.minWidth; - } - - if (height < this.minHeight) { - this.overshootHeight += this.minHeight - height; - if(compass == Compass.n) { - top -= this.minHeight - height; - } - height = this.minHeight; - } - - this.desktopWindow.windowState.position = { top: top, left: left, width: width, height: height }; - } - - setTopLeft(event: MouseEvent | TouchEvent): void { - const {top, left} = DraggableDirective.topLeft(event); - - [this.top, this.left] = [top, left]; - [this.overshootWidth, this.overshootHeight] = [0, 0]; - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/window-manager.service.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/window-manager.service.ts deleted file mode 100644 index 90b2347dc..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/window-manager.service.ts +++ /dev/null @@ -1,971 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, ViewContainerRef, ComponentRef, ComponentFactoryResolver, Injector } from '@angular/core'; -import { Subject } from 'rxjs'; - -import { DesktopPluginDefinitionImpl } from 'app/plugin-manager/shared/desktop-plugin-definition'; -import { ViewportComponent } from 'app/application-manager/viewport-manager/viewport/viewport.component'; -//import { AppPropertiesWindowComponent } from '../propertieswindow/app-properties-window.component'; -import { BaseLogger } from 'virtual-desktop-logger'; - -import { DesktopWindow, LocalWindowEvents } from './desktop-window'; -import { WindowPosition } from './window-position'; -import { DesktopWindowState, DesktopWindowStateType } from '../shared/desktop-window-state'; -import { DesktopTheme } from "../desktop/desktop.component"; -import { WindowMonitor } from 'app/shared/window-monitor.service'; -import { ContextMenuItem, Angular2PluginWindowActions, Angular2PluginSessionEvents, Angular2PluginThemeEvents, - Angular2PluginWindowEvents, Angular2InjectionTokens, Angular2PluginViewportEvents, Angular2PluginEmbedActions, - InstanceId, EmbeddedInstance -} from 'pluginlib/inject-resources'; - -import { KeybindingService } from './keybinding.service'; -import { KeyCode } from './keycode-enum'; -import { ThemeEmitterService } from '../services/theme-emitter.service'; -import { HttpClient } from '@angular/common/http'; - -type PluginIdentifier = string; -const DEFAULT_DESKTOP_SHORT_TITLE = 'Zowe'; -const DEFAULT_DESKTOP_TITLE = 'Zowe Desktop'; - -@Injectable() -export class WindowManagerService implements MVDWindowManagement.WindowManagerServiceInterface { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - /* - * I'd like to apply this constant to the ".window .header" selector in ../window/window.component.css - * but I don't know how - */ - public static WINDOW_HEADER_HEIGHT = 45; - public static LAUNCHBAR_HEIGHT = 70; - private static NEW_WINDOW_POSITION_INCREMENT = WindowManagerService.WINDOW_HEADER_HEIGHT; - private static MAXIMIZE_WINDOW_HEIGHT_OFFSET = WindowManagerService.WINDOW_HEADER_HEIGHT - + WindowManagerService.LAUNCHBAR_HEIGHT; - - private nextId: MVDWindowManagement.WindowId; - private windowMap: Map; - private runningPluginMap: Map; - - private focusedWindow: DesktopWindow | null; - private topZIndex: number; - //private _lastScreenshotPluginId: string = ''; - //private _lastScreenshotWindowId: number = -1; - public showPersonalizationPanel: boolean = false; - private autoSaveInterval : number = 300000; - public autoSaveFiles : {[key:string]:number} = {}; - public autoSaveFileAllowDelete : boolean = true; - public autoSaveDataClean : boolean = false; - /* - * NOTES: - * 1. We ignore the width and height here (I am reluctant to make a new data type just for this, - * plus I don't want to make width and height optional) - * 2. Even though this looks like it starts at (0.0), doing this simplifies the logic of - * generateNewWindowPosition whuile still starting off at (NEW_WINDOW_POSITION_INCREMENT, NEW_WINDOW_POSITION_INCREMENT) - */ - private lastWindowPositionMap: Map>; - - contextMenuRequested: Subject<{xPos: number, yPos: number, items: ContextMenuItem[]}>; - readonly windowDeregisterEmitter: Subject; - private applicationManager: MVDHosting.ApplicationManagerInterface; - private viewportManager: MVDHosting.ViewportManagerInterface; - private pluginManager: MVDHosting.PluginManagerInterface; - public screenshotRequestEmitter: Subject<{pluginId: string, windowId: MVDWindowManagement.WindowId}>; - private authenticationManager: MVDHosting.AuthenticationManagerInterface; - private sessionSubscriptions: Map - - constructor( - private injector: Injector, - private windowMonitor: WindowMonitor, - private componentFactoryResolver: ComponentFactoryResolver, - private appKeyboard: KeybindingService, - private themeService: ThemeEmitterService, - private http: HttpClient - ) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.applicationManager = this.injector.get(MVDHosting.Tokens.ApplicationManagerToken); - this.viewportManager = this.injector.get(MVDHosting.Tokens.ViewportManagerToken); - this.pluginManager = this.injector.get(MVDHosting.Tokens.PluginManagerToken); - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken) - this.nextId = 0; - this.windowMap = new Map(); - this.sessionSubscriptions = new Map(); - this.runningPluginMap = new Map(); - - this.focusedWindow = null; - this.topZIndex = 0; - this.lastWindowPositionMap = new Map(); - this.contextMenuRequested = new Subject(); - this.windowDeregisterEmitter = new Subject(); - ZoweZLUX.dispatcher.attachWindowManager({ - "maximize" : (id: MVDWindowManagement.WindowId) => { - this.maximize(id); - }, - "minimize" : (id: MVDWindowManagement.WindowId) => { - this.minimize(id); - }, - "focus": (id: MVDWindowManagement.WindowId) => { - this.requestWindowFocus(id); - } - }); - this.screenshotRequestEmitter = new Subject(); - this.windowMonitor.windowResized.subscribe(() => { - Array.from(this.windowMap.values()) - .filter(win => win.windowState.stateType === DesktopWindowStateType.Maximized) - .forEach(win => this.refreshMaximizedWindowSize(win)); - }); - - let tabHandler = (event: KeyboardEvent) => { - if(this.focusedWindow){ - if(event.keyCode == 9 || event.which == 9){ // tab - let activeViewportID = this.getViewportIdFromDOM(document.activeElement); - if(activeViewportID != Number(this.focusedWindow.viewportId)){ - let focusHTML = this.getHTML(this.focusedWindow.windowId); - let focusTabIndex = focusHTML.getAttribute('tabindex'); - focusHTML.setAttribute('tabindex', '0'); - focusHTML.focus(); - focusHTML.setAttribute('tabindex', focusTabIndex); - } - } - } - } - document.addEventListener('keyup', tabHandler, false); - document.addEventListener('keydown', tabHandler, false); - - this.appKeyboard.registerKeyUpEvent(); - this.appKeyboard.keyUpEvent - .subscribe((event:KeyboardEvent) => { - if (event.which === KeyCode.DOWN_ARROW) { - // TODO: Disable minimize hotkey once mvd-window-manager single app mode is functional. Variable subject to change. - if(this.focusedWindow && !window['GIZA_PLUGIN_TO_BE_LOADED']) { - this.minimizeToggle(this.focusedWindow.windowId); - } - } - else if (event.which === KeyCode.UP_ARROW) { - if(this.focusedWindow) { - this.maximizeToggle(this.focusedWindow.windowId); - } - } - else if (event.which === KeyCode.COMMA || event.which === KeyCode.LEFT_ARROW) { - this.switchWindow(-1); - } - else if (event.which === KeyCode.PERIOD || event.which === KeyCode.RIGHT_ARROW) { - this.switchWindow(1); - } - else if (event.which === KeyCode.KEY_W) { - // We should not be able to close a standalone mode application window - if(this.focusedWindow && !this.focusedWindow.isFullscreenStandalone) { - this.closeWindow(this.focusedWindow.windowId); - } - } - }); - this.authenticationManager.loginScreenVisibilityChanged.subscribe((eventReason: MVDHosting.LoginScreenChangeReason) => { - this.sessionSubscriptions.forEach((session: Angular2PluginSessionEvents, windowId: MVDWindowManagement.WindowId) => { - switch (eventReason) { - case MVDHosting.LoginScreenChangeReason.UserLogin: - session.login.next(); - case MVDHosting.LoginScreenChangeReason.SessionExpired: - session.sessionExpire.next(); - break; - default: - } - }) - }); - } - - public static _setTheme(newTheme: DesktopTheme) { - switch (newTheme.size.window) { - case 1: - WindowManagerService.WINDOW_HEADER_HEIGHT = 22; - break; - case 3: - WindowManagerService.WINDOW_HEADER_HEIGHT = 47; - break; - default: - WindowManagerService.WINDOW_HEADER_HEIGHT = 29; - //2 - } - WindowManagerService.NEW_WINDOW_POSITION_INCREMENT = WindowManagerService.WINDOW_HEADER_HEIGHT; - - switch (newTheme.size.launchbar) { - case 1: - WindowManagerService.LAUNCHBAR_HEIGHT = 25; - break; - case 3: - WindowManagerService.LAUNCHBAR_HEIGHT = 76; - break; - default: - //2 - WindowManagerService.LAUNCHBAR_HEIGHT = 41; - } - WindowManagerService.MAXIMIZE_WINDOW_HEIGHT_OFFSET = WindowManagerService.WINDOW_HEADER_HEIGHT - + WindowManagerService.LAUNCHBAR_HEIGHT; - } - - private getViewportIdFromDOM(element: any): Number{ - var parentViewportElement: any; - var head = element; - const viewportTag: string = 'com-rs-mvd-viewport'; - const viewportIdAttr: string = 'rs-com-viewport-id'; - while(head.parentNode !== document){ - if(head.parentNode.nodeName.toLowerCase() === viewportTag){ - parentViewportElement = head.parentNode; - break; - } - head = head.parentNode; - } - if(parentViewportElement === undefined){ - return -1; - } - return parentViewportElement.getAttribute(viewportIdAttr); - } - - switchWindow(zDistance:number): void { - let windows:DesktopWindow[] = this.getAllWindows(); - - if(this.focusedWindow) { - const focusedWindowId :number = this.focusedWindow.windowId; - windows = windows.filter( (val: DesktopWindow ) => - val.windowId !== focusedWindowId - ); - } - - if(windows.length>0) { - const sortWindows: DesktopWindow[] = windows.sort( - (val1:DesktopWindow, val2:DesktopWindow) => - ((val1.windowState.zIndex - val2.windowState.zIndex) - * zDistance) - ); - - const windowIds = sortWindows.map((val:DesktopWindow) => val.windowId); - - if(windowIds.length>0) { - const selectIdx: number = (Math.abs(zDistance) -1) % (windows.length); - const windowId = windowIds[selectIdx]; - if(this.focusedWindow && zDistance<1) { - const replaceZIndex = Math.abs(sortWindows[windowIds.length-1].windowState.zIndex)-1; - if(replaceZIndex>0) { - this.focusedWindow.windowState.zIndex=replaceZIndex; - } else { - sortWindows.forEach((w,i)=>{ - w.windowState.zIndex+=30; - }) - this.focusedWindow.windowState.zIndex=sortWindows[windowIds.length-1].windowState.zIndex-1; - } - } - this.requestWindowFocus(windowId); - } - } - } - - /* TODO: https://github.com/angular/angular/issues/17725 gets in the way */ - getAllWindows(): DesktopWindow[] { - return Array.from(this.windowMap.values()); - } - - private refreshMaximizedWindowSize(desktopWindow: DesktopWindow): void { - //This is the window viewport size, so you must subtract the header and launchbar from the height, if not in standalone mode. - let height; - if (window['GIZA_PLUGIN_TO_BE_LOADED']) { - height = window.innerHeight; - } else { - height = window.innerHeight - WindowManagerService.MAXIMIZE_WINDOW_HEIGHT_OFFSET; - } - desktopWindow.windowState.position = { top: 0, - left: 0, - width: window.innerWidth, - height: height}; - } - - private generateWindowId(): MVDWindowManagement.WindowId { - return this.nextId++; - } - - private generateNewWindowPosition(plugin: DesktopPluginDefinitionImpl): WindowPosition { - let { width: dtWindowWidth, height: dtWindowHeight } = plugin.defaultWindowStyle; - const desktopHeight = document.getElementsByClassName('window-pane')[0].clientHeight; - const desktopWidth = document.getElementsByClassName('window-pane')[0].clientWidth; - const launchbarHeight = WindowManagerService.LAUNCHBAR_HEIGHT; - const { innerWidth, innerHeight } = window; - const rightMostPosition = innerWidth - dtWindowWidth; - const bottomMostPosition = innerHeight - dtWindowHeight; - const pluginIdentifier = plugin.getIdentifier(); - - // By default, plugins begin in the center of the screen (half of both x & y axes) - let nextLeft = (desktopWidth / 2) - (dtWindowWidth / 2); - let nextTop = (desktopHeight / 2) - (dtWindowHeight / 2) - (WindowManagerService.WINDOW_HEADER_HEIGHT / 2) - (launchbarHeight / 2); - - const selectedPluginWindows = this.runningPluginMap.get(pluginIdentifier); - if (selectedPluginWindows && selectedPluginWindows.length > 0) { - let windowId: MVDWindowManagement.WindowId; - windowId = this.runningPluginMap.get(pluginIdentifier)![this.runningPluginMap.get(pluginIdentifier)!.length-1]; - - let windowPosition = { - ...this.getWindowPositionFor(pluginIdentifier, windowId), - } as WindowPosition - let lastSavedPosition = { - ...this.getWindowPositionFromId(pluginIdentifier), - } as WindowPosition - if (lastSavedPosition.width == windowPosition.width && lastSavedPosition.height == - windowPosition.height && lastSavedPosition.top == windowPosition.top && lastSavedPosition.left - == windowPosition.left) - { // If a plugin of the same type is already running, cascade an instance below it - if (windowPosition && windowPosition.left && windowPosition.height) - { - nextLeft = windowPosition.left + WindowManagerService.NEW_WINDOW_POSITION_INCREMENT; - nextTop = windowPosition.top + WindowManagerService.NEW_WINDOW_POSITION_INCREMENT; - dtWindowHeight = windowPosition.height; - dtWindowWidth = windowPosition.width; - } - } else - { // If a previously opened plugin instance has been closed, restore it - if (lastSavedPosition && lastSavedPosition.left && lastSavedPosition.height) - { - nextLeft = lastSavedPosition.left; - nextTop = lastSavedPosition.top; - dtWindowHeight = lastSavedPosition.height; - dtWindowWidth = lastSavedPosition.width; - } - } - } else { // If a plugin of the same type is not running, but has previously saved position data, re-open it - let windowPosition = { - ...this.getWindowPositionFromId(pluginIdentifier), - } as WindowPosition - if (windowPosition && windowPosition.left && windowPosition.height) { - return windowPosition; - } - } - - // When cascade has reached too far down or too far to the right, start again from 1, 1 - if (nextLeft > rightMostPosition || nextTop > (bottomMostPosition - launchbarHeight)) { - nextLeft = 1; - nextTop = 1; - } - - /* We've chosen the best position based on history and requested window size, now we - * adjust window size if necessary */ - - if (nextLeft > rightMostPosition) { - const newWidth = innerWidth - nextLeft; - this.logger.debug("ZWED5318I", dtWindowWidth, newWidth, nextLeft, innerWidth); //this.logger.debug(`reducing width from ${dtWindowWidth} to ${newWidth} based on nextLeft ${nextLeft} and innerWidth ${innerWidth}`); - dtWindowWidth = newWidth; - } - - if (nextTop > bottomMostPosition) { - const newHeight = innerHeight - nextTop; - this.logger.debug("ZWED5319I", dtWindowHeight, newHeight, nextTop, innerHeight); //this.logger.debug(`reducing height from ${dtWindowHeight} to ${newHeight} based on nextTop ${nextTop} and innerHeight ${innerHeight}`); - dtWindowHeight = newHeight; - } - - const newWindowPosition: WindowPosition = { - left: nextLeft, - top: nextTop, - width: dtWindowWidth, - height: dtWindowHeight - }; - - return newWindowPosition; - } - - private generateWindowEventsProvider(windowId: MVDWindowManagement.WindowId): Angular2PluginWindowEvents { - const events = this.getWindowEvents(windowId); - - return { - maximized: events.windowMaximized, - minimized: events.windowMinimized, - restored: events.windowRestored, - moved: events.windowMoved, - resized: events.windowResized, - titleChanged: events.windowTitleChanged - }; - } - - private generateWindowActionsProvider(windowId: MVDWindowManagement.WindowId): Angular2PluginWindowActions { - return { - close: () => this.closeWindow(windowId), - minimize: () => this.minimize(windowId), - maximize: () => this.maximize(windowId), - restore: () => this.restore(windowId), - setTitle: (title) => this.setWindowTitle(windowId, title), - setPosition: (pos) => this.setPosition(windowId, pos), - spawnContextMenu: (xPos, yPos, items, isAbsolutePos?:boolean) => this.spawnContextMenu(windowId, xPos, yPos, items, isAbsolutePos), - registerCloseHandler: (handler)=> this.registerCloseHandler(windowId, handler) - }; - } - - private generateViewportEventsProvider(windowId: MVDWindowManagement.WindowId, viewportId: MVDHosting.ViewportId): Angular2PluginViewportEvents { - const events = this.getWindowEvents(windowId); - - return { - resized: events.windowResized, - spawnContextMenu: (xPos, yPos, items, isAbsolutePos?:boolean) => this.spawnContextMenu(windowId, xPos, yPos, items, isAbsolutePos), - registerCloseHandler: (handler) => this.viewportManager.registerViewportCloseHandler(viewportId, handler) - }; - } - - private generateEmbedAction(windowId: MVDWindowManagement.WindowId): Angular2PluginEmbedActions { - return { - createEmbeddedInstance: (identifier: string, launchMetadata: any, viewContainer: ViewContainerRef): Promise => { - return this.pluginManager.findPluginDefinition(identifier).then((plugin): InstanceId => { - if (plugin == null) { - throw new Error('ZWED5154E - No matching plugin definition found'); - } - - const factory = this.componentFactoryResolver.resolveComponentFactory(ViewportComponent); - const componentRef: ComponentRef = viewContainer.createComponent(factory, viewContainer.length); - - const viewportComponent = componentRef.instance; - - - viewportComponent.viewportId = this.viewportManager.createViewport((viewportId: MVDHosting.ViewportId)=> { - const providers: Map = new Map(); - providers.set(Angular2InjectionTokens.VIEWPORT_EVENTS, this.generateViewportEventsProvider(windowId, viewportId)); - providers.set(Angular2InjectionTokens.PLUGIN_EMBED_ACTIONS, this.generateEmbedAction(windowId)); - return providers; - }); - const viewportId = viewportComponent.viewportId; - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow) { - desktopWindow.addChildViewport(viewportId); - } - return this.applicationManager.spawnApplicationWithTarget(plugin, launchMetadata, viewportComponent.viewportId) - .then(instanceId => ({instanceId, viewportId})); - }); - } - }; - } - - public launchDesktopAutoSavedApplications(){ - this.http.get(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(),'pluginData/app', undefined)).subscribe(res => { - if(res){ - for (let pluginWindow in res.contents){ - let pluginName = pluginWindow.split('-')[0] - this.applicationManager.spawnApplication(new DesktopPluginDefinitionImpl(ZoweZLUX.pluginManager.getPlugin(pluginName)),{"data":{"type":"setAppRequest","actionType":"Launch","targetMode":"PluginCreate","appData":res.contents[pluginWindow].data.appData}}) - - this.autoSaveDataClean = true; - } - } - }); - } - - private savePluginData(plugin:ZLUX.Plugin,windowId:number,data:any){ - let pathToSave : any = 'pluginData' + '/' + 'app' - let fileNameToSave : string = plugin.getIdentifier() + '-' + windowId - if(this.autoSaveDataClean){ - this.http.delete(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(),'pluginData/app',undefined)).subscribe(()=> - this.logger.info('Deleted AutoSaveData for Desktop Plugins') - ) - this.autoSaveDataClean = false; - } - if(this.autoSaveFiles[fileNameToSave] !== undefined){ - this.http.put(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(),pathToSave,fileNameToSave+'&lastmod='+this.autoSaveFiles[fileNameToSave]), data).subscribe(res => { - this.autoSaveFiles[fileNameToSave] = res.maccessms - this.logger.info('Saved data for plugin:',plugin.getIdentifier()) - }) - }else{ - this.http.put(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(),pathToSave,fileNameToSave), data).subscribe(res => { - this.autoSaveFiles[fileNameToSave] = res.maccessms - this.logger.info('Saved data for plugin:',plugin.getIdentifier()) - }) - } - }; - - private generateSessionEventsProvider(windowId: MVDWindowManagement.WindowId): Angular2PluginSessionEvents { - const login = new Subject(); - const sessionExpire = new Subject(); - const autosaveEmitter = new Subject(); - let desktopWin: DesktopWindow|undefined = this.windowMap.get(windowId); - if (desktopWin) { - let plugin: ZLUX.Plugin = desktopWin.plugin; - setInterval(()=> { - autosaveEmitter.next((data:any)=> { - this.savePluginData(plugin,windowId,data) - }); - },this.autoSaveInterval); - } - const sessionEvents: Angular2PluginSessionEvents = { - login, - sessionExpire, - autosaveEmitter - } - this.sessionSubscriptions.set(windowId, sessionEvents) - return sessionEvents - } - - private generateWindowProviders(windowId: MVDWindowManagement.WindowId, viewportId: MVDHosting.ViewportId): Map { - const providers: Map = new Map(); - providers.set(Angular2InjectionTokens.WINDOW_ACTIONS, this.generateWindowActionsProvider(windowId)); - providers.set(Angular2InjectionTokens.WINDOW_EVENTS, this.generateWindowEventsProvider(windowId)); - providers.set(Angular2InjectionTokens.VIEWPORT_EVENTS, this.generateViewportEventsProvider(windowId, viewportId)); - providers.set(Angular2InjectionTokens.PLUGIN_EMBED_ACTIONS, this.generateEmbedAction(windowId)); - providers.set(Angular2InjectionTokens.SESSION_EVENTS, this.generateSessionEventsProvider(windowId)); - providers.set(Angular2InjectionTokens.THEME_EVENTS, this.generateThemeEventsProvider()); - - return providers; - } - - // We don't use windowID's here because each app lifecycle points to one master theme service, they're indistinguishable - private generateThemeEventsProvider(): Angular2PluginThemeEvents { - return { - colorChanged: this.themeService.onColorChange, - sizeChanged: this.themeService.onSizeChange, - wallpaperChanged: this.themeService.onWallpaperChange, - currentColor: this.themeService.mainColor, - currentSize: this.themeService.mainSize, - revertedDefault: this.themeService.onResetAllDefault - }; - } - - createWindow(plugin: MVDHosting.DesktopPluginDefinition): MVDWindowManagement.WindowId { - /* Create window instance */ - let pluginImpl:DesktopPluginDefinitionImpl = plugin as DesktopPluginDefinitionImpl; - const windowId = this.generateWindowId(); - const newWindowPosition: WindowPosition = this.generateNewWindowPosition(pluginImpl); - const newState = new DesktopWindowState(this.topZIndex, newWindowPosition); - const desktopWindow = new DesktopWindow(windowId, newState, plugin.getBasePlugin()); - this.topZIndex ++; - - /* Register window */ - this.windowMap.set(windowId, desktopWindow); - - const pluginId = plugin.getIdentifier(); - const desktopWindowIds = this.runningPluginMap.get(pluginId); - if (desktopWindowIds !== undefined) { - desktopWindowIds.push(windowId); - } else { - this.runningPluginMap.set(pluginId, [windowId]); - } - - this.updateLastWindowPositions(pluginId, windowId, newWindowPosition); - - /* Create viewport */ - desktopWindow.viewportId = this.viewportManager.createViewport((viewportId: MVDHosting.ViewportId)=> { - return this.generateWindowProviders(windowId, viewportId); - }); - - /* Default window actions */ - this.setWindowTitle(windowId, pluginImpl.defaultWindowTitle); - this.requestWindowFocus(windowId); - - return windowId; - } - - createFullscreenStandaloneWindow(plugin: MVDHosting.DesktopPluginDefinition): MVDWindowManagement.WindowId { - /* Create window instance */ - let pluginImpl:DesktopPluginDefinitionImpl = plugin as DesktopPluginDefinitionImpl; - const windowId = this.generateWindowId(); - const paddingMargin = 2; - // const newWindowPosition: WindowPosition = this.generateNewWindowPosition(pluginImpl); - const newWindowPosition: WindowPosition = { - left: 0 - paddingMargin, - top: 0 - 31, - width: window.innerWidth + paddingMargin, - height: window.innerHeight + 31 - }; - const newState = new DesktopWindowState(this.topZIndex, newWindowPosition); - const desktopWindow = new DesktopWindow(windowId, newState, plugin.getBasePlugin()); - desktopWindow.isFullscreenStandalone = true; - this.topZIndex ++; - - /* Register window */ - this.windowMap.set(windowId, desktopWindow); - - const pluginId = plugin.getIdentifier(); - const desktopWindowIds = this.runningPluginMap.get(pluginId); - if (desktopWindowIds !== undefined) { - desktopWindowIds.push(windowId); - } else { - this.runningPluginMap.set(pluginId, [windowId]); - } - - this.updateLastWindowPositions(pluginId, windowId, newWindowPosition); - - /* Create viewport */ - desktopWindow.viewportId = this.viewportManager.createViewport((viewportId: MVDHosting.ViewportId)=> { - return this.generateWindowProviders(windowId, viewportId); - }); - - /* Default window actions */ - this.setWindowTitle(windowId, pluginImpl.defaultWindowTitle); - this.requestWindowFocus(windowId); - this._maximizeFullscreen(windowId); - - return windowId; - } - - getWindow(plugin: MVDHosting.DesktopPluginDefinition): MVDWindowManagement.WindowId | null { - const desktopWindows = this.runningPluginMap.get(plugin.getIdentifier()); - if (desktopWindows !== undefined) { - return desktopWindows[0]; - } else { - return null; - } - } - - getWindowIDs(plugin: MVDHosting.DesktopPluginDefinition): Array | null { - const desktopWindows = this.runningPluginMap.get(plugin.getIdentifier()); - if (desktopWindows !== undefined) { - return desktopWindows.map((desktopWindow)=> {return desktopWindow/*.windowId*/;}); - } else { - return null; - } - } - - showWindow(windowId: MVDWindowManagement.WindowId): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow !== undefined) { - if (desktopWindow.windowState.stateType === DesktopWindowStateType.Minimized) { - const previousWindowState = desktopWindow.windowState.PreviousStateType; - this.restore(windowId); - if (previousWindowState === DesktopWindowStateType.Maximized) { - this.maximize(windowId); - } - } - } - } - - getViewportId(windowId: MVDWindowManagement.WindowId): MVDHosting.ViewportId { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5155E - Attempted to retrieve viewport id of null window'); - } - - return desktopWindow.viewportId; - } - - getHTML(windowId: MVDWindowManagement.WindowId) { - let windowHTML = this.applicationManager.getViewportComponentRef(this.getViewportId(windowId)).location.nativeElement; - - return windowHTML.children[0].offsetParent - } - - getPlugin(windowId: MVDWindowManagement.WindowId) { - const desktopWindow = this.windowMap.get(windowId); - var plugin = this.runningPluginMap.get(desktopWindow!.plugin.getIdentifier()); - return plugin; - } - - private destroyWindow(windowId: MVDWindowManagement.WindowId): void { - this.sessionSubscriptions.delete(windowId); - this.windowDeregisterEmitter.next(windowId); - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow != undefined) { - this.windowMap.delete(windowId); - let windowIDs = this.runningPluginMap.get(desktopWindow.plugin.getIdentifier()); - if (windowIDs){ - var index = windowIDs.indexOf(windowId); - if(index!=-1){ - windowIDs.splice(index, 1); - } - this.runningPluginMap.set(desktopWindow.plugin.getIdentifier(),windowIDs); - } - } - } - - closeWindow(windowId: MVDWindowManagement.WindowId): void { - const desktopWindow = this.windowMap.get(windowId); - // We should not be able to close a standalone mode application window - if(desktopWindow && desktopWindow.isFullscreenStandalone) { - this.logger.warn("ZWED5198W", windowId); //this.logger.warn(`Attempted to close standalone mode app window, ID=${windowId}`); - return; - } - if (desktopWindow == null) { - this.logger.warn("ZWED5181W", windowId); //this.logger.warn(`Attempted to close null window, ID=${windowId}`); - return; - } - this.updateLastWindowPositions(desktopWindow.plugin.getIdentifier(), windowId, desktopWindow.windowState.position); - - const closeViewports = ()=> { - desktopWindow.closeViewports(this.viewportManager).then(()=> { - if (appId!=null) { - let filePath : any = 'pluginData' + '/' + 'app' - let fileNameToDelete : string = desktopWindow.plugin.getIdentifier() + '-' + appId - if(this.autoSaveFileAllowDelete && desktopWindow.plugin.getWebContent().autosave == true){ - this.http.delete(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(),filePath,fileNameToDelete)).subscribe(()=> - this.logger.info('Deleted AutoSaveData for plugin:',desktopWindow.plugin.getIdentifier()) - ); - } - this.applicationManager.killApplication(desktopWindow.plugin, appId); - } - this.destroyWindow(windowId); - this.setDesktopTitle(); - }).catch((info:any)=> { - this.logger.warn("ZWED5182W", info); //this.logger.warn(`Window could not be closed because of viewport. Details=`,info); - return; - }); - } - - let appId = this.viewportManager.getApplicationInstanceId(desktopWindow.viewportId); - if (desktopWindow.closeHandler != null) { - desktopWindow.closeHandler().then(()=>{closeViewports();}); - } else { - closeViewports(); - } - - this.focusedWindow = null; - } - - closeAllWindows() :void { - let windows: DesktopWindow[] = Array.from(this.windowMap.values()); - windows.forEach((window: DesktopWindow)=> { - this.closeWindow(window.windowId); - }); - this.setDesktopTitle(); - } - - registerCloseHandler(windowId: MVDWindowManagement.WindowId, handler: () => Promise): void { - this.logger.warn("ZWED5183W"); //this.logger.warn(`windowActions.registerCloseHandler is deprecated. Please use viewportEvents.registerCloseHandler instead.`); - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - this.logger.warn("ZWED5184W", windowId); //this.logger.warn('Attempted to register close handler for null window, ID=${windowId}'); - return; - } - - desktopWindow.closeHandler = handler; - } - - getWindowTitle(windowId: MVDWindowManagement.WindowId): string | null { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - this.logger.warn("ZWED5185W", windowId); //this.logger.warn('Attempted to set window title for null window, ID=${windowId}'); - return null; - } - return desktopWindow.windowTitle; - } - - setWindowTitle(windowId: MVDWindowManagement.WindowId, title: string): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - this.logger.warn("ZWED5186W", windowId); //this.logger.warn('Attempted to set window title for null window, ID=${windowId}'); - return; - } - - desktopWindow.windowTitle = title; - this.setDesktopTitle(desktopWindow.windowTitle); - } - - requestWindowFocus(destination: MVDWindowManagement.WindowId): boolean { - const desktopWindow = this.windowMap.get(destination); - if (desktopWindow == null) { - this.logger.warn("ZWED5187W", destination); //this.logger.warn('Attempted to request focus for null window, ID=${destination}'); - return false; - } - //let requestScreenshot = false; - //if (!this.windowHasFocus(destination) && this._lastScreenshotWindowId != destination){ - //requestScreenshot = true; - //} - - //can't focus an unseen window! - if (desktopWindow.windowState.stateType === DesktopWindowStateType.Minimized) { - this.restore(destination); - } - - this.focusedWindow = desktopWindow; - desktopWindow.windowState.zIndex = this.topZIndex ++; - // TODO: Generate snapshot code needs optimization due to incredible desktop performance slowdown - // if (requestScreenshot){ - // setTimeout(()=> { - // this.screenshotRequestEmitter.next({pluginId: this._lastScreenshotPluginId, windowId: this._lastScreenshotWindowId}); - // this._lastScreenshotWindowId = destination; - // this._lastScreenshotPluginId = desktopWindow.plugin.getIdentifier(); - // },500); //delay a bit for performance perception - // } - this.setDesktopTitle(desktopWindow.windowTitle); - return true; - } - - windowHasFocus(window: MVDWindowManagement.WindowId): boolean { - if (this.focusedWindow) { - return this.focusedWindow.windowId === window; - } else { - return false; - } - } - - getWindowEvents(windowId: MVDWindowManagement.WindowId): LocalWindowEvents { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5156E - Attempted to get window events for null window'); - } - - return desktopWindow.localWindowEvents; - } - - maximize(windowId: MVDWindowManagement.WindowId): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5157E - Attempted to maximize null window'); - } - - desktopWindow.windowState.maximize(); - this.refreshMaximizedWindowSize(desktopWindow); - } - - private _maximizeFullscreen(windowId: MVDWindowManagement.WindowId): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5157E - Attempted to maximize null window'); - } - - desktopWindow.windowState._maximizeFullscreen(); - } - - minimize(windowId: MVDWindowManagement.WindowId): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5158E - Attempted to minimize null window'); - } - - desktopWindow.windowState.minimize(); - } - - restore(windowId: MVDWindowManagement.WindowId): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5159E - Attempted to restore null window'); - } - desktopWindow.windowState.restore(); - this.updateLastWindowPositions(desktopWindow.plugin.getIdentifier(), windowId, desktopWindow.windowState.position); - } - - setPosition(windowId: MVDWindowManagement.WindowId, pos: WindowPosition): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5160E - Attempted to set position for null window'); - } - //TODO(?): It seems like this method is never being used. The only method used to set position of a - //window is positionStyle() in window.component.ts --- this.logger.info("Set position used here!"); - desktopWindow.windowState.position = pos; - this.updateLastWindowPositions(desktopWindow.plugin.getIdentifier(), windowId, desktopWindow.windowState.position); - } - - updateLastWindowPositions(pluginId: String, windowId: MVDWindowManagement.WindowId, pos: WindowPosition): boolean { - let positionMap = this.lastWindowPositionMap.get(pluginId); - if (positionMap) { - let windowPosition = positionMap.get(windowId); - if (windowPosition) { - positionMap.set(windowId, pos); - this.lastWindowPositionMap.set(pluginId, positionMap); - return true; // Returns if true if existing position data has been overwritten - } - } - positionMap = new Map(); - positionMap.set(windowId, pos); - this.lastWindowPositionMap.set(pluginId, positionMap); - return false; // Returns false if a new position data point was created - } - - getWindowPositionFor(pluginId: String, windowId: MVDWindowManagement.WindowId): WindowPosition | null { - let positionMap = this.lastWindowPositionMap.get(pluginId); - if (positionMap) - { - let windowPosition = positionMap.get(windowId); - if (windowPosition) - { - return windowPosition; - } - } - return null; - } - - getWindowPositionFromId(pluginId: String): WindowPosition | null { - let positionMap = this.lastWindowPositionMap.get(pluginId); - if (positionMap) - { - let IDsMap = Array.from(positionMap.keys()); - if (IDsMap.length >= 0) - { - IDsMap.sort(); - let windowPosition = positionMap.get(IDsMap[IDsMap.length - 1]); - if (windowPosition) - { - return windowPosition; - } - } - } - return null; - } - - maximizeToggle(windowId: MVDWindowManagement.WindowId): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5161E - Attempted to maximize toggle null window'); - } - - const stateType = desktopWindow.windowState.stateType; - - switch (stateType) { - case DesktopWindowStateType.Minimized: - this.maximize(windowId); - break; - case DesktopWindowStateType.Maximized: - this.restore(windowId); - break; - case DesktopWindowStateType.Normal: - this.maximize(windowId); - break; - } - } - - minimizeToggle(windowId: MVDWindowManagement.WindowId): void { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5162E - Attempted to minimize toggle null window'); - } - - const stateType = desktopWindow.windowState.stateType; - - switch (stateType) { - case DesktopWindowStateType.Minimized: - this.restore(windowId); - break; - case DesktopWindowStateType.Maximized: - this.minimize(windowId); - break; - case DesktopWindowStateType.Normal: - this.minimize(windowId); - break; - } - } - - spawnContextMenu(windowId: MVDWindowManagement.WindowId, x: number, y: number, items: ContextMenuItem[], isAbsolutePos?: boolean): boolean { - const desktopWindow = this.windowMap.get(windowId); - if (desktopWindow == null) { - throw new Error('ZWED5163E - Attempted to spawn context menu for null window'); - } - const windowPos = desktopWindow.windowState.position; - const newX = isAbsolutePos ? x : windowPos.left + x; - const newY = isAbsolutePos ? y : windowPos.top + y + WindowManagerService.WINDOW_HEADER_HEIGHT; - this.contextMenuRequested.next({xPos: newX, yPos: newY, items: items}); - return true; - } - - setDesktopTitle(title?:String) { - // TODO: Abstract app count to new function - /* const appCount = this.runningPluginMap.size;*/ - let newTitle = DEFAULT_DESKTOP_TITLE; - if(title) { - newTitle=[DEFAULT_DESKTOP_SHORT_TITLE, /*appCount + ' Apps',*/ title].join(' | '); - } - document.title = newTitle; - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/window-position.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/window-position.ts deleted file mode 100644 index 59c9ac0d5..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/shared/window-position.ts +++ /dev/null @@ -1,30 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -export interface WindowPosition { - top: number; - left: number; - width: number; - height: number; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-manager.module.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-manager.module.ts deleted file mode 100644 index 2dc21fe00..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-manager.module.ts +++ /dev/null @@ -1,85 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { HttpClientModule } from '@angular/common/http'; -import { SharedModule } from 'app/shared/shared.module'; -import { ApplicationManagerModule } from 'app/application-manager/application-manager.module'; -import { ContextMenuModule } from '../../context-menu/context-menu.module'; -import { LaunchbarModule } from './launchbar/launchbar.module'; -import { DesktopComponent } from './desktop/desktop.component'; -import { WindowPaneComponent } from './window-pane/window-pane.component'; -import { WindowComponent } from './window/window.component'; -import { WindowManagerService } from './shared/window-manager.service'; -import { DraggableDirective } from './shared/draggable.directive'; -import { SizeableDirective } from './shared/sizeable.directive'; -import { MvdComponent } from './mvd.component'; -import { AuthenticationModule } from '../../authentication-manager/authentication-manager.module'; -import { PersonalizationPanelComponent } from '../mvd-window-manager/personalization-panel/personalization-panel.component'; -import { KeybindingService } from './shared/keybinding.service'; -import { PersonalizationComponent } from '../mvd-window-manager/personalization-panel/personalization/personalization.component'; -import { NgxFileDropModule } from 'ngx-file-drop'; -import { ThemeEmitterService } from './services/theme-emitter.service'; -import {MatSnackBarModule} from '@angular/material/snack-bar'; - - -@NgModule({ - imports: [ - ApplicationManagerModule, - AuthenticationModule, - ContextMenuModule, - CommonModule, - SharedModule, - LaunchbarModule, - HttpClientModule, - ContextMenuModule, - NgxFileDropModule, - MatSnackBarModule - ], - declarations: [ - DesktopComponent, - WindowPaneComponent, - WindowComponent, - DraggableDirective, - SizeableDirective, - MvdComponent, - PersonalizationPanelComponent, - PersonalizationComponent - ], - exports: [ - DesktopComponent - ], - providers: [ - WindowManagerService, - ThemeEmitterService, - /* Expose to the rest of the desktop */ - { provide: MVDWindowManagement.Tokens.WindowManagerToken, useExisting: WindowManagerService }, - { provide: MVDHosting.Tokens.ThemeEmitterToken, useExisting: ThemeEmitterService }, - KeybindingService - ] -}) -export class WindowManagerModule { - -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.css deleted file mode 100644 index f04bea201..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.css +++ /dev/null @@ -1,32 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.window-pane { - position: absolute; - width: 100%; - height: 100%; - left: 0; - top: 0; - display: flex; - background: url(../../../../assets/images/background.jpg) no-repeat center/cover; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.html deleted file mode 100644 index d884f491b..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - -
-
- -
-
- - - - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.ts deleted file mode 100644 index 745d9a1d6..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window-pane/window-pane.component.ts +++ /dev/null @@ -1,139 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, OnInit, Injector, Input } from '@angular/core'; -import { ContextMenuItem } from 'pluginlib/inject-resources'; -import { DesktopTheme } from "../desktop/desktop.component"; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { DesktopWindow } from '../shared/desktop-window'; -import { WindowManagerService } from '../shared/window-manager.service'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { ThemeEmitterService } from '../services/theme-emitter.service'; -import { L10nTranslationService } from 'angular-l10n'; -import { delay } from 'rxjs/operators'; - -const DESKTOP_PLUGIN = ZoweZLUX.pluginManager.getDesktopPlugin(); -const DESKTOP_WALLPAPER_URI = ZoweZLUX.uriBroker.pluginConfigUri(DESKTOP_PLUGIN,'ui/themebin', 'wallpaper'); -const DESKTOP_WALLPAPER_MAX_SIZE = 3; - -@Component({ - selector: 'rs-com-window-pane', - templateUrl: 'window-pane.component.html', - styleUrls: ['window-pane.component.css'] -}) -export class WindowPaneComponent implements OnInit, MVDHosting.LoginActionInterface, MVDHosting.LogoutActionInterface { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - public contextMenuDef: {xPos: number, yPos: number, items: ContextMenuItem[]} | null; - public wallpaper: any = { }; - private authenticationManager: MVDHosting.AuthenticationManagerInterface; - - @Input() theme: DesktopTheme; - - constructor( - public windowManager: WindowManagerService, - private injector: Injector, - private http: HttpClient, - private themeService: ThemeEmitterService, - private translation: L10nTranslationService, - ) { - this.logger.debug("ZWED5320I", windowManager); //this.logger.debug("Window-pane-component wMgr=",windowManager); - this.contextMenuDef = null; - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken); - this.authenticationManager.registerPostLoginAction(this); - this.authenticationManager.registerPreLogoutAction(this); - } - - private replaceWallpaper(url:string) { - this.http.head(url, {observe: 'response'}).subscribe((result:HttpResponse) => { - if (result.status != 204 && result.ok) { - this.wallpaper.background = `url(${url}) no-repeat center/cover`; - } - }, error => { - this.resetWallpaperDefault(); - }); - } - - onLogout(username: string) { - this.resetWallpaperDefault(); - return true; - } - - onLogin(username:string, plugins:ZLUX.Plugin[]):boolean { - this.replaceWallpaper(DESKTOP_WALLPAPER_URI); - return true; - } - - ngOnInit(): void { - this.windowManager.contextMenuRequested.subscribe(menuDef => { - this.contextMenuDef = menuDef; - }); - - this.themeService.onWallpaperChange - .subscribe((image:any) => { - let temp = this.wallpaper.background; - this.resetWallpaperDefault(); - this.http.put(DESKTOP_WALLPAPER_URI, image) - .pipe(delay(250)) - .subscribe((data: any) => { - this.resetWallpaperDefault(); - this.logger.debug("Attempted to post image with status: ", data); - this.replaceWallpaper(DESKTOP_WALLPAPER_URI); - }, - (error: any) => { - this.wallpaper.background = temp; - const notifTitle = this.translation.translate("Personalization"); - let notifMessage; - if (error.status = 413) //payload too large - { // Needs translations - notifMessage = `Wallpaper changed failed: Server supports a max size of '` + DESKTOP_WALLPAPER_MAX_SIZE + `' mb.`; - } else { - notifMessage = `Wallpaper changed failed - ` + error.status + `: ` + error.message; - } - ZoweZLUX.notificationManager.notify(ZoweZLUX.notificationManager.createNotification(notifTitle, notifMessage, 1, "org.zowe.zlux.ng2desktop.settings")); - } ); - }); - - this.themeService.onResetAllDefault - .subscribe(() => { - this.resetWallpaperDefault(); - this.http.delete(DESKTOP_WALLPAPER_URI) - .subscribe((data: any) => { - this.logger.debug("Attempted to delete image with status: ", data); - this.replaceWallpaper(DESKTOP_WALLPAPER_URI); - }); - }); - } - - closeContextMenu(): void { - this.contextMenuDef = null; - } - - resetWallpaperDefault(): void { - this.wallpaper.background = ''; - } - - get windows(): DesktopWindow[] { - return this.windowManager.getAllWindows(); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.css b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.css deleted file mode 100644 index d99f8ac2b..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.css +++ /dev/null @@ -1,313 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.caption.handle { - user-select: none; - cursor: grab; - cursor: -moz-grab; - cursor: -webkit-grab; -} - -.caption.handle:active { - cursor: grabbing; - cursor: -moz-grabbing; - cursor: -webkit-grabbing; -} - -.heading.inactive { - opacity: .6; -} - -.window { - position: absolute; - box-sizing: content-box; - margin: 0; - padding: 0; - background-color: #d4d4d6; - z-index: 1; - min-width: 180px; - min-height: 90px; - -webkit-box-shadow: 0; - -moz-box-shadow: 0; - box-shadow: 0; - border-color: #d4d4d6; - border-width: 3px; - border-style: solid; - border-radius: 6px 6px 0px 0px; -} - -.window.maximized { - border-top-left-radius: 0 !important; - border-top-right-radius: 0 !important; - border-width: 0; -} - -.window.maximized .heading { - border-top-left-radius: 0 !important; - border-top-right-radius: 0 !important; -} - -.window.minimized { - display: none; -} - -.title { - text-align: center; -} - -.window .heading { - display: block; - box-sizing: border-box; - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 6px; - border-top-right-radius: 6px; - position: absolute; - width: 100%; - height: 45px; - color: #333; - background-repeat: repeat-x; - font-size: 14px; -} - -.window.active .heading { - background: #659ff9; - border-bottom: 1px solid transparent; -} - -.window.active { - -webkit-box-shadow: rgb(51,51,51) 1px 1px 8px 0px; - -moz-box-shadow: rgb(51,51,51) 1px 1px 8px 0px; - box-shadow: rgb(51,51,51) 1px 1px 8px 0px; - border-color: #659ff9; - background-color: #659ff9; -} - -.window .caption { - font-family: 'Roboto', sans-serif; - font-weight: 400; - font-size: 20px; - cursor: default; - position: absolute; - padding-left:100px; - padding-right:80px; - padding-top: 10px; - top: 0px; - left: 0px; - right: 0px; - height: 100%; - overflow: hidden; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - color: #171616; -} - -.window .body { - position: absolute; - width: 100%; - top: 45px; - bottom: 0px; - background-color: #FFFFFF; - overflow: auto; -} - -.window .border-box-sizing { - box-sizing: border-box; -} - -.minimize-button, .maximize-button, .close-button, .link-button { - margin: 0; - padding:0; - box-sizing: border-box; - position: absolute; - top: 12px; - width: 19px; - height: 19px; - background-color: transparent; - background-repeat: no-repeat; -} - -.maximize-button { - left: 73px; - background-image: url(../../../../assets/images/window/expand-inactive.png); -} - -.maximize-button.maximized { - left: 73px; - background-image: url(../../../../assets/images/window/expanded-inactive.png); -} - -.minimize-button { - left: 42px; - background-image: url(../../../../assets/images/window/minimize-inactive.png); -} - -.close-button { - left: 12px; - background-image: url(../../../../assets/images/window/close-inactive.png); -} - -.maximize-button.active:hover { - background-image: url(../../../../assets/images/window/expand-hover-active.png); -} - -.maximize-button.maximized.active:hover { - background-image: url(../../../../assets/images/window/expanded-hover-active.png); -} - -.minimize-button.active:hover { - background-image: url(../../../../assets/images/window/minimize-hover-active.png); -} - -.close-button.active:hover { - background-image: url(../../../../assets/images/window/close-hover-active.png); -} - -.maximize-button.active { - background-image: url(../../../../assets/images/window/expand-active.png); -} - -.maximize-button.maximized.active { - background-image: url(../../../../assets/images/window/expanded-active.png); -} - -.minimize-button.active { - background-image: url(../../../../assets/images/window/minimize-active.png); -} - -.close-button.active { - background-image: url(../../../../assets/images/window/close-active.png); -} - -.close-button.active:active { - background-image: url(../../../../assets/images/window/close-pressed.png); -} - -.maximize-button.active:active { - background-image: url(../../../../assets/images/window/expand-pressed.png); -} - -.maximize-button.maximized.active:active { - background-image: url(../../../../assets/images/window/expanded-pressed.png); -} - -.minimize-button.active:active { - background-image: url(../../../../assets/images/window/minimize-pressed.png); -} - -.close-button.active:active { - background-image: url(../../../../assets/images/window/close-pressed.png); -} - -.grip-n, .grip-w, .grip-s, .grip-e, .grip-nw, .grip-ne, .grip-sw, .grip-se { - display: block; - width: 14px; - height: 14px; - line-height: 14px; - position: absolute; - z-index: 1; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - background: transparent; -} - -.grip-n { - cursor: n-resize; - width: 100%; - top: 0; - left: 0; - margin-top: -14px; -} - -.grip-e { - cursor: w-resize; - height: 100%; - right: 0; - top: 0; - margin-right: -14px; -} - -.grip-s { - cursor: s-resize; - width: 100%; - bottom: 0; - left: 0; - margin-bottom: -14px; -} - -.grip-w { - cursor: e-resize; - height: 100%; - left: 0; - top: 0; - margin-left: -14px; -} - -.grip-ne { - cursor: ne-resize; - width: 14px; - height: 14px; - top: 0; - right: 0; - margin-top: -7px; - margin-right: -7px; -} - -.grip-nw { - cursor: nw-resize; - width: 14px; - height: 14px; - top: 0; - left: 0; - margin-top: -7px; - margin-left: -7px; -} - -.grip-se { - cursor: se-resize; - width: 14px; - height: 14px; - bottom: 0; - right: 0; - margin-bottom: -7px; - margin-right: -7px; -} - -.grip-sw { - cursor: sw-resize; - width: 14px; - height: 14px; - bottom: 0; - left: 0; - margin-bottom: -7px; - margin-left: -7px; -} - -.full-center { - position: absolute; - top: 50%; - left: 50%; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.html b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.html deleted file mode 100644 index 2a910e86d..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - -
- -
- - -
-
{{getTitle()}}
- -
-
-
-
- - -
- - -
- -
-
-
- - -
-
-
-
-
-
-
-
-
-
- -
-
- - - - diff --git a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.ts b/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.ts deleted file mode 100644 index 967342804..000000000 --- a/virtual-desktop-v2/src/app/window-manager/mvd-window-manager/window/window.component.ts +++ /dev/null @@ -1,239 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Injector, ElementRef, ViewChild, Input } from '@angular/core'; -import { DesktopWindow } from '../shared/desktop-window'; -import { DesktopTheme } from "../desktop/desktop.component"; -import { DesktopWindowStateType } from '../shared/desktop-window-state'; -import { WindowManagerService } from '../shared/window-manager.service'; -import { WindowPosition } from '../shared/window-position'; -import { BaseLogger } from '../../../shared/logger'; -import { Colors } from '../shared/colors'; - -const SCREEN_EDGE_BORDER = 2; - -@Component({ - selector: 'rs-com-mvd-window', - templateUrl: 'window.component.html', - styleUrls: ['window.component.css'] -}) -export class WindowComponent { - @ViewChild('windowBody') - public windowBodyRef: ElementRef; - - public color: any = {}; - public headerSize: number; - public borderSize: string; - public textSize: string; - public textPad: string; - public buttonTop: string; - public buttonSize: string; - public buttonFilter: string; - public minimizeLeft: string; - public maximizeLeft: string; - public closeLeft: string; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - public displayMinimize: boolean; - - private maxHeight: string; - private maxWidth: string; - private desktopHeight: number; - private desktopWidth: number; - private zIndex: number; - private launchbarHeight: number; - - @Input() set theme(newTheme: DesktopTheme) { - this.logger.debug('Window theme set=',newTheme); - this.color = newTheme.color; - //button left strategy: size*.6 or .66 between each element and sides - //therefore (buttonNumber*size*.6)+((buttonNumber-1)*size) - switch (newTheme.size.window) { - case 1: - this.borderSize = '1px'; - this.buttonSize = '10px'; - this.closeLeft = '6px'; - this.minimizeLeft = '22px'; - this.maximizeLeft = '39px'; - this.buttonTop = '6px'; - this.textSize = '12px'; - this.textPad = '3px'; - this.displayMinimize = true; - - // TODO: Disable minimize button once mvd-window-manager single app mode is functional. Variable subject to change. - if (window['GIZA_PLUGIN_TO_BE_LOADED']) { - this.displayMinimize = false; - this.maximizeLeft = this.minimizeLeft; - } - break; - case 3: - this.borderSize = '3px'; - this.buttonSize = '16px'; - this.closeLeft = '11px'; - this.minimizeLeft = '38px'; - this.maximizeLeft = '66px'; - this.buttonTop = '16px'; - this.textSize = '18px'; - this.textPad = '12px'; - this.displayMinimize = true; - - // TODO: Disable minimize button once mvd-window-manager single app mode is functional. Variable subject to change. - if (window['GIZA_PLUGIN_TO_BE_LOADED']) { - this.displayMinimize = false; - this.maximizeLeft = this.minimizeLeft; - } - break; - default: //Default size is medium - 2 - this.borderSize = '2px'; - this.buttonSize = '12px'; - this.closeLeft = '8px'; - this.minimizeLeft = '28px'; - this.maximizeLeft = '49px'; - this.buttonTop = '9px'; - this.textSize = '14px'; - this.textPad = '5px'; - this.displayMinimize = true; - - // TODO: Disable minimize button once mvd-window-manager single app mode is functional. Variable subject to change. - if (window['GIZA_PLUGIN_TO_BE_LOADED']) { - this.displayMinimize = false; - this.maximizeLeft = this.minimizeLeft; - } - } - switch (newTheme.color.windowTextActive) { - case Colors.COOLGREY_90: - this.buttonFilter = 'brightness(0.2)'; - break; - default: - this.buttonFilter = 'brightness(1)'; - break; - } - (WindowManagerService as any)._setTheme(newTheme); - this.headerSize = WindowManagerService.WINDOW_HEADER_HEIGHT; - }; - - MIN_WIDTH = 180; - MIN_HEIGHT = 100; - - @Input() desktopWindow: DesktopWindow; - applicationManager: MVDHosting.ApplicationManagerInterface; - - - constructor( - public windowManager: WindowManagerService, - private injector: Injector, - ) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.applicationManager = this.injector.get(MVDHosting.Tokens.ApplicationManagerToken); - } - - isMinimized(): boolean { - return this.desktopWindow.windowState.stateType === DesktopWindowStateType.Minimized; - } - - isMaximized(): boolean { - return this.desktopWindow.windowState.stateType === DesktopWindowStateType.Maximized; - } - - isNormal(): boolean { - return this.desktopWindow.windowState.stateType === DesktopWindowStateType.Normal; - } - - hasFocus(): boolean { - return this.windowManager.windowHasFocus(this.desktopWindow.windowId); - } - - positionStyle(): any { - const position = this.getPosition(); - if (document.documentElement) { - this.desktopHeight = document.documentElement.clientHeight; - this.desktopWidth = document.documentElement.clientWidth; - } - this.maxHeight = '100%'; - this.maxWidth = '100%'; - this.zIndex = this.desktopWindow.windowState.zIndex; - // In standalone app mode, our launchbar doesn't exist - this.launchbarHeight = (window.GIZA_PLUGIN_TO_BE_LOADED ? 0 : WindowManagerService.LAUNCHBAR_HEIGHT); - - /* These 4 conditionals check if a window is out of bounds by checking if a window has been - dragged too far out of view, in either of the 4 directions, and locks it from going further. */ - if (!this.desktopWindow.isFullscreenStandalone) { - if (position.top < 0) { - position.top = SCREEN_EDGE_BORDER; - } - if (position.left + position.width - this.headerSize < 0) { - position.left = -position.width + this.headerSize; - } - if ((position.top + this.headerSize) > this.desktopHeight - this.launchbarHeight) { - position.top = this.desktopHeight - this.headerSize - this.launchbarHeight; - } - if ((position.left + this.headerSize) > this.desktopWidth) { - position.left = this.desktopWidth - this.headerSize; - } - } else { - this.maxHeight = '110%'; - this.maxWidth = '102%'; - position.left = -1 - SCREEN_EDGE_BORDER; - position.top = -1 - this.headerSize - SCREEN_EDGE_BORDER; - position.width = this.desktopWidth + SCREEN_EDGE_BORDER; - position.height = this.desktopHeight + SCREEN_EDGE_BORDER; - this.zIndex = 1; // So any app2app apps don't get hidden if we click back to the main fullscreen app - } - - return { - 'top': position.top + 'px', - 'left': position.left + 'px', - 'width': position.width + 'px', - 'max-width': this.maxWidth, - 'height': (position.height + this.headerSize) + 'px', - 'max-height': this.maxHeight, - 'z-index': this.zIndex, - 'inner-height': position.height + 'px' - - }; - } - - getPosition(): WindowPosition { - return this.desktopWindow.windowState.position; - } - - getTitle(): string { - return this.desktopWindow.windowTitle; - } - - requestFocus(): void { - this.windowManager.requestWindowFocus(this.desktopWindow.windowId); - } - - maximizeToggle(): void { - this.windowManager.maximizeToggle(this.desktopWindow.windowId); - } - - minimizeToggle(): void { - this.windowManager.minimizeToggle(this.desktopWindow.windowId); - } - - close(): void { - this.windowManager.closeWindow(this.desktopWindow.windowId); - } -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple-window-manager.module.ts b/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple-window-manager.module.ts deleted file mode 100644 index fc660d430..000000000 --- a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple-window-manager.module.ts +++ /dev/null @@ -1,56 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -import { SimpleWindowManagerService } from './simple-window-manager.service'; -import { SimpleComponent } from './simple.component'; -import { ApplicationManagerModule } from '../../application-manager/application-manager.module'; -import { AuthenticationModule } from '../../authentication-manager/authentication-manager.module'; -import { ContextMenuModule } from '../../context-menu/context-menu.module'; -import { ThemeEmitterService } from '../mvd-window-manager/services/theme-emitter.service'; - -@NgModule({ - imports: [ - ApplicationManagerModule, - AuthenticationModule, - ContextMenuModule, - CommonModule, - ContextMenuModule - ], - declarations: [ - SimpleComponent - ], - exports: [ - - ], - providers: [ - ThemeEmitterService, - { provide: MVDWindowManagement.Tokens.WindowManagerToken, useClass: SimpleWindowManagerService }, - { provide: MVDHosting.Tokens.ThemeEmitterToken, useExisting: ThemeEmitterService }, - ] -}) -export class SimpleWindowManagerModule { - -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple-window-manager.service.ts b/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple-window-manager.service.ts deleted file mode 100644 index 3ce11e5b0..000000000 --- a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple-window-manager.service.ts +++ /dev/null @@ -1,178 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Injectable, Injector, EventEmitter } from '@angular/core'; -// import { DesktopPluginDefinition } from 'app/plugin-manager/shared/desktop-plugin-definition'; -import { ViewportManager } from 'app/application-manager/viewport-manager/viewport-manager.service'; -import { ContextMenuItem, Angular2InjectionTokens, Angular2PluginViewportEvents, Angular2PluginSessionEvents } from 'pluginlib/inject-resources'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { Subject } from 'rxjs'; -import { HttpClient } from '@angular/common/http'; - -@Injectable() -export class SimpleWindowManagerService implements MVDWindowManagement.WindowManagerServiceInterface { - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - private theViewportId: MVDHosting.ViewportId; - readonly windowResized: EventEmitter<{ width: number, height: number }>; - private applicationManager: MVDHosting.ApplicationManagerInterface; - private pluginDef: MVDHosting.DesktopPluginDefinition; - private authenticationManager: MVDHosting.AuthenticationManagerInterface; - - contextMenuRequested: Subject<{xPos: number, yPos: number, items: ContextMenuItem[]}>; - private autoSaveInterval : number = 300000; - public autoSaveFiles : {[key:string]:number} = {}; - public autoSaveFileAllowDelete : boolean = true; - public autoSaveDataClean : boolean = false; - - constructor( - private viewportManager: ViewportManager, - private injector: Injector, - private http: HttpClient - ) { - this.applicationManager = this.injector.get(MVDHosting.Tokens.ApplicationManagerToken); - this.authenticationManager = this.injector.get(MVDHosting.Tokens.AuthenticationManagerToken) - this.windowResized = new EventEmitter<{ width: number, height: number }>(true); - this.contextMenuRequested = new Subject(); - window.addEventListener('resize', () => this.onResize(), false); - } - - createWindow(plugin: MVDHosting.DesktopPluginDefinition): MVDWindowManagement.WindowId { - let windowId = 1; - this.pluginDef = plugin; - this.theViewportId = this.viewportManager.createViewport((viewportId: MVDHosting.ViewportId)=> { - return this.generateWindowProviders(windowId, viewportId); - }); - return windowId; - } - - createFullscreenStandaloneWindow(plugin: MVDHosting.DesktopPluginDefinition): MVDWindowManagement.WindowId { - return this.createWindow(plugin); - } - - getWindow(plugin: MVDHosting.DesktopPluginDefinition): MVDWindowManagement.WindowId | null { - return 1; - } - - /* This likely does nothing right now and that's ok since the simple window manager is quite trivial*/ - closeWindow(windowId: MVDWindowManagement.WindowId): void { - let appId = this.viewportManager.getApplicationInstanceId(this.theViewportId); - if (appId!=null) { - this.applicationManager.killApplication(this.pluginDef.getBasePlugin(), appId); - } - } - - closeAllWindows(): void { - //Doing this would leave you with nothing at all, so ignore - //Also, onLogin logic in authmgr could call this, so if behavior is ever changed keep this in mind. - //this.closeWindow(1); - } - - showWindow(windowId: MVDWindowManagement.WindowId): void { - } - - requestWindowFocus(windowId: MVDWindowManagement.WindowId): boolean { - return true; //Dummy logic to avoid interface implementation errors for simple window service - } - - getViewportId(windowId: MVDWindowManagement.WindowId): MVDHosting.ViewportId { - return this.theViewportId; - } - - spawnContextMenu(windowId: MVDWindowManagement.WindowId, xRelative: number, yRelative: number, items: ContextMenuItem[]): boolean { - this.contextMenuRequested.next({xPos: xRelative, yPos: yRelative, items: items}); - return true; - } - - private generateWindowProviders(windowId: MVDWindowManagement.WindowId, viewportId: MVDHosting.ViewportId): Map { - const providers: Map = new Map(); - providers.set(Angular2InjectionTokens.VIEWPORT_EVENTS, this.generateViewportEventsProvider(windowId, viewportId)); - providers.set(Angular2InjectionTokens.SESSION_EVENTS, this.generateSessionEventsProvider()); - - return providers; - } - - public launchDesktopAutoSavedApplications(){ - return 1; - } - - private savePluginData(plugin:ZLUX.Plugin,data:any){ - let pathToSave : any = 'pluginData' + '/' + 'singleApp' - let fileNameToSave : string = plugin.getIdentifier() - if(this.autoSaveFiles[fileNameToSave] !== undefined){ - this.http.put(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(),pathToSave,fileNameToSave+'&lastmod='+this.autoSaveFiles[fileNameToSave]), data).subscribe(res => { - this.autoSaveFiles[fileNameToSave] = res.maccessms - this.logger.info('Saved data for plugin:',plugin.getIdentifier()) - }) - }else{ - this.http.put(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(),pathToSave,fileNameToSave), data).subscribe(res => { - this.autoSaveFiles[fileNameToSave] = res.maccessms - this.logger.info('Saved data for plugin:',plugin.getIdentifier()) - }) - } - }; - - private generateSessionEventsProvider(): Angular2PluginSessionEvents { - const loginSubject = new Subject(); - const sessionExpireSubject = new Subject(); - const autosaveEmitter = new Subject(); - this.authenticationManager.loginScreenVisibilityChanged.subscribe((eventReason: MVDHosting.LoginScreenChangeReason) => { - switch (eventReason) { - case MVDHosting.LoginScreenChangeReason.UserLogin: - loginSubject.next(); - break; - case MVDHosting.LoginScreenChangeReason.SessionExpired: - sessionExpireSubject.next(); - break; - default: - } - }); - let plugin: ZLUX.Plugin = this.pluginDef.getBasePlugin(); - if (plugin) { - setInterval(()=> { - autosaveEmitter.next((data:any)=> { - this.savePluginData(plugin,data) - }); - },this.autoSaveInterval); - } - return { - login: loginSubject, - sessionExpire: sessionExpireSubject, - autosaveEmitter: autosaveEmitter - }; - } - - private generateViewportEventsProvider(windowId: MVDWindowManagement.WindowId, viewportId: MVDHosting.ViewportId): Angular2PluginViewportEvents { - return { - resized: this.windowResized, - spawnContextMenu: (xRel, yRel, items) => this.spawnContextMenu(windowId, xRel, yRel, items), - registerCloseHandler: (handler: ()=>Promise) => this.viewportManager.registerViewportCloseHandler(viewportId, handler) - }; - } - - private onResize() { - const wh = { width: document.body.clientWidth, height: document.body.clientHeight }; - //this.logger.debug('onresize', JSON.stringify(wh)); - this.windowResized.emit(wh); - } - -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.css b/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.css deleted file mode 100644 index 72c87385d..000000000 --- a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.css +++ /dev/null @@ -1,23 +0,0 @@ - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ -.degenerate-container { - height: 100%; -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ diff --git a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.html b/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.html deleted file mode 100644 index 849289707..000000000 --- a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - -
-

- {{error}} -

- - - - - - - -
- -
-
-
- - -
- -
-
-
- - diff --git a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.ts b/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.ts deleted file mode 100644 index 2c3ee652f..000000000 --- a/virtual-desktop-v2/src/app/window-manager/simple-window-manager/simple.component.ts +++ /dev/null @@ -1,126 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -import { Component, Injector, OnInit } from '@angular/core'; -import { ApplicationManager } from "app/application-manager/application-manager.service"; -import { PluginManager } from "app/plugin-manager/shared/plugin-manager"; -import { DesktopPluginDefinitionImpl } from "app/plugin-manager/shared/desktop-plugin-definition"; -import { SimpleWindowManagerService } from "./simple-window-manager.service"; -import { ContextMenuItem } from 'pluginlib/inject-resources'; -import { BaseLogger } from 'virtual-desktop-logger'; -import { HttpClient } from '@angular/common/http'; - -@Component({ - selector: 'rs-com-root', - templateUrl: './simple.component.html', - styleUrls: ['./simple.component.css'], -}) -export class SimpleComponent implements OnInit { - contextMenuDef: {xPos: number, yPos: number, items: ContextMenuItem[]} | null; - private readonly logger: ZLUX.ComponentLogger = BaseLogger; - viewportId: MVDHosting.ViewportId; - private windowManager: SimpleWindowManagerService; - public showLogin:boolean = window.ZOWE_SWM_SHOW_LOGIN == true ? true : false; - public error:string=''; - - constructor( - private applicationManager: ApplicationManager, - private pluginManager: PluginManager, - private injector: Injector, - private HTTP:HttpClient - ) { - // Workaround for AoT problem with namespaces (see angular/angular#15613) - this.windowManager = this.injector.get(MVDWindowManagement.Tokens.WindowManagerToken); - } - - closeContextMenu(): void { - this.contextMenuDef = null; - } - - ngOnInit(): void { - this.windowManager.contextMenuRequested.subscribe(menuDef => { - this.contextMenuDef = menuDef; - }); - - let requestedPluginID: string | undefined = window['GIZA_PLUGIN_TO_BE_LOADED']; - - if (!requestedPluginID) { - let message = "Plugin ID required. Use query parameter ?pluginId"; - this.logger.severe("ZWED5143E"); //this.logger.severe(message); - this.error = message; - return; - } - - const pluginID: string = requestedPluginID; - const pluginPromise: Promise = this.pluginManager.findPluginDefinition(pluginID); - - pluginPromise.then(plugin => { - if (plugin) { - let pluginImpl = (plugin as DesktopPluginDefinitionImpl); - document.title = pluginImpl.label ? pluginImpl.label : "Zowe App" - let imageUrl = pluginImpl.image; - if (imageUrl) { - let link: any = document.querySelector("link[rel*='icon']") || document.createElement('link'); - link.type = 'image/x-icon'; - link.rel = 'shortcut icon'; - link.href = imageUrl; - document.getElementsByTagName('head')[0].appendChild(link); - } - const launchMetadata : {[key: string]: any}= { - singleAppMode: true, - arguments: this.parseUriArguments() - }; - this.HTTP.get(ZoweZLUX.uriBroker.pluginConfigUri(ZoweZLUX.pluginManager.getDesktopPlugin(),'pluginData/singleApp',plugin.getIdentifier())).subscribe(res => { - if(res){ - launchMetadata["data"] = {"appData" : res.contents.appData,"type":"setAppRequest","actionType":"Launch","targetMode":"PluginCreate"} - } - this.applicationManager.spawnApplication(plugin as DesktopPluginDefinitionImpl, launchMetadata); - this.viewportId = this.windowManager.getViewportId(1); - }); - } else { - let message = "Cannot find plugin with ID="+pluginID; - this.logger.severe("ZWED5144E", pluginID); //this.logger.severe(message); - this.error = message; - } - }).catch((x) => { - let message = "Plugin promise not returned, cannot continue"; - this.logger.severe("ZWED5145E"); //this.logger.severe(message); - this.error = message; - return; - }); - } - - parseUriArguments(): any { - // FIXME: Code duplication with bootstrap. Should be fixed by introducing - // of routing (MVD-1535) - const result: { [id: string]: any } = {}; - - const queryString: string = location.search.substr(1); - queryString.split('&').forEach(function(part) { - const pair = part.split('=').map(x => decodeURIComponent(x)); - result[pair[0]] = pair[1]; - }); - - return result; - } -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/assets/css/animate.css b/virtual-desktop-v2/src/assets/css/animate.css deleted file mode 100644 index b8de1e254..000000000 --- a/virtual-desktop-v2/src/assets/css/animate.css +++ /dev/null @@ -1,35 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -.ng-enter, .ng-leave { - transition: all ease 0.5s; -} - -.ng-enter, .ng-leave.ng-leave-active { - opacity: 0; -} - -.ng-leave, .ng-enter.ng-enter-active { - opacity: 1; -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/assets/css/desktop.css b/virtual-desktop-v2/src/assets/css/desktop.css deleted file mode 100644 index 242c56915..000000000 --- a/virtual-desktop-v2/src/assets/css/desktop.css +++ /dev/null @@ -1,56 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -html { - width: 100%; - height: 100%; -} - -body { - font-family: 'Roboto', sans-serif; - font-size: 14px; - line-height: 1.42857143; - width:100%; - height:100%; -} - -.desktop { - box-sizing: border-box; - position: absolute; - cursor: default; - overflow: hidden; - width: 100%; - height: 100%; -} - -/* Force the scroll bar to be show in webkit browser (Mac hides by default) */ -::-webkit-scrollbar { - -webkit-appearance: none; - width: 8px; - height: 8px; -} -::-webkit-scrollbar-thumb { - border-radius: 4px; - background-color: rgba(0,0,0,.35); - -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5); -} - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/assets/i18n/log/messages_en.json b/virtual-desktop-v2/src/assets/i18n/log/messages_en.json deleted file mode 100644 index 6bcb7cfde..000000000 --- a/virtual-desktop-v2/src/assets/i18n/log/messages_en.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "4":"Desktop Resource File", - "ZWED5044I":"Closing and removing viewport ID=%s", - "ZWED5045I":"Renewing session", - "ZWED5046I":"Session renewal successful", - "ZWED5047I":"Near session expiration, but renewing session due to activity", - "ZWED5048I":"Near session expiration. No activity detected, prompting to renew session", - "ZWED5049I":"Set preference %s to %s at uri %s", - "ZWED5050I":"RESERVED: Setting ZoweZLUX.globalization to an implementation specific to com.rs.mvd.ng2desktop", - "ZWED5051I":"Registering component factory for plugin=%s:", - "ZWED5052I":"Loading Angular Plugin ID=%s, URL=%s", - "ZWED5053I":"Loading iframe, URI=%s", - "ZWED5054I":"IFrame component factories currently unsupported. Skipping for plugin ID=%s", - "ZWED5055I":"Loaded %d recognizers for App(%s)", - "ZWED5056I":"Loaded %d actions for App(%s)", - "ZWED5057I":"Iframe loaded: %s, instance=%s", - "ZWED5058I":"Received Session Expired from storage", - "ZWED5059I":"Received Session Logout from storage", - "ZWED5060I":"Logout on storage Event: %s", - "ZWED5061I":"Clear Storage on Logout", - "ZWED5062I":"Update Session Event in storage", - "ZWED5063I":"Received Session Event from storage: %s", - "ZWED5292I":"PostMessage for instance=", - "ZWED5293I":"iframe postMessage failed, no iframe found for %s, id=%s", - "ZWED5294I":"iframeID found = ", - "ZWED5295I":"appMgr spawning plugin ID=%s, compiled.initialComponent=", - "ZWED5296I":"setEmbeddedInstanceInput '%s' to value '%s'", - "ZWED5297I":"getEmbeddedInstanceOutput '%s'", - "ZWED5298I":"Done performing post-login actions", - "ZWED5299I":"LoginAction %s=%s", - "ZWED5300I":"LogoutAction %s=%s", - "ZWED5301I":"Session expirations=", - "ZWED5302I":"Set session timeout watcher to notify %dms before expiration", - "ZWED5303I":"Done performing post-login actions", - "ZWED5304I":"User lastActive=%s, now=%s, idle=%s", - "ZWED5305I":"User activity detected", - "ZWED5306I":"", - "ZWED5307I":"iframe startingPage ", - "ZWED5308I":"iframe startingPageUri ", - "ZWED5310I":"RESERVED: Simple container requested with pluginId %s", - "ZWED5311I":"NOT USED", - "ZWED5313I":"Attempting to set language to %s", - "ZWED5314I":"Instantiating into DOM=", - "ZWED5315I":"Could not instantiate into DOM,", - "ZWED5316I":"setLanguage, arg=", - "ZWED5317I":"setLocale, arg=", - "ZWED5318I":"Reducing width from %s to %s based on nextLeft %s and innerWidth %s", - "ZWED5319I":"Reducing height from %s to %s based on nextTop %s and innerHeight %s", - "ZWED5320I":"Window-pane-component wMgr=", - "ZWED5321I":"App framework initializing. User agent=%s", - "ZWED5322I":"ngOnChanges=", - "ZWED5323I":"iframe postMessage failed, second iframe not found for %s, id=%s", - - "ZWED5021W":"App callbacks not registered. Couldn't find instance object or object didn't provide callbacks. App ID=%s, Instance Obj=", - "ZWED5022W":"Session will expire soon! Logout will occur in %d seconds", - "ZWED5160W":"Not yet implemented: showapplicationinstancewindow", - "ZWED5161W":"Attempting to replace an existing viewport id=%s in registration", - "ZWED5162W":"Session timeout reached. Clearing desktop for new login", - "ZWED5163W":"Session renewal unsuccessful", - "ZWED5164W":"No component definition for plugin %s", - "ZWED5165W":"No VIEWPORT_EVENTS provided to custom viewport. This may cause plugins to behave unexpectedly", - "ZWED5166W":"No PLUGIN_EMBED_ACTIONS provided to custom viewport. This may cause plugins to behave unexpectedly", - "ZWED5167W":"Attempted to clean up undefined component", - "ZWED5168W":"Ignoring unknown login screen change reason=%s", - "ZWED5169W":"RESERVED: no locale data found for locale id %s", - "ZWED5170W":"Failed to load language file %s, using %s", - "ZWED5171W":"Failed to load language file %s, using no translation files", - "ZWED5172W":"Unable to parse plugin definition. Error: ", - "ZWED5173W":"No component definition for plugin %s", - "ZWED5174W":"Plugin %s has no framework specified", - "ZWED5175W":"%s does not use supported framework", - "ZWED5176W":"%s does not use supported framework", - "ZWED5177W":"setLanguage error=", - "ZWED5178W":"Bad Plugin Definition for plugin=", - "ZWED5179W":"Could not update pinned plugins, err=", - "ZWED5180W":"Bad Plugin Definition for plugin=", - "ZWED5181W":"Attempted to close null window, ID=%s", - "ZWED5182W":"Window could not be closed because of viewport. Details=", - "ZWED5183W":"windowActions.registerCloseHandler is deprecated. Please use viewportEvents.registerCloseHandler instead", - "ZWED5184W":"Attempted to register close handler for null window, ID=%s", - "ZWED5185W":"Attempted to set window title for null window, ID=%s", - "ZWED5186W":"Attempted to set window title for null window, ID=%s", - "ZWED5187W":"Attempted to request focus for null window, ID=%s", - "ZWED5189W":"No iframe identified as source of message", - "ZWED5190W":"Component ref requested before module ref available", - "ZWED5191W":"Overwriting existing component ref for window", - "ZWED5192E":"RESERVED: Attempted to spawn context menu for null window", - "ZWED5193W":"Plugin not found for identifier %s specified in app2app query URL parameter", - "ZWED5194W":"Action Type(%s) specified in app2app query URL parameter is invalid", - "ZWED5195W":"Action Mode(%s) specified in app2app query URL parameter is invalid", - "ZWED5196W":"Context Data(%s) specified in app2app query URL parameter is not valid JSON", - "ZWED5197W":"Unable to find registered action for identifier %s specified in app2app query URL parameter", - "ZWED5198W":"Attempted to close standalone mode app window, ID=%s", - "ZWED5199W":"Attempted to postMessage for type %s without source", - - "ZWED5143E":"Plugin ID required. Use query parameter ?pluginId", - "ZWED5144E":"Cannot find plugin with ID=%s", - "ZWED5145E":"Plugin promise not returned, cannot continue", - "ZWED5146E":"RESERVED: Unknown plugin in launch handler %s", - "ZWED5147E":"RESERVED: Unknown viewport when requesting component generation", - "ZWED5148E":"RESERVED: No Session Found", - "ZWED5149E":"Logout failed! Error=", - "ZWED5150E":"RESERVED: Plugin does not have a main component to generate", - "ZWED5151E":"Unable to parse context menu items. Error: ", - "ZWED5152E":"RESERVED: All plugin factories for framework type %s failed", - "ZWED5153E":"RESERVED: All plugin factories for framework type %s failed", - "ZWED5154E":"RESERVED: No matching plugin definition found", - "ZWED5155E":"RESERVED: Attempted to retrieve viewport id of null window", - "ZWED5156E":"RESERVED: Attempted to get window events for null window", - "ZWED5157E":"RESERVED: Attempted to maximize null window", - "ZWED5158E":"RESERVED: Attempted to minimize null window", - "ZWED5159E":"RESERVED: Attempted to restore null window", - "ZWED5160E":"RESERVED: Attempted to set position for null window", - "ZWED5161E":"RESERVED: Attempted to maximize toggle null window", - "ZWED5162E":"RESERVED: Attempted to minimize toggle null window", - "ZWED5163E":"RESERVED: Attempted to spawn context menu for null window" -} \ No newline at end of file diff --git a/virtual-desktop-v2/src/assets/i18n/messages.de.json b/virtual-desktop-v2/src/assets/i18n/messages.de.json deleted file mode 100644 index c1d6546df..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.de.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "Account Password": "Konto Passwort", - "Apply": "Hinzufügen", - "AuthenticationFailed": "Authentifizierung für {{numTypes}} Arten fehlgeschlagen. Arten sind: {{types}}", - "Back": "Zurück", - "BringToFront": "In den Vordergrund holen", - "Change Password": "Passwort ändern", - "Chinese": "Chinesisch", - "Click here to renew your session.": "Hier klicken, um Sitzung zu erneuern.", - "Close All": "Alles Schließen", - "Close": "Schließen", - "Color": "Farbe", - "Continue": "Fortfahren", - "Dismiss": "Verwerfen", - "Drag wallpaper here or": "Hintergrundbild hierher ziehen oder...", - "English": "Englisch", - "For language changes to take effect, Zowe must be restarted.": "Damit die Änderung der Sprache übernommen wird, ist ein Neustart von Zowe erforderlich.", - "French": "Französisch", - "German": "Deutsch", - "Incorrect password or account is locked. Please contact your administrator.": "Falsches Passwort oder falsches Konto ist gesperrt. Bitte wenden Sie sich an Ihren Administrator.", - "Japanese": "Japanisch", - "Language Changes": "Sprache ändern", - "Language Selected": "Ausgewählte Sprache", - "Languages": "Sprachen", - "Multiple password reset is not available.": "Das Zurücksetzen mehrerer Passwörter ist nicht verfügbar.", - "New passwords do not match. Please try again.": "Neue Passwörter stimmen nicht überein. Bitte versuche es erneut.", - "No new password provided": "Kein neues Passwort angegeben.", - "No Notifications": "Keine Benachrichtigung", - "No password provided": "Kein Passwort angegeben", - "No password reset service available.": "Kein Dienst zum Zurücksetzen des Passworts verfügbar.", - "No username provided": "Kein Benutzername angegeben", - "Open New": "Neu Öffnen", - "Open": "Öffnen", - "Open in New Browser Tab": "In neuem Browser Tab öffnen", - "or hue.": "oder Färbung", - "PasswordExpired": "Passwort Abgelaufen: Bitte geben Sie ein neues Passwort ein", - "PasswordChanged": "Passwort wurde erfolgreich geändert", - "Personalization": "Personalisierung", - "PinToTaskbar": "Anwendung anheften", - "Properties": "Eigenschaften", - "Refresh Applications": "Applikationen neu laden", - "Reset to default": "Auf Standard zurücksetzen", - "Restart Later": "Später neu starten", - "Restart Now": "Jetzt neu starten", - "Retry": "Wiederholen", - "Russian": "Russisch", - "SavePassword": "Speichern und zum Desktop zurückkehren", - "Search": "Suchen", - "Select": "Auswählen", - "Select color": "Farbe auswählen", - "Select lightness.": "Helligkeit auswählen", - "Session could not be renewed. Logout will occur unless renewed. Click here to retry.": "Sitzung konnte nicht erneuert werden. Abmeldung erfolgt, falls Sitzung nicht erneuert wird. Hier clicken, um zu wiederholen.", - "Session Expired": "Sitzung abgelaufen", - "Session Expiring Soon": "Sitzung läuft bald ab", - "Session Renewal Error": "Fehler beim Erneuern der Sitzung", - "Session will expire unless renewed.": "Sitzung wird in {{expirationInMS}} Sekunden ablaufen, falls nicht erneuert.", - "Size": "Größe", - "The new password format is incorrect. Please try again.": "Das neue Passwortformat ist falsch. Bitte versuche es erneut.", - "Upload": "hochladen.", - "Username or password is incorrect. Please try again.": "Benutzername oder Passwort ist falsch. Bitte versuche es erneut.", - "UsernameRequired": "Benutzername erforderlich", - "Wallpaper": "Hintergrund", - "Would you like to restart the desktop?": "Möchten Sie den Desktop neu starten?", - "UnpinFromTaskbar": "Anwendung von Taskbar lösen" -} diff --git a/virtual-desktop-v2/src/assets/i18n/messages.de.xlf b/virtual-desktop-v2/src/assets/i18n/messages.de.xlf deleted file mode 100644 index bc660aec9..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.de.xlf +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - The plugin failed to loadDas Plugin konnte nicht geladen werden. - - src/app/application-manager/load-failure/load-failure.component.ts - 14 - - Message when plugin failed to load - message - - UsernameBenutzername - - src/app/authentication-manager/login/login.component.ts - 22 - - Label for username - label - - - PasswordPasswort - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for password - label - - - New PasswordNeues Kennwort - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for new password - label - - - Confirm New PasswordBestätige Neues Passwort - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for confirm new password - label - - - Log inAnmelden - - src/app/authentication-manager/login/login.component.ts - 37 - - Title of Login button - button title - - - Log outAbmelden - - Title of Sign out button - signout button - src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts28 - - - diff --git a/virtual-desktop-v2/src/assets/i18n/messages.en.json b/virtual-desktop-v2/src/assets/i18n/messages.en.json deleted file mode 100644 index dc04b1c43..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.en.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "Account Password": "Account Password", - "Apply": "Apply", - "AuthenticationFailed": "Authentication failed for {{numTypes}} types. Types: {{types}}", - "Back": "Back", - "BringToFront": "Bring to Front", - "Change Password": "Change Password", - "Chinese": "Chinese", - "Click here to renew your session.": "Click here to renew your session.", - "Close All": "Close All", - "Close": "Close", - "Color": "Color", - "Continue": "Continue", - "Dismiss": "Dismiss", - "Drag wallpaper here or": "Drag below or", - "English": "English", - "For language changes to take effect, Zowe must be restarted.": "For language changes to take effect, Zowe must be restarted.", - "French": "French", - "German": "German", - "Incorrect password or account is locked. Please contact your administrator.": "Incorrect password or account is locked. Please contact your administrator.", - "Japanese": "Japanese", - "Language Changes": "Language Changes", - "Language Selected": "Language Selected", - "Languages": "Languages", - "Multiple password reset is not available.": "Multiple password reset is not available.", - "New passwords do not match. Please try again.": "New passwords do not match. Please try again.", - "No new password provided": "No new password provided.", - "No Notifications": "No Notifications", - "No password provided": "No password provided", - "No password reset service available.": "No password reset service available.", - "No username provided": "No username provided", - "Open New": "Open New", - "Open": "Open", - "Open in New Browser Tab": "Open In New Browser Tab", - "or hue.": "or hue.", - "PasswordExpired": "Password Expired: Please enter a new password", - "PasswordChanged": "Password was successfullly changed", - "Personalization": "Personalization", - "PinToTaskbar":"Pin to taskbar", - "Properties":"Properties", - "Reset to default": "Reset to default", - "Restart Later": "Restart Later", - "Restart Now": "Restart Now", - "Retry": "Retry", - "Russian": "Russian", - "SavePassword": "Save and return to desktop", - "Select": "Select", - "Select color": "Select color", - "Select lightness.": "Select lightness.", - "Session could not be renewed. Logout will occur unless renewed. Click here to retry.": "Session could not be renewed. Logout will occur unless renewed. Click here to retry.", - "Session Expired": "Session Expired", - "Session Expiring Soon": "Session Expiring Soon", - "Session Renewal Error": "Session Renewal Error", - "Session will expire unless renewed.": "Session will expire in {{expirationInMS}} seconds unless renewed.", - "Size": "Size", - "The new password format is incorrect. Please try again.": "The new password format is incorrect. Please try again.", - "Upload": "upload.", - "Username or password is incorrect. Please try again.": "Username or password is incorrect. Please try again.", - "UnpinFromTaskbar": "Unpin from taskbar", - "UsernameRequired": "Username required", - "Wallpaper": "Wallpaper", - "Would you like to restart the desktop?": "Would you like to restart the desktop?" -} diff --git a/virtual-desktop-v2/src/assets/i18n/messages.fr.json b/virtual-desktop-v2/src/assets/i18n/messages.fr.json deleted file mode 100644 index f1421109c..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.fr.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "Account Password": "Mot de passe du compte", - "Apply": "Appliquer", - "AuthenticationFailed": "L'authentification a échoué pour {{numTypes}} types. Les types: {{types}}", - "Back": "Retourner", - "BringToFront": "Mettre au premier plan", - "Change Password": "Changer de mot de Passe", - "Chinese": "Chinois", - "Click here to renew your session.": "Cliquez ici pour renouveler votre session.", - "Close All": "Fermer toutes les instances", - "Close": "Fermer", - "Color": "Couleur", - "Continue": "Continuer", - "Dismiss": "Ignorer", - "Drag wallpaper here or": "Déposez le fond d'écran ici, ou", - "English": "Anglais", - "For language changes to take effect, Zowe must be restarted.": "Pour que le changement de langue prenne effet, Zowe doit être redémarré.", - "French": "Français", - "German": "Allemand", - "Incorrect password or account is locked. Please contact your administrator.": "Un mot de passe ou un compte incorrect est verrouillé. Veuillez contacter votre administrateur.", - "Japanese": "Japonais", - "Language Changes": "Changement de Langue", - "Language Selected": "Langue Sélectionnée", - "Languages": "Langues", - "Multiple password reset is not available.": "La réinitialisation de plusieurs mots de passe n'est pas disponible.", - "New passwords do not match. Please try again.": "Les nouveaux mots de passe ne correspondent pas. Veuillez réessayer.", - "No new password provided": "Aucun nouveau mot de passe fourni.", - "No Notifications": "Aucune notification", - "No password provided": "Aucun mot de passe fourni", - "No password reset service available.": "Aucun service de réinitialisation de mot de passe disponible.", - "No username provided": "Aucun nom d'utilisateur fourni", - "Open New": "Nouvelle Fenêtre", - "Open": "Ouvrir", - "Open in New Browser Tab": "Ouvrir dans un nouvel onglet", - "or hue.": "ou la teinte", - "PasswordExpired": "Mot de passe expiré: Veuillez saisir un nouveau mot de passe", - "PasswordChanged": "Le mot de passe a été changé avec succès", - "Personalization": "Personnalisation", - "PinToTaskbar": "Épingler", - "Properties":"Propriétés", - "Refresh Applications": "Actualiser les applications", - "Reset to default": "Rétablir les valeurs par défaut", - "Restart Later": "Redémarrer Plus Tard", - "Restart Now": "Redémarrer Maintenant", - "Retry": "Réessayer", - "Russian": "Russe", - "SavePassword": "Enregistrer et revenir au bureau", - "Search": "Chercher", - "Select": "Sélectionner", - "Select color": "Choisissez la couleur", - "Select lightness.": "Sélectionnez l'intensité", - "Session could not be renewed. Logout will occur unless renewed. Click here to retry.": "La session n'a pas pu être renouvelée. Cliquez ici pour réessayer.", - "Session Expired": "La session a expiré", - "Session Expiring Soon": "Votre session va bientôt expirer", - "Session Renewal Error": "Erreur de renouvellement de session", - "Session will expire unless renewed.": "Votre session va expirer dans {{expirationInMS}} secondes sauf si elle est renouvelée.", - "Size": "Taille", - "The new password format is incorrect. Please try again.": "Le nouveau format de mot de passe est incorrect. Veuillez réessayer.", - "Upload": "Télécharger", - "Username or password is incorrect. Please try again.": "L'identifiant ou le mot de passe est incorrect. Veuillez réessayer.", - "UsernameRequired": "Nom d'utilisateur requis", - "Wallpaper": "Fond d'écran", - "Would you like to restart the desktop?": "Voulez-vous redémarrer votre session?", - "UnpinFromTaskbar": "Désépingler" -} diff --git a/virtual-desktop-v2/src/assets/i18n/messages.fr.xlf b/virtual-desktop-v2/src/assets/i18n/messages.fr.xlf deleted file mode 100644 index a58ac728b..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.fr.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - The plugin failed to loadLe plugin n'a pas pu être chargé - - src/app/application-manager/load-failure/load-failure.component.ts - 14 - - Message when plugin failed to load - message - - ofof - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 40 - - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 56 - - of preposition in clause n-m of total - - UsernameNom d'utilisateur - - src/app/authentication-manager/login/login.component.ts - 22 - - Label for username - label - - - PasswordMot de Passe - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for password - label - - - New PasswordNouveau Mot de Passe - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for new password - label - - - Confirm New PasswordConfirmer le Nouveau Mot de Passe - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for confirm new password - label - - - Log inMe connecter - - src/app/authentication-manager/login/login.component.ts - 37 - - Title of Login button - button title - - - Log outDéconnexion - - Title of Sign out button - signout button - src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts14 - - - diff --git a/virtual-desktop-v2/src/assets/i18n/messages.ja.json b/virtual-desktop-v2/src/assets/i18n/messages.ja.json deleted file mode 100644 index c0033ae24..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.ja.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "Account Password": "アカウントパスワード", - "Apply": "適用", - "AuthenticationFailed": "{{numTypes}}個の認証プロバイダー({{types}})に対して認証が失敗しました", - "Back": "戻る", - "BringToFront": "最前面に移動", - "Change Password": "パスワードを変更する", - "Chinese": "中国語", - "Click here to renew your session.": "セッションを更新するにはここをクリックしてください。", - "Close All": "すべて閉じる", - "Close": "閉じる", - "Color": "色", - "Continue": "続行", - "Dismiss": "閉じる", - "Drag wallpaper here or": "壁紙をここにドラッグ、または", - "English": "英語", - "For language changes to take effect, Zowe must be restarted.": "言語の変更を反映するには、Zoweを再起動する必要があります。", - "French": "フランス語", - "German": "ドイツ語", - "Incorrect password or account is locked. Please contact your administrator.": "パスワードが間違っているか、アカウントがロックされているため、ログインに失敗しました。 管理者に連絡してください。", - "Japanese": "日本語", - "Language Changes": "言語変更", - "Language Selected": "選択された言語", - "Languages": "言語", - "Multiple password reset is not available.": "複数のパスワードをリセットできません。", - "New passwords do not match. Please try again.": "新しいパスワードが一致しません。 もう一度やり直してください。", - "No new password provided": "パスワードがありません。", - "No Notifications": "通知なし", - "No password provided": "パスワードが提供されていません", - "No password reset service available.": "パスワードリセットのサービスがありません。", - "No username provided": "ユーザー名がありません。", - "Open New": "新しく開く", - "Open": "開く", - "Open in New Browser Tab": "新しいブラウザー・タブで開く", - "or hue.": "色合い", - "PasswordExpired": "パスワードの期限切れ:新しいパスワードを入力してください", - "PasswordChanged": "パスワードが変更されました", - "Personalization": "カスタマイズ", - "PinToTaskbar": "アプリケーションをピン留めする", - "Refresh applications": "アプリケーションを再ロード", - "Properties":"プロパティー", - "Reset to default": "デフォルト値に戻す", - "Refresh Applications": "アプリケーションを再ロード", - "Restart Later": "後で再起動", - "Restart Now": "今すぐ再起動", - "Retry": "再試行", - "Russian": "ロシア語", - "SavePassword": "保存してデスクトップに戻る", - "Search": "検索", - "Select": "選択", - "Select color": "色の選択", - "Select lightness.": "明るさの選択", - "Session could not be renewed. Logout will occur unless renewed. Click here to retry.": "セッションを更新できませんでした。更新しないとログアウトされます。再試行するにはここをクリックしてください。", - "Session Expired": "セッションの期限が切れました。", - "Session Expiring Soon": "セッションの期限がもうすぐ切れます。", - "Session Renewal Error": "セッション更新エラー。", - "Session will expire unless renewed.": "セッションを更新しないと {{expirationInMS}} 秒で切れます。", - "Size": "サイズ", - "The new password format is incorrect. Please try again.": "新しいパスワードの形式が正しくありません。もう一度やり直してください。", - "Upload": "アップロード", - "Username or password is incorrect. Please try again.": "ユーザー名かパスワードが間違っています。もう一度やり直してください。", - "UsernameRequired": "ユーザー名が必要です", - "UnpinFromTaskbar": "アプリケーションのピン留めをはずす", - "Wallpaper": "背景", - "Would you like to restart the desktop?": "デスクトップを再起動しますか?" -} diff --git a/virtual-desktop-v2/src/assets/i18n/messages.ja.xlf b/virtual-desktop-v2/src/assets/i18n/messages.ja.xlf deleted file mode 100644 index e3d9e2efb..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.ja.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - The plugin failed to loadプラグインが読み込めませんでした - - src/app/application-manager/load-failure/load-failure.component.ts - 14 - - Message when plugin failed to load - message - - ofof - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 40 - - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 56 - - of preposition in clause n-m of total - - Usernameユーザー名 - - src/app/authentication-manager/login/login.component.ts - 22 - - Label for username - label - - - Passwordパスワード - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for password - label - - - New Password新しいパスワード - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for new password - label - - - Confirm New Password新しいパスワードを確認 - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for confirm new password - label - - - Log inログイン - - src/app/authentication-manager/login/login.component.ts - 37 - - Title of Login button - button title - - - Log outログアウト - - Title of Sign out button - signout button - src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts14 - - - diff --git a/virtual-desktop-v2/src/assets/i18n/messages.ru.json b/virtual-desktop-v2/src/assets/i18n/messages.ru.json deleted file mode 100644 index fb11612dc..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.ru.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "Account Password": "Пароль от аккаунта", - "Apply": "Применить", - "AuthenticationFailed": "Ошибка аутентификации {{numTypes}} для {{types}}", - "Back": "Назад", - "BringToFront": "На передний план", - "Change Password": "Изменить пароль", - "Chinese": "Китайский", - "Click here to renew your session.": "Нажмите сюда чтобы возобновить сессию.", - "Close All": "Закрыть все", - "Close": "Закрыть", - "Color": "Цвет", - "Continue": "Продолжать", - "Dismiss": "Отклонить", - "Drag wallpaper here or": "Прекрипити фон или", - "English": "Английский", - "For language changes to take effect, Zowe must be restarted.": "Чтобы изменить язык, необходимо перезагрузить Zowe.", - "French": "Французский", - "German": "Немецкий", - "Incorrect password or account is locked. Please contact your administrator.": "Неверный пароль или аккаунт заблокирован. Пожалуйста, свяжитесь с вашим администратором.", - "Japanese": "Японский", - "Language Changes": "Смена языка", - "Language Selected": "Выбранный язык", - "Languages": "Языки", - "Multiple password reset is not available.": "Многократный сброс пароля недоступен.", - "New passwords do not match. Please try again.": "Новый пароль и его подтверждение не совпадают. Пожалуйста, попробуйте еще раз", - "No new password provided": "Новый пароль не указан.", - "No Notifications": "Нет Уведомлений", - "No password provided": "Пароль не указан", - "No password reset service available.": "Служба сброса пароля недоступна.", - "No username provided": "Имя пользователя не указано", - "Open New": "Открыть новое окно", - "Open": "Открыть", - "Open in New Browser Tab": "Открыть в новой вкладке браузера", - "or hue.": "или оттенок.", - "PasswordExpired": "Срок действия пароля истек: пожалуйста, введите новый пароль", - "PasswordChanged": "Пароль был успешно изменен", - "Personalization": "Персонализация", - "PinToTaskbar": "Закрепить", - "Properties": "Свойства", - "Reset to default": "Восстановить по умолчанию", - "Refresh Applications": "Обновить приложения", - "Restart Later": "Перезагрузить позже", - "Restart Now": "Перезагрузить сейчас", - "Retry": "Повторить", - "Russian": "Русский", - "SavePassword": "Сохранить и вернуться на рабочий стол", - "Search": "Поиск", - "Select": "Выбрать", - "Select color": "Выбрать цвет", - "Select lightness.": "Выбрать легкость.", - "Session could not be renewed. Logout will occur unless renewed. Click here to retry.": "Сессия не смогла быть продлена. Произойдет выход если нет продления. Нажмите сюда чтобы повторить попытку.", - "Session Expired": "Сессия истекла", - "Session Expiring Soon": "Сессия скоро истекает", - "Session Renewal Error": "Ошибка обновления сессии", - "Session will expire unless renewed.": "Сессия истекает через {{expirationInMS}} секунд если не обновлено.", - "Size": "Размер", - "The new password format is incorrect. Please try again.": "Новый пароль имеет неверный формат. Пожалуйста, попробуйте еще раз", - "Upload": "загрузить.", - "Username or password is incorrect. Please try again.": "Имя пользователя или пароль неверны. Пожалуйста, попробуйте еще раз.", - "UsernameRequired": "Введите имя пользователя", - "Wallpaper": "Фон", - "UnpinFromTaskbar": "Открепить", - "Would you like to restart the desktop?": "Перезагрузить рабочий стол?" -} diff --git a/virtual-desktop-v2/src/assets/i18n/messages.ru.xlf b/virtual-desktop-v2/src/assets/i18n/messages.ru.xlf deleted file mode 100644 index 9e38131eb..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.ru.xlf +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - The plugin failed to loadНе удалось загрузить плагин - - src/app/application-manager/load-failure/load-failure.component.ts - 14 - - Message when plugin failed to load - message - - ofof - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 40 - - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 56 - - of preposition in clause n-m of total - - UsernameИмя пользователя - - src/app/authentication-manager/login/login.component.ts - 22 - - Label for username - label - - - PasswordПароль - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for password - label - - - New PasswordНовый пароль - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for new password - label - - - Confirm New PasswordПодтвердите новый пароль - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for confirm new password - label - - - Log inВойти - - src/app/authentication-manager/login/login.component.ts - 37 - - Title of Login button - button title - - - Log outВыйти - - Title of Sign out button - signout button - src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts14 - - - diff --git a/virtual-desktop-v2/src/assets/i18n/messages.xlf b/virtual-desktop-v2/src/assets/i18n/messages.xlf deleted file mode 100644 index 7d4bd5212..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.xlf +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - The plugin failed to load - - src/app/application-manager/load-failure/load-failure.component.ts - 14 - - Message when plugin failed to load - message - - - of - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 40 - - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 56 - - of preposition in clause n-m of total - - - Username - - src/app/authentication-manager/login/login.component.ts - 22 - - Label for username - label - - - Password - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for password - label - - - New Password - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for new password - label - - - Confirm New Password - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for confirm new password - label - - - Log in - - src/app/authentication-manager/login/login.component.ts - 37 - - Title of Login button - button title - - - Log out - - src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts - 14 - - Title of Sign out button - signout button - - - - diff --git a/virtual-desktop-v2/src/assets/i18n/messages.zh.json b/virtual-desktop-v2/src/assets/i18n/messages.zh.json deleted file mode 100644 index c9ce00b44..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.zh.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "Account Password": "用户密码", - "Apply": "应用", - "AuthenticationFailed": "{{numTypes}} 个类型验证失败 类型: {{types}}", - "Back": "后退", - "BringToFront": "置顶此程序", - "Change Password": "更改密码", - "Chinese": "中文", - "Click here to renew your session.": "点击此处以续订会话", - "Close All": "关闭全部", - "Close": "关闭", - "Continue": "继续", - "Dismiss": "忽略", - "English": "英语", - "For language changes to take effect, Zowe must be restarted.": "为使语言变更生效,Zowe必须重新启动。", - "French": "法语", - "German": "德语", - "Incorrect password or account is locked. Please contact your administrator.": "错误的密码或帐户已被锁定。请与您的管理员联系。", - "Japanese": "日语", - "Language Changes": "语言变更", - "Language Selected": "当前语言", - "Languages": "语言", - "Multiple password reset is not available.": "多个密码重置不可用。", - "New passwords do not match. Please try again.": "新密码不匹配。请再试一遍。", - "No new password provided": "没有提供新密码。", - "No password provided": "没有提供密码", - "No password reset service available.": "没有可用的密码重置服务。", - "No username provided": "没有提供用户名", - "Open New": "打开新会话", - "Open": "打开", - "Open in New Browser Tab": "在新的浏览器标签页打开", - "PasswordExpired": "密码已过期:请输入新密码", - "PasswordChanged": "密码修改成功", - "PinToTaskbar":"将此程序锁定到任务栏", - "Properties":"属性", - "Refresh Applications": "刷新应用程序", - "Restart Later": "稍后重新启动", - "Restart Now": "立即重新启动", - "Retry": "重试", - "Russian": "俄语", - "SavePassword": "保存并返回桌面", - "Search": "查找", - "Select": "选择", - "Session could not be renewed. Logout will occur unless renewed. Click here to retry.": "会话无法续订。即将登出。点击此处重试", - "Session Expired": "会话已过期", - "Session Expiring Soon": "会话即将过期", - "Session Renewal Error": "会话续订发生错误", - "Session will expire unless renewed.": "会话将在{{expirationInMS}}秒后过期", - "The new password format is incorrect. Please try again.": "新密码格式不正确。请再试一遍。", - "Username or password is incorrect. Please try again.": "用户名或密码不正确。请再试一遍。", - "UsernameRequired": "用户名不能为空", - "UnpinFromTaskbar": "将此程序从任务栏移除", - "Would you like to restart the desktop?": "是否立即重新启动?" -} diff --git a/virtual-desktop-v2/src/assets/i18n/messages.zh.xlf b/virtual-desktop-v2/src/assets/i18n/messages.zh.xlf deleted file mode 100644 index 668277313..000000000 --- a/virtual-desktop-v2/src/assets/i18n/messages.zh.xlf +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - The plugin failed to load插件加载失败 - - src/app/application-manager/load-failure/load-failure.component.ts - 14 - - Message when plugin failed to load - message - - ofof - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 40 - - - node_modules/@zlux/widgets/components/paginator/paginator.component.d.ts - 56 - - of preposition in clause n-m of total - - - Username用户名 - - src/app/authentication-manager/login/login.component.ts - 22 - - Label for username - label - - - Password密码 - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for password - label - - - New Password新密码 - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for new password - label - - - Confirm New Password确认新密码 - - src/app/authentication-manager/login/login.component.ts - 24 - - Label for confirm new password - label - - - Log in登录 - - src/app/authentication-manager/login/login.component.ts - 37 - - Title of Login button - button title - - - Log out退出 - - Title of Sign out button - signout button - src/app/window-manager/mvd-window-manager/launchbar/launchbar-widget/launchbar-widget.component.ts14 - - - - diff --git a/virtual-desktop-v2/src/assets/images/background.jpg b/virtual-desktop-v2/src/assets/images/background.jpg deleted file mode 100644 index c928893ea..000000000 Binary files a/virtual-desktop-v2/src/assets/images/background.jpg and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/launchbar/menu-zowe-icon.png b/virtual-desktop-v2/src/assets/images/launchbar/menu-zowe-icon.png deleted file mode 100644 index 897677362..000000000 Binary files a/virtual-desktop-v2/src/assets/images/launchbar/menu-zowe-icon.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/launchbar/missing.png b/virtual-desktop-v2/src/assets/images/launchbar/missing.png deleted file mode 100644 index 09c863cd6..000000000 Binary files a/virtual-desktop-v2/src/assets/images/launchbar/missing.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/launchbar/notifications/notification.png b/virtual-desktop-v2/src/assets/images/launchbar/notifications/notification.png deleted file mode 100644 index 36ec35d84..000000000 Binary files a/virtual-desktop-v2/src/assets/images/launchbar/notifications/notification.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/launchbar/notifications/zowe.png b/virtual-desktop-v2/src/assets/images/launchbar/notifications/zowe.png deleted file mode 100644 index e54b8f48c..000000000 Binary files a/virtual-desktop-v2/src/assets/images/launchbar/notifications/zowe.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/launchbar/person.png b/virtual-desktop-v2/src/assets/images/launchbar/person.png deleted file mode 100644 index d4a1eb773..000000000 Binary files a/virtual-desktop-v2/src/assets/images/launchbar/person.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/launchbar/settings.png b/virtual-desktop-v2/src/assets/images/launchbar/settings.png deleted file mode 100644 index 2b24d54ca..000000000 Binary files a/virtual-desktop-v2/src/assets/images/launchbar/settings.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/login/Zowe_Logo.png b/virtual-desktop-v2/src/assets/images/login/Zowe_Logo.png deleted file mode 100644 index ba944b9a7..000000000 Binary files a/virtual-desktop-v2/src/assets/images/login/Zowe_Logo.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/login/login-btn-hover.png b/virtual-desktop-v2/src/assets/images/login/login-btn-hover.png deleted file mode 100644 index 1cf1816e1..000000000 Binary files a/virtual-desktop-v2/src/assets/images/login/login-btn-hover.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/login/login-btn-normal.png b/virtual-desktop-v2/src/assets/images/login/login-btn-normal.png deleted file mode 100644 index 28e9cdebd..000000000 Binary files a/virtual-desktop-v2/src/assets/images/login/login-btn-normal.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/login/login-btn-pressed.png b/virtual-desktop-v2/src/assets/images/login/login-btn-pressed.png deleted file mode 100644 index cd0509ad3..000000000 Binary files a/virtual-desktop-v2/src/assets/images/login/login-btn-pressed.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/login/password-reset.png b/virtual-desktop-v2/src/assets/images/login/password-reset.png deleted file mode 100644 index ee3e3f746..000000000 Binary files a/virtual-desktop-v2/src/assets/images/login/password-reset.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/login/z13-noshadow.png b/virtual-desktop-v2/src/assets/images/login/z13-noshadow.png deleted file mode 100644 index 693dd46d3..000000000 Binary files a/virtual-desktop-v2/src/assets/images/login/z13-noshadow.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/login/zLUX_Logo.png b/virtual-desktop-v2/src/assets/images/login/zLUX_Logo.png deleted file mode 100644 index 9f6c7eae1..000000000 Binary files a/virtual-desktop-v2/src/assets/images/login/zLUX_Logo.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/personalization/preview-1.png b/virtual-desktop-v2/src/assets/images/personalization/preview-1.png deleted file mode 100644 index 74a29b632..000000000 Binary files a/virtual-desktop-v2/src/assets/images/personalization/preview-1.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/personalization/preview-2.png b/virtual-desktop-v2/src/assets/images/personalization/preview-2.png deleted file mode 100644 index 6d8458c60..000000000 Binary files a/virtual-desktop-v2/src/assets/images/personalization/preview-2.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/personalization/preview-3.png b/virtual-desktop-v2/src/assets/images/personalization/preview-3.png deleted file mode 100644 index e945ce46b..000000000 Binary files a/virtual-desktop-v2/src/assets/images/personalization/preview-3.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/close-active-inv.png b/virtual-desktop-v2/src/assets/images/window/close-active-inv.png deleted file mode 100644 index 433afb1b4..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/close-active-inv.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/close-active.png b/virtual-desktop-v2/src/assets/images/window/close-active.png deleted file mode 100644 index c2b53b150..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/close-active.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/close-hover-active.png b/virtual-desktop-v2/src/assets/images/window/close-hover-active.png deleted file mode 100644 index 4ccb402c5..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/close-hover-active.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/close-inactive.png b/virtual-desktop-v2/src/assets/images/window/close-inactive.png deleted file mode 100644 index 5da59ef9a..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/close-inactive.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/close-pressed-inv.png b/virtual-desktop-v2/src/assets/images/window/close-pressed-inv.png deleted file mode 100644 index 24a251872..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/close-pressed-inv.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/close-pressed.png b/virtual-desktop-v2/src/assets/images/window/close-pressed.png deleted file mode 100644 index 80ef6c6f0..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/close-pressed.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/down.png b/virtual-desktop-v2/src/assets/images/window/down.png deleted file mode 100644 index f7479df31..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/down.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expand-active-inv.png b/virtual-desktop-v2/src/assets/images/window/expand-active-inv.png deleted file mode 100644 index c8604f7ce..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expand-active-inv.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expand-active.png b/virtual-desktop-v2/src/assets/images/window/expand-active.png deleted file mode 100644 index 94c20b94a..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expand-active.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expand-hover-active.png b/virtual-desktop-v2/src/assets/images/window/expand-hover-active.png deleted file mode 100644 index 31c7bd65f..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expand-hover-active.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expand-inactive.png b/virtual-desktop-v2/src/assets/images/window/expand-inactive.png deleted file mode 100644 index 43d6d26d6..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expand-inactive.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expand-pressed-inv.png b/virtual-desktop-v2/src/assets/images/window/expand-pressed-inv.png deleted file mode 100644 index 6db97ad0c..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expand-pressed-inv.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expand-pressed.png b/virtual-desktop-v2/src/assets/images/window/expand-pressed.png deleted file mode 100644 index a7ab8a0a2..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expand-pressed.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expanded-active-inv.png b/virtual-desktop-v2/src/assets/images/window/expanded-active-inv.png deleted file mode 100644 index 9127dbe17..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expanded-active-inv.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expanded-active.png b/virtual-desktop-v2/src/assets/images/window/expanded-active.png deleted file mode 100644 index fbc71e7b1..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expanded-active.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expanded-hover-active.png b/virtual-desktop-v2/src/assets/images/window/expanded-hover-active.png deleted file mode 100644 index 95656457b..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expanded-hover-active.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expanded-inactive.png b/virtual-desktop-v2/src/assets/images/window/expanded-inactive.png deleted file mode 100644 index e22c6ea50..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expanded-inactive.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expanded-pressed-inv.png b/virtual-desktop-v2/src/assets/images/window/expanded-pressed-inv.png deleted file mode 100644 index a23bf3a23..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expanded-pressed-inv.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/expanded-pressed.png b/virtual-desktop-v2/src/assets/images/window/expanded-pressed.png deleted file mode 100644 index e0edaafce..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/expanded-pressed.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/link-button.png b/virtual-desktop-v2/src/assets/images/window/link-button.png deleted file mode 100644 index 84027bb14..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/link-button.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/minimize-active-inv.png b/virtual-desktop-v2/src/assets/images/window/minimize-active-inv.png deleted file mode 100644 index 32e24608c..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/minimize-active-inv.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/minimize-active.png b/virtual-desktop-v2/src/assets/images/window/minimize-active.png deleted file mode 100644 index c543069d7..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/minimize-active.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/minimize-hover-active.png b/virtual-desktop-v2/src/assets/images/window/minimize-hover-active.png deleted file mode 100644 index cc5fe120f..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/minimize-hover-active.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/minimize-inactive.png b/virtual-desktop-v2/src/assets/images/window/minimize-inactive.png deleted file mode 100644 index 76bfa12bb..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/minimize-inactive.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/minimize-pressed-inv.png b/virtual-desktop-v2/src/assets/images/window/minimize-pressed-inv.png deleted file mode 100644 index 1276746f4..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/minimize-pressed-inv.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/minimize-pressed.png b/virtual-desktop-v2/src/assets/images/window/minimize-pressed.png deleted file mode 100644 index df8224430..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/minimize-pressed.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/refresh-normal.png b/virtual-desktop-v2/src/assets/images/window/refresh-normal.png deleted file mode 100644 index 63757d010..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/refresh-normal.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/search.png b/virtual-desktop-v2/src/assets/images/window/search.png deleted file mode 100644 index d959d9991..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/search.png and /dev/null differ diff --git a/virtual-desktop-v2/src/assets/images/window/up.png b/virtual-desktop-v2/src/assets/images/window/up.png deleted file mode 100644 index 3a9c1b9a2..000000000 Binary files a/virtual-desktop-v2/src/assets/images/window/up.png and /dev/null differ diff --git a/virtual-desktop-v2/src/desktop.ts b/virtual-desktop-v2/src/desktop.ts deleted file mode 100644 index 77a1dd69a..000000000 --- a/virtual-desktop-v2/src/desktop.ts +++ /dev/null @@ -1,82 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -/* - * This is the entry point for bootstrapping the desktop Angular application. - * To set up the desktop, this file must provide a public path for CSS - * resources, load any external/global stylesheets and scripts, prepare the DOM - * for the Angular application, and bootstrap the application. The core MVD - * implementation exists at ZoweZLUX. - */ - - -/* Establish our public path before loading CSS resources */ -// @ts-ignore -declare let __webpack_public_path__: string; -const uriBroker = ZoweZLUX.uriBroker; -__webpack_public_path__ = uriBroker.desktopRootUri(); - -/* Load external/global resources */ -import './include.ts'; - -/* Standard Angular bootstrap */ -import { enableProdMode, Type } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { MvdComponent } from 'app/window-manager/mvd-window-manager/mvd.component'; - -import { MvdModuleFactory } from './app/mvd-module-factory'; -import { SimpleWindowManagerModule } from './app/window-manager/simple-window-manager/simple-window-manager.module'; -import { environment } from './environments/environment'; -import { WindowManagerModule } from 'app/window-manager/mvd-window-manager/window-manager.module'; -import { SimpleComponent } from 'app/window-manager/simple-window-manager/simple.component'; -import { StartURLManager } from '../src/app/start-url-manager/start-url-manager.service'; - -if (environment.production) { - enableProdMode(); -} - -let mainModule: Type; - -/* Check which window manager to use from URL */ -const app2appArray = StartURLManager.getApp2AppArgsArray(); -for (let index = 0; index < app2appArray.length; index++) { - const key = app2appArray[index][0]; - const value = app2appArray[index][1]; - - if (key == "windowManager") { - if (value.toUpperCase() == "MVD") { - mainModule = MvdModuleFactory.generateModule(WindowManagerModule, MvdComponent); - } else { - mainModule = MvdModuleFactory.generateModule(SimpleWindowManagerModule, SimpleComponent); - } - break; - } -} - -export function performBootstrap(): void { - MvdModuleFactory.getTranslationProviders() - .then(providers => platformBrowserDynamic().bootstrapModule(mainModule - || MvdModuleFactory.generateModule(WindowManagerModule, MvdComponent), {providers: providers})); -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/environments/environment.prod.ts b/virtual-desktop-v2/src/environments/environment.prod.ts deleted file mode 100644 index d68048a78..000000000 --- a/virtual-desktop-v2/src/environments/environment.prod.ts +++ /dev/null @@ -1,27 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -export const environment = { - production: true -}; - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/environments/environment.ts b/virtual-desktop-v2/src/environments/environment.ts deleted file mode 100644 index b5560cda8..000000000 --- a/virtual-desktop-v2/src/environments/environment.ts +++ /dev/null @@ -1,33 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -// The file contents for the current environment will overwrite these during build. -// The build system defaults to the dev environment which uses `environment.ts`, but if you do -// `ng build --env=prod` then `environment.prod.ts` will be used instead. -// The list of which env maps to which file can be found in `.angular-cli.json`. - -export const environment = { - production: true -}; - - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/externals-main.ts b/virtual-desktop-v2/src/externals-main.ts deleted file mode 100644 index 182ab1311..000000000 --- a/virtual-desktop-v2/src/externals-main.ts +++ /dev/null @@ -1,40 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -/* Load globals */ -import 'jquery'; -// Dropdown component in workflows-app requires bootstrap JS components and popper.js -// In Zowe v2 we remove the workflows-app -// TODO: consider to remove the two imports below -import 'popper.js'; -import 'bootstrap'; - -/* Load second stage with requirejs */ -const script = document.createElement('script'); -script.setAttribute('data-main', ZoweZLUX.uriBroker.pluginResourceUri(ZoweZLUX.pluginManager.getDesktopPlugin(), 'externals.js')); -script.setAttribute('src', ZoweZLUX.uriBroker.pluginResourceUri(ZoweZLUX.pluginManager.getDesktopPlugin(), 'require.js')); - -if (document.head) { - document.head.appendChild(script); -} - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/externals.ts b/virtual-desktop-v2/src/externals.ts deleted file mode 100644 index c1ca05aa1..000000000 --- a/virtual-desktop-v2/src/externals.ts +++ /dev/null @@ -1,89 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -/* - Imperfect solution to an imperfect world. See https://github.com/requirejs/requirejs/issues/787 and https://requirejs.org/docs/api.html#config-waitSeconds -*/ -(window as any).requirejs.config({ - waitSeconds: 0 -}); - -/* These will be packaged into a single bundle by the webpack bundling system. - * We then expose them to our module loader (requirejs) manually and use that - * to load the desktop and external plugins. These requires use webpack. */ - -const libs: { [index: string]: {library: any} } = { - '@angular/core': require('@angular/core'), - '@angular/common': require('@angular/common'), - '@angular/common/http': require('@angular/common/http'), - // '@angular/http': require('@angular/http'), - '@angular/platform-browser': require('@angular/platform-browser'), - '@angular/platform-browser/animations': require('@angular/platform-browser/animations'), - '@angular/platform-browser-dynamic': require('@angular/platform-browser-dynamic'), - '@angular/cdk/portal': require('@angular/cdk/portal'), - '@angular/material/snack-bar': require('@angular/material/snack-bar'), - '@angular/material/dialog': require('@angular/material/dialog'), - '@angular/material/icon': require('@angular/material/icon'), - '@angular/material/autocomplete': require('@angular/material/autocomplete'), - '@angular/material/button': require('@angular/material/button'), - '@angular/material/button-toggle': require('@angular/material/button-toggle'), - '@angular/material/checkbox': require('@angular/material/checkbox'), - '@angular/material/form-field': require('@angular/material/form-field'), - '@angular/material/input': require('@angular/material/input'), - '@angular/material/list': require('@angular/material/list'), - '@angular/material/slide-toggle': require('@angular/material/slide-toggle'), - '@angular/material/table': require('@angular/material/table'), - '@angular/material/tooltip': require('@angular/material/tooltip'), - '@angular/material/expansion': require('@angular/material/expansion'), - '@angular/material/select': require('@angular/material/select'), - '@angular/material': require('@angular/material'), - '@angular/forms': require('@angular/forms'), - '@angular/router': require('@angular/router'), - '@angular/animations': require('@angular/animations'), - '@angular/cdk': require('@angular/cdk'), - 'angular-l10n': require('angular-l10n'), - 'rxjs': require('rxjs'), - 'rxjs/operators': require('rxjs/operators') -}; - -/* Expose modules to requirejs */ -for (const library in libs) { - if (libs[library]) { - (window as any).define(library, libs[library]); - } else { - console.warn(`Missing library ${library}`); - } -} - -/* Perform bootstrap using requirejs */ -(window as any).requirejs([ - ZoweZLUX.uriBroker.pluginResourceUri(ZoweZLUX.pluginManager.getDesktopPlugin(), 'desktop.js') -], (desktop: any) => { - /* Prepare the DOM for boostrapping */ - const element = document.createElement('rs-com-root'); - document.body.appendChild(element); - - desktop.performBootstrap(); -}); - - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - diff --git a/virtual-desktop-v2/src/include.ts b/virtual-desktop-v2/src/include.ts deleted file mode 100644 index 00b07b665..000000000 --- a/virtual-desktop-v2/src/include.ts +++ /dev/null @@ -1,37 +0,0 @@ - - -/* - This program and the accompanying materials are - made available under the terms of the Eclipse Public License v2.0 which accompanies - this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - - SPDX-License-Identifier: EPL-2.0 - - Copyright Contributors to the Zowe Project. -*/ - -/* - * This file loads external scripts and stylesheets needed for the desktop. - * script-loader loads scripts into the global context (no modules, namespacing, - * etc.). It should *only* be used for legacy external resources that do not - * have a module-based distribution. - * - * style-loader loads the CSS into the page via a