From 9d6f948c510bf7f5ab5858b2c477fa48cfef3a99 Mon Sep 17 00:00:00 2001 From: Hamza ALI Date: Thu, 28 May 2020 17:15:25 +0700 Subject: [PATCH] WIP: Working on endpoint for /all in ViewAll.js --- .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/dataSources.xml | 11 + .idea/dictionaries/dev.xml | 7 + .idea/inspectionProfiles/Project_Default.xml | 11 + .idea/vcs.xml | 6 + package-lock.json | 1303 +- package.json | 23 +- postcss.config.js | 30 + public/index.html | 53 +- src/App.css | 38 - src/App.js | 77 +- src/App.test.js | 8 +- src/assets/arrows.svg | 1 + src/assets/background.png | Bin 0 -> 95890 bytes src/assets/wave.png | Bin 0 -> 22749 bytes src/auth.js | 74 + src/components/FileManualForm.js | 98 + src/components/FileUploadForm.js | 129 + src/components/Home.js | 30 + src/components/Login.js | 83 + src/components/Logout.js | 20 + src/components/Navbar.js | 69 + src/components/NotFound.js | 28 + src/components/Register.js | 86 + src/components/Upload.js | 32 + src/components/ViewAll.js | 109 + src/custom.js | 14 + src/index.css | 13 - src/index.js | 9 +- src/logo.svg | 7 - src/serviceWorker.js | 220 +- src/setupTests.js | 2 +- src/styles/app.css | 72964 +++++++++++++++++ src/styles/tailwind.css | 47 + tailwind.js | 742 + 35 files changed, 76052 insertions(+), 297 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/dataSources.xml create mode 100644 .idea/dictionaries/dev.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/vcs.xml create mode 100644 postcss.config.js delete mode 100644 src/App.css create mode 100644 src/assets/arrows.svg create mode 100644 src/assets/background.png create mode 100644 src/assets/wave.png create mode 100644 src/auth.js create mode 100644 src/components/FileManualForm.js create mode 100644 src/components/FileUploadForm.js create mode 100644 src/components/Home.js create mode 100644 src/components/Login.js create mode 100644 src/components/Logout.js create mode 100644 src/components/Navbar.js create mode 100644 src/components/NotFound.js create mode 100644 src/components/Register.js create mode 100644 src/components/Upload.js create mode 100644 src/components/ViewAll.js create mode 100644 src/custom.js delete mode 100644 src/index.css delete mode 100644 src/logo.svg create mode 100644 src/styles/app.css create mode 100644 src/styles/tailwind.css create mode 100644 tailwind.js diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..615c24b --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,11 @@ + + + + + postgresql + true + org.postgresql.Driver + jdbc:postgresql://dev.teamortix.com:5432/hamza + + + \ No newline at end of file diff --git a/.idea/dictionaries/dev.xml b/.idea/dictionaries/dev.xml new file mode 100644 index 0000000..283ade4 --- /dev/null +++ b/.idea/dictionaries/dev.xml @@ -0,0 +1,7 @@ + + + + navbar + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d5cfc95 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5316255..8d09836 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1078,6 +1078,44 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, + "@fullhuman/postcss-purgecss": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.2.0.tgz", + "integrity": "sha512-q4zYAn8L9olA5uneaLhxkHRBoug9dnAqytbdX9R5dbzSORobhYr1yGR2JN3Q1UMd5RB0apm1NvJekHaymal/BQ==", + "dev": true, + "requires": { + "postcss": "7.0.28", + "purgecss": "^2.2.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz", + "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -1312,11 +1350,39 @@ "glob-to-regexp": "^0.3.0" } }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + } + } + }, "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, "@sheerun/mutationobserver-shim": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", @@ -2066,6 +2132,25 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn-walk": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", + "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", + "dev": true + } + } + }, "acorn-walk": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", @@ -2375,6 +2460,12 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -3249,6 +3340,12 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -3293,6 +3390,11 @@ "supports-color": "^5.3.0" } }, + "change-emitter": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", + "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" + }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -3406,6 +3508,11 @@ } } }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, "clean-css": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", @@ -3566,6 +3673,11 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, + "complex.js": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", + "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==" + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -3656,6 +3768,45 @@ } } }, + "concurrently": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.2.0.tgz", + "integrity": "sha512-XxcDbQ4/43d6CxR7+iV8IZXhur4KbmEJk1CetVMUqCy34z9l0DkszbY+/9wvmSnToTej0SYomc2WSRH+L0zVJw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "dependencies": { + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "confusing-browser-globals": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", @@ -3813,6 +3964,52 @@ "sha.js": "^2.4.8" } }, + "cross-env": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", + "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -3982,6 +4179,12 @@ } } }, + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", + "dev": true + }, "css-what": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", @@ -4169,6 +4372,12 @@ } } }, + "date-fns": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.13.0.tgz", + "integrity": "sha512-xm0c61mevGF7f0XpCGtDTGpzEFC/1fpLXHbmFpxZZQJuvByIK2ozm6cSYuU+nxFYOPh2EuCfzUwlTEFwKG+h5w==", + "dev": true + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -4182,6 +4391,11 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "decimal.js": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", + "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -4264,6 +4478,12 @@ } } }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, "del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", @@ -4319,6 +4539,12 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, + "dependency-graph": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz", + "integrity": "sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==", + "dev": true + }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -4367,6 +4593,17 @@ } } }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, "diff-sequences": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", @@ -4441,6 +4678,15 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz", + "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^2.6.7" + } + }, "dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", @@ -4614,6 +4860,14 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -4748,6 +5002,11 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, + "escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -5510,6 +5769,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -5526,6 +5794,35 @@ "bser": "2.1.1" } }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + } + } + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -5755,6 +6052,11 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "fraction.js": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.12.tgz", + "integrity": "sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -5890,6 +6192,12 @@ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -5998,6 +6306,21 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, + "griddle-react": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/griddle-react/-/griddle-react-1.13.1.tgz", + "integrity": "sha512-72b/GXXD135LcWOQUHZP9YEOdQEfqvpdBM7W4bfKbwlHJqwsAcokH35EUrNRofgFaengNs8bH2vj+hbf2S0x7w==", + "requires": { + "immutable": "^3.8.1", + "lodash": "^4.17.4", + "max-safe-integer": "^1.0.0", + "prop-types": "^15.5.8", + "react-redux": "^5.0.6", + "recompose": "^0.21.2", + "redux": "^3.5.2", + "reselect": "^2.5.3" + } + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -6141,6 +6464,19 @@ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -6151,6 +6487,14 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -6398,6 +6742,11 @@ "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" + }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -6848,6 +7197,15 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -6919,6 +7277,11 @@ "html-escaper": "^2.0.0" } }, + "javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" + }, "jest": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", @@ -7752,6 +8115,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash-es": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" + }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -7784,11 +8152,26 @@ "lodash._reinterpolate": "^3.0.0" } }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, "loglevel": { "version": "1.6.8", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", @@ -7880,6 +8263,26 @@ "object-visit": "^1.0.0" } }, + "mathjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-7.0.0.tgz", + "integrity": "sha512-pe2hgDAHSfPRtuwIjNbL6fCKiHZYKKv45PusNfK3JDeVpVmHG1Pdig2vq62svsj2iKZO37tvLAjPUnrz6w+X9w==", + "requires": { + "complex.js": "^2.0.11", + "decimal.js": "^10.2.0", + "escape-latex": "^1.2.0", + "fraction.js": "^4.0.12", + "javascript-natural-sort": "^0.7.1", + "seed-random": "^2.2.0", + "tiny-emitter": "^2.1.0", + "typed-function": "^1.1.1" + } + }, + "max-safe-integer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz", + "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA=" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -8049,6 +8452,15 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=" }, + "mini-create-react-context": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", + "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", + "requires": { + "@babel/runtime": "^7.5.5", + "tiny-warning": "^1.0.3" + } + }, "mini-css-extract-plugin": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", @@ -8283,6 +8695,24 @@ "tslib": "^1.10.0" } }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dev": true, + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, "node-forge": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", @@ -8440,6 +8870,12 @@ "sort-keys": "^1.0.0" } }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "dev": true + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -9126,67 +9562,386 @@ "postcss-value-parser": "^4.0.2" } }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "postcss-cli": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-7.1.1.tgz", + "integrity": "sha512-bYQy5ydAQJKCMSpvaMg0ThPBeGYqhQXumjbFOmWnL4u65CYXQ16RfS6afGQpit0dGv/fNzxbdDtx8dkqOhhIbg==", + "dev": true, "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", + "chalk": "^4.0.0", + "chokidar": "^3.3.0", + "dependency-graph": "^0.9.0", + "fs-extra": "^9.0.0", + "get-stdin": "^7.0.0", + "globby": "^11.0.0", "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-load-config": "^2.0.0", + "postcss-reporter": "^6.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "yargs": "^15.0.2" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", + "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "globby": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz", + "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "requires": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + } + }, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" } @@ -9359,6 +10114,43 @@ "postcss": "^7.0.2" } }, + "postcss-functions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", + "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", + "dev": true, + "requires": { + "glob": "^7.1.2", + "object-assign": "^4.1.1", + "postcss": "^6.0.9", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "postcss-gap-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", @@ -9385,6 +10177,16 @@ "postcss": "^7.0.2" } }, + "postcss-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz", + "integrity": "sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1", + "postcss": "^7.0.18" + } + }, "postcss-lab-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", @@ -9600,6 +10402,16 @@ "postcss": "^7.0.6" } }, + "postcss-nested": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.1.tgz", + "integrity": "sha512-AMayXX8tS0HCp4O4lolp4ygj9wBn32DJWXvG6gCv+ZvJrEa00GUxJcJEEzMh87BIe6FrWdYkpR2cuyqHKrxmXw==", + "dev": true, + "requires": { + "postcss": "^7.0.21", + "postcss-selector-parser": "^6.0.2" + } + }, "postcss-nesting": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", @@ -9920,6 +10732,18 @@ "postcss": "^7.0.2" } }, + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" + } + }, "postcss-safe-parser": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", @@ -10041,6 +10865,12 @@ } } }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -10167,6 +10997,52 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "purgecss": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.2.1.tgz", + "integrity": "sha512-wngRSLW1dpNr8kr3TL9nTJMyTFI5BiRiaUUEys5M1CA4zEHLF25fRHoshEeDqmhstaNTOddmpYM34zRrUtEGbQ==", + "dev": true, + "requires": { + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.28", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "postcss": { + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz", + "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -10526,11 +11402,81 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, + "react-hook-form": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-5.7.2.tgz", + "integrity": "sha512-bJvY348vayIvEUmSK7Fvea/NgqbT2racA2IbnJz/aPlQ3GBtaTeDITH6rtCa6y++obZzG6E3Q8VuoXPir7QYUg==" + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-redux": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.2.tgz", + "integrity": "sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q==", + "requires": { + "@babel/runtime": "^7.1.2", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "loose-envify": "^1.1.0", + "prop-types": "^15.6.1", + "react-is": "^16.6.0", + "react-lifecycles-compat": "^3.0.0" + } + }, + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, "react-scripts": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz", @@ -10591,6 +11537,44 @@ "workbox-webpack-plugin": "4.3.1" } }, + "react-toastify": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.0.4.tgz", + "integrity": "sha512-ieNHqMZim/8h0NfSigWsmqly9dG4JwtTnBCq3y5UVua73Os8VyvsZkdu5CHORqXXgIe9CGIIPz4AbIiFXWkLHg==", + "requires": { + "classnames": "^2.2.6", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.1" + } + }, + "react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -10676,6 +11660,24 @@ "util.promisify": "^1.0.0" } }, + "recompose": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.21.2.tgz", + "integrity": "sha1-/z+9sjl7HHfEfUUb4qY7kpXURoE=", + "requires": { + "change-emitter": "^0.1.2", + "fbjs": "^0.8.1", + "hoist-non-react-statics": "^1.0.0", + "symbol-observable": "^1.0.4" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + } + } + }, "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -10693,6 +11695,35 @@ "strip-indent": "^3.0.0" } }, + "reduce-css-calc": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz", + "integrity": "sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "requires": { + "lodash": "^4.2.1", + "lodash-es": "^4.2.1", + "loose-envify": "^1.1.0", + "symbol-observable": "^1.0.3" + } + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -10913,6 +11944,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "reselect": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-2.5.4.tgz", + "integrity": "sha1-t9I/3wC4P6etAnlUb427vXZccEc=" + }, "resolve": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", @@ -10934,6 +11970,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -11023,6 +12064,12 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rework": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", @@ -11081,6 +12128,12 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -11204,6 +12257,11 @@ "ajv-keywords": "^3.4.1" } }, + "seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -11681,6 +12739,12 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -12149,6 +13213,11 @@ "util.promisify": "~1.0.0" } }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -12187,6 +13256,90 @@ } } }, + "tailwindcss": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-1.4.6.tgz", + "integrity": "sha512-qV0qInUq1FWih39Bc5CWECdgObSzRrbjGD4ke4kAPSIq6WXrPhv0wwOcUWJgJ66ltT9j+XnSRYikG8WNRU/fTQ==", + "dev": true, + "requires": { + "@fullhuman/postcss-purgecss": "^2.1.2", + "autoprefixer": "^9.4.5", + "browserslist": "^4.12.0", + "bytes": "^3.0.0", + "chalk": "^4.0.0", + "color": "^3.1.2", + "detective": "^5.2.0", + "fs-extra": "^8.0.0", + "lodash": "^4.17.15", + "node-emoji": "^1.8.1", + "normalize.css": "^8.0.1", + "postcss": "^7.0.11", + "postcss-functions": "^3.0.0", + "postcss-js": "^2.0.0", + "postcss-nested": "^4.1.1", + "postcss-selector-parser": "^6.0.0", + "pretty-hrtime": "^1.0.3", + "reduce-css-calc": "^2.1.6", + "resolve": "^1.14.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "tailwindcss-tables": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss-tables/-/tailwindcss-tables-0.4.0.tgz", + "integrity": "sha512-GB25r/03oJln729LcstrPyI53Y5k3X5WWxzAkj+9Zqrw3jB6CXwZm54zIwnQU93dkmXOGGrneldHsIt9Z2YTYQ==" + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -12400,6 +13553,21 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -12473,6 +13641,12 @@ "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==", + "dev": true + }, "ts-pnp": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", @@ -12536,11 +13710,21 @@ "mime-types": "~2.1.24" } }, + "typed-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-1.1.1.tgz", + "integrity": "sha512-RbN7MaTQBZLJYzDENHPA0nUmWT0Ex80KHItprrgbTPufYhIlTePvCXZxyQK7wgn19FW5bnuaBIKcBb5mRWjB1Q==" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -12771,6 +13955,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 4520d04..bb9c213 100644 --- a/package.json +++ b/package.json @@ -6,15 +6,26 @@ "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.5.0", "@testing-library/user-event": "^7.2.1", + "cross-env": "^7.0.2", + "cssnano": "^4.1.10", + "griddle-react": "^1.13.1", + "mathjs": "^7.0.0", "react": "^16.13.1", "react-dom": "^16.13.1", - "react-scripts": "3.4.1" + "react-hook-form": "^5.7.2", + "react-router-dom": "^5.2.0", + "react-scripts": "3.4.1", + "react-toastify": "^6.0.4", + "tailwindcss-tables": "^0.4.0" }, "scripts": { + "dev": "concurrently --kill-others \"npm run watch:css\" \"npm run start\"", "start": "react-scripts start", - "build": "react-scripts build", + "build": "npm run build:css && react-scripts build", "test": "react-scripts test", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "build:css": "cross-env NODE_ENV=production postcss src/styles/tailwind.css -o src/styles/app.css", + "watch:css": "postcss src/styles/tailwind.css -o src/styles/app.css -w" }, "eslintConfig": { "extends": "react-app" @@ -30,5 +41,11 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "autoprefixer": "^9.7.6", + "concurrently": "^5.2.0", + "postcss-cli": "^7.1.1", + "tailwindcss": "^1.4.6" } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..43eaef7 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,30 @@ +const tailwindcss = require('tailwindcss'); +const nano = require('cssnano') + +const purgecss = require('@fullhuman/postcss-purgecss')({ +// + content: [ + "./src/components/*.js", + "./node_modules/react-toastify/dist/ReactToastify.min.css", + "./public/index.html", + "./src/custom.js", + "./src/App.js", + ], + + defaultExtractor: content => { + const broadMatches = content.match(/[^<>"'`\s]*[^<>"'`\s:]/g) || [] + const innerMatches = content.match(/[^<>"'`\s.()]*[^<>"'`\s.():]/g) || [] + + return broadMatches.concat(innerMatches) + } +}) + +module.exports = { + plugins: [ + tailwindcss('./tailwind.js'), + require('autoprefixer'), + ...process.env.NODE_ENV === 'production' + ? [purgecss, nano] + : [] + ] +} \ No newline at end of file diff --git a/public/index.html b/public/index.html index aa069f2..1185240 100644 --- a/public/index.html +++ b/public/index.html @@ -1,43 +1,20 @@ - - - - - + + + + + - - - - - React App - - - -
- - + + + Rain Track + + + +
+ diff --git a/src/App.css b/src/App.css deleted file mode 100644 index 74b5e05..0000000 --- a/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/src/App.js b/src/App.js index ce9cbd2..a23a51a 100644 --- a/src/App.js +++ b/src/App.js @@ -1,26 +1,61 @@ -import React from 'react'; -import logo from './logo.svg'; -import './App.css'; +import React, {useEffect, useReducer} from 'react'; +import {BrowserRouter, Route, Switch} from "react-router-dom"; +import {Slide, ToastContainer} from "react-toastify"; +import 'react-toastify/dist/ReactToastify.min.css' + +import './styles/app.css' +import {authenticate, defaultAuth, reducer} from "./auth"; + +// pages +import Home from "./components/Home"; +import Login from "./components/Login"; +import Logout from "./components/Logout"; +import Register from "./components/Register"; +import Upload from "./components/Upload"; +import NotFound from "./components/NotFound"; +import ViewAll from "./components/ViewAll"; + +export const AuthContext = React.createContext(undefined) function App() { - return ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
-
- ); + const [authState, authDispatch] = useReducer(reducer, defaultAuth(), () => defaultAuth()) + + useEffect(() => { + (async () => { + authDispatch({response: await authenticate(authState.token)}) + })().then() + }, [authState.token]) + + return ( + +
+ + + + + + + + + + + + + +
+ +
+ ); } export default App; diff --git a/src/App.test.js b/src/App.test.js index 4db7ebc..206f5ec 100644 --- a/src/App.test.js +++ b/src/App.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { render } from '@testing-library/react'; +import {render} from '@testing-library/react'; import App from './App'; test('renders learn react link', () => { - const { getByText } = render(); - const linkElement = getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); + const {getByText} = render(); + const linkElement = getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); }); diff --git a/src/assets/arrows.svg b/src/assets/arrows.svg new file mode 100644 index 0000000..73f29b0 --- /dev/null +++ b/src/assets/arrows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/background.png b/src/assets/background.png new file mode 100644 index 0000000000000000000000000000000000000000..fddf589ff43f4622659640b6ced4a19d873f3d2f GIT binary patch literal 95890 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 $n&XR{eg^FL(p4og5ho~Lf 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 literal 0 HcmV?d00001 diff --git a/src/assets/wave.png b/src/assets/wave.png new file mode 100644 index 0000000000000000000000000000000000000000..f3abd18a67f972d3928a0af61fb048493b6bbe6c GIT binary patch literal 22749 zcmeIaXH-*L*FU-`f(1pS1rSg;h*AUuj7n7zjv_@-x_}@cf&`=!N)V9_N0Ht|iii{` zp%avVO7ArUgET22^b+8%famypIODnR`@eVGaX+}naExvCo@>qWn`O%uO zTR&OJ@qq~%@G7`Q+-jcf-9d-x#P{wLpHVUF-5tFT{d`XehWYs#)9=?Pn)t1dT|E3o z$gUcGyUeZ{px?n^R}a5~!|&km+ZXmi!f#*r?F+ws;kPe9ziXsD5d5x@cJ=T(FZ|96 zzw^THyzo0O>|x-yFZ`eRf?a<_=ZWhroB5qPKXQMR`CPQaLzn-8t{;WYEWZ5n#+&Oe zXit9~PG^0`IR4ez8h)kZO{9wsQ`o%*{e^*d!ZZ0IZlB&A_M6!<@vAbn`Eu!D5DQ|S zPVu?fnmGfBY?OSe=kdKQ&fvMbs3tzIYn!-cZZ5QilW-P{r%$qZ`Jd9N|AckNQww^eyOC;V>UF=`!RcF>l!$X?YloY zu@=7dB=m^7E%QNrI?(enP{2oM{2H*F49tDj6z&xy?ho8&pTV z*I8E#4J^xdhi}RYX`NvE2@D~nHot|k_SLbJ(fps3;!01?b`369H*B&#-)FMR2a1Q; z$tQkF2lh8vlwwzU-q$rqxYO^k%I9L9gN+wie$FD^@eIc_K7#KPuUB!b&KOg=|5Ni> z0*~{Qk2kd!#F@#NlGc8t>JNGT{ph${{*~h*bmnE@#c}&au{icU_E5Lm52=2>oEjFj zP?~G<$IsbOKJ85YO;o6{vi{YZ2Wafmsq+PDc5$9kS%jsM91-^rV5mz!h}j}vyjy#L zaaV-&ROurDKF{6DhF2YVN55-Q+i`e1-?NTay1)Ba*>A2-kdCc1O8)sbAKH=ZZJP@B zihX;}vTyj$NYETyy2@zrenk}OB~2uq*j2Kk-qZ^@(-S@)^ekBB^dKH=vVSzO5VrSB zVd~|(2awODvf8HZyZcNOgvFSAcbU``oxtf}Qm70`g?87d`dT}Oirg8O%W!+_0 zT=r$F6AX5v(YJ70+aZJ%ea#Kx=|ihVR*U5g_sGjzJTsw;huZ!tIJY)MoQ21AY48cJ z*|MlZbG27R_Y~3%vW8po?Xmme%MBfg6HB4=>`otEH8@B&;-vGaDuvSKtMCmloAY}w zF}_SZYbLHM&B&)47w?((s&I1o6coPD8Yqu7Ik_9kVA3zUsA+0HxV2&I42eiYsUKnt z=<6kKmp@E|c6VpUX>{qs6#gqZtCAp!UA80Z(W7*QNR60~HzdMhn0Kd18+jn{t z@Au18bxvMvOC{82<)F>7qH}T#wH7qH!>X7;oWn#P@gwfBN>K$<;Uad+P)2xI zgO{k(lY`muXE)SCid~*a8WPYbDd$6j$((K{mKXqc~SD`CB0{f zY1rA)sHrkxg$wd*1uK{C+S!Ph-kaX=x7wr`+|T#3w!HO;|)n`gJ86>SIzy8aMe7iQ<;{+3!P~8c)bFt@}Oo`9}4bM;*?KC zPd$|$IdS{Qnf#3WxTg;f=A9|ZK)1GHSrHSpC5dD9Ql4J!J7jZ2rb4_tys8HFm?J0n zR;k{zZ!CUdegr;|%oCpL4Yyr~OHbiA*SDTc<(bD*4H1pmdN(%&n$zFKv{;|oHTtXg zHr4fuu1me-D=4*sWwH(1#6<8aJL1e|Bl3;|R-}LF;?(Gr*;H%m{^H`7VH4?Q?p4W` z;oJSMEI5pLp22fN`-;vJqR7=u=-l8^r*E?cJ*>$F@T*BwhCRkS0yi`FjG!nGs&u9E zfbdrzGp7!l{;B?exBVhDVuYD7CU^x5kr!4z<&cN=kYKp2pM44YO>~;8z|FHfyst8s z$pFrRK=dC4|4+NEdWZ1>q_Z4-{ra)&{kz_nF0gc4{s>GpB1%?1`pVo*wh0TqjPam+ zq{Li{Xm#RTq2DHc_~6kDAVA1<)M<)TSEvD`J^lMdhSCIwH?l@mSMdu z5JLfy_?;_aW8V}>z8yIOUt;-&lBzV72H#>!3oFTLr z0QGXmbJ|acVmAlRvq*;0r)yBTvUpA1k^BkTe5qoE#<$$sC|@Pg=|2lfN?C8YJoz^3 z=)FRYtc8o_F}zZB5LtkEw2mted0N-Wq0bYNnwebi0|C;_!-z-WH1k>8=QwX`{{)BN zBToyht0EWaAF?zzv9~)fTw$^gMvDcPvj>gHl;!{7(EEw@k+A4VPkfZJY`y?t`+caZ ziM51-tBv$K>eW-w<`*s475%-zOujrbqHFcxV4ZR=Jwr&6H*Ttv^Q_)qIVE4^eLnfU z0qs52vo!E?5-Uv_O|(>0Wyq2cb-uBFuTJPu5o$_s(A2pi<~x?s z)o&xi#%IfB*`nfQ;IX;T7H=^}y`<_OyU<@7KEy_v2V;Di4J}1379;To!4MBr;UjgA z_JSRMR*9uZVvr~Y{Ttg1i(rm2%d>Un67WV#Qc}6iimiSwM@q=~oIuyk#8B6zFy+dr z+yH;H^nzw(2qc?eY^%p+?;%8(?-x0e7b>mLEa42|Nn!ivL4=}fNV$~ECcy~9LrDQxa+GwrK@>NF%lnG`AC)qu^ zgbPAzsI$L-`{7E=V|?PSlU5I-rK66a=r<3EZMEUtM1*Y{_*aseOmlIYHG=y_iY!*l zT-dIWUkpZ7+pc^)e7Z1b7i4z~MI{qTbdMcTicGhjNQx6>Iq>-Jvj9STb8n|!pLqjj zVl8yl5H<9MJH+@fIr~DgG09<5#(kCUe+08LT97(w1GX~#7q#5Blm((O6o#I9&?viOUo?nv5ji&s)D&@vJEGHB@8uXg&)O?h|rE~Zyie{ zD)D&i5V}R2le6Z;rVEtoI)S8V2##Pl{%-A0@U_twe|69w{R_7Cp~7Qj&h)#SeB@X! zL9J0LGq!T-NjUWCs@W6w46&Mfoi*d@VtLM^g<>vdA1ro0Opq$LNWIA%!3}dW=6rjO zaT;F0?rWqm<*`kA7j2m&l#7l3h`_awXu9sT(%5bI&8vtxj~*JVC^pX9dA!PYa_z;S zFw4_DHQ8R7#G-mt%l{Z9Ip`(C2wfotI$*a*4%i0Edr0;aZFe?Q=f?I9$*-u(0X~3h zcl+zjg^f8CP7>Vfp=^omUzbbocB4cT(688WoMQk8awt}V3Kk~a}9i~Th$b0G30d+zAU<`?Uf6@~XZ z#Tx7HuAQ>N^xw#A*()+E<(uo3uhWZ z`xd%teV0>!1AQuTfVwfc>L`$5t`5E8ey)I%*WE+JYvZ0-`*9*xXIjf^4a7TEYXL2BGee|K!>`t;R98UK4h!eT(_-$ zwQuW1l+X5{!Z{wIo9}MY)D(=APaAhM;e~a1sWQQ_L#mRl!F}bC z8lK;6*!)`_*gv>`ifB5MNbGW{p-SoH#P>U#++=4@ll=b1kaZ zsSxn|oF}~Yau-ON`%J~?3KecQsog@CidK4_BJ^GC9ovWUvJR>lo3Gl^Blje`5ZD!D zd6=8KZEp8$lFOfp_4~i4_>?YdflC+1XCu|#VY%~qP2+MOj=C?7#kX3lKWTw5b~!@Q z9R_0DO@!W^BIcT<7bM+5{pRSiD!YLhmT_ZTKJ)`UgK3_cQNV>F@%YuxA8m%OTJovi zjBP#yng0PrH@#B{+E1<_yDnQ&Ti1gLF)0C6X?fK&aOPB899G5s&z8) zd^|fOlsMr@l`ywXk>Mf_hoCCK%)-wMVo=DN zj0xSbm2_@g-v@a@r$SM7ampT*BcL*!*Pfp73-HYpOKy)JBW8xvK!z<0BL~;Q@zeDs zp`mMSqh{}hbax{ojHlM+4y?30rt;{z$S{i=W5QPg=E|g+q$d>=bp^@|P*}Smn0$cT z}8beM&ng^-v_RY#hVRtr*)yd7PVXG#i$OIFe`LW$F za+TgjefT;ap*0jqN5Kdkn` za7g}FN0Hjcv4Aq+B5$0XCYE|z^Yio#1Um{*>O0Ko zqaM@silPlR75l5EHY%s0RPYgcH=DIBc_GMF8PGUZz3|@dS0{hXj4SYZ&Axe(LZ+A) zP~~Kn5+x*x_i$WTXyaO+F=~X9{F7>#ly}Gr`hdJqj>l3YwJLS>VuT1 zA2WWXF!#=mW_mV@75!=s2zHm+?l34+;M+^-%H%Zzq`lmT{87rHDMgGHUoQTq>Wimy z1Sj`ZF~fK8Do@)C^579j{7-5-HFCv-3~3D)>S||jAdkNCqu7~UkpxT;_h4_*|15Ox zEOyfx!ByCKgGiKUyN>3DO#0%I9D1%+Fq33J1j-{nkUZu7a(Nf9uv4|@vkV=fZ&E<; zbw0C_blPGy12ly&Ut_2Y`9UB9sb?TCdHn^6XZF>ud3|qh+{`jN>vOsM#iGND)^VJ7 zf77sUZucRm&4JpknT&mhb6wb0u3Stty2rS?m_~UW^?26;-P7QV9gWbNxdi^KMX!J93;x+9(i+@HQmFF7j+VA%aY2RzrR42sw3cxRa0BB z>rZUOfCa^AN}p#~@NahmZ8Y*Cl+!G+cPIe~m42=Q{gt6*IU)YK>IE0G)e;vl*JYJ7#d7Eb|zukQ$DQtmB{^dy1;GegGGMUpJKT zTFxsrRnrJBqKuAtc*f~`msH*-jG<_v@Flw+AKH)~rroO`Ncs<`cj!f-9yva*XtW0D zoyS;AAyD)@P<_`-GdJqBZBPYL-BGM%PK^YoXyu0*#6xB5`ko6>{*Fswp-(s5MVlga z3J)zlTjF%IYNK?fc|3bwfBandO^fw~7SK=Np>kCsZ$}T3MoP40^WXQr-4!Cm{l*}c zw!&KcbhHedc|B*iSK|R`gT%Lz6mw1)f($#Bj=M`WHLH+=TT4d0cfM%nBu_4%jTWT# zKS~ivdVlrZ`-*4b(#$0HpsI#K*|oWgXIH2pI|mCW{4Ynj5&UMOGkM5AzB}NJ@XXiU z#q)_ZZ9gi#A{cU2q-jR2cD3%}C=G;JIDp|FU&rCrMu|=YW&|&h6t;S%Vz-6(MiRSUp{G5JHQkO>*a-V26xS+y@<2VJXU zC>2e3@EWeQc$C*Gn|0M@&S|eEo|LOa&oC$%@~>p{S2bXbAc*cJ#B*z6g3oJOV}KOC ztuNf8vEZn=AIr0ZZ_NZ#-0i?S)(0cat83iZ`;Uh zZ#TqA^ekQ(XqW-nwd$iYMN_C(=i;s0qB&-3Cms2ZB-|)~2jc|G3pRDx=rt_Yg{;AH z^E~x@0FtB#-yUh4U29@o9Zl8D-Cr4`0A^MUKTvIcet_o1%J%2j8A8r5uAyT6CVpN0 z!1*H(6qPbne3%jy2hTeb$};OW#o2cAgkMLZuifnjwGSEV-cI?oAw`1kHFP>5E7sEs z0amh`pi`^Y_V)X0^Dhe zHQ(|kXq=QgxV=0vVb-{zEo-k)!)Lc7Sdq)O2Z=VxrwESFxf4yr{3{8QMhV^Vro{H^ zjNr)lkGv`D(cpo^0PmH|MN-XnozhTEv9Vr}h66(9mP0cg5L1_<79FDOaP)%+VLn#G znPV)!mkws#bR8 z>9w$#6E|B}01Q&$`|!91Lo_=Cu^qsWQCgjPipVV?f;l zH`AN=0INz&jt%egtOV{8&JmYU^!5Y!?FL?UN(#x&mI_sy z=jH%DArtPr=xtaHYUqk^r$vq$04VPR7?Cfk^cAGmZ5w$nQri26p{v$SU%7p*QV#PA zDa~`2v=5Mq(Eb{hZZkNqqEZcF{Lmo?@)d*%ABfEm>lJni*Vp{QOI}~>$+PEDq&-py zCPld)^YphWa=z63T}|}@@xn`NuE+HWTlrC70GK>gjQRRpHBh7R+MhMizPl8V?Ui}% zjP`*kvxt6ddIFkvs@_K{7YAlC7k~Ad_o1 z+J|WI`td}inTz&kRx&mVC%Ss&~1Q(u0(^ir#4~73n$548aDsvC(cF2K&eWe-rQQhtRLuq0_ zpC(a6&5-&dAh50`8piY^-^BalBec{H18XPl$K(vq4Bn=-#f~p;wItJgeYYFxXilvi z`SfsR9z=}Q0^3UWwcAUHv0@Z}K%Sjz-w{bnD81rAxHKU;IWa&6!L76{#RZ~SmVCQQ zo3fdupcqT)YO&u)eD2ubRFugl068Bf)KsiNuQY+^UCGLbmp_lXEWJyTlv)F^dst6= z?iWe!-u&^+)R}lP(+zO_{QzdEt2{8km^`T@YoE7&Xp|z%oxk*|eedjWt4X@8Cf+PW zR*(i>m_8@=FRD)igz7xvWOSeUXjqrGLoy`KgclQV2pDm(&%!ql6P%Z>L(*9uQ3da@ z-j5=tba|_EE+ad0hG!3<6IJfj08^J4!bmLWGPB!`1+FT3hk!)r=&^PSve^A*si z?TVO`IlVmGE*0;x*{<44#7%F2G>AF4AG37L{rWbsdN>SJQXbCqltBt1kj|2Y;;M&tr0S zyKo`L3q9ylhh^NBY}oQd>V_S;@uL&8#vlZ)awd~QC5;}pxvV0r>%=^5_-qHIvW6}K zYo^uQ0FHoKkZ45Xe^f+RwH`@qS?G($11DQ5(gHFl?i|1{G>J}gk`{R%W8>%MHr?9} z(IwpRGXVzN*N#qpbljs5G_*drj?(m-Moe6*VfiRhk%m5 zN-qL}A7#FYwsphI(Yg4|fo~!imWif-;(4nyiX+PzPT1Kdd(0?whbDU=gzGnqF423W z<9N25av4En*n$_`5nR*0eXzPB?4Ev$+vYdhrl#H}Isnl@%qWf^1@G-$o(ZIIWDg>&>cl*X zSQ&@UXH8S9m`D4~k)o*~)QgiFD_6Ii&%W1u?--DQ)h7Jwy-UR6=jacbWRaXWgw&%UVitey1< zZrA<6!mIOnMN(ilgq)K4$BkO_x!dzNhf3X!i_P;OzxPOc0O>d%^?0ZW34JdVD;`}o z!>u8C69XP|(MO)A_jtS;+f$;I@J89aVdi>u+giA_Z6Ch1>L*#ul264zE};hYU+z38 zp8mo9G5_`^V=>_^J$>09j(5EDCgnXYLeOb}cC^k9w3ffRC265noymjId2}d5iwA&p zk_mMto#mXuwxgu{R<3qP_~9pq{9kEO%wKwvLRG9K*kbNBqt*^@UXqiWWuXU{=~U(a zdRp%6PN&PjdQIPU1#fJ?AcEuj%eGrn=Bbywh;VVIX~o*VBd(`H{;n)Tb5Y4Z>y6n{Fi=1fSZ z!Sy-3jyE0zT1HJy1BO9{SY)v?jaG-w_yQ)!F9(eij{LzW_6)R;s#+pAsXDwv1 zLVvkGmc>QuyIKMK8lJ^li&FcTOwpPMjj9gH6l{IINoM3t3TT+){O;#7&HQw8NdRQ7 zekFW&c5BNU^MuYPEmnFHMU@Wv;~Ze($U<7FNJ)7%5_7B6s20&?48hp*SD_W}wmaDD zLtW-vJEYl;c5F$XUgOb?8AGNpH{5Fg45wr^K^adj;R1Gu@w2X=Eb>}uI7OIi_PrT% zHA%r*8Gx7dkB!_ra?THOtL(V(G*~B()$%Z4Rz>4js+;L*QvBQX75b!h!T5IAjoKW1 z$cVg`9t0@|Ojg|P#=l^3F;?)hdQNoiC4mS6%d)77`efQgDRtw;nj7FQE(A*jDJC@j z+@xddVR-b4)kdyfEd=E}+as5pD0IDV3^y9mXB%SnW7bsn$POvK?7A~~*lYM>fWz6$5SbaljO z*JY}#4`6~fN;!aEV8tmN!0Nvn1@WtKE$!tT=hw=hI-9HH5C+r7XLG*{X4sN23-UL67HFDQ_?M zAPH1F21G5^Iw)S;b3A-4(4~kF(OR^C_D@ra?aBdAw7s%)FYFN!({)p#5tLvoUabi( zL4etmABHqB1J*8l+n<1(k+X?wv5X~zK&1aIA5|%1XQ&W>X^aY*kVN#Q7{%NfgJKGdH&9)QNQ3r``46VQ(q1{38Qmzqh~Uf_AoJ8xHu2)-Ip{w$|e%#`h7z*e~CrPstK zcU(rplbQ*G$Vuc`=opan=d0&4nfEyX8K?y(^25FcUdi$AGHq_IAwU(x|f zvOg$NmXWN^OccFYJcN`XeXLfm?gHwCbgAQBM4K~tZ=1?gm!vT#dua%JNr@hkD-zOs zot|nY9&Z--5JC-eKK#n!NiS68-0ztauY#BAbZITHEoKDrLZ0{O#0>>R>9_D+CVV_q z)_sjvR4ztLqRwAupo4TT6?#TzyK{MYoegGRaT-N}xp8udF_j|%vVazT3i>4dW^FC0 zp?)-TSQ6|hMV`EN5P;wC`qI7ZACK3*ycMYlBch#M2$5G4$r}_H=HH1zJ-7ZdGoboI z6*GRw^Q8Rt9pNOTif~WK^NY6y3^*^*p`8l_UQ)sK2hJlN)@9JM#5#R34~&0@{CT?=aQG?C4C&`Tk~>32xeGR9tS}m>G2y$ij>#6j_tngWpODOK|GT?vAIQ)7~>)b@)@*|!x6iEsBxJv>|9xt z$4&Ii;YjvsRT?U>>gz9f*1NxY2!gjt`%>jUT{;;ilZHjhunU zi7Tr49u|&JCwQzEJ9~Iq%E&J~5SCvL)3(tUq{X+PrgOm2kyoLU6^7k?YekV2VUDBg z_h#3|bJdT_4T{!k0|kj^bGB}EMr@0oTfz(kDtnOMT6oM%f#vvVE!!N$jpH9r9sCGk zPB6@3qb3Jkrg)#(DhvhY5ohY)&c&l$ucCW^B(HoS2DuWD>XJM&Sb05>!l!OXH&pX| z(E^YVQeV0k_{hcs9_%`1B3NB;)U!2V^$91y{sI#!RpWdfqD~OsAH-Ny%-T#k7y99- z;l~;_C@Vj;I^~$>W^QMw>$;+#@$foV#U=Z>r_pVc>Ea;<&yvSx{7Fbl5DNo8_>CO( zZQRnKfdo#0z%6~=tC|@EC#g;}H+~2gIHe~R4+PB$t1qM$XQ=A|Ez&@j65yppuLWrH z5`cynYTJyZ0;@gYyCkKc>@R@>wIY_qPyt@;q%+9JKDYHZJ_ zQph(Jul%_*TcM6F%^>QOphpcVM2MjDQLH+E(L6SNij(w0FrHM9Y2e0kHZ#aV4KRAt z1DQjXX>aB;lG9bf7u79xg+x<4Duj*-cH|f5VN|1-5N6;vk|g{kop=!`-)Om>FNFM8J)|DagRj#k|pRRv+uumIsBOG~NC8(N4x;JdCKG)fU)V=O% zWh}U(5&?$6L~^!nM=%?myNb0j!Ur%a0PNMg2LWFg$(eJxT;$u?{U4#O#1Wa(-F>Ot z{xT##odHtu?Cb@F2>}s6KNJ8lutr%>)ezO*ul04l_i(mb@BYIe$`KCEePw5NiT(L# z{n1-a87G1vo3V$v{Pse(vsWku941y^W?pLXu37_LSa^7K6|08AP)I>XG$toH>3 zX$HmqSKC;X$Hv@u%^DU2l3Yqg59KvAtggE7Ek0reBSbYzqf$?GNVj!79?Veon0)_! zZN$J}{dW79<9ci*=O2_&tPjwL-;A_!c}>(ze?R1v#cX_2RhIa$VO_5q7!lI`#9)&3 zmQ)Z>v+z)I`$xok*Tt$)*8VS?<6jQWyaX(W-T86t+IwTFyOtAY&yvVbWWth)>nN#X zDTo83sRb4iI%xFbpyy!y!cp=kgl&C!;JJzFxMqg1M>lJ$daO)u!BAXp4He#RDY(6F zIigS4#Xu{A3GAe`L8vUX_v9CCS=T{bKj+H&iyurYPBGAg@D!j!ve6MTM_dSp#0+*R z=q^LgnU?$HMggu3NLRzpr`?TYeeEEv@fYim+$~rNkI-g-^JkFyVIh>i3-H?Hfl>1v zgo=iSB`IBJd~qH*StO7Iyxv4pgz7N=qs>%xuL^Tde))MNVen6KuK%{5Uahp@sf{PB zy5}|?^~!LIGSIxz8beO~xwY8+W7eje;fu>^(WnEc|B=Xn_T|=4%4j1^5Zzh#QQWB8 zey>%o_yRAr?giZbvHBolwm5@0tl0IX!ppon*=3!1ywmmU# zk&OEAPASnurd=ZVnHHtX7q=x**>EIMyEg{bNF-AWcr+XSsrv8-#P+ydg#OGK?;ScX`F5 z)-vOxO+_>y=0SJ=fN10vpUX5X!pL(C`UP%RyF25gT>Y51kAzc?JmTN1>lc1Loz;Mu zksEHd-0*sglnK*tR?WXgk>$~TjAAP#jBO}NhSw5Z-*8O#cAZSS?$awp_(ZrxwM@89 zqNcH@S>{NPYbYlzCxW^;%=x&y=mv%L#8Nu(HixM=d$F0v6X+h-x(G(;(JIi$h*haK zQ+t>F#pYQaw+Fv;Rqp(4QE3|2B8=TsZ0~)Os1zgLqRoeb)zxWWy$)(6z5XDI?7!0=)gmh`5v`5u%Qr_ssav#cNPb8@y5jIbHg8CxvY|oU7>>M z?@Z>kv%F|}r<5z7q<~tgI}9-w7alPodjX7M(gpC*mTsP!?Byy8LcF$@G0yyTo=S#+ z#MNH*=aF8E-#>&i%n5ZnK$e4g9taIVWBake3W`mAD2I*HnvS($+L~J|DZ!E)WkId5 zY$v(>HLcloWNBRr|WlU17ry+%vQo z^{bkVv5q!L0|TONA4U1xzAh-1jBjs2G?M}Z=d9~x@R~yUVq$Q_bqkG zMcsbQR-HG8ioQVOhg`nDy2~O*HNGDgro-s`dfJ|nI}9l*a&NMtNm;sm)cw=FQ4mow zU_(L3lCW-a%5@V@b5|d)MFu4FL*etRdfhwvLDFn*@Fep4O*E|mSRX*I5+Q~=9XNyf z1%cPeZf`gc<(aXqY`JjklN1KHon+Ew#@dGr8{hpzs^gy$r?DL^6P9v)6d}f#P(EJ` z;OzluxxNrf9^3I=#%iantS*_zCl49qy5cPx1jH}VpKRoF=AEuvT`5|eub2+ltz1#v z_J>VU7S1-A1N^O%dmbvuK51~3-TG59`6PKhaa7vYDOW&NN>xsRXs5Wo-&#P*onD}M zL9Gy3gBEXuSAiZg)FvFNK?ZSK(ev?e+h?_5oS z419YjBeu%wIRca=0H(?7piv67F;a_*pX+dX%3G5c!$Ds0kF#&>DPWRYdt{b=(Iezw ztERO{5hI~p66b1fEMqh@7)T@{8kR!nr2(-xEDA-ZtPHjVL4oU~TJo4P7%g{!2Z2oC zKzQbJfE8Bc2j?p0wy&lFId6C`6fwllNmC#H{x(*`XrMPNdc|pBg0rCocQ0*wGgg%}$j*M?#(0K6b>Omel*OJfIco>4m2bl&Li$}4ZiNH5{D86y} z5EX2M^EO$H=>m3y#ZT*a59X|;)Fc&S+VEmdSkeNj+%S`?V9~B1VX<)&v>@zc!ZCmh zGB@+$!brbiE{_&tPmJR_EnAZ$-pdbCjc?`_{G|oh z*6In=Ir7Fprlv;RvI$V3epp>%q|Nv6*Kk@KG_Dj+-szXI0^*NO$w$7-beFbIKoxrgIuq0N8 z=wMF`dZY=Vt5Tx{$okRH)sO~$m#~JosQfbb`lDILG(Let7IQea(*0ExVMU9v)moDE zlUpzta4vBUa@y*6H>c($YODAF|ZGR|V)&in=)fGD>Qe9vs zUxWQ9@{Pr3F+GiV_VxT@bd11|f$D*Sd=eo?Uf8!?!hN<}oRc3YgLyX3Q38N24;3th zuj4w&@tiDfd-3Bbe0en!qSRWJr|cat%V35RwYhg-ou=m_Q;r9Eb+te-o<-bwyucl0 z3W%<7iwSOCFbt~u;ia8@n)fU-3)fb1oxKbkH{YAFo7u%lB-l>(?tkf9++~~_c4#R| zu*5vll=!U^G}>~QE5cdOES{EiMwAhfBxztN7GcS=c z;v{$&hrvIb1RLY`zF557q;l#-6Xs%{RfKfdK4OGtV@O2Rxgv)`FL!w}xE1#0{fwe0zalR8Vx zQJX4R=1wg)E!`&N@{hW$@`zb1x1bMGN^(V3DM`TtRHZ&3lMav0_912YjLMeWxO&bL zdxfsj6!=eKcYObVq}vU43zQ}K*{7< zh9&5&E6UW|v+XQb2AG$f!(EEPXP)+G?UCqZr-QxJ(!yPE6vB1n4D&5z%nL73@?Td3 z#Gt5=o-+T#$GOsdHIyAb_Q_6x>c zEl#7Kr)-bQ< z0u*P7iLuqP3(ljTW7Ut#cZa4~mP^PGjS&%0rk(N)1WanZQ6mj?xkIQ48 ziVF^Fx!~Y7SKa-TIsmKDh%=MUguYn5nGAzCtndPbIA0$SN4_G=hh3fRv!A3#du_!j z4|z@NdU<|x^lo@>rc;@`t)N)rSZMlooW)HeL3A!Wxr)VABWYSWgG3pjO%RMw?BI1i zxT@jO`mBBj!#5UR1ap87YYdUa2ktk-905*qRoltDke8owuLKkjLpa2M`5c?{#ngR# zpqD$Wk(yMZW(K0Pu1$Ym>Do$#lqY9K@{^GUqAzA-E>clX(lWM_ZmDzLqD zB({HQcV7=+CY#m-()Bsypm+R2e;|!u-j1cgD3bx3>HK>x&I0qROn&Tmd}V4tJvxUs zm?WV>rTrQg7$aMA6w%6lAAW79a3Z)5>0BODfOHoME-U#!@lnMs=}&Ir&}8tsb6r6v zj_k~Dl{BBRd~LtF&sq<;WPas}R10Fd-gLBF*+$>eLSi}6oN40h0|~cOu84_3!g*Zi z7qXdNf{d{eZi&R=(K$iUE)*?wm5L6PdZQ*VxUINoIw*r2e`UVj$*jQYahfagG0BT3 zfL%W7De1YNNy7F{T$Ejt2`J|zw!hK(jcuwzBc6u4+l@RC|-;y({9yS}BD-#1I8e3-Oy)Cyw=Amy<4D z*itJDVE;q{+m45=>rH2slpHGeW2ed+m=7g)9uFs&H7nngGW%wR-HCsA?PdtOv7o2X z2CNYcvtlO>CW?SQ_yCTt$0$ZLY_rLO$*%LmcW{C~xkk>w!>BwxJUvAwqG6cOO7TUg zn;)WqR7+roT5pPN2M()|ZrWeOj{M;_s?2YibE`5@s^P4tSt9il>q=J{>}Y{s>=!GG z#n&uph@u&%4N3T+)?j0V#aV2RHGMnFt-QsWh1mRF{gw-!BF(Svy&_m=I!v{`u^PtZ z1e6rm$xZb;vw?$gcI?F6xpPl}xzjc4#!OW^Zhxe31BoOHukStskw!`KX8zCntbLOI z`|mMdbG*11wL2;}B4qNNKV-7|8ibK;JJp{||Wm z|EHWuT0fz}@(U`z%!C|9{RHKoztr#xD7$ZEphh{pU^oc#;!FF5w$98`Y} zjhd?2yMqoV{msmO!1ccl^NUmG)-yi?%t4XALjvEw(3(y#oBW*k7ruW<_a7WC{)5*4 zHRk^naC2pU`vGQ&(nY(M0lVH7_eB`cvk ({ + loggedIn: window.localStorage.getItem("authtoken") !== null, + token: window.localStorage.getItem("authtoken"), + username: '', + email: '', + admin: false, +}) + + +export const reducer = (state, action) => { + return {...state, ...action.response} +} + +export async function authenticate(token) { + if (token == null) + return defaultAuth() + + const {status, json} = await query("/account/info", {token}).catch(() => { + toast.error("The authentication server is offline!") + return defaultAuth() + }) + + if (status !== 200) { + window.localStorage.removeItem("authtoken") + toast.warn("You have been logged out.") + return defaultAuth() + } + console.debug("Authentication Response:", json) + + const {email, username, admin} = json; + return {username, email, admin, loggedIn: true} +} + +export async function registration(username, email, password) { + const {status, json} = await query("/register", {username, email, password}).catch(() => { + return {status: 500, json: {reason: "The authentication server is offline!"}} + }) + + console.debug("Registration Response:", json) + return {status, json} +} + +export async function login(usernameOrEmail, password) { + const {status, json} = await query("/login", {usernameOrEmail, password}).catch(() => { + return {status: 500, json: {reason: "The authentication server is offline!"}} + }) + console.debug("Login Response:", json) + + return {status, json} +} + +export function logout(token) { + window.localStorage.removeItem("authtoken") + query("/logout", {token}).then(() => { + toast.warn("You have been logged out.") + }) + return defaultAuth() +} + +export async function query(url, data) { + console.debug("FETCH: " + SERVER_URL + url + " - " + JSON.stringify(data)) + let response = await fetch(SERVER_URL + url, { + method: "POST", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify(data) + }) + + return {status: response.status, json: await response.json()} +} \ No newline at end of file diff --git a/src/components/FileManualForm.js b/src/components/FileManualForm.js new file mode 100644 index 0000000..eaa2854 --- /dev/null +++ b/src/components/FileManualForm.js @@ -0,0 +1,98 @@ +import React, {useContext, useState} from 'react'; +import {toast} from "react-toastify"; +import {AuthContext} from "../App"; +import {useForm} from "react-hook-form"; +import {query} from "../auth"; +import {Input} from "../custom"; + +function FileManualForm() { + const {authState} = useContext(AuthContext) + const [manualError, setManualError] = useState("") + const {register, handleSubmit, errors, setError, reset} = useForm(); + + const manualUpload = async (data) => { + const {status, json} = await query("/data/add", data).catch(() => { + return {status: 500, json: {reason: "The upload server is offline!"}} + }) + console.debug("Manual Upload Response:", json) + return {status, json} + } + + function submitManual(data) { + let req = data + + let split = data.date.split(/[/-]/); + // noinspection JSCheckFunctionSignatures + let date = new Date(split[2], Number(split[0]) - 1, split[1]) + req.date = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + if (date > new Date()) return setError("date", "time", "Your date must be in the past.") + if (date < new Date(1900, 0, 0)) return setError("date", "time", "Your date must be after 1900.") + if (date.getDay() === 0) return setError("date", "format", "Invalid Date format (MM-DD-YYYY)") + + if (isNaN(parseFloat(data["precipitation"]))) { + setError("precipitation", "format", "Invalid format. Precipitation must be a number. E.g 0.24") + } + req.precipitation = parseFloat(data["precipitation"]) + req.token = authState.token; + + (async () => { + let {json, status} = await manualUpload(data) + if (status !== 200) return setManualError(json.reason) + reset() + toast.success("Entry successfully uploaded") + })(); + } + + + return ( +
+ +
Upload Individual Entry
+ {manualError &&
+ {manualError} +
+ } + + + + + + + + + + + +
+ +
+ +
+ ); +} + +export default FileManualForm; \ No newline at end of file diff --git a/src/components/FileUploadForm.js b/src/components/FileUploadForm.js new file mode 100644 index 0000000..5fa0fe5 --- /dev/null +++ b/src/components/FileUploadForm.js @@ -0,0 +1,129 @@ +import React, {useCallback, useContext, useEffect, useReducer, useRef, useState} from 'react'; +import {toast} from "react-toastify"; +import {AuthContext} from "../App"; +import {SERVER_URL} from "../auth"; +import {Input} from "../custom"; + +const LIMIT = 2 * 1024 * 1024; // 2 mb + +const dispatch = (state, action) => { + switch (action.type) { + case "lat": + return {...state, lat: action.value} + case "long": + return {...state, long: action.value} + default: + return; + } +} + +function FileUploadForm() { + const {authState} = useContext(AuthContext) + const [files, setFiles] = useState(null); + const [load, setLoad] = useState(0) + const [status, setStatus] = useState("Upload a file") + const [latLong, setLatLong] = useReducer(dispatch, {lat: "", long: ""}, undefined) + let form = useRef(null); + + async function query(url, data) { + console.debug("FETCH: " + SERVER_URL + url + " - " + data) + return new Promise((resolve, reject) => { + let req = new XMLHttpRequest() + req.open('post', SERVER_URL + url) + req.upload.addEventListener('progress', e => { + if (e.loaded === e.total) setStatus("Processing...") + else { + let percent = (e.loaded / e.total * 100) + setLoad(percent) + setStatus("Uploading " + percent.toFixed(0) + "%") + } + }); + req.addEventListener('load', () => { + resolve({status: req.status, json: JSON.parse(req.response)}) + }); + req.addEventListener('error', e => { + resolve({status: req.status, json: JSON.parse(req.response)}) + }) + req.send(data) + }) + } + + const upload = useCallback(async () => { + if (!files || files.length === 0) return + const target = files[0] + if (target.size > LIMIT) return toast.error("File size too large! Max 2 mb.") + if (!target.name.includes(".xlsx")) return toast.error("Invalid file type!") + const {lat, long} = latLong; + + setStatus("Uploading") + + let file = new FormData() + file.append("file", target) + file.append("token", authState.token); + file.append("latitude", lat); + file.append("longitude", long); + + let {status, json} = await query("/data/upload", file) + form.current.reset(); + + setStatus("Upload a file") + setLoad(0) + + if (status !== 200) return toast.error(json.reason) + return toast.success("File successfully uploaded.") + }, [files, authState.token, form, latLong]) + + useEffect(() => { + (async () => upload())(); + }, [files, authState.token, upload, authState, setLoad, setStatus]) + + return
+
+
Upload File Entries
+
+ Click the button to upload an .xlsx file +
+
+
+
+

Latitude and longitude is required if your data doesn't have it

+ + setLatLong({type: "lat", value: e})}/> + setLatLong({type: "long", value: e})}/> + +
+ +