From 9acf0552efa3eed2177c63472f55debf745f8d27 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Mon, 27 Jan 2020 10:27:42 +0100 Subject: [PATCH 01/37] attachments --- package-lock.json | 1545 +++++++++++++++++++-------- package.json | 3 + patches/react-drop-zone+3.0.7.patch | 12 + samples/feedyou/modern.html | 105 +- src/MessagePane.tsx | 9 +- src/Shell.tsx | 51 +- src/Store.ts | 15 +- src/scss/botchat.scss | 4 +- src/simple-update-in.d.ts | 2 + 9 files changed, 1262 insertions(+), 484 deletions(-) create mode 100644 patches/react-drop-zone+3.0.7.patch diff --git a/package-lock.json b/package-lock.json index 4d13f8447c..93e3c676e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,7 @@ "@types/node": { "version": "8.0.8", "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.8.tgz", - "integrity": "sha512-mDdL8leJCDIe2uSA+jp2quT6t7y0Pt9guPYzfoMt97r8dhRGZ+jLetPYHCCHXLnWdmae/zHZIYvzTQaTj6BCQg==", - "dev": true + "integrity": "sha512-mDdL8leJCDIe2uSA+jp2quT6t7y0Pt9guPYzfoMt97r8dhRGZ+jLetPYHCCHXLnWdmae/zHZIYvzTQaTj6BCQg==" }, "@types/node-sass": { "version": "3.10.32", @@ -30,6 +29,14 @@ "@types/node": "*" } }, + "@types/qrcode": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.3.4.tgz", + "integrity": "sha512-aILE5yvKaqQXlY0YPMEYwK/KwdD43fwQTyagj0ffBBTQj8h//085Zp8LUrOnZ9FT69x64f5UgDo0EueY4BPAdg==", + "requires": { + "@types/node": "*" + } + }, "@types/react": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/@types/react/-/react-15.6.1.tgz", @@ -71,7 +78,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true, "requires": { "acorn": "^4.0.3" }, @@ -79,8 +85,7 @@ "acorn": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" } } }, @@ -111,7 +116,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -122,7 +126,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -226,7 +229,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", - "dev": true, "requires": { "arrify": "^1.0.0", "micromatch": "^2.1.5" @@ -236,7 +238,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, "requires": { "arr-flatten": "^1.0.1" } @@ -244,14 +245,12 @@ "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, "requires": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -262,7 +261,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, "requires": { "is-posix-bracket": "^0.1.0" } @@ -271,7 +269,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, "requires": { "is-extglob": "^1.0.0" } @@ -279,14 +276,12 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -295,7 +290,6 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, "requires": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -353,8 +347,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", @@ -419,8 +412,7 @@ "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asap": { "version": "2.0.5", @@ -437,7 +429,6 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", - "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -448,7 +439,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, "requires": { "util": "0.10.3" } @@ -474,8 +464,7 @@ "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" }, "async-foreach": { "version": "0.1.3", @@ -522,11 +511,202 @@ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", "dev": true }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base": { "version": "0.11.2", @@ -557,8 +737,7 @@ "base64-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", - "dev": true + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -579,14 +758,12 @@ "big.js": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", - "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=", - "dev": true + "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=" }, "binary-extensions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", - "dev": true + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=" }, "block-stream": { "version": "0.0.9", @@ -605,8 +782,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "boom": { "version": "4.3.1", @@ -718,7 +894,6 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -773,14 +948,12 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "browserify-aes": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", - "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -794,7 +967,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true, "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -805,7 +977,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -816,7 +987,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" @@ -826,7 +996,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, "requires": { "bn.js": "^4.1.1", "browserify-rsa": "^4.0.0", @@ -841,7 +1010,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, "requires": { "pako": "~1.0.5" } @@ -850,30 +1018,50 @@ "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "cache-base": { "version": "1.0.1", @@ -924,7 +1112,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, "requires": { "align-text": "^0.1.3", "lazy-cache": "^1.0.3" @@ -933,8 +1120,7 @@ "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" } } }, @@ -963,7 +1149,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, "requires": { "anymatch": "^1.3.0", "async-each": "^1.0.0", @@ -986,7 +1171,6 @@ "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, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -1082,7 +1266,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -1092,14 +1275,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -1127,8 +1308,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collection-visit": { "version": "1.0.0", @@ -1144,7 +1324,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -1152,8 +1331,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-support": { "version": "1.1.3", @@ -1191,8 +1369,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concurrently": { "version": "3.1.0", @@ -1236,7 +1413,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, "requires": { "date-now": "^0.1.4" } @@ -1250,8 +1426,15 @@ "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } }, "copy-descriptor": { "version": "0.1.1", @@ -1267,8 +1450,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "corser": { "version": "2.0.1", @@ -1280,7 +1462,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true, "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" @@ -1299,7 +1480,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -1311,7 +1491,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -1365,7 +1544,6 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -1407,6 +1585,15 @@ "array-find-index": "^1.0.1" } }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1427,8 +1614,7 @@ "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" }, "dateformat": { "version": "2.2.0", @@ -1440,7 +1626,6 @@ "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, "requires": { "ms": "2.0.0" } @@ -1448,8 +1633,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -1522,7 +1706,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -1534,22 +1717,33 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "^2.0.0" + } + }, "diffie-hellman": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" } }, + "dijkstrajs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", + "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" + }, "domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" }, "dot-prop": { "version": "4.2.0", @@ -1621,7 +1815,6 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -1632,11 +1825,15 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "encoding": { "version": "0.1.12", @@ -1670,7 +1867,6 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.4.0", @@ -1687,7 +1883,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, "requires": { "prr": "~0.0.0" } @@ -1696,7 +1891,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -1724,11 +1918,124 @@ "is-symbol": "^1.0.1" } }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } }, "event-stream": { "version": "3.3.4", @@ -1754,14 +2061,12 @@ "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -1771,7 +2076,6 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -1786,7 +2090,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -1891,7 +2194,6 @@ "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, "requires": { "fill-range": "^2.1.0" }, @@ -1900,7 +2202,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, "requires": { "is-number": "^2.1.0", "isobject": "^2.0.0", @@ -1913,7 +2214,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -1922,7 +2222,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -1931,7 +2230,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -1953,6 +2251,21 @@ "integrity": "sha1-NfvTZZeJ5PqoH1nei36fw55GbVE=", "dev": true }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" + } + } + }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", @@ -2042,8 +2355,7 @@ "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fbjs": { "version": "0.8.12", @@ -2069,8 +2381,7 @@ "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" }, "fill-range": { "version": "4.0.0", @@ -2162,14 +2473,12 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, "requires": { "for-in": "^1.0.1" } @@ -2233,7 +2542,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "dev": true, "optional": true, "requires": { "nan": "^2.3.0", @@ -2243,13 +2551,11 @@ "abbrev": { "version": "1.1.0", "bundled": true, - "dev": true, "optional": true }, "ajv": { "version": "4.11.8", "bundled": true, - "dev": true, "optional": true, "requires": { "co": "^4.6.0", @@ -2259,19 +2565,16 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, "optional": true }, "aproba": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", "bundled": true, - "dev": true, "optional": true, "requires": { "delegates": "^1.0.0", @@ -2281,43 +2584,36 @@ "asn1": { "version": "0.2.3", "bundled": true, - "dev": true, "optional": true }, "assert-plus": { "version": "0.2.0", "bundled": true, - "dev": true, "optional": true }, "asynckit": { "version": "0.4.0", "bundled": true, - "dev": true, "optional": true }, "aws-sign2": { "version": "0.6.0", "bundled": true, - "dev": true, "optional": true }, "aws4": { "version": "1.6.0", "bundled": true, - "dev": true, "optional": true }, "balanced-match": { "version": "0.4.2", "bundled": true, - "dev": true, "optional": true }, "bcrypt-pbkdf": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "tweetnacl": "^0.14.3" @@ -2326,7 +2622,6 @@ "block-stream": { "version": "0.0.9", "bundled": true, - "dev": true, "optional": true, "requires": { "inherits": "~2.0.0" @@ -2335,7 +2630,6 @@ "boom": { "version": "2.10.1", "bundled": true, - "dev": true, "optional": true, "requires": { "hoek": "2.x.x" @@ -2344,7 +2638,6 @@ "brace-expansion": { "version": "1.1.7", "bundled": true, - "dev": true, "optional": true, "requires": { "balanced-match": "^0.4.1", @@ -2354,31 +2647,26 @@ "buffer-shims": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "caseless": { "version": "0.12.0", "bundled": true, - "dev": true, "optional": true }, "co": { "version": "4.6.0", "bundled": true, - "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, "optional": true }, "combined-stream": { "version": "1.0.5", "bundled": true, - "dev": true, "optional": true, "requires": { "delayed-stream": "~1.0.0" @@ -2387,25 +2675,21 @@ "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "cryptiles": { "version": "2.0.5", "bundled": true, - "dev": true, "optional": true, "requires": { "boom": "2.x.x" @@ -2414,7 +2698,6 @@ "dashdash": { "version": "1.14.1", "bundled": true, - "dev": true, "optional": true, "requires": { "assert-plus": "^1.0.0" @@ -2423,7 +2706,6 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } @@ -2431,7 +2713,6 @@ "debug": { "version": "2.6.8", "bundled": true, - "dev": true, "optional": true, "requires": { "ms": "2.0.0" @@ -2440,31 +2721,26 @@ "deep-extend": { "version": "0.4.2", "bundled": true, - "dev": true, "optional": true }, "delayed-stream": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "delegates": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "detect-libc": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "ecc-jsbn": { "version": "0.1.1", "bundled": true, - "dev": true, "optional": true, "requires": { "jsbn": "~0.1.0" @@ -2473,25 +2749,21 @@ "extend": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true }, "extsprintf": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "forever-agent": { "version": "0.6.1", "bundled": true, - "dev": true, "optional": true }, "form-data": { "version": "2.1.4", "bundled": true, - "dev": true, "optional": true, "requires": { "asynckit": "^0.4.0", @@ -2502,13 +2774,11 @@ "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "fstream": { "version": "1.0.11", "bundled": true, - "dev": true, "optional": true, "requires": { "graceful-fs": "^4.1.2", @@ -2520,7 +2790,6 @@ "fstream-ignore": { "version": "1.0.5", "bundled": true, - "dev": true, "optional": true, "requires": { "fstream": "^1.0.0", @@ -2531,7 +2800,6 @@ "gauge": { "version": "2.7.4", "bundled": true, - "dev": true, "optional": true, "requires": { "aproba": "^1.0.3", @@ -2547,7 +2815,6 @@ "getpass": { "version": "0.1.7", "bundled": true, - "dev": true, "optional": true, "requires": { "assert-plus": "^1.0.0" @@ -2556,7 +2823,6 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } @@ -2564,7 +2830,6 @@ "glob": { "version": "7.1.2", "bundled": true, - "dev": true, "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -2578,19 +2843,16 @@ "graceful-fs": { "version": "4.1.11", "bundled": true, - "dev": true, "optional": true }, "har-schema": { "version": "1.0.5", "bundled": true, - "dev": true, "optional": true }, "har-validator": { "version": "4.2.1", "bundled": true, - "dev": true, "optional": true, "requires": { "ajv": "^4.9.1", @@ -2600,13 +2862,11 @@ "has-unicode": { "version": "2.0.1", "bundled": true, - "dev": true, "optional": true }, "hawk": { "version": "3.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "boom": "2.x.x", @@ -2618,13 +2878,11 @@ "hoek": { "version": "2.16.3", "bundled": true, - "dev": true, "optional": true }, "http-signature": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true, "requires": { "assert-plus": "^0.2.0", @@ -2635,7 +2893,6 @@ "inflight": { "version": "1.0.6", "bundled": true, - "dev": true, "optional": true, "requires": { "once": "^1.3.0", @@ -2645,19 +2902,16 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, "optional": true }, "ini": { "version": "1.3.4", "bundled": true, - "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true, "requires": { "number-is-nan": "^1.0.0" @@ -2666,25 +2920,21 @@ "is-typedarray": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "isarray": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "isstream": { "version": "0.1.2", "bundled": true, - "dev": true, "optional": true }, "jodid25519": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true, "requires": { "jsbn": "~0.1.0" @@ -2693,19 +2943,16 @@ "jsbn": { "version": "0.1.1", "bundled": true, - "dev": true, "optional": true }, "json-schema": { "version": "0.2.3", "bundled": true, - "dev": true, "optional": true }, "json-stable-stringify": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "jsonify": "~0.0.0" @@ -2714,19 +2961,16 @@ "json-stringify-safe": { "version": "5.0.1", "bundled": true, - "dev": true, "optional": true }, "jsonify": { "version": "0.0.0", "bundled": true, - "dev": true, "optional": true }, "jsprim": { "version": "1.4.0", "bundled": true, - "dev": true, "optional": true, "requires": { "assert-plus": "1.0.0", @@ -2738,7 +2982,6 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } @@ -2746,13 +2989,11 @@ "mime-db": { "version": "1.27.0", "bundled": true, - "dev": true, "optional": true }, "mime-types": { "version": "2.1.15", "bundled": true, - "dev": true, "optional": true, "requires": { "mime-db": "~1.27.0" @@ -2761,7 +3002,6 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true, "optional": true, "requires": { "brace-expansion": "^1.1.7" @@ -2770,13 +3010,11 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, "optional": true }, "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true, "optional": true, "requires": { "minimist": "0.0.8" @@ -2785,13 +3023,11 @@ "ms": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "node-pre-gyp": { "version": "0.6.39", "bundled": true, - "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", @@ -2810,7 +3046,6 @@ "nopt": { "version": "4.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "abbrev": "1", @@ -2820,7 +3055,6 @@ "npmlog": { "version": "4.1.0", "bundled": true, - "dev": true, "optional": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -2832,25 +3066,21 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "oauth-sign": { "version": "0.8.2", "bundled": true, - "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", "bundled": true, - "dev": true, "optional": true }, "once": { "version": "1.4.0", "bundled": true, - "dev": true, "optional": true, "requires": { "wrappy": "1" @@ -2859,19 +3089,16 @@ "os-homedir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "osenv": { "version": "0.1.4", "bundled": true, - "dev": true, "optional": true, "requires": { "os-homedir": "^1.0.0", @@ -2881,37 +3108,31 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "performance-now": { "version": "0.2.0", "bundled": true, - "dev": true, "optional": true }, "process-nextick-args": { "version": "1.0.7", "bundled": true, - "dev": true, "optional": true }, "punycode": { "version": "1.4.1", "bundled": true, - "dev": true, "optional": true }, "qs": { "version": "6.4.0", "bundled": true, - "dev": true, "optional": true }, "rc": { "version": "1.2.1", "bundled": true, - "dev": true, "optional": true, "requires": { "deep-extend": "~0.4.0", @@ -2923,7 +3144,6 @@ "minimist": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true } } @@ -2931,7 +3151,6 @@ "readable-stream": { "version": "2.2.9", "bundled": true, - "dev": true, "optional": true, "requires": { "buffer-shims": "~1.0.0", @@ -2946,7 +3165,6 @@ "request": { "version": "2.81.0", "bundled": true, - "dev": true, "optional": true, "requires": { "aws-sign2": "~0.6.0", @@ -2976,7 +3194,6 @@ "rimraf": { "version": "2.6.1", "bundled": true, - "dev": true, "optional": true, "requires": { "glob": "^7.0.5" @@ -2985,31 +3202,26 @@ "safe-buffer": { "version": "5.0.1", "bundled": true, - "dev": true, "optional": true }, "semver": { "version": "5.3.0", "bundled": true, - "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "bundled": true, - "dev": true, "optional": true }, "sntp": { "version": "1.0.9", "bundled": true, - "dev": true, "optional": true, "requires": { "hoek": "2.x.x" @@ -3018,7 +3230,6 @@ "sshpk": { "version": "1.13.0", "bundled": true, - "dev": true, "optional": true, "requires": { "asn1": "~0.2.3", @@ -3035,7 +3246,6 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } @@ -3043,7 +3253,6 @@ "string-width": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true, "requires": { "code-point-at": "^1.0.0", @@ -3054,7 +3263,6 @@ "string_decoder": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "^5.0.1" @@ -3063,13 +3271,11 @@ "stringstream": { "version": "0.0.5", "bundled": true, - "dev": true, "optional": true }, "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "ansi-regex": "^2.0.0" @@ -3078,13 +3284,11 @@ "strip-json-comments": { "version": "2.0.1", "bundled": true, - "dev": true, "optional": true }, "tar": { "version": "2.2.1", "bundled": true, - "dev": true, "optional": true, "requires": { "block-stream": "*", @@ -3095,7 +3299,6 @@ "tar-pack": { "version": "3.4.0", "bundled": true, - "dev": true, "optional": true, "requires": { "debug": "^2.2.0", @@ -3111,7 +3314,6 @@ "tough-cookie": { "version": "2.3.2", "bundled": true, - "dev": true, "optional": true, "requires": { "punycode": "^1.4.1" @@ -3120,7 +3322,6 @@ "tunnel-agent": { "version": "0.6.0", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "^5.0.1" @@ -3129,31 +3330,26 @@ "tweetnacl": { "version": "0.14.5", "bundled": true, - "dev": true, "optional": true }, "uid-number": { "version": "0.0.6", "bundled": true, - "dev": true, "optional": true }, "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "uuid": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true }, "verror": { "version": "1.3.6", "bundled": true, - "dev": true, "optional": true, "requires": { "extsprintf": "1.0.2" @@ -3162,7 +3358,6 @@ "wide-align": { "version": "1.1.2", "bundled": true, - "dev": true, "optional": true, "requires": { "string-width": "^1.0.2" @@ -3171,7 +3366,6 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true } } @@ -3254,8 +3448,7 @@ "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" }, "get-stdin": { "version": "4.0.1", @@ -3266,8 +3459,7 @@ "get-stream": { "version": "3.0.0", "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "get-value": { "version": "2.0.6", @@ -3302,7 +3494,6 @@ "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.0" @@ -3312,7 +3503,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, "requires": { "is-glob": "^2.0.0" } @@ -3506,6 +3696,11 @@ "which": "^1.2.14" } }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, "globule": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", @@ -3548,8 +3743,7 @@ "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "gulp": { "version": "3.9.1", @@ -3833,7 +4027,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, "requires": { "inherits": "^2.0.1" } @@ -3842,7 +4035,6 @@ "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, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.0" @@ -3864,7 +4056,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -3882,6 +4073,15 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, "homedir-polyfill": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", @@ -3894,8 +4094,7 @@ "hosted-git-info": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" }, "http-proxy": { "version": "1.16.2", @@ -3992,8 +4191,7 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "iconv-lite": { "version": "0.4.18", @@ -4003,8 +4201,7 @@ "ieee754": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" }, "import-lazy": { "version": "2.1.0", @@ -4036,8 +4233,7 @@ "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" }, "inflight": { "version": "1.0.6", @@ -4052,8 +4248,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", @@ -4064,8 +4259,7 @@ "interpret": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true + "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=" }, "invariant": { "version": "2.2.2", @@ -4078,8 +4272,7 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "is-absolute": { "version": "1.0.0", @@ -4111,14 +4304,12 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-binary-path": { "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, "requires": { "binary-extensions": "^1.0.0" } @@ -4126,14 +4317,12 @@ "is-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "dev": true + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" }, "is-builtin-module": { "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, "requires": { "builtin-modules": "^1.0.0" } @@ -4198,14 +4387,12 @@ "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, "requires": { "is-primitive": "^2.0.0" } @@ -4213,8 +4400,7 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "2.1.1", @@ -4226,7 +4412,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4235,7 +4420,6 @@ "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, "requires": { "number-is-nan": "^1.0.0" } @@ -4244,7 +4428,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, "requires": { "is-extglob": "^1.0.0" }, @@ -4252,8 +4435,7 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" } } }, @@ -4297,7 +4479,6 @@ "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.0.2" }, @@ -4306,7 +4487,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -4357,14 +4537,12 @@ "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" }, "is-property": { "version": "1.0.2", @@ -4443,14 +4621,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -4491,11 +4667,15 @@ "dev": true, "optional": true }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + }, "json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" }, "json-schema": { "version": "0.2.3", @@ -4527,8 +4707,7 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonfile": { "version": "4.0.0", @@ -4580,7 +4759,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -4604,7 +4782,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -4649,20 +4826,34 @@ "loader-runner": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", - "dev": true + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=" }, "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, "requires": { "big.js": "^3.1.3", "emojis-list": "^2.0.0", "json5": "^0.5.0" } }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, "lodash": { "version": "4.17.4", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", @@ -4813,8 +5004,7 @@ "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "loose-envify": { "version": "1.3.1", @@ -4844,7 +5034,6 @@ "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, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -4930,7 +5119,6 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -4940,7 +5128,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -4953,11 +5140,18 @@ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, "memory-fs": { "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, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -5260,7 +5454,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -5287,23 +5480,25 @@ "mime-db": "~1.27.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, "minimalistic-assert": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5311,8 +5506,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mixin-deep": { "version": "1.3.1", @@ -5339,7 +5533,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } @@ -5353,8 +5546,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multipipe": { "version": "0.1.2", @@ -5368,8 +5560,7 @@ "nan": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", - "dev": true + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" }, "nanomatch": { "version": "1.2.9", @@ -5405,6 +5596,11 @@ "integrity": "sha512-5bRASydE1gu6zPOenLN043++J8xj1Ob7ArkfdYO3JN4DF5rDmG7bMoiybkTyD+GnXQEMixVeDHMzuqm6kpBmiA==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "node-fetch": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", @@ -5447,7 +5643,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, "requires": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -5696,7 +5891,6 @@ "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, "requires": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -5708,7 +5902,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -5796,7 +5989,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, "requires": { "path-key": "^2.0.0" } @@ -5816,8 +6008,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "oauth-sign": { "version": "0.8.2", @@ -5955,7 +6146,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -6015,14 +6205,12 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "1.4.0", @@ -6036,8 +6224,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.4", @@ -6052,8 +6239,28 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "package-json": { "version": "4.0.1", @@ -6070,14 +6277,12 @@ "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, "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, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", @@ -6101,7 +6306,6 @@ "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.0", @@ -6112,8 +6316,7 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" } } }, @@ -6121,7 +6324,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } @@ -6219,8 +6421,7 @@ "path-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" }, "path-exists": { "version": "2.1.0", @@ -6234,8 +6435,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -6246,8 +6446,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.5", @@ -6294,7 +6493,6 @@ "version": "3.0.14", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -6312,8 +6510,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { "version": "2.0.4", @@ -6382,6 +6579,11 @@ } } }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -6397,8 +6599,7 @@ "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "pretty-hrtime": { "version": "1.0.3", @@ -6406,17 +6607,20 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "promise": { "version": "7.3.1", @@ -6438,8 +6642,7 @@ "prr": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" }, "ps-tree": { "version": "1.1.0", @@ -6453,14 +6656,12 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "public-encrypt": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -6472,8 +6673,152 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qrcode": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", + "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==", + "requires": { + "buffer": "^5.4.3", + "buffer-alloc": "^1.2.0", + "buffer-from": "^1.1.1", + "dijkstrajs": "^1.0.1", + "isarray": "^2.0.1", + "pngjs": "^3.3.0", + "yargs": "^13.2.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } }, "qs": { "version": "6.3.2", @@ -6484,20 +6829,17 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "randomatic": { "version": "1.1.7", "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" @@ -6507,7 +6849,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -6516,7 +6857,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", - "dev": true, "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -6565,6 +6905,309 @@ "prop-types": "^15.5.10" } }, + "react-drop-zone": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/react-drop-zone/-/react-drop-zone-3.0.7.tgz", + "integrity": "sha512-gdQ+wMKPnPErP/rAarE9UTrJSsL0Km5fwVmL97ric4z5YCjlEYPDaeSzH9sc6btDcTEorWj/igy/3tSklAISrA==", + "requires": { + "babel-core": "^6.26.0", + "prop-types": "^15.6.1", + "webpack": "^3.11.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "^2.0.0" + } + }, + "webpack": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", + "requires": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "react-is": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" + }, "react-redux": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.5.tgz", @@ -6604,7 +7247,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6619,7 +7261,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "minimatch": "^3.0.2", @@ -6662,11 +7303,15 @@ "resolved": "https://registry.npmjs.org/redux-observable/-/redux-observable-0.13.0.tgz", "integrity": "sha1-NbJsLNu3HkmbMcqZYdoFgcKXOQk=" }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, "regex-cache": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true, "requires": { "is-equal-shallow": "^0.1.3", "is-primitive": "^2.0.0" @@ -6704,26 +7349,22 @@ "remove-trailing-separator": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", - "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", - "dev": true + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=" }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, "requires": { "is-finite": "^1.0.0" } @@ -6790,14 +7431,12 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "requires-port": { "version": "1.0.0", @@ -6840,7 +7479,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, "requires": { "align-text": "^0.1.1" } @@ -6858,7 +7496,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, "requires": { "hash-base": "^2.0.0", "inherits": "^2.0.1" @@ -6881,8 +7518,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "safe-regex": { "version": "1.1.0", @@ -6929,8 +7565,7 @@ "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "semver-diff": { "version": "2.1.0", @@ -6950,14 +7585,12 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" }, "set-value": { "version": "2.0.0", @@ -6991,7 +7624,6 @@ "version": "2.4.9", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -7001,7 +7633,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -7009,8 +7640,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shell-quote": { "version": "1.6.1", @@ -7033,8 +7663,7 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-update-in": { "version": "1.2.0", @@ -7044,8 +7673,7 @@ "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "snapdragon": { "version": "0.8.2", @@ -7200,8 +7828,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-loader": { "version": "0.2.1", @@ -7254,7 +7881,6 @@ "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, "requires": { "source-map": "^0.5.6" } @@ -7281,7 +7907,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, "requires": { "spdx-license-ids": "^1.0.2" } @@ -7289,14 +7914,12 @@ "spdx-expression-parse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" }, "spdx-license-ids": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" }, "split": { "version": "0.3.3", @@ -7428,7 +8051,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -7453,7 +8075,6 @@ "version": "2.7.2", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -7465,8 +8086,7 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" } } }, @@ -7474,7 +8094,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7484,14 +8103,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -7513,7 +8130,6 @@ "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==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -7545,8 +8161,7 @@ "strip-eof": { "version": "1.0.0", "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-indent": { "version": "1.0.1", @@ -7566,8 +8181,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "symbol-observable": { "version": "1.0.4", @@ -7577,8 +8191,7 @@ "tapable": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", - "dev": true + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" }, "tar": { "version": "2.2.1", @@ -7641,7 +8254,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", - "dev": true, "requires": { "setimmediate": "^1.0.4" } @@ -7658,8 +8270,12 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, "to-object-path": { "version": "0.3.0", @@ -7724,6 +8340,11 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, "true-case-path": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", @@ -7756,8 +8377,7 @@ "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, "tunnel-agent": { "version": "0.6.0", @@ -7775,6 +8395,11 @@ "dev": true, "optional": true }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, "typescript": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", @@ -7795,7 +8420,6 @@ "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.1", "uglify-to-browserify": "~1.0.0", @@ -7805,14 +8429,12 @@ "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, "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.1", "right-align": "^0.1.1", @@ -7822,14 +8444,12 @@ "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, "requires": { "camelcase": "^1.0.2", "cliui": "^2.1.0", @@ -7843,9 +8463,41 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, "optional": true }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "requires": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + }, + "dependencies": { + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + } + } + }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -8026,6 +8678,21 @@ } } }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -8036,7 +8703,6 @@ "version": "0.11.0", "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" @@ -8045,8 +8711,7 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" } } }, @@ -8086,7 +8751,6 @@ "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" }, @@ -8094,16 +8758,14 @@ "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" } } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { "version": "3.1.0", @@ -8124,7 +8786,6 @@ "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, "requires": { "spdx-correct": "~1.0.0", "spdx-expression-parse": "~1.0.0" @@ -8243,7 +8904,6 @@ "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, "requires": { "indexof": "0.0.1" } @@ -8252,7 +8912,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", - "dev": true, "requires": { "async": "^2.1.2", "chokidar": "^1.7.0", @@ -8263,7 +8922,6 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, "requires": { "lodash": "^4.14.0" } @@ -8395,7 +9053,6 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -8460,8 +9117,7 @@ "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "wordwrap": { "version": "0.0.3", @@ -8473,7 +9129,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -8482,14 +9137,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -8528,14 +9181,12 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "7.1.0", diff --git a/package.json b/package.json index db8c98e73b..76b13e9356 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "license": "MIT", "dependencies": { "@types/google.analytics": "0.0.40", + "@types/qrcode": "^1.3.4", "adaptivecards": "1.0.0", "bluebird": "^3.5.1", "botframework-directlinejs": "0.9.15", @@ -38,8 +39,10 @@ "jspeech": "^0.1.1", "markdown-it": "8.3.1", "microsoft-speech-browser-sdk": "0.0.12", + "qrcode": "^1.4.4", "react": "15.6.1", "react-dom": "15.6.1", + "react-drop-zone": "^3.0.7", "react-redux": "5.0.5", "redux": "3.7.2", "redux-observable": "0.13.0", diff --git a/patches/react-drop-zone+3.0.7.patch b/patches/react-drop-zone+3.0.7.patch new file mode 100644 index 0000000000..843871fd7b --- /dev/null +++ b/patches/react-drop-zone+3.0.7.patch @@ -0,0 +1,12 @@ +patch-package +--- a/node_modules/react-drop-zone/dist/DropZone.js ++++ b/node_modules/react-drop-zone/dist/DropZone.js +@@ -43,7 +43,7 @@ var events = { + Object.keys(events).forEach(function (event) { + document.addEventListener(event, function (ev) { + dropZones.forEach(function (zone) { +- return zone[events[event]](ev, true); ++ return zone[events[event]](ev, !ev.target || !ev.target.className || !ev.target.className.includes('DropZone')); + }); + }); + }); diff --git a/samples/feedyou/modern.html b/samples/feedyou/modern.html index c36585a9a0..9c96db847d 100644 --- a/samples/feedyou/modern.html +++ b/samples/feedyou/modern.html @@ -4,7 +4,8 @@ - + + Chatbot @@ -231,21 +299,28 @@
-
+
+
- + diff --git a/src/MessagePane.tsx b/src/MessagePane.tsx index 39a1549604..5d5a370f50 100644 --- a/src/MessagePane.tsx +++ b/src/MessagePane.tsx @@ -11,15 +11,16 @@ import { twemoji } from './lib.js' export interface MessagePaneProps { activityWithSuggestedActions: Message, + showUploadButton: boolean, takeSuggestedAction: (message: Message) => any, children: React.ReactNode, - doCardAction: IDoCardAction + doCardAction: IDoCardAction, } const MessagePaneView = (props: MessagePaneProps) => -
+
{ props.children }
@@ -75,7 +76,8 @@ export const MessagePane = connect( // only used to create helper functions below botConnection: state.connection.botConnection, user: state.connection.user, - locale: state.format.locale + locale: state.format.locale, + showUploadButton:state.format.showUploadButton, }), { takeSuggestedAction: (message: Message) => ({ type: 'Take_SuggestedAction', message } as ChatActions), // only used to create helper functions below @@ -83,6 +85,7 @@ export const MessagePane = connect( }, (stateProps: any, dispatchProps: any, ownProps: any): MessagePaneProps => ({ // from stateProps activityWithSuggestedActions: stateProps.activityWithSuggestedActions, + showUploadButton: stateProps.showUploadButton, // from dispatchProps takeSuggestedAction: dispatchProps.takeSuggestedAction, // from ownProps diff --git a/src/Shell.tsx b/src/Shell.tsx index 98b94d2da7..7f28a86050 100644 --- a/src/Shell.tsx +++ b/src/Shell.tsx @@ -6,27 +6,35 @@ import { Dispatch, connect } from 'react-redux'; import { Strings } from './Strings'; import { Speech } from './SpeechModule' import { ChatActions, ListeningState, sendMessage, sendFiles } from './Store'; +import * as QRCode from 'qrcode' + +import { StyledDropZone } from 'react-drop-zone' interface Props { inputText: string, strings: Strings, listeningState: ListeningState, - showUploadButton: boolean + showUploadButton: boolean, + attachmentUrl: string, disableInput: boolean onChangeText: (inputText: string) => void sendMessage: (inputText: string) => void, - sendFiles: (files: FileList) => void, + sendFiles: (files: any) => void, stopListening: () => void, startListening: () => void } +interface State { + attachmentQrCode: string +} + export interface ShellFunctions { focus: (appendKey?: string) => void } -class ShellContainer extends React.Component implements ShellFunctions { +class ShellContainer extends React.Component implements ShellFunctions { private textInput: HTMLInputElement; private fileInput: HTMLInputElement; @@ -36,6 +44,17 @@ class ShellContainer extends React.Component implements ShellFunctions { } } + componentDidUpdate() { + if (this.props.attachmentUrl && (!this.state)) { + QRCode.toDataURL(this.props.attachmentUrl, { + color: { + dark: '#000', + light: '#0000' // transparent + } + }).then((attachmentQrCode:string) => this.setState({attachmentQrCode})) + } + } + private handleSendButtonKeyPress(evt: React.KeyboardEvent) { if (evt.key === 'Enter' || evt.key === ' ') { evt.preventDefault(); @@ -89,7 +108,12 @@ class ShellContainer extends React.Component implements ShellFunctions { } } + addFile(file: any) { + this.props.sendFiles([file]); + } + render() { + console.log('SHELL PROPS', this.props) const className = classList( 'wc-console', this.props.inputText.length > 0 && 'has-text', @@ -101,7 +125,7 @@ class ShellContainer extends React.Component implements ShellFunctions { const sendButtonClassName = classList( 'wc-send', - showMicButton && 'hidden' + showMicButton || (this.props.showUploadButton && this.props.disableInput) && 'hidden' ); const micButtonClassName = classList( @@ -117,16 +141,13 @@ class ShellContainer extends React.Component implements ShellFunctions {
{ this.props.showUploadButton && - + [ + this.addFile(file) } />, + + ] } { this.props.showUploadButton && @@ -194,6 +215,7 @@ export const Shell = connect( // passed down to ShellContainer inputText: state.shell.input, showUploadButton: state.format.showUploadButton, + attachmentUrl:state.format.attachmentUrl, disableInput: state.format.disableInput, strings: state.format.strings, // only used to create helper functions below @@ -212,6 +234,7 @@ export const Shell = connect( // from stateProps inputText: stateProps.inputText, showUploadButton: stateProps.showUploadButton, + attachmentUrl: stateProps.attachmentUrl, disableInput: stateProps.disableInput, strings: stateProps.strings, listeningState: stateProps.listeningState, diff --git a/src/Store.ts b/src/Store.ts index b2c2f548b5..0df697d4f8 100644 --- a/src/Store.ts +++ b/src/Store.ts @@ -154,6 +154,7 @@ export interface FormatState { chatTitle: boolean | string, locale: string, showUploadButton: boolean, + attachmentUrl: string, disableInput: boolean, disableInputWhenNotNeeded: boolean strings: Strings, @@ -172,6 +173,7 @@ export type FormatAction = { } | { type: 'Toggle_Upload_Button', showUploadButton: boolean + attachmentUrl?: string } | { type: 'Toggle_Disable_Input', disableInput: boolean @@ -185,6 +187,7 @@ export const format: Reducer = ( chatTitle: true, locale: 'en-us', showUploadButton: true, + attachmentUrl: null, disableInput: false, disableInputWhenNotNeeded: false, strings: defaultStrings, @@ -212,7 +215,8 @@ export const format: Reducer = ( case 'Toggle_Upload_Button': return { ...state, - showUploadButton: action.showUploadButton + showUploadButton: action.showUploadButton, + attachmentUrl: action.attachmentUrl, }; case 'Toggle_Disable_Input': return { @@ -626,13 +630,18 @@ const speakOnMessageReceivedEpic: Epic = (action$, store // TODO do not overwrite Chat.props.showUploadButton=true const showUploadBasedOnInputHint: Epic = (action$, store) => action$.ofType('Receive_Message') - .map(action => ({ type: 'Toggle_Upload_Button', showUploadButton: action.activity.inputHint === 'expectingUpload' } as FormatAction)) + .map(action=>{console.log(action); return action;}) + .map(action => ({ + type: 'Toggle_Upload_Button', + showUploadButton: action.activity.inputHint === 'expectingUpload', + attachmentUrl: action.activity.channelData && action.activity.channelData.attachmentUrl + } as FormatAction)) // FEEDYOU disable/hide input prompt only when last message's inputHint=='ignoringInput' const disableInputBasedOnInputHint: Epic = (action$, store) => action$.ofType('Receive_Message') .filter(action => (action.activity as Message) && store.getState().format.disableInputWhenNotNeeded) - .map(action => ({ type: 'Toggle_Disable_Input', disableInput: action.activity.inputHint === 'ignoringInput' } as FormatAction)) + .map(action => ({ type: 'Toggle_Disable_Input', disableInput: action.activity.inputHint === 'ignoringInput' || action.activity.inputHint === 'expectingUpload' } as FormatAction)) const stopSpeakingEpic: Epic = (action$) => action$.ofType( diff --git a/src/scss/botchat.scss b/src/scss/botchat.scss index 1455678663..305d0eb60c 100644 --- a/src/scss/botchat.scss +++ b/src/scss/botchat.scss @@ -635,7 +635,7 @@ } &.has-upload-button .wc-textbox { - left: 48px; + left: 160px; } .wc-textbox { @@ -682,7 +682,7 @@ background-color: #ecedef !important; } - .wc-console.disable-input * { + .wc-console.disable-input .wc-textbox, .wc-console.disable-input .wc-send, .wc-console.disable-input .wc-mic { display: none; } diff --git a/src/simple-update-in.d.ts b/src/simple-update-in.d.ts index fb790ad69b..8ee2881dc3 100644 --- a/src/simple-update-in.d.ts +++ b/src/simple-update-in.d.ts @@ -1,3 +1,5 @@ declare module 'simple-update-in' { export default function (obj: T, patches: string[], patch: (value: U) => U): T; } + +declare module 'react-drop-zone'; \ No newline at end of file From 28619763fca0431e9f258253be2bd69e50d88d5b Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Tue, 24 Mar 2020 21:49:07 +0100 Subject: [PATCH 02/37] fix consequent uploads causing duplicated onDrop call --- patches/react-drop-zone+3.0.7.patch | 34 +++++++++++++++++++++++++++++ src/Shell.tsx | 12 +++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/patches/react-drop-zone+3.0.7.patch b/patches/react-drop-zone+3.0.7.patch index 843871fd7b..3608a39900 100644 --- a/patches/react-drop-zone+3.0.7.patch +++ b/patches/react-drop-zone+3.0.7.patch @@ -10,3 +10,37 @@ patch-package }); }); }); +@@ -79,13 +79,13 @@ var DropZone = function (_Component) { + + if (value === false && document) { + this.timeout = setTimeout(function () { +- return _this2.setState({ overDocument: false }); ++ return !_this2.unmounted && _this2.setState({ overDocument: false }); + }, 75); + } else if (value === true && document) { + this.timeout = clearTimeout(this.timeout); +- this.setState({ overDocument: true }); ++ !this.unmounted && this.setState({ overDocument: true }); + } else { +- this.setState({ over: value }); ++ !this.unmounted && this.setState({ over: value }); + } + } + }, { +@@ -112,6 +112,7 @@ var DropZone = function (_Component) { + }, { + key: 'componentWillUnmount', + value: function componentWillUnmount() { ++ this.unmounted = true + dropZones.push(this); + } + }, { +@@ -163,6 +164,8 @@ var DropZone = function (_Component) { + key: 'onDrop', + value: function onDrop(event, document) { + event.preventDefault(); ++ event.stopPropagation(); ++ + this.setDragOver(false, document); + if (document) return; + diff --git a/src/Shell.tsx b/src/Shell.tsx index 7f28a86050..1e703125fb 100644 --- a/src/Shell.tsx +++ b/src/Shell.tsx @@ -37,6 +37,7 @@ export interface ShellFunctions { class ShellContainer extends React.Component implements ShellFunctions { private textInput: HTMLInputElement; private fileInput: HTMLInputElement; + private addFileTimeout: any private sendMessage() { if (this.props.inputText.trim().length > 0) { @@ -109,7 +110,12 @@ class ShellContainer extends React.Component implements ShellFunct } addFile(file: any) { - this.props.sendFiles([file]); + // onDrop called multiple times, need to debounce + clearTimeout(this.addFileTimeout) + this.addFileTimeout = setTimeout(() => { + console.log('addFile timeout') + this.props.sendFiles([file]) + }, 75) } render() { @@ -142,8 +148,8 @@ class ShellContainer extends React.Component implements ShellFunct { this.props.showUploadButton && [ - this.addFile(file) } />, -
+ this.addFile(file) } />, + From 4a62195f4d102c188a3cbc63640f58bb653320b8 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Mon, 30 Mar 2020 12:56:57 +0200 Subject: [PATCH 03/37] qr code only attachment support --- src/Chat.tsx | 48 +++++++++++++++++++++++++----------------------- src/Shell.tsx | 28 +++++++++++++++++++--------- src/Store.ts | 4 ++++ src/Strings.ts | 18 +++++++++++++++--- 4 files changed, 63 insertions(+), 35 deletions(-) diff --git a/src/Chat.tsx b/src/Chat.tsx index f7d2c719f4..0610a6516b 100644 --- a/src/Chat.tsx +++ b/src/Chat.tsx @@ -42,6 +42,7 @@ export interface ChatProps { selectedActivity?: BehaviorSubject, sendTyping?: boolean, showUploadButton?: boolean, + uploadUsingQrCodeOnly?: boolean disableInputWhenNotNeeded?: boolean, formatOptions?: FormatOptions, resize?: 'none' | 'window' | 'detect', @@ -110,7 +111,7 @@ export class Chat extends React.Component { this.store.dispatch({ type: 'Set_Chat_Title', chatTitle }); } - this.store.dispatch({ type: 'Toggle_Upload_Button', showUploadButton: props.showUploadButton !== false }); + this.store.dispatch({ type: 'Toggle_Upload_Button', showUploadButton: props.showUploadButton !== false, uploadUsingQrCodeOnly: !!props.uploadUsingQrCodeOnly }); this.store.dispatch({ type: 'Toggle_Disable_Input', disableInput: props.disableInputWhenNotNeeded }); @@ -221,31 +222,32 @@ export class Chat extends React.Component { let botConnection: any if (this.props.directLine) { botConnection = this.botConnection = new DirectLine(this.props.directLine) - botConnection.postActivityOriginal = botConnection.postActivity + } else { + botConnection = this.props.botConnection + } + + botConnection.postActivityOriginal = botConnection.postActivity - botConnection.postActivity = (activity: any) => { - // send userData only once during initial event - if (activity.name === 'beginIntroDialog') { - const newActivity = { - ...activity, - channelData: { - ...activity.channelData, - userData: { - ...(this.props.userData || {}), - ...(window.location.hash === '#feedbot-test-mode' ? { testMode: true } : {}), - ...getLocaleUserData(this.props.locale), - ...getReferrerUserData() - } + botConnection.postActivity = (activity: any) => { + // send userData only once during initial event + if (activity.name === 'beginIntroDialog') { + const newActivity = { + ...activity, + channelData: { + ...activity.channelData, + userData: { + ...(this.props.userData || {}), + ...(window.location.hash === '#feedbot-test-mode' ? { testMode: true } : {}), + ...getLocaleUserData(this.props.locale), + ...getReferrerUserData() } - }; - console.log('userData', newActivity.channelData.userData) - return botConnection.postActivityOriginal(newActivity); - } else { - return botConnection.postActivityOriginal(activity); - } + } + }; + console.log('userData', newActivity.channelData.userData) + return botConnection.postActivityOriginal(newActivity); + } else { + return botConnection.postActivityOriginal(activity); } - } else { - botConnection = this.props.botConnection } if (this.props.resize === 'window') diff --git a/src/Shell.tsx b/src/Shell.tsx index 1e703125fb..a45b154260 100644 --- a/src/Shell.tsx +++ b/src/Shell.tsx @@ -16,6 +16,7 @@ interface Props { listeningState: ListeningState, showUploadButton: boolean, attachmentUrl: string, + uploadUsingQrCodeOnly: boolean, disableInput: boolean onChangeText: (inputText: string) => void @@ -119,7 +120,6 @@ class ShellContainer extends React.Component implements ShellFunct } render() { - console.log('SHELL PROPS', this.props) const className = classList( 'wc-console', this.props.inputText.length > 0 && 'has-text', @@ -142,18 +142,26 @@ class ShellContainer extends React.Component implements ShellFunct ); const placeholder = this.props.listeningState === ListeningState.STARTED ? this.props.strings.listeningIndicator : this.props.strings.consolePlaceholder; + + const localAndQrAttachment = [ + this.addFile(file) } />, + + ] + const qrOnlyAttachment = [ +
+ {this.props.strings.attachmentInfoQrOnly}
{this.props.attachmentUrl}
+ alert(this.props.strings.attachmentAlert + '\n\n'+this.props.attachmentUrl)}> +
+ ] + return (
{ - this.props.showUploadButton && - [ - this.addFile(file) } />, - - ] + this.props.showUploadButton && (this.props.uploadUsingQrCodeOnly ? qrOnlyAttachment : localAndQrAttachment) } { this.props.showUploadButton && @@ -223,6 +231,7 @@ export const Shell = connect( showUploadButton: state.format.showUploadButton, attachmentUrl:state.format.attachmentUrl, disableInput: state.format.disableInput, + uploadUsingQrCodeOnly: state.format.uploadUsingQrCodeOnly, strings: state.format.strings, // only used to create helper functions below locale: state.format.locale, @@ -242,6 +251,7 @@ export const Shell = connect( showUploadButton: stateProps.showUploadButton, attachmentUrl: stateProps.attachmentUrl, disableInput: stateProps.disableInput, + uploadUsingQrCodeOnly: stateProps.uploadUsingQrCodeOnly, strings: stateProps.strings, listeningState: stateProps.listeningState, // from dispatchProps diff --git a/src/Store.ts b/src/Store.ts index 0df697d4f8..96426d2e93 100644 --- a/src/Store.ts +++ b/src/Store.ts @@ -155,6 +155,7 @@ export interface FormatState { locale: string, showUploadButton: boolean, attachmentUrl: string, + uploadUsingQrCodeOnly: boolean, disableInput: boolean, disableInputWhenNotNeeded: boolean strings: Strings, @@ -174,6 +175,7 @@ export type FormatAction = { type: 'Toggle_Upload_Button', showUploadButton: boolean attachmentUrl?: string + uploadUsingQrCodeOnly?: boolean } | { type: 'Toggle_Disable_Input', disableInput: boolean @@ -190,6 +192,7 @@ export const format: Reducer = ( attachmentUrl: null, disableInput: false, disableInputWhenNotNeeded: false, + uploadUsingQrCodeOnly: false, strings: defaultStrings, carouselMargin: undefined }, @@ -217,6 +220,7 @@ export const format: Reducer = ( ...state, showUploadButton: action.showUploadButton, attachmentUrl: action.attachmentUrl, + uploadUsingQrCodeOnly: action.hasOwnProperty('uploadUsingQrCodeOnly') ? action.uploadUsingQrCodeOnly : state.uploadUsingQrCodeOnly }; case 'Toggle_Disable_Input': return { diff --git a/src/Strings.ts b/src/Strings.ts index 5597da75ca..4e6aac1a23 100644 --- a/src/Strings.ts +++ b/src/Strings.ts @@ -13,7 +13,11 @@ export interface Strings { consolePlaceholder: string, listeningIndicator: string, uploadFile: string, - speak: string + speak: string, + attachmentDropArea?: string, + attachmentInfo?: string, + attachmentInfoQrOnly?: string, + attachmentAlert?: string, } interface LocalizedStrings { @@ -36,7 +40,11 @@ const localizedStrings: LocalizedStrings = { consolePlaceholder: "Type your message...", listeningIndicator: "Listening...", uploadFile: "Upload file", - speak: "Speak" + speak: "Speak", + attachmentDropArea: "Click to select file or drop it here", + attachmentInfo: "To upload from another device scan or click QR code", + attachmentInfoQrOnly: "To upload attachment, visit following address on it or scan QR code on other device:", + attachmentAlert: "Please visit following address on device you want to upload from:" }, 'ja-jp': { title: "チャット", @@ -325,7 +333,11 @@ const localizedStrings: LocalizedStrings = { consolePlaceholder: "Napište svou zprávu...", listeningIndicator: "Poslouchám...", uploadFile: "Nahrát soubor", - speak: "Použít hlas" + speak: "Použít hlas", + attachmentDropArea: "Přetáhněte soubor sem nebo klikněte pro nahrání", + attachmentInfo: "Pro nahrání z jíného zařízení naskenujte nebo klikněte na QR kód", + attachmentInfoQrOnly: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jíného zařízení:", + attachmentAlert: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jíného zařízení:" }, 'ko-kr': { title: "채팅", From a3fd51f5b702cb70ea49f234e72a84c5cca4f4db Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Mon, 20 Apr 2020 14:59:39 +0200 Subject: [PATCH 04/37] rm log --- src/Store.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Store.ts b/src/Store.ts index 96426d2e93..28ab30eb79 100644 --- a/src/Store.ts +++ b/src/Store.ts @@ -634,7 +634,6 @@ const speakOnMessageReceivedEpic: Epic = (action$, store // TODO do not overwrite Chat.props.showUploadButton=true const showUploadBasedOnInputHint: Epic = (action$, store) => action$.ofType('Receive_Message') - .map(action=>{console.log(action); return action;}) .map(action => ({ type: 'Toggle_Upload_Button', showUploadButton: action.activity.inputHint === 'expectingUpload', From cfe898dd31c5bf8e8bb58ac1517f3968f78f8386 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Wed, 22 Apr 2020 15:29:59 +0200 Subject: [PATCH 05/37] locale --- src/Strings.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Strings.ts b/src/Strings.ts index 4e6aac1a23..6c38ef9e60 100644 --- a/src/Strings.ts +++ b/src/Strings.ts @@ -335,9 +335,9 @@ const localizedStrings: LocalizedStrings = { uploadFile: "Nahrát soubor", speak: "Použít hlas", attachmentDropArea: "Přetáhněte soubor sem nebo klikněte pro nahrání", - attachmentInfo: "Pro nahrání z jíného zařízení naskenujte nebo klikněte na QR kód", - attachmentInfoQrOnly: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jíného zařízení:", - attachmentAlert: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jíného zařízení:" + attachmentInfo: "Pro nahrání z jiného zařízení naskenujte nebo klikněte na QR kód", + attachmentInfoQrOnly: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jiného zařízení:", + attachmentAlert: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jiného zařízení:" }, 'ko-kr': { title: "채팅", From 87a0be88739599b754d0d324316612f2e343d4bd Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Tue, 12 May 2020 11:59:30 +0200 Subject: [PATCH 06/37] fix scrollToBottomDetectionTolerance --- samples/feedyou/example.html | 77 ++++++ samples/feedyou/example2.html | 46 ++++ samples/feedyou/modern copy.html | 372 +++++++++++++++++++++++++ samples/feedyou/webchat-.html | 376 +++++++++++++++++++++++++ samples/feedyou/webchat-pooling.html | 327 ++++++++++++++++++++++ samples/feedyou/webchat.html | 393 +++++++++++++++++++++++++++ src/History.tsx | 2 +- src/embed.js | 11 + 8 files changed, 1603 insertions(+), 1 deletion(-) create mode 100644 samples/feedyou/example.html create mode 100644 samples/feedyou/example2.html create mode 100644 samples/feedyou/modern copy.html create mode 100644 samples/feedyou/webchat-.html create mode 100644 samples/feedyou/webchat-pooling.html create mode 100644 samples/feedyou/webchat.html create mode 100644 src/embed.js diff --git a/samples/feedyou/example.html b/samples/feedyou/example.html new file mode 100644 index 0000000000..a74299d4a3 --- /dev/null +++ b/samples/feedyou/example.html @@ -0,0 +1,77 @@ + + + + + + + + Chatbot + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/feedyou/example2.html b/samples/feedyou/example2.html new file mode 100644 index 0000000000..fc5aeff301 --- /dev/null +++ b/samples/feedyou/example2.html @@ -0,0 +1,46 @@ + + + + + + + + Chatbot + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/feedyou/modern copy.html b/samples/feedyou/modern copy.html new file mode 100644 index 0000000000..d50af09074 --- /dev/null +++ b/samples/feedyou/modern copy.html @@ -0,0 +1,372 @@ + + + + + + + + + Chatbot + + + + +
+ +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/samples/feedyou/webchat-.html b/samples/feedyou/webchat-.html new file mode 100644 index 0000000000..ee39fa61df --- /dev/null +++ b/samples/feedyou/webchat-.html @@ -0,0 +1,376 @@ + + + + + + + + + Chatbot + + + + +
+ +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/samples/feedyou/webchat-pooling.html b/samples/feedyou/webchat-pooling.html new file mode 100644 index 0000000000..9de7e520f4 --- /dev/null +++ b/samples/feedyou/webchat-pooling.html @@ -0,0 +1,327 @@ + + + + + + + + + + Chatbot + + + + + +
+ +
+ +
+ + + + + \ No newline at end of file diff --git a/samples/feedyou/webchat.html b/samples/feedyou/webchat.html new file mode 100644 index 0000000000..abe400b96f --- /dev/null +++ b/samples/feedyou/webchat.html @@ -0,0 +1,393 @@ + + + + + + + + + + Chatbot + + + + + +
+ +
+ +
+ + + + + \ No newline at end of file diff --git a/src/History.tsx b/src/History.tsx index 8853975f3b..83a0ddccbc 100644 --- a/src/History.tsx +++ b/src/History.tsx @@ -42,7 +42,7 @@ export class HistoryView extends React.Component { let scrollToBottomDetectionTolerance = 1; if (!this.props.hasActivityWithSuggestedActions && nextProps.hasActivityWithSuggestedActions) { - scrollToBottomDetectionTolerance = 40; // this should be in-sync with $actionsHeight scss var + scrollToBottomDetectionTolerance = 70; // this should be in-sync with $actionsHeight scss var } this.scrollToBottom = (Math.abs(this.scrollMe.scrollHeight - this.scrollMe.scrollTop - this.scrollMe.offsetHeight) <= scrollToBottomDetectionTolerance); diff --git a/src/embed.js b/src/embed.js new file mode 100644 index 0000000000..8335b758aa --- /dev/null +++ b/src/embed.js @@ -0,0 +1,11 @@ +(function (f,y,b,o,t,s){(t = y.createElement(b)), (s = y.getElementsByTagName(b)[0]); +t.async = 1;t.src = o;s.parentNode.insertBefore(t, s); +})(window,document,"script","https://feedyou.azureedge.net/webchat/master/botchat-es5.js"); +window.addEventListener('load', function (){ BotChat.App({ + bot: { id: 'feedbot-randstad' }, + theme: { mainColor: '#2175d9' }, + header: { text: 'Chatbot' }, + userData: { site: '...' }, + disableInputWhenNotNeeded: true, + autoExpandTimeout: 5000 +})}) \ No newline at end of file From 3586c956d13dde376a86ea6f621e7fcbd26c972d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ba=C4=8Fura?= <41472305+J4ba4@users.noreply.github.com> Date: Sun, 22 Nov 2020 20:50:48 +0100 Subject: [PATCH 07/37] feat: add textarea autofocus (#8) * feat: FBOT-366 added autofocusing textarea * revert prettier changes Co-authored-by: Jan Dvorak --- src/Shell.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Shell.tsx b/src/Shell.tsx index 3667f52c61..7b843cc18e 100644 --- a/src/Shell.tsx +++ b/src/Shell.tsx @@ -40,6 +40,12 @@ class ShellContainer extends React.Component implements ShellFunct private fileInput: HTMLInputElement; private addFileTimeout: any + componentDidUpdate(prevProps: Props) { + if (prevProps.disableInput === true && this.props.disableInput === false) { + this.textInput.focus(); + } + } + private sendMessage() { if (this.props.inputText.trim().length > 0) { this.props.sendMessage(this.props.inputText); From 16440e4f2b87bcf5dfd0a8c3163954b2e27ed2d1 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sun, 22 Nov 2020 21:54:25 +0100 Subject: [PATCH 08/37] fix conflicts --- src/Shell.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Shell.tsx b/src/Shell.tsx index 7b843cc18e..7efd9b5bde 100644 --- a/src/Shell.tsx +++ b/src/Shell.tsx @@ -40,19 +40,17 @@ class ShellContainer extends React.Component implements ShellFunct private fileInput: HTMLInputElement; private addFileTimeout: any - componentDidUpdate(prevProps: Props) { - if (prevProps.disableInput === true && this.props.disableInput === false) { - this.textInput.focus(); - } - } - private sendMessage() { if (this.props.inputText.trim().length > 0) { this.props.sendMessage(this.props.inputText); } } - componentDidUpdate() { + componentDidUpdate(prevProps: Props) { + if (prevProps.disableInput === true && this.props.disableInput === false) { + this.textInput.focus(); + } + if (this.props.attachmentUrl && (!this.state)) { QRCode.toDataURL(this.props.attachmentUrl, { color: { From fffbbb29eed58627dd369c84d3ffc32d1a0ca7c5 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sat, 6 Feb 2021 12:12:56 +0100 Subject: [PATCH 09/37] feat: add feedbot:trigger-dialog window event --- src/Chat.tsx | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/Chat.tsx b/src/Chat.tsx index bcb899a61b..8e20e375a8 100644 --- a/src/Chat.tsx +++ b/src/Chat.tsx @@ -300,6 +300,37 @@ export class Chat extends React.Component { }); } + // FEEDYOU - way to trigger dialog from anywhere using window event + // polyfill needed for IEs https://gomakethings.com/custom-events-in-internet-explorer-with-vanilla-js/ + window.addEventListener('feedbot:trigger-dialog', (event: CustomEvent) => { + console.log('feedbot:trigger-dialog', event.detail, event) + let eventName: string + let dialogId: string + let userData: object = {} + let mode: string + if (typeof event.detail === 'string') { + dialogId = event.detail + eventName = 'beginIntroDialog' + } else if (typeof event.detail === 'object' && event.detail.id === 'string') { + dialogId = event.detail.id + userData = event.detail.userData || {} + mode = event.detail.mode || '' + eventName = 'beginDialog' // new event supported from bot v1.7.419 + } + + if (dialogId) { + botConnection.postActivity({ + from: this.props.user, + name: eventName, + type: 'event', + value: '', + channelData: {id: dialogId, userData, mode} + }).subscribe(function (id: any) { + konsole.log('"'+eventName+'" event sent', dialogId, userData, mode); + }); + } + }) + this.connectionStatusSubscription = botConnection.connectionStatus$.subscribe((connectionStatus: any) =>{ if(this.props.speechOptions && this.props.speechOptions.speechRecognizer){ let refGrammarId = botConnection.referenceGrammarId; From e861326599d36b52593e83aa72b49efd672aa61d Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sun, 7 Feb 2021 20:03:08 +0100 Subject: [PATCH 10/37] feat: webchat-locale event --- src/Chat.tsx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Chat.tsx b/src/Chat.tsx index 8e20e375a8..6b005f9f04 100644 --- a/src/Chat.tsx +++ b/src/Chat.tsx @@ -66,6 +66,7 @@ export class Chat extends React.Component { private fbPixelEventsSubscription: Subscription; private gaEventsSubscription: Subscription; private gtmEventsSubscription: Subscription; + private botEventsSubscribtion: Subscription; private connectionStatusSubscription: Subscription; private selectedActivitySubscription: Subscription; private shellRef: React.Component & ShellFunctions; @@ -281,6 +282,23 @@ export class Chat extends React.Component { .filter((activity: any) => activity.type === "event" && activity.name === "google-tag-manager-track-event") .subscribe((activity: any) => trackGoogleTagManagerEvent(JSON.parse(activity.value))) + this.botEventsSubscribtion = botConnection.activity$ + .filter((activity: any) => activity.type === "event" && activity.name.startsWith('webchat-')) + .subscribe((activity: any) => { + switch (activity.name) { + case 'webchat-collapse': + const wrapper = document.getElementsByClassName('feedbot-wrapper')[0] + wrapper && wrapper.classList.add('collapsed') + break; + case 'webchat-locale': + activity.value && this.store.dispatch({ + type: 'Set_Locale', + locale: activity.value + }); + break; + } + }) + // FEEDYOU - send event to bot to tell him webchat was opened - more reliable solution instead of conversationUpdate event // https://github.com/Microsoft/BotBuilder/issues/4245#issuecomment-369311452 if (!this.props.directLine || !this.props.directLine.conversationId) { @@ -366,6 +384,7 @@ export class Chat extends React.Component { this.fbPixelEventsSubscription.unsubscribe(); this.gaEventsSubscription.unsubscribe(); this.gtmEventsSubscription.unsubscribe(); + this.botEventsSubscribtion.unsubscribe(); this.connectionStatusSubscription.unsubscribe(); this.activitySubscription.unsubscribe(); if (this.selectedActivitySubscription) From 03bc8d5ccb1ebf0d8face723c438ae71f4effd16 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Sun, 7 Feb 2021 20:03:21 +0100 Subject: [PATCH 11/37] feat: PL attachment strings --- src/Strings.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Strings.ts b/src/Strings.ts index 6c38ef9e60..324fbda12b 100644 --- a/src/Strings.ts +++ b/src/Strings.ts @@ -129,7 +129,11 @@ const localizedStrings: LocalizedStrings = { consolePlaceholder: "Wpisz swoją wiadomość...", listeningIndicator: "Słuchanie...", uploadFile: "Wyślij plik", - speak: "Mów" + speak: "Mów", + attachmentDropArea: "Przeciągnij plik tu lub kliknij w celu wczytania", + attachmentInfo: "W celu wczytania z innego urządzenia zeskanuj lub kliknij w ten kod QR", + attachmentInfoQrOnly: "W celu wczytania załącznika odwiedź następujący adres lub zeskanuj ten kod QR z innego urządzenia:", + attachmentAlert: "W celu wczytania załącznika odwiedź następujący adres lub zeskanuj ten kod QR z innego urządzenia:" }, 'ru-ru': { title: "Чат", @@ -335,9 +339,9 @@ const localizedStrings: LocalizedStrings = { uploadFile: "Nahrát soubor", speak: "Použít hlas", attachmentDropArea: "Přetáhněte soubor sem nebo klikněte pro nahrání", - attachmentInfo: "Pro nahrání z jiného zařízení naskenujte nebo klikněte na QR kód", - attachmentInfoQrOnly: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jiného zařízení:", - attachmentAlert: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jiného zařízení:" + attachmentInfo: "Pro nahrání z jiného zařízení naskenujte nebo klikněte na tento QR kód", + attachmentInfoQrOnly: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte tento QR kód z jiného zařízení:", + attachmentAlert: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte tento QR kód z jiného zařízení:" }, 'ko-kr': { title: "채팅", From cddebb93e58e5fc04d1fd3b4b0aa260ec91cf426 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Fri, 12 Feb 2021 16:24:05 +0100 Subject: [PATCH 12/37] revert: too long CZ QR code textations --- src/Strings.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Strings.ts b/src/Strings.ts index 324fbda12b..9c9476a143 100644 --- a/src/Strings.ts +++ b/src/Strings.ts @@ -339,9 +339,9 @@ const localizedStrings: LocalizedStrings = { uploadFile: "Nahrát soubor", speak: "Použít hlas", attachmentDropArea: "Přetáhněte soubor sem nebo klikněte pro nahrání", - attachmentInfo: "Pro nahrání z jiného zařízení naskenujte nebo klikněte na tento QR kód", - attachmentInfoQrOnly: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte tento QR kód z jiného zařízení:", - attachmentAlert: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte tento QR kód z jiného zařízení:" + attachmentInfo: "Pro nahrání z jiného zařízení naskenujte nebo klikněte na QR kód", + attachmentInfoQrOnly: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jiného zařízení:", + attachmentAlert: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jiného zařízení:" }, 'ko-kr': { title: "채팅", From b382da822f6da4ff649c609a09f83ad3481d7a66 Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Wed, 10 Mar 2021 21:54:56 +0100 Subject: [PATCH 13/37] fix: not working trigger-dialog event --- src/Chat.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Chat.tsx b/src/Chat.tsx index 6b005f9f04..c37ea19fa9 100644 --- a/src/Chat.tsx +++ b/src/Chat.tsx @@ -329,7 +329,7 @@ export class Chat extends React.Component { if (typeof event.detail === 'string') { dialogId = event.detail eventName = 'beginIntroDialog' - } else if (typeof event.detail === 'object' && event.detail.id === 'string') { + } else if (typeof event.detail === 'object' && typeof event.detail.id === 'string') { dialogId = event.detail.id userData = event.detail.userData || {} mode = event.detail.mode || '' From e3c0f5f6b6ad9c8426b7c01cf775ed6ff2db26ba Mon Sep 17 00:00:00 2001 From: janbadura Date: Sun, 18 Apr 2021 22:11:21 +0200 Subject: [PATCH 14/37] =?UTF-8?q?fix:=20=F0=9F=90=9B=20attachmentInfo=20te?= =?UTF-8?q?xtation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Strings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Strings.ts b/src/Strings.ts index 9c9476a143..ed1cd12a15 100644 --- a/src/Strings.ts +++ b/src/Strings.ts @@ -339,7 +339,7 @@ const localizedStrings: LocalizedStrings = { uploadFile: "Nahrát soubor", speak: "Použít hlas", attachmentDropArea: "Přetáhněte soubor sem nebo klikněte pro nahrání", - attachmentInfo: "Pro nahrání z jiného zařízení naskenujte nebo klikněte na QR kód", + attachmentInfo: "Pro nahrání z jiného zařízení naskenujte nebo klikněte na tento QR kód", attachmentInfoQrOnly: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jiného zařízení:", attachmentAlert: "Pro nahrání přílohy navštivte následující adresu nebo naskenujte QR kód z jiného zařízení:" }, From f66b6f3f5675de2c501a1592aa4605bc55dda91e Mon Sep 17 00:00:00 2001 From: Jan Dvorak Date: Tue, 11 May 2021 09:39:50 +0200 Subject: [PATCH 15/37] feat: support cancelDialogId in trigger-dialog event --- src/Chat.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Chat.tsx b/src/Chat.tsx index c37ea19fa9..663a559ba4 100644 --- a/src/Chat.tsx +++ b/src/Chat.tsx @@ -325,7 +325,8 @@ export class Chat extends React.Component { let eventName: string let dialogId: string let userData: object = {} - let mode: string + let mode: string = '' + let cancelDialogId: string = '' if (typeof event.detail === 'string') { dialogId = event.detail eventName = 'beginIntroDialog' @@ -333,6 +334,7 @@ export class Chat extends React.Component { dialogId = event.detail.id userData = event.detail.userData || {} mode = event.detail.mode || '' + cancelDialogId = event.detail.cancelDialogId || '' eventName = 'beginDialog' // new event supported from bot v1.7.419 } @@ -342,7 +344,7 @@ export class Chat extends React.Component { name: eventName, type: 'event', value: '', - channelData: {id: dialogId, userData, mode} + channelData: {id: dialogId, userData, mode, cancelDialogId} }).subscribe(function (id: any) { konsole.log('"'+eventName+'" event sent', dialogId, userData, mode); }); From 63549c44de81e4a3e400b83e11e5fb6ee346f7f2 Mon Sep 17 00:00:00 2001 From: janbadura Date: Wed, 1 Sep 2021 12:03:06 +0200 Subject: [PATCH 16/37] =?UTF-8?q?feat:=20=F0=9F=9A=80=20cherrypick=20from?= =?UTF-8?q?=20direct-upload=20from=20fuckup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Shell.tsx | 175 +++++++++++++++++++++++++++++--------------------- src/Store.ts | 5 +- 2 files changed, 106 insertions(+), 74 deletions(-) diff --git a/src/Shell.tsx b/src/Shell.tsx index 7efd9b5bde..ebeaccd862 100644 --- a/src/Shell.tsx +++ b/src/Shell.tsx @@ -22,7 +22,7 @@ interface Props { onChangeText: (inputText: string) => void sendMessage: (inputText: string) => void, - sendFiles: (files: any) => void, + sendFiles: (files: any, isDirectUpload: boolean) => void, stopListening: () => void, startListening: () => void } @@ -54,10 +54,10 @@ class ShellContainer extends React.Component implements ShellFunct if (this.props.attachmentUrl && (!this.state)) { QRCode.toDataURL(this.props.attachmentUrl, { color: { - dark: '#000', - light: '#0000' // transparent + dark: '#000', + light: '#0000' // transparent } - }).then((attachmentQrCode:string) => this.setState({attachmentQrCode})) + }).then((attachmentQrCode: string) => this.setState({ attachmentQrCode })) } } @@ -87,12 +87,12 @@ class ShellContainer extends React.Component implements ShellFunct } private onChangeFile() { - this.props.sendFiles(this.fileInput.files); + this.props.sendFiles(this.fileInput.files, location.hash.includes('#feedbot-direct-upload')); this.fileInput.value = null; this.textInput.focus(); } - private onTextInputFocus(){ + private onTextInputFocus() { if (this.props.listeningState === ListeningState.STARTED) { this.props.stopListening(); } @@ -117,9 +117,40 @@ class ShellContainer extends React.Component implements ShellFunct addFile(file: any) { // onDrop called multiple times, need to debounce clearTimeout(this.addFileTimeout) + this.addFileTimeout = setTimeout(() => { console.log('addFile timeout') - this.props.sendFiles([file]) + + if (true || location.hash.includes('#feedbot-direct-upload')) { + const attachmentUrl = this.props.attachmentUrl + const f = file + const reader = new FileReader() + + console.log(f) + + reader.onload = (function (file) { + return async function (e: any) { + console.log(e) + var binaryData = e.target.result + //Converting Binary Data to base 64 + var base64String = 'data:' + file.type + ';base64,' + window.btoa(binaryData) + const body = JSON.stringify([{ data: base64String, fileName: file.name }]) + try { + const response = await fetch(attachmentUrl, { + method: 'POST', + body + }) + + console.log("File successfully uploaded", response.status, response.statusText) + } catch (error) { + console.log("File upload failed", error) + } + } + })(f) + + reader.readAsBinaryString(f) + } + this.props.sendFiles([file], true || location.hash.includes('#feedbot-direct-upload')) }, 75) } @@ -131,7 +162,7 @@ class ShellContainer extends React.Component implements ShellFunct this.props.disableInput && 'disable-input' ); - const showMicButton = this.props.listeningState !== ListeningState.STOPPED || (Speech.SpeechRecognizer.speechIsAvailable() && !this.props.inputText.length); + const showMicButton = this.props.listeningState !== ListeningState.STOPPED || (Speech.SpeechRecognizer.speechIsAvailable() && !this.props.inputText.length); const sendButtonClassName = classList( 'wc-send', @@ -146,63 +177,63 @@ class ShellContainer extends React.Component implements ShellFunct ); const placeholder = this.props.listeningState === ListeningState.STARTED ? this.props.strings.listeningIndicator : this.props.strings.consolePlaceholder; - + const localAndQrAttachment = [ - this.addFile(file) } />, + this.addFile(file)} />, ] const qrOnlyAttachment = [ ] - + return ( -
+
{ this.props.showUploadButton && (this.props.uploadUsingQrCodeOnly ? qrOnlyAttachment : localAndQrAttachment) } { this.props.showUploadButton && - this.fileInput = input } - // multiple - onChange={ () => this.onChangeFile() } - aria-label={ this.props.strings.uploadFile } - role="button" - /> + this.fileInput = input} + // multiple + onChange={() => this.onChangeFile()} + aria-label={this.props.strings.uploadFile} + role="button" + /> }
this.textInput = input } + ref={input => this.textInput = input} autoFocus - value={ this.props.inputText } - onChange={ _ => this.props.onChangeText(this.textInput.value) } - onKeyPress={ e => this.onKeyPress(e) } - onFocus={ () => this.onTextInputFocus() } - placeholder={ placeholder } - disabled={ this.props.disableInput } - aria-label={ this.props.inputText ? null : placeholder } + value={this.props.inputText} + onChange={_ => this.props.onChangeText(this.textInput.value)} + onKeyPress={e => this.onKeyPress(e)} + onFocus={() => this.onTextInputFocus()} + placeholder={placeholder} + disabled={this.props.disableInput} + aria-label={this.props.inputText ? null : placeholder} aria-live="polite" />
@@ -233,7 +264,7 @@ export const Shell = connect( // passed down to ShellContainer inputText: state.shell.input, showUploadButton: state.format.showUploadButton, - attachmentUrl:state.format.attachmentUrl, + attachmentUrl: state.format.attachmentUrl, disableInput: state.format.disableInput, uploadUsingQrCodeOnly: state.format.uploadUsingQrCodeOnly, strings: state.format.strings, @@ -242,30 +273,30 @@ export const Shell = connect( user: state.connection.user, listeningState: state.shell.listeningState }), { - // passed down to ShellContainer - onChangeText: (input: string) => ({ type: 'Update_Input', input, source: "text" } as ChatActions), - stopListening: () => ({ type: 'Listening_Stopping' }), - startListening: () => ({ type: 'Listening_Starting' }), - // only used to create helper functions below - sendMessage, - sendFiles - }, (stateProps: any, dispatchProps: any, ownProps: any): Props => ({ - // from stateProps - inputText: stateProps.inputText, - showUploadButton: stateProps.showUploadButton, - attachmentUrl: stateProps.attachmentUrl, - disableInput: stateProps.disableInput, - uploadUsingQrCodeOnly: stateProps.uploadUsingQrCodeOnly, - strings: stateProps.strings, - listeningState: stateProps.listeningState, - // from dispatchProps - onChangeText: dispatchProps.onChangeText, - // helper functions - sendMessage: (text: string) => dispatchProps.sendMessage(text, stateProps.user, stateProps.locale), - sendFiles: (files: FileList) => dispatchProps.sendFiles(files, stateProps.user, stateProps.locale), - startListening: () => dispatchProps.startListening(), - stopListening: () => dispatchProps.stopListening() - }), { - withRef: true - } + // passed down to ShellContainer + onChangeText: (input: string) => ({ type: 'Update_Input', input, source: "text" } as ChatActions), + stopListening: () => ({ type: 'Listening_Stopping' }), + startListening: () => ({ type: 'Listening_Starting' }), + // only used to create helper functions below + sendMessage, + sendFiles +}, (stateProps: any, dispatchProps: any, ownProps: any): Props => ({ + // from stateProps + inputText: stateProps.inputText, + showUploadButton: stateProps.showUploadButton, + attachmentUrl: stateProps.attachmentUrl, + disableInput: stateProps.disableInput, + uploadUsingQrCodeOnly: stateProps.uploadUsingQrCodeOnly, + strings: stateProps.strings, + listeningState: stateProps.listeningState, + // from dispatchProps + onChangeText: dispatchProps.onChangeText, + // helper functions + sendMessage: (text: string) => dispatchProps.sendMessage(text, stateProps.user, stateProps.locale), + sendFiles: (files: FileList, isDirectUpload: boolean) => dispatchProps.sendFiles(files, stateProps.user, stateProps.locale, isDirectUpload), + startListening: () => dispatchProps.startListening(), + stopListening: () => dispatchProps.stopListening() +}), { + withRef: true +} )(ShellContainer); diff --git a/src/Store.ts b/src/Store.ts index 28ab30eb79..fd0122219d 100644 --- a/src/Store.ts +++ b/src/Store.ts @@ -28,13 +28,14 @@ export const sendMessage = (text: string, from: User, locale: string) => ({ timestamp: (new Date()).toISOString() }} as ChatActions); -export const sendFiles = (files: FileList, from: User, locale: string) => ({ +export const sendFiles = (files: FileList, from: User, locale: string, isDirectUpload: boolean) => ({ type: 'Send_Message', activity: { type: "message", attachments: attachmentsFromFiles(files), from, - locale + locale, + isDirectUpload }} as ChatActions); const attachmentsFromFiles = (files: FileList) => { From 54d380c2c7765721042547dabf319ac940835a58 Mon Sep 17 00:00:00 2001 From: janbadura Date: Wed, 1 Sep 2021 14:06:42 +0200 Subject: [PATCH 17/37] =?UTF-8?q?feat:=20=F0=9F=9A=80=20uploading=20files?= =?UTF-8?q?=20based=20on=20fileSize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Chat.tsx | 187 +++++++++++++++++++++++++------------------------- src/Shell.tsx | 8 +-- 2 files changed, 98 insertions(+), 97 deletions(-) diff --git a/src/Chat.tsx b/src/Chat.tsx index 663a559ba4..e111943dd7 100644 --- a/src/Chat.tsx +++ b/src/Chat.tsx @@ -18,16 +18,16 @@ import { ConnectionStatus } from 'botframework-directlinejs'; declare const fbq: Function; declare const dataLayer: Array; -interface GaEvent { +interface GaEvent { eventCategory: string - eventAction:string + eventAction: string eventLabel?: string eventValue?: string } -interface GtmEvent { +interface GtmEvent { event: string - variables?: Array<{name: string, value: string}> + variables?: Array<{ name: string, value: string }> } export interface ChatProps { @@ -47,7 +47,7 @@ export interface ChatProps { formatOptions?: FormatOptions, resize?: 'none' | 'window' | 'detect', userData?: {}, - introDialog?: {id?: string}, + introDialog?: { id?: string }, startOverTrigger?: (trigger: () => void) => void, onConversationStarted?: (callback: (conversationId: string) => void) => void } @@ -228,7 +228,7 @@ export class Chat extends React.Component { } botConnection.postActivityOriginal = botConnection.postActivity - + botConnection.postActivity = (activity: any) => { // send userData only once during initial event if (activity.name === 'beginIntroDialog') { @@ -246,6 +246,9 @@ export class Chat extends React.Component { }; console.log('User data', newActivity.channelData.userData) return botConnection.postActivityOriginal(newActivity); + } else if (activity.type === "message" && activity.isDirectUpload) { + console.log("activity", activity) + return new Observable() } else { return botConnection.postActivityOriginal(activity); } @@ -255,13 +258,13 @@ export class Chat extends React.Component { window.addEventListener('resize', this.resizeListener); this.store.dispatch({ type: 'Start_Connection', user: this.props.user, bot: this.props.bot, botConnection, selectedActivity: this.props.selectedActivity }); - + // FEEDYOU - TECHNICAL ISSUES MESSAGE // this.handleIncomingActivity({ id: 'maintenance', type: 'message', from: { name: "Chatbot", ...this.props.bot }, text: "Dobrý den, aktuálně mám technické problémy, které kolegové intenzivně řeší. Je možné, že nebudu reagovat úplně správně, moc se za to omlouvám. Prosím zkuste si se mnou popovídat později.", timestamp: new Date().toISOString()}); // FEEDYOU - show typing on startup - if bot.id is set to the same value as value on server, it will be cleared by first message if (this.props.bot && this.props.bot.id) { - this.store.dispatch({ type: 'Show_Typing', activity: { id: 'typingUntilIntroDialog', type: 'typing', from: { name: "Chatbot", ...this.props.bot }, timestamp: new Date().toISOString()}}); + this.store.dispatch({ type: 'Show_Typing', activity: { id: 'typingUntilIntroDialog', type: 'typing', from: { name: "Chatbot", ...this.props.bot }, timestamp: new Date().toISOString() } }); } // FEEDYOU - support "start over" button @@ -269,7 +272,7 @@ export class Chat extends React.Component { console.log('starting over') sendPostBack(botConnection, "start over", {}, this.props.user, this.props.locale) }) - + this.fbPixelEventsSubscription = botConnection.activity$ .filter((activity: any) => activity.type === "event" && activity.name === "facebook-pixel-track-event") .subscribe((activity: any) => trackFacebookPixelEvent(activity.value)) @@ -305,14 +308,14 @@ export class Chat extends React.Component { let introDialogId = this.props.introDialog && this.props.introDialog.id ? this.props.introDialog.id : undefined if (window.location.hash.startsWith('#feedbot-intro-dialog=')) { introDialogId = window.location.hash.substr(22) - } - + } + botConnection.postActivity({ from: this.props.user, name: 'beginIntroDialog', type: 'event', value: '', - channelData: introDialogId ? {id: introDialogId} : undefined + channelData: introDialogId ? { id: introDialogId } : undefined }).subscribe(function (id: any) { konsole.log('"beginIntroDialog" event sent'); }); @@ -329,7 +332,7 @@ export class Chat extends React.Component { let cancelDialogId: string = '' if (typeof event.detail === 'string') { dialogId = event.detail - eventName = 'beginIntroDialog' + eventName = 'beginIntroDialog' } else if (typeof event.detail === 'object' && typeof event.detail.id === 'string') { dialogId = event.detail.id userData = event.detail.userData || {} @@ -337,34 +340,34 @@ export class Chat extends React.Component { cancelDialogId = event.detail.cancelDialogId || '' eventName = 'beginDialog' // new event supported from bot v1.7.419 } - + if (dialogId) { botConnection.postActivity({ from: this.props.user, name: eventName, type: 'event', value: '', - channelData: {id: dialogId, userData, mode, cancelDialogId} + channelData: { id: dialogId, userData, mode, cancelDialogId } }).subscribe(function (id: any) { - konsole.log('"'+eventName+'" event sent', dialogId, userData, mode); + konsole.log('"' + eventName + '" event sent', dialogId, userData, mode); }); } }) - this.connectionStatusSubscription = botConnection.connectionStatus$.subscribe((connectionStatus: any) =>{ - if(this.props.speechOptions && this.props.speechOptions.speechRecognizer){ - let refGrammarId = botConnection.referenceGrammarId; - if(refGrammarId) - this.props.speechOptions.speechRecognizer.referenceGrammarId = refGrammarId; - } - this.store.dispatch({ type: 'Connection_Change', connectionStatus }) - - // FEEDYOU - if (this.props.onConversationStarted && connectionStatus === ConnectionStatus.Online && botConnection.conversationId) { - this.props.onConversationStarted(botConnection.conversationId) - } + this.connectionStatusSubscription = botConnection.connectionStatus$.subscribe((connectionStatus: any) => { + if (this.props.speechOptions && this.props.speechOptions.speechRecognizer) { + let refGrammarId = botConnection.referenceGrammarId; + if (refGrammarId) + this.props.speechOptions.speechRecognizer.referenceGrammarId = refGrammarId; + } + this.store.dispatch({ type: 'Connection_Change', connectionStatus }) + // FEEDYOU + if (this.props.onConversationStarted && connectionStatus === ConnectionStatus.Online && botConnection.conversationId) { + this.props.onConversationStarted(botConnection.conversationId) } + + } ); this.activitySubscription = botConnection.activity$.subscribe( @@ -437,28 +440,28 @@ export class Chat extends React.Component { // only render real stuff after we know our dimensions return ( - +
{ !!state.format.chatTitle && -
- { typeof state.format.chatTitle === 'string' ? state.format.chatTitle : state.format.strings.title } -
+
+ {typeof state.format.chatTitle === 'string' ? state.format.chatTitle : state.format.strings.title} +
} - + { this.props.resize === 'detect' && - + }
@@ -480,46 +483,46 @@ export const doCardAction = ( actionValue ) => { - const text = (typeof actionValue === 'string') ? actionValue as string : undefined; - const value = (typeof actionValue === 'object')? actionValue as object : undefined; - - switch (type) { - case "imBack": - if (typeof text === 'string') - sendMessage(text, from, locale); - break; - - case "postBack": - sendPostBack(botConnection, text, value, from, locale); - break; - - case "call": - case "openUrl": - case "playAudio": - case "playVideo": - case "showImage": - case "downloadFile": - window.open(text); - break; - case "signin": - let loginWindow = window.open(); - if (botConnection.getSessionId) { - botConnection.getSessionId().subscribe(sessionId => { - konsole.log("received sessionId: " + sessionId); - loginWindow.location.href = text + encodeURIComponent('&code_challenge=' + sessionId); - }, error => { - konsole.log("failed to get sessionId", error); - }); - } - else { - loginWindow.location.href = text; - } - break; + const text = (typeof actionValue === 'string') ? actionValue as string : undefined; + const value = (typeof actionValue === 'object') ? actionValue as object : undefined; + + switch (type) { + case "imBack": + if (typeof text === 'string') + sendMessage(text, from, locale); + break; - default: - konsole.log("unknown button type", type); + case "postBack": + sendPostBack(botConnection, text, value, from, locale); + break; + + case "call": + case "openUrl": + case "playAudio": + case "playVideo": + case "showImage": + case "downloadFile": + window.open(text); + break; + case "signin": + let loginWindow = window.open(); + if (botConnection.getSessionId) { + botConnection.getSessionId().subscribe(sessionId => { + konsole.log("received sessionId: " + sessionId); + loginWindow.location.href = text + encodeURIComponent('&code_challenge=' + sessionId); + }, error => { + konsole.log("failed to get sessionId", error); + }); + } + else { + loginWindow.location.href = text; + } + break; + + default: + konsole.log("unknown button type", type); } -} + } export const sendPostBack = (botConnection: IBotConnection, text: string, value: object, from: User, locale: string) => { botConnection.postActivity({ @@ -529,19 +532,19 @@ export const sendPostBack = (botConnection: IBotConnection, text: string, value: from, locale }) - .subscribe(id => { - konsole.log("success sending postBack", id) - }, error => { - konsole.log("failed to send postBack", error); - }); + .subscribe(id => { + konsole.log("success sending postBack", id) + }, error => { + konsole.log("failed to send postBack", error); + }); } -export const renderIfNonempty = (value: any, renderer: (value: any) => JSX.Element ) => { +export const renderIfNonempty = (value: any, renderer: (value: any) => JSX.Element) => { if (value !== undefined && value !== null && (typeof value !== 'string' || value.length > 0)) return renderer(value); } -export const classList = (...args:(string | boolean)[]) => { +export const classList = (...args: (string | boolean)[]) => { return args.filter(Boolean).join(' '); } @@ -551,11 +554,11 @@ const ResizeDetector = (props: { }) => // adapted to React from https://github.com/developit/simple-element-resize-detector