diff --git a/demo-shell-ng2/app/components/about/about.component.css b/demo-shell-ng2/app/components/about/about.component.css index 9b9217de42..6846803bf2 100644 --- a/demo-shell-ng2/app/components/about/about.component.css +++ b/demo-shell-ng2/app/components/about/about.component.css @@ -4,5 +4,7 @@ .adf-table-version { width: 60%; + border: 0; + border-spacing: 0; text-align: center; } diff --git a/demo-shell-ng2/app/components/about/about.component.html b/demo-shell-ng2/app/components/about/about.component.html index 55254a4980..284fd42d37 100644 --- a/demo-shell-ng2/app/components/about/about.component.html +++ b/demo-shell-ng2/app/components/about/about.component.html @@ -1,20 +1,21 @@
-

Server settings

- The values below are taken from the AppConfigService and loaded from the '{{ configFile }}' file. -
- Alfresco Process Services URL: {{ bpmHost }} -
- -
- Alfresco Content Services URL: {{ ecmHost }} -
+ + The values below are taken from the AppConfigService and loaded from the '{{ configFile }}' file. + +

Alfresco Process Services URL: {{ bpmHost }}

+
+ + +

Alfresco Content Services URL: {{ ecmHost }}

+
+

Product Versions

BPM

- -

{{ bpmVersion.edition }}

+ {{ bpmVersion.edition }} +

@@ -32,10 +33,10 @@

ECM

- -

{{ ecmVersion.edition }}

- -

{{ ecmVersion.version.display }}

+ {{ ecmVersion.edition }} +

+ {{ ecmVersion.version.display }} +

License

Major Version
@@ -105,7 +106,6 @@ -

Packages

