From 49db1e4f086f8351145f7ee49f5385ba41d5f31c Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 6 Jun 2020 01:42:11 +0300 Subject: [PATCH 1/6] summon wizard bot --- package-lock.json | 656 ++++++++++++------ package.json | 4 +- public/locales/en/translations.json | 3 +- public/locales/ro/translations.json | 3 +- src/components/App.js | 2 + src/features/chatbot/actionCreators.js | 9 + src/features/chatbot/actionTypes.js | 2 + src/features/chatbot/botType.js | 4 + .../chatbot/components/BotsManager.js | 35 + src/features/chatbot/components/Wizard.js | 21 + src/features/chatbot/reducer.js | 16 + .../server/components/ServerComponent.js | 7 +- .../server/components/ServerContainer.js | 7 +- .../server/components/ServerSummary.js | 14 +- src/redux/reducers/index.js | 2 + src/redux/reducers/initialState.js | 3 + 16 files changed, 570 insertions(+), 218 deletions(-) create mode 100644 src/features/chatbot/actionCreators.js create mode 100644 src/features/chatbot/actionTypes.js create mode 100644 src/features/chatbot/botType.js create mode 100644 src/features/chatbot/components/BotsManager.js create mode 100644 src/features/chatbot/components/Wizard.js create mode 100644 src/features/chatbot/reducer.js diff --git a/package-lock.json b/package-lock.json index f8c117a..1f0d56e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, "requires": { "@babel/highlight": "^7.10.1" } @@ -56,7 +55,6 @@ "version": "7.10.2", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, "requires": { "@babel/types": "^7.10.2", "jsesc": "^2.5.1", @@ -68,7 +66,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz", "integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==", - "dev": true, "requires": { "@babel/types": "^7.10.1" } @@ -154,7 +151,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.10.1", "@babel/template": "^7.10.1", @@ -165,7 +161,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, "requires": { "@babel/types": "^7.10.1" } @@ -192,7 +187,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, "requires": { "@babel/types": "^7.10.1" } @@ -275,7 +269,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, "requires": { "@babel/types": "^7.10.1" } @@ -283,8 +276,7 @@ "@babel/helper-validator-identifier": { "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" }, "@babel/helper-wrap-function": { "version": "7.10.1", @@ -313,7 +305,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.1", "chalk": "^2.0.0", @@ -323,8 +314,7 @@ "@babel/parser": { "version": "7.10.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true + "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.10.1", @@ -961,7 +951,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, "requires": { "@babel/code-frame": "^7.10.1", "@babel/parser": "^7.10.1", @@ -972,7 +961,6 @@ "version": "7.10.1", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, "requires": { "@babel/code-frame": "^7.10.1", "@babel/generator": "^7.10.1", @@ -989,7 +977,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -997,8 +984,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -1006,18 +992,45 @@ "version": "7.10.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.1", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, + "@blakeembrey/deque": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", + "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==" + }, "@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "requires": { + "@emotion/memoize": "0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, "@jest/types": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", @@ -1545,7 +1558,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -1579,20 +1591,17 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "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", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, "array-flatten": { "version": "1.1.1", @@ -1626,8 +1635,12 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asap": { "version": "2.0.6", @@ -1683,8 +1696,7 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "astral-regex": { "version": "1.0.0", @@ -1704,8 +1716,7 @@ "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, "async-limiter": { "version": "1.0.1", @@ -1716,8 +1727,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "axios": { "version": "0.19.2", @@ -1772,6 +1782,22 @@ "resolve": "^1.8.1" } }, + "babel-plugin-styled-components": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz", + "integrity": "sha512-MBMHGcIA22996n9hZRf/UJLVVgkEOITuR2SvjHLb5dSTUyR4ZRGn+ngITapes36FI3WLxZHfRhkA1ffHxihOrg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-module-imports": "^7.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", @@ -1917,7 +1943,6 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -1932,7 +1957,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -1941,7 +1965,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1950,7 +1973,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1959,7 +1981,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2300,7 +2321,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -2353,6 +2373,11 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -2375,7 +2400,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2440,7 +2464,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -2452,7 +2475,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -2561,7 +2583,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -2581,7 +2602,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" } @@ -2589,8 +2609,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-string": { "version": "1.5.3", @@ -2617,8 +2636,7 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "compressible": { "version": "2.0.18", @@ -2788,8 +2806,7 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-webpack-plugin": { "version": "6.0.2", @@ -2900,8 +2917,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=" }, "cosmiconfig": { "version": "5.2.1", @@ -2973,7 +2989,6 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -3001,6 +3016,11 @@ "randomfill": "^1.0.3" } }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" + }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -3067,6 +3087,23 @@ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", "dev": true }, + "css-to-react-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + } + } + }, "css-tree": { "version": "1.0.0-alpha.37", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", @@ -3316,8 +3353,7 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "deep-equal": { "version": "1.1.1", @@ -3362,7 +3398,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -3372,7 +3407,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -3381,7 +3415,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -3390,7 +3423,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -3878,8 +3910,7 @@ "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=" }, "eslint": { "version": "5.15.2", @@ -3974,6 +4005,14 @@ } } }, + "eslint-config-prettier": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz", + "integrity": "sha512-sZwhSTHVVz78+kYD3t5pCWSYEdVSBR0PXnwjDRsUs8ytIrK8PLXw+6FKp8r3Z7rx4ZszdetWlXYKOHoUrrwPlA==", + "requires": { + "get-stdin": "^6.0.0" + } + }, "eslint-import-resolver-node": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", @@ -4126,6 +4165,14 @@ } } }, + "eslint-plugin-prettier": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", + "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, "eslint-plugin-react": { "version": "7.12.4", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", @@ -4288,7 +4335,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -4303,7 +4349,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -4312,7 +4357,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4321,7 +4365,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -4396,7 +4439,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -4406,7 +4448,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -4428,7 +4469,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -4444,7 +4484,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -4453,7 +4492,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -4462,7 +4500,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -4471,7 +4508,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -4480,7 +4516,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -4495,6 +4530,11 @@ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", "dev": true }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, "fast-glob": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", @@ -4789,8 +4829,7 @@ "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -4845,8 +4884,7 @@ "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=" }, "forwarded": { "version": "0.1.2", @@ -4858,7 +4896,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -4995,6 +5032,11 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -5007,8 +5049,7 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "glob": { "version": "7.1.6", @@ -5077,8 +5118,7 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { "version": "11.0.1", @@ -5097,8 +5137,7 @@ "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "gud": { "version": "1.0.0", @@ -5133,8 +5172,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.1", @@ -5146,7 +5184,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -5157,7 +5194,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -5167,7 +5203,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" }, @@ -5176,7 +5211,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" } @@ -5187,7 +5221,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" } @@ -5769,8 +5802,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -5874,7 +5906,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -5883,7 +5914,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" } @@ -5915,8 +5945,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.2.0", @@ -5942,7 +5971,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -5951,7 +5979,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" } @@ -5968,7 +5995,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -5978,8 +6004,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -5992,14 +6017,12 @@ "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", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -6011,7 +6034,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -6061,7 +6083,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -6113,8 +6134,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-wsl": { "version": "1.1.0", @@ -6130,14 +6150,12 @@ "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", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isomorphic-fetch": { "version": "2.2.1", @@ -6183,8 +6201,7 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-parse-better-errors": { "version": "1.0.2", @@ -6322,8 +6339,7 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "lcid": { "version": "2.0.0", @@ -6560,14 +6576,12 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -6788,8 +6802,7 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { "version": "3.1.3", @@ -6859,7 +6872,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -6869,7 +6881,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -6935,7 +6946,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -6971,8 +6981,7 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "no-case": { "version": "2.3.2", @@ -7086,8 +7095,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { "version": "3.3.0", @@ -7179,7 +7187,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -7190,7 +7197,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -7199,7 +7205,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" } @@ -7238,7 +7243,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, "requires": { "isobject": "^3.0.0" } @@ -7281,7 +7285,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -7328,6 +7331,230 @@ "wrappy": "1" } }, + "onchange": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/onchange/-/onchange-5.2.0.tgz", + "integrity": "sha512-kBNMF4KU1m0GkZCANckQZs3N41esf950T/gv7JIjNS6qWS8R34+iCKk/wmVRPEdaYCA+yi2aK2vNXS0RaB/V2A==", + "requires": { + "@blakeembrey/deque": "^1.0.3", + "arrify": "^1.0.1", + "chokidar": "^2.0.0", + "cross-spawn": "^6.0.0", + "minimist": "^1.2.0", + "supports-color": "^5.5.0", + "tree-kill": "^1.2.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "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=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, "onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", @@ -7572,8 +7799,7 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-browserify": { "version": "0.0.1", @@ -7584,8 +7810,7 @@ "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { "version": "3.0.0", @@ -7596,8 +7821,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", @@ -7608,8 +7832,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.6", @@ -7781,8 +8004,7 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { "version": "7.0.32", @@ -8245,6 +8467,19 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", @@ -8290,8 +8525,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", @@ -8438,6 +8672,11 @@ "performance-now": "^2.1.0" } }, + "random-id": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/random-id/-/random-id-0.0.2.tgz", + "integrity": "sha1-KRt9dtOckUGWyksZ2DUJ5nzfFZA=" + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -8579,6 +8818,22 @@ "tiny-warning": "^1.0.0" } }, + "react-simple-chatbot": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/react-simple-chatbot/-/react-simple-chatbot-0.6.1.tgz", + "integrity": "sha512-q9y5GXwBvD+YvLgDVyDuZHYMkrcgIirm1FVV9RkR7XojPmbiX1lCzT6ib8U1M5zh42kTUBRnszXzkAGm9e0K8w==", + "requires": { + "eslint-config-prettier": "^4.1.0", + "eslint-plugin-prettier": "^3.0.1", + "flatted": "^2.0.0", + "onchange": "^5.2.0", + "prettier": "^1.16.4", + "prop-types": "^15.6.0", + "random-id": "0.0.2", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, "react-smooth": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.5.tgz", @@ -8873,7 +9128,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -8941,8 +9195,7 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "renderkid": { "version": "2.0.3", @@ -9005,14 +9258,12 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, "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=" }, "require-directory": { "version": "2.1.1", @@ -9097,8 +9348,7 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "restore-cursor": { "version": "2.0.0", @@ -9113,8 +9363,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "retry": { "version": "0.12.0", @@ -9192,14 +9441,12 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, "requires": { "ret": "~0.1.10" } @@ -9253,8 +9500,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "send": { "version": "0.17.1", @@ -9383,7 +9629,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -9395,7 +9640,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -9423,11 +9667,15 @@ "safe-buffer": "^5.0.1" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "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" } @@ -9435,8 +9683,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.7.2", @@ -9488,7 +9735,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -9504,7 +9750,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -9513,7 +9758,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -9522,7 +9766,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -9533,7 +9776,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -9544,7 +9786,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -9553,7 +9794,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -9562,7 +9802,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -9571,7 +9810,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -9584,7 +9822,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -9593,7 +9830,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" } @@ -9660,14 +9896,12 @@ "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-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -9697,8 +9931,7 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, "spdx-correct": { "version": "3.1.1", @@ -9797,7 +10030,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -9827,7 +10059,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -9837,7 +10068,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -10082,6 +10312,23 @@ } } }, + "styled-components": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.1.1.tgz", + "integrity": "sha512-1ps8ZAYu2Husx+Vz8D+MvXwEwvMwFv+hqqUwhNlDN5ybg6A+3xyW1ECrAgywhvXapNfXiz79jJyU0x22z0FFTg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^0.8.8", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + } + }, "stylehacks": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", @@ -10110,7 +10357,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -10411,14 +10657,12 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -10427,7 +10671,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" } @@ -10438,7 +10681,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -10476,6 +10718,11 @@ "punycode": "^2.1.0" } }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -10580,7 +10827,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -10634,7 +10880,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -10644,7 +10889,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -10655,7 +10899,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" } @@ -10665,22 +10908,19 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" } } }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "upper-case": { "version": "1.1.3", @@ -10700,8 +10940,7 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url": { "version": "0.11.0", @@ -10734,8 +10973,7 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util": { "version": "0.11.1", @@ -10757,8 +10995,7 @@ "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=" }, "util.promisify": { "version": "1.0.1", @@ -11848,7 +12085,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } diff --git a/package.json b/package.json index 40aa30d..b6a1e96 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,12 @@ "react-i18next": "^11.4.0", "react-redux": "6.0.1", "react-router-dom": "5.0.0", + "react-simple-chatbot": "^0.6.1", "recharts": "^1.8.5", "redux": "4.0.1", "redux-thunk": "2.3.0", - "reselect": "4.0.0" + "reselect": "4.0.0", + "styled-components": "^5.1.1" }, "devDependencies": { "@babel/core": "7.3.4", diff --git a/public/locales/en/translations.json b/public/locales/en/translations.json index 85457ce..30bdf0a 100644 --- a/public/locales/en/translations.json +++ b/public/locales/en/translations.json @@ -55,7 +55,8 @@ "Server": { "Title": "Server", "Subtitle": "Expand to see details", - "Thoughts": "This reverse proxy is the only open gate to a secret creation land. There any impulse or thought can fly free and can be materialized without limits.", + "Thoughts": "This reverse proxy is the only open gate to a secret creation land. There any impulse or thought can fly free and can be materialized without limits. If you don't believe it, ask the ", + "Wizard": "wizard", "ServerHostName": "Server host", "ApiHostName": "API host", "Domain": "Domain", diff --git a/public/locales/ro/translations.json b/public/locales/ro/translations.json index d22362b..ab5d05f 100644 --- a/public/locales/ro/translations.json +++ b/public/locales/ro/translations.json @@ -46,7 +46,8 @@ "Server": { "Title": "Server", "Subtitle": "Extindeţi pentru a vedea detalii", - "Thoughts": "Acest reverse proxy este singura poartă deschisă către un teren secret al creației. Acolo orice impuls sau gând poate zbura liber și poate fi materializat fără limite.", + "Thoughts": "Acest reverse proxy este singura poartă deschisă către un teren secret al creației. Acolo orice impuls sau gând poate zbura liber și poate fi materializat fără limite. Dacă nu crezi, întreabă-l pe ", + "Wizard": "vrăjitor", "ServerHostName": "Gazdă server", "ApiHostName": "Gazdă API", "Domain": "Domeniu", diff --git a/src/components/App.js b/src/components/App.js index e90dac0..74f73a1 100644 --- a/src/components/App.js +++ b/src/components/App.js @@ -11,6 +11,7 @@ import { connect } from "react-redux"; import { bindActionCreators } from "redux"; import { loadFrontendSession } from "../features/frontendSession/actionCreators"; import ToastNotifier from "../features/snackbar/components/ToastNotifier"; +import BotsManager from "../features/chatbot/components/BotsManager"; function App({ actions }) { useEffect(() => { @@ -25,6 +26,7 @@ function App({ actions }) { return ( }>
+
diff --git a/src/features/chatbot/actionCreators.js b/src/features/chatbot/actionCreators.js new file mode 100644 index 0000000..5226332 --- /dev/null +++ b/src/features/chatbot/actionCreators.js @@ -0,0 +1,9 @@ +import * as types from "./actionTypes"; + +export function summonWizard() { + return { type: types.SUMMON_WIZARD }; +} + +export function cancelBot() { + return { type: types.CANCEL_BOT }; +} diff --git a/src/features/chatbot/actionTypes.js b/src/features/chatbot/actionTypes.js new file mode 100644 index 0000000..8771238 --- /dev/null +++ b/src/features/chatbot/actionTypes.js @@ -0,0 +1,2 @@ +export const CANCEL_BOT = "CANCEL_BOT"; +export const SUMMON_WIZARD = "SUMMON_WIZARD"; diff --git a/src/features/chatbot/botType.js b/src/features/chatbot/botType.js new file mode 100644 index 0000000..3512fa9 --- /dev/null +++ b/src/features/chatbot/botType.js @@ -0,0 +1,4 @@ +export const botType = { + none: Symbol("none"), + wizard: Symbol("wizard") +}; diff --git a/src/features/chatbot/components/BotsManager.js b/src/features/chatbot/components/BotsManager.js new file mode 100644 index 0000000..bcbca22 --- /dev/null +++ b/src/features/chatbot/components/BotsManager.js @@ -0,0 +1,35 @@ +import React, { useEffect, useState } from "react"; +import PropTypes from "prop-types"; +import { connect } from "react-redux"; +import { botType } from "../botType"; +import Wizard from "./Wizard"; + +const BotsManager = ({ bot }) => { + const [type, setType] = useState(bot.type); + + useEffect(() => { + if (bot.type) setType(bot.type); + }, [bot.type]); + + return ( +
+ {type === botType.wizard && } +
+ ); +}; + +BotsManager.propTypes = { + bot: PropTypes.object +}; + +function mapStateToProps(state) { + return { + bot: state.bot + }; +} + +function mapDispatchToProps() { + return {}; +} + +export default connect(mapStateToProps, mapDispatchToProps)(BotsManager); diff --git a/src/features/chatbot/components/Wizard.js b/src/features/chatbot/components/Wizard.js new file mode 100644 index 0000000..0e9b5fe --- /dev/null +++ b/src/features/chatbot/components/Wizard.js @@ -0,0 +1,21 @@ +import React from "react"; +import ChatBot from "react-simple-chatbot"; + +const Wizard = () => { + const steps = [ + { + id: "0", + message: "Welcome to react chatbot!", + trigger: "1" + }, + { + id: "1", + message: "Bye!", + end: true + } + ]; + + return ; +}; + +export default Wizard; diff --git a/src/features/chatbot/reducer.js b/src/features/chatbot/reducer.js new file mode 100644 index 0000000..7037951 --- /dev/null +++ b/src/features/chatbot/reducer.js @@ -0,0 +1,16 @@ +import * as types from "./actionTypes"; +import initialState from "../../redux/reducers/initialState"; +import { botType } from "./botType"; + +export default function chatbotReducer(state = initialState.snackbar, action) { + switch (action.type) { + case types.SUMMON_WIZARD: + return { ...state, type: botType.wizard }; + + case types.CANCEL_BOT: + return { ...state, type: botType.none }; + + default: + return state; + } +} diff --git a/src/features/server/components/ServerComponent.js b/src/features/server/components/ServerComponent.js index b12c1ed..31c1738 100644 --- a/src/features/server/components/ServerComponent.js +++ b/src/features/server/components/ServerComponent.js @@ -31,7 +31,8 @@ const ServerComponent = ({ serverHost, openAbout, handleOpenInNewTab, - showMessageForAuthor + showMessageForAuthor, + summonWizard }) => { const classes = useStyles(); const { t } = useTranslation(); @@ -92,6 +93,7 @@ const ServerComponent = ({ data={data} serverHost={serverHost} handleOpenInNewTab={handleOpenInNewTab} + summonWizard={summonWizard} /> )} @@ -133,7 +135,8 @@ ServerComponent.propTypes = { serverHost: PropTypes.string, openAbout: PropTypes.func.isRequired, handleOpenInNewTab: PropTypes.func.isRequired, - showMessageForAuthor: PropTypes.func.isRequired + showMessageForAuthor: PropTypes.func.isRequired, + summonWizard: PropTypes.func.isRequired }; export default ServerComponent; diff --git a/src/features/server/components/ServerContainer.js b/src/features/server/components/ServerContainer.js index 4ca94b3..3eddfd2 100644 --- a/src/features/server/components/ServerContainer.js +++ b/src/features/server/components/ServerContainer.js @@ -6,6 +6,7 @@ import { loadServerData, loadSystemVersion } from "../actionCreators"; import ServerComponent from "./ServerComponent"; import { withRouter } from "react-router-dom"; import MessageForAuthorContainer from "../../messageForAuthor/components/MessageForAuthorContainer"; +import { summonWizard } from "../../chatbot/actionCreators"; const ServerContainer = ({ actions, data, serverHost, history }) => { const [openMessageForAuthor, setOpenMessageForAuthor] = useState(false); @@ -41,6 +42,7 @@ const ServerContainer = ({ actions, data, serverHost, history }) => { openAbout={openAbout} handleOpenInNewTab={handleOpenInNewTab} showMessageForAuthor={showMessageForAuthor} + summonWizard={actions.summonWizard} /> { +const ServerSummary = ({ + data, + serverHost, + handleOpenInNewTab, + summonWizard +}) => { const classes = useStyles(); const { t } = useTranslation(); @@ -42,6 +47,10 @@ const ServerSummary = ({ data, serverHost, handleOpenInNewTab }) => { {t("Server.Thoughts")} + + {t("Server.Wizard")} + + . @@ -51,7 +60,8 @@ const ServerSummary = ({ data, serverHost, handleOpenInNewTab }) => { ServerSummary.propTypes = { data: PropTypes.object.isRequired, serverHost: PropTypes.string, - handleOpenInNewTab: PropTypes.func.isRequired + handleOpenInNewTab: PropTypes.func.isRequired, + summonWizard: PropTypes.func.isRequired }; export default ServerSummary; diff --git a/src/redux/reducers/index.js b/src/redux/reducers/index.js index 5447e31..fa58720 100644 --- a/src/redux/reducers/index.js +++ b/src/redux/reducers/index.js @@ -9,6 +9,7 @@ import releaseNotesReducer from "../../features/releaseNotes/reducer"; import frontendSessionReducer from "../../features/frontendSession/reducer"; import snackbarReducer from "../../features/snackbar/reducer"; import chartsReducer from "../../features/charts/chartsReducer"; +import chatbotReducer from "../../features/chatbot/reducer"; const rootReducer = combineReducers({ frontendSession: frontendSessionReducer, @@ -18,6 +19,7 @@ const rootReducer = combineReducers({ releaseNotes: releaseNotesReducer, charts: chartsReducer, snackbar: snackbarReducer, + bot: chatbotReducer, ajaxCallsInProgress: ajaxStatusReducer }); diff --git a/src/redux/reducers/initialState.js b/src/redux/reducers/initialState.js index 5909963..026f328 100644 --- a/src/redux/reducers/initialState.js +++ b/src/redux/reducers/initialState.js @@ -18,5 +18,8 @@ export default { message: null, type: null }, + bot: { + type: null + }, ajaxCallsInProgress: 0 }; From 91f0fb06512a02267cb81e0e41738ff9498070e5 Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 6 Jun 2020 02:07:04 +0300 Subject: [PATCH 2/6] botPosition --- private/Notes.txt | 3 +++ src/features/chatbot/components/BotsManager.js | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/private/Notes.txt b/private/Notes.txt index 9f08956..8264173 100644 --- a/private/Notes.txt +++ b/private/Notes.txt @@ -42,3 +42,6 @@ docker run --restart=always -p 5005:80 -d cloud.canister.io:5000/tstanciu/revers Rename container docker rename reverse-proxy-frontend ############################################################################################## + +import { makeStyles, useTheme } from "@material-ui/core/styles"; + const theme = useTheme(); \ No newline at end of file diff --git a/src/features/chatbot/components/BotsManager.js b/src/features/chatbot/components/BotsManager.js index bcbca22..b0d0592 100644 --- a/src/features/chatbot/components/BotsManager.js +++ b/src/features/chatbot/components/BotsManager.js @@ -3,17 +3,31 @@ import PropTypes from "prop-types"; import { connect } from "react-redux"; import { botType } from "../botType"; import Wizard from "./Wizard"; +import { makeStyles } from "@material-ui/core/styles"; + +const useStyles = makeStyles(theme => ({ + bot: { + position: "fixed", + bottom: theme.spacing(2), + right: theme.spacing(2), + zIndex: 1 + }, + botPosition: { + position: "absolute" + } +})); const BotsManager = ({ bot }) => { const [type, setType] = useState(bot.type); + const classes = useStyles(); useEffect(() => { if (bot.type) setType(bot.type); }, [bot.type]); return ( -
- {type === botType.wizard && } +
+
{type === botType.wizard && }
); }; From a05d4a32afb8d35cb0f09b978541aa6e49e967ee Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 6 Jun 2020 02:47:03 +0300 Subject: [PATCH 3/6] Wizard bot update --- private/Notes.txt | 4 +- public/icons/wizard.png | Bin 0 -> 37600 bytes src/features/chatbot/components/Wizard.js | 51 +++++++++++++++++++--- 3 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 public/icons/wizard.png diff --git a/private/Notes.txt b/private/Notes.txt index 8264173..d944832 100644 --- a/private/Notes.txt +++ b/private/Notes.txt @@ -44,4 +44,6 @@ docker rename reverse-proxy-frontend ############################################################################################## import { makeStyles, useTheme } from "@material-ui/core/styles"; - const theme = useTheme(); \ No newline at end of file + const theme = useTheme(); + + https://www.flaticon.com/free-icon/wizard_2534554?term=wizard&page=1&position=64 \ No newline at end of file diff --git a/public/icons/wizard.png b/public/icons/wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d44c41e87eac764df62a261a1b79d95836e40c GIT binary patch literal 37600 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 UUOk-#l0v}aXzy%y|4?w!f0fGD+W-In literal 0 HcmV?d00001 diff --git a/src/features/chatbot/components/Wizard.js b/src/features/chatbot/components/Wizard.js index 0e9b5fe..c27624d 100644 --- a/src/features/chatbot/components/Wizard.js +++ b/src/features/chatbot/components/Wizard.js @@ -1,21 +1,60 @@ import React from "react"; import ChatBot from "react-simple-chatbot"; +import { ThemeProvider } from "styled-components"; +import { useTheme } from "@material-ui/core/styles"; const Wizard = () => { + const theme = useTheme(); + + const botTheme = { + background: "#f5f8fb", + fontFamily: "monospace", + headerBgColor: theme.palette.primary.main, + headerFontColor: "#fff", + headerFontSize: "16px", + botBubbleColor: theme.palette.primary.main, + botFontColor: "#fff", + userBubbleColor: "#fff", + userFontColor: "#4a4a4a" + }; + const steps = [ { - id: "0", - message: "Welcome to react chatbot!", - trigger: "1" + id: "1", + message: "I'm the wizard.", + trigger: "2" }, { - id: "1", - message: "Bye!", + id: "2", + message: "I know everything about nothing. What do you want to ask me?", + trigger: "3" + }, + { + id: "3", + message: "Please hurry. I don't have time to waste.", + trigger: "4" + }, + { + id: "4", + user: true, + trigger: "5" + }, + { + id: "5", + message: "Hi {previousValue}, nice to meet you!", end: true } ]; - return ; + return ( + + + + ); }; export default Wizard; From 38e44a990c38266c2b4ef2c4ead0a3eb4347c5da Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 6 Jun 2020 03:16:14 +0300 Subject: [PATCH 4/6] wizard update --- src/features/chatbot/actionCreators.js | 4 +-- src/features/chatbot/actionTypes.js | 2 +- .../chatbot/components/BotsManager.js | 17 ++++++--- src/features/chatbot/components/Wizard.js | 35 +++++++++++++++++-- src/features/chatbot/reducer.js | 2 +- 5 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/features/chatbot/actionCreators.js b/src/features/chatbot/actionCreators.js index 5226332..4384283 100644 --- a/src/features/chatbot/actionCreators.js +++ b/src/features/chatbot/actionCreators.js @@ -4,6 +4,6 @@ export function summonWizard() { return { type: types.SUMMON_WIZARD }; } -export function cancelBot() { - return { type: types.CANCEL_BOT }; +export function dismissBot() { + return { type: types.DISMISS_BOT }; } diff --git a/src/features/chatbot/actionTypes.js b/src/features/chatbot/actionTypes.js index 8771238..4ba513d 100644 --- a/src/features/chatbot/actionTypes.js +++ b/src/features/chatbot/actionTypes.js @@ -1,2 +1,2 @@ -export const CANCEL_BOT = "CANCEL_BOT"; +export const DISMISS_BOT = "DISMISS_BOT"; export const SUMMON_WIZARD = "SUMMON_WIZARD"; diff --git a/src/features/chatbot/components/BotsManager.js b/src/features/chatbot/components/BotsManager.js index b0d0592..64e9ef9 100644 --- a/src/features/chatbot/components/BotsManager.js +++ b/src/features/chatbot/components/BotsManager.js @@ -1,9 +1,11 @@ import React, { useEffect, useState } from "react"; import PropTypes from "prop-types"; import { connect } from "react-redux"; +import { bindActionCreators } from "redux"; import { botType } from "../botType"; import Wizard from "./Wizard"; import { makeStyles } from "@material-ui/core/styles"; +import { dismissBot } from "../actionCreators"; const useStyles = makeStyles(theme => ({ bot: { @@ -17,7 +19,7 @@ const useStyles = makeStyles(theme => ({ } })); -const BotsManager = ({ bot }) => { +const BotsManager = ({ bot, actions }) => { const [type, setType] = useState(bot.type); const classes = useStyles(); @@ -27,13 +29,16 @@ const BotsManager = ({ bot }) => { return (
-
{type === botType.wizard && }
+
+ {type === botType.wizard && } +
); }; BotsManager.propTypes = { - bot: PropTypes.object + bot: PropTypes.object.isRequired, + actions: PropTypes.object.isRequired }; function mapStateToProps(state) { @@ -42,8 +47,10 @@ function mapStateToProps(state) { }; } -function mapDispatchToProps() { - return {}; +function mapDispatchToProps(dispatch) { + return { + actions: bindActionCreators({ dismissBot }, dispatch) + }; } export default connect(mapStateToProps, mapDispatchToProps)(BotsManager); diff --git a/src/features/chatbot/components/Wizard.js b/src/features/chatbot/components/Wizard.js index c27624d..333d59d 100644 --- a/src/features/chatbot/components/Wizard.js +++ b/src/features/chatbot/components/Wizard.js @@ -1,9 +1,10 @@ import React from "react"; +import PropTypes from "prop-types"; import ChatBot from "react-simple-chatbot"; import { ThemeProvider } from "styled-components"; import { useTheme } from "@material-ui/core/styles"; -const Wizard = () => { +const Wizard = ({ dismissBot }) => { const theme = useTheme(); const botTheme = { @@ -41,14 +42,40 @@ const Wizard = () => { }, { id: "5", - message: "Hi {previousValue}, nice to meet you!", + message: "I don't have time for that. Ask me something serious.", + trigger: "6" + }, + { + id: "6", + user: true, + trigger: "7" + }, + { + id: "7", + message: + "I don't think I understand '{previousValue}'. You mean, like, flowers?", + trigger: "8" + }, + { + id: "8", + user: true, + trigger: "9" + }, + { + id: "9", + message: "I think you're wasting my time. Farewell!", end: true } ]; + const handleEnd = () => { + setTimeout(dismissBot, 3000); + }; + return ( { ); }; +Wizard.propTypes = { + dismissBot: PropTypes.func.isRequired +}; + export default Wizard; diff --git a/src/features/chatbot/reducer.js b/src/features/chatbot/reducer.js index 7037951..2197b56 100644 --- a/src/features/chatbot/reducer.js +++ b/src/features/chatbot/reducer.js @@ -7,7 +7,7 @@ export default function chatbotReducer(state = initialState.snackbar, action) { case types.SUMMON_WIZARD: return { ...state, type: botType.wizard }; - case types.CANCEL_BOT: + case types.DISMISS_BOT: return { ...state, type: botType.none }; default: From 9885743924b185425f422750d053cd7556958928 Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 6 Jun 2020 03:35:39 +0300 Subject: [PATCH 5/6] wizard language translation --- public/locales/en/translations.json | 10 ++++++++++ public/locales/ro/translations.json | 10 ++++++++++ src/features/chatbot/components/Wizard.js | 15 ++++++++------- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/public/locales/en/translations.json b/public/locales/en/translations.json index 30bdf0a..0ca8a92 100644 --- a/public/locales/en/translations.json +++ b/public/locales/en/translations.json @@ -82,5 +82,15 @@ }, "Notifications": { "MessageSaved": "Message saved" + }, + "Chatbot": { + "Wizard": { + "Message1": "I'm the wizard.", + "Message2": "I know everything about nothing. What do you want to ask me?", + "Message3": "Please hurry. I don't have time to waste.", + "Message5": "I don't have time for that. Ask me something serious.", + "Message7": "I don't think I understand '{previousValue}'. You mean, like, flowers?", + "Message9": "I think you're wasting my time. Farewell!" + } } } diff --git a/public/locales/ro/translations.json b/public/locales/ro/translations.json index ab5d05f..08dd3f9 100644 --- a/public/locales/ro/translations.json +++ b/public/locales/ro/translations.json @@ -73,5 +73,15 @@ }, "Notifications": { "MessageSaved": "Mesaj salvat" + }, + "Chatbot": { + "Wizard": { + "Message1": "Eu sunt vrăjitorul.", + "Message2": "Știu totul despre nimic. Ce vrei sa ma intrebi?", + "Message3": "Te rog grabeste-te. Nu am timp de pierdut.", + "Message5": "Nu am timp pentru asta. Întreabă-mă ceva serios.", + "Message7": "Nu cred că am înțeles '{previousValue}'. Vrei să spui, cum ar fi, flori?", + "Message9": "Cred că îmi irosesti timpul. Ramas bun!" + } } } diff --git a/src/features/chatbot/components/Wizard.js b/src/features/chatbot/components/Wizard.js index 333d59d..7ec2d0b 100644 --- a/src/features/chatbot/components/Wizard.js +++ b/src/features/chatbot/components/Wizard.js @@ -3,9 +3,11 @@ import PropTypes from "prop-types"; import ChatBot from "react-simple-chatbot"; import { ThemeProvider } from "styled-components"; import { useTheme } from "@material-ui/core/styles"; +import { useTranslation } from "react-i18next"; const Wizard = ({ dismissBot }) => { const theme = useTheme(); + const { t } = useTranslation(); const botTheme = { background: "#f5f8fb", @@ -22,17 +24,17 @@ const Wizard = ({ dismissBot }) => { const steps = [ { id: "1", - message: "I'm the wizard.", + message: t("Chatbot.Wizard.Message1"), trigger: "2" }, { id: "2", - message: "I know everything about nothing. What do you want to ask me?", + message: t("Chatbot.Wizard.Message2"), trigger: "3" }, { id: "3", - message: "Please hurry. I don't have time to waste.", + message: t("Chatbot.Wizard.Message3"), trigger: "4" }, { @@ -42,7 +44,7 @@ const Wizard = ({ dismissBot }) => { }, { id: "5", - message: "I don't have time for that. Ask me something serious.", + message: t("Chatbot.Wizard.Message5"), trigger: "6" }, { @@ -52,8 +54,7 @@ const Wizard = ({ dismissBot }) => { }, { id: "7", - message: - "I don't think I understand '{previousValue}'. You mean, like, flowers?", + message: t("Chatbot.Wizard.Message7"), trigger: "8" }, { @@ -63,7 +64,7 @@ const Wizard = ({ dismissBot }) => { }, { id: "9", - message: "I think you're wasting my time. Farewell!", + message: t("Chatbot.Wizard.Message9"), end: true } ]; From 361ab952f2d85c22ab97913d5fcf33def2e93f9f Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 6 Jun 2020 03:36:18 +0300 Subject: [PATCH 6/6] notes --- private/Notes.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/private/Notes.txt b/private/Notes.txt index d944832..6208600 100644 --- a/private/Notes.txt +++ b/private/Notes.txt @@ -46,4 +46,6 @@ docker rename reverse-proxy-frontend import { makeStyles, useTheme } from "@material-ui/core/styles"; const theme = useTheme(); - https://www.flaticon.com/free-icon/wizard_2534554?term=wizard&page=1&position=64 \ No newline at end of file + https://www.flaticon.com/free-icon/wizard_2534554?term=wizard&page=1&position=64 + + https://lucasbassetti.com.br/react-simple-chatbot/#/docs/previous-value \ No newline at end of file