From 9fba5f63713de531cd2378c91111d76b5df248d4 Mon Sep 17 00:00:00 2001 From: Chris Veilleux Date: Thu, 8 Nov 2018 20:50:54 -0600 Subject: [PATCH] added global navigation library and implemented it in the marketplace --- frontend/internet/angular.json | 35 + frontend/internet/package-lock.json | 1049 +++++++++++++++-- frontend/internet/package.json | 4 + .../internet/projects/globalnav/karma.conf.js | 31 + .../projects/globalnav/ng-package.json | 13 + .../internet/projects/globalnav/package.json | 10 + .../src/lib/footer/footer.component.html | 25 + .../src/lib/footer/footer.component.scss | 24 + .../src/lib/footer/footer.component.ts | 59 + .../src/lib/globalnav.component.html | 29 + .../src/lib/globalnav.component.scss | 23 + .../globalnav/src/lib/globalnav.component.ts | 130 ++ .../globalnav/src/lib/globalnav.module.ts | 42 + .../globalnav/src/lib/globalnav.service.ts | 25 + .../src/lib/nav-item/nav-item.component.html | 6 + .../src/lib/nav-item/nav-item.component.scss | 4 + .../src/lib/nav-item/nav-item.component.ts | 33 + .../primary-nav-item.component.html | 15 + .../primary-nav-item.component.scss | 7 + .../primary-nav-item.component.ts | 39 + .../globalnav/src/lib/sidenav-logo.svg | 43 + .../projects/globalnav/src/public_api.ts | 7 + .../internet/projects/globalnav/src/test.ts | 22 + .../projects/globalnav/tsconfig.lib.json | 32 + .../projects/globalnav/tsconfig.spec.json | 17 + .../internet/projects/globalnav/tslint.json | 17 + .../market/src/app/app.component.html | 13 +- .../market/src/app/app.component.scss | 5 + .../projects/market/src/app/app.component.ts | 11 +- .../projects/market/src/app/app.module.ts | 7 +- .../src/app/header/header.component.html | 22 - .../src/app/header/header.component.scss | 26 - .../market/src/app/header/header.component.ts | 60 - .../market/src/app/header/header.module.ts | 22 - .../src/app/shared/login.service.spec.ts | 15 - .../market/src/app/shared/login.service.ts | 41 - .../src/environments/environment.dev.ts | 8 +- .../src/environments/environment.prod.ts | 9 +- .../src/environments/environment.test.ts | 8 +- .../market/src/environments/environment.ts | 9 +- frontend/internet/tsconfig.json | 12 +- 41 files changed, 1735 insertions(+), 274 deletions(-) create mode 100644 frontend/internet/projects/globalnav/karma.conf.js create mode 100644 frontend/internet/projects/globalnav/ng-package.json create mode 100644 frontend/internet/projects/globalnav/package.json create mode 100644 frontend/internet/projects/globalnav/src/lib/footer/footer.component.html create mode 100644 frontend/internet/projects/globalnav/src/lib/footer/footer.component.scss create mode 100644 frontend/internet/projects/globalnav/src/lib/footer/footer.component.ts create mode 100644 frontend/internet/projects/globalnav/src/lib/globalnav.component.html create mode 100644 frontend/internet/projects/globalnav/src/lib/globalnav.component.scss create mode 100644 frontend/internet/projects/globalnav/src/lib/globalnav.component.ts create mode 100644 frontend/internet/projects/globalnav/src/lib/globalnav.module.ts create mode 100644 frontend/internet/projects/globalnav/src/lib/globalnav.service.ts create mode 100644 frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.html create mode 100644 frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.scss create mode 100644 frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.ts create mode 100644 frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.html create mode 100644 frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.scss create mode 100644 frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.ts create mode 100644 frontend/internet/projects/globalnav/src/lib/sidenav-logo.svg create mode 100644 frontend/internet/projects/globalnav/src/public_api.ts create mode 100644 frontend/internet/projects/globalnav/src/test.ts create mode 100644 frontend/internet/projects/globalnav/tsconfig.lib.json create mode 100644 frontend/internet/projects/globalnav/tsconfig.spec.json create mode 100644 frontend/internet/projects/globalnav/tslint.json delete mode 100644 frontend/internet/projects/market/src/app/header/header.component.html delete mode 100644 frontend/internet/projects/market/src/app/header/header.component.scss delete mode 100644 frontend/internet/projects/market/src/app/header/header.component.ts delete mode 100644 frontend/internet/projects/market/src/app/header/header.module.ts delete mode 100644 frontend/internet/projects/market/src/app/shared/login.service.spec.ts delete mode 100644 frontend/internet/projects/market/src/app/shared/login.service.ts diff --git a/frontend/internet/angular.json b/frontend/internet/angular.json index c859ba22..7c910152 100644 --- a/frontend/internet/angular.json +++ b/frontend/internet/angular.json @@ -433,6 +433,41 @@ } } } + }, + "globalnav": { + "root": "projects/globalnav", + "sourceRoot": "projects/globalnav/src", + "projectType": "library", + "prefix": "globalnav", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "projects/globalnav/tsconfig.lib.json", + "project": "projects/globalnav/ng-package.json" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "projects/globalnav/src/test.ts", + "tsConfig": "projects/globalnav/tsconfig.spec.json", + "karmaConfig": "projects/globalnav/karma.conf.js" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "projects/globalnav/tsconfig.lib.json", + "projects/globalnav/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } } }, "defaultProject": "internet" diff --git a/frontend/internet/package-lock.json b/frontend/internet/package-lock.json index 8041796f..51b06863 100644 --- a/frontend/internet/package-lock.json +++ b/frontend/internet/package-lock.json @@ -69,6 +69,43 @@ "webpack-subresource-integrity": "1.1.0-rc.6" } }, + "@angular-devkit/build-ng-packagr": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.10.4.tgz", + "integrity": "sha512-+vKUDFsZ/kGzD9Dc0nFMzvKs9PUS1DQY0RQGdQHA4DdgGL+TMgat1oeG+v6tQhS+ur2eYmRjAKdguCIMCQXwxg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.10.4", + "@angular-devkit/core": "7.0.4", + "rxjs": "6.3.3", + "semver": "5.5.1" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.10.4.tgz", + "integrity": "sha512-GuWSZfzxdEeAOnSOs7g3oUYaRv9qmEKynCQaLroqRWRCki5YrCa2PsoxN3kLyqyRlQAM2abVs3SnZn+Imj5eaQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.0.4", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/core": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.0.4.tgz", + "integrity": "sha512-LzMXoUPLFAPJUCcTeaYrJZNao0otH15RtrpMRTOcgR9TqnnptQqIiRty4T2xQnl4ud33yHOVZ5FoANwDq1rQvQ==", + "dev": true, + "requires": { + "ajv": "6.5.3", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + } + } + }, "@angular-devkit/build-optimizer": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.10.3.tgz", @@ -785,6 +822,12 @@ "@fortawesome/fontawesome-common-types": "^0.2.7" } }, + "@ngtools/json-schema": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", + "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", + "dev": true + }, "@ngtools/webpack": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.0.3.tgz", @@ -823,6 +866,12 @@ "semver-intersect": "1.4.0" } }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "@types/jasmine": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.9.tgz", @@ -1132,6 +1181,48 @@ "resolved": "https://registry.npmjs.org/angular-font-awesome/-/angular-font-awesome-3.1.2.tgz", "integrity": "sha1-k3hzJhLY6MceDXwvqg+t3H+Fjsk=" }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "ansi-colors": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz", @@ -1288,8 +1379,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "optional": true + "dev": true }, "asn1": { "version": "0.2.4", @@ -1365,8 +1455,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "optional": true + "dev": true }, "async-limiter": { "version": "1.0.0", @@ -1673,7 +1762,6 @@ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, - "optional": true, "requires": { "inherits": "~2.0.0" } @@ -1739,6 +1827,60 @@ "multicast-dns-service-types": "^1.1.0" } }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1998,15 +2140,13 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true, - "optional": true + "dev": true }, "camelcase-keys": { "version": "2.1.0", "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, - "optional": true, "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" @@ -2024,6 +2164,12 @@ "integrity": "sha1-4x65N6jJPuKgHfGDl5RyGQKHRXQ=", "dev": true }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -2083,6 +2229,12 @@ "tslib": "^1.9.0" } }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -2145,6 +2297,12 @@ } } }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -2356,6 +2514,20 @@ "typedarray": "^0.0.6" } }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "connect": { "version": "3.6.6", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", @@ -2532,6 +2704,15 @@ "elliptic": "^6.0.0" } }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, "create-hash": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -2564,7 +2745,6 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, - "optional": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" @@ -2589,6 +2769,12 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, "css-parse": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", @@ -2621,6 +2807,12 @@ "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", "dev": true }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -2690,6 +2882,12 @@ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -2932,6 +3130,21 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "duplexify": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", @@ -3204,6 +3417,12 @@ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", "dev": true }, + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -3708,6 +3927,12 @@ "pkg-dir": "^2.0.0" } }, + "find-parent-dir": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", + "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", + "dev": true + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -3824,6 +4049,17 @@ "null-check": "^1.0.0" } }, + "fs-extra": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -4404,7 +4640,6 @@ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, - "optional": true, "requires": { "globule": "^1.0.0" } @@ -4513,6 +4748,15 @@ } } }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", @@ -4538,13 +4782,31 @@ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "dev": true, - "optional": true, "requires": { "glob": "~7.1.1", "lodash": "~4.17.10", "minimatch": "~3.0.2" } }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -4908,6 +5170,12 @@ "resolve-from": "^3.0.0" } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -4982,15 +5250,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true, - "optional": true + "dev": true }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, - "optional": true, "requires": { "repeating": "^2.0.0" } @@ -5023,6 +5289,12 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, + "injection-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.2.1.tgz", + "integrity": "sha512-zHI+E+dM0PXix5FFTO1Y4/UOyAzE7zG1l/QwAn4jchTThOoBq+UYRFK4AVG7lQgFL+go62SbrzSsjXy9DFEZUg==", + "dev": true + }, "inquirer": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", @@ -5176,6 +5448,15 @@ "builtin-modules": "^1.0.0" } }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -5275,6 +5556,28 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -5295,6 +5598,12 @@ } } }, + "is-obj": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -5346,6 +5655,18 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -5704,8 +6025,7 @@ "version": "2.4.9", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", - "dev": true, - "optional": true + "dev": true }, "js-tokens": { "version": "3.0.2", @@ -5779,6 +6099,15 @@ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -5949,6 +6278,15 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -5995,6 +6333,27 @@ "pify": "^3.0.0" } }, + "less-plugin-npm-import": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/less-plugin-npm-import/-/less-plugin-npm-import-2.1.0.tgz", + "integrity": "sha1-gj5phskzGKmBccqFiEi2vq1Vvz4=", + "dev": true, + "requires": { + "promise": "~7.0.1", + "resolve": "~1.1.6" + }, + "dependencies": { + "promise": { + "version": "7.0.4", + "resolved": "http://registry.npmjs.org/promise/-/promise-7.0.4.tgz", + "integrity": "sha1-Nj6EpMNsg1a4kP7WLJHOhdAu1Tk=", + "dev": true, + "requires": { + "asap": "~2.0.3" + } + } + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -6081,8 +6440,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true, - "optional": true + "dev": true }, "lodash.clonedeep": { "version": "4.5.0", @@ -6100,8 +6458,7 @@ "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true, - "optional": true + "dev": true }, "lodash.tail": { "version": "4.1.1", @@ -6164,6 +6521,12 @@ "signal-exit": "^3.0.0" } }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "lru-cache": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", @@ -6283,7 +6646,6 @@ "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, - "optional": true, "requires": { "camelcase-keys": "^2.0.0", "decamelize": "^1.1.2", @@ -6301,8 +6663,7 @@ "version": "1.2.0", "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true + "dev": true } } }, @@ -6527,8 +6888,7 @@ "version": "2.11.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", - "dev": true, - "optional": true + "dev": true }, "nanomatch": { "version": "1.2.13", @@ -6561,6 +6921,135 @@ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, + "ng-packagr": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-4.4.0.tgz", + "integrity": "sha512-dLpC/kmQsdbkL96ZclGjNRhq/J4MwpPKwPYNom74lvXqFC2jbbT/fnwmxX9WKXjvE8MEGsg2D2x8MsRURiNscg==", + "dev": true, + "requires": { + "@ngtools/json-schema": "^1.1.0", + "autoprefixer": "^9.0.0", + "browserslist": "^4.0.0", + "chalk": "^2.3.1", + "chokidar": "^2.0.3", + "clean-css": "^4.1.11", + "commander": "^2.12.0", + "fs-extra": "^7.0.0", + "glob": "^7.1.2", + "injection-js": "^2.2.1", + "less": "^3.8.0", + "less-plugin-npm-import": "^2.1.0", + "node-sass": "^4.9.3", + "node-sass-tilde-importer": "^1.0.0", + "postcss": "^7.0.0", + "postcss-url": "^8.0.0", + "read-pkg-up": "^4.0.0", + "rimraf": "^2.6.1", + "rollup": "^0.66.0", + "rollup-plugin-commonjs": "^9.1.3", + "rollup-plugin-json": "^3.1.0", + "rollup-plugin-node-resolve": "^3.0.0", + "rollup-plugin-sourcemaps": "^0.4.2", + "rxjs": "^6.0.0", + "stylus": "^0.54.5", + "uglify-js": "^3.0.7", + "update-notifier": "^2.3.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6578,7 +7067,6 @@ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "dev": true, - "optional": true, "requires": { "fstream": "^1.0.0", "glob": "^7.0.3", @@ -6598,8 +7086,7 @@ "version": "5.3.0", "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true + "dev": true } } }, @@ -6656,7 +7143,6 @@ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", "dev": true, - "optional": true, "requires": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", @@ -6684,7 +7170,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, - "optional": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", @@ -6696,15 +7181,13 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "optional": true + "dev": true }, "chalk": { "version": "1.1.3", "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, - "optional": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -6717,15 +7200,13 @@ "version": "1.1.0", "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true, - "optional": true + "dev": true }, "har-validator": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, - "optional": true, "requires": { "ajv": "^5.1.0", "har-schema": "^2.0.0" @@ -6735,29 +7216,25 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true, - "optional": true + "dev": true }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true + "dev": true }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true + "dev": true }, "request": { "version": "2.87.0", "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "dev": true, - "optional": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.6.0", @@ -6785,21 +7262,28 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true + "dev": true }, "tough-cookie": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, - "optional": true, "requires": { "punycode": "^1.4.1" } } } }, + "node-sass-tilde-importer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz", + "integrity": "sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg==", + "dev": true, + "requires": { + "find-parent-dir": "^0.3.0" + } + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -7101,7 +7585,6 @@ "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, - "optional": true, "requires": { "lcid": "^1.0.0" } @@ -7170,6 +7653,18 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", @@ -7450,6 +7945,27 @@ "schema-utils": "^1.0.0" } }, + "postcss-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-8.0.0.tgz", + "integrity": "sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw==", + "dev": true, + "requires": { + "mime": "^2.3.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.0", + "postcss": "^7.0.2", + "xxhashjs": "^0.2.1" + }, + "dependencies": { + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + } + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", @@ -7462,6 +7978,12 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", @@ -7795,6 +8317,26 @@ "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", "dev": true }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -7913,7 +8455,6 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, - "optional": true, "requires": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -7967,6 +8508,25 @@ "regjsparser": "^0.1.4" } }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", @@ -8143,6 +8703,178 @@ "inherits": "^2.0.1" } }, + "rollup": { + "version": "0.66.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.66.6.tgz", + "integrity": "sha512-J7/SWanrcb83vfIHqa8+aVVGzy457GcjA6GVZEnD0x2u4OnOd0Q1pCrEoNe8yLwM6z6LZP02zBT2uW0yh5TqOw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "*" + } + }, + "rollup-plugin-commonjs": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz", + "integrity": "sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "magic-string": "^0.25.1", + "resolve": "^1.8.1", + "rollup-pluginutils": "^2.3.3" + }, + "dependencies": { + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + } + } + }, + "rollup-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz", + "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.3.1" + } + }, + "rollup-plugin-node-resolve": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz", + "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==", + "dev": true, + "requires": { + "builtin-modules": "^2.0.0", + "is-module": "^1.0.0", + "resolve": "^1.1.6" + }, + "dependencies": { + "builtin-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", + "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", + "dev": true + } + } + }, + "rollup-plugin-sourcemaps": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz", + "integrity": "sha1-YhJaqUCHqt97g+9N+vYptHMTXoc=", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.0.1", + "source-map-resolve": "^0.5.0" + } + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "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" + } + } + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -8195,7 +8927,6 @@ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "dev": true, - "optional": true, "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", @@ -8248,7 +8979,6 @@ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, - "optional": true, "requires": { "js-base64": "^2.1.8", "source-map": "^0.4.2" @@ -8259,7 +8989,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, - "optional": true, "requires": { "amdefine": ">=0.0.4" } @@ -8310,6 +9039,15 @@ "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, "semver-dsl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", @@ -8972,7 +9710,6 @@ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "dev": true, - "optional": true, "requires": { "readable-stream": "^2.0.1" } @@ -9094,11 +9831,16 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, - "optional": true, "requires": { "get-stdin": "^4.0.1" } }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, "style-loader": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.0.tgz", @@ -9197,13 +9939,49 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, - "optional": true, "requires": { "block-stream": "*", "fstream": "^1.0.2", "inherits": "2" } }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, "terser": { "version": "3.10.3", "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.3.tgz", @@ -9391,6 +10169,12 @@ "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -9497,8 +10281,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true, - "optional": true + "dev": true }, "trim-right": { "version": "1.0.1", @@ -9511,7 +10294,6 @@ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "dev": true, - "optional": true, "requires": { "glob": "^7.1.2" } @@ -9540,6 +10322,25 @@ } } }, + "tsickle": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.33.1.tgz", + "integrity": "sha512-SpW2G3PvDGs4a5sMXPlWnCWHWRviWjSlI3U0734e3fU3U39VAE0NPr8M3W1cuL/OU/YXheYipGeEwtIJ5k0NHQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map": "^0.7.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -9642,7 +10443,6 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, - "optional": true, "requires": { "commander": "~2.17.1", "source-map": "~0.6.1" @@ -9652,8 +10452,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true + "dev": true } } }, @@ -9766,6 +10565,21 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -9812,12 +10626,36 @@ } } }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -9867,6 +10705,15 @@ "requires-port": "^1.0.0" } }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -10421,8 +11268,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true, - "optional": true + "dev": true }, "wide-align": { "version": "1.1.3", @@ -10433,6 +11279,48 @@ "string-width": "^1.0.2 || 2" } }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -10464,6 +11352,17 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "ws": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", @@ -10475,6 +11374,12 @@ "ultron": "~1.1.0" } }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", @@ -10517,6 +11422,15 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } + }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", @@ -10534,7 +11448,6 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dev": true, - "optional": true, "requires": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -10555,15 +11468,13 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true + "dev": true }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true, - "optional": true + "dev": true } } }, @@ -10572,7 +11483,6 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, - "optional": true, "requires": { "camelcase": "^3.0.0" }, @@ -10581,8 +11491,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true + "dev": true } } }, diff --git a/frontend/internet/package.json b/frontend/internet/package.json index 96e70e30..0944d2bb 100644 --- a/frontend/internet/package.json +++ b/frontend/internet/package.json @@ -35,6 +35,7 @@ }, "devDependencies": { "@angular-devkit/build-angular": "~0.10.0", + "@angular-devkit/build-ng-packagr": "~0.10.0", "@angular/cli": "~7.0.3", "@angular/compiler-cli": "~7.0.0", "@angular/language-service": "~7.0.0", @@ -49,8 +50,11 @@ "karma-coverage-istanbul-reporter": "~2.0.1", "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", + "ng-packagr": "^4.2.0", "protractor": "~5.4.0", "ts-node": "~7.0.0", + "tsickle": ">=0.29.0", + "tslib": "^1.9.0", "tslint": "~5.11.0", "typescript": "~3.1.1" } diff --git a/frontend/internet/projects/globalnav/karma.conf.js b/frontend/internet/projects/globalnav/karma.conf.js new file mode 100644 index 00000000..4c5f8d03 --- /dev/null +++ b/frontend/internet/projects/globalnav/karma.conf.js @@ -0,0 +1,31 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../../coverage'), + reports: ['html', 'lcovonly'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }); +}; diff --git a/frontend/internet/projects/globalnav/ng-package.json b/frontend/internet/projects/globalnav/ng-package.json new file mode 100644 index 00000000..65e484a3 --- /dev/null +++ b/frontend/internet/projects/globalnav/ng-package.json @@ -0,0 +1,13 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/globalnav", + "lib": { + "entryFile": "src/public_api.ts", + "cssUrl": "inline", + "umdModuleIds": { + "@fortawesome/angular-fontawesome": "angularFontawesome", + "@fortawesome/free-brands-svg-icons": "freeBrandsSvgIcons", + "@fortawesome/free-solid-svg-icons": "freeSolidSvgIcons" + } + } +} diff --git a/frontend/internet/projects/globalnav/package.json b/frontend/internet/projects/globalnav/package.json new file mode 100644 index 00000000..0a20c518 --- /dev/null +++ b/frontend/internet/projects/globalnav/package.json @@ -0,0 +1,10 @@ +{ + "name": "globalnav", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^7.0.0", + "@angular/core": "^7.0.0", + "@angular/flex-layout": "^7.0.0-beta.19" + + } +} diff --git a/frontend/internet/projects/globalnav/src/lib/footer/footer.component.html b/frontend/internet/projects/globalnav/src/lib/footer/footer.component.html new file mode 100644 index 00000000..e41634e9 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/footer/footer.component.html @@ -0,0 +1,25 @@ + diff --git a/frontend/internet/projects/globalnav/src/lib/footer/footer.component.scss b/frontend/internet/projects/globalnav/src/lib/footer/footer.component.scss new file mode 100644 index 00000000..3109f4ee --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/footer/footer.component.scss @@ -0,0 +1,24 @@ +.nav-footer { + //bottom: 0; + padding: 16px; + //position: fixed; +} + +fa-icon { + color: #6c7a89; + font-size: 20px; +} + +.footer-text { + color: #6c7a89; + line-height: 30px; + padding: 0; +} + +.mat-body-2 { + color: #6c7a89; + margin-top: 5px; +} +.mat-divider.mat-divider-vertical { + height: 30px; +} diff --git a/frontend/internet/projects/globalnav/src/lib/footer/footer.component.ts b/frontend/internet/projects/globalnav/src/lib/footer/footer.component.ts new file mode 100644 index 00000000..344d87a8 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/footer/footer.component.ts @@ -0,0 +1,59 @@ +import { Component, Input, OnInit } from '@angular/core'; + +import { + faFacebook, + faInstagram, + faLinkedin, + faMedium, + faReddit, + faTelegram, + faTwitter, + faYoutube, +} from '@fortawesome/free-brands-svg-icons'; + +@Component({ + selector: 'globalnav-footer', + templateUrl: './footer.component.html', + styleUrls: ['./footer.component.scss'] +}) +export class FooterComponent implements OnInit { + @Input() contactUsUrl: string; + @Input() mediaKitUrl: string; + @Input() privacyPolicyUrl: string; + public socialMediaIcons = [ + {icon: faFacebook, url: 'https://www.facebook.com/aiforeveryone/'}, + {icon: faInstagram, url: 'https://www.instagram.com/mycroft_ai/'}, + {icon: faLinkedin, url: 'https://www.linkedin.com/company/mycroft-a.i./'}, + {icon: faMedium, url: 'https://medium.com/@mycroftai'}, + {icon: faReddit, url: 'https://www.reddit.com/r/Mycroftai/'}, + {icon: faTelegram, url: 'https://t.me/mycroft_ai'}, + {icon: faTwitter, url: 'https://twitter.com/mycroft_ai'}, + {icon: faYoutube, url: 'https://www.youtube.com/channel/UC1dlmB1lup9RwFQBSGnhA-g'} + ]; + @Input() termsOfUseUrl: string; + + constructor() { } + + ngOnInit() { + } + + navigateToSocialMedia(url) { + window.location.assign(url); + } + + navigateToTermsOfUse() { + window.location.assign(this.termsOfUseUrl); + } + + navigateToPrivacyPolicy() { + window.location.assign(this.privacyPolicyUrl); + } + + navigateToContactUs() { + window.location.assign(this.contactUsUrl); + } + + navigateToMediaKit() { + window.location.assign(this.mediaKitUrl); + } +} diff --git a/frontend/internet/projects/globalnav/src/lib/globalnav.component.html b/frontend/internet/projects/globalnav/src/lib/globalnav.component.html new file mode 100644 index 00000000..2a0a3b70 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/globalnav.component.html @@ -0,0 +1,29 @@ + + +
+
+ + +
+
+ + + + +
+ + +
+
+ + + +
diff --git a/frontend/internet/projects/globalnav/src/lib/globalnav.component.scss b/frontend/internet/projects/globalnav/src/lib/globalnav.component.scss new file mode 100644 index 00000000..346d97b8 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/globalnav.component.scss @@ -0,0 +1,23 @@ +// Use inline css to display the logo at top of sidebar because Angular +// libraries do not support static assets yet. +.globalnav-logo { + background: url("sidenav-logo.svg") no-repeat; + height: 30px; + margin: 20px; +} + +mat-sidenav { + width: 220px; + + mat-divider { + width: 200px; + margin-left: 10px; + } + mat-nav-list { + overflow-y: auto; + } +} + +mat-sidenav-content { + background-color: #f1f3f4; +} diff --git a/frontend/internet/projects/globalnav/src/lib/globalnav.component.ts b/frontend/internet/projects/globalnav/src/lib/globalnav.component.ts new file mode 100644 index 00000000..e861d060 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/globalnav.component.ts @@ -0,0 +1,130 @@ +import { Component, Input, OnInit } from '@angular/core'; + +import { PrimaryNavItem } from './globalnav.service'; +import { + faLightbulb, + faRobot, + faRocket, + faRss, + faStore, + faUser, + faUsers +} from '@fortawesome/free-solid-svg-icons'; + +@Component({ + selector: 'globalnav-sidenav', + templateUrl: './globalnav.component.html', + styleUrls: ['./globalnav.component.scss'] +}) + +export class GlobalnavComponent implements OnInit { + public navigationItems: PrimaryNavItem[]; + @Input() environment: any; + public contactUsUrl: string; + public mediaKitUrl: string; + public termsOfUseUrl: string; + public privacyPolicyUrl: string; + public isLoggedIn: boolean; + + constructor() { + } + + ngOnInit() { + this.buildNavigationItems(); + this.setLoginStatus(); + this.buildAccountNav(); + } + + buildNavigationItems(): void { + const aboutMycroftNav: PrimaryNavItem = { + children: [ + {text: 'Team', url: this.environment.wordpressUrl + '/team'}, + {text: 'Careers', url: this.environment.wordpressUrl + '/careers'} + ], + icon: faRobot, + text: 'About Mycroft' + }; + const blogNav: PrimaryNavItem = { + icon: faRss, + text: 'Blog', + url: this.environment.wordpressUrl + '/blog' + }; + const communityNav: PrimaryNavItem = { + children: [ + {text: 'Chat', url: this.environment.chatUrl}, + {text: 'Forum', url: this.environment.forumUrl} + ], + icon: faUsers, + text: 'Community' + }; + const contributeNav: PrimaryNavItem = { + children: [ + {text: 'GitHub', url: 'https://github.com/MycroftAI'}, + {text: 'Translate', url: this.environment.translateUrl}, + {text: 'Wake Word Tagger', url: this.environment.accountUrl + '/#/precise'}, + {text: 'Text-to-Speech Tagger', url: this.environment.accountUrl + '/#/deepspeech'} + ], + icon: faLightbulb, + text: 'Contribute' + }; + const getStartedNav: PrimaryNavItem = { + children: [ + {text: 'Get Mycroft', url: this.environment.wordpressUrl + '/download'}, + {text: 'Documentation', url: this.environment.wordpressUrl + '/documentation'} + ], + icon: faRocket, + text: 'Get Started' + }; + const marketplaceNav: PrimaryNavItem = { + children: [ + {text: 'Skills', url: this.environment.marketplaceUrl + '/skills'}, + {text: 'Hardware', url: this.environment.wordpressUrl + '/shop'} + ], + icon: faStore, + text: 'Marketplace' + }; + + this.navigationItems = [ + aboutMycroftNav, + getStartedNav, + blogNav, + communityNav, + contributeNav, + marketplaceNav, + ]; + this.contactUsUrl = this.environment.wordpressUrl + '/contact'; + this.mediaKitUrl = this.environment.wordpressUrl + '/media'; + this.privacyPolicyUrl = this.environment.accountUrl + '/#/privacy-policy'; + this.termsOfUseUrl = this.environment.accountUrl + '/#/terms-of-use'; + } + + setLoginStatus(): void { + const cookies = document.cookie; + const seleneTokenExists = cookies.includes('seleneToken'); + const seleneTokenEmpty = cookies.includes('seleneToken=""'); + this.isLoggedIn = seleneTokenExists && !seleneTokenEmpty; + } + + buildAccountNav() { + const accountNav: PrimaryNavItem = { + icon: faUser, + text: 'Account' + }; + if (this.isLoggedIn) { + accountNav.children = [ + {text: 'Devices', url: this.environment.accountUrl + '/#/device'}, + {text: 'Profile', url: this.environment.accountUrl + '/#/profile'}, + {text: 'Skill Settings', url: this.environment.accountUrl + '/#/skill'}, + {text: 'Subscription', url: this.environment.accountUrl + '/#/account'}, + {text: 'User Settings', url: this.environment.accountUrl + '/#/setting/basic'}, + {text: 'Logout', url: this.environment.singleSignOnUrl + '/logout?redirect=' + window.location.href} + ]; + } else { + accountNav.children = [ + {text: 'Log In', url: this.environment.singleSignOnUrl + '/login?redirect=' + window.location.href}, + {text: 'Sign Up', url: this.environment.singleSignOnUrl + '/signup'} + ]; + } + this.navigationItems.push(accountNav); + } +} diff --git a/frontend/internet/projects/globalnav/src/lib/globalnav.module.ts b/frontend/internet/projects/globalnav/src/lib/globalnav.module.ts new file mode 100644 index 00000000..5639fd8b --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/globalnav.module.ts @@ -0,0 +1,42 @@ +import { CommonModule } from '@angular/common'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { NgModule } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatDividerModule } from '@angular/material/divider'; +import { MatExpansionModule } from '@angular/material/expansion'; +import { MatListModule } from '@angular/material'; +import { MatSidenavModule } from '@angular/material/sidenav'; + +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; + +import { GlobalnavComponent } from './globalnav.component'; +import { GlobalnavService } from './globalnav.service'; +import { NavItemComponent } from './nav-item/nav-item.component'; +import { PrimaryNavItemComponent } from './primary-nav-item/primary-nav-item.component'; +import { FooterComponent } from './footer/footer.component'; + +@NgModule({ + imports: [ + CommonModule, + FlexLayoutModule, + FontAwesomeModule, + MatButtonModule, + MatDividerModule, + MatExpansionModule, + MatListModule, + MatSidenavModule + ], + declarations: [ + GlobalnavComponent, + NavItemComponent, + PrimaryNavItemComponent, + FooterComponent + ], + exports: [ + GlobalnavComponent + ], + providers: [ + GlobalnavService + ] +}) +export class GlobalnavModule { } diff --git a/frontend/internet/projects/globalnav/src/lib/globalnav.service.ts b/frontend/internet/projects/globalnav/src/lib/globalnav.service.ts new file mode 100644 index 00000000..127c5836 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/globalnav.service.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; + +import { IconDefinition } from '@fortawesome/free-solid-svg-icons'; + +export interface NavItem { + text: string; + url: string; +} + +export interface PrimaryNavItem { + children?: NavItem[]; + icon: IconDefinition; + text: string; + url?: string; +} + + +@Injectable({ + providedIn: 'root' +}) +export class GlobalnavService { + + constructor() { + } +} diff --git a/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.html b/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.html new file mode 100644 index 00000000..a43dd9de --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.html @@ -0,0 +1,6 @@ + +
+ + {{item.text}} +
+
diff --git a/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.scss b/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.scss new file mode 100644 index 00000000..5c4224ec --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.scss @@ -0,0 +1,4 @@ +.mat-list-item { + height: 30px; +} + diff --git a/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.ts b/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.ts new file mode 100644 index 00000000..17fc2974 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/nav-item/nav-item.component.ts @@ -0,0 +1,33 @@ +import { Component, Input, OnInit } from '@angular/core'; + +import { NavItem } from '../globalnav.service'; + +@Component({ + selector: 'globalnav-nav-item', + templateUrl: './nav-item.component.html', + styleUrls: ['./nav-item.component.scss'] +}) +export class NavItemComponent implements OnInit { + @Input() item: NavItem; + public navItemStyle: object; + + constructor() { + } + + ngOnInit() { + this.buildNavItemStyle(); + } + + buildNavItemStyle() { + this.navItemStyle = {'width': '100%'}; + if (window.location.href.includes(this.item.url)) { + this.navItemStyle['background-color'] = '#22a7f0'; + this.navItemStyle['color'] = 'white'; + this.navItemStyle['border-radius'] = '4px'; + } + } + navigateToUrl() { + window.location.assign(this.item.url); + } + +} diff --git a/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.html b/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.html new file mode 100644 index 00000000..92f97551 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.html @@ -0,0 +1,15 @@ + +
+ + + {{primaryNavItem.text}} + +
+
+
+ + +
diff --git a/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.scss b/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.scss new file mode 100644 index 00000000..0a11d6d1 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.scss @@ -0,0 +1,7 @@ +.nav-item:hover { + background-color: #e4f1fe; +} + +.nav-item-icon { + color: #22a7f0; +} diff --git a/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.ts b/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.ts new file mode 100644 index 00000000..9834a230 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/primary-nav-item/primary-nav-item.component.ts @@ -0,0 +1,39 @@ +import { Component, Input, OnInit } from '@angular/core'; + +import { PrimaryNavItem } from '../globalnav.service'; + +@Component({ + selector: 'globalnav-primary-nav-item', + templateUrl: './primary-nav-item.component.html', + styleUrls: ['./primary-nav-item.component.scss'] +}) +export class PrimaryNavItemComponent implements OnInit { + public expanded = false; + @Input() primaryNavItem: PrimaryNavItem; + + constructor() { } + + ngOnInit() { + this.expandCurrentLocation(); + } + + expandCurrentLocation() { + if (this.primaryNavItem.children && this.primaryNavItem.children.length) { + this.primaryNavItem.children.forEach( + (navItem) => { + if (window.location.href.includes(navItem.url)) { + this.expanded = true; + } + } + ); + } + } + + onItemSelected() { + if (this.primaryNavItem.children && this.primaryNavItem.children.length) { + this.expanded = !this.expanded; + } else { + window.location.assign(this.primaryNavItem.url); + } + } +} diff --git a/frontend/internet/projects/globalnav/src/lib/sidenav-logo.svg b/frontend/internet/projects/globalnav/src/lib/sidenav-logo.svg new file mode 100644 index 00000000..2f5cb872 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/lib/sidenav-logo.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/internet/projects/globalnav/src/public_api.ts b/frontend/internet/projects/globalnav/src/public_api.ts new file mode 100644 index 00000000..b3c19427 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/public_api.ts @@ -0,0 +1,7 @@ +/* + * Public API Surface of globalnav + */ + +export * from './lib/globalnav.service'; +export * from './lib/globalnav.component'; +export * from './lib/globalnav.module'; diff --git a/frontend/internet/projects/globalnav/src/test.ts b/frontend/internet/projects/globalnav/src/test.ts new file mode 100644 index 00000000..e11ff1c9 --- /dev/null +++ b/frontend/internet/projects/globalnav/src/test.ts @@ -0,0 +1,22 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'core-js/es7/reflect'; +import 'zone.js/dist/zone'; +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: any; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/frontend/internet/projects/globalnav/tsconfig.lib.json b/frontend/internet/projects/globalnav/tsconfig.lib.json new file mode 100644 index 00000000..3fe337fc --- /dev/null +++ b/frontend/internet/projects/globalnav/tsconfig.lib.json @@ -0,0 +1,32 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "target": "es2015", + "module": "es2015", + "moduleResolution": "node", + "declaration": true, + "sourceMap": true, + "inlineSources": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "types": [], + "lib": [ + "dom", + "es2018" + ] + }, + "angularCompilerOptions": { + "annotateForClosureCompiler": true, + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true, + "enableResourceInlining": true + }, + "exclude": [ + "src/test.ts", + "**/*.spec.ts" + ] +} diff --git a/frontend/internet/projects/globalnav/tsconfig.spec.json b/frontend/internet/projects/globalnav/tsconfig.spec.json new file mode 100644 index 00000000..16da33db --- /dev/null +++ b/frontend/internet/projects/globalnav/tsconfig.spec.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/frontend/internet/projects/globalnav/tslint.json b/frontend/internet/projects/globalnav/tslint.json new file mode 100644 index 00000000..7b30500b --- /dev/null +++ b/frontend/internet/projects/globalnav/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "globalnav", + "camelCase" + ], + "component-selector": [ + true, + "element", + "globalnav", + "kebab-case" + ] + } +} diff --git a/frontend/internet/projects/market/src/app/app.component.html b/frontend/internet/projects/market/src/app/app.component.html index 54ec1641..1b563c3f 100644 --- a/frontend/internet/projects/market/src/app/app.component.html +++ b/frontend/internet/projects/market/src/app/app.component.html @@ -1,4 +1,9 @@ - -
- -
+ + +
+ +
+
diff --git a/frontend/internet/projects/market/src/app/app.component.scss b/frontend/internet/projects/market/src/app/app.component.scss index 8023a7b4..263bf031 100644 --- a/frontend/internet/projects/market/src/app/app.component.scss +++ b/frontend/internet/projects/market/src/app/app.component.scss @@ -5,3 +5,8 @@ margin-right: 3vw; margin-top: 30px; } + +img { + height: 20px; + margin-top: -7px; +} diff --git a/frontend/internet/projects/market/src/app/app.component.ts b/frontend/internet/projects/market/src/app/app.component.ts index 35c01c8c..5bf399be 100644 --- a/frontend/internet/projects/market/src/app/app.component.ts +++ b/frontend/internet/projects/market/src/app/app.component.ts @@ -1,11 +1,18 @@ import { Component, OnInit } from '@angular/core'; +import { environment } from '../environments/environment'; + @Component({ selector: 'market-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) export class AppComponent implements OnInit { - constructor() { } - ngOnInit() { } + public environment = environment; + + constructor() { + } + + ngOnInit() { + } } diff --git a/frontend/internet/projects/market/src/app/app.module.ts b/frontend/internet/projects/market/src/app/app.module.ts index c654ff30..c1283f3f 100644 --- a/frontend/internet/projects/market/src/app/app.module.ts +++ b/frontend/internet/projects/market/src/app/app.module.ts @@ -5,9 +5,8 @@ import { NgModule } from '@angular/core'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; -import { HeaderModule } from './header/header.module'; +import { GlobalnavModule } from 'globalnav'; import { MaterialModule } from './shared/material.module'; -import { LoginService } from './shared/login.service'; import { SkillsModule } from './skills/skills.module'; import { PageNotFoundComponent } from './page-not-found/page-not-found.component'; @@ -17,13 +16,13 @@ import { PageNotFoundComponent } from './page-not-found/page-not-found.component imports: [ BrowserModule, BrowserAnimationsModule, + GlobalnavModule, HttpClientModule, - HeaderModule, MaterialModule, SkillsModule, AppRoutingModule ], - providers: [ LoginService ], + providers: [ ], bootstrap: [ AppComponent ] } ) diff --git a/frontend/internet/projects/market/src/app/header/header.component.html b/frontend/internet/projects/market/src/app/header/header.component.html deleted file mode 100644 index 2f09b1d7..00000000 --- a/frontend/internet/projects/market/src/app/header/header.component.html +++ /dev/null @@ -1,22 +0,0 @@ - - - -
MARKETPLACE
- -
- - - - - -
-
\ No newline at end of file diff --git a/frontend/internet/projects/market/src/app/header/header.component.scss b/frontend/internet/projects/market/src/app/header/header.component.scss deleted file mode 100644 index 62e0fe70..00000000 --- a/frontend/internet/projects/market/src/app/header/header.component.scss +++ /dev/null @@ -1,26 +0,0 @@ -@import '../../stylesheets/global'; - -mat-toolbar { - background-color: $mycroft-primary; - color: $mycroft-white; - img { - height: 20px; - margin-top: -7px; - } - .separator { - font-size: 5px; - padding-left: 10px; - padding-right: 10px; - } - .mat-subheading-1 { - margin-bottom: 0; - } - fa-icon { - padding-right: 5px; - } - .menu-button { - fa-icon { - padding-left: 5px; - } - } -} diff --git a/frontend/internet/projects/market/src/app/header/header.component.ts b/frontend/internet/projects/market/src/app/header/header.component.ts deleted file mode 100644 index 04a107b9..00000000 --- a/frontend/internet/projects/market/src/app/header/header.component.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { Subscription } from 'rxjs/internal/Subscription'; - -import { - faCaretDown, - faCircle, - faSignInAlt, - faSignOutAlt -} from '@fortawesome/free-solid-svg-icons'; - -import { InstallService } from '../skills/install.service'; -import { LoginService } from '../shared/login.service'; - -@Component({ - selector: 'market-header', - templateUrl: './header.component.html', - styleUrls: ['./header.component.scss'] -}) -export class HeaderComponent implements OnInit, OnDestroy { - public isLoggedIn: boolean; - private loginStatus: Subscription; - public separatorIcon = faCircle; - public signInIcon = faSignInAlt; - public signOutIcon = faSignOutAlt; - public menuButtonIcon = faCaretDown; - public userMenuButtonText: string; - - constructor( - private installService: InstallService, - private loginService: LoginService - ) { } - - ngOnInit() { - this.loginStatus = this.loginService.isLoggedIn.subscribe( - (isLoggedIn) => { this.onLoginStateChange(isLoggedIn); } - ); - this.loginService.setLoginStatus(); - } - - ngOnDestroy() { - this.loginStatus.unsubscribe(); - } - - onLoginStateChange(isLoggedIn) { - this.isLoggedIn = isLoggedIn; - if (isLoggedIn) { - this.loginService.getUser().subscribe( - (user) => { this.userMenuButtonText = user.name; } - ); - } - } - - login() { - this.loginService.login(); - } - - logout() { - this.loginService.logout(); - } -} diff --git a/frontend/internet/projects/market/src/app/header/header.module.ts b/frontend/internet/projects/market/src/app/header/header.module.ts deleted file mode 100644 index 7acd9ead..00000000 --- a/frontend/internet/projects/market/src/app/header/header.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FlexLayoutModule } from '@angular/flex-layout'; - -import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; - -import { InstallService } from '../skills/install.service'; -import { HeaderComponent } from './header.component'; -import { MaterialModule } from '../shared/material.module'; - -@NgModule({ - imports: [ - CommonModule, - FlexLayoutModule, - FontAwesomeModule, - MaterialModule - ], - declarations: [ HeaderComponent], - exports: [ HeaderComponent ], - providers: [ InstallService ] -}) -export class HeaderModule { } diff --git a/frontend/internet/projects/market/src/app/shared/login.service.spec.ts b/frontend/internet/projects/market/src/app/shared/login.service.spec.ts deleted file mode 100644 index 1ec71540..00000000 --- a/frontend/internet/projects/market/src/app/shared/login.service.spec.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { TestBed, inject } from '@angular/core/testing'; - -import { LoginService } from './login.service'; - -describe('LoginService', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [LoginService] - }); - }); - - it('should be created', inject([LoginService], (service: LoginService) => { - expect(service).toBeTruthy(); - })); -}); diff --git a/frontend/internet/projects/market/src/app/shared/login.service.ts b/frontend/internet/projects/market/src/app/shared/login.service.ts deleted file mode 100644 index a2aea18b..00000000 --- a/frontend/internet/projects/market/src/app/shared/login.service.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; - -import { Observable } from 'rxjs/internal/Observable'; -import { Subject } from 'rxjs/internal/Subject'; -import { environment } from '../../environments/environment'; - -const redirectQuery = '?redirect='; -export class User { - name: string; -} - -@Injectable() -export class LoginService { - public isLoggedIn = new Subject(); - public loginUrl: string = environment.loginUrl + '/login'; - private logoutUrl = environment.loginUrl + '/logout'; - private userUrl = '/api/user'; - - constructor(private http: HttpClient) { - } - - getUser(): Observable { - return this.http.get(this.userUrl); - } - - setLoginStatus(): void { - const cookies = document.cookie; - const seleneTokenExists = cookies.includes('seleneToken'); - const seleneTokenEmpty = cookies.includes('seleneToken=""'); - this.isLoggedIn.next( seleneTokenExists && !seleneTokenEmpty); - } - - login(): void { - window.location.assign(this.loginUrl + redirectQuery + window.location.href); - } - - logout(): void { - window.location.assign(this.logoutUrl + redirectQuery + window.location.href); - } -} diff --git a/frontend/internet/projects/market/src/environments/environment.dev.ts b/frontend/internet/projects/market/src/environments/environment.dev.ts index c30ff08b..7c7d4a9f 100644 --- a/frontend/internet/projects/market/src/environments/environment.dev.ts +++ b/frontend/internet/projects/market/src/environments/environment.dev.ts @@ -1,4 +1,10 @@ export const environment = { production: false, - loginUrl: 'http://login.mycroft.test' + chatUrl: 'https://chat.mycroft.ai', + forumUrl: 'https://forum.mycroft.ai', + singleSignOnUrl: 'http://sso.mycroft.test', + accountUrl: 'https://home-test.mycroft.ai', + marketplaceUrl: 'http://market.mycroft.test', + translateUrl: 'https://translate-test.mycroft.ai', + wordpressUrl: 'https://test.mycroft.ai' }; diff --git a/frontend/internet/projects/market/src/environments/environment.prod.ts b/frontend/internet/projects/market/src/environments/environment.prod.ts index b3190aa2..42d0ba1e 100644 --- a/frontend/internet/projects/market/src/environments/environment.prod.ts +++ b/frontend/internet/projects/market/src/environments/environment.prod.ts @@ -1,6 +1,11 @@ export const environment = { - production: true, - loginUrl: 'https://login.mycroft.ai' + chatUrl: 'https://chat.mycroft.ai', + forumUrl: 'https://forum.mycroft.ai', + singleSignOnUrl: 'https://sso.mycroft.ai', + accountUrl: 'https://home.mycroft.ai', + marketplaceUrl: 'https://market.mycroft.ai', + translateUrl: 'https://translate.mycroft.ai', + wordpressUrl: 'https://test.mycroft.ai' }; document.write( diff --git a/frontend/internet/projects/market/src/environments/environment.test.ts b/frontend/internet/projects/market/src/environments/environment.test.ts index 74313ac4..31dc6068 100644 --- a/frontend/internet/projects/market/src/environments/environment.test.ts +++ b/frontend/internet/projects/market/src/environments/environment.test.ts @@ -1,4 +1,10 @@ export const environment = { production: false, - loginUrl: 'https://login.mycroft-test.net' + chatUrl: 'https://chat.mycroft.ai', + forumUrl: 'https://forum.mycroft.ai', + singleSignOnUrl: 'https://sso.mycroft-test.net', + accountUrl: 'https://home-test.mycroft.ai', + marketplaceUrl: 'https://market.mycroft-test.net', + translateUrl: 'https://translate-test.mycroft.ai', + wordpressUrl: 'https://test.mycroft.ai' }; diff --git a/frontend/internet/projects/market/src/environments/environment.ts b/frontend/internet/projects/market/src/environments/environment.ts index fa2e4d0c..48edacc0 100644 --- a/frontend/internet/projects/market/src/environments/environment.ts +++ b/frontend/internet/projects/market/src/environments/environment.ts @@ -4,8 +4,13 @@ export const environment = { production: false, - apiUrl: 'http://localhost:5002', - loginUrl: 'http://localhost:4201' + chatUrl: 'https://chat.mycroft.ai', + forumUrl: 'https://forum.mycroft.ai', + singleSignOnUrl: 'http://localhost:4201', + accountUrl: 'https://home-test.mycroft.ai', + marketplaceUrl: 'http://localhost:4202', + translateUrl: 'https://translate-test.mycroft.ai', + wordpressUrl: 'https://test.mycroft.ai' }; /* diff --git a/frontend/internet/tsconfig.json b/frontend/internet/tsconfig.json index 46aeded1..b15f9d7e 100644 --- a/frontend/internet/tsconfig.json +++ b/frontend/internet/tsconfig.json @@ -16,6 +16,14 @@ "lib": [ "es2018", "dom" - ] + ], + "paths": { + "globalnav": [ + "dist/globalnav" + ], + "globalnav/*": [ + "dist/globalnav/*" + ] + } } -} +} \ No newline at end of file