Current project is using the following ADF libraries: diff --git a/demo-shell-ng2/app/vendor.ts b/demo-shell-ng2/app/vendor.ts index 3b55a3e8a9..a575d73428 100644 --- a/demo-shell-ng2/app/vendor.ts +++ b/demo-shell-ng2/app/vendor.ts @@ -37,9 +37,6 @@ import 'ng2-alfresco-webscript'; require('script-loader!dialog-polyfill/dialog-polyfill'); import 'dialog-polyfill/dialog-polyfill.css'; -// Load the Angular Material 2 stylesheet -import '@angular/material/prebuilt-themes/indigo-pink.css'; - // Google Material Design Lite import 'material-design-icons/iconfont/material-icons.css'; import 'material-design-lite/dist/material.orange-blue.min.css'; diff --git a/demo-shell-ng2/config/webpack.common.js b/demo-shell-ng2/config/webpack.common.js index 0e863d676c..d20e1b62e7 100644 --- a/demo-shell-ng2/config/webpack.common.js +++ b/demo-shell-ng2/config/webpack.common.js @@ -46,6 +46,7 @@ module.exports = { }, { test: /\.html$/, + include: [helpers.root('app'), helpers.root('../ng2-components')], loader: 'html-loader', exclude: [/node_modules/, /public/, /resources/, /dist/] }, @@ -63,7 +64,8 @@ module.exports = { loader: 'raw-loader' }, { - test: /\.component.scss$/, + test: /\.scss$/, + include: [helpers.root('app'), helpers.root('../ng2-components')], use: [{ loader: "to-string-loader" }, { @@ -73,7 +75,8 @@ module.exports = { options: { includePaths: [path.resolve(__dirname, '../../ng2-components/ng2-alfresco-core/styles')] } - }] + }], + exclude: [/node_modules/, /bundles/, /dist/, /demo/] }, { test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/, diff --git a/demo-shell-ng2/package-lock.json b/demo-shell-ng2/package-lock.json index 5de3d2dbb4..bc16b2e6c2 100644 --- a/demo-shell-ng2/package-lock.json +++ b/demo-shell-ng2/package-lock.json @@ -2,71 +2,113 @@ "name": "Alfresco-Angular2-Demo", "version": "1.7.0", "lockfileVersion": 1, + "requires": true, "dependencies": { "@angular/animations": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-4.2.5.tgz", - "integrity": "sha1-EjD2vGoY8quyPifx2a6e+v0aYDE=" + "integrity": "sha1-EjD2vGoY8quyPifx2a6e+v0aYDE=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/cdk": { "version": "2.0.0-beta.8", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-2.0.0-beta.8.tgz", - "integrity": "sha512-OOtK+AA14cmRG9AbUgvoKC9Tooz0N37GTaRSV+xziC8GxXHgwvTu4PFSFHlBnHPipOYC/tB2oP39j3KuurEMPA==" + "integrity": "sha512-OOtK+AA14cmRG9AbUgvoKC9Tooz0N37GTaRSV+xziC8GxXHgwvTu4PFSFHlBnHPipOYC/tB2oP39j3KuurEMPA==", + "requires": { + "tslib": "1.7.1" + } }, "@angular/common": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.2.5.tgz", - "integrity": "sha1-TVCpW0RM1Yz3BvDandFAfTuDNi4=" + "integrity": "sha1-TVCpW0RM1Yz3BvDandFAfTuDNi4=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/compiler": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.2.5.tgz", - "integrity": "sha1-tIZ0x0VrKw3xBy1w5OZnr4bN34M=" + "integrity": "sha1-tIZ0x0VrKw3xBy1w5OZnr4bN34M=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/compiler-cli": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.2.5.tgz", - "integrity": "sha1-OzltZa3oOA83EgHUNh/JYqSax2o=" + "integrity": "sha1-OzltZa3oOA83EgHUNh/JYqSax2o=", + "requires": { + "@angular/tsc-wrapped": "4.2.5", + "minimist": "1.2.0", + "reflect-metadata": "0.1.9" + } }, "@angular/core": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.2.5.tgz", - "integrity": "sha1-YcG1iFwmIzLXN/vg9dcRUXWahGQ=" + "integrity": "sha1-YcG1iFwmIzLXN/vg9dcRUXWahGQ=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/forms": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.2.5.tgz", - "integrity": "sha1-p+VcjR9aToU37+Ht14NOSh9ZxuQ=" + "integrity": "sha1-p+VcjR9aToU37+Ht14NOSh9ZxuQ=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/http": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/http/-/http-4.2.5.tgz", - "integrity": "sha1-P/+OXPjogmK6zRyZYwQxLDxaOu8=" + "integrity": "sha1-P/+OXPjogmK6zRyZYwQxLDxaOu8=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/material": { "version": "2.0.0-beta.8", "resolved": "https://registry.npmjs.org/@angular/material/-/material-2.0.0-beta.8.tgz", - "integrity": "sha512-4+OecvjU15i+l/vXBP2qEHdlsU9taK6kBhsWKsxNLK3+TAVoV5qjc2rjOucHtTwI/oOjyBXnLJP6pl4tuLEUQw==" + "integrity": "sha512-4+OecvjU15i+l/vXBP2qEHdlsU9taK6kBhsWKsxNLK3+TAVoV5qjc2rjOucHtTwI/oOjyBXnLJP6pl4tuLEUQw==", + "requires": { + "tslib": "1.7.1" + } }, "@angular/platform-browser": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.2.5.tgz", - "integrity": "sha1-2d3+D4EITpjvJKefSF27ES54oMQ=" + "integrity": "sha1-2d3+D4EITpjvJKefSF27ES54oMQ=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/platform-browser-dynamic": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.2.5.tgz", - "integrity": "sha1-gHbsSohcw6GiPF5UDECn/dP357I=" + "integrity": "sha1-gHbsSohcw6GiPF5UDECn/dP357I=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/router": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/router/-/router-4.2.5.tgz", - "integrity": "sha1-fzZAiUk6saBurF8MYowPn9sRAI8=" + "integrity": "sha1-fzZAiUk6saBurF8MYowPn9sRAI8=", + "requires": { + "tslib": "1.7.1" + } }, "@angular/tsc-wrapped": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.2.5.tgz", - "integrity": "sha1-Ci/CMwYXgNK+QCmWGHh4wng4t+M=" + "integrity": "sha1-Ci/CMwYXgNK+QCmWGHh4wng4t+M=", + "requires": { + "tsickle": "0.21.6" + } }, "@ngx-translate/core": { "version": "7.0.0", @@ -94,7 +136,10 @@ "@types/three": { "version": "0.83.5", "resolved": "https://registry.npmjs.org/@types/three/-/three-0.83.5.tgz", - "integrity": "sha1-U8/l4QPxbUYK6pp+DFaApyEcwL4=" + "integrity": "sha1-U8/l4QPxbUYK6pp+DFaApyEcwL4=", + "requires": { + "@types/webvr-api": "0.0.31" + } }, "@types/webvr-api": { "version": "0.0.31", @@ -111,7 +156,11 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true + "dev": true, + "requires": { + "mime-types": "2.1.16", + "negotiator": "0.6.1" + } }, "acorn": { "version": "4.0.13", @@ -123,13 +172,25 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true + "dev": true, + "requires": { + "acorn": "4.0.13" + } }, "adf-tslint-rules": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/adf-tslint-rules/-/adf-tslint-rules-0.0.3.tgz", "integrity": "sha512-GUhgoEtbHRYfEi+y83jOqDKkbIzt6om3o1e48x3bLZuLpS+EDC9Vn74p48oaIrhYXt1TSND6xDcEp31qyltDrQ==", - "dev": true + "dev": true, + "requires": { + "app-root-path": "2.0.1", + "codelyzer": "3.1.2", + "css-selector-tokenizer": "0.7.0", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.6", + "sprintf-js": "1.1.1" + } }, "after": { "version": "0.8.2", @@ -141,7 +202,11 @@ "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } }, "ajv-keywords": { "version": "1.5.1", @@ -152,13 +217,22 @@ "alfresco-js-api": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/alfresco-js-api/-/alfresco-js-api-1.7.0.tgz", - "integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ==" + "integrity": "sha512-CyN1W1QxlKkE9X/WQv68pZr7nzPcR6LoV/hjgOCBz6QEkj8eBowzYB2PF3EL8d6g80LmgXBF733Dv0ur/kJqLQ==", + "requires": { + "event-emitter": "0.3.4", + "superagent": "3.4.1" + } }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } }, "alphanum-sort": { "version": "1.0.2", @@ -177,12 +251,19 @@ "resolved": "https://registry.npmjs.org/ammo/-/ammo-2.0.4.tgz", "integrity": "sha1-v4CqshFpjqePY+9efxE91dnokX8=", "dev": true, + "requires": { + "boom": "5.2.0", + "hoek": "4.2.0" + }, "dependencies": { "boom": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true + "dev": true, + "requires": { + "hoek": "4.2.0" + } }, "hoek": { "version": "4.2.0", @@ -196,7 +277,10 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/angular2-template-loader/-/angular2-template-loader-0.6.2.tgz", "integrity": "sha1-wNROkP/w+sleiyPwQ6zaf9HFHXw=", - "dev": true + "dev": true, + "requires": { + "loader-utils": "0.2.17" + } }, "ansi-html": { "version": "0.0.7", @@ -220,7 +304,11 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } }, "app-root-path": { "version": "2.0.1", @@ -238,13 +326,20 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true, + "requires": { + "sprintf-js": "1.0.3" + }, "dependencies": { "sprintf-js": { "version": "1.0.3", @@ -258,7 +353,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } }, "arr-flatten": { "version": "1.1.0", @@ -318,13 +416,21 @@ "version": "4.9.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.7", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true + "dev": true, + "requires": { + "util": "0.10.3" + } }, "assert-plus": { "version": "0.2.0", @@ -342,7 +448,10 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "async-each": { "version": "1.0.1", @@ -365,7 +474,15 @@ "version": "6.7.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000709", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "aws-sign2": { "version": "0.6.0", @@ -383,7 +500,12 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } }, "backo2": { "version": "1.0.2", @@ -425,7 +547,10 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "beeper": { "version": "1.1.1", @@ -437,7 +562,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true + "dev": true, + "requires": { + "callsite": "1.0.0" + } }, "big.js": { "version": "3.1.3", @@ -461,7 +589,10 @@ "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "bluebird": { "version": "2.11.0", @@ -480,12 +611,27 @@ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", "dev": true, + "requires": { + "bytes": "2.4.0", + "content-type": "1.0.2", + "debug": "2.6.7", + "depd": "1.1.1", + "http-errors": "1.6.1", + "iconv-lite": "0.4.15", + "on-finished": "2.3.0", + "qs": "6.4.0", + "raw-body": "2.2.0", + "type-is": "1.6.15" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "qs": { "version": "6.4.0", @@ -505,18 +651,30 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=" + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "brorand": { "version": "1.1.0", @@ -528,49 +686,91 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", - "dev": true + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "inherits": "2.0.3" + } }, "browserify-cipher": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true + "dev": true, + "requires": { + "browserify-aes": "1.0.6", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.0" + } }, "browserify-des": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.7", + "randombytes": "2.0.5" + } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.7", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } }, "browserify-zlib": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true + "dev": true, + "requires": { + "pako": "0.2.9" + } }, "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true + "dev": true, + "requires": { + "caniuse-db": "1.0.30000709", + "electron-to-chromium": "1.3.16" + } }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } }, "buffer-xor": { "version": "1.0.3", @@ -606,7 +806,11 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1", + "upper-case": "1.1.3" + } }, "camelcase": { "version": "2.1.1", @@ -618,13 +822,23 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } }, "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "dev": true + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000709", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + } }, "caniuse-db": { "version": "1.0.30000709", @@ -642,34 +856,67 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } }, "chart.js": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.5.0.tgz", - "integrity": "sha1-/m51Gok3afVucr7lrZEgfhxZKVc=" + "integrity": "sha1-/m51Gok3afVucr7lrZEgfhxZKVc=", + "requires": { + "chartjs-color": "2.1.0", + "moment": "2.15.1" + } }, "chartjs-color": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.1.0.tgz", - "integrity": "sha1-nDmsgwzNmJlq6AyfEQhv8SyYp1Y=" + "integrity": "sha1-nDmsgwzNmJlq6AyfEQhv8SyYp1Y=", + "requires": { + "chartjs-color-string": "0.4.0", + "color-convert": "0.5.3" + } }, "chartjs-color-string": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.4.0.tgz", - "integrity": "sha1-V3SNRTCuKNjbClSSGCugbf3y9Gg=" + "integrity": "sha1-V3SNRTCuKNjbClSSGCugbf3y9Gg=", + "requires": { + "color-name": "1.1.3" + } }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.2", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + }, "dependencies": { "is-extglob": { "version": "1.0.0", @@ -681,7 +928,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } } } }, @@ -689,25 +939,40 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } }, "clap": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", "integrity": "sha1-WckP4+E3EEdG/xlGmiemNP9oyFc=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3" + } }, "clean-css": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.7.tgz", "integrity": "sha1-ua6k+FZ5iJzz6ui0A0nsTr390DI=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -727,7 +992,14 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-plain-object": "2.0.4", + "kind-of": "3.2.2", + "lazy-cache": "1.0.4", + "shallow-clone": "0.1.2" + } }, "clone-stats": { "version": "0.0.1", @@ -745,7 +1017,10 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true + "dev": true, + "requires": { + "q": "1.5.0" + } }, "code-point-at": { "version": "1.1.0", @@ -757,19 +1032,35 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-3.1.2.tgz", "integrity": "sha1-n/HwQfubXuXb60W6hm368EmDrwQ=", - "dev": true + "dev": true, + "requires": { + "app-root-path": "2.0.1", + "css-selector-tokenizer": "0.7.0", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.6", + "sprintf-js": "1.1.1" + } }, "color": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, + "requires": { + "clone": "1.0.2", + "color-convert": "1.9.0", + "color-string": "0.3.0" + }, "dependencies": { "color-convert": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.3" + } } } }, @@ -787,13 +1078,21 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.3" + } }, "colormin": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } }, "colors": { "version": "1.1.2", @@ -805,12 +1104,18 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "2.11.0", @@ -839,13 +1144,25 @@ "version": "2.0.11", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.29.0" + } }, "compression": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", "dev": true, + "requires": { + "accepts": "1.3.3", + "bytes": "2.5.0", + "compressible": "2.0.11", + "debug": "2.6.8", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.1" + }, "dependencies": { "bytes": { "version": "2.5.0", @@ -865,12 +1182,21 @@ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz", "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=", "dev": true, + "requires": { + "debug": "2.6.7", + "finalhandler": "1.0.3", + "parseurl": "1.3.1", + "utils-merge": "1.0.0" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -884,7 +1210,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true + "dev": true, + "requires": { + "date-now": "0.1.4" + } }, "console-control-strings": { "version": "1.1.0", @@ -931,7 +1260,17 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.0.1.tgz", "integrity": "sha1-lyjjg7lDFgUNDHRjlY8rhcCqggA=", - "dev": true + "dev": true, + "requires": { + "bluebird": "2.11.0", + "fs-extra": "0.26.7", + "glob": "6.0.4", + "is-glob": "3.1.0", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "node-dir": "0.1.17" + } }, "core-js": { "version": "2.4.1", @@ -947,31 +1286,57 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.7", + "elliptic": "6.4.0" + } }, "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" + } }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } }, "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.3.0" + }, "dependencies": { "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } } } }, @@ -979,13 +1344,28 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1" + } }, "crypto-browserify": { "version": "3.11.1", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", - "dev": true + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.12", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5" + } }, "css-color-names": { "version": "0.0.4", @@ -997,19 +1377,44 @@ "version": "0.26.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.26.1.tgz", "integrity": "sha1-K6fyATG5NZdJaz6btQB4WknNKeo=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "loader-utils": "0.2.17", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "source-list-map": "0.1.8" + } }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } }, "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + } }, "css-what": { "version": "2.1.0", @@ -1021,7 +1426,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", - "dev": true + "dev": true, + "requires": { + "through": "2.3.8" + } }, "cssesc": { "version": "0.1.0", @@ -1033,19 +1441,60 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + } }, "csso": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true + "dev": true, + "requires": { + "clap": "1.2.0", + "source-map": "0.5.6" + } }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } }, "custom-event": { "version": "1.0.1", @@ -1056,13 +1505,19 @@ "d": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=" + "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", + "requires": { + "es5-ext": "0.10.24" + } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1082,12 +1537,19 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } }, "debug": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } }, "decamelize": { "version": "1.2.0", @@ -1128,7 +1590,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "destroy": { "version": "1.0.4", @@ -1163,13 +1629,21 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.7", + "miller-rabin": "4.0.0", + "randombytes": "2.0.5" + } }, "dom-converter": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", "dev": true, + "requires": { + "utila": "0.3.3" + }, "dependencies": { "utila": { "version": "0.3.3", @@ -1183,13 +1657,23 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.1", + "void-elements": "2.0.1" + } }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, "dependencies": { "domelementtype": { "version": "1.1.3", @@ -1221,24 +1705,38 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } }, "draggabilly": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/draggabilly/-/draggabilly-2.1.1.tgz", - "integrity": "sha1-OjGh+nPkzHHHWkv+qaz7La3gFyI=" + "integrity": "sha1-OjGh+nPkzHHHWkv+qaz7La3gFyI=", + "requires": { + "get-size": "2.0.2", + "unidragger": "2.1.0" + } }, "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, + "requires": { + "readable-stream": "1.1.14" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -1250,7 +1748,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -1264,14 +1768,23 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", - "dev": true + "dev": true, + "requires": { + "end-of-stream": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + } }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "ee-first": { "version": "1.1.1", @@ -1294,7 +1807,16 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.7", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } }, "emojis-list": { "version": "2.1.0", @@ -1313,12 +1835,18 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", "dev": true, + "requires": { + "once": "1.3.3" + }, "dependencies": { "once": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } } } }, @@ -1327,12 +1855,23 @@ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -1347,12 +1886,29 @@ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -1366,13 +1922,27 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dev": true + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } }, "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.7" + } }, "ent": { "version": "2.2.0", @@ -1390,28 +1960,46 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true + "dev": true, + "requires": { + "prr": "0.0.0" + } }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "es5-ext": { "version": "0.10.24", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz", - "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=" + "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=", + "requires": { + "es6-iterator": "2.0.1", + "es6-symbol": "3.1.1" + } }, "es6-iterator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24", + "es6-symbol": "3.1.1" + }, "dependencies": { "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=" + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.24" + } } } }, @@ -1419,11 +2007,18 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.24" + }, "dependencies": { "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=" + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.24" + } } } }, @@ -1431,7 +2026,11 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", - "dev": true + "dev": true, + "requires": { + "recast": "0.11.23", + "through": "2.3.8" + } }, "escape-html": { "version": "1.0.3", @@ -1450,13 +2049,23 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, "dependencies": { "source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, - "optional": true + "optional": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -1489,11 +2098,6 @@ "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.0.3.tgz", "integrity": "sha1-7l73S27SjZEbMt3L/JeGf1gJN7w=" }, - "eve": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eve/-/eve-0.5.0.tgz", - "integrity": "sha1-dQSA4M9Pj9W1PE2EBfAEBTLg7r4=" - }, "eve-raphael": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/eve-raphael/-/eve-raphael-0.5.0.tgz", @@ -1502,7 +2106,11 @@ "event-emitter": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz", - "integrity": "sha1-jWPd+0z+H647MsomXExyAiIIC7U=" + "integrity": "sha1-jWPd+0z+H647MsomXExyAiIIC7U=", + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.24" + } }, "eventemitter3": { "version": "1.2.0", @@ -1520,31 +2128,49 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true + "dev": true, + "requires": { + "original": "1.0.0" + } }, "evp_bytestokey": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", - "dev": true + "dev": true, + "requires": { + "create-hash": "1.1.3" + } }, "expand-braces": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" + }, "dependencies": { "braces": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true + "dev": true, + "requires": { + "expand-range": "0.1.1" + } }, "expand-range": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } }, "is-number": { "version": "0.1.1", @@ -1564,25 +2190,64 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "express": { "version": "4.15.3", "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", "dev": true, + "requires": { + "accepts": "1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.7", + "depd": "1.1.1", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "finalhandler": "1.0.3", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.5", + "qs": "6.4.0", + "range-parser": "1.2.0", + "send": "0.15.3", + "serve-static": "1.12.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.1" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "qs": { "version": "6.4.0", @@ -1602,6 +2267,9 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, + "requires": { + "is-extglob": "1.0.0" + }, "dependencies": { "is-extglob": { "version": "1.0.0", @@ -1615,7 +2283,13 @@ "version": "2.0.0-rc.3", "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.0.0-rc.3.tgz", "integrity": "sha1-c4GqeGnOJtSzmnurcc8J5aOEMrI=", - "dev": true + "dev": true, + "requires": { + "ajv": "4.11.8", + "async": "2.5.0", + "loader-utils": "0.2.17", + "webpack-sources": "0.1.5" + } }, "extsprintf": { "version": "1.0.2", @@ -1627,7 +2301,11 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } }, "fast-levenshtein": { "version": "2.0.6", @@ -1651,13 +2329,19 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } }, "file-loader": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.0.tgz", "integrity": "sha1-u+bbdHSsksf1T9wZfPVH6YtrjhI=", - "dev": true + "dev": true, + "requires": { + "loader-utils": "0.2.17" + } }, "filename-regex": { "version": "2.0.1", @@ -1669,19 +2353,38 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } }, "finalhandler": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", "dev": true, + "requires": { + "debug": "2.6.7", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -1689,7 +2392,11 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } }, "flatten": { "version": "1.0.2", @@ -1707,7 +2414,10 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true + "dev": true, + "requires": { + "for-in": "1.0.2" + } }, "forever-agent": { "version": "0.6.1", @@ -1719,12 +2429,24 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.2.4.tgz", "integrity": "sha1-00hlBihMJZ9cJaNWwpCQMpcy2tE=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "chokidar": "1.7.0", + "lodash.endswith": "4.2.1", + "lodash.isstring": "4.0.1", + "lodash.startswith": "4.2.1" + } }, "form-data": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.2.0.tgz", - "integrity": "sha1-ml47kpX5gLJiPPZPojixTOvKcHs=" + "integrity": "sha1-ml47kpX5gLJiPPZPojixTOvKcHs=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.16" + } }, "formidable": { "version": "1.1.1", @@ -1747,13 +2469,23 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true + "dev": true, + "requires": { + "null-check": "1.0.0" + } }, "fs-extra": { "version": "0.26.7", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.1" + } }, "fs.realpath": { "version": "1.0.0", @@ -1767,6 +2499,10 @@ "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", "dev": true, "optional": true, + "requires": { + "nan": "2.6.2", + "node-pre-gyp": "0.6.36" + }, "dependencies": { "abbrev": { "version": "1.1.0", @@ -1778,7 +2514,11 @@ "version": "4.11.8", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } }, "ansi-regex": { "version": "2.1.1", @@ -1795,7 +2535,11 @@ "version": "1.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } }, "asn1": { "version": "0.2.3", @@ -1836,22 +2580,35 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "block-stream": { "version": "0.0.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "boom": { "version": "2.10.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "brace-expansion": { "version": "1.1.7", "bundled": true, - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "buffer-shims": { "version": "1.0.0", @@ -1878,7 +2635,10 @@ "combined-stream": { "version": "1.0.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "concat-map": { "version": "0.0.1", @@ -1899,13 +2659,19 @@ "version": "2.0.5", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.10.1" + } }, "dashdash": { "version": "1.14.1", "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1919,7 +2685,10 @@ "version": "2.6.8", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "ms": "2.0.0" + } }, "deep-extend": { "version": "0.4.2", @@ -1942,7 +2711,10 @@ "version": "0.1.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "extend": { "version": "3.0.1", @@ -1965,7 +2737,12 @@ "version": "2.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "fs.realpath": { "version": "1.0.0", @@ -1975,25 +2752,49 @@ "fstream": { "version": "1.0.11", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } }, "fstream-ignore": { "version": "1.0.5", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } }, "gauge": { "version": "2.7.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } }, "getpass": { "version": "0.1.7", "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2006,7 +2807,15 @@ "glob": { "version": "7.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "graceful-fs": { "version": "4.1.11", @@ -2023,7 +2832,11 @@ "version": "4.2.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } }, "has-unicode": { "version": "2.0.1", @@ -2035,7 +2848,13 @@ "version": "3.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { "version": "2.16.3", @@ -2046,12 +2865,21 @@ "version": "1.1.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } }, "inflight": { "version": "1.0.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -2067,7 +2895,10 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-typedarray": { "version": "1.0.0", @@ -2090,7 +2921,10 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "jsbn": { "version": "0.1.1", @@ -2108,7 +2942,10 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsonify": "0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -2127,6 +2964,12 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2144,12 +2987,18 @@ "mime-types": { "version": "2.1.15", "bundled": true, - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } }, "minimist": { "version": "0.0.8", @@ -2159,7 +3008,10 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -2171,19 +3023,40 @@ "version": "0.6.36", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } }, "nopt": { "version": "4.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } }, "npmlog": { "version": "4.1.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } }, "number-is-nan": { "version": "1.0.1", @@ -2205,7 +3078,10 @@ "once": { "version": "1.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "os-homedir": { "version": "1.0.2", @@ -2223,7 +3099,11 @@ "version": "0.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "path-is-absolute": { "version": "1.0.1", @@ -2258,6 +3138,12 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -2270,18 +3156,54 @@ "readable-stream": { "version": "2.2.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } }, "request": { "version": "2.81.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } }, "rimraf": { "version": "2.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -2310,13 +3232,27 @@ "version": "1.0.9", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "hoek": "2.16.3" + } }, "sshpk": { "version": "1.13.0", "bundled": true, "dev": true, "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2329,12 +3265,20 @@ "string_decoder": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } }, "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "stringstream": { "version": "0.0.5", @@ -2345,7 +3289,10 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-json-comments": { "version": "2.0.1", @@ -2356,25 +3303,46 @@ "tar": { "version": "2.2.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } }, "tar-pack": { "version": "3.4.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } }, "tough-cookie": { "version": "2.3.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "punycode": "1.4.1" + } }, "tunnel-agent": { "version": "0.6.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -2403,13 +3371,19 @@ "version": "1.3.6", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } }, "wide-align": { "version": "1.1.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "string-width": "1.0.2" + } }, "wrappy": { "version": "1.0.2", @@ -2422,7 +3396,13 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } }, "function-bind": { "version": "1.1.0", @@ -2434,13 +3414,26 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } }, "gaze": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true + "dev": true, + "requires": { + "globule": "1.2.0" + } }, "get-caller-file": { "version": "1.0.2", @@ -2464,6 +3457,9 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2477,13 +3473,24 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, "dependencies": { "is-extglob": { "version": "1.0.0", @@ -2495,7 +3502,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } } } }, @@ -2504,6 +3514,9 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, + "requires": { + "is-glob": "2.0.1" + }, "dependencies": { "is-extglob": { "version": "1.0.0", @@ -2515,7 +3528,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } } } }, @@ -2524,6 +3540,10 @@ "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", "dev": true, + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + }, "dependencies": { "process": { "version": "0.5.2", @@ -2538,12 +3558,25 @@ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + }, "dependencies": { "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } } } }, @@ -2551,13 +3584,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true + "dev": true, + "requires": { + "sparkles": "1.0.0" + } }, "good": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/good/-/good-7.2.0.tgz", "integrity": "sha1-yU2qRL+5Y4jyj2zorIv9Rowt9wQ=", "dev": true, + "requires": { + "hoek": "4.2.0", + "joi": "10.6.0", + "oppsy": "1.0.2", + "pumpify": "1.3.5" + }, "dependencies": { "hoek": { "version": "4.2.0", @@ -2572,6 +3614,12 @@ "resolved": "https://registry.npmjs.org/good-console/-/good-console-6.4.0.tgz", "integrity": "sha1-cpTJ2QxMnwWaCC4YBiVJWWbSulk=", "dev": true, + "requires": { + "hoek": "4.2.0", + "joi": "8.1.1", + "json-stringify-safe": "5.0.1", + "moment": "2.15.1" + }, "dependencies": { "hoek": { "version": "4.2.0", @@ -2583,7 +3631,13 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/joi/-/joi-8.1.1.tgz", "integrity": "sha1-LYtSpdkJ0hftRySFd+7+ixeY9I8=", - "dev": true + "dev": true, + "requires": { + "hoek": "4.2.0", + "isemail": "2.2.1", + "moment": "2.15.1", + "topo": "2.0.2" + } } } }, @@ -2592,6 +3646,10 @@ "resolved": "https://registry.npmjs.org/good-squeeze/-/good-squeeze-3.0.1.tgz", "integrity": "sha1-xfhjwCPAk5AuQ6LB+YicnOXSJ+g=", "dev": true, + "requires": { + "fast-safe-stringify": "1.0.9", + "hoek": "3.0.4" + }, "dependencies": { "hoek": { "version": "3.0.4", @@ -2612,6 +3670,26 @@ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=", "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "1.0.12", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.1", + "vinyl": "0.5.3" + }, "dependencies": { "object-assign": { "version": "3.0.0", @@ -2625,7 +3703,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true + "dev": true, + "requires": { + "glogg": "1.0.0" + } }, "hammerjs": { "version": "2.0.8", @@ -2643,6 +3724,12 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, "dependencies": { "async": { "version": "1.5.2", @@ -2654,7 +3741,10 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } }, "uglify-js": { "version": "2.8.29", @@ -2662,6 +3752,11 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "optional": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "source-map": { "version": "0.5.6", @@ -2679,54 +3774,106 @@ "resolved": "https://registry.npmjs.org/hapi/-/hapi-13.5.3.tgz", "integrity": "sha1-gYtdneXokGveaMoL0ZqTZWQTwCg=", "dev": true, + "requires": { + "accept": "2.1.1", + "ammo": "2.0.1", + "boom": "3.2.0", + "call": "3.0.2", + "catbox": "7.1.1", + "catbox-memory": "2.0.2", + "cryptiles": "3.0.1", + "heavy": "4.0.1", + "hoek": "4.0.0", + "iron": "4.0.1", + "items": "2.1.0", + "joi": "8.1.0", + "kilt": "2.0.1", + "mimos": "3.0.1", + "peekaboo": "2.0.1", + "shot": "3.1.0", + "statehood": "4.0.1", + "subtext": "4.0.3", + "topo": "2.0.1" + }, "dependencies": { "accept": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/accept/-/accept-2.1.1.tgz", "integrity": "sha1-vJxvGDwBKdxy9yWIV+fMj0idD2E=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0", + "hoek": "4.0.0" + } }, "ammo": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ammo/-/ammo-2.0.1.tgz", "integrity": "sha1-agfseOgSneLf01G6bnmDULJqMt8=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0", + "hoek": "4.0.0" + } }, "boom": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/boom/-/boom-3.2.0.tgz", "integrity": "sha1-Z92RhQy0gV4FGqXBi1eKS5o7/eg=", - "dev": true + "dev": true, + "requires": { + "hoek": "4.0.0" + } }, "call": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/call/-/call-3.0.2.tgz", "integrity": "sha1-y+/QTvwaB7kdxAllDrcKsuDSpx4=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0", + "hoek": "4.0.0" + } }, "catbox": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/catbox/-/catbox-7.1.1.tgz", "integrity": "sha1-KBkzXfpFs3JgubkZN+mWttCg09I=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0", + "hoek": "4.0.0", + "joi": "8.1.0" + } }, "catbox-memory": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-2.0.2.tgz", "integrity": "sha1-XqRKtmYOUHtumE9qZW2K8sps6zs=", - "dev": true + "dev": true, + "requires": { + "hoek": "4.0.0" + } }, "cryptiles": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.0.1.tgz", "integrity": "sha1-4KDpAhk3Vq/Veqp2AtQ/VQczBeI=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0" + } }, "heavy": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/heavy/-/heavy-4.0.1.tgz", "integrity": "sha1-UJAaFEiCU8K5VrAHKZbI9WGHA0Y=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0", + "hoek": "4.0.0", + "joi": "8.1.0" + } }, "hoek": { "version": "4.0.0", @@ -2738,7 +3885,12 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/iron/-/iron-4.0.1.tgz", "integrity": "sha1-yCKCABIdU89gu5BfHN3Dxb4Akys=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0", + "cryptiles": "3.0.1", + "hoek": "4.0.0" + } }, "items": { "version": "2.1.0", @@ -2751,6 +3903,12 @@ "resolved": "https://registry.npmjs.org/joi/-/joi-8.1.0.tgz", "integrity": "sha1-WhkJTM5oAJzhGDHzutOh4eCvotE=", "dev": true, + "requires": { + "hoek": "4.0.0", + "isemail": "2.1.2", + "moment": "2.13.0", + "topo": "2.0.1" + }, "dependencies": { "isemail": { "version": "2.1.2", @@ -2770,13 +3928,20 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/kilt/-/kilt-2.0.1.tgz", "integrity": "sha1-bj33ed8bifSZgZ2pJS5vFc0BfzM=", - "dev": true + "dev": true, + "requires": { + "hoek": "4.0.0" + } }, "mimos": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mimos/-/mimos-3.0.1.tgz", "integrity": "sha1-o/H/CaELVllHNDrDNyP1JGfWlfQ=", "dev": true, + "requires": { + "hoek": "4.0.0", + "mime-db": "1.23.0" + }, "dependencies": { "mime-db": { "version": "1.23.0", @@ -2802,43 +3967,78 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/statehood/-/statehood-4.0.1.tgz", "integrity": "sha1-hc6QUwTDCZi6zRwL93h/qKvGCVg=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0", + "cryptiles": "3.0.1", + "hoek": "4.0.0", + "iron": "4.0.1", + "items": "2.1.0", + "joi": "8.1.0" + } }, "subtext": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/subtext/-/subtext-4.0.3.tgz", "integrity": "sha1-XF2cVMxl/292f/Bzu4fsITUwhSQ=", "dev": true, + "requires": { + "boom": "3.2.0", + "content": "3.0.1", + "hoek": "4.0.0", + "pez": "2.1.1", + "wreck": "7.2.1" + }, "dependencies": { "content": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/content/-/content-3.0.1.tgz", "integrity": "sha1-5PXwSKSw6kMiDEHADNOJWsBl8so=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0" + } }, "pez": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pez/-/pez-2.1.1.tgz", "integrity": "sha1-S1OYWcfr5v1pO5bh7UQriSxy7fI=", "dev": true, + "requires": { + "b64": "3.0.1", + "boom": "3.2.0", + "content": "3.0.1", + "hoek": "4.0.0", + "nigel": "2.0.1" + }, "dependencies": { "b64": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/b64/-/b64-3.0.1.tgz", "integrity": "sha1-F9ez+b8IG1/zGviRc55pUo1yYFo=", - "dev": true + "dev": true, + "requires": { + "hoek": "4.0.0" + } }, "nigel": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nigel/-/nigel-2.0.1.tgz", "integrity": "sha1-ujcV/GMZsR6dYjKnPbDh3KprnBo=", "dev": true, + "requires": { + "hoek": "4.0.0", + "vise": "2.0.1" + }, "dependencies": { "vise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/vise/-/vise-2.0.1.tgz", "integrity": "sha1-RbryamPuomyvGp06bd9xaJVQh/Q=", - "dev": true + "dev": true, + "requires": { + "hoek": "4.0.0" + } } } } @@ -2848,7 +4048,11 @@ "version": "7.2.1", "resolved": "https://registry.npmjs.org/wreck/-/wreck-7.2.1.tgz", "integrity": "sha1-7s0R0NkeozTWa7PsUjFUBdpokVg=", - "dev": true + "dev": true, + "requires": { + "boom": "3.2.0", + "hoek": "4.0.0" + } } } }, @@ -2856,7 +4060,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.1.tgz", "integrity": "sha1-yh9pqDQhjCG4JquywDNSEu3gS3U=", - "dev": true + "dev": true, + "requires": { + "hoek": "4.0.0" + } } } }, @@ -2865,6 +4072,12 @@ "resolved": "https://registry.npmjs.org/happypack/-/happypack-4.0.0-beta.1.tgz", "integrity": "sha1-G4GxGrj60s0j+jzsggUu4pFhTq0=", "dev": true, + "requires": { + "async": "1.5.0", + "json-stringify-safe": "5.0.1", + "loader-utils": "0.2.16", + "serialize-error": "2.1.0" + }, "dependencies": { "async": { "version": "1.5.0", @@ -2876,7 +4089,13 @@ "version": "0.2.16", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.16.tgz", "integrity": "sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } } } }, @@ -2890,25 +4109,38 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true + "dev": true, + "requires": { + "function-bind": "1.1.0" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-binary": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", "dev": true, + "requires": { + "isarray": "0.0.1" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -2934,7 +4166,10 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true + "dev": true, + "requires": { + "sparkles": "1.0.0" + } }, "has-unicode": { "version": "2.0.1", @@ -2946,19 +4181,32 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "he": { "version": "1.1.1", @@ -2970,7 +4218,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } }, "hoek": { "version": "2.16.3", @@ -2988,7 +4241,13 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "wbuf": "1.7.2" + } }, "html-comment-regex": { "version": "1.1.1", @@ -3006,19 +4265,44 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.4.4.tgz", "integrity": "sha1-8rW5rNXgNf86tf02nBPJenuwFNo=", - "dev": true + "dev": true, + "requires": { + "es6-templates": "0.2.3", + "fastparse": "1.1.1", + "html-minifier": "3.5.3", + "loader-utils": "0.2.17", + "object-assign": "4.1.1" + } }, "html-minifier": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.3.tgz", "integrity": "sha512-iKRzQQDuTCsq0Ultbi/mfJJnR0D3AdZKTq966Gsp92xkmAPCV4Xi08qhJ0Dl3ZAWemSgJ7qZK+UsZc0gFqK6wg==", - "dev": true + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.7", + "commander": "2.11.0", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.0.27" + } }, "html-webpack-plugin": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.28.0.tgz", "integrity": "sha1-LnhjtX5f1I/iYzA+L/yTTDBk0Ak=", "dev": true, + "requires": { + "bluebird": "3.5.0", + "html-minifier": "3.5.3", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "pretty-error": "2.1.1", + "toposort": "1.0.3" + }, "dependencies": { "bluebird": { "version": "3.5.0", @@ -3033,12 +4317,21 @@ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, "dependencies": { "domutils": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } }, "isarray": { "version": "0.0.1", @@ -3050,7 +4343,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -3071,6 +4370,12 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", "dev": true, + "requires": { + "depd": "1.1.0", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, "dependencies": { "depd": { "version": "1.1.0", @@ -3084,19 +4389,34 @@ "version": "1.16.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } }, "http-proxy-middleware": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", - "dev": true + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + } }, "http-signature": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } }, "https-browserify": { "version": "0.0.1", @@ -3132,7 +4452,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "indexes-of": { "version": "1.0.1", @@ -3151,12 +4474,23 @@ "resolved": "https://registry.npmjs.org/inert/-/inert-4.2.1.tgz", "integrity": "sha512-qmbbZYPSzU/eOUOStPQvSjrU9IR1Q3uDtsEsVwnBQeZG43xu7Nrj6yuUrX3ice/03rv5dj/KiKB+NGCbiqH+aQ==", "dev": true, + "requires": { + "ammo": "2.0.4", + "boom": "5.2.0", + "hoek": "4.2.0", + "items": "2.1.1", + "joi": "10.6.0", + "lru-cache": "4.1.1" + }, "dependencies": { "boom": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true + "dev": true, + "requires": { + "hoek": "4.2.0" + } }, "hoek": { "version": "4.2.0", @@ -3168,7 +4502,11 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } } } }, @@ -3176,7 +4514,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -3222,7 +4564,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true + "dev": true, + "requires": { + "binary-extensions": "1.9.0" + } }, "is-buffer": { "version": "1.1.5", @@ -3234,7 +4579,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } }, "is-dotfile": { "version": "1.0.3", @@ -3246,7 +4594,10 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -3264,25 +4615,37 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, "is-plain-obj": { "version": "1.1.0", @@ -3295,6 +4658,9 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "requires": { + "isobject": "3.0.1" + }, "dependencies": { "isobject": { "version": "3.0.1", @@ -3320,7 +4686,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } }, "is-typedarray": { "version": "1.0.0", @@ -3361,7 +4730,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "isstream": { "version": "0.1.2", @@ -3374,6 +4746,22 @@ "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.10", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.0", + "wordwrap": "1.0.0" + }, "dependencies": { "async": { "version": "1.5.2", @@ -3385,13 +4773,23 @@ "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } }, "wordwrap": { "version": "1.0.0", @@ -3424,6 +4822,12 @@ "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==", "dev": true, + "requires": { + "hoek": "4.2.0", + "isemail": "2.2.1", + "items": "2.1.1", + "topo": "2.0.2" + }, "dependencies": { "hoek": { "version": "4.2.0", @@ -3449,7 +4853,11 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } }, "jsbn": { "version": "0.1.1", @@ -3480,7 +4888,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true + "dev": true, + "requires": { + "jsonify": "0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -3504,7 +4915,10 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "jsonify": { "version": "0.0.0", @@ -3517,6 +4931,12 @@ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -3531,6 +4951,35 @@ "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", "dev": true, + "requires": { + "bluebird": "3.5.0", + "body-parser": "1.17.2", + "chokidar": "1.7.0", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.2", + "core-js": "2.4.1", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.16.2", + "isbinaryfile": "3.0.2", + "lodash": "3.10.1", + "log4js": "0.6.38", + "mime": "1.3.6", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.1.5", + "range-parser": "1.2.0", + "rimraf": "2.6.1", + "safe-buffer": "5.1.1", + "socket.io": "1.7.3", + "source-map": "0.5.6", + "tmp": "0.0.31", + "useragent": "2.2.1" + }, "dependencies": { "bluebird": { "version": "3.5.0", @@ -3542,7 +4991,15 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "lodash": { "version": "3.10.1", @@ -3556,13 +5013,24 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz", "integrity": "sha1-wnkMWjKxVXfQ//Wk1aJwOztDnCU=", - "dev": true + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "1.3.0" + } }, "karma-coverage": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", "dev": true, + "requires": { + "dateformat": "1.0.12", + "istanbul": "0.4.5", + "lodash": "3.10.1", + "minimatch": "3.0.4", + "source-map": "0.5.6" + }, "dependencies": { "lodash": { "version": "3.10.1", @@ -3582,13 +5050,19 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz", "integrity": "sha1-eLuS2Jb+MqJaGACYxHci4dlgW/w=", - "dev": true + "dev": true, + "requires": { + "jasmine-ajax": "3.3.1" + } }, "karma-jasmine-html-reporter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.0.tgz", "integrity": "sha1-j/K03sm+exX7RhtzHL7z5s54tzU=", "dev": true, + "requires": { + "karma-jasmine": "0.2.3" + }, "dependencies": { "karma-jasmine": { "version": "0.2.3", @@ -3602,25 +5076,42 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.2.tgz", "integrity": "sha1-h23poockTlSmCFkXMqmOZmEfar4=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3" + } }, "karma-remap-istanbul": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/karma-remap-istanbul/-/karma-remap-istanbul-0.6.0.tgz", "integrity": "sha1-l/O3cAZSVPm0ck8tm+SjouG69vw=", - "dev": true + "dev": true, + "requires": { + "istanbul": "0.4.5", + "remap-istanbul": "0.9.5" + } }, "karma-sourcemap-loader": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "karma-webpack": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.3.tgz", "integrity": "sha1-Oc6/XKJYATmyf5rmm3iBa5yC+uY=", "dev": true, + "requires": { + "async": "0.9.2", + "loader-utils": "0.2.17", + "lodash": "3.10.1", + "source-map": "0.1.43", + "webpack-dev-middleware": "1.12.0" + }, "dependencies": { "async": { "version": "0.9.2", @@ -3638,7 +5129,10 @@ "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -3646,13 +5140,19 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "lazy-cache": { "version": "1.0.4", @@ -3664,13 +5164,20 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } }, "livereload-js": { "version": "2.2.2", @@ -3682,7 +5189,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } }, "loader-runner": { "version": "2.3.0", @@ -3694,7 +5208,13 @@ "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } }, "lodash": { "version": "4.17.4", @@ -3784,7 +5304,10 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } }, "lodash.isarguments": { "version": "3.1.0", @@ -3808,7 +5331,12 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lodash.memoize": { "version": "4.1.2", @@ -3844,13 +5372,28 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } }, "lodash.templatesettings": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } }, "lodash.uniq": { "version": "4.5.0", @@ -3863,6 +5406,10 @@ "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "4.3.6" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -3874,7 +5421,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "semver": { "version": "4.3.6", @@ -3900,7 +5453,11 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } }, "lower-case": { "version": "1.1.4", @@ -3945,7 +5502,11 @@ "md-date-time-picker": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/md-date-time-picker/-/md-date-time-picker-2.2.0.tgz", - "integrity": "sha1-aIdfznnbbtEiNevEZ6qTSEX04dY=" + "integrity": "sha1-aIdfznnbbtEiNevEZ6qTSEX04dY=", + "requires": { + "draggabilly": "2.1.1", + "moment": "2.15.1" + } }, "media-typer": { "version": "0.3.0", @@ -3957,13 +5518,29 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } }, "merge-descriptors": { "version": "1.0.1", @@ -3981,6 +5558,21 @@ "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.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + }, "dependencies": { "is-extglob": { "version": "1.0.0", @@ -3992,7 +5584,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } } } }, @@ -4000,7 +5595,11 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.7", + "brorand": "1.1.0" + } }, "mime": { "version": "1.3.6", @@ -4015,13 +5614,19 @@ "mime-types": { "version": "2.1.16", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=" + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "requires": { + "mime-db": "1.29.0" + } }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true + "dev": true, + "requires": { + "dom-walk": "0.1.1" + } }, "minimalistic-assert": { "version": "1.0.0", @@ -4038,7 +5643,10 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } }, "minimist": { "version": "1.2.0", @@ -4050,6 +5658,10 @@ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, + "requires": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + }, "dependencies": { "for-in": { "version": "0.1.8", @@ -4063,6 +5675,9 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", @@ -4085,7 +5700,10 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } }, "nan": { "version": "2.6.2", @@ -4097,7 +5715,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } }, "negotiator": { "version": "0.6.1", @@ -4109,6 +5730,28 @@ "version": "0.0.15", "resolved": "https://registry.npmjs.org/ng2-3d-editor/-/ng2-3d-editor-0.0.15.tgz", "integrity": "sha1-SqF2QreQ3H5QQgEE01NZDXyL8Sw=", + "requires": { + "@angular/common": "2.0.0", + "@angular/compiler": "2.0.0", + "@angular/core": "2.0.0", + "@angular/forms": "2.0.0", + "@angular/http": "2.0.0", + "@angular/platform-browser": "2.0.0", + "@angular/platform-browser-dynamic": "2.0.0", + "@angular/router": "3.0.0", + "@types/three": "0.83.5", + "core-js": "2.4.1", + "material-design-icons": "2.2.3", + "material-design-lite": "1.2.1", + "reflect-metadata": "0.1.9", + "rxjs": "5.0.0-beta.12", + "systemjs": "0.19.27", + "three": "0.83.0", + "three-mtl-loader": "1.0.1", + "three-obj-loader": "1.1.2", + "three-transformcontrols": "0.78.1", + "zone.js": "0.6.26" + }, "dependencies": { "@angular/common": { "version": "2.0.0", @@ -4153,7 +5796,10 @@ "rxjs": { "version": "5.0.0-beta.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.0.0-beta.12.tgz", - "integrity": "sha1-zf3i2MRjnSCud5S/+P3fMtp60zc=" + "integrity": "sha1-zf3i2MRjnSCud5S/+P3fMtp60zc=", + "requires": { + "symbol-observable": "1.0.4" + } }, "zone.js": { "version": "0.6.26", @@ -4166,6 +5812,34 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-activiti-analytics/-/ng2-activiti-analytics-1.7.0.tgz", "integrity": "sha512-Ut4Xzh1dgd7ZCLA/G92CVYHun+tu8V2+urfOl0uZ0yQ1PFKPq413Oq9gMWMZz1NDH4HBifcHdGZO98/MDhsAQg==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "chart.js": "2.5.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "md-date-time-picker": "2.2.0", + "moment": "2.15.1", + "ng2-activiti-diagrams": "1.7.0", + "ng2-alfresco-core": "1.7.0", + "ng2-charts": "1.6.0", + "raphael": "2.2.7", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.8.4" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4183,11 +5857,44 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-activiti-diagrams/-/ng2-activiti-diagrams-1.7.0.tgz", "integrity": "sha512-2wU26EGrDpWUuhNjo4IGceEM76vpVOBr53T8L3nsPeyiR8QI9Da7jDDTx2stk3aX45tbflvsiLOG0RGC8iYJsg==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "raphael": "2.2.6", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.8.4" + }, "dependencies": { "raphael": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/raphael/-/raphael-2.2.6.tgz", - "integrity": "sha1-beJockeUdlQ0T3CWduoMfvXl04g=" + "integrity": "sha1-beJockeUdlQ0T3CWduoMfvXl04g=", + "requires": { + "eve": "0.5.0" + }, + "dependencies": { + "eve": { + "version": "0.5.0", + "resolved": "http://npmdev.lab.alfresco.me:4873/eve/-/eve-0.5.0.tgz", + "integrity": "sha1-dQSA4M9Pj9W1PE2EBfAEBTLg7r4=" + } + } }, "reflect-metadata": { "version": "0.1.10", @@ -4205,6 +5912,30 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-activiti-form/-/ng2-activiti-form-1.7.0.tgz", "integrity": "sha512-7wZdzA9JNt6b7b6pXtHQB43XmkVNE6dJI8l5X/FW2Ru3AnaG3HF14+eFUM6oLSNbXWv+JQOhYlb6tMvVfxHX8w==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "md-date-time-picker": "2.2.0", + "moment": "2.15.1", + "ng2-alfresco-core": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.8.4" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4222,6 +5953,33 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-activiti-processlist/-/ng2-activiti-processlist-1.7.0.tgz", "integrity": "sha512-GswaUiOCpIWXakqjuI3jyZZl+cgwclbTMIa2gqsyzz8b6BmxRQlgF8abWFFTj4cs0Yr562v/zlJd/d0fi0clHA==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "md-date-time-picker": "2.2.0", + "moment": "2.15.1", + "ng2-activiti-form": "1.7.0", + "ng2-activiti-tasklist": "1.7.0", + "ng2-alfresco-core": "1.7.0", + "ng2-alfresco-datatable": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4239,6 +5997,32 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-activiti-tasklist/-/ng2-activiti-tasklist-1.7.0.tgz", "integrity": "sha512-R5Oq5wYW65QAspYH+4eR7Tyg/fqarc3crYi/CLHb/u6cAyA0Y8brvz10IBgqThbmUqfLb+8ba4hTSgiNSLadoQ==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "md-date-time-picker": "2.2.0", + "moment": "2.15.1", + "ng2-activiti-form": "1.7.0", + "ng2-alfresco-core": "1.7.0", + "ng2-alfresco-datatable": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4256,6 +6040,30 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-core/-/ng2-alfresco-core-1.7.0.tgz", "integrity": "sha512-dXKstITLFv3snsJDPdNr9EVzgeLCSefHfWuGKmNB8KWZeP4ZMT0KCMLcAK+e+8H40/4WJnkuANltAafZ898e7w==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/compiler-cli": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "material-design-icons": "2.2.3", + "material-design-lite": "1.2.1", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4273,6 +6081,28 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-datatable/-/ng2-alfresco-datatable-1.7.0.tgz", "integrity": "sha512-fLceBX0x9rsYqgJbig0raLFZb2O4zhpRX0bjOt1k5IvEeYwU39Ax851HMKbs7XjGXNf3C4uo4r0ra84SsWX7tg==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4290,6 +6120,29 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-documentlist/-/ng2-alfresco-documentlist-1.7.0.tgz", "integrity": "sha512-PmCK45W8FH7Y29TAEYwExNR7sY8urje5mvattuPJWWIT4HGzrRvJcmVFpXGehTWpE9iT7yJs4cmV+5plZA2ySQ==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "ng2-alfresco-datatable": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4307,6 +6160,27 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-login/-/ng2-alfresco-login-1.7.0.tgz", "integrity": "sha512-CXNpP8IwvU4yLrpnSM8GTLewz2KH8c/TE00OQEPPTTGWI4Gra0udrdNuiapnGdrjIf6/+gfSgeDM2B7QdRTdMw==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4324,6 +6198,30 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-search/-/ng2-alfresco-search-1.7.0.tgz", "integrity": "sha512-WcXw2jx8U5L84aTxLlJCCXxn1PfBjSHon5ohhv45oDYJxf4nZcD9YCNooQjFJQi5k/bdhJn+ONTH0M5b1UVgFg==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "ng2-alfresco-datatable": "1.7.0", + "ng2-alfresco-documentlist": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4341,6 +6239,28 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-social/-/ng2-alfresco-social-1.7.0.tgz", "integrity": "sha512-A3Ya2U6+f3jkhMhv8qFbLE4lHcqATNysAm9UCrtNxWrlX7jbhYJz4/ItcJkBAf/V91qU3f+nqCDX7JfhYgR3dQ==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.6.26" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4358,6 +6278,28 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-tag/-/ng2-alfresco-tag-1.7.0.tgz", "integrity": "sha512-x9XV6o/evuocr3B+gvD3YKuYazJOYMWen5UnjHqftpdj9swuP5yT4vAKm4RtGg+2hcEb0+gWR5fIoMgkpCsNAw==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4375,6 +6317,29 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-upload/-/ng2-alfresco-upload-1.7.0.tgz", "integrity": "sha512-TSczaf+wv8Jjr2ww6/vytmnENzTWuMcd7+pHkHPW+fq1b/Ht7kD9naaS2JKZZyW4ul16lLL08sf1bxi6og/AjQ==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "minimatch": "3.0.4", + "ng2-alfresco-core": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4392,6 +6357,28 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-userinfo/-/ng2-alfresco-userinfo-1.7.0.tgz", "integrity": "sha512-UMDrsqiNGTnxuQtsZIia66RUrOutZSGcLmVA3BAz78KvUR3wRONDFF0DqnQFT1M/UibEDYiNoAvn3AsKUjGfoQ==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4409,6 +6396,29 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-viewer/-/ng2-alfresco-viewer-1.7.0.tgz", "integrity": "sha512-DZX88nnQY1v43G7CLShVo4MtvA54hTOMZQfZDRehwaI//Q0A2D/MAjrsoVRjqD+SRjDSVQE25zWej6csGqLLwA==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "pdfjs-dist": "1.5.404", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4426,6 +6436,29 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ng2-alfresco-webscript/-/ng2-alfresco-webscript-1.7.0.tgz", "integrity": "sha512-bXAM2a+HqeYJgYOrAH/5LV4+BhqbIIOFaH8zny/05GWppTmzZHJu4VHT7XmG/wGy43DTo2J8YkHI4eHp+kFWig==", + "requires": { + "@angular/animations": "4.2.5", + "@angular/cdk": "2.0.0-beta.8", + "@angular/common": "4.2.5", + "@angular/compiler": "4.2.5", + "@angular/core": "4.2.5", + "@angular/forms": "4.2.5", + "@angular/http": "4.2.5", + "@angular/material": "2.0.0-beta.8", + "@angular/platform-browser": "4.2.5", + "@angular/platform-browser-dynamic": "4.2.5", + "@angular/router": "4.2.5", + "@ngx-translate/core": "7.0.0", + "alfresco-js-api": "1.7.0", + "core-js": "2.4.1", + "hammerjs": "2.0.8", + "ng2-alfresco-core": "1.7.0", + "ng2-alfresco-datatable": "1.7.0", + "reflect-metadata": "0.1.10", + "rxjs": "5.1.0", + "systemjs": "0.19.27", + "zone.js": "0.7.6" + }, "dependencies": { "reflect-metadata": { "version": "0.1.10", @@ -4443,11 +6476,18 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-1.6.0.tgz", "integrity": "sha512-9w0WH69x5/nuqC1og2WaY39NbaBqTGIP1+5gZaH7/KPN6UEPonNg/pYnsIVklLj1DWPWXKa8+XXIJZ1jy5nLxg==", + "requires": { + "chart.js": "2.6.0" + }, "dependencies": { "chart.js": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.6.0.tgz", - "integrity": "sha1-MI+aSwv+1aFUwU9d6x2UcNIqvnE=" + "integrity": "sha1-MI+aSwv+1aFUwU9d6x2UcNIqvnE=", + "requires": { + "chartjs-color": "2.1.0", + "moment": "2.15.1" + } } } }, @@ -4455,13 +6495,19 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz", "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=", - "dev": true + "dev": true, + "requires": { + "lower-case": "1.1.4" + } }, "node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", - "dev": true + "dev": true, + "requires": { + "minimatch": "3.0.4" + } }, "node-ensure": { "version": "0.0.0", @@ -4473,12 +6519,35 @@ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.4", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" + }, "dependencies": { "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "semver": { "version": "5.3.0", @@ -4493,6 +6562,31 @@ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.11.1", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.3", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + }, "dependencies": { "string_decoder": { "version": "0.10.31", @@ -4507,12 +6601,40 @@ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.6.2", + "node-gyp": "3.6.2", + "npmlog": "4.1.2", + "request": "2.81.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0" + }, "dependencies": { "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } } } }, @@ -4520,19 +6642,31 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true + "dev": true, + "requires": { + "abbrev": "1.0.9" + } }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.2" + } }, "normalize-range": { "version": "0.1.2", @@ -4544,19 +6678,34 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } }, "nth-check": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true + "dev": true, + "requires": { + "boolbase": "1.0.0" + } }, "null-check": { "version": "1.0.0", @@ -4604,7 +6753,11 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } }, "obuf": { "version": "1.1.1", @@ -4616,7 +6769,10 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, "on-headers": { "version": "1.0.1", @@ -4628,19 +6784,30 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "opn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } }, "oppsy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/oppsy/-/oppsy-1.0.2.tgz", "integrity": "sha1-mAFM1pZ2U6g8//pVQibckAULqtQ=", "dev": true, + "requires": { + "hoek": "4.2.0", + "items": "2.1.1" + }, "dependencies": { "hoek": { "version": "4.2.0", @@ -4655,6 +6822,10 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, "dependencies": { "minimist": { "version": "0.0.10", @@ -4669,6 +6840,14 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, "dependencies": { "wordwrap": { "version": "1.0.0", @@ -4689,12 +6868,19 @@ "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", "dev": true, + "requires": { + "url-parse": "1.0.5" + }, "dependencies": { "url-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } } } }, @@ -4714,7 +6900,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true + "dev": true, + "requires": { + "lcid": "1.0.0" + } }, "os-tmpdir": { "version": "1.0.2", @@ -4726,7 +6915,11 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "pako": { "version": "0.2.9", @@ -4738,19 +6931,35 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true + "dev": true, + "requires": { + "no-case": "2.3.1" + } }, "parse-asn1": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true + "dev": true, + "requires": { + "asn1.js": "4.9.1", + "browserify-aes": "1.0.6", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "pbkdf2": "3.0.12" + } }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, "dependencies": { "is-extglob": { "version": "1.0.0", @@ -4762,7 +6971,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } } } }, @@ -4770,25 +6982,37 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "parsejson": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true + "dev": true, + "requires": { + "better-assert": "1.0.2" + } }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true + "dev": true, + "requires": { + "better-assert": "1.0.2" + } }, "parseuri": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true + "dev": true, + "requires": { + "better-assert": "1.0.2" + } }, "parseurl": { "version": "1.3.1", @@ -4806,7 +7030,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -4830,18 +7057,33 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "pbkdf2": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", - "dev": true + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } }, "pdfjs-dist": { "version": "1.5.404", "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-1.5.404.tgz", - "integrity": "sha1-hYXGUWquIU1ZCXXo+ys8PzrxTO8=" + "integrity": "sha1-hYXGUWquIU1ZCXXo+ys8PzrxTO8=", + "requires": { + "node-ensure": "0.0.0" + } }, "performance-now": { "version": "0.2.0", @@ -4865,13 +7107,21 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "portfinder": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.8", + "mkdirp": "0.5.1" + }, "dependencies": { "async": { "version": "1.5.2", @@ -4886,12 +7136,21 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.1.9", + "source-map": "0.5.6", + "supports-color": "3.2.3" + }, "dependencies": { "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, @@ -4899,73 +7158,122 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + } }, "postcss-colormin": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-convert-values": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-discard-comments": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-discard-duplicates": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-discard-empty": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-discard-overridden": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-discard-unused": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "uniqs": "2.0.0" + } }, "postcss-filter-plugins": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "uniqid": "4.1.1" + } }, "postcss-merge-idents": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-merge-longhand": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-merge-rules": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "dev": true + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.17", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + } }, "postcss-message-helpers": { "version": "2.0.0", @@ -4977,49 +7285,84 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-minify-gradients": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-minify-params": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + } }, "postcss-minify-selectors": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-selector-parser": "2.2.3" + } }, "postcss-modules-extract-imports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", "dev": true, + "requires": { + "postcss": "6.0.8" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } }, "color-convert": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.3" + } }, "has-flag": { "version": "2.0.0", @@ -5031,13 +7374,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.2.1" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -5046,24 +7397,39 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.8" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } }, "color-convert": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.3" + } }, "has-flag": { "version": "2.0.0", @@ -5075,13 +7441,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.2.1" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -5090,24 +7464,39 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.8" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } }, "color-convert": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.3" + } }, "has-flag": { "version": "2.0.0", @@ -5119,13 +7508,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.2.1" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -5134,24 +7531,39 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.8" + }, "dependencies": { "ansi-styles": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true + "dev": true, + "requires": { + "color-convert": "1.9.0" + } }, "chalk": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } }, "color-convert": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true + "dev": true, + "requires": { + "color-name": "1.1.3" + } }, "has-flag": { "version": "2.0.0", @@ -5163,13 +7575,21 @@ "version": "6.0.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", - "dev": true + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.2.1" + } }, "supports-color": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -5177,55 +7597,96 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-normalize-url": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-ordered-values": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-reduce-idents": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-reduce-initial": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dev": true + "dev": true, + "requires": { + "postcss": "5.2.17" + } }, "postcss-reduce-transforms": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dev": true + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0" + } }, "postcss-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } }, "postcss-svgo": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.17", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + } }, "postcss-unique-selectors": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.17", + "uniqs": "2.0.0" + } }, "postcss-value-parser": { "version": "3.3.0", @@ -5237,7 +7698,12 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.17", + "uniqs": "2.0.0" + } }, "prelude-ls": { "version": "1.1.2", @@ -5261,7 +7727,11 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } }, "private": { "version": "0.1.7", @@ -5284,7 +7754,11 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", - "dev": true + "dev": true, + "requires": { + "forwarded": "0.1.0", + "ipaddr.js": "1.4.0" + } }, "prr": { "version": "0.0.0", @@ -5302,19 +7776,33 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.7", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } }, "pump": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "once": "1.4.0" + }, "dependencies": { "end-of-stream": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0" + } } } }, @@ -5322,7 +7810,12 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", - "dev": true + "dev": true, + "requires": { + "duplexify": "3.5.0", + "inherits": "2.0.3", + "pump": "1.0.2" + } }, "punycode": { "version": "1.4.1", @@ -5351,7 +7844,11 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } }, "querystring": { "version": "0.2.0", @@ -5376,18 +7873,28 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } } } }, @@ -5395,7 +7902,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } } } }, @@ -5403,7 +7913,10 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } }, "range-parser": { "version": "1.2.0", @@ -5414,13 +7927,21 @@ "raphael": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/raphael/-/raphael-2.2.7.tgz", - "integrity": "sha1-IxsZFB+NCGmG2PrOtm+LVi7iyBA=" + "integrity": "sha1-IxsZFB+NCGmG2PrOtm+LVi7iyBA=", + "requires": { + "eve-raphael": "0.5.0" + } }, "raw-body": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", - "dev": true + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.15", + "unpipe": "1.0.0" + } }, "raw-loader": { "version": "0.5.1", @@ -5432,30 +7953,60 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } }, "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==" + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } }, "recast": { "version": "0.11.23", "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "3.1.3", + "private": "0.1.7", + "source-map": "0.5.6" + }, "dependencies": { "esprima": { "version": "3.1.3", @@ -5469,13 +8020,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } }, "reduce-css-calc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + }, "dependencies": { "balanced-match": { "version": "0.4.2", @@ -5490,6 +8050,9 @@ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, + "requires": { + "balanced-match": "0.4.2" + }, "dependencies": { "balanced-match": { "version": "0.4.2", @@ -5514,13 +8077,22 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } }, "regexpu-core": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } }, "regjsgen": { "version": "0.2.0", @@ -5532,7 +8104,10 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true + "dev": true, + "requires": { + "jsesc": "0.5.0" + } }, "relateurl": { "version": "0.2.7", @@ -5544,7 +8119,15 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.9.5.tgz", "integrity": "sha1-oYYXsfMe7Fp9vud1OCmLd1YGqqg=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1", + "gulp-util": "3.0.7", + "istanbul": "0.4.5", + "minimatch": "3.0.4", + "source-map": "0.5.6", + "through2": "2.0.1" + } }, "remove-trailing-separator": { "version": "1.0.2", @@ -5557,6 +8140,13 @@ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, "dependencies": { "utila": { "version": "0.3.3", @@ -5582,7 +8172,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "replace-ext": { "version": "0.0.1", @@ -5595,12 +8188,41 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.16", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + }, "dependencies": { "form-data": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.16" + } }, "qs": { "version": "6.4.0", @@ -5638,19 +8260,33 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true + "dev": true, + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "dev": true, + "requires": { + "glob": "7.1.2" + }, "dependencies": { "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } } } }, @@ -5658,12 +8294,19 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } }, "rxjs": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.1.0.tgz", - "integrity": "sha1-CqkBi39EC1BfpCvXQrZzi+VQ5yA=" + "integrity": "sha1-CqkBi39EC1BfpCvXQrZzi+VQ5yA=", + "requires": { + "symbol-observable": "1.0.4" + } }, "safe-buffer": { "version": "5.1.1", @@ -5675,6 +8318,12 @@ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -5686,19 +8335,47 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "yargs": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } } } }, @@ -5707,12 +8384,24 @@ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.5.tgz", "integrity": "sha1-qEeRDzZEKqVsWYWHnVTrUZ4koyg=", "dev": true, + "requires": { + "async": "2.5.0", + "clone-deep": "0.2.4", + "loader-utils": "1.1.0", + "lodash.tail": "4.1.1", + "pify": "2.3.0" + }, "dependencies": { "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } } } }, @@ -5726,19 +8415,29 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.0.tgz", "integrity": "sha1-aF3H5waeDe56kmdPDrxbD1W6pew=", - "dev": true + "dev": true, + "requires": { + "raw-loader": "0.5.1" + } }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, + "requires": { + "js-base64": "2.1.9", + "source-map": "0.4.4" + }, "dependencies": { "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -5758,19 +8457,40 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", - "dev": true + "dev": true, + "requires": { + "semver": "5.4.1" + } }, "send": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", "dev": true, + "requires": { + "debug": "2.6.7", + "depd": "1.1.1", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "fresh": "0.5.0", + "http-errors": "1.6.1", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, "dependencies": { "debug": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "mime": { "version": "1.3.4", @@ -5790,13 +8510,28 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", - "dev": true + "dev": true, + "requires": { + "accepts": "1.3.3", + "batch": "0.6.1", + "debug": "2.6.8", + "escape-html": "1.0.3", + "http-errors": "1.6.1", + "mime-types": "2.1.16", + "parseurl": "1.3.1" + } }, "serve-static": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", - "dev": true + "dev": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.15.3" + } }, "set-blocking": { "version": "2.0.0", @@ -5826,19 +8561,31 @@ "version": "2.4.8", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "shallow-clone": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", "dev": true, + "requires": { + "is-extendable": "0.1.1", + "kind-of": "2.0.1", + "lazy-cache": "0.2.7", + "mixin-object": "2.0.1" + }, "dependencies": { "kind-of": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } }, "lazy-cache": { "version": "0.2.7", @@ -5858,19 +8605,34 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "socket.io": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -5891,12 +8653,19 @@ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -5911,12 +8680,28 @@ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "ms": { "version": "0.7.2", @@ -5931,6 +8716,12 @@ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, "dependencies": { "component-emitter": { "version": "1.1.2", @@ -5942,7 +8733,10 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "isarray": { "version": "0.0.1", @@ -5963,6 +8757,10 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "2.0.3" + }, "dependencies": { "uuid": { "version": "2.0.3", @@ -5977,12 +8775,23 @@ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.1.tgz", "integrity": "sha1-KEhD6al4TXxHSxVxsyQPyp3aS7A=", "dev": true, + "requires": { + "debug": "2.6.8", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.1.9" + }, "dependencies": { "faye-websocket": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } } } }, @@ -5990,7 +8799,10 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } }, "source-list-map": { "version": "0.1.8", @@ -6008,6 +8820,11 @@ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.1.6.tgz", "integrity": "sha1-wJkD2m1zueU7ftjuUkVZcFHpjpE=", "dev": true, + "requires": { + "async": "0.9.2", + "loader-utils": "0.2.17", + "source-map": "0.1.43" + }, "dependencies": { "async": { "version": "0.9.2", @@ -6019,20 +8836,31 @@ "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, "source-map-support": { "version": "0.4.15", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", - "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=" + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "requires": { + "source-map": "0.5.6" + } }, "sourcemap-istanbul-instrumenter-loader": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/sourcemap-istanbul-instrumenter-loader/-/sourcemap-istanbul-instrumenter-loader-0.2.0.tgz", "integrity": "sha1-j9cuir0W3tWJGKdHTbW7PQ27ys0=", - "dev": true + "dev": true, + "requires": { + "istanbul": "0.4.5", + "loader-utils": "0.2.17", + "object-assign": "4.1.1" + } }, "sparkles": { "version": "1.0.0", @@ -6044,7 +8872,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -6062,13 +8893,30 @@ "version": "3.4.7", "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.1", + "select-hose": "2.0.0", + "spdy-transport": "2.0.20" + } }, "spdy-transport": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.8", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "safe-buffer": "5.1.1", + "wbuf": "1.7.2" + } }, "sprintf-js": { "version": "1.1.1", @@ -6081,6 +8929,16 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -6100,19 +8958,33 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } }, "stream-browserify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } }, "stream-http": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "dev": true + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } }, "stream-shift": { "version": "1.0.0", @@ -6129,13 +9001,21 @@ "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==" + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "stringstream": { "version": "0.0.5", @@ -6147,30 +9027,54 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } }, "style-loader": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.1.tgz", "integrity": "sha1-RoKA77wEcwI806bNVuM7Wh1/w6k=", - "dev": true + "dev": true, + "requires": { + "loader-utils": "0.2.17" + } }, "superagent": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.4.1.tgz", - "integrity": "sha1-S9EnQSJNDs5tn3V/HDvsvn8kwRU=" + "integrity": "sha1-S9EnQSJNDs5tn3V/HDvsvn8kwRU=", + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.1.1", + "debug": "2.6.8", + "extend": "3.0.1", + "form-data": "2.2.0", + "formidable": "1.1.1", + "methods": "1.1.2", + "mime": "1.3.6", + "qs": "6.5.0", + "readable-stream": "2.3.3" + } }, "supports-color": { "version": "2.0.0", @@ -6182,7 +9086,16 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true + "dev": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + } }, "symbol-observable": { "version": "1.0.4", @@ -6192,7 +9105,10 @@ "systemjs": { "version": "0.19.27", "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.19.27.tgz", - "integrity": "sha1-8XQNVlzmQ3GsDecHKk0eVHG6e6I=" + "integrity": "sha1-8XQNVlzmQ3GsDecHKk0eVHG6e6I=", + "requires": { + "when": "3.7.8" + } }, "tapable": { "version": "0.2.7", @@ -6204,7 +9120,12 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } }, "three": { "version": "0.83.0", @@ -6215,6 +9136,9 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/three-mtl-loader/-/three-mtl-loader-1.0.1.tgz", "integrity": "sha1-wIlLxb2RfHTABDYel4scIiYAgos=", + "requires": { + "three": "0.79.0" + }, "dependencies": { "three": { "version": "0.79.0", @@ -6231,7 +9155,10 @@ "three-transformcontrols": { "version": "0.78.1", "resolved": "https://registry.npmjs.org/three-transformcontrols/-/three-transformcontrols-0.78.1.tgz", - "integrity": "sha1-vP8G9P0yOXQ9k8/DwfDUns5wtfQ=" + "integrity": "sha1-vP8G9P0yOXQ9k8/DwfDUns5wtfQ=", + "requires": { + "three": "0.83.0" + } }, "through": { "version": "2.3.8", @@ -6244,12 +9171,24 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", "dev": true, + "requires": { + "readable-stream": "2.0.6", + "xtend": "4.0.1" + }, "dependencies": { "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "0.10.31", @@ -6269,19 +9208,43 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.3.tgz", "integrity": "sha512-+JAqyNgg+M8+gXIrq2EeUr4kZqRz47Ysco7X5QKRGScRE9HIHckyHD1asozSFGeqx2nmPCgA8T5tIGVO0ML7/w==", - "dev": true + "dev": true, + "requires": { + "global": "4.3.2", + "setimmediate": "1.0.5" + } }, "tiny-lr": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", "dev": true, + "requires": { + "body-parser": "1.14.2", + "debug": "2.2.0", + "faye-websocket": "0.10.0", + "livereload-js": "2.2.2", + "parseurl": "1.3.1", + "qs": "5.1.0" + }, "dependencies": { "body-parser": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", "dev": true, + "requires": { + "bytes": "2.2.0", + "content-type": "1.0.2", + "debug": "2.2.0", + "depd": "1.1.1", + "http-errors": "1.3.1", + "iconv-lite": "0.4.13", + "on-finished": "2.3.0", + "qs": "5.2.0", + "raw-body": "2.1.7", + "type-is": "1.6.15" + }, "dependencies": { "qs": { "version": "5.2.0", @@ -6301,13 +9264,20 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "http-errors": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "statuses": "1.3.1" + } }, "iconv-lite": { "version": "0.4.13", @@ -6332,6 +9302,11 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, "dependencies": { "bytes": { "version": "2.4.0", @@ -6347,7 +9322,10 @@ "version": "0.0.31", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } }, "to-array": { "version": "0.1.4", @@ -6365,13 +9343,19 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/to-string-loader/-/to-string-loader-1.1.5.tgz", "integrity": "sha1-e3qheJG3u0lHp6Eb+wO1/enG5pU=", - "dev": true + "dev": true, + "requires": { + "loader-utils": "0.2.17" + } }, "topo": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", "dev": true, + "requires": { + "hoek": "4.2.0" + }, "dependencies": { "hoek": { "version": "4.2.0", @@ -6391,7 +9375,10 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1" + } }, "trim-newlines": { "version": "1.0.0", @@ -6404,19 +9391,36 @@ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-2.2.1.tgz", "integrity": "sha512-IYWWyD4g2OJ3f/NfZN1RuvI1U0TEKnAt6Jw2psc/931GBaNCrNLuFmcdwsK/9e2J5wlMBemxtAxmOOGmHRP3YA==", "dev": true, + "requires": { + "colors": "1.1.2", + "enhanced-resolve": "3.4.1", + "loader-utils": "1.1.0", + "semver": "5.4.1" + }, "dependencies": { "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } } } }, "tsickle": { "version": "0.21.6", "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz", - "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=" + "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=", + "requires": { + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map": "0.5.6", + "source-map-support": "0.4.15" + } }, "tslib": { "version": "1.7.1", @@ -6428,18 +9432,41 @@ "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.5.0.tgz", "integrity": "sha1-EOjas+MGH6YelELozuOYKs8gpqo=", "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "colors": "1.1.2", + "commander": "2.11.0", + "diff": "3.3.0", + "glob": "7.1.2", + "minimatch": "3.0.4", + "resolve": "1.4.0", + "semver": "5.4.1", + "tslib": "1.7.1", + "tsutils": "2.8.0" + }, "dependencies": { "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "resolve": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", - "dev": true + "dev": true, + "requires": { + "path-parse": "1.0.5" + } } } }, @@ -6448,12 +9475,24 @@ "resolved": "https://registry.npmjs.org/tslint-loader/-/tslint-loader-3.5.3.tgz", "integrity": "sha1-ND90Ei2U81a2iUV9P1n2SmmrYG8=", "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "rimraf": "2.6.1", + "semver": "5.4.1" + }, "dependencies": { "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } } } }, @@ -6461,7 +9500,10 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.8.0.tgz", "integrity": "sha1-AWAXNymzvxOGKN0UoVN+AIUdgUo=", - "dev": true + "dev": true, + "requires": { + "tslib": "1.7.1" + } }, "tty-browserify": { "version": "0.0.0", @@ -6473,7 +9515,10 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -6486,13 +9531,20 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.16" + } }, "typescript": { "version": "2.3.4", @@ -6504,7 +9556,11 @@ "version": "3.0.27", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.27.tgz", "integrity": "sha512-HD8CmxPXUI62v5tweiulMcP/apAtx1DXGcNZkhKQZyC+MTrTsoCBb8yPAwVrbvpgw3EpRU76bRe6axjIiCYcQg==", - "dev": true + "dev": true, + "requires": { + "commander": "2.11.0", + "source-map": "0.5.6" + } }, "uglify-to-browserify": { "version": "1.0.2", @@ -6522,12 +9578,18 @@ "unidragger": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unidragger/-/unidragger-2.1.0.tgz", - "integrity": "sha1-5MI/X6uBiMY353bQs4EMfZieVWE=" + "integrity": "sha1-5MI/X6uBiMY353bQs4EMfZieVWE=", + "requires": { + "unipointer": "2.1.0" + } }, "unipointer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unipointer/-/unipointer-2.1.0.tgz", - "integrity": "sha1-sen6KYbBMG2XMwWHukNNKFzP438=" + "integrity": "sha1-sen6KYbBMG2XMwWHukNNKFzP438=", + "requires": { + "ev-emitter": "1.0.3" + } }, "uniq": { "version": "1.0.1", @@ -6539,7 +9601,10 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "dev": true + "dev": true, + "requires": { + "macaddress": "0.2.8" + } }, "uniqs": { "version": "2.0.0", @@ -6564,6 +9629,10 @@ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, "dependencies": { "punycode": { "version": "1.3.2", @@ -6578,6 +9647,10 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, "dependencies": { "querystringify": { "version": "1.0.0", @@ -6591,13 +9664,20 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.2.4", + "tmp": "0.0.31" + } }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { "version": "2.0.1", @@ -6634,7 +9714,11 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "vary": { "version": "1.1.1", @@ -6652,19 +9736,30 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } }, "vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true + "dev": true, + "requires": { + "indexof": "0.0.1" + } }, "void-elements": { "version": "2.0.1", @@ -6676,19 +9771,49 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", - "dev": true + "dev": true, + "requires": { + "async": "2.5.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + } }, "wbuf": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", - "dev": true + "dev": true, + "requires": { + "minimalistic-assert": "1.0.0" + } }, "webpack": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.2.1.tgz", "integrity": "sha1-e7HXKuIIfdGkr1Jq/sFe7RfdpHU=", "dev": true, + "requires": { + "acorn": "4.0.13", + "acorn-dynamic-import": "2.0.2", + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "async": "2.5.0", + "enhanced-resolve": "3.4.1", + "interpret": "1.0.3", + "json-loader": "0.5.7", + "loader-runner": "2.3.0", + "loader-utils": "0.2.17", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.0.0", + "source-map": "0.5.6", + "supports-color": "3.2.3", + "tapable": "0.2.7", + "uglify-js": "2.8.29", + "watchpack": "1.4.0", + "webpack-sources": "0.1.5", + "yargs": "6.6.0" + }, "dependencies": { "camelcase": { "version": "1.2.1", @@ -6700,19 +9825,33 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } } } }, @@ -6721,6 +9860,21 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -6732,7 +9886,12 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } } } }, @@ -6741,6 +9900,9 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", "dev": true, + "requires": { + "camelcase": "3.0.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -6757,6 +9919,13 @@ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.3.6", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + }, "dependencies": { "time-stamp": { "version": "2.0.0", @@ -6771,6 +9940,25 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.3.0.tgz", "integrity": "sha1-BDdwS71NlBpuTAYes8wjLtfQYQE=", "dev": true, + "requires": { + "ansi-html": "0.0.7", + "chokidar": "1.7.0", + "compression": "1.7.0", + "connect-history-api-fallback": "1.3.0", + "express": "4.15.3", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "opn": "4.0.2", + "portfinder": "1.0.13", + "serve-index": "1.9.0", + "sockjs": "0.3.18", + "sockjs-client": "1.1.1", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "3.2.3", + "webpack-dev-middleware": "1.12.0", + "yargs": "6.6.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -6782,25 +9970,51 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } }, "yargs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } }, "yargs-parser": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0" + } } } }, @@ -6808,19 +10022,29 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-2.6.1.tgz", "integrity": "sha1-8dgB0sXTn4P/7J8RkkCz476ZShw=", - "dev": true + "dev": true, + "requires": { + "lodash": "4.17.4" + } }, "webpack-sources": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", - "dev": true + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.5.6" + } }, "websocket-driver": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true + "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + } }, "websocket-extensions": { "version": "0.1.1", @@ -6843,7 +10067,10 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "which-module": { "version": "1.0.0", @@ -6855,7 +10082,10 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "window-size": { "version": "0.1.0", @@ -6873,7 +10103,11 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } }, "wrappy": { "version": "1.0.2", @@ -6885,13 +10119,30 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", - "dev": true + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } }, "wsrv": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/wsrv/-/wsrv-0.1.6.tgz", "integrity": "sha1-2MR7bnhRfHNDjaJL3X9CbhERAmk=", "dev": true, + "requires": { + "chokidar": "1.7.0", + "good": "7.2.0", + "good-console": "6.4.0", + "good-squeeze": "3.0.1", + "hapi": "13.5.3", + "inert": "4.2.1", + "livereload-js": "2.2.2", + "lodash": "4.17.4", + "opn": "4.0.2", + "tiny-lr": "0.2.1", + "yargs": "4.8.1" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -6903,7 +10154,12 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "window-size": { "version": "0.2.0", @@ -6915,13 +10171,33 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "dev": true + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "lodash.assign": "4.2.0", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + } }, "yargs-parser": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "dev": true + "dev": true, + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" + } } } }, @@ -6967,6 +10243,12 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + }, "dependencies": { "camelcase": { "version": "1.2.1", @@ -6982,6 +10264,9 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, + "requires": { + "camelcase": "3.0.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", diff --git a/demo-shell-ng2/public/css/angular-material.css b/demo-shell-ng2/public/css/angular-material.css index fa322a0833..f1b23116c4 100644 --- a/demo-shell-ng2/public/css/angular-material.css +++ b/demo-shell-ng2/public/css/angular-material.css @@ -1 +1,2 @@ + .md-ripple-background,.md-ripple-foreground{background-color:rgba(0,0,0,.0588);position:absolute}.md-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.md-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}.md-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.md-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}.md-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.md-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}.md-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.md-elevation-z7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.md-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.md-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.md-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.md-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.md-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.md-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.md-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.md-elevation-z15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.md-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.md-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.md-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.md-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.md-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.md-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.md-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.md-elevation-z23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.md-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}[md-ripple]{overflow:hidden}[md-ripple].mdRippleUnbounded{overflow:visible}.md-ripple-background{opacity:0;transition:opacity .3s linear;left:0;top:0;right:0;bottom:0}.mdRippleUnbounded .md-ripple-background{display:none}.md-ripple-background.md-ripple-active,.mdRippleFocused .md-ripple-background{opacity:1}.md-ripple-foreground{border-radius:50%;pointer-events:none;opacity:.25;transition:opacity,transform 0s cubic-bezier(0,0,.2,1)}.md-ripple-foreground.md-ripple-fade-in{opacity:1}.md-ripple-foreground.md-ripple-fade-out{opacity:0}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;text-transform:none;width:1px}.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.48}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.6)}.cdk-overlay-transparent-backdrop{background:0 0}.mdRippleFocused .md-ripple-background{background-color:rgba(255,215,64,.1)}[md-button].md-button-focus.md-primary .md-button-focus-overlay,[md-fab].md-button-focus.md-primary .md-button-focus-overlay,[md-icon-button].md-button-focus.md-primary .md-button-focus-overlay,[md-mini-fab].md-button-focus.md-primary .md-button-focus-overlay,[md-raised-button].md-button-focus.md-primary .md-button-focus-overlay{background-color:rgba(103,58,183,.12)}[md-button].md-button-focus.md-accent .md-button-focus-overlay,[md-fab].md-button-focus.md-accent .md-button-focus-overlay,[md-icon-button].md-button-focus.md-accent .md-button-focus-overlay,[md-mini-fab].md-button-focus.md-accent .md-button-focus-overlay,[md-raised-button].md-button-focus.md-accent .md-button-focus-overlay{background-color:rgba(255,215,64,.12)}[md-button].md-button-focus.md-warn .md-button-focus-overlay,[md-fab].md-button-focus.md-warn .md-button-focus-overlay,[md-icon-button].md-button-focus.md-warn .md-button-focus-overlay,[md-mini-fab].md-button-focus.md-warn .md-button-focus-overlay,[md-raised-button].md-button-focus.md-warn .md-button-focus-overlay{background-color:rgba(244,67,54,.12)}[md-button],[md-icon-button]{background:0 0}[md-button].md-primary,[md-icon-button].md-primary{color:#ffa520}[md-button].md-accent,[md-icon-button].md-accent{color:#ffd740}[md-button].md-warn,[md-icon-button].md-warn{color:#f44336}[md-button].md-accent[disabled],[md-button].md-primary[disabled],[md-button].md-warn[disabled],[md-button][disabled][disabled],[md-icon-button].md-accent[disabled],[md-icon-button].md-primary[disabled],[md-icon-button].md-warn[disabled],[md-icon-button][disabled][disabled]{color:rgba(0,0,0,.38)}[md-button]:hover.md-primary .md-button-focus-overlay,[md-icon-button]:hover.md-primary .md-button-focus-overlay{background-color:rgba(103,58,183,.12)}[md-button]:hover.md-accent .md-button-focus-overlay,[md-icon-button]:hover.md-accent .md-button-focus-overlay{background-color:rgba(255,215,64,.12)}[md-button]:hover.md-warn .md-button-focus-overlay,[md-icon-button]:hover.md-warn .md-button-focus-overlay{background-color:rgba(244,67,54,.12)}[md-fab],[md-mini-fab],[md-raised-button]{background-color:#fafafa}[md-fab].md-primary,[md-mini-fab].md-primary,[md-raised-button].md-primary{color:rgba(255,255,255,.87);background-color:#ffa520}[md-fab].md-accent,[md-mini-fab].md-accent,[md-raised-button].md-accent{color:rgba(0,0,0,.87);background-color:#ffd740}[md-fab].md-warn,[md-mini-fab].md-warn,[md-raised-button].md-warn{color:#fff;background-color:#f44336}[md-fab].md-accent[disabled],[md-fab].md-primary[disabled],[md-fab].md-warn[disabled],[md-fab][disabled][disabled],[md-mini-fab].md-accent[disabled],[md-mini-fab].md-primary[disabled],[md-mini-fab].md-warn[disabled],[md-mini-fab][disabled][disabled],[md-raised-button].md-accent[disabled],[md-raised-button].md-primary[disabled],[md-raised-button].md-warn[disabled],[md-raised-button][disabled][disabled]{color:rgba(0,0,0,.38);background-color:rgba(0,0,0,.12)}[md-fab],[md-mini-fab]{background-color:#ffd740;color:rgba(0,0,0,.87)}.md-button-toggle-checked .md-button-toggle-label-content{background-color:#e0e0e0}.md-button-toggle-disabled .md-button-toggle-label-content{background-color:rgba(0,0,0,.38)}md-card{background:#fff;color:#000}md-card-subtitle{color:rgba(0,0,0,.54)}.md-checkbox-frame{border-color:rgba(0,0,0,.54)}.md-checkbox-checkmark{fill:#fafafa}.md-checkbox-checkmark-path{stroke:#fafafa!important}.md-checkbox-mixedmark{background-color:#fafafa}.md-checkbox-checked.md-primary .md-checkbox-background,.md-checkbox-indeterminate.md-primary .md-checkbox-background{background-color:#ffa520}.md-checkbox-checked.md-accent .md-checkbox-background,.md-checkbox-indeterminate.md-accent .md-checkbox-background{background-color:#1fbcd2}.md-checkbox-checked.md-warn .md-checkbox-background,.md-checkbox-indeterminate.md-warn .md-checkbox-background{background-color:#f44336}.md-checkbox-disabled.md-checkbox-checked .md-checkbox-background,.md-checkbox-disabled.md-checkbox-indeterminate .md-checkbox-background{background-color:#b0b0b0}.md-checkbox-disabled:not(.md-checkbox-checked) .md-checkbox-frame{border-color:#b0b0b0}.md-checkbox:not(.md-checkbox-disabled).md-primary .md-checkbox-ripple .md-ripple-foreground{background-color:rgba(103,58,183,.26)}.md-checkbox:not(.md-checkbox-disabled).md-accent .md-checkbox-ripple .md-ripple-foreground{background-color:rgba(255,215,64,.26)}.md-checkbox:not(.md-checkbox-disabled).md-warn .md-checkbox-ripple .md-ripple-foreground{background-color:rgba(244,67,54,.26)}.md-chip:not(.md-basic-chip){background-color:#e0e0e0;color:rgba(0,0,0,.87)}.md-chip.md-chip-selected:not(.md-basic-chip){background-color:grey;color:rgba(255,255,255,.87)}.md-chip.md-chip-selected:not(.md-basic-chip).md-primary{background-color:#ffa520;color:rgba(255,255,255,.87)}.md-chip.md-chip-selected:not(.md-basic-chip).md-accent{background-color:#1fbcd2;color:#ffffff}.md-chip.md-chip-selected:not(.md-basic-chip).md-warn{background-color:#f44336;color:#fff}md-dialog-container{background:#fff}md-icon.md-primary{color:#ffa520}md-icon.md-accent{color:#ffd740}md-icon.md-warn{color:#f44336}.md-input-placeholder{color:rgba(0,0,0,.38)}.md-input-placeholder.md-focused{color:#ffa520}.md-input-placeholder.md-focused.md-accent{color:#ffd740}.md-input-placeholder.md-focused.md-warn{color:#f44336}.md-input-placeholder.md-float.md-focused .md-placeholder-required,input.md-input-element:-webkit-autofill+.md-input-placeholder .md-placeholder-required{color:#ffd740}[md-menu-item] md-icon,md-list [md-subheader],md-nav-list [md-subheader]{color:rgba(0,0,0,.54)}.md-input-underline{border-color:rgba(0,0,0,.12)}.md-input-underline .md-input-ripple{background-color:#ffa520}.md-input-underline .md-input-ripple.md-accent{background-color:#ffd740}.md-input-underline .md-input-ripple.md-warn{background-color:#f44336}md-list a[md-list-item],md-list md-list-item,md-nav-list a[md-list-item],md-nav-list md-list-item{color:#000}md-divider{border-top-color:rgba(0,0,0,.12)}md-nav-list .md-list-item.md-list-item-focus,md-nav-list .md-list-item:hover{background:rgba(0,0,0,.04)}.md-menu-content{background:#fff}[md-menu-item]{background:0 0;color:rgba(0,0,0,.87)}[md-menu-item][disabled]{color:rgba(0,0,0,.38)}[md-menu-item]:focus:not([disabled]),[md-menu-item]:hover:not([disabled]){background:rgba(0,0,0,.04)}.md-progress-bar-background{background:url(data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27#d1c4e9%27%2F%3E%3C%2Fsvg%3E)}.md-progress-bar-buffer{background-color:#d1c4e9}.md-progress-bar-fill::after{background-color:#5e35b1}md-progress-bar.md-accent .md-progress-bar-background{background:url(data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27#ffecb3%27%2F%3E%3C%2Fsvg%3E)}md-progress-bar.md-accent .md-progress-bar-buffer{background-color:#ffecb3}md-progress-bar.md-accent .md-progress-bar-fill::after{background-color:#ffb300}md-progress-bar.md-warn .md-progress-bar-background{background:url(data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%271.1%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20xmlns%3Axlink%3D%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%27%20x%3D%270px%27%20y%3D%270px%27%20enable-background%3D%27new%200%200%205%202%27%20xml%3Aspace%3D%27preserve%27%20viewBox%3D%270%200%205%202%27%20preserveAspectRatio%3D%27none%20slice%27%3E%3Ccircle%20cx%3D%271%27%20cy%3D%271%27%20r%3D%271%27%20fill%3D%27#ffcdd2%27%2F%3E%3C%2Fsvg%3E)}md-progress-bar.md-warn .md-progress-bar-buffer{background-color:#ffcdd2}md-progress-bar.md-warn .md-progress-bar-fill::after{background-color:#e53935}md-progress-circle path,md-progress-spinner path,md-spinner path{stroke:#5e35b1}md-progress-circle.md-accent path,md-progress-spinner.md-accent path,md-spinner.md-accent path{stroke:#ffb300}md-progress-circle.md-warn path,md-progress-spinner.md-warn path,md-spinner.md-warn path{stroke:#e53935}.md-radio-outer-circle{border-color:rgba(0,0,0,.54)}.md-radio-checked .md-radio-outer-circle{border-color:#ffd740}.md-radio-disabled .md-radio-outer-circle{border-color:rgba(0,0,0,.38)}.md-radio-inner-circle{background-color:#ffd740}.md-radio-disabled .md-radio-inner-circle{background-color:rgba(0,0,0,.38)}.md-radio-ripple .md-ripple-foreground{background-color:rgba(255,215,64,.26)}.md-radio-disabled .md-radio-ripple .md-ripple-foreground{background-color:rgba(0,0,0,.38)}.md-select-trigger{color:rgba(0,0,0,.38);border-bottom:1px solid rgba(0,0,0,.12)}md-select:focus:not(.md-select-disabled) .md-select-trigger{color:#ffa520;border-bottom:1px solid #ffa520}md-select.ng-invalid.ng-touched:not(.md-select-disabled) .md-select-trigger{color:#f44336;border-bottom:1px solid #f44336}.md-select-arrow{color:rgba(0,0,0,.38)}md-select:focus:not(.md-select-disabled) .md-select-arrow{color:#ffa520}md-select.ng-invalid.ng-touched:not(.md-select-disabled) .md-select-arrow{color:#f44336}.md-select-content{background:#fff}md-option.md-selected,md-option:focus:not(.md-option-disabled),md-option:hover:not(.md-option-disabled){background:rgba(0,0,0,.04)}.md-select-value{color:rgba(0,0,0,.87)}.md-select-disabled .md-select-value{color:rgba(0,0,0,.38)}md-option.md-selected{color:#ffa520}md-option.md-option-disabled{color:rgba(0,0,0,.38)}.md-sidenav-container,.md-slider-thumb-label-text,md-sidenav,md-toolbar{color:rgba(0,0,0,.87)}.md-sidenav-container{background-color:#fafafa}md-sidenav,md-sidenav.md-sidenav-push{background-color:#fff}.md-sidenav-backdrop.md-sidenav-shown{background-color:rgba(0,0,0,.6)}md-slide-toggle.md-checked:not(.md-disabled) .md-slide-toggle-thumb{background-color:#1fbcd2}md-slide-toggle.md-checked:not(.md-disabled) .md-slide-toggle-bar{background-color:rgba(255,193,7,.5)}md-slide-toggle.md-slide-toggle-focused:not(.md-checked) .md-ink-ripple{background-color:rgba(0,0,0,.12)}md-slide-toggle.md-slide-toggle-focused .md-ink-ripple{background-color:rgba(255,193,7,.26)}md-slide-toggle.md-primary.md-checked:not(.md-disabled) .md-slide-toggle-thumb{background-color:#ffa520}md-slide-toggle.md-primary.md-checked:not(.md-disabled) .md-slide-toggle-bar{background-color:rgba(103,58,183,.5)}md-slide-toggle.md-primary.md-slide-toggle-focused:not(.md-checked) .md-ink-ripple{background-color:rgba(0,0,0,.12)}md-slide-toggle.md-primary.md-slide-toggle-focused .md-ink-ripple{background-color:rgba(103,58,183,.26)}md-slide-toggle.md-warn.md-checked:not(.md-disabled) .md-slide-toggle-thumb{background-color:#f44336}md-slide-toggle.md-warn.md-checked:not(.md-disabled) .md-slide-toggle-bar{background-color:rgba(244,67,54,.5)}md-slide-toggle.md-warn.md-slide-toggle-focused:not(.md-checked) .md-ink-ripple{background-color:rgba(0,0,0,.12)}md-slide-toggle.md-warn.md-slide-toggle-focused .md-ink-ripple{background-color:rgba(244,67,54,.26)}.md-disabled .md-slide-toggle-thumb{background-color:#bdbdbd}.md-disabled .md-slide-toggle-bar{background-color:rgba(0,0,0,.1)}.md-slide-toggle-thumb{background-color:#fafafa}.md-slide-toggle-bar{background-color:rgba(0,0,0,.38)}.md-slider-track{background-color:rgba(0,0,0,.26)}.md-slider-thumb,.md-slider-thumb-label,.md-slider-track-fill{background-color:#ffd740}.md-tab-header,[md-tab-nav-bar]{border-bottom:1px solid #e0e0e0}.md-tab-label:focus{background-color:rgba(209,196,233,.3)}md-ink-bar{background-color:#ffa520}md-toolbar{background:#f5f5f5}md-toolbar.md-primary{background:#ffa520;color:rgba(255,255,255,.87)}md-toolbar.md-accent{background:#ffd740;color:rgba(0,0,0,.87)}md-toolbar.md-warn{background:#f44336;color:#fff}.md-tooltip{background:rgba(97,97,97,.9)} diff --git a/ng2-components/config/webpack.common.js b/ng2-components/config/webpack.common.js index ee3127f1c7..bc704bb3bf 100644 --- a/ng2-components/config/webpack.common.js +++ b/ng2-components/config/webpack.common.js @@ -103,7 +103,7 @@ module.exports = { exclude: [/node_modules/, /bundles/, /dist/, /demo/] }, { - test: /\.component.scss$/, + test: /\.scss$/, use: [{ loader: "to-string-loader" }, { diff --git a/ng2-components/ng2-activiti-analytics/index.ts b/ng2-components/ng2-activiti-analytics/index.ts index 8b64a86104..89f9b15c45 100644 --- a/ng2-components/ng2-activiti-analytics/index.ts +++ b/ng2-components/ng2-activiti-analytics/index.ts @@ -37,9 +37,6 @@ export * from './src/components/analytics-report-parameters.component'; export * from './src/services/analytics.service'; export * from './src/components/widgets/index'; -// exporting models -export * from './src/models/index'; - export const ANALYTICS_DIRECTIVES: any[] = [ AnalyticsComponent, AnalyticsReportListComponent, diff --git a/ng2-components/ng2-activiti-analytics/src/assets/analyticsParamsReportComponent.mock.ts b/ng2-components/ng2-activiti-analytics/src/assets/analyticsParamsReportComponent.mock.ts index 3571eba6df..c08a74749f 100644 --- a/ng2-components/ng2-activiti-analytics/src/assets/analyticsParamsReportComponent.mock.ts +++ b/ng2-components/ng2-activiti-analytics/src/assets/analyticsParamsReportComponent.mock.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { ReportParameterDetailsModel } from '../models/report.model'; +import { ReportParameterDetailsModel } from 'ng2-activiti-diagrams'; export let reportDefParamStatus = { 'id': 2005, diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-generator.component.spec.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-generator.component.spec.ts index a0770741e3..10f2e1f6d5 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-generator.component.spec.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-generator.component.spec.ts @@ -23,14 +23,14 @@ import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core'; import { ChartsModule } from 'ng2-charts'; import { Observable } from 'rxjs/Rx'; +import { Chart } from 'ng2-activiti-diagrams'; +import { ReportQuery } from 'ng2-activiti-diagrams'; import * as analyticMock from '../assets/analyticsComponent.mock'; import { AnalyticsGeneratorComponent } from '../components/analytics-generator.component'; import { AnalyticsReportHeatMapComponent } from '../components/analytics-report-heat-map.component'; import { AnalyticsReportListComponent } from '../components/analytics-report-list.component'; import { AnalyticsReportParametersComponent } from '../components/analytics-report-parameters.component'; import { WIDGET_DIRECTIVES } from '../components/widgets/index'; -import { Chart } from '../models/chart.model'; -import { ReportQuery } from '../models/report.model'; import { AnalyticsService } from '../services/analytics.service'; export const ANALYTICS_DIRECTIVES: any[] = [ diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-generator.component.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-generator.component.ts index 7a61006b23..c8c4830cf7 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-generator.component.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-generator.component.ts @@ -16,9 +16,9 @@ */ import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core'; +import { ReportQuery } from 'ng2-activiti-diagrams'; +import { Chart } from 'ng2-activiti-diagrams'; import { AlfrescoTranslationService } from 'ng2-alfresco-core'; -import { Chart } from '../models/chart.model'; -import { ReportQuery } from '../models/report.model'; import { AnalyticsService } from '../services/analytics.service'; @Component({ diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.spec.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.spec.ts index d233342bd0..4b59567da6 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.spec.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.spec.ts @@ -17,10 +17,10 @@ import { DebugElement } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReportParametersModel } from 'ng2-activiti-diagrams'; import { AlfrescoTranslationService, AppConfigModule, CoreModule } from 'ng2-alfresco-core'; import { Observable } from 'rxjs/Rx'; import { AnalyticsReportListComponent } from '../components/analytics-report-list.component'; -import { ReportParametersModel } from '../models/report.model'; import { AnalyticsService } from '../services/analytics.service'; declare let jasmine: any; diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.ts index 2576752caf..f7b3d2e4c6 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-list.component.ts @@ -16,8 +16,8 @@ */ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { ReportParametersModel } from 'ng2-activiti-diagrams'; import { Observable, Observer } from 'rxjs/Rx'; -import { ReportParametersModel } from '../models/report.model'; import { AnalyticsService } from '../services/analytics.service'; @Component({ diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.spec.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.spec.ts index 60a7f3ea99..3ac18c3a66 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.spec.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.spec.ts @@ -22,10 +22,10 @@ import * as moment from 'moment'; import { AlfrescoTranslationService, AppConfigModule, CoreModule } from 'ng2-alfresco-core'; import { Observable } from 'rxjs/Rx'; +import { ReportParametersModel } from 'ng2-activiti-diagrams'; import * as analyticParamsMock from '../assets/analyticsParamsReportComponent.mock'; import { AnalyticsReportParametersComponent } from '../components/analytics-report-parameters.component'; import { WIDGET_DIRECTIVES } from '../components/widgets/index'; -import { ReportParametersModel } from '../models/report.model'; import { AnalyticsService } from '../services/analytics.service'; declare let jasmine: any; @@ -210,6 +210,7 @@ describe('AnalyticsReportParametersComponent', () => { typeFiltering: true } }; + component.submit(values); }); diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.ts index 00a559e468..5db3f2806d 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics-report-parameters.component.ts @@ -30,13 +30,13 @@ import { } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import * as moment from 'moment'; -import { AlfrescoTranslationService, ContentService, LogService } from 'ng2-alfresco-core'; import { ParameterValueModel, ReportParameterDetailsModel, ReportParametersModel, ReportQuery -} from '../models/report.model'; +} from 'ng2-activiti-diagrams'; +import { AlfrescoTranslationService, ContentService, LogService } from 'ng2-alfresco-core'; import { AnalyticsService } from '../services/analytics.service'; declare var componentHandler; diff --git a/ng2-components/ng2-activiti-analytics/src/components/analytics.component.ts b/ng2-components/ng2-activiti-analytics/src/components/analytics.component.ts index 9851302e0d..bd0edb6e7d 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/analytics.component.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/analytics.component.ts @@ -16,8 +16,8 @@ */ import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core'; +import { ReportQuery } from 'ng2-activiti-diagrams'; import { AlfrescoTranslationService } from 'ng2-alfresco-core'; -import { ReportQuery } from '../models/report.model'; import { AnalyticsGeneratorComponent } from './analytics-generator.component'; @Component({ diff --git a/ng2-components/ng2-activiti-analytics/src/components/widgets/duration/duration.widget.ts b/ng2-components/ng2-activiti-analytics/src/components/widgets/duration/duration.widget.ts index 17d06f1388..001ddf2487 100644 --- a/ng2-components/ng2-activiti-analytics/src/components/widgets/duration/duration.widget.ts +++ b/ng2-components/ng2-activiti-analytics/src/components/widgets/duration/duration.widget.ts @@ -20,7 +20,7 @@ /* tslint:disable::no-access-missing-member */ import { Component, ElementRef, Input, OnInit } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; -import { ParameterValueModel, ReportParameterDetailsModel } from './../../../models/report.model'; +import { ParameterValueModel, ReportParameterDetailsModel } from 'ng2-activiti-diagrams'; import { NumberWidgetComponent } from './../number/number.widget'; @Component({ diff --git a/ng2-components/ng2-activiti-analytics/src/models/chart.model.ts b/ng2-components/ng2-activiti-analytics/src/models/chart.model.ts deleted file mode 100644 index ba875e6e94..0000000000 --- a/ng2-components/ng2-activiti-analytics/src/models/chart.model.ts +++ /dev/null @@ -1,307 +0,0 @@ -/*! - * @license - * Copyright 2016 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as moment from 'moment'; - -export class Chart { - id: string; - type: string; - icon: string; - - constructor(obj?: any) { - this.id = obj && obj.id || null; - if (obj && obj.type) { - this.type = this.convertType(obj.type); - this.icon = this.getIconType(this.type); - } - } - - private convertType(type: string) { - let chartType = ''; - switch (type) { - case 'pieChart': - chartType = 'pie'; - break; - case 'table': - chartType = 'table'; - break; - case 'line': - chartType = 'line'; - break; - case 'barChart': - chartType = 'bar'; - break; - case 'multiBarChart': - chartType = 'multiBar'; - break; - case 'processDefinitionHeatMap': - chartType = 'HeatMap'; - break; - case 'masterDetailTable': - chartType = 'masterDetailTable'; - break; - default: - chartType = 'table'; - break; - } - return chartType; - } - - private getIconType(type: string): string { - let typeIcon: string = ''; - switch (type) { - case 'pie': - typeIcon = 'pie_chart'; - break; - case 'table': - typeIcon = 'web'; - break; - case 'line': - typeIcon = 'show_chart'; - break; - case 'bar': - typeIcon = 'equalizer'; - break; - case 'multiBar': - typeIcon = 'poll'; - break; - case 'HeatMap': - typeIcon = 'share'; - break; - case 'masterDetailTable': - typeIcon = 'subtitles'; - break; - default: - typeIcon = 'web'; - break; - } - return typeIcon; - } -} - -export class LineChart extends Chart { - title: string; - titleKey: string; - labels: string[] = []; - datasets: any[] = []; - - constructor(obj?: any) { - super(obj); - this.title = obj && obj.title || null; - this.titleKey = obj && obj.titleKey || null; - this.labels = obj && obj.columnNames.slice(1, obj.columnNames.length); - - obj.rows.forEach((value: any) => { - this.datasets.push({data: value.slice(1, value.length), label: value[0]}); - }); - } -} - -export class BarChart extends Chart { - title: string; - titleKey: string; - labels: any = []; - datasets: any[] = []; - data: any[] = []; - xAxisType: string; - yAxisType: string; - options: any = { - responsive: true, - scales: { - yAxes: [{ - ticks: { - beginAtZero: true, - stepSize: 1 - } - }], - xAxes: [{ - ticks: { - }, - stacked: false - }] - } - }; - - constructor(obj?: any) { - super(obj); - this.title = obj && obj.title || null; - this.titleKey = obj && obj.titleKey || null; - this.xAxisType = obj && obj.xAxisType || null; - this.yAxisType = obj && obj.yAxisType || null; - this.options.scales.xAxes[0].ticks.callback = this.xAxisTickFormatFunction(this.xAxisType); - this.options.scales.yAxes[0].ticks.callback = this.yAxisTickFormatFunction(this.yAxisType); - if (obj.values) { - obj.values.forEach((params: any) => { - let dataValue = []; - params.values.forEach((info: any) => { - info.forEach((value: any, index: any) => { - if (index % 2 === 0) { - if (!this.labels.includes(value)) { - this.labels.push(value); - } - } else { - dataValue.push(value); - } - }); - }); - if (dataValue && dataValue.length > 0) { - this.datasets.push({data: dataValue, label: params.key}); - } - }); - } - } - - xAxisTickFormatFunction = function (xAxisType) { - return function (value) { - if (xAxisType !== null && xAxisType !== undefined) { - if ('date_day' === xAxisType) { - return moment(new Date(value)).format('DD'); - } else if ('date_month' === xAxisType) { - return moment(new Date(value)).format('MMMM'); - } else if ('date_year' === xAxisType) { - return moment(new Date(value)).format('YYYY'); - } - } - return value; - }; - }; - - yAxisTickFormatFunction = function (yAxisType) { - return function (value) { - if (yAxisType !== null && yAxisType !== undefined) { - if ('count' === yAxisType) { - let label = '' + value; - if (label.indexOf('.') !== -1) { - return ''; - } - } - } - return value; - }; - }; - - hasDatasets() { - return this.datasets && this.datasets.length > 0 ? true : false; - } -} - -export class MultiBarChart extends BarChart { - - constructor(obj?: any) { - super(obj); - } -} - -export class TableChart extends Chart { - title: string; - titleKey: string; - labels: string[] = []; - datasets: any[] = []; - - constructor(obj?: any) { - super(obj); - this.title = obj && obj.title || null; - this.titleKey = obj && obj.titleKey || null; - this.labels = obj && obj.columnNames; - if (obj.rows) { - this.datasets = obj && obj.rows; - } - } - - hasDatasets() { - return this.datasets && this.datasets.length > 0 ? true : false; - } -} - -export class DetailsTableChart extends TableChart { - detailsTable: any; - showDetails: boolean = false; - - constructor(obj?: any) { - super(obj); - if (obj.detailTables) { - this.detailsTable = new TableChart(obj.detailTables[0]); - } - } - - hasDetailsTable() { - return this.detailsTable ? true : false; - } -} - -export class HeatMapChart extends Chart { - avgTimePercentages: string; - avgTimeValues: string; - processDefinitionId: string; - titleKey: string; - totalCountValues: string; - totalCountsPercentages: string; - totalTimePercentages: string; - totalTimeValues: string; - - constructor(obj?: any) { - super(obj); - this.avgTimePercentages = obj && obj.avgTimePercentages || null; - this.avgTimeValues = obj && obj.avgTimeValues || null; - this.processDefinitionId = obj && obj.processDefinitionId || null; - this.totalCountValues = obj && obj.totalCountValues || null; - this.titleKey = obj && obj.titleKey || null; - this.totalCountsPercentages = obj && obj.totalCountsPercentages || null; - this.totalTimePercentages = obj && obj.totalTimePercentages || null; - this.totalTimeValues = obj && obj.totalTimeValues || null; - } -} - -export class PieChart extends Chart { - title: string; - titleKey: string; - labels: string[] = []; - data: string[] = []; - - constructor(obj?: any) { - super(obj); - this.title = obj && obj.title || null; - this.titleKey = obj && obj.titleKey || null; - if (obj.values) { - obj.values.forEach((value: any) => { - this.add(value.key, value.y); - }); - } - } - - add(label: string, data: string) { - this.labels.push(label); - this.data.push(data); - } - - hasData(): boolean { - return this.data && this.data.length > 0 ? true : false; - } - - hasZeroValues(): boolean { - let isZeroValues: boolean = false; - if (this.hasData()) { - isZeroValues = true; - this.data.forEach((value) => { - if (value.toString() !== '0') { - isZeroValues = false; - } - }); - } - return isZeroValues; - } -} diff --git a/ng2-components/ng2-activiti-analytics/src/models/report.model.ts b/ng2-components/ng2-activiti-analytics/src/models/report.model.ts deleted file mode 100644 index 5014a3c0e3..0000000000 --- a/ng2-components/ng2-activiti-analytics/src/models/report.model.ts +++ /dev/null @@ -1,144 +0,0 @@ -/*! - * @license - * Copyright 2016 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * - * This object represent the report definition. - * - * - * @returns {ReportParametersModel} . - */ -export class ReportParametersModel { - id: number; - name: string; - definition: ReportDefinitionModel; - created: string; - - constructor(obj?: any) { - this.id = obj && obj.id; - this.name = obj && obj.name || null; - if (obj && obj.definition) { - this.definition = new ReportDefinitionModel(JSON.parse(obj.definition)); - } - this.created = obj && obj.created || null; - } - - hasParameters() { - return (this.definition && this.definition.parameters && this.definition.parameters.length > 0) ? true : false; - } -} - -export class ReportDefinitionModel { - parameters: ReportParameterDetailsModel[] = []; - - constructor(obj?: any) { - obj.parameters.forEach((params: any) => { - let reportParamsModel = new ReportParameterDetailsModel(params); - this.parameters.push(reportParamsModel); - }); - } - - findParam(name: string): ReportParameterDetailsModel { - this.parameters.forEach((param) => { - return param.type === name ? param : null; - }); - return null; - } -} - -/** - * - * This object represent the report parameter definition. - * - * - * @returns {ReportParameterDetailsModel} . - */ -export class ReportParameterDetailsModel { - id: string; - name: string; - nameKey: string; - type: string; - value: any; - options: ParameterValueModel[]; - dependsOn: string; - - constructor(obj?: any) { - this.id = obj && obj.id; - this.name = obj && obj.name || null; - this.nameKey = obj && obj.nameKey || null; - this.type = obj && obj.type || null; - this.value = obj && obj.value || null; - this.options = obj && obj.options || null; - this.dependsOn = obj && obj.dependsOn || null; - } -} - -export class ParameterValueModel { - id: string; - name: string; - version: string; - value: string; - - constructor(obj?: any) { - this.id = obj && obj.id; - this.name = obj && obj.name || null; - this.value = obj && obj.value || null; - this.version = obj && obj.version || null; - } - - get label () { - return this.version ? `${this.name} (v ${this.version}) ` : this.name; - } -} - -export class ReportQuery { - reportName: string; - processDefinitionId: string; - status: string; - taskName: string; - typeFiltering: boolean; - dateRange: ReportDateRange; - dateRangeInterval: string; - slowProcessInstanceInteger: number; - duration: number; - - constructor(obj?: any) { - this.reportName = obj && obj.reportName || null; - this.processDefinitionId = obj && obj.processDefinitionId || null; - this.status = obj && obj.status || null; - this.taskName = obj && obj.taskName || null; - this.dateRangeInterval = obj && obj.dateRangeInterval || null; - this.typeFiltering = obj && obj.typeFiltering || true; - this.slowProcessInstanceInteger = obj && obj.slowProcessInstanceInteger || 0; - this.duration = obj && obj.duration || 0; - this.dateRange = new ReportDateRange(obj); - } - -} - -export class ReportDateRange { - startDate: string; - endDate: string; - rangeId: string; - - constructor(obj?: any) { - this.startDate = obj && obj.startDate || null; - this.endDate = obj && obj.endDate || null; - this.rangeId = obj && obj.rangeId || null; - } - -} diff --git a/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts b/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts index 765ba58f9f..58fd59aac0 100644 --- a/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts +++ b/ng2-components/ng2-activiti-analytics/src/services/analytics.service.ts @@ -17,8 +17,7 @@ import { Injectable } from '@angular/core'; import { Response } from '@angular/http'; -import { AlfrescoApiService, LogService } from 'ng2-alfresco-core'; -import { Observable } from 'rxjs/Rx'; +import { ParameterValueModel, ReportParametersModel } from 'ng2-activiti-diagrams'; import { BarChart, Chart, @@ -27,8 +26,9 @@ import { MultiBarChart, PieChart, TableChart -} from '../models/chart.model'; -import { ParameterValueModel, ReportParametersModel } from '../models/report.model'; +} from 'ng2-activiti-diagrams'; +import { AlfrescoApiService, LogService } from 'ng2-alfresco-core'; +import { Observable } from 'rxjs/Rx'; @Injectable() export class AnalyticsService { diff --git a/ng2-components/ng2-activiti-diagrams/index.ts b/ng2-components/ng2-activiti-diagrams/index.ts index a3b91c059c..9eff92b7ba 100644 --- a/ng2-components/ng2-activiti-diagrams/index.ts +++ b/ng2-components/ng2-activiti-diagrams/index.ts @@ -26,6 +26,7 @@ import { RAPHAEL_PROVIDERS } from './src/components/raphael/index'; // primitives export * from './src/components/index'; export * from './src/components/raphael/index'; +export * from './src/models/index'; @NgModule({ imports: [ diff --git a/ng2-components/ng2-activiti-diagrams/src/models/chart.model.ts b/ng2-components/ng2-activiti-diagrams/src/models/chart.model.ts index bba431596e..60ba76f766 100644 --- a/ng2-components/ng2-activiti-diagrams/src/models/chart.model.ts +++ b/ng2-components/ng2-activiti-diagrams/src/models/chart.model.ts @@ -15,14 +15,18 @@ * limitations under the License. */ +import * as moment from 'moment'; + export class Chart { id: string; type: string; + icon: string; constructor(obj?: any) { this.id = obj && obj.id || null; if (obj && obj.type) { this.type = this.convertType(obj.type); + this.icon = this.getIconType(this.type); } } @@ -41,15 +45,52 @@ export class Chart { case 'barChart': chartType = 'bar'; break; + case 'multiBarChart': + chartType = 'multiBar'; + break; case 'processDefinitionHeatMap': chartType = 'HeatMap'; break; + case 'masterDetailTable': + chartType = 'masterDetailTable'; + break; default: chartType = 'table'; break; } return chartType; } + + private getIconType(type: string): string { + let typeIcon: string = ''; + switch (type) { + case 'pie': + typeIcon = 'pie_chart'; + break; + case 'table': + typeIcon = 'web'; + break; + case 'line': + typeIcon = 'show_chart'; + break; + case 'bar': + typeIcon = 'equalizer'; + break; + case 'multiBar': + typeIcon = 'poll'; + break; + case 'HeatMap': + typeIcon = 'share'; + break; + case 'masterDetailTable': + typeIcon = 'subtitles'; + break; + default: + typeIcon = 'web'; + break; + } + return typeIcon; + } } export class LineChart extends Chart { @@ -73,16 +114,24 @@ export class LineChart extends Chart { export class BarChart extends Chart { title: string; titleKey: string; - labels: string[] = []; + labels: any = []; datasets: any[] = []; data: any[] = []; + xAxisType: string; + yAxisType: string; options: any = { + responsive: true, scales: { yAxes: [{ ticks: { beginAtZero: true, stepSize: 1 } + }], + xAxes: [{ + ticks: { + }, + stacked: false }] } }; @@ -91,28 +140,72 @@ export class BarChart extends Chart { super(obj); this.title = obj && obj.title || null; this.titleKey = obj && obj.titleKey || null; - obj.values.forEach((params: any) => { - let dataValue = []; - params.values.forEach((info: any) => { - info.forEach((value: any, index: any) => { - if (index % 2 === 0) { - this.labels.push(value); - } else { - dataValue.push(value); - } + this.xAxisType = obj && obj.xAxisType || null; + this.yAxisType = obj && obj.yAxisType || null; + this.options.scales.xAxes[0].ticks.callback = this.xAxisTickFormatFunction(this.xAxisType); + this.options.scales.yAxes[0].ticks.callback = this.yAxisTickFormatFunction(this.yAxisType); + if (obj.values) { + obj.values.forEach((params: any) => { + let dataValue = []; + params.values.forEach((info: any) => { + info.forEach((value: any, index: any) => { + if (index % 2 === 0) { + if (!this.labels.includes(value)) { + this.labels.push(value); + } + } else { + dataValue.push(value); + } + }); }); + if (dataValue && dataValue.length > 0) { + this.datasets.push({data: dataValue, label: params.key}); + } }); - if (dataValue && dataValue.length > 0) { - this.datasets.push({data: dataValue, label: params.key}); - } - }); + } } + xAxisTickFormatFunction = function (xAxisType) { + return function (value) { + if (xAxisType !== null && xAxisType !== undefined) { + if ('date_day' === xAxisType) { + return moment(new Date(value)).format('DD'); + } else if ('date_month' === xAxisType) { + return moment(new Date(value)).format('MMMM'); + } else if ('date_year' === xAxisType) { + return moment(new Date(value)).format('YYYY'); + } + } + return value; + }; + }; + + yAxisTickFormatFunction = function (yAxisType) { + return function (value) { + if (yAxisType !== null && yAxisType !== undefined) { + if ('count' === yAxisType) { + let label = '' + value; + if (label.indexOf('.') !== -1) { + return ''; + } + } + } + return value; + }; + }; + hasDatasets() { return this.datasets && this.datasets.length > 0 ? true : false; } } +export class MultiBarChart extends BarChart { + + constructor(obj?: any) { + super(obj); + } +} + export class TableChart extends Chart { title: string; titleKey: string; @@ -134,6 +227,22 @@ export class TableChart extends Chart { } } +export class DetailsTableChart extends TableChart { + detailsTable: any; + showDetails: boolean = false; + + constructor(obj?: any) { + super(obj); + if (obj.detailTables) { + this.detailsTable = new TableChart(obj.detailTables[0]); + } + } + + hasDetailsTable() { + return this.detailsTable ? true : false; + } +} + export class HeatMapChart extends Chart { avgTimePercentages: string; avgTimeValues: string; @@ -179,7 +288,20 @@ export class PieChart extends Chart { this.data.push(data); } - hasData() { + hasData(): boolean { return this.data && this.data.length > 0 ? true : false; } + + hasZeroValues(): boolean { + let isZeroValues: boolean = false; + if (this.hasData()) { + isZeroValues = true; + this.data.forEach((value) => { + if (value.toString() !== '0') { + isZeroValues = false; + } + }); + } + return isZeroValues; + } } diff --git a/ng2-components/ng2-activiti-diagrams/src/models/diagram.model.ts b/ng2-components/ng2-activiti-diagrams/src/models/diagram.model.ts index a50e1fc604..2b92024cfd 100644 --- a/ng2-components/ng2-activiti-diagrams/src/models/diagram.model.ts +++ b/ng2-components/ng2-activiti-diagrams/src/models/diagram.model.ts @@ -67,8 +67,8 @@ export class DiagramElementModel { constructor(obj?: any) { if (obj) { - this.completed = obj.completed || false; - this.current = obj.current || false; + this.completed = !!obj.completed; + this.current = !!obj.current; this.height = obj.height || ''; this.id = obj.id || ''; this.name = obj.name || ''; @@ -117,8 +117,8 @@ export class DiagramFlowElementModel { constructor(obj?: any) { if (obj) { - this.completed = obj.completed || false; - this.current = obj.current || false; + this.completed = !!obj.completed; + this.current = !!obj.current; this.id = obj.id; this.properties = obj.properties; this.sourceRef = obj.sourceRef; diff --git a/ng2-components/ng2-activiti-analytics/src/models/index.ts b/ng2-components/ng2-activiti-diagrams/src/models/index.ts similarity index 100% rename from ng2-components/ng2-activiti-analytics/src/models/index.ts rename to ng2-components/ng2-activiti-diagrams/src/models/index.ts diff --git a/ng2-components/ng2-activiti-diagrams/src/models/report.model.ts b/ng2-components/ng2-activiti-diagrams/src/models/report.model.ts index 549f841add..e8cd9f2584 100644 --- a/ng2-components/ng2-activiti-diagrams/src/models/report.model.ts +++ b/ng2-components/ng2-activiti-diagrams/src/models/report.model.ts @@ -38,7 +38,7 @@ export class ReportParametersModel { } hasParameters() { - return (this.definition && this.definition.parameters) ? true : false; + return (this.definition && this.definition.parameters && this.definition.parameters.length > 0) ? true : false; } } @@ -72,7 +72,7 @@ export class ReportParameterDetailsModel { name: string; nameKey: string; type: string; - value: string; + value: any; options: ParameterValueModel[]; dependsOn: string; @@ -106,6 +106,7 @@ export class ParameterValueModel { } export class ReportQuery { + reportName: string; processDefinitionId: string; status: string; taskName: string; @@ -116,24 +117,28 @@ export class ReportQuery { duration: number; constructor(obj?: any) { + this.reportName = obj && obj.reportName || null; this.processDefinitionId = obj && obj.processDefinitionId || null; this.status = obj && obj.status || null; this.taskName = obj && obj.taskName || null; this.dateRangeInterval = obj && obj.dateRangeInterval || null; - this.typeFiltering = obj && obj.typeFiltering || true; + this.typeFiltering = obj && (typeof obj.typeFiltering !== 'undefined') ? obj.typeFiltering : true; this.slowProcessInstanceInteger = obj && obj.slowProcessInstanceInteger || 0; this.duration = obj && obj.duration || 0; this.dateRange = new ReportDateRange(obj); } + } export class ReportDateRange { startDate: string; endDate: string; + rangeId: string; constructor(obj?: any) { this.startDate = obj && obj.startDate || null; this.endDate = obj && obj.endDate || null; + this.rangeId = obj && obj.rangeId || null; } } diff --git a/ng2-components/ng2-activiti-form/README.md b/ng2-components/ng2-activiti-form/README.md index bfbc45143d..9ef77fe58b 100644 --- a/ng2-components/ng2-activiti-form/README.md +++ b/ng2-components/ng2-activiti-form/README.md @@ -9,10 +9,12 @@ * [Services](#services) - [Prerequisites](#prerequisites) - [Install](#install) -- [ActivitiForm Component](#activitiform-component) +- [Form Component](#form-component) * [Properties](#properties) + + [Form Field Validators](#form-field-validators) * [Advanced properties](#advanced-properties) * [Events](#events) + * [Custom empty form template](#custom-empty-form-template) * [Controlling outcome execution behaviour](#controlling-outcome-execution-behaviour) - [Activiti Content Component](#activiti-content-component) * [Properties](#properties-1) @@ -226,6 +228,21 @@ onFormSaved(form: FormModel) { } ``` +### Custom empty form template + +You can add a template that will be show if no form definition has been found + +```html + + +
+

