diff --git a/README.md b/README.md index a05f2c858387..74c33780e441 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ Deriv App ============= -This repository contains the static HTML, Javascript, CSS, and images content of the [DTrader](http://deriv.app) website. +This repository contains the static HTML, Javascript, CSS, and images content of the [Deriv](http://deriv.app) website. ## Installation -In order to work on your own version of the DTrader Javascript and CSS, please **fork this project**. +In order to work on your own version of the Deriv Javascript and CSS, please **fork this project**. You will also need to install the following on your development machine: diff --git a/package-lock.json b/package-lock.json index ca1fd3bf09eb..9d09baae751f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,6 +88,16 @@ } } }, + "@babel/helper-builder-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0", + "esutils": "^2.0.0" + } + }, "@babel/helper-function-name": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", @@ -108,6 +118,12 @@ "@babel/types": "^7.0.0" } }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, "@babel/helper-split-export-declaration": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz", @@ -176,6 +192,68 @@ "integrity": "sha512-x5HFsW+E/nQalGMw7hu+fvPqnBeBaIr0lWJ2SG0PPL2j+Pm9lYvCrsZJGIgauPIENx0v10INIyFjmSNUD/gSqQ==", "dev": true }, + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", + "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", + "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" + } + }, "@babel/runtime": { "version": "7.4.3", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", @@ -781,6 +859,12 @@ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, "add-px-to-style": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-px-to-style/-/add-px-to-style-1.0.0.tgz", @@ -975,6 +1059,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" }, @@ -982,7 +1067,8 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true } } }, @@ -3054,15 +3140,6 @@ "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", "dev": true }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "requires": { - "chalk": "^1.1.3" - } - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -3171,19 +3248,50 @@ } }, "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", "q": "^1.1.2" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -3680,13 +3788,24 @@ "dev": true }, "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", "dev": true, "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + } } }, "cssom": { @@ -6283,9 +6402,9 @@ } }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -8373,33 +8492,27 @@ "dev": true }, "load-grunt-config": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/load-grunt-config/-/load-grunt-config-1.0.1.tgz", - "integrity": "sha512-hU4bbNnOit0cs34MPQSbMg+aO46iY+xLtBMEMbzrIsHxwQmKWoV7cxSGADXFVD9KytBNCNAKPHUYCWdxwMfNxg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/load-grunt-config/-/load-grunt-config-1.0.2.tgz", + "integrity": "sha512-GacK0VY+LQQGHGnOkWsLSO0XwVM7a2TWVa3qU1C3susf3Zu0sa62YwZPz81pFZRRbaWBEuiwOleAD/41Wh6DEg==", "dev": true, "requires": { "cson": "~4.0.0", - "glob": "~7.1.1", + "glob": "~7.1.3", "jit-grunt": "~0.10.0", - "js-yaml": "~3.7.0", + "js-yaml": "~3.12.0", "load-grunt-tasks": "~3.5.2", "lodash": "~4.17.11" }, "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", - "esprima": "^2.6.0" + "esprima": "^4.0.0" } } } @@ -11220,79 +11333,251 @@ } }, "react-svg-core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-svg-core/-/react-svg-core-2.1.0.tgz", - "integrity": "sha512-gv6A1JDNqs5OWy22Nx7CskieTOcue7YIGM8QiMS5c7PsRyyWbJaRbpHbO/j0qDE49Y6BDUPdkjzU1/py/SCsIQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-svg-core/-/react-svg-core-3.0.1.tgz", + "integrity": "sha512-4V1cXprbZePERYfQY6nkIso+rUaDp5oeMKI2X87bWHTekoMzom8YUKAoXC+TJ67TG4lPwL7N+UXc4IWGu9N1Dg==", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-plugin-react-svg": "^2.1.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0", - "babel-preset-react": "^6.24.1", + "@babel/core": "^7.4.4", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@babel/preset-react": "^7.0.0", + "babel-plugin-react-svg": "^3.0.1", + "lodash.clonedeep": "^4.5.0", "lodash.isplainobject": "^4.0.6", - "svgo": "^0.7.2" + "svgo": "^1.2.2" }, "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "@babel/core": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", + "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helpers": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.11", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helpers": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", + "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "dev": true, + "requires": { + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/parser": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", "dev": true }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", + "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-react-svg": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-svg/-/babel-plugin-react-svg-3.0.1.tgz", + "integrity": "sha512-BHJoNHMk03GunN2C9Z7zivhtY39h93yRagOOObGulSlTVUsUL40iAa4GlpGFkclGqGBkgtW06VUtENvfwCUGNA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "debug": { + "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" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "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 + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" } }, "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "dev": true, "requires": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "^1.1.0", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" - }, - "dependencies": { - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - } - } + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" } + }, + "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 } } }, "react-svg-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-svg-loader/-/react-svg-loader-2.1.0.tgz", - "integrity": "sha512-ojF2pJtqpyvxVejLZCFVBYno/8BPQ5mT6e0LPsR7RTk5gvap4wCYaGR7gW0iYObmWsZAJa/ljrG7ghkZ/2cX8Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-svg-loader/-/react-svg-loader-3.0.1.tgz", + "integrity": "sha512-43VG2S+aKwu7MIagxhzHyN9nPTJBatHL7RfIxyqQ2/voKXi0xkIOxvyfIt04G2HcVlDdxeq6CxyR1sZx+iL3Cw==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "react-svg-core": "^2.1.0" + "loader-utils": "^1.2.3", + "react-svg-core": "^3.0.1" } }, "react-test-renderer": { @@ -12155,9 +12440,9 @@ } }, "smartcharts-beta": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/smartcharts-beta/-/smartcharts-beta-0.4.26.tgz", - "integrity": "sha512-3EQGm3uStEMzZOeAMfbLV9qM33KX8FUw6LOqC4egI4FdudsoYbLCqSLsppzG5y3u0fUVoxFu2Dpj1Eq5YKbkHA==", + "version": "0.4.27", + "resolved": "https://registry.npmjs.org/smartcharts-beta/-/smartcharts-beta-0.4.27.tgz", + "integrity": "sha512-1SEwqz1NgUi7Mi8V66JbZRHXno3spET6JJnFcm/s5HqmK3g++QIJeHaleyDdfItbNU+mXCc1MtQwI11MV7DemQ==", "requires": { "event-emitter-es6": "^1.1.5", "lodash.debounce": "^4.0.8", @@ -13559,13 +13844,13 @@ "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, "requires": { "block-stream": "*", - "fstream": "^1.0.2", + "fstream": "^1.0.12", "inherits": "2" } }, @@ -14598,12 +14883,13 @@ } }, "webpack-bundle-analyzer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.2.tgz", - "integrity": "sha512-cZG4wSQtKrSpk5RJ33dxiaAyo8bP0V+JvycAyIDFEiDIhw4LHhhVKhn40YT1w6TR9E4scHA00LnIoBtTA13Mow==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", + "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", "dev": true, "requires": { - "acorn": "^5.7.3", + "acorn": "^6.0.7", + "acorn-walk": "^6.1.1", "bfj": "^6.1.1", "chalk": "^2.4.1", "commander": "^2.18.0", @@ -14617,12 +14903,6 @@ "ws": "^6.0.0" }, "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -15142,12 +15422,6 @@ } } }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", diff --git a/package.json b/package.json index 136eb753492e..af5545fb2e10 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "deriv-app", "version": "3.8.0", - "description": "DTrader content", + "description": "Deriv content", "scripts": { "test": "grunt test", "livereload": "sudo -p 'enter password for sudo:' grunt livereload", @@ -15,7 +15,7 @@ "keywords": [ "deriv" ], - "author": "DTrader", + "author": "Deriv", "license": "Apache License 2.0", "bugs": { "url": "https://github.com/binary-com/deriv-app/issues" @@ -83,7 +83,7 @@ "grunt-webpack": "3.1.3", "jsdom": "9.12.0", "jsdom-global": "2.1.1", - "load-grunt-config": "1.0.1", + "load-grunt-config": "1.0.2", "load-grunt-tasks": "3.5.2", "mocha": "5.2.0", "mock-local-storage": "1.1.7", @@ -91,7 +91,7 @@ "node-sass": "4.11.0", "postcss-scss": "0.4.1", "react-render-html": "0.6.0", - "react-svg-loader": "^2.1.0", + "react-svg-loader": "3.0.1", "sitemap": "1.13.0", "stylelint": "10.0.0", "stylelint-formatter-pretty": "1.0.3", @@ -101,7 +101,7 @@ "time-grunt": "1.4.0", "uglifyjs-webpack-plugin": "1.3.0", "webpack": "4.17.2", - "webpack-bundle-analyzer": "3.0.2", + "webpack-bundle-analyzer": "3.3.2", "webpack-dev-server": "3.1.14", "webpack-manifest-plugin": "2.0.4", "webpack-merge": "4.1.4", @@ -126,7 +126,7 @@ "react-router-dom": "5.0.0", "react-transition-group": "2.4.0", "sinon": "7.2.2", - "smartcharts-beta": "0.4.26", + "smartcharts-beta": "0.4.27", "tt-react-custom-scrollbars": "4.2.1-tt2", "url-polyfill": "1.0.9", "web-push-notifications": "3.2.15" diff --git a/scripts/config/pages.js b/scripts/config/pages.js index e71fa1150b65..3081c583de67 100644 --- a/scripts/config/pages.js +++ b/scripts/config/pages.js @@ -3,5 +3,5 @@ module.exports = [ // ==================== Section: "app" ==================== // According to its section path ('app') would be saved to: /{lang}/index.html - ['index', 'app/app', null, 'Trusted by traders since 2000', 'NOT-en', 'app'], + ['index', 'app/app', null, 'Deriv App', 'NOT-en', 'app'], ]; diff --git a/scripts/render.js b/scripts/render.js index 7bd629599b8c..c3dce31412a0 100755 --- a/scripts/render.js +++ b/scripts/render.js @@ -204,7 +204,7 @@ const createContextBuilder = async (sections) => { ], css_files : css_files_list[section], languages : config.languages, - broker_name: 'DTrader', + broker_name: 'Deriv', static_hash: static_hash[section], }); @@ -240,7 +240,7 @@ async function compile(page) { const tasks = languages.map(async lang => { const model = { - website_name : 'DTrader', + website_name : 'Deriv', title : page.title, layout : page.layout, language : lang.toUpperCase(), diff --git a/src/javascript/_common/lib/push_notification.js b/src/javascript/_common/lib/push_notification.js index e06ed976a6f4..ff2234ab12dc 100644 --- a/src/javascript/_common/lib/push_notification.js +++ b/src/javascript/_common/lib/push_notification.js @@ -17,7 +17,7 @@ const BinaryPushwoosh = (() => { logLevel : 'error', // or info or debug applicationCode : 'D04E6-FA474', safariWebsitePushID : 'web.com.binary', - defaultNotificationTitle: 'DTrader', + defaultNotificationTitle: 'Deriv', defaultNotificationImage: urlForCurrentDomain('https://style.binary.com/images/logo/logomark.png'), }]); initialised = true; diff --git a/src/javascript/app/App/Components/Animations/fade-wrapper.jsx b/src/javascript/app/App/Components/Animations/fade-wrapper.jsx new file mode 100644 index 000000000000..e5fa852ec159 --- /dev/null +++ b/src/javascript/app/App/Components/Animations/fade-wrapper.jsx @@ -0,0 +1,38 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import posed, +{ PoseGroup } from 'react-pose'; + +const FadeDiv = posed.div({ + enter: { + opacity : 1, + transition: { duration: 300 }, + }, + exit: { + opacity : 0, + transition: { duration: 300 }, + }, +}); + +const FadeWrapper = ({ + children, + className, + keyname, + is_visible, +}) => ( + + {is_visible && + + {children} + + } + +); + +FadeWrapper.propTypes = { + children : PropTypes.node, + is_visible: PropTypes.bool, + keyname : PropTypes.string, +}; + +export { FadeWrapper }; diff --git a/src/javascript/app/App/Components/Animations/index.js b/src/javascript/app/App/Components/Animations/index.js new file mode 100644 index 000000000000..cbfa65f94278 --- /dev/null +++ b/src/javascript/app/App/Components/Animations/index.js @@ -0,0 +1 @@ +export * from './fade-wrapper.jsx'; diff --git a/src/javascript/app/App/Components/Elements/ContractDrawer/contract-drawer.jsx b/src/javascript/app/App/Components/Elements/ContractDrawer/contract-drawer.jsx index 05dc6dbfef97..5ec870f27479 100644 --- a/src/javascript/app/App/Components/Elements/ContractDrawer/contract-drawer.jsx +++ b/src/javascript/app/App/Components/Elements/ContractDrawer/contract-drawer.jsx @@ -2,34 +2,64 @@ import classNames from 'classnames'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { withRouter } from 'react-router'; -import Localize from 'App/Components/Elements/localize.jsx'; import { Icon, IconBack } from 'Assets/Common'; -import routes from 'Constants/routes'; +import Localize from 'App/Components/Elements/localize.jsx'; +import { UnderlyingIcon } from 'App/Components/Elements/underlying-icon.jsx'; +import ContractAudit from 'App/Components/Elements/PositionsDrawer/result-details.jsx'; +import ContractTypeCell from 'App/Components/Elements/PositionsDrawer/contract-type-cell.jsx'; import ProfitLossCardContent from 'Modules/Reports/Components/profit-loss-card-content.jsx'; -import MarketSymbolIconRow from 'Modules/Reports/Components/market-symbol-icon-row.jsx'; import ContractCardBody from './contract-card-body.jsx'; import ContractCardFooter from './contract-card-footer.jsx'; import ContractCardHeader from './contract-card-header.jsx'; import ContractCard from './contract-card.jsx'; -import ContractAudit from '../ContractAudit/contract-audit.jsx'; +import { + getDurationPeriod, + getDurationTime, + getDurationUnitText } from '../../../../Stores/Modules/Portfolio/Helpers/details'; +import { + getEndTime, + isUserSold } from '../../../../Stores/Modules/Contract/Helpers/logic'; import Money from '../money.jsx'; class ContractDrawer extends Component { + state = { + is_shade_on: false, + } + + handleShade = (shade) => { + this.setState({ is_shade_on: shade }); + } + getBodyContent () { const { buy_price, currency, + exit_tick, + is_sold, payout, profit, } = this.props.contract_info; + const { contract_info } = this.props; + const exit_spot = isUserSold(contract_info) ? '-' : exit_tick; return ( - + - +
+
+ + + {contract_info.display_name} + +
+
+ +
+
- +
); } render() { + if (!this.props.contract_info) return null; const body_content = this.getBodyContent(); return (
this.props.history.push(routes.reports)} + onClick={() => this.props.history.goBack()} >

diff --git a/src/javascript/app/App/Components/Elements/Errors/error-boundary.jsx b/src/javascript/app/App/Components/Elements/Errors/error-boundary.jsx index c43369c3469a..7d7def09e0fb 100644 --- a/src/javascript/app/App/Components/Elements/Errors/error-boundary.jsx +++ b/src/javascript/app/App/Components/Elements/Errors/error-boundary.jsx @@ -1,15 +1,17 @@ -import PropTypes from 'prop-types'; -import React from 'react'; +import PropTypes from 'prop-types'; +import React from 'react'; +import { connect } from 'Stores/connect'; +import ErrorComponent from './index'; -export default class ErrorBoundary extends React.Component { +class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } componentDidCatch = (error, info) => { - // eslint-disable-next-line no-underscore-dangle - window.__response_error = this.props.root_store; + if (window.TrackJS) window.TrackJS.console.log(this.props.root_store); + this.setState({ hasError: true, error, @@ -18,12 +20,16 @@ export default class ErrorBoundary extends React.Component { }; render = () => this.state.hasError ? ( -
- {this.state.error.message} -
+ ) : this.props.children; } ErrorBoundary.propTypes = { root_store: PropTypes.object, }; + +export default connect((store) => ( + { + root_store: store, + } +))(ErrorBoundary); diff --git a/src/javascript/app/App/Components/Elements/ToastMessage/__tests__/close-button.spec.jsx b/src/javascript/app/App/Components/Elements/NotificationMessage/__tests__/close-button.spec.jsx similarity index 100% rename from src/javascript/app/App/Components/Elements/ToastMessage/__tests__/close-button.spec.jsx rename to src/javascript/app/App/Components/Elements/NotificationMessage/__tests__/close-button.spec.jsx diff --git a/src/javascript/app/App/Components/Elements/ToastMessage/__tests__/toast.spec.jsx b/src/javascript/app/App/Components/Elements/NotificationMessage/__tests__/notification.spec.jsx similarity index 58% rename from src/javascript/app/App/Components/Elements/ToastMessage/__tests__/toast.spec.jsx rename to src/javascript/app/App/Components/Elements/NotificationMessage/__tests__/notification.spec.jsx index 3ace60ab52ba..3f5765bc2a19 100644 --- a/src/javascript/app/App/Components/Elements/ToastMessage/__tests__/toast.spec.jsx +++ b/src/javascript/app/App/Components/Elements/NotificationMessage/__tests__/notification.spec.jsx @@ -2,13 +2,13 @@ import React from 'react'; import { expect } from 'chai'; import { configure, shallow } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; -import Toast from '../toast.jsx'; +import Notification from '../notification.jsx'; configure({ adapter: new Adapter() }); -describe('Toast', () => { - it('should render one component', () => { - const wrapper = shallow(); +describe('Notification', () => { + it('should render one component', () => { + const wrapper = shallow(); expect(wrapper).to.have.length(1); }); }); diff --git a/src/javascript/app/App/Components/Elements/ToastMessage/close-button.jsx b/src/javascript/app/App/Components/Elements/NotificationMessage/close-button.jsx similarity index 55% rename from src/javascript/app/App/Components/Elements/ToastMessage/close-button.jsx rename to src/javascript/app/App/Components/Elements/NotificationMessage/close-button.jsx index 0df4b10979c8..6cf11c646fdf 100644 --- a/src/javascript/app/App/Components/Elements/ToastMessage/close-button.jsx +++ b/src/javascript/app/App/Components/Elements/NotificationMessage/close-button.jsx @@ -1,16 +1,17 @@ import PropTypes from 'prop-types'; import React from 'react'; -const CloseButton = ({ onClick }) => ( +const CloseButton = ({ onClick, className }) => (