Empty form

+
+ +
+ +``` + ### Controlling outcome execution behaviour If absolutely needed it is possible taking full control over form outcome execution by means of `executeOutcome` event. diff --git a/ng2-components/ng2-activiti-form/index.ts b/ng2-components/ng2-activiti-form/index.ts index 5f86b0cd1c..293ea0ab3f 100644 --- a/ng2-components/ng2-activiti-form/index.ts +++ b/ng2-components/ng2-activiti-form/index.ts @@ -17,14 +17,16 @@ import { ModuleWithProviders, NgModule } from '@angular/core'; import { HttpModule } from '@angular/http'; -import { MdButtonModule, MdCardModule, MdCheckboxModule, MdIconModule, MdInputModule, MdSlideToggleModule, MdTabsModule } from '@angular/material'; +import { MdAutocompleteModule, MdButtonModule, MdCardModule, MdCheckboxModule, + MdDatepickerModule, MdGridListModule, MdIconModule, MdInputModule, MdListModule, + MdOptionModule, MdRadioModule, MdSelectModule, MdSlideToggleModule, MdTableModule, MdTabsModule } from '@angular/material'; import { CoreModule } from 'ng2-alfresco-core'; import { DataTableModule } from 'ng2-alfresco-datatable'; -import { ActivitiContentComponent } from './src/components/activiti-content.component'; import { FormFieldComponent } from './src/components/form-field/form-field.component'; import { FormListComponent } from './src/components/form-list.component'; import { FormComponent } from './src/components/form.component'; import { StartFormComponent } from './src/components/start-form.component'; +import { ContentWidgetComponent } from './src/components/widgets/content/content.widget'; import { MASK_DIRECTIVE, WIDGET_DIRECTIVES } from './src/components/widgets/index'; import { ActivitiAlfrescoContentService } from './src/services/activiti-alfresco.service'; import { ActivitiContentService } from './src/services/activiti-content-service'; @@ -36,7 +38,7 @@ import { WidgetVisibilityService } from './src/services/widget-visibility.servic export * from './src/components/form.component'; export * from './src/components/form-list.component'; -export * from './src/components/activiti-content.component'; +export * from './src/components/widgets/content/content.widget'; export * from './src/components/start-form.component'; export * from './src/services/form.service'; export * from './src/services/activiti-content-service'; @@ -47,22 +49,23 @@ export * from './src/services/form-rendering.service'; export * from './src/events/index'; // Old deprecated import -import {ActivitiContentComponent as ActivitiContent } from './src/components/activiti-content.component'; import {FormComponent as ActivitiForm } from './src/components/form.component'; import {StartFormComponent as ActivitiStartForm } from './src/components/start-form.component'; +import {ContentWidgetComponent as ActivitiContent } from './src/components/widgets/content/content.widget'; export {FormComponent as ActivitiForm} from './src/components/form.component'; -export {ActivitiContentComponent as ActivitiContent} from './src/components/activiti-content.component'; +export {ContentWidgetComponent as ActivitiContent} from './src/components/widgets/content/content.widget'; export {StartFormComponent as ActivitiStartForm} from './src/components/start-form.component'; export const ACTIVITI_FORM_DIRECTIVES: any[] = [ FormComponent, FormListComponent, - ActivitiContentComponent, + ContentWidgetComponent, StartFormComponent, FormFieldComponent, - ...WIDGET_DIRECTIVES, + ...WIDGET_DIRECTIVES +]; - // Old Deprecated export +export const DEPRECATED_FORM_DIRECTIVES: any[] = [ ActivitiForm, ActivitiContent, ActivitiStartForm @@ -78,21 +81,22 @@ export const ACTIVITI_FORM_PROVIDERS: any[] = [ FormRenderingService ]; +export const MATERIAL_MODULE: any[] = [ + MdAutocompleteModule, MdButtonModule, MdCardModule, MdCheckboxModule, + MdDatepickerModule, MdGridListModule, MdIconModule, MdInputModule, MdRadioModule, + MdSelectModule, MdSlideToggleModule, MdTableModule, MdTabsModule, MdOptionModule, MdListModule +]; + @NgModule({ imports: [ CoreModule, DataTableModule, HttpModule, - MdCheckboxModule, - MdTabsModule, - MdCardModule, - MdButtonModule, - MdIconModule, - MdSlideToggleModule, - MdInputModule + ...MATERIAL_MODULE ], declarations: [ ...ACTIVITI_FORM_DIRECTIVES, + ...DEPRECATED_FORM_DIRECTIVES, ...MASK_DIRECTIVE ], entryComponents: [ @@ -103,13 +107,8 @@ export const ACTIVITI_FORM_PROVIDERS: any[] = [ ], exports: [ ...ACTIVITI_FORM_DIRECTIVES, - MdCheckboxModule, - MdTabsModule, - MdCardModule, - MdButtonModule, - MdIconModule, - MdSlideToggleModule, - MdInputModule + ...DEPRECATED_FORM_DIRECTIVES, + ...MATERIAL_MODULE ] }) export class ActivitiFormModule { diff --git a/ng2-components/ng2-activiti-form/karma.conf.js b/ng2-components/ng2-activiti-form/karma.conf.js index 484bfd5d7d..fbd2d6c49a 100644 --- a/ng2-components/ng2-activiti-form/karma.conf.js +++ b/ng2-components/ng2-activiti-form/karma.conf.js @@ -13,10 +13,8 @@ module.exports = function (config) { //diagrams './node_modules/alfresco-js-api/dist/alfresco-js-api.js', './node_modules/moment/min/moment.min.js', - './node_modules/md-date-time-picker/dist/js/mdDateTimePicker.js', {pattern: './node_modules/ng2-translate/**/*.js', included: false, watched: false}, - {pattern: './node_modules/md-date-time-picker/**/*.js', included: false, served: true, watched: false}, {pattern: './node_modules/moment/**/*.js', included: false, served: true, watched: false}, {pattern: 'karma-test-shim.js', watched: false}, diff --git a/ng2-components/ng2-activiti-form/package.json b/ng2-components/ng2-activiti-form/package.json index 09c1ca37dd..1d2254ba4b 100644 --- a/ng2-components/ng2-activiti-form/package.json +++ b/ng2-components/ng2-activiti-form/package.json @@ -50,7 +50,6 @@ "alfresco-js-api": "1.7.0", "core-js": "2.4.1", "hammerjs": "2.0.8", - "md-date-time-picker": "2.2.0", "moment": "2.15.1", "ng2-alfresco-core": "1.7.0", "reflect-metadata": "0.1.10", diff --git a/ng2-components/ng2-activiti-form/src/components/activiti-content.component.css b/ng2-components/ng2-activiti-form/src/components/activiti-content.component.css deleted file mode 100644 index 76bc08da82..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/activiti-content.component.css +++ /dev/null @@ -1,46 +0,0 @@ -.upload-widget { - width: 100%; - word-break: break-all; -} - -.upload-widget__content { - min-height: auto; -} - -.upload-widget__icon { - float: left; - color: rgba(0, 0, 0, .26); -} - -.upload-widget__file { - float: left; - margin-top: 4px; - color: rgba(0, 0, 0, .26); -} - -.upload-widget__label { - color: rgba(0, 0, 0, .26); -} - -.img-upload-widget { - width: 100%; - height: 100%; - border: 1px solid rgba(117, 117, 117, 0.57); - box-shadow: 1px 1px 2px #dddddd; - background-color: #ffffff; -} - -.nothing-to-see { - box-shadow: 1px 1px 2px #dddddd; - background-color: #ffffff; - width: 100%; - height: 100%; - padding: 50px 0 50px 0; - text-align: center; -} - -.previewTxt { - word-wrap: break-word; - word-break: break-all; - text-align: center; -} diff --git a/ng2-components/ng2-activiti-form/src/components/activiti-content.component.html b/ng2-components/ng2-activiti-form/src/components/activiti-content.component.html deleted file mode 100644 index 16d8309842..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/activiti-content.component.html +++ /dev/null @@ -1,23 +0,0 @@ -
-
-
-
- -
-
- image -
{{ 'FORM.PREVIEW.IMAGE_NOT_AVAILABLE' | translate }}
-
-
-
{{content.name}}
- -
- - -
-
-
diff --git a/ng2-components/ng2-activiti-form/src/components/form-field/form-field.component.spec.ts b/ng2-components/ng2-activiti-form/src/components/form-field/form-field.component.spec.ts index 87c57a6eb1..246c1d119f 100644 --- a/ng2-components/ng2-activiti-form/src/components/form-field/form-field.component.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/form-field/form-field.component.spec.ts @@ -16,7 +16,9 @@ */ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { MdInputModule } from '@angular/material'; import { CoreModule } from 'ng2-alfresco-core'; +import { ErrorWidgetComponent } from '../widgets/error/error.component'; import { FormRenderingService } from './../../services/form-rendering.service'; import { WidgetVisibilityService } from './../../services/widget-visibility.service'; import { CheckboxWidgetComponent } from './../widgets/checkbox/checkbox.widget'; @@ -29,15 +31,21 @@ describe('FormFieldComponent', () => { let fixture: ComponentFixture; let component: FormFieldComponent; - let componentHandler: any; let form: FormModel; let formRenderingService: FormRenderingService; beforeEach(async(() => { TestBed.configureTestingModule({ - imports: [CoreModule], - declarations: [FormFieldComponent, TextWidgetComponent, CheckboxWidgetComponent, InputMaskDirective], + imports: [CoreModule, + MdInputModule + ], + declarations: [ + FormFieldComponent, + TextWidgetComponent, + CheckboxWidgetComponent, + InputMaskDirective, + ErrorWidgetComponent], providers: [ FormRenderingService, WidgetVisibilityService @@ -47,12 +55,6 @@ describe('FormFieldComponent', () => { })); beforeEach(() => { - componentHandler = jasmine.createSpyObj('componentHandler', [ - 'upgradeAllRegistered', - 'upgradeElement' - ]); - window['componentHandler'] = componentHandler; - fixture = TestBed.createComponent(FormFieldComponent); component = fixture.componentInstance; formRenderingService = fixture.debugElement.injector.get(FormRenderingService); @@ -84,13 +86,6 @@ describe('FormFieldComponent', () => { expect(component.componentRef.componentType).toBe(CheckboxWidgetComponent); }); - it('should require field to create component', () => { - component.field = null; - fixture.detectChanges(); - - expect(component.componentRef).toBeUndefined(); - }); - it('should require component type to be resolved', () => { let field = new FormFieldModel(form, { type: FormFieldTypes.TEXT diff --git a/ng2-components/ng2-activiti-form/src/components/form-field/form-field.component.ts b/ng2-components/ng2-activiti-form/src/components/form-field/form-field.component.ts index 13261ac2cd..918cec07f4 100644 --- a/ng2-components/ng2-activiti-form/src/components/form-field/form-field.component.ts +++ b/ng2-components/ng2-activiti-form/src/components/form-field/form-field.component.ts @@ -26,7 +26,8 @@ import { OnDestroy, OnInit, ViewChild, - ViewContainerRef + ViewContainerRef, + ViewEncapsulation } from '@angular/core'; import { CoreModule } from 'ng2-alfresco-core'; @@ -41,10 +42,14 @@ declare var adf: any; @Component({ selector: 'adf-form-field, form-field', template: ` -
+
- ` + `, + encapsulation: ViewEncapsulation.None }) export class FormFieldComponent implements OnInit, OnDestroy { @@ -56,33 +61,35 @@ export class FormFieldComponent implements OnInit, OnDestroy { componentRef: ComponentRef<{}>; - constructor( - private formRenderingService: FormRenderingService, - private componentFactoryResolver: ComponentFactoryResolver, - private visibilityService: WidgetVisibilityService, - private compiler: Compiler) { + focus: boolean = false; + + constructor(private formRenderingService: FormRenderingService, + private componentFactoryResolver: ComponentFactoryResolver, + private visibilityService: WidgetVisibilityService, + private compiler: Compiler) { } ngOnInit() { - if (this.field) { - let customTemplate = this.field.form.customFieldTemplates[this.field.type]; - if (customTemplate && this.hasController(this.field.type)) { - let factory = this.getComponentFactorySync(this.field.type, customTemplate); + let originalField = this.getField(); + if (originalField) { + let customTemplate = this.field.form.customFieldTemplates[originalField.type]; + if (customTemplate && this.hasController(originalField.type)) { + let factory = this.getComponentFactorySync(originalField.type, customTemplate); this.componentRef = this.container.createComponent(factory); let instance: any = this.componentRef.instance; if (instance) { - instance.field = this.field; + instance.field = originalField; } } else { - let componentType = this.formRenderingService.resolveComponentType(this.field); + let componentType = this.formRenderingService.resolveComponentType(originalField); if (componentType) { let factory = this.componentFactoryResolver.resolveComponentFactory(componentType); this.componentRef = this.container.createComponent(factory); let instance = this.componentRef.instance; instance.field = this.field; instance.fieldChanged.subscribe(field => { - if (field && field.form) { - this.visibilityService.refreshVisibility(field.form); + if (field && this.field.form) { + this.visibilityService.refreshVisibility(this.field.form); } }); } @@ -97,6 +104,10 @@ export class FormFieldComponent implements OnInit, OnDestroy { } } + private getField() { + return (this.field.params && this.field.params.field) ? this.field.params.field : this.field; + } + private hasController(type: string): boolean { return (adf && adf.components && adf.components[type]); } @@ -119,14 +130,19 @@ export class FormFieldComponent implements OnInit, OnDestroy { } private createComponentFactorySync(compiler: Compiler, metadata: Component, componentClass: any): ComponentFactory { - const cmpClass = componentClass || class RuntimeComponent { }; + const cmpClass = componentClass || class RuntimeComponent { + }; const decoratedCmp = Component(metadata)(cmpClass); @NgModule({ imports: [CoreModule], declarations: [decoratedCmp] }) - class RuntimeComponentModule { } + class RuntimeComponentModule { + } let module: ModuleWithComponentFactories = compiler.compileModuleAndAllComponentsSync(RuntimeComponentModule); return module.componentFactories.find(x => x.componentType === decoratedCmp); } + focusToggle() { + this.focus = !this.focus; + } } diff --git a/ng2-components/ng2-activiti-form/src/components/form-list.component.css b/ng2-components/ng2-activiti-form/src/components/form-list.component.scss similarity index 100% rename from ng2-components/ng2-activiti-form/src/components/form-list.component.css rename to ng2-components/ng2-activiti-form/src/components/form-list.component.scss diff --git a/ng2-components/ng2-activiti-form/src/components/form-list.component.spec.ts b/ng2-components/ng2-activiti-form/src/components/form-list.component.spec.ts index 105458bcd6..3c90453058 100644 --- a/ng2-components/ng2-activiti-form/src/components/form-list.component.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/form-list.component.spec.ts @@ -20,24 +20,23 @@ import { By } from '@angular/platform-browser'; import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core'; import { DataTableModule } from 'ng2-alfresco-datatable'; import { Observable } from 'rxjs/Rx'; +import { MATERIAL_MODULE } from '../../index'; import { EcmModelService } from '../services/ecm-model.service'; import { FormService } from '../services/form.service'; import { FormListComponent } from './form-list.component'; -declare let jasmine: any; - describe('TaskAttachmentList', () => { let component: FormListComponent; let fixture: ComponentFixture; let service: FormService; - let componentHandler: any; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ CoreModule.forRoot(), - DataTableModule + DataTableModule, + MATERIAL_MODULE ], declarations: [ FormListComponent @@ -53,12 +52,6 @@ describe('TaskAttachmentList', () => { spyOn(translateService, 'get').and.callFake((key) => { return Observable.of(key); }); - - componentHandler = jasmine.createSpyObj('componentHandler', [ - 'upgradeAllRegistered', - 'upgradeElement' - ]); - window['componentHandler'] = componentHandler; })); beforeEach(async(() => { diff --git a/ng2-components/ng2-activiti-form/src/components/form-list.component.ts b/ng2-components/ng2-activiti-form/src/components/form-list.component.ts index 838fb92489..28c314a292 100644 --- a/ng2-components/ng2-activiti-form/src/components/form-list.component.ts +++ b/ng2-components/ng2-activiti-form/src/components/form-list.component.ts @@ -15,13 +15,14 @@ * limitations under the License. */ -import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; import { FormService } from './../services/form.service'; @Component({ selector: 'adf-form-list', templateUrl: './form-list.component.html', - styleUrls: ['./form-list.component.css'] + styleUrls: ['./form-list.component.scss'], + encapsulation: ViewEncapsulation.None }) export class FormListComponent implements OnChanges { diff --git a/ng2-components/ng2-activiti-form/src/components/form.component.css b/ng2-components/ng2-activiti-form/src/components/form.component.css deleted file mode 100644 index f062d6a71f..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/form.component.css +++ /dev/null @@ -1,36 +0,0 @@ -.activiti-form-container { - width: 100%; - min-height: 100px; - overflow: visible; -} - -.activiti-form-container > .mdl-card__media { - background-color: #fff; -} - -.activiti-form-debug-container { - padding: 10px; -} - -.activiti-form-debug-container .debug-toggle-text { - padding-left: 15px; - cursor: pointer; -} - -.activiti-form-debug-container .debug-toggle-text:hover { - font-weight: bold; -} - -.activiti-form-reload-button { - position: absolute; - right: 0; - top: 0; -} - -.activiti-form-hide-button { - display: none; -} - -.activiti-task-title { - text-align: center -} diff --git a/ng2-components/ng2-activiti-form/src/components/form.component.html b/ng2-components/ng2-activiti-form/src/components/form.component.html index 9f7e59c867..8b42d8d855 100644 --- a/ng2-components/ng2-activiti-form/src/components/form.component.html +++ b/ng2-components/ng2-activiti-form/src/components/form.component.html @@ -1,52 +1,51 @@ -
-
-

Please select a Task

-
-
- - - -

-
- -
- {{ form.isValid ? 'event_available' : 'event_busy' }} - {{form.taskName}} - -

-
-
- -
- -
- -
-
- +
+ + +
+
+ + + +

+
+
+ {{ form.isValid ? 'event_available' : 'event_busy' }} + {{form.taskName}} + +

+
+
+ +
+ +
+ +
+
+
- - - - - - -
+
+ + + + + +
-
+
Debug mode

Values

diff --git a/ng2-components/ng2-activiti-form/src/components/form.component.scss b/ng2-components/ng2-activiti-form/src/components/form.component.scss new file mode 100644 index 0000000000..077f689477 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/form.component.scss @@ -0,0 +1,38 @@ +.adf { + &-form-container { + width: 100%; + min-height: 100px; + overflow: visible; + } + + &-form-debug-container { + padding: 10px; + } + + &-form-debug-container .debug-toggle-text { + padding-left: 15px; + cursor: pointer; + } + + &-form-debug-container .debug-toggle-text:hover { + font-weight: bold; + } + + &-form-reload-button { + position: absolute; + right: 0; + top: 0; + } + + &-form-hide-button { + display: none; + } + + &-task-title { + text-align: center + } +} + +form-field { + width: 100%; +} diff --git a/ng2-components/ng2-activiti-form/src/components/form.component.spec.ts b/ng2-components/ng2-activiti-form/src/components/form.component.spec.ts index f7ab607e63..d930f46f39 100644 --- a/ng2-components/ng2-activiti-form/src/components/form.component.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/form.component.spec.ts @@ -27,7 +27,6 @@ import { FormFieldModel, FormFieldTypes, FormModel, FormOutcomeEvent, FormOutcom describe('FormComponent', () => { - let componentHandler: any; let formService: FormService; let formComponent: FormComponent; let visibilityService: WidgetVisibilityService; @@ -35,11 +34,6 @@ describe('FormComponent', () => { let logService: LogService; beforeEach(() => { - componentHandler = jasmine.createSpyObj('componentHandler', [ - 'upgradeAllRegistered' - ]); - window['componentHandler'] = componentHandler; - logService = new LogService(); visibilityService = new WidgetVisibilityService(null, logService); spyOn(visibilityService, 'refreshVisibility').and.stub(); @@ -48,18 +42,6 @@ describe('FormComponent', () => { formComponent = new FormComponent(formService, visibilityService, null, nodeService); }); - it('should upgrade MDL content on view checked', () => { - formComponent.ngAfterViewChecked(); - expect(componentHandler.upgradeAllRegistered).toHaveBeenCalled(); - }); - - it('should setup MDL content only if component handler available', () => { - expect(formComponent.setupMaterialComponents()).toBeTruthy(); - - window['componentHandler'] = null; - expect(formComponent.setupMaterialComponents()).toBeFalsy(); - }); - it('should check form', () => { expect(formComponent.hasForm()).toBeFalsy(); formComponent.form = new FormModel(); @@ -650,19 +632,6 @@ describe('FormComponent', () => { expect(formComponent.getFormDefinitionOutcomes).toHaveBeenCalledWith(form); }); - /* - it('should update the visibility when the container raise the change event', (valueChanged) => { - spyOn(formComponent, 'checkVisibility').and.callThrough(); - let widget = new ContainerWidgetComponent(); - let fakeForm = new FormModel(); - let fakeField = new FormFieldModel(fakeForm, {id: 'fakeField', value: 'fakeValue'}); - widget.formValueChanged.subscribe(field => { valueChanged(); }); - widget.fieldChanged(fakeField); - - expect(formComponent.checkVisibility).toHaveBeenCalledWith(fakeField); - }); - */ - it('should prevent default outcome execution', () => { let outcome = new FormOutcomeModel(new FormModel(), { diff --git a/ng2-components/ng2-activiti-form/src/components/form.component.ts b/ng2-components/ng2-activiti-form/src/components/form.component.ts index bc898b0d9e..15ac9521eb 100644 --- a/ng2-components/ng2-activiti-form/src/components/form.component.ts +++ b/ng2-components/ng2-activiti-form/src/components/form.component.ts @@ -16,7 +16,7 @@ */ /* tslint:disable */ -import { AfterViewChecked, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core'; +import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core'; import { FormErrorEvent, FormEvent } from './../events/index'; import { EcmModelService } from './../services/ecm-model.service'; import { FormService } from './../services/form.service'; @@ -26,14 +26,13 @@ import { FormFieldModel, FormModel, FormOutcomeEvent, FormOutcomeModel, FormValu import { WidgetVisibilityService } from './../services/widget-visibility.service'; -declare var componentHandler: any; - @Component({ selector: 'adf-form, activiti-form', templateUrl: './form.component.html', - styleUrls: ['./form.component.css'] + styleUrls: ['./form.component.scss'], + encapsulation: ViewEncapsulation.None }) -export class FormComponent implements OnInit, AfterViewChecked, OnChanges { +export class FormComponent implements OnInit, OnChanges { static SAVE_OUTCOME_ID: string = '$save'; static COMPLETE_OUTCOME_ID: string = '$complete'; @@ -176,10 +175,6 @@ export class FormComponent implements OnInit, AfterViewChecked, OnChanges { }); } - ngAfterViewChecked() { - this.setupMaterialComponents(); - } - ngOnChanges(changes: SimpleChanges) { let taskId = changes['taskId']; if (taskId && taskId.currentValue) { @@ -306,15 +301,6 @@ export class FormComponent implements OnInit, AfterViewChecked, OnChanges { return taskRepresentation.processDefinitionId && taskRepresentation.processDefinitionDeploymentId !== 'null'; } - setupMaterialComponents(): boolean { - // workaround for MDL issues with dynamic components - if (componentHandler) { - componentHandler.upgradeAllRegistered(); - return true; - } - return false; - } - getFormByTaskId(taskId: string): Promise { return new Promise((resolve, reject) => { this.loadFormProcessVariables(this.taskId).then(_ => { diff --git a/ng2-components/ng2-activiti-form/src/components/start-form.component.html b/ng2-components/ng2-activiti-form/src/components/start-form.component.html index d5beaf2334..323d2d9832 100644 --- a/ng2-components/ng2-activiti-form/src/components/start-form.component.html +++ b/ng2-components/ng2-activiti-form/src/components/start-form.component.html @@ -1,37 +1,37 @@ -
-
-
-
- {{ form.isValid ? 'event_available' : 'event_busy' }} +
+ + + + {{ form.isValid ? 'event_available' : 'event_busy' }}

{{form.taskName}}

+
+
+ +
+
-
-
- -
-
-
- -
+
+
+
-
- -
-
- -
-
-
+
+ + + + + + +
diff --git a/ng2-components/ng2-activiti-form/src/components/start-form.component.spec.ts b/ng2-components/ng2-activiti-form/src/components/start-form.component.spec.ts index 738a575125..e61c7539f7 100644 --- a/ng2-components/ng2-activiti-form/src/components/start-form.component.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/start-form.component.spec.ts @@ -17,24 +17,21 @@ import { SimpleChange } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { MdTabsModule } from '@angular/material'; -import { Observable } from 'rxjs/Rx'; - -import { MdInputModule } from '@angular/material'; import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core'; +import { Observable } from 'rxjs/Rx'; +import { MATERIAL_MODULE } from '../../index'; import { TranslationMock } from './../assets/translation.service.mock'; import { EcmModelService } from './../services/ecm-model.service'; import { FormService } from './../services/form.service'; import { WidgetVisibilityService } from './../services/widget-visibility.service'; -import { ActivitiContentComponent } from './activiti-content.component'; import { FormFieldComponent } from './form-field/form-field.component'; import { StartFormComponent } from './start-form.component'; +import { ContentWidgetComponent } from './widgets/content/content.widget'; import { MASK_DIRECTIVE } from './widgets/index'; import { WIDGET_DIRECTIVES } from './widgets/index'; describe('ActivitiStartForm', () => { - let componentHandler: any; let formService: FormService; let component: StartFormComponent; let fixture: ComponentFixture; @@ -46,13 +43,12 @@ describe('ActivitiStartForm', () => { beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - MdTabsModule, - MdInputModule, + ...MATERIAL_MODULE, CoreModule.forRoot()], declarations: [ StartFormComponent, FormFieldComponent, - ActivitiContentComponent, + ContentWidgetComponent, ...WIDGET_DIRECTIVES, ...MASK_DIRECTIVE ], @@ -75,11 +71,6 @@ describe('ActivitiStartForm', () => { processDefinitionName: 'my:process' })); - componentHandler = jasmine.createSpyObj('componentHandler', [ - 'upgradeAllRegistered', - 'upgradeElement' - ]); - window['componentHandler'] = componentHandler; }); it('should load start form on change if processDefinitionId defined', () => { diff --git a/ng2-components/ng2-activiti-form/src/components/start-form.component.ts b/ng2-components/ng2-activiti-form/src/components/start-form.component.ts index 167c4d481b..d3440be3df 100644 --- a/ng2-components/ng2-activiti-form/src/components/start-form.component.ts +++ b/ng2-components/ng2-activiti-form/src/components/start-form.component.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core'; +import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core'; import { AlfrescoTranslationService, LogService } from 'ng2-alfresco-core'; import { FormService } from './../services/form.service'; import { WidgetVisibilityService } from './../services/widget-visibility.service'; @@ -43,7 +43,8 @@ import { FormOutcomeModel } from './widgets/core/index'; @Component({ selector: 'adf-start-form, activiti-start-form', templateUrl: './start-form.component.html', - styleUrls: ['./form.component.css'] + styleUrls: ['./form.component.scss'], + encapsulation: ViewEncapsulation.None }) export class StartFormComponent extends FormComponent implements OnChanges, OnInit { diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.css deleted file mode 100644 index e252d37a10..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.css +++ /dev/null @@ -1,66 +0,0 @@ -.amount-widget { - width: 100%; -} - -.amount-widget__container { - position: relative; - font-size: 16px; - display: inline-block; - box-sizing: border-box; - width: 300px; - max-width: 100%; - margin: 0; - padding: 20px 0; -} - -.adf-amount-widget { - vertical-align: baseline !important; -} - -.adf-amount-widget__prefix-spacing { - padding-right: 5px; -} - -:host() .amount-widget__input { - width: 100%; -} - -.amount-widget__input .mat-focused { - transition: none; -} - -.amount-widget__error_message { - color: #d50000; - position: absolute; - font-size: 12px; - margin-top: 3px; - display: block; - padding-top: 3px; -} - -md-input-container >>> .mat-input-wrapper { - margin-top: 0px; - padding-top: 4px; -} - -md-input-container >>> .mat-input-ripple { - transition: none; - visibility: hidden; -} - -md-input-container.mat-focused >>> .mat-input-underline .mat-input-ripple { - visibility: hidden; - transition: none; -} - -.amount-widget__invalid .mdl-textfield__input { - border-color: #d50000; -} - -.amount-widget__invalid .mdl-textfield__label { - color: #d50000; -} - -.amount-widget__invalid .mdl-textfield__label:after { - background-color: #d50000; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.html index 99ce800d07..68656ab4fd 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.html @@ -1,21 +1,18 @@ -
-
- -
- +
+ + {{currency }} - {{field.validationSummary}} +
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.scss new file mode 100644 index 0000000000..28f82b16c7 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.scss @@ -0,0 +1,28 @@ +@import 'theming'; +@import '../form'; + +.adf { + &-amount-widget { + width: 100%; + vertical-align: baseline !important; + padding-left: 14px; + } + + &-amount-widget__container { + max-width: 100%; + } + + &-amount-widget__input .mat-focused { + transition: none; + } + + &-amount-widget__prefix-spacing { + padding-right: 5px; + } + +} + +.mat-input-prefix { + position: absolute; + margin-top: 42px; +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.spec.ts index 2bfe064745..4e1fc16c1e 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.spec.ts @@ -19,6 +19,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { MdInputModule } from '@angular/material'; import { CoreModule } from 'ng2-alfresco-core'; import { ActivitiAlfrescoContentService } from '../../../services/activiti-alfresco.service'; +import { ErrorWidgetComponent } from '../error/error.component'; import { EcmModelService } from './../../../services/ecm-model.service'; import { FormService } from './../../../services/form.service'; import { FormFieldModel } from './../core/form-field.model'; @@ -36,7 +37,8 @@ describe('AmountWidgetComponent', () => { MdInputModule ], declarations: [ - AmountWidgetComponent + AmountWidgetComponent, + ErrorWidgetComponent ], providers: [ FormService, diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.ts index 02a55ea5ac..3b05ada103 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.ts @@ -17,15 +17,16 @@ /* tslint:disable:component-selector */ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; import { FormService } from './../../../services/form.service'; import { baseHost , WidgetComponent } from './../widget.component'; @Component({ selector: 'amount-widget', templateUrl: './amount.widget.html', - styleUrls: ['./amount.widget.css'], - host: baseHost + styleUrls: ['./amount.widget.scss'], + host: baseHost, + encapsulation: ViewEncapsulation.None }) export class AmountWidgetComponent extends WidgetComponent implements OnInit { diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.html index 470801f5d1..4f754f1986 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.html @@ -2,7 +2,7 @@
{{getLinkedFileName()}} - diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.spec.ts index 7a2fa2672a..5089c7fab3 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.spec.ts @@ -18,10 +18,12 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { CoreModule } from 'ng2-alfresco-core'; import { Observable } from 'rxjs/Rx'; +import { MATERIAL_MODULE } from '../../../../index'; import { ActivitiAlfrescoContentService } from '../../../services/activiti-alfresco.service'; import { ExternalContent } from '../core/external-content'; import { ExternalContentLink } from '../core/external-content-link'; import { FormFieldTypes } from '../core/form-field-types'; +import { ErrorWidgetComponent } from '../error/error.component'; import { EcmModelService } from './../../../services/ecm-model.service'; import { FormService } from './../../../services/form.service'; import { FormFieldModel } from './../core/form-field.model'; @@ -39,10 +41,12 @@ describe('AttachWidgetComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - CoreModule.forRoot() + CoreModule.forRoot(), + ...MATERIAL_MODULE ], declarations: [ - AttachWidgetComponent + AttachWidgetComponent, + ErrorWidgetComponent ], providers: [ FormService, diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.ts index c5e16899af..b1efac4b44 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/attach/attach.widget.ts @@ -17,7 +17,7 @@ /* tslint:disable:component-selector */ -import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; +import { Component, EventEmitter, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core'; import { ActivitiAlfrescoContentService } from '../../../services/activiti-alfresco.service'; import { ExternalContent } from '../core/external-content'; import { ExternalContentLink } from '../core/external-content-link'; @@ -30,7 +30,9 @@ declare let dialogPolyfill: any; @Component({ selector: 'attach-widget', templateUrl: './attach.widget.html', - styleUrls: ['./attach.widget.css'], host: baseHost + styleUrls: ['./attach.widget.css'], + host: baseHost, + encapsulation: ViewEncapsulation.None }) export class AttachWidgetComponent extends WidgetComponent implements OnInit { @@ -42,9 +44,6 @@ export class AttachWidgetComponent extends WidgetComponent implements OnInit { selectedFolderNodes: [ExternalContent]; selectedFile: ExternalContent; - @Input() - field: FormFieldModel; - @Output() fieldChanged: EventEmitter = new EventEmitter(); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/checkbox/checkbox.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/checkbox/checkbox.widget.html index 7efdc40ab9..cc9f95ae3b 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/checkbox/checkbox.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/checkbox/checkbox.widget.html @@ -1,8 +1,9 @@
{{field.name}} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/checkbox/checkbox.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/checkbox/checkbox.widget.ts index 6a636267c6..ad517c3513 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/checkbox/checkbox.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/checkbox/checkbox.widget.ts @@ -15,9 +15,9 @@ * limitations under the License. */ - /* tslint:disable:component-selector */ +/* tslint:disable:component-selector */ -import { Component } from '@angular/core'; +import { Component, ViewEncapsulation } from '@angular/core'; import { WidgetVisibilityService } from '../../../services/widget-visibility.service'; import { FormService } from './../../../services/form.service'; import { baseHost , WidgetComponent } from './../widget.component'; @@ -25,12 +25,13 @@ import { baseHost , WidgetComponent } from './../widget.component'; @Component({ selector: 'checkbox-widget', templateUrl: './checkbox.widget.html', - host: baseHost + host: baseHost, + encapsulation: ViewEncapsulation.None }) export class CheckboxWidgetComponent extends WidgetComponent { constructor(private visibilityService: WidgetVisibilityService, public formService: FormService) { - super(formService); + super(formService); } onChange() { diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.css deleted file mode 100644 index c90b97272c..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.css +++ /dev/null @@ -1,24 +0,0 @@ -.container-widget {} - -.container-widget__header {} - -.container-widget__header-text { - border-bottom: 1px solid rgba(0,0,0,.87); - margin-left: 10px; - margin-right: 10px; - cursor: default; - - user-select: none; - -webkit-user-select: none; /* Chrome/Safari/Opera */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE/Edge */ - -webkit-touch-callout: none; /* iOS Safari */ -} - -.container-widget__header-text.collapsible { - cursor: pointer; -} - -.container-widget__mdl-grid { - align-items: center; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.html index c3c22fde08..813a69dab3 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.html @@ -1,25 +1,25 @@ -
-
-

- - {{content.name}} -

-
-
-
-
-
-
- -
-
-
-
-
+
+

+ + {{content.name}} +

+ + + +
    +
  • + +
  • +
+
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.model.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.model.spec.ts index f0a7803334..6862ec3447 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.model.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.model.spec.ts @@ -34,48 +34,6 @@ describe('ContainerWidgetComponentModel', () => { expect(container.isExpanded).toBeTruthy(); }); - it('should wrap fields into columns on setup', () => { - let form = new FormModel(); - - let json = { - fieldType: '', - id: '', - name: '', - type: '', - tab: '', - numberOfColumns: 3, - params: {}, - visibilityCondition: {}, - fields: { - '1': [ - { id: 'field-1' }, - { id: 'field-3' } - ], - '2': [ - { id: 'field-2' } - ], - '3': null - } - }; - - let field = new FormFieldModel(form, json); - - let container = new ContainerWidgetComponentModel(field); - expect(container.columns.length).toBe(3); - - let col1 = container.columns[0]; - expect(col1.fields.length).toBe(2); - expect(col1.fields[0].id).toBe('field-1'); - expect(col1.fields[1].id).toBe('field-3'); - - let col2 = container.columns[1]; - expect(col2.fields.length).toBe(1); - expect(col2.fields[0].id).toBe('field-2'); - - let col3 = container.columns[2]; - expect(col3.fields.length).toBe(0); - }); - it('should allow collapsing only when of a group type', () => { let container = new ContainerWidgetComponentModel(new FormFieldModel(new FormModel(), { type: FormFieldTypes.CONTAINER, diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.model.ts b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.model.ts index 5355ec27d2..cc55a28d24 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.model.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.model.ts @@ -15,7 +15,7 @@ * limitations under the License. */ - /* tslint:disable:component-selector */ +/* tslint:disable:component-selector */ import { ContainerColumnModel } from './../core/container-column.model'; import { ContainerModel } from './../core/container.model'; @@ -26,6 +26,8 @@ export class ContainerWidgetComponentModel extends ContainerModel { columns: ContainerColumnModel[] = []; isExpanded: boolean = true; + rowspan: number = 1; + colspan: number = 1; isGroup(): boolean { return this.type === FormFieldTypes.GROUP; @@ -57,6 +59,8 @@ export class ContainerWidgetComponentModel extends ContainerModel { if (this.field) { this.columns = this.field.columns || []; this.isExpanded = !this.isCollapsedByDefault(); + this.colspan = field.colspan; + this.rowspan = field.rowspan; } } } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.scss new file mode 100644 index 0000000000..ecf076a109 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.scss @@ -0,0 +1,57 @@ +@import 'theming'; + +.adf { + &-field-list { + padding: 0; + list-style-type: none; + width: 100%; + height: 100%; + } + + .container-widget__header-text { + border-bottom: 1px solid rgba(0, 0, 0, 0.87); + margin-left: 10px; + margin-right: 10px; + cursor: default; + user-select: none; + -webkit-user-select: none; + /* Chrome/Safari/Opera */ + -moz-user-select: none; + /* Firefox */ + -ms-user-select: none; + /* IE/Edge */ + -webkit-touch-callout: none; + /* iOS Safari */ + &.collapsible { + cursor: pointer; + } + } +} + +container-widget{ + md-grid-list { + height:100px; + } + + md-input-container { + width: 95%; + } + + .mat-focused { + label { + transform: scaleX(1); + transition: transform 150ms linear, + background-color $swift-ease-in-duration $swift-ease-in-timing-function; + color: mat-color($primary); + } + + .mat-input-prefix { + color: mat-color($primary); + } + } + + .mat-grid-tile { + overflow: visible; + } + +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.spec.ts index 85eb1e8200..891473be4f 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.spec.ts @@ -16,16 +16,16 @@ */ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { MdInputModule, MdTabsModule } from '@angular/material'; import { CoreModule } from 'ng2-alfresco-core'; +import { MATERIAL_MODULE } from '../../../../index'; import { ActivitiAlfrescoContentService } from '../../../services/activiti-alfresco.service'; import { fakeFormJson } from '../../../services/assets/widget-visibility.service.mock'; import { WIDGET_DIRECTIVES } from '../index'; import { MASK_DIRECTIVE } from '../index'; import { EcmModelService } from './../../../services/ecm-model.service'; import { FormService } from './../../../services/form.service'; -import { ActivitiContentComponent } from './../../activiti-content.component'; import { FormFieldComponent } from './../../form-field/form-field.component'; +import { ContentWidgetComponent } from './../content/content.widget'; import { FormFieldTypes } from './../core/form-field-types'; import { FormFieldModel } from './../core/form-field.model'; import { FormModel } from './../core/form.model'; @@ -38,17 +38,15 @@ describe('ContainerWidgetComponent', () => { let fixture: ComponentFixture; let element: HTMLElement; let contentService: ActivitiAlfrescoContentService; - let componentHandler; let dialogPolyfill; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ CoreModule.forRoot(), - MdTabsModule, - MdInputModule + ...MATERIAL_MODULE ], - declarations: [FormFieldComponent, ActivitiContentComponent, WIDGET_DIRECTIVES, MASK_DIRECTIVE], + declarations: [FormFieldComponent, ContentWidgetComponent, WIDGET_DIRECTIVES, MASK_DIRECTIVE], providers: [ FormService, EcmModelService, @@ -70,11 +68,6 @@ describe('ContainerWidgetComponent', () => { }; } }; - componentHandler = jasmine.createSpyObj('componentHandler', [ - 'upgradeAllRegistered' - ]); - - window['componentHandler'] = componentHandler; }); it('should wrap field with model instance', () => { @@ -85,18 +78,6 @@ describe('ContainerWidgetComponent', () => { expect(widget.content.field).toBe(field); }); - it('should upgrade MDL content on view init', () => { - widget.ngAfterViewInit(); - expect(componentHandler.upgradeAllRegistered).toHaveBeenCalled(); - }); - - it('should setup MDL content only if component handler available', () => { - expect(widget.setupMaterialComponents()).toBeTruthy(); - - window['componentHandler'] = null; - expect(widget.setupMaterialComponents()).toBeFalsy(); - }); - it('should toggle underlying group container', () => { let container = new ContainerWidgetComponentModel(new FormFieldModel(new FormModel(), { type: FormFieldTypes.GROUP, @@ -160,8 +141,6 @@ describe('ContainerWidgetComponent', () => { let fakeContainerInvisible; beforeEach(() => { - componentHandler = jasmine.createSpyObj('componentHandler', ['upgradeAllRegistered', 'upgradeElement']); - window['componentHandler'] = componentHandler; fakeContainerVisible = new ContainerWidgetComponentModel(new FormFieldModel(new FormModel(fakeFormJson), { fieldType: FormFieldTypes.GROUP, id: 'fake-cont-id-1', diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.ts index cad7527bb2..ca0c175471 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.ts @@ -17,18 +17,17 @@ /* tslint:disable:component-selector */ -import { AfterViewInit, Component, OnInit } from '@angular/core'; +import { AfterViewInit, Component, OnInit, ViewEncapsulation } from '@angular/core'; import { FormService } from './../../../services/form.service'; import { baseHost , WidgetComponent } from './../widget.component'; import { ContainerWidgetComponentModel } from './container.widget.model'; -declare var componentHandler: any; - @Component({ selector: 'container-widget', templateUrl: './container.widget.html', - styleUrls: ['./container.widget.css'], - host: baseHost + styleUrls: ['./container.widget.scss'], + host: baseHost, + encapsulation: ViewEncapsulation.None }) export class ContainerWidgetComponent extends WidgetComponent implements OnInit, AfterViewInit { @@ -49,17 +48,4 @@ export class ContainerWidgetComponent extends WidgetComponent implements OnInit, this.content = new ContainerWidgetComponentModel(this.field); } } - - ngAfterViewInit() { - this.setupMaterialComponents(); - } - - setupMaterialComponents(): boolean { - // workaround for MDL issues with dynamic components - if (componentHandler) { - componentHandler.upgradeAllRegistered(); - return true; - } - return false; - } } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.html new file mode 100644 index 0000000000..b338908d4f --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.html @@ -0,0 +1,22 @@ + + +
+ +
+
+ image +
{{ 'FORM.PREVIEW.IMAGE_NOT_AVAILABLE' | translate }} +
+
+
{{content.name}}
+
+ + + + + +
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.scss new file mode 100644 index 0000000000..5ce2542127 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.scss @@ -0,0 +1,19 @@ +.adf { + &-content-container { + + } + + &-img-upload-widget { + width: 100%; + height: 100%; + border: 1px solid rgba(117, 117, 117, 0.57); + box-shadow: 1px 1px 2px #dddddd; + background-color: #ffffff; + } + + &-content-widget-preview-text { + word-wrap: break-word; + word-break: break-all; + text-align: center; + } +} diff --git a/ng2-components/ng2-activiti-form/src/components/activiti-content.component.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.spec.ts similarity index 94% rename from ng2-components/ng2-activiti-form/src/components/activiti-content.component.spec.ts rename to ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.spec.ts index 131a7accf4..53a2e81992 100644 --- a/ng2-components/ng2-activiti-form/src/components/activiti-content.component.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.spec.ts @@ -22,25 +22,23 @@ import { By } from '@angular/platform-browser'; import { AlfrescoTranslationService, ContentService, CoreModule } from 'ng2-alfresco-core'; import { Observable } from 'rxjs/Rx'; -import { FormService } from '../services/form.service'; -import { EcmModelService } from './../services/ecm-model.service'; -import { ActivitiContentComponent } from './activiti-content.component'; -import { ContentLinkModel } from './widgets/index'; +import { EcmModelService } from '../../../services/ecm-model.service'; +import { FormService } from '../../../services/form.service'; +import { ContentLinkModel } from '../index'; +import { ContentWidgetComponent } from './content.widget'; declare let jasmine: any; -describe('ActivitiContentComponent', () => { +describe('ContentWidgetComponent', () => { - let component: ActivitiContentComponent; - let fixture: ComponentFixture; + let component: ContentWidgetComponent; + let fixture: ComponentFixture; let debug: DebugElement; let element: HTMLElement; let serviceForm: FormService; let serviceContent: ContentService; - let componentHandler: any; - function createFakeImageBlob() { let data = atob('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=='); return new Blob([data], {type: 'image/png'}); @@ -71,7 +69,7 @@ describe('ActivitiContentComponent', () => { CoreModule.forRoot() ], declarations: [ - ActivitiContentComponent + ContentWidgetComponent ], providers: [ FormService, @@ -88,15 +86,10 @@ describe('ActivitiContentComponent', () => { spyOn(translateService, 'get').and.callFake((key) => { return Observable.of(key); }); - - componentHandler = jasmine.createSpyObj('componentHandler', [ - 'upgradeAllRegistered' - ]); - window['componentHandler'] = componentHandler; })); beforeEach(() => { - fixture = TestBed.createComponent(ActivitiContentComponent); + fixture = TestBed.createComponent(ContentWidgetComponent); component = fixture.componentInstance; debug = fixture.debugElement; element = fixture.nativeElement; diff --git a/ng2-components/ng2-activiti-form/src/components/activiti-content.component.ts b/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.ts similarity index 91% rename from ng2-components/ng2-activiti-form/src/components/activiti-content.component.ts rename to ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.ts index ff9aa4099b..1d54581802 100644 --- a/ng2-components/ng2-activiti-form/src/components/activiti-content.component.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/content/content.widget.ts @@ -15,18 +15,19 @@ * limitations under the License. */ -import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core'; +import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewEncapsulation } from '@angular/core'; import { AlfrescoTranslationService, ContentService, LogService } from 'ng2-alfresco-core'; import { Observable } from 'rxjs/Rx'; -import { FormService } from './../services/form.service'; -import { ContentLinkModel } from './widgets/core/content-link.model'; +import { ContentLinkModel } from '../core/content-link.model'; +import { FormService } from './../../../services/form.service'; @Component({ selector: 'adf-content, activiti-content', - templateUrl: './activiti-content.component.html', - styleUrls: ['./activiti-content.component.css'] + templateUrl: './content.widget.html', + styleUrls: ['./content.widget.scss'], + encapsulation: ViewEncapsulation.None }) -export class ActivitiContentComponent implements OnChanges { +export class ContentWidgetComponent implements OnChanges { @Input() id: string; diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/core/container-column.model.ts b/ng2-components/ng2-activiti-form/src/components/widgets/core/container-column.model.ts index 3761ac7614..0dcbefcba2 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/core/container-column.model.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/core/container-column.model.ts @@ -15,7 +15,7 @@ * limitations under the License. */ - /* tslint:disable:component-selector */ +/* tslint:disable:component-selector */ import { FormFieldModel } from './form-field.model'; @@ -23,6 +23,8 @@ export class ContainerColumnModel { size: number = 12; fields: FormFieldModel[] = []; + colspan: number = 1; + rowspan: number = 1; hasFields(): boolean { return this.fields && this.fields.length > 0; diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field-validator.ts b/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field-validator.ts index a593a1d092..a1888cad44 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field-validator.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field-validator.ts @@ -132,9 +132,9 @@ export class DateFieldValidator implements FormFieldValidator { ]; // Validates that the input string is a valid date formatted as (default D-M-YYYY) - static isValidDate(dateString: string, dateFormat: string = 'D-M-YYYY'): boolean { - if (dateString) { - let d = moment(dateString.split('T')[0], dateFormat, true); + static isValidDate(inputDate: string, dateFormat: string = 'D-M-YYYY'): boolean { + if (inputDate) { + let d = moment(inputDate, dateFormat, true); return d.isValid(); } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field.model.ts b/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field.model.ts index 2ec0d67743..1068bab70f 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field.model.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field.model.ts @@ -15,8 +15,7 @@ * limitations under the License. */ - /* tslint:disable:component-selector */ - +/* tslint:disable:component-selector */ import * as moment from 'moment'; import { WidgetVisibilityModel } from '../../../models/widget-visibility.model'; import { ContainerColumnModel } from './container-column.model'; @@ -44,6 +43,7 @@ export class FormFieldModel extends FormWidgetModel { required: boolean; overrideId: boolean; tab: string; + rowspan: number = 1; colspan: number = 1; placeholder: string = null; minLength: number = 0; @@ -127,7 +127,7 @@ export class FormFieldModel extends FormWidgetModel { this.name = json.name; this.type = json.type; this.required = json.required; - this._readOnly = json.readOnly; + this._readOnly = json.readOnly || json.type === 'readonly'; this.overrideId = json.overrideId; this.tab = json.tab; this.restUrl = json.restUrl; @@ -157,29 +157,15 @@ export class FormFieldModel extends FormWidgetModel { this.placeholder = json.placeholder; } - // - this.numberOfColumns = json.numberOfColumns; - - let columnSize: number = 12; - if (this.numberOfColumns > 1) { - columnSize = 12 / this.numberOfColumns; + if (json.type === 'readonly') { + if (json.params && json.params.field && json.params.field.responseVariable) { + this.value = this.getVariablesValue(json.params.field.name, form); + } } - for (let i = 0; i < this.numberOfColumns; i++) { - let col = new ContainerColumnModel(); - col.size = columnSize; - this.columns.push(col); + if (json.type === 'container') { + this.containerFactory(json, form); } - - if (json.fields) { - Object.keys(json.fields).map(key => { - let fields = (json.fields[key] || []).map(f => new FormFieldModel(form, f)); - let col = this.columns[parseInt(key, 10) - 1]; - col.fields = fields; - this.fields.push(...fields); - }); - } - // } if (this.hasEmptyValue && this.options && this.options.length > 0) { @@ -189,6 +175,46 @@ export class FormFieldModel extends FormWidgetModel { this.updateForm(); } + private getVariablesValue(variableName: string, form: FormModel) { + let variable = form.json.variables.find((currentVariable) => { + return currentVariable.name === variableName; + }); + + if (variable.type === 'boolean') { + return JSON.parse(variable.value); + } + + return variable.value; + } + + private containerFactory(json: any, form: FormModel): void { + this.numberOfColumns = json.numberOfColumns || 1; + + this.fields = json.fields; + + this.rowspan = 1; + this.colspan = 1; + + if (json.fields) { + for (let currentField in json.fields) { + if (json.fields.hasOwnProperty(currentField)) { + let col = new ContainerColumnModel(); + + let fields: FormFieldModel[] = (json.fields[currentField] || []).map(f => new FormFieldModel(form, f)); + col.fields = fields; + col.rowspan = json.fields[currentField].length; + + col.fields.forEach((colFields: any) => { + this.colspan = colFields.colspan > this.colspan ? colFields.colspan : this.colspan; + }); + + this.rowspan = this.rowspan < col.rowspan ? col.rowspan : this.rowspan; + this.columns.push(col); + } + } + } + } + parseValue(json: any): any { let value = json.value; @@ -275,7 +301,7 @@ export class FormFieldModel extends FormWidgetModel { break; case FormFieldTypes.UPLOAD: if (this.value && this.value.length > 0) { - this.form.values[this.id] = `${this.value[0].id}`; + this.form.values[this.id] = this.value.map(elem => elem.id).join(','); } else { this.form.values[this.id] = null; } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/core/form.model.ts b/ng2-components/ng2-activiti-form/src/components/widgets/core/form.model.ts index 344f3e7ee2..2d4d90a7b7 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/core/form.model.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/core/form.model.ts @@ -124,6 +124,7 @@ export class FormModel { } } } + if (json.fields) { let saveOutcome = new FormOutcomeModel(this, { id: FormModel.SAVE_OUTCOME, name: 'Save', isSystem: true }); let completeOutcome = new FormOutcomeModel(this, { id: FormModel.COMPLETE_OUTCOME, name: 'Complete', isSystem: true }); @@ -170,7 +171,10 @@ export class FormModel { if (field instanceof ContainerModel) { let container = field; result.push(container.field); - result.push(...container.field.fields); + + container.field.columns.forEach((column) => { + result.push(...column.fields); + }); } } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.css deleted file mode 100644 index a30807d5d2..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.css +++ /dev/null @@ -1,40 +0,0 @@ -.date-widget { - width: 100%; - padding-top: 10px; - padding-bottom: 10px; -} - -.date-widget--button { - margin-top: 10px; -} - -.mdl-date__input{ - padding-top: 5px; - padding-bottom: 5px; -} - -.mdl-grid__date-widget{ - align-items:center; - padding: 0px; -} - -.date-widget__invalid .mdl-textfield__input { - border-color: #d50000; -} - -.date-widget__invalid .mdl-textfield__label { - color: #d50000; -} - -.date-widget__invalid .mdl-textfield__label:after { - background-color: #d50000; -} - -.date-widget__invalid .mdl-textfield__error { - visibility: visible !important; -} - -.date-widget-button__cell{ - margin-top: 0px; - margin-bottom: 0px; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.html index d72c2ed126..59a273bd75 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.html @@ -1,29 +1,19 @@ -
-
-
- - - {{field.validationSummary}} -
-
-
- -
+
+ + + + + + +
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.scss new file mode 100644 index 0000000000..039fbc43b7 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.scss @@ -0,0 +1,33 @@ +@import 'theming'; +@import '../form'; + +.adf { + + &-date-widget { + .mat-input-suffix { + position: absolute; + margin-top: 42px; + width: 100%; + } + } + + &-date-widget-button { + position: relative; + float: right; + } + + &-date-input { + padding-top: 5px; + padding-bottom: 5px; + } + + &-grid-date-widget { + align-items: center; + padding: 0; + } + + &-date-widget-button__cell { + margin-top: 0; + margin-bottom: 0; + } +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.spec.ts index 34e22d391a..e501628432 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.spec.ts @@ -15,11 +15,12 @@ * limitations under the License. */ -import { ElementRef } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import * as moment from 'moment'; import { CoreModule } from 'ng2-alfresco-core'; +import { MATERIAL_MODULE } from '../../../../index'; import { ActivitiAlfrescoContentService } from '../../../services/activiti-alfresco.service'; +import { ErrorWidgetComponent } from '../error/error.component'; import { EcmModelService } from './../../../services/ecm-model.service'; import { FormService } from './../../../services/form.service'; import { FormFieldModel } from './../core/form-field.model'; @@ -30,17 +31,18 @@ describe('DateWidgetComponent', () => { let widget: DateWidgetComponent; let fixture: ComponentFixture; - let componentHandler; let nativeElement: any; let element: HTMLElement; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - CoreModule.forRoot() + CoreModule.forRoot(), + ...MATERIAL_MODULE ], declarations: [ - DateWidgetComponent + DateWidgetComponent, + ErrorWidgetComponent ], providers: [ FormService, @@ -61,25 +63,31 @@ describe('DateWidgetComponent', () => { element = fixture.nativeElement; widget = fixture.componentInstance; - componentHandler = jasmine.createSpyObj('componentHandler', ['upgradeAllRegistered', 'upgradeElement']); - window['componentHandler'] = componentHandler; - }); - - it('should setup basic date picker settings on init ', () => { - expect(widget.datePicker).toBeUndefined(); - widget.ngOnInit(); - expect(widget.datePicker).toBeDefined(); }); it('should setup min value for date picker', () => { let minValue = '13-03-1982'; widget.field = new FormFieldModel(null, { + id: 'date-id', + name: 'date-name', minValue: minValue }); + widget.ngOnInit(); let expected = moment(minValue, widget.field.dateDisplayFormat); - expect(widget.datePicker._past.isSame(expected)).toBeTruthy(); + expect(widget.minDate.isSame(expected)).toBeTruthy(); + }); + + it('should date field be present', () => { + let minValue = '13-03-1982'; + widget.field = new FormFieldModel(null, { + minValue: minValue + }); + + widget.ngOnInit(); + + expect(element.querySelector('#dropdown-id')).toBeDefined(); }); it('should setup max value for date picker', () => { @@ -90,126 +98,29 @@ describe('DateWidgetComponent', () => { widget.ngOnInit(); let expected = moment(maxValue, widget.field.dateDisplayFormat); - expect(widget.datePicker._future.isSame(expected)).toBeTruthy(); - }); - - it('should setup default time value for date picker', () => { - let dateValue = '13-03-1982'; - widget.field = new FormFieldModel(null, { - type: 'date', - value: '1982-03-13' - }); - widget.ngOnInit(); - - let expected = moment(dateValue, widget.field.dateDisplayFormat); - expect(widget.datePicker.time.isSame(expected)).toBeTruthy(); - }); - - it('should setup trigger element', () => { - widget.elementRef = new ElementRef(nativeElement); - let el = {}; - spyOn(nativeElement, 'querySelector').and.returnValue(el); - widget.field = new FormFieldModel(null, {id: 'fake-id'}); - widget.ngOnInit(); - widget.ngAfterViewChecked(); - expect(widget.datePicker.trigger).toBe(el); - }); - - it('should not setup trigger element', () => { - widget.ngOnInit(); - expect(widget.datePicker.trigger).toBeFalsy(); + expect(widget.maxDate.isSame(expected)).toBeTruthy(); }); it('should eval visibility on date changed', () => { spyOn(widget, 'checkVisibility').and.callThrough(); - let field = new FormFieldModel(null); + let field = new FormFieldModel(new FormModel(), { + id: 'date-field-id', + name: 'date-name', + value: '9-9-9999', + type: 'date', + readOnly: 'false' + }); + widget.field = field; - widget.onDateChanged(); + widget.onDateChanged('12/12/2012'); expect(widget.checkVisibility).toHaveBeenCalledWith(field); }); - it('should update picker value on input date changed', () => { - widget.field = new FormFieldModel(new FormModel(), { - type: 'date', - value: '13-03-1982' - }); - widget.ngOnInit(); - widget.field.value = '31-03-1982'; - widget.onDateChanged(); - - let expected = moment('31-03-1982', widget.field.dateDisplayFormat); - expect(widget.datePicker.time.isSame(expected)).toBeTruthy(); - }); - - it('should update field value on date selected', () => { - widget.elementRef = new ElementRef(nativeElement); - widget.field = new FormFieldModel(new FormModel(), {type: 'date'}); - widget.ngOnInit(); - - let date = '13-3-1982'; - widget.datePicker.time = moment(date, widget.field.dateDisplayFormat); - widget.onDateSelected(); - expect(widget.field.value).toBe(date); - }); - - it('should update material textfield on date selected', () => { - spyOn(widget, 'setupMaterialTextField').and.callThrough(); - - widget.field = new FormFieldModel(new FormModel(), {type: 'date'}); - widget.ngOnInit(); - - widget.datePicker.time = moment(); - widget.onDateSelected(); - expect(widget.setupMaterialTextField).toHaveBeenCalled(); - }); - - it('should not update material textfield on date selected', () => { - widget.elementRef = undefined; - spyOn(widget, 'setupMaterialTextField').and.callThrough(); - - widget.field = new FormFieldModel(new FormModel(), {type: 'date'}); - widget.ngOnInit(); - - widget.datePicker.time = moment(); - widget.onDateSelected(); - expect(widget.setupMaterialTextField).not.toHaveBeenCalled(); - }); - - it('should send field change event when a new date is picked from data picker', (done) => { - spyOn(widget, 'setupMaterialTextField').and.callThrough(); - widget.field = new FormFieldModel(new FormModel(), {value: '9-9-9999', type: 'date'}); - widget.ngOnInit(); - widget.datePicker.time = moment('9-9-9999', widget.field.dateDisplayFormat); - widget.fieldChanged.subscribe((field) => { - expect(field).toBeDefined(); - expect(field).not.toBeNull(); - expect(field.value).toEqual('9-9-9999'); - done(); - }); - widget.onDateSelected(); - }); - - it('should send field change event when date is changed in input text', (done) => { - spyOn(widget, 'setupMaterialTextField').and.callThrough(); - widget.field = new FormFieldModel(null, {value: '9-9-9999', type: 'date'}); - widget.ngOnInit(); - widget.datePicker.time = moment('9-9-9999', widget.field.dateDisplayFormat); - widget.fieldChanged.subscribe((field) => { - expect(field).toBeDefined(); - expect(field).not.toBeNull(); - expect(field.value).toEqual('9-9-9999'); - done(); - }); - - widget.onDateChanged(); - }); - describe('template check', () => { beforeEach(() => { - spyOn(widget, 'setupMaterialTextField').and.stub(); widget.field = new FormFieldModel(new FormModel(), { id: 'date-field-id', name: 'date-name', @@ -279,13 +190,13 @@ describe('DateWidgetComponent', () => { widget.field.readOnly = false; fixture.detectChanges(); - let dateButton = element.querySelector('#date-field-id-button'); + let dateButton = element.querySelector('button'); expect(dateButton.disabled).toBeFalsy(); widget.field.readOnly = true; fixture.detectChanges(); - dateButton = element.querySelector('#date-field-id-button'); + dateButton = element.querySelector('button'); expect(dateButton.disabled).toBeTruthy(); })); }); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.ts index 31c1e5aa57..572265600c 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.ts @@ -15,83 +15,62 @@ * limitations under the License. */ - /* tslint:disable:component-selector */ +/* tslint:disable:component-selector */ -import { AfterViewChecked, Component, ElementRef, OnInit } from '@angular/core'; +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; +import { DateAdapter, MD_DATE_FORMATS } from '@angular/material'; import * as moment from 'moment'; +import { Moment } from 'moment'; +import { MOMENT_DATE_FORMATS, MomentDateAdapter } from 'ng2-alfresco-core'; import { FormService } from './../../../services/form.service'; import { baseHost , WidgetComponent } from './../widget.component'; -declare let mdDateTimePicker: any; -declare var componentHandler: any; - @Component({ selector: 'date-widget', + providers: [ + {provide: DateAdapter, useClass: MomentDateAdapter}, + {provide: MD_DATE_FORMATS, useValue: MOMENT_DATE_FORMATS}], templateUrl: './date.widget.html', - styleUrls: ['./date.widget.css'], - host: baseHost + styleUrls: ['./date.widget.scss'], + host: baseHost, + encapsulation: ViewEncapsulation.None }) -export class DateWidgetComponent extends WidgetComponent implements OnInit, AfterViewChecked { +export class DateWidgetComponent extends WidgetComponent implements OnInit { - datePicker: any; + minDate: Moment; + maxDate: Moment; - constructor(public formService: FormService, - public elementRef: ElementRef) { - super(formService); + constructor(public formService: FormService, public dateAdapter: DateAdapter) { + super(formService); } ngOnInit() { - - let settings: any = { - type: 'date', - past: moment().subtract(100, 'years'), - future: moment().add(100, 'years') - }; + let momentDateAdapter = this.dateAdapter; + momentDateAdapter.overrideDisplyaFormat = this.field.dateDisplayFormat; if (this.field) { - if (this.field.minValue) { - settings.past = moment(this.field.minValue, this.field.dateDisplayFormat); + this.minDate = moment(this.field.minValue, this.field.dateDisplayFormat); } if (this.field.maxValue) { - settings.future = moment(this.field.maxValue, this.field.dateDisplayFormat); + this.maxDate = moment(this.field.maxValue, this.field.dateDisplayFormat); } - - if (this.field.value) { - settings.init = moment(this.field.value, this.field.dateDisplayFormat); - } - } - - this.datePicker = new mdDateTimePicker.default(settings); - } - - ngAfterViewChecked() { - if (this.elementRef) { - let dataLocator = '#' + this.field.id; - this.datePicker.trigger = this.elementRef.nativeElement.querySelector(dataLocator); } } - onDateChanged() { - if (this.field.value) { - let value = moment(this.field.value, this.field.dateDisplayFormat); - if (!value.isValid()) { - value = moment(); + onDateChanged(newDateValue) { + this.field.validationSummary = ''; + + if (newDateValue) { + let momentDate = moment(newDateValue, this.field.dateDisplayFormat, true); + if (!momentDate.isValid()) { + this.field.validationSummary = this.field.dateDisplayFormat; + }else { + this.field.value = newDateValue; } - this.datePicker.time = value; } this.checkVisibility(this.field); } - onDateSelected() { - let newValue = this.datePicker.time.format(this.field.dateDisplayFormat); - this.field.value = newValue; - this.checkVisibility(this.field); - - if (this.elementRef) { - this.setupMaterialTextField(this.elementRef, componentHandler, newValue); - } - } - } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.css deleted file mode 100644 index 40e3385ccb..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.css +++ /dev/null @@ -1 +0,0 @@ -.display-text-widget {} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.html index a674317306..b760a11b3a 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.html @@ -1,3 +1,3 @@ -
+
{{field.value}}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.scss new file mode 100644 index 0000000000..f5a3c92c58 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.scss @@ -0,0 +1 @@ +.adf-display-text-widget {} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.ts index c03c59c13d..e3138bf999 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/display-text/display-text.widget.ts @@ -17,15 +17,16 @@ /* tslint:disable:component-selector */ -import { Component } from '@angular/core'; +import { Component, ViewEncapsulation } from '@angular/core'; import { FormService } from './../../../services/form.service'; import { baseHost , WidgetComponent } from './../widget.component'; @Component({ selector: 'display-text-widget', templateUrl: './display-text.widget.html', - styleUrls: ['./display-text.widget.css'], - host: baseHost + styleUrls: ['./display-text.widget.scss'], + host: baseHost, + encapsulation: ViewEncapsulation.None }) export class DisplayTextWidgetComponentComponent extends WidgetComponent { diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.css deleted file mode 100644 index b06bf90c3f..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.css +++ /dev/null @@ -1,23 +0,0 @@ -.display-value-widget { - width: 100%; -} - -.display-value-widget__dynamic-table { - padding: 8px; -} - -.display-value-widget__dynamic-table .is-disabled { - background-color: transparent; - border-bottom: 1px dotted rgba(0, 0, 0, .12); - color: rgba(0, 0, 0, .26); -} - -.display-value-widget__dynamic-table table { - width: 100%; -} - -.display-value-dynamic-table-widget__table-container { - overflow-y: auto; - width: 100%; -} - diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.html deleted file mode 100644 index b91c6e3881..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.html +++ /dev/null @@ -1,70 +0,0 @@ -
-
- -
-
- - -
-
- - -
- -
- -
-
-
-
- -
-
-
-
-
- -
-
-
- - -
-
- diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.spec.ts deleted file mode 100644 index 89852e49b0..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.spec.ts +++ /dev/null @@ -1,735 +0,0 @@ -/*! - * @license - * Copyright 2016 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { CoreModule } from 'ng2-alfresco-core'; -import { Observable } from 'rxjs/Rx'; -import { WidgetVisibilityService } from '../../../services/widget-visibility.service'; -import { ActivitiContentComponent } from '../../activiti-content.component'; -import { FormFieldTypes } from '../core/form-field-types'; -import { FormModel } from '../core/form.model'; -import { EcmModelService } from './../../../services/ecm-model.service'; -import { FormService } from './../../../services/form.service'; -import { FormFieldModel } from './../core/form-field.model'; -import { DisplayValueWidgetComponent } from './display-value.widget'; - -describe('DisplayValueWidgetComponent', () => { - - let widget: DisplayValueWidgetComponent; - let fixture: ComponentFixture; - let element: HTMLElement; - let formService: FormService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - CoreModule.forRoot() - ], - declarations: [ - DisplayValueWidgetComponent, - ActivitiContentComponent - ], - providers: [ - FormService, - EcmModelService, - WidgetVisibilityService - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DisplayValueWidgetComponent); - formService = TestBed.get(FormService); - - element = fixture.nativeElement; - widget = fixture.componentInstance; - }); - - it('should require field to setup default value', () => { - widget.field = null; - widget.ngOnInit(); - expect(widget.value).toBeUndefined(); - }); - - it('should take field value on init', () => { - let value = ''; - widget.field = new FormFieldModel(null, { value: value }); - widget.field.params = null; - widget.ngOnInit(); - expect(widget.value).toBe(value); - }); - - it('should setup [BOOLEAN] field', () => { - expect(widget.value).toBeUndefined(); - - // test TRUE value - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: 'true', - params: { - field: { - type: FormFieldTypes.BOOLEAN - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBeTruthy(); - - // test FALSE value - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: 'false', - params: { - field: { - type: FormFieldTypes.BOOLEAN - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBeFalsy(); - }); - - it('should setup [FUNCTIONAL-GROUP] field', () => { - let groupName: ''; - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: { - name: groupName - }, - params: { - field: { - type: FormFieldTypes.FUNCTIONAL_GROUP - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe(groupName); - }); - - it('should not setup [FUNCTIONAL-GROUP] field when missing value', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - params: { - field: { - type: FormFieldTypes.FUNCTIONAL_GROUP - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBeNull(); - }); - - it('should setup [PEOPLE] field', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: { - firstName: 'John', - lastName: 'Doe' - }, - params: { - field: { - type: FormFieldTypes.PEOPLE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('John Doe'); - }); - - it('should not setup [PEOPLE] field whem missing value', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - params: { - field: { - type: FormFieldTypes.PEOPLE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBeUndefined(); - }); - - it('should setup [UPLOAD] field', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: [ - { name: 'file1' } - ], - params: { - field: { - type: FormFieldTypes.UPLOAD - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('file1'); - }); - - it('should not setup [UPLOAD] field when missing value', () => { - widget.field = new FormFieldModel(null, { - value: null, - params: { - field: { - type: FormFieldTypes.UPLOAD - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBeNull(); - }); - - it('should not setup [UPLOAD] field when empty value', () => { - widget.field = new FormFieldModel(null, { - value: [], - params: { - field: { - type: FormFieldTypes.UPLOAD - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBeNull(); - }); - - it('should setup [TYPEAHEAD] field', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - params: { - field: { - type: FormFieldTypes.TYPEAHEAD - } - } - }); - spyOn(widget, 'loadRestFieldValue').and.stub(); - widget.ngOnInit(); - expect(widget.loadRestFieldValue).toHaveBeenCalled(); - }); - - it('should setup [DROPDOWN] field with REST config', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: 'http://test.com', - params: { - field: { - type: FormFieldTypes.DROPDOWN - } - } - }); - spyOn(widget, 'loadRestFieldValue').and.stub(); - widget.ngOnInit(); - expect(widget.loadRestFieldValue).toHaveBeenCalled(); - }); - - it('should setup [RADIO_BUTTONS] field', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: null, - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - spyOn(widget, 'loadRadioButtonValue').and.stub(); - widget.ngOnInit(); - expect(widget.loadRadioButtonValue).toHaveBeenCalled(); - }); - - it('should setup [RADIO_BUTTONS] value by options', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: null, - value: '2', - options: [ - { id: '1', name: 'option 1' }, - { id: '2', name: 'option 2' } - ], - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('option 2'); - }); - - it('should not setup [RADIO_BUTTONS] value with missing option', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: null, - value: '100', - options: [ - { id: '1', name: 'option 1' }, - { id: '2', name: 'option 2' } - ], - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('100'); - }); - - it('should not setup [RADIO_BUTTONS] when missing options', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: null, - value: '100', - options: null, - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - widget.field.options = null; - widget.ngOnInit(); - expect(widget.value).toBe('100'); - }); - - it('should setup [RADIO_BUTTONS] field with REST config', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: '', - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - spyOn(widget, 'loadRestFieldValue').and.stub(); - widget.ngOnInit(); - expect(widget.loadRestFieldValue).toHaveBeenCalled(); - }); - - it('should setup rest field values with REST options', () => { - spyOn(formService, 'getRestFieldValues').and.returnValue( - Observable.create(observer => { - observer.next([ - { id: '1', name: 'option 1' }, - { id: '2', name: 'option 2' } - ]); - observer.complete(); - }) - ); - - let form = new FormModel({ taskId: '' }); - - widget.field = new FormFieldModel(form, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: '', - value: '2', - options: [ - { id: '1', name: 'option 1' }, - { id: '2', name: 'option 2' } - ], - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - widget.ngOnInit(); - expect(formService.getRestFieldValues).toHaveBeenCalled(); - expect(widget.value).toBe('option 2'); - }); - - it('should not setup rest field values with missing REST option', () => { - spyOn(formService, 'getRestFieldValues').and.returnValue( - Observable.create(observer => { - observer.next([ - { id: '1', name: 'option 1' }, - { id: '2', name: 'option 2' } - ]); - observer.complete(); - }) - ); - - let form = new FormModel({ taskId: '' }); - - widget.field = new FormFieldModel(form, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: '', - value: '100', - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - widget.ngOnInit(); - expect(formService.getRestFieldValues).toHaveBeenCalled(); - expect(widget.value).toBe('100'); - }); - - it('should not setup rest field values with no REST response', () => { - spyOn(formService, 'getRestFieldValues').and.returnValue( - Observable.create(observer => { - observer.next(null); - observer.complete(); - }) - ); - - let form = new FormModel({ taskId: '' }); - - widget.field = new FormFieldModel(form, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: '', - value: '100', - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - widget.ngOnInit(); - expect(formService.getRestFieldValues).toHaveBeenCalled(); - expect(widget.value).toBe('100'); - }); - - it('should handle rest error', (done) => { - const error = 'ERROR'; - spyOn(formService, 'getRestFieldValues').and.returnValue( - Observable.throw(error) - ); - - let form = new FormModel({ taskId: '' }); - - widget.field = new FormFieldModel(form, { - type: FormFieldTypes.DISPLAY_VALUE, - restUrl: '', - value: '100', - params: { - field: { - type: FormFieldTypes.RADIO_BUTTONS - } - } - }); - widget.error.subscribe(() => { - expect(formService.getRestFieldValues).toHaveBeenCalled(); - expect(widget.value).toBe('100'); - done(); - }); - widget.ngOnInit(); - }); - - it('should setup [DATE] field with valid date', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: '1982-03-13T00:00:00.000Z', - params: { - field: { - type: FormFieldTypes.DATE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('13-3-1982'); - }); - - it('should setup [DATE] field with invalid date', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: '', - params: { - field: { - type: FormFieldTypes.DATE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe(''); - }); - - it('should show the [DATE] field with the default format (D-M-YYYY) if the display format is missing', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: '1982-03-13T00:00:00.000Z', - params: { - field: { - type: FormFieldTypes.DATE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('13-3-1982'); - }); - - it('should show the [DATE] field with the custom display format (MM-DD-YYYY)', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: '1982-03-13T00:00:00.000Z', - dateDisplayFormat: 'MM-DD-YYYY', - params: { - field: { - type: FormFieldTypes.DATE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('03-13-1982'); - }); - - it('should show the [DATE] field with the custom display format (MM-YY-DD)', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: '1982-03-13T00:00:00.000Z', - dateDisplayFormat: 'MM-YY-DD', - params: { - field: { - type: FormFieldTypes.DATE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('03-82-13'); - }); - - it('should show the [DATE] field with the custom display format (DD-MM-YYYY)', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: '1982-03-13T00:00:00.000Z', - dateDisplayFormat: 'DD-MM-YYYY', - params: { - field: { - type: FormFieldTypes.DATE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('13-03-1982'); - }); - - it('should not setup [DATE] field when missing value', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - params: { - field: { - type: FormFieldTypes.DATE - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBeUndefined(); - }); - - it('should setup [AMOUNT] field with default currency', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: 11, - params: { - field: { - type: FormFieldTypes.AMOUNT - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('$ 11'); - }); - - it('should setup [AMOUNT] field with custom currency', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: 12.6, - currency: 'UAH', - params: { - field: { - type: FormFieldTypes.AMOUNT - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe('UAH 12.6'); - }); - - it('should not setup [AMOUNT] field when missing value', () => { - widget.field = new FormFieldModel(null, { - params: { - field: { - type: FormFieldTypes.AMOUNT - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBeUndefined(); - }); - - it('should setup [HYPERLINK] field', () => { - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - hyperlinkUrl: 'www.some-url.com', - displayText: 'Custom URL', - params: { - field: { - type: FormFieldTypes.HYPERLINK - } - } - }); - widget.ngOnInit(); - expect(widget.linkUrl).toBe(`http://${widget.field.hyperlinkUrl}`); - expect(widget.linkText).toBe(widget.field.displayText); - }); - - it('should take default value for unknown field type', () => { - const value = ''; - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: value, - params: { - field: { - type: '' - } - } - }); - widget.ngOnInit(); - expect(widget.value).toBe(value); - }); - - it('should take default value when missing params', () => { - const value = ''; - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: value - }); - widget.ngOnInit(); - expect(widget.value).toBe(value); - }); - - it('should take default value when missing enclosed field type', () => { - const value = ''; - widget.field = new FormFieldModel(null, { - type: FormFieldTypes.DISPLAY_VALUE, - value: value, - params: { - field: {} - } - }); - widget.ngOnInit(); - expect(widget.value).toBe(value); - }); - - describe('UI check', () => { - let componentHandler; - - beforeEach(async(() => { - componentHandler = jasmine.createSpyObj('componentHandler', ['upgradeAllRegistered', 'upgradeElement']); - window['componentHandler'] = componentHandler; - })); - - beforeEach(() => { - spyOn(widget, 'setupMaterialTextField').and.stub(); - }); - - afterEach(() => { - fixture.destroy(); - TestBed.resetTestingModule(); - }); - - it('should show the checkbox on when [BOOLEAN] field is true', async(() => { - widget.field = new FormFieldModel(null, { - id: 'fake-checkbox-id', - type: FormFieldTypes.DISPLAY_VALUE, - value: 'true', - params: { - field: { - type: FormFieldTypes.BOOLEAN - } - } - }); - fixture.detectChanges(); - - fixture.whenStable() - .then(() => { - let elWidget: any = element.querySelector('#fake-checkbox-id'); - expect(elWidget).toBeDefined(); - expect(elWidget.checked).toBeTruthy(); - }); - })); - - it('should show the checkbox off when [BOOLEAN] field is false', async(() => { - widget.field = new FormFieldModel(null, { - id: 'fake-checkbox-id', - type: FormFieldTypes.DISPLAY_VALUE, - value: 'false', - params: { - field: { - type: FormFieldTypes.BOOLEAN - } - } - }); - fixture.detectChanges(); - - fixture.whenStable() - .then(() => { - let elWidget: any = element.querySelector('#fake-checkbox-id'); - expect(elWidget).toBeDefined(); - expect(elWidget.checked).toBeFalsy(); - }); - })); - - it('should show the dropdown value taken from options when field has options', async(() => { - widget.field = new FormFieldModel(null, { - id: 'fake-dropdown-id', - type: FormFieldTypes.DISPLAY_VALUE, - value: '1', - options: [ - { id: '1', name: 'Option 1' }, - { id: '2', name: 'Option 2' } - ], - params: { - field: { - type: FormFieldTypes.DROPDOWN - } - } - }); - - fixture.whenStable() - .then(() => { - fixture.detectChanges(); - let elWidget: any = element.querySelector('#fake-dropdown-id'); - expect(elWidget).toBeDefined(); - expect(elWidget.value).toBe('Option 1'); - }); - })); - - it('should show the dropdown value taken from value when field has no options', async(() => { - widget.field = new FormFieldModel(null, { - id: 'fake-dropdown-id', - type: FormFieldTypes.DISPLAY_VALUE, - value: 'FAKE', - params: { - field: { - type: FormFieldTypes.DROPDOWN - } - } - }); - - fixture.whenStable() - .then(() => { - fixture.detectChanges(); - let elWidget: any = element.querySelector('#fake-dropdown-id'); - expect(elWidget).toBeDefined(); - expect(elWidget.value).toBe('FAKE'); - }); - })); - }); -}); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.ts deleted file mode 100644 index 0e7e0686d5..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/display-value/display-value.widget.ts +++ /dev/null @@ -1,229 +0,0 @@ -/*! - * @license - * Copyright 2016 Alfresco Software, Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - /* tslint:disable:component-selector */ - -import { Component, EventEmitter, OnInit, Output } from '@angular/core'; -import * as moment from 'moment'; -import { FormService } from '../../../services/form.service'; -import { WidgetVisibilityService } from '../../../services/widget-visibility.service'; -import { FormFieldTypes } from '../core/form-field-types'; -import { NumberFieldValidator } from '../core/form-field-validator'; -import { FormFieldOption } from './../core/form-field-option'; -import { baseHost , WidgetComponent } from './../widget.component'; - -@Component({ - selector: 'display-value-widget', - templateUrl: './display-value.widget.html', - styleUrls: ['./display-value.widget.css'], - host: baseHost -}) -export class DisplayValueWidgetComponent extends WidgetComponent implements OnInit { - - @Output() - error: EventEmitter = new EventEmitter(); - - value: any; - fieldType: string; - id: any; - - // hyperlink - linkUrl: string; - linkText: string; - - // dynamic table - tableEditable = false; - - // upload/attach - hasFile: boolean = false; - showDocumentContent: boolean = true; - - constructor(public formService: FormService, - private visibilityService: WidgetVisibilityService) { - super(formService); - } - - ngOnInit() { - if (this.field) { - this.value = this.field.value; - this.visibilityService.refreshEntityVisibility(this.field); - if (this.field.params) { - if (this.field.params['showDocumentContent'] !== undefined) { - this.showDocumentContent = !!this.field.params['showDocumentContent']; - } - if (this.field.params['tableEditable'] !== undefined) { - this.tableEditable = !!this.field.params['tableEditable']; - } - - let originalField = this.field.params['field']; - if (originalField && originalField.type) { - this.fieldType = originalField.type; - switch (originalField.type) { - case FormFieldTypes.BOOLEAN: - this.value = this.field.value === 'true' ? true : false; - break; - case FormFieldTypes.FUNCTIONAL_GROUP: - if (this.field.value) { - this.value = this.field.value.name; - } else { - this.value = null; - } - break; - case FormFieldTypes.PEOPLE: - let model = this.field.value; - if (model) { - let displayName = `${model.firstName} ${model.lastName}`; - this.value = displayName.trim(); - } - break; - case FormFieldTypes.UPLOAD: - let files = this.field.value || []; - if (files.length > 0) { - this.value = decodeURI(files[0].name); - this.id = files[0].id; - this.hasFile = true; - } else { - this.value = null; - this.hasFile = false; - } - break; - case FormFieldTypes.DOCUMENT: - const file = this.field.value; - if (file) { - this.value = decodeURI(file.name); - this.id = file.id; - this.hasFile = true; - } else { - this.value = null; - this.hasFile = false; - } - break; - case FormFieldTypes.TYPEAHEAD: - this.loadRestFieldValue(); - break; - case FormFieldTypes.DROPDOWN: - if (this.field.restUrl) { - this.loadRestFieldValue(); - } else { - this.value = this.field.hasOptions() ? this.field.getOptionName() : this.value; - } - break; - case FormFieldTypes.RADIO_BUTTONS: - if (this.field.restUrl) { - this.loadRestFieldValue(); - } else { - this.loadRadioButtonValue(); - } - break; - case FormFieldTypes.DATE: - if (this.value) { - let dateValue; - if (NumberFieldValidator.isNumber(this.value)) { - dateValue = moment(this.value); - } else { - dateValue = moment(this.value.split('T')[0], 'YYYY-M-D'); - } - if (dateValue && dateValue.isValid()) { - const displayFormat = this.field.dateDisplayFormat || this.field.defaultDateFormat; - this.value = dateValue.format(displayFormat); - } - } - break; - case FormFieldTypes.AMOUNT: - if (this.value) { - let currency = this.field.currency || '$'; - this.value = `${currency} ${this.field.value}`; - } - break; - case FormFieldTypes.HYPERLINK: - this.linkUrl = this.getHyperlinkUrl(this.field); - this.linkText = this.getHyperlinkText(this.field); - break; - default: - this.value = this.field.value; - break; - } - } - } - this.visibilityService.refreshVisibility(this.field.form); - } - } - - loadRadioButtonValue() { - let options = this.field.options || []; - let toSelect = options.find(item => item.id === this.field.value); - if (toSelect) { - this.value = toSelect.name; - } else { - this.value = this.field.value; - } - } - - loadRestFieldValue() { - if (this.field.form.taskId) { - this.getValuesByTaskId(); - } else { - this.getValuesByProcessDefinitionId(); - } - } - - getValuesByProcessDefinitionId() { - this.formService - .getRestFieldValuesByProcessId( - this.field.form.processDefinitionId, - this.field.id - ) - .subscribe( - (result: FormFieldOption[]) => { - let options = result || []; - let toSelect = options.find(item => item.id === this.field.value); - this.field.options = options; - if (toSelect) { - this.value = toSelect.name; - } else { - this.value = this.field.value; - } - this.visibilityService.refreshVisibility(this.field.form); - }, - (error) => { - this.value = this.field.value; - } - ); - } - - getValuesByTaskId() { - this.formService - .getRestFieldValues(this.field.form.taskId, this.field.id) - .subscribe( - (result: FormFieldOption[]) => { - let options = result || []; - let toSelect = options.find(item => item.id === this.field.value); - this.field.options = options; - if (toSelect) { - this.value = toSelect.name; - } else { - this.value = this.field.value; - } - this.visibilityService.refreshVisibility(this.field.form); - }, - (error) => { - this.error.emit(error); - this.value = this.field.value; - } - ); - } -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.css deleted file mode 100644 index ba9a5ba21d..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.css +++ /dev/null @@ -1,27 +0,0 @@ -.dropdown-widget { - width: 100%; - padding-top: 20px; - padding-bottom: 20px; -} - -.dropdown-widget__select { - width: 100%; - margin-top: 5px; - margin-bottom: 5px; -} - -.dropdown-widget__invalid .dropdown-widget__select { - border-color: #d50000; -} - -.dropdown-widget__invalid .dropdown-widget__label { - color: #d50000; -} - -.dropdown-widget__invalid .dropdown-widget__label:after { - background-color: #d50000; -} - -.dropdown-widget__invalid .mdl-textfield__error { - visibility: visible !important; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html index e79f2cb6bb..19aed4e37b 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html @@ -1,12 +1,14 @@ - diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.scss new file mode 100644 index 0000000000..73202bcb93 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.scss @@ -0,0 +1,14 @@ +@import 'theming'; +@import '../form'; + +.adf { + &-dropdown-widget { + width: 100%; + padding-top: 16px; + } + + &-select { + width: 100%; + } + +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.spec.ts index 77b39e2853..622b296518 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.spec.ts @@ -16,11 +16,14 @@ */ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; import { CoreModule } from 'ng2-alfresco-core'; import { Observable } from 'rxjs/Rx'; +import { MATERIAL_MODULE } from '../../../../index'; import { EcmModelService } from '../../../services/ecm-model.service'; import { FormService } from '../../../services/form.service'; import { WidgetVisibilityService } from '../../../services/widget-visibility.service'; +import { ErrorWidgetComponent } from '../error/error.component'; import { FormFieldOption } from './../core/form-field-option'; import { FormFieldModel } from './../core/form-field.model'; import { FormModel } from './../core/form.model'; @@ -28,16 +31,40 @@ import { DropdownWidgetComponent } from './dropdown.widget'; describe('DropdownWidgetComponent', () => { + function openSelect() { + const dropdown = fixture.debugElement.query(By.css('[class="mat-select-trigger"]')); + dropdown.triggerEventHandler('click', null); + fixture.detectChanges(); + } + let formService: FormService; let widget: DropdownWidgetComponent; let visibilityService: WidgetVisibilityService; + let fixture: ComponentFixture; + let element: HTMLElement; - beforeEach(() => { - formService = new FormService(null, null, null); - visibilityService = new WidgetVisibilityService(null, null); - widget = new DropdownWidgetComponent(formService, visibilityService, null); - widget.field = new FormFieldModel(new FormModel()); - }); + let fakeOptionList: FormFieldOption[] = [ + {id: 'opt_1', name: 'option_1'}, + {id: 'opt_2', name: 'option_2'}, + {id: 'opt_3', name: 'option_3'}]; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + CoreModule, + ...MATERIAL_MODULE + ], + declarations: [DropdownWidgetComponent, ErrorWidgetComponent], + providers: [FormService, EcmModelService, WidgetVisibilityService] + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DropdownWidgetComponent); + widget = fixture.componentInstance; + element = fixture.nativeElement; + formService = TestBed.get(FormService); + visibilityService = TestBed.get(WidgetVisibilityService); + widget.field = new FormFieldModel(new FormModel()); + }); + })); it('should require field with restUrl', () => { spyOn(formService, 'getRestFieldValues').and.stub(); @@ -46,7 +73,7 @@ describe('DropdownWidgetComponent', () => { widget.ngOnInit(); expect(formService.getRestFieldValues).not.toHaveBeenCalled(); - widget.field = new FormFieldModel(null, { restUrl: null }); + widget.field = new FormFieldModel(null, {restUrl: null}); widget.ngOnInit(); expect(formService.getRestFieldValues).not.toHaveBeenCalled(); }); @@ -75,16 +102,16 @@ describe('DropdownWidgetComponent', () => { }); it('should preserve empty option when loading fields', () => { - let restFieldValue: FormFieldOption = { id: '1', name: 'Option1' }; - spyOn(formService, 'getRestFieldValues').and.returnValue( - Observable.create(observer => { + let restFieldValue: FormFieldOption = {id: '1', name: 'Option1'}; + spyOn(formService, 'getRestFieldValues').and.callFake(() => { + return Observable.create(observer => { observer.next([restFieldValue]); observer.complete(); - }) - ); + }); + }); - let form = new FormModel({ taskId: '' }); - let emptyOption: FormFieldOption = { id: 'empty', name: 'Empty' }; + let form = new FormModel({taskId: ''}); + let emptyOption: FormFieldOption = {id: 'empty', name: 'Empty'}; widget.field = new FormFieldModel(form, { id: '', restUrl: '/some/url/address', @@ -100,87 +127,69 @@ describe('DropdownWidgetComponent', () => { }); describe('when template is ready', () => { - let dropdownWidgetComponent: DropdownWidgetComponent; - let fixture: ComponentFixture; - let element: HTMLElement; - let componentHandler; - let stubFormService; - let fakeOptionList: FormFieldOption[] = [{ - id: 'opt_1', - name: 'option_1' - }, { - id: 'opt_2', - name: 'option_2' - }, { id: 'opt_3', name: 'option_3' }]; - - beforeEach(async(() => { - componentHandler = jasmine.createSpyObj('componentHandler', ['upgradeAllRegistered', 'upgradeElement']); - window['componentHandler'] = componentHandler; - TestBed.configureTestingModule({ - imports: [CoreModule], - declarations: [DropdownWidgetComponent], - providers: [FormService, EcmModelService, WidgetVisibilityService] - }).compileComponents().then(() => { - fixture = TestBed.createComponent(DropdownWidgetComponent); - dropdownWidgetComponent = fixture.componentInstance; - element = fixture.nativeElement; - }); - })); describe('and dropdown is populated via taskId', () => { beforeEach(async(() => { - stubFormService = fixture.debugElement.injector.get(FormService); - visibilityService = fixture.debugElement.injector.get(WidgetVisibilityService); spyOn(visibilityService, 'refreshVisibility').and.stub(); - spyOn(stubFormService, 'getRestFieldValues').and.returnValue(Observable.of(fakeOptionList)); - dropdownWidgetComponent.field = new FormFieldModel(new FormModel({ taskId: 'fake-task-id' }), { + spyOn(formService, 'getRestFieldValues').and.callFake(() => { + return Observable.of(fakeOptionList); + }); + widget.field = new FormFieldModel(new FormModel({taskId: 'fake-task-id'}), { id: 'dropdown-id', name: 'date-name', type: 'dropdown', readOnly: 'false', restUrl: 'fake-rest-url' }); - dropdownWidgetComponent.field.emptyOption = { id: 'empty', name: 'Choose one...' }; - dropdownWidgetComponent.field.isVisible = true; + widget.field.emptyOption = {id: 'empty', name: 'Choose one...'}; + widget.field.isVisible = true; fixture.detectChanges(); })); it('should show visible dropdown widget', async(() => { expect(element.querySelector('#dropdown-id')).toBeDefined(); expect(element.querySelector('#dropdown-id')).not.toBeNull(); - expect(element.querySelector('#opt_1')).not.toBeNull(); - expect(element.querySelector('#opt_2')).not.toBeNull(); - expect(element.querySelector('#opt_3')).not.toBeNull(); + + openSelect(); + + const optOne = fixture.debugElement.queryAll(By.css('[id="md-option-1"]')); + const optTwo = fixture.debugElement.queryAll(By.css('[id="md-option-2"]')); + const optThree = fixture.debugElement.queryAll(By.css('[id="md-option-3"]')); + + expect(optOne).not.toBeNull(); + expect(optTwo).not.toBeNull(); + expect(optThree).not.toBeNull(); })); it('should select the default value when an option is chosen as default', async(() => { - dropdownWidgetComponent.field.value = 'option_2'; + widget.field.value = 'option_2'; + widget.ngOnInit(); fixture.detectChanges(); fixture.whenStable() .then(() => { - let dropDownElement: HTMLSelectElement = element.querySelector('#dropdown-id'); - expect(dropDownElement).not.toBeNull(); - expect(element.querySelector('#opt_2')).not.toBeNull(); - expect(dropDownElement.value).toBe('option_2'); - expect(dropDownElement.selectedOptions[0].textContent).toBe('option_2'); + let dropDownElement: any = element.querySelector('#dropdown-id'); + expect(dropDownElement.attributes['ng-reflect-model'].value).toBe('option_2'); + expect(dropDownElement.attributes['ng-reflect-model'].textContent).toBe('option_2'); }); })); it('should select the empty value when no default is chosen', async(() => { - dropdownWidgetComponent.field.value = 'empty'; + widget.field.value = 'empty'; + widget.ngOnInit(); fixture.detectChanges(); + + openSelect(); + fixture.whenStable() .then(() => { - let dropDownElement: HTMLSelectElement = element.querySelector('#dropdown-id'); - expect(dropDownElement).not.toBeNull(); - expect(dropDownElement.value).toBe('empty'); - expect(dropDownElement.selectedOptions[0].textContent).toBe('Choose one...'); + let dropDownElement: any = element.querySelector('#dropdown-id'); + expect(dropDownElement.attributes['ng-reflect-model'].value).toBe('empty'); }); })); - it('should be not visibile when isVisible is false', async(() => { - dropdownWidgetComponent.field.isVisible = false; + it('should be not visible when isVisible is false', async(() => { + widget.field.isVisible = false; fixture.detectChanges(); fixture.whenStable() .then(() => { @@ -189,11 +198,11 @@ describe('DropdownWidgetComponent', () => { }); })); - it('should became visibile when isVisible is true', async(() => { - dropdownWidgetComponent.field.isVisible = false; + it('should became visible when isVisible is true', async(() => { + widget.field.isVisible = false; fixture.detectChanges(); expect(element.querySelector('#dropdown-id')).toBeNull(); - dropdownWidgetComponent.field.isVisible = true; + widget.field.isVisible = true; fixture.detectChanges(); fixture.whenStable() .then(() => { @@ -205,57 +214,65 @@ describe('DropdownWidgetComponent', () => { describe('and dropdown is populated via processDefinitionId', () => { beforeEach(async(() => { - stubFormService = fixture.debugElement.injector.get(FormService); - visibilityService = fixture.debugElement.injector.get(WidgetVisibilityService); spyOn(visibilityService, 'refreshVisibility').and.stub(); - spyOn(stubFormService, 'getRestFieldValuesByProcessId').and.returnValue(Observable.of(fakeOptionList)); - dropdownWidgetComponent.field = new FormFieldModel(new FormModel({ processDefinitionId: 'fake-process-id' }), { + spyOn(formService, 'getRestFieldValuesByProcessId').and.callFake(() => { + return Observable.of(fakeOptionList); + }); + widget.field = new FormFieldModel(new FormModel({processDefinitionId: 'fake-process-id'}), { id: 'dropdown-id', name: 'date-name', type: 'dropdown', readOnly: 'false', restUrl: 'fake-rest-url' }); - dropdownWidgetComponent.field.emptyOption = { id: 'empty', name: 'Choose one...' }; - dropdownWidgetComponent.field.isVisible = true; + widget.field.emptyOption = {id: 'empty', name: 'Choose one...'}; + widget.field.isVisible = true; fixture.detectChanges(); })); it('should show visible dropdown widget', async(() => { expect(element.querySelector('#dropdown-id')).toBeDefined(); expect(element.querySelector('#dropdown-id')).not.toBeNull(); - expect(element.querySelector('#opt_1')).not.toBeNull(); - expect(element.querySelector('#opt_2')).not.toBeNull(); - expect(element.querySelector('#opt_3')).not.toBeNull(); + + openSelect(); + + const optOne = fixture.debugElement.queryAll(By.css('[id="md-option-1"]')); + const optTwo = fixture.debugElement.queryAll(By.css('[id="md-option-2"]')); + const optThree = fixture.debugElement.queryAll(By.css('[id="md-option-3"]')); + + expect(optOne).not.toBeNull(); + expect(optTwo).not.toBeNull(); + expect(optThree).not.toBeNull(); })); it('should select the default value when an option is chosen as default', async(() => { - dropdownWidgetComponent.field.value = 'option_2'; + widget.field.value = 'option_2'; + widget.ngOnInit(); fixture.detectChanges(); fixture.whenStable() .then(() => { - let dropDownElement: HTMLSelectElement = element.querySelector('#dropdown-id'); - expect(dropDownElement).not.toBeNull(); - expect(element.querySelector('#opt_2')).not.toBeNull(); - expect(dropDownElement.value).toBe('option_2'); - expect(dropDownElement.selectedOptions[0].textContent).toBe('option_2'); + let dropDownElement: any = element.querySelector('#dropdown-id'); + expect(dropDownElement.attributes['ng-reflect-model'].value).toBe('option_2'); + expect(dropDownElement.attributes['ng-reflect-model'].textContent).toBe('option_2'); }); })); it('should select the empty value when no default is chosen', async(() => { - dropdownWidgetComponent.field.value = 'empty'; + widget.field.value = 'empty'; + widget.ngOnInit(); fixture.detectChanges(); + + openSelect(); + fixture.whenStable() .then(() => { - let dropDownElement: HTMLSelectElement = element.querySelector('#dropdown-id'); - expect(dropDownElement).not.toBeNull(); - expect(dropDownElement.value).toBe('empty'); - expect(dropDownElement.selectedOptions[0].textContent).toBe('Choose one...'); + let dropDownElement: any = element.querySelector('#dropdown-id'); + expect(dropDownElement.attributes['ng-reflect-model'].value).toBe('empty'); }); })); it('should be disabled when the field is readonly', async(() => { - dropdownWidgetComponent.field = new FormFieldModel(new FormModel({ processDefinitionId: 'fake-process-id' }), { + widget.field = new FormFieldModel(new FormModel({processDefinitionId: 'fake-process-id'}), { id: 'dropdown-id', name: 'date-name', type: 'dropdown', @@ -268,7 +285,7 @@ describe('DropdownWidgetComponent', () => { .then(() => { let dropDownElement: HTMLSelectElement = element.querySelector('#dropdown-id'); expect(dropDownElement).not.toBeNull(); - expect(dropDownElement.disabled).toBeTruthy(); + expect(dropDownElement.getAttribute('aria-disabled')).toBe('true'); }); })); }); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.ts index e92936781b..f5c1a7d108 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.ts @@ -17,7 +17,7 @@ /* tslint:disable:component-selector */ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; import { LogService } from 'ng2-alfresco-core'; import { FormService } from '../../../services/form.service'; import { WidgetVisibilityService } from '../../../services/widget-visibility.service'; @@ -27,8 +27,9 @@ import { baseHost , WidgetComponent } from './../widget.component'; @Component({ selector: 'dropdown-widget', templateUrl: './dropdown.widget.html', - styleUrls: ['./dropdown.widget.css'], - host: baseHost + styleUrls: ['./dropdown.widget.scss'], + host: baseHost, + encapsulation: ViewEncapsulation.None }) export class DropdownWidgetComponent extends WidgetComponent implements OnInit { diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.css deleted file mode 100644 index 3567b82329..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.css +++ /dev/null @@ -1,42 +0,0 @@ -.dynamic-table-widget { - padding: 8px; -} - -.dynamic-table-widget__buttons { - margin-top: 10px; -} - -.dynamic-table-widget__row-selected, -.dynamic-table-widget__row-selected:hover { - background-color: #eef !important; -} - -.dynamic-table-widget__table-container { - overflow-y: auto; - width: 100%; -} - -.dynamic-table-widget__table { - width: 100%; -} - -.dynamic-table-widget__invalid .dynamic-table-widget__label { - color: #d50000; -} - -.dynamic-table-widget__invalid .dynamic-table-widget__table-container { - border: 1px solid #d50000; -} - -.dynamic-table-widget__invalid .dynamic-table-widget__table { - border: none; -} - -.dynamic-table-widget__summary { - visibility: hidden; - color: #d50000; -} - -.dynamic-table-widget__invalid .dynamic-table-widget__summary { - visibility: visible !important; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.html index 4d5568172d..5f3da680bc 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.html @@ -1,23 +1,21 @@ -
-
{{content.name}}
+
+
{{content.name}}*
-
-
+
+
- + [class.adf-dynamic-table-widget__row-selected]="row.selected" (keyup)="onKeyPressed($event, row)"> @@ -26,28 +24,29 @@
+ {{column.name}}
{{ getCellValue(row, column) }}
-
- - - - -
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.scss new file mode 100644 index 0000000000..d282d23627 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.scss @@ -0,0 +1,162 @@ +@import 'theming'; +@import '../form'; + +$dynamic-table-font-size: 14px !default; +$dynamic-table-header-font-size: 12px !default; +$dynamic-table-header-sort-icon-size: 16px !default; +$dynamic-table-header-color: $alfresco-secondary-text-color !default; +$dynamic-table-header-sorted-color: $alfresco-primary-text-color !default; +$dynamic-table-header-sorted-icon-hover-color: $alfresco-disabled-text-color !default; +$dynamic-table-divider-color: $alfresco-divider-color !default; +$dynamic-table-hover-color: #eeeeee !default; +$dynamic-table-selection-color: #e0f7fa !default; +$dynamic-table-dividers: 1px solid $dynamic-table-divider-color !default; +$dynamic-table-row-height: 56px !default; +$dynamic-table-column-spacing: 36px !default; +$dynamic-table-column-padding: $dynamic-table-column-spacing / 2; +$dynamic-table-card-padding: 24px !default; +$dynamic-table-cell-top: $dynamic-table-card-padding / 2; +$dynamic-table-drag-border: 1px dashed rgb(68,138,255); + + +.adf { + + &-dynamic-table { + width: 100%; + position: relative; + border: $dynamic-table-dividers; + white-space: nowrap; + font-size: $dynamic-table-font-size; + background-color: unquote("rgb(#{$alfresco-white})"); + + /* Firefox fixes */ + border-collapse: unset; + border-spacing: 0; + + thead { + padding-bottom: 3px; + } + + tbody { + tr { + position: relative; + height: $dynamic-table-row-height; + @include material-animation-default(0.28s); + transition-property: background-color; + + &:hover { + background-color: $dynamic-table-hover-color; + } + + &.is-selected, &.is-selected:hover { + background-color: $dynamic-table-selection-color; + } + + &:focus { + outline-offset: -1px; + outline-width: 1px; + outline-color: rgb(68,138,255); + outline-style: solid; + } + } + } + + td, th { + padding: 0 $dynamic-table-column-padding 12px $dynamic-table-column-padding; + text-align: center; + + &:first-of-type { + padding-left: 24px; + } + + &:last-of-type { + padding-right: 24px; + } + } + + td { + color: $alfresco-secondary-text-color; + position: relative; + vertical-align: middle; + height: $dynamic-table-row-height; + border-top: $dynamic-table-dividers; + border-bottom: $dynamic-table-dividers; + padding-top: $dynamic-table-cell-top; + box-sizing: border-box; + + @include no-select; + cursor: default; + } + + th { + @include no-select; + cursor: pointer; + position: relative; + vertical-align: bottom; + text-overflow: ellipsis; + font-weight: bold; + line-height: 24px; + letter-spacing: 0; + height: $dynamic-table-row-height; + font-size: $dynamic-table-header-font-size; + color: $dynamic-table-header-color; + padding-bottom: 8px; + box-sizing: border-box; + + &.sortable { + @include no-select; + &:hover { + cursor: pointer; + } + } + + &.adf-dynamic-table__header--sorted-asc, + &.adf-dynamic-table__header--sorted-desc { + color: $dynamic-table-header-sorted-color; + &:before { + @include typo-icon; + font-size: $dynamic-table-header-sort-icon-size; + content: "\e5d8"; + margin-right: 5px; + vertical-align: sub; + } + &:hover { + cursor: pointer; + &:before { + color: $dynamic-table-header-sorted-icon-hover-color; + } + } + } + &.adf-dynamic-table__header--sorted-desc:before { + content: "\e5db"; + } + } + + .adf-dynamic-table-cell { + text-align: left; + cursor: default; + + &--text { + text-align: left; + } + + &--number { + text-align: right; + } + + &--image { + text-align: left; + + img { + width: 24px; + height: 24px; + } + } + } + + .full-width { + width: 100%; + color: $alfresco-primary-text-color; + } + } +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.spec.ts index 511a00de8c..a5f585b7f3 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.spec.ts @@ -18,8 +18,10 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { LogServiceMock } from 'ng2-alfresco-core'; import { CoreModule, LogService } from 'ng2-alfresco-core'; +import { MATERIAL_MODULE } from '../../../../index'; import { ActivitiAlfrescoContentService } from '../../../services/activiti-alfresco.service'; import { WidgetVisibilityService } from '../../../services/widget-visibility.service'; +import { ErrorWidgetComponent } from '../error/error.component'; import { EcmModelService } from './../../../services/ecm-model.service'; import { FormService } from './../../../services/form.service'; import { FormFieldModel, FormFieldTypes, FormModel } from './../core/index'; @@ -79,15 +81,16 @@ describe('DynamicTableWidgetComponent', () => { let element: HTMLElement; let table: DynamicTableModel; let logService: LogService; - let componentHandler: any; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - CoreModule.forRoot() + CoreModule.forRoot(), + ...MATERIAL_MODULE ], declarations: [DynamicTableWidgetComponent, RowEditorComponent, - DropdownEditorComponent, DateEditorComponent, BooleanEditorComponent, TextEditorComponent], + DropdownEditorComponent, DateEditorComponent, BooleanEditorComponent, + TextEditorComponent, ErrorWidgetComponent], providers: [ FormService, {provide: LogService, useClass: LogServiceMock}, @@ -337,11 +340,6 @@ describe('DynamicTableWidgetComponent', () => { describe('when template is ready', () => { - beforeEach(async(() => { - componentHandler = jasmine.createSpyObj('componentHandler', ['upgradeAllRegistered', 'upgradeElement']); - window['componentHandler'] = componentHandler; - })); - beforeEach(() => { widget.field = new FormFieldModel(new FormModel({taskId: 'fake-task-id'}), fakeFormField); widget.field.type = FormFieldTypes.DYNAMIC_TABLE; @@ -368,7 +366,7 @@ describe('DynamicTableWidgetComponent', () => { fixture.whenStable().then(() => { let selectedRow = element.querySelector('#fake-dynamic-table-row-0'); - expect(selectedRow.className).toBe('dynamic-table-widget__row-selected'); + expect(selectedRow.className).toBe('adf-dynamic-table-widget__row-selected'); }); })); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.ts index 8a5e8d41ac..0ef2b4adaa 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.ts @@ -17,10 +17,9 @@ /* tslint:disable:component-selector */ -import { ChangeDetectorRef, Component, ElementRef, Input, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, ElementRef, OnInit, ViewEncapsulation } from '@angular/core'; import { LogService } from 'ng2-alfresco-core'; import { WidgetVisibilityService } from '../../../services/widget-visibility.service'; -import { FormFieldModel } from '../core/form-field.model'; import { FormService } from './../../../services/form.service'; import { baseHost , WidgetComponent } from './../widget.component'; import { DynamicTableColumn, DynamicTableModel, DynamicTableRow } from './dynamic-table.widget.model'; @@ -28,19 +27,14 @@ import { DynamicTableColumn, DynamicTableModel, DynamicTableRow } from './dynami @Component({ selector: 'dynamic-table-widget', templateUrl: './dynamic-table.widget.html', - styleUrls: ['./dynamic-table.widget.css'], - host: baseHost + styleUrls: ['./dynamic-table.widget.scss'], + host: baseHost, + encapsulation: ViewEncapsulation.None }) export class DynamicTableWidgetComponent extends WidgetComponent implements OnInit { ERROR_MODEL_NOT_FOUND = 'Table model not found'; - @Input() - field: FormFieldModel; - - @Input() - readOnly: boolean = false; - content: DynamicTableModel; editMode: boolean = false; diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.html b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.html index b92d6f30ba..3820fca3d1 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.html @@ -1,11 +1,11 @@ - diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.scss b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.scss new file mode 100644 index 0000000000..ab0f20364e --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.scss @@ -0,0 +1,13 @@ +@import 'theming'; + +.adf { + + &-checkbox-label { + position: relative; + cursor: pointer; + font-size: 16px; + line-height: 24px; + margin: 0; + } + +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.spec.ts index cb1a6e2ce2..acaac1ec1c 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.spec.ts @@ -29,7 +29,7 @@ describe('BooleanEditorComponent', () => { it('should update row value on change', () => { let row = { value: {} }; let column = { id: 'key' }; - let event = { target: { checked: true } }; + let event = { checked: true } ; component.onValueChanged(row, column, event); expect(row.value[column.id]).toBeTruthy(); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.ts index dc9a812591..423f906b3d 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/boolean/boolean.editor.ts @@ -21,9 +21,9 @@ import { Component, Input } from '@angular/core'; import { DynamicTableColumn, DynamicTableModel, DynamicTableRow } from './../../dynamic-table.widget.model'; @Component({ - selector: 'alf-boolean-editor', + selector: 'adf-boolean-editor', templateUrl: './boolean.editor.html', - styleUrls: ['./boolean.editor.css'] + styleUrls: ['./boolean.editor.scss'] }) export class BooleanEditorComponent { @@ -37,7 +37,7 @@ export class BooleanEditorComponent { column: DynamicTableColumn; onValueChanged(row: DynamicTableRow, column: DynamicTableColumn, event: any) { - let value: boolean = ( event.target).checked; + let value: boolean = ( event).checked; row.value[column.id] = value; } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.css b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.css deleted file mode 100644 index 9101330a83..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.css +++ /dev/null @@ -1,7 +0,0 @@ -.date-editor { - width: 100%; -} - -.date-editor--button { - margin-top: 15px; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.html b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.html index 982a5e67bc..5e9e34b489 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.html @@ -1,23 +1,17 @@ -
-
-
- - -
-
-
- -
+
+ + + + + +
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.scss b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.scss new file mode 100644 index 0000000000..f6a3e3959c --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.scss @@ -0,0 +1,12 @@ +@import 'theming'; + +.adf { + &-date-editor { + width: 100%; + } + + &-date-editor-button { + position: relative; + top: 25px; + } +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.spec.ts index dd3280ed49..35e8de33ea 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.spec.ts @@ -15,8 +15,8 @@ * limitations under the License. */ -import { ElementRef } from '@angular/core'; import * as moment from 'moment'; +import { MomentDateAdapter } from 'ng2-alfresco-core'; import { FormFieldModel, FormModel } from '../../../index'; import { DynamicTableColumn, DynamicTableModel, DynamicTableRow } from './../../dynamic-table.widget.model'; import { DateEditorComponent } from './date.editor'; @@ -24,7 +24,6 @@ import { DateEditorComponent } from './date.editor'; describe('DateEditorComponent', () => { let nativeElement: any; - let elementRef: ElementRef; let component: DateEditorComponent; let row: DynamicTableRow; let column: DynamicTableColumn; @@ -41,118 +40,24 @@ describe('DateEditorComponent', () => { table = new DynamicTableModel(field); table.rows.push(row); table.columns.push(column); - - elementRef = new ElementRef(nativeElement); - component = new DateEditorComponent(elementRef); + component = new DateEditorComponent(new MomentDateAdapter()); component.table = table; component.row = row; component.column = column; }); - it('should setup date picker on init', () => { - let trigger = {}; - spyOn(nativeElement, 'querySelector').and.returnValue(trigger); - - component.ngOnInit(); - - let settings = component.settings; - expect(settings.type).toBe('date'); - expect(settings.future.year()).toBe(moment().year() + 100); - expect(settings.init.isSame(moment('14-03-1879', component.DATE_FORMAT))).toBeTruthy(); - expect(component.datePicker.trigger).toBe(trigger); - }); - - it('should require cell value to setup initial date', () => { - row.value[column.id] = null; - component.ngOnInit(); - expect(component.settings.init).toBeUndefined(); - }); - - it('should require dom element to setup trigger', () => { - component = new DateEditorComponent(null); - component.table = table; - component.row = row; - component.column = column; - component.ngOnInit(); - expect(component.datePicker.trigger).toBeFalsy(); - }); - it('should update fow value on change', () => { component.ngOnInit(); - component.datePicker.time = moment('14-03-1879', 'DD-MM-YYYY'); - component.onDateSelected(null); + let newDate = moment('14-03-1879', 'DD-MM-YYYY'); + component.onDateChanged(newDate); expect(row.value[column.id]).toBe('1879-03-14T00:00:00.000Z'); }); - it('should update material textfield on date selected', () => { - component.ngOnInit(); - component.datePicker.time = moment('14-03-1879', 'DD-MM-YYYY'); - spyOn(component, 'updateMaterialTextField').and.stub(); - component.onDateSelected(null); - expect(component.updateMaterialTextField).toHaveBeenCalled(); - }); - - it('should require dom element to update material textfield on change', () => { - component = new DateEditorComponent(null); - component.table = table; - component.row = row; - component.column = column; - component.ngOnInit(); - - component.datePicker.time = moment('14-03-1879', 'DD-MM-YYYY'); - spyOn(component, 'updateMaterialTextField').and.stub(); - component.onDateSelected(null); - expect(component.updateMaterialTextField).not.toHaveBeenCalled(); - }); - - it('should require dom element to update material textfield', () => { - let result = component.updateMaterialTextField(null, 'value'); - expect(result).toBeFalsy(); - }); - - it('should require native dom element to update material textfield', () => { - elementRef.nativeElement = null; - let result = component.updateMaterialTextField(elementRef, 'value'); - expect(result).toBeFalsy(); - }); - - it('should require input element to update material textfield', () => { - spyOn(nativeElement, 'querySelector').and.returnValue(null); - let result = component.updateMaterialTextField(elementRef, 'value'); - expect(result).toBeFalsy(); - }); - - it('should update material textfield with new value', () => { - let called = false; - const value = ''; - - spyOn(nativeElement, 'querySelector').and.returnValue({ - MaterialTextfield: { - change: function (val) { - called = true; - expect(val).toBe(value); - } - } - }); - component.updateMaterialTextField(elementRef, value); - expect(called).toBeTruthy(); - }); - - it('should update picker when input changed', () => { - const input = '14-03-2016'; - let event = { target: { value: input } }; - component.ngOnInit(); - component.onDateChanged(event); - - expect(component.datePicker.time.isSame(moment(input, 'DD-MM-YYYY'))).toBeTruthy(); - }); - it('should update row value upon user input', () => { const input = '14-03-2016'; - let event = { target: { value: input } }; component.ngOnInit(); - component.onDateChanged(event); + component.onDateChanged(input); let actual = row.value[column.id]; expect(actual).toBe('2016-03-14T00:00:00.000Z'); @@ -160,12 +65,11 @@ describe('DateEditorComponent', () => { it('should flush value on user input', () => { spyOn(table, 'flushValue').and.callThrough(); - let event = { target: { value: 'value' } }; + const input = '14-03-2016'; component.ngOnInit(); - component.onDateChanged(event); + component.onDateChanged(input); expect(table.flushValue).toHaveBeenCalled(); }); - }); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.ts index 1eb5cb3f5b..623c46a5c4 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/date/date.editor.ts @@ -17,23 +17,25 @@ /* tslint:disable:component-selector */ -import { Component, ElementRef, Input, OnInit } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; +import { DateAdapter, MD_DATE_FORMATS } from '@angular/material'; import * as moment from 'moment'; +import { Moment } from 'moment'; +import { MOMENT_DATE_FORMATS, MomentDateAdapter } from 'ng2-alfresco-core'; import { DynamicTableColumn, DynamicTableModel, DynamicTableRow } from './../../dynamic-table.widget.model'; -declare let mdDateTimePicker: any; - @Component({ - selector: 'alf-date-editor', + selector: 'adf-date-editor', templateUrl: './date.editor.html', - styleUrls: ['./date.editor.css'] + providers: [ + {provide: DateAdapter, useClass: MomentDateAdapter}, + {provide: MD_DATE_FORMATS, useValue: MOMENT_DATE_FORMATS}], + styleUrls: ['./date.editor.scss'] }) export class DateEditorComponent implements OnInit { DATE_FORMAT: string = 'DD-MM-YYYY'; - datePicker: any; - settings: any; value: any; @Input() @@ -45,56 +47,30 @@ export class DateEditorComponent implements OnInit { @Input() column: DynamicTableColumn; - constructor(public elementRef: ElementRef) {} + minDate: Moment; + maxDate: Moment; + + constructor(public dateAdapter: DateAdapter) { + } ngOnInit() { - this.settings = { - type: 'date', - past: moment().subtract(100, 'years'), - future: moment().add(100, 'years') - }; + let momentDateAdapter = this.dateAdapter; + momentDateAdapter.overrideDisplyaFormat = this.DATE_FORMAT; - this.value = this.table.getCellValue(this.row, this.column); - if (this.value) { - this.settings.init = moment(this.value, this.DATE_FORMAT); - } - - this.datePicker = new mdDateTimePicker.default(this.settings); - if (this.elementRef) { - this.datePicker.trigger = this.elementRef.nativeElement.querySelector('#dateInput'); - } + this.value = moment(this.table.getCellValue(this.row, this.column), this.DATE_FORMAT); } - onDateChanged(event: any) { - let newValue = ( event.target).value; - let dateValue = moment(newValue, this.DATE_FORMAT); - this.datePicker.time = dateValue; - this.row.value[this.column.id] = `${dateValue.format('YYYY-MM-DD')}T00:00:00.000Z`; - this.table.flushValue(); - } + onDateChanged(newDateValue) { + if (newDateValue) { + let momentDate = moment(newDateValue, this.DATE_FORMAT, true); - onDateSelected(event: CustomEvent) { - this.value = this.datePicker.time.format('DD-MM-YYYY'); - let newValue = this.datePicker.time.format('YYYY-MM-DD'); - this.row.value[this.column.id] = `${newValue}T00:00:00.000Z`; - this.table.flushValue(); - - if (this.elementRef) { - this.updateMaterialTextField(this.elementRef, newValue); - } - } - - updateMaterialTextField(elementRef: ElementRef, value: string): boolean { - if (elementRef) { - let el = elementRef.nativeElement; - if (el) { - let container = el.querySelector('.mdl-textfield'); - if (container) { - container.MaterialTextfield.change(value); - return true; - } + if (!momentDate.isValid()) { + this.row.value[this.column.id] = ''; + }else { + this.row.value[this.column.id] = `${momentDate.format('YYYY-MM-DD')}T00:00:00.000Z`; + this.table.flushValue(); } } - return false; } + } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.css b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.css deleted file mode 100644 index 0db743bfa6..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.css +++ /dev/null @@ -1,3 +0,0 @@ -.dropdown-editor__select { - width: 100%; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.html b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.html index 93afc1d666..b80a2652ba 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.html @@ -1,15 +1,14 @@ diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.scss b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.scss new file mode 100644 index 0000000000..60d4942603 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.scss @@ -0,0 +1,7 @@ +@import 'theming'; + +.adf { + &-dropdown-editor-select { + width: 100%; + } +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.spec.ts index b598ef5cec..658e998fe9 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.spec.ts @@ -16,8 +16,10 @@ */ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; import { CoreModule } from 'ng2-alfresco-core'; import { Observable } from 'rxjs/Rx'; +import { MATERIAL_MODULE } from '../../../../../../index'; import { EcmModelService } from '../../../../../services/ecm-model.service'; import { FormService } from './../../../../../services/form.service'; import { FormFieldModel, FormModel } from './../../../core/index'; @@ -41,17 +43,17 @@ describe('DropdownEditorComponent', () => { beforeEach(() => { formService = new FormService(null, null, null); - row = { value: { dropdown: 'one' } }; + row = {value: {dropdown: 'one'}}; column = { id: 'dropdown', options: [ - { id: '1', name: 'one' }, - { id: '2', name: 'two' } + {id: '1', name: 'one'}, + {id: '2', name: 'two'} ] }; - form = new FormModel({ taskId: '' }); - table = new DynamicTableModel(new FormFieldModel(form, { id: '' })); + form = new FormModel({taskId: ''}); + table = new DynamicTableModel(new FormFieldModel(form, {id: ''})); table.rows.push(row); table.columns.push(column); @@ -86,8 +88,8 @@ describe('DropdownEditorComponent', () => { row.value[column.id] = 'twelve'; let restResults = [ - { id: '11', name: 'eleven' }, - { id: '12', name: 'twelve' } + {id: '11', name: 'eleven'}, + {id: '12', name: 'twelve'} ]; spyOn(formService, 'getRestFieldValuesColumn').and.returnValue( @@ -148,8 +150,8 @@ describe('DropdownEditorComponent', () => { it('should handle REST error getting option with processDefinitionId', () => { column.optionType = 'rest'; - let procForm = new FormModel ({processDefinitionId: ''}); - let procTable = new DynamicTableModel(new FormFieldModel(procForm, { id: '' })); + let procForm = new FormModel({processDefinitionId: ''}); + let procTable = new DynamicTableModel(new FormFieldModel(procForm, {id: ''})); component.table = procTable; const error = 'error'; @@ -163,16 +165,22 @@ describe('DropdownEditorComponent', () => { }); it('should update row on value change', () => { - let event = { target: { value: 'two' } }; + let event = {value: 'two'}; component.onValueChanged(row, column, event); expect(row.value[column.id]).toBe(column.options[1]); }); describe('when template is ready', () => { + + function openSelect() { + const dropdown = fixture.debugElement.query(By.css('[class="mat-select-trigger"]')); + dropdown.triggerEventHandler('click', null); + fixture.detectChanges(); + } + let dropDownEditorComponent: DropdownEditorComponent; let fixture: ComponentFixture; let element: HTMLElement; - let componentHandler; let stubFormService; let fakeOptionList: DynamicTableColumnOption[] = [{ id: 'opt_1', @@ -180,14 +188,12 @@ describe('DropdownEditorComponent', () => { }, { id: 'opt_2', name: 'option_2' - }, { id: 'opt_3', name: 'option_3' }]; + }, {id: 'opt_3', name: 'option_3'}]; let dynamicTable: DynamicTableModel; beforeEach(async(() => { - componentHandler = jasmine.createSpyObj('componentHandler', ['upgradeAllRegistered', 'upgradeElement']); - window['componentHandler'] = componentHandler; TestBed.configureTestingModule({ - imports: [CoreModule], + imports: [CoreModule, ...MATERIAL_MODULE], declarations: [DropdownEditorComponent], providers: [FormService, EcmModelService] }).compileComponents().then(() => { @@ -207,17 +213,17 @@ describe('DropdownEditorComponent', () => { beforeEach(async(() => { stubFormService = fixture.debugElement.injector.get(FormService); spyOn(stubFormService, 'getRestFieldValuesColumn').and.returnValue(Observable.of(fakeOptionList)); - row = { value: { dropdown: 'one' } }; + row = {value: {dropdown: 'one'}}; column = { id: 'column-id', optionType: 'rest', options: [ - { id: '1', name: 'one' }, - { id: '2', name: 'two' } + {id: '1', name: 'one'}, + {id: '2', name: 'two'} ] }; - form = new FormModel({ taskId: '' }); - dynamicTable = new DynamicTableModel(new FormFieldModel(form, { id: '' })); + form = new FormModel({taskId: ''}); + dynamicTable = new DynamicTableModel(new FormFieldModel(form, {id: ''})); dynamicTable.rows.push(row); dynamicTable.columns.push(column); dropDownEditorComponent.table = dynamicTable; @@ -237,9 +243,16 @@ describe('DropdownEditorComponent', () => { it('should show visible dropdown widget', async(() => { expect(element.querySelector('#column-id')).toBeDefined(); expect(element.querySelector('#column-id')).not.toBeNull(); - expect(element.querySelector('#opt_1')).not.toBeNull(); - expect(element.querySelector('#opt_2')).not.toBeNull(); - expect(element.querySelector('#opt_3')).not.toBeNull(); + + openSelect(); + + const optOne = fixture.debugElement.queryAll(By.css('[id="md-option-1"]')); + const optTwo = fixture.debugElement.queryAll(By.css('[id="md-option-2"]')); + const optThree = fixture.debugElement.queryAll(By.css('[id="md-option-3"]')); + + expect(optOne).not.toBeNull(); + expect(optTwo).not.toBeNull(); + expect(optThree).not.toBeNull(); })); }); @@ -248,17 +261,17 @@ describe('DropdownEditorComponent', () => { beforeEach(async(() => { stubFormService = fixture.debugElement.injector.get(FormService); spyOn(stubFormService, 'getRestFieldValuesColumnByProcessId').and.returnValue(Observable.of(fakeOptionList)); - row = { value: { dropdown: 'one' } }; + row = {value: {dropdown: 'one'}}; column = { id: 'column-id', optionType: 'rest', options: [ - { id: '1', name: 'one' }, - { id: '2', name: 'two' } + {id: '1', name: 'one'}, + {id: '2', name: 'two'} ] }; - form = new FormModel({ processDefinitionId: '' }); - dynamicTable = new DynamicTableModel(new FormFieldModel(form, { id: '' })); + form = new FormModel({processDefinitionId: ''}); + dynamicTable = new DynamicTableModel(new FormFieldModel(form, {id: ''})); dynamicTable.rows.push(row); dynamicTable.columns.push(column); dropDownEditorComponent.table = dynamicTable; @@ -278,18 +291,18 @@ describe('DropdownEditorComponent', () => { it('should show visible dropdown widget', async(() => { expect(element.querySelector('#column-id')).toBeDefined(); expect(element.querySelector('#column-id')).not.toBeNull(); - expect(element.querySelector('#opt_1')).not.toBeNull(); - expect(element.querySelector('#opt_2')).not.toBeNull(); - expect(element.querySelector('#opt_3')).not.toBeNull(); + + openSelect(); + + const optOne = fixture.debugElement.queryAll(By.css('[id="md-option-1"]')); + const optTwo = fixture.debugElement.queryAll(By.css('[id="md-option-2"]')); + const optThree = fixture.debugElement.queryAll(By.css('[id="md-option-3"]')); + + expect(optOne).not.toBeNull(); + expect(optTwo).not.toBeNull(); + expect(optThree).not.toBeNull(); })); - it('should show visible dropdown widget', async(() => { - expect(element.querySelector('#column-id')).toBeDefined(); - expect(element.querySelector('#column-id')).not.toBeNull(); - expect(element.querySelector('#opt_1')).not.toBeNull(); - expect(element.querySelector('#opt_2')).not.toBeNull(); - expect(element.querySelector('#opt_3')).not.toBeNull(); - })); }); }); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.ts index d0d3963fc2..5186d95327 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.ts @@ -23,9 +23,9 @@ import { FormService } from './../../../../../services/form.service'; import { DynamicTableColumn, DynamicTableColumnOption, DynamicTableModel, DynamicTableRow } from './../../dynamic-table.widget.model'; @Component({ - selector: 'alf-dropdown-editor', + selector: 'adf-dropdown-editor', templateUrl: './dropdown.editor.html', - styleUrls: ['./dropdown.editor.css'] + styleUrls: ['./dropdown.editor.scss'] }) export class DropdownEditorComponent implements OnInit { @@ -96,7 +96,7 @@ export class DropdownEditorComponent implements OnInit { } onValueChanged(row: DynamicTableRow, column: DynamicTableColumn, event: any) { - let value: any = ( event.target).value; + let value: any = ( event).value; value = column.options.find(opt => opt.name === value); row.value[column.id] = value; } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/row.editor.html b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/row.editor.html index 4db9fed239..fad8233126 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/row.editor.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/row.editor.html @@ -3,43 +3,39 @@
- - +
- - +
- - +
- - +
-
{{validationSummary.text}}
+
- - + +
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.css b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.css deleted file mode 100644 index 81665765ce..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.css +++ /dev/null @@ -1,3 +0,0 @@ -.text-editor { - width: 100%; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.html b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.html index 3e702fd673..28d0e6a71b 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.html @@ -1,11 +1,12 @@ -
- + + + - + [id]="column.id"> +
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.scss b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.scss new file mode 100644 index 0000000000..ab3d5623f8 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.scss @@ -0,0 +1,7 @@ +@import 'theming'; + +.adf { + &-text-editor { + width: 100%; + } +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.ts index b2ae333a32..8f739eee33 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/text/text.editor.ts @@ -21,9 +21,9 @@ import { Component, Input, OnInit } from '@angular/core'; import { DynamicTableColumn, DynamicTableModel, DynamicTableRow } from './../../dynamic-table.widget.model'; @Component({ - selector: 'alf-text-editor', + selector: 'adf-text-editor', templateUrl: './text.editor.html', - styleUrls: ['./text.editor.css'] + styleUrls: ['./text.editor.scss'] }) export class TextEditorComponent implements OnInit { diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.html b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.html new file mode 100644 index 0000000000..5022255d8f --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.html @@ -0,0 +1,6 @@ +
+
+
{{error}}
+ warning +
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.ts b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.ts new file mode 100644 index 0000000000..6c30d3c5b1 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.ts @@ -0,0 +1,55 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* tslint:disable:component-selector */ + +import { animate, state, style, transition, trigger } from '@angular/animations'; +import { AfterViewInit, Component, Input, ViewEncapsulation } from '@angular/core'; +import { FormService } from './../../../services/form.service'; +import { baseHost , WidgetComponent } from './../widget.component'; + +@Component({ + selector: 'error-widget', + templateUrl: './error.component.html', + animations: [ + trigger('transitionMessages', [ + state('enter', style({opacity: 1, transform: 'translateY(0%)'})), + transition('void => enter', [ + style({opacity: 0, transform: 'translateY(-100%)'}), + animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)') + ]) + ]) + ], + host: baseHost, + encapsulation: ViewEncapsulation.None +}) +export class ErrorWidgetComponent extends WidgetComponent implements AfterViewInit { + + @Input() + error: string; + + _subscriptAnimationState: string = ''; + + constructor(public formService: FormService) { + super(formService); + } + + ngAfterViewInit() { + this._subscriptAnimationState = 'enter'; + } + +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/form.scss b/ng2-components/ng2-activiti-form/src/components/widgets/form.scss new file mode 100644 index 0000000000..8b73c04aec --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/form.scss @@ -0,0 +1,61 @@ +@import 'theming'; + +ul > li > form-field > .adf-focus { + .adf-label { + color: mat-color($primary); + } +} + +.adf { + + &-error-text-container { + width: 95%; + height: 20px; + margin-top: -12px; + } + + &-error-text { + padding: 1px; + height: 16px; + font-size: 12px; + line-height: 1.33; + float: left; + color: mat-color($warn); + } + + &-error-icon { + float: right; + font-size: 17px; + color: mat-color($warn); + } + + &-label { + color: $alfresco-gray-label; + } + + &-invalid { + + .mat-input-underline { + background-color: #f44336 !important; + } + + .adf-file { + border-color: mat-color($warn); + } + + .mat-input-prefix { + color: mat-color($warn); + } + + .adf-input { + border-color: mat-color($warn); + } + + .adf-label { + color: mat-color($warn); + &:after { + background-color: mat-color($warn); + } + } + } +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.css deleted file mode 100644 index 8c9426d570..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.css +++ /dev/null @@ -1,49 +0,0 @@ -.functional-group-widget { - width: 100%; -} - -.functional-group-widget--autocomplete { - background-color: #fff; - position: absolute; - z-index: 5; - color: #555; - margin: -15px 0 0 0; -} - -.functional-group-widget--autocomplete > ul { - list-style-type: none; - position: static; - - height: auto; - width: auto; - min-width: 124px; - padding: 8px 0; - margin: 0; - - box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12); - border-radius: 2px; -} - -.functional-group-widget--autocomplete > ul > li { - opacity: 1; -} - -.people-widget--autocomplete > ul > li { - opacity: 1; -} - -.functional-group-widget__invalid .mdl-textfield__input { - border-color: #d50000; -} - -.functional-group-widget__invalid .mdl-textfield__label { - color: #d50000; -} - -.functional-group-widget__invalid .mdl-textfield__label:after { - background-color: #d50000; -} - -.functional-group-widget__invalid .mdl-textfield__error { - visibility: visible !important; -} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.html index 1a0d5aa0cf..c87b29fb90 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.html @@ -1,23 +1,25 @@ -
- - - {{field.validationSummary}} +
+ + + + +
-
-
    -
  • - {{item.name}} -
  • -
+
+ + {{item.name}}} +
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.scss new file mode 100644 index 0000000000..ff944b5c45 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.scss @@ -0,0 +1,33 @@ +@import 'theming'; +@import '../form'; + +.adf { + + &-group-widget { + width: 100%; + } + + &-group-autocomplete { + background-color: #fff; + position:absolute; + max-height: 200px; + overflow-y: auto; + z-index: 5; + color: #555; + margin: -15px 0 0 0; + > ul { + list-style-type: none; + position: static; + height: auto; + width: auto; + min-width: 124px; + padding: 8px 0; + margin: 0; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border-radius: 2px; + > li { + opacity: 1; + } + } + } +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.spec.ts b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.spec.ts index 6dfc2b5988..465cda825b 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.spec.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.spec.ts @@ -24,18 +24,11 @@ import { GroupModel } from '../core/group.model'; import { FunctionalGroupWidgetComponent } from './functional-group.widget'; describe('FunctionalGroupWidgetComponent', () => { - - let componentHandler; let formService: FormService; let elementRef: ElementRef; let widget: FunctionalGroupWidgetComponent; beforeEach(() => { - componentHandler = jasmine.createSpyObj('componentHandler', [ - 'upgradeAllRegistered' - ]); - window['componentHandler'] = componentHandler; - formService = new FormService(null, null, null); elementRef = new ElementRef(null); widget = new FunctionalGroupWidgetComponent(formService, elementRef); @@ -228,37 +221,4 @@ describe('FunctionalGroupWidgetComponent', () => { expect(formService.getWorkflowGroups).not.toHaveBeenCalled(); expect(widget.popupVisible).toBeFalsy(); }); - - it('should setup mdl textfield on view init', () => { - spyOn(widget, 'setupMaterialComponents').and.callThrough(); - spyOn(widget, 'setupMaterialTextField').and.callThrough(); - - widget.value = ''; - widget.ngAfterViewInit(); - - expect(widget.setupMaterialComponents).toHaveBeenCalledWith(componentHandler); - expect(widget.setupMaterialTextField).toHaveBeenCalled(); - }); - - it('should require component handler to setup textfield', () => { - expect(widget.setupMaterialComponents(null)).toBeFalsy(); - }); - - it('should require element reference to setup textfield', () => { - let w = new FunctionalGroupWidgetComponent(formService, null); - w.value = ''; - expect(w.setupMaterialComponents(componentHandler)).toBeFalsy(); - - w = new FunctionalGroupWidgetComponent(formService, elementRef); - w.value = ''; - expect(w.setupMaterialComponents(componentHandler)).toBeTruthy(); - }); - - it('should require value to setup textfield', () => { - widget.value = ''; - expect(widget.setupMaterialComponents(componentHandler)).toBeTruthy(); - - widget.value = null; - expect(widget.setupMaterialComponents(componentHandler)).toBeFalsy(); - }); }); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.ts index ef52c156ff..0d0a011928 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.ts @@ -17,7 +17,7 @@ /* tslint:disable:component-selector */ -import { Component, ElementRef, OnInit } from '@angular/core'; +import { Component, ElementRef, OnInit, ViewEncapsulation } from '@angular/core'; import { FormService } from '../../../services/form.service'; import { GroupModel } from './../core/group.model'; import { baseHost , WidgetComponent } from './../widget.component'; @@ -25,8 +25,9 @@ import { baseHost , WidgetComponent } from './../widget.component'; @Component({ selector: 'functional-group-widget', templateUrl: './functional-group.widget.html', - styleUrls: ['./functional-group.widget.css'], - host: baseHost + styleUrls: ['./functional-group.widget.scss'], + host: baseHost, + encapsulation: ViewEncapsulation.None }) export class FunctionalGroupWidgetComponent extends WidgetComponent implements OnInit { @@ -109,15 +110,4 @@ export class FunctionalGroupWidgetComponent extends WidgetComponent implements O event.preventDefault(); } } - - setupMaterialComponents(handler: any): boolean { - super.setupMaterialComponents(handler); - if (handler) { - if (this.elementRef && this.value) { - this.setupMaterialTextField(this.elementRef, handler, this.value); - return true; - } - } - return false; - } } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/hyperlink/hyperlink.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/hyperlink/hyperlink.widget.css deleted file mode 100644 index f965e43936..0000000000 --- a/ng2-components/ng2-activiti-form/src/components/widgets/hyperlink/hyperlink.widget.css +++ /dev/null @@ -1 +0,0 @@ -.hyperlink-widget {} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/hyperlink/hyperlink.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/hyperlink/hyperlink.widget.html index 4d522b8df1..7f85c3153c 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/hyperlink/hyperlink.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/hyperlink/hyperlink.widget.html @@ -1,7 +1,5 @@ -