diff --git a/assets/images/carrot.png b/assets/images/carrot.png new file mode 100644 index 0000000..342d99a Binary files /dev/null and b/assets/images/carrot.png differ diff --git a/package-lock.json b/package-lock.json index 9b27c96..f374cf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1400,6 +1400,14 @@ } } }, + "@material-ui/icons": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.9.1.tgz", + "integrity": "sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg==", + "requires": { + "@babel/runtime": "^7.4.4" + } + }, "@material-ui/system": { "version": "3.0.0-alpha.2", "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-3.0.0-alpha.2.tgz", @@ -1763,6 +1771,11 @@ "@types/istanbul-lib-report": "*" } }, + "@types/js-cookie": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.6.tgz", + "integrity": "sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw==" + }, "@types/json-schema": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", @@ -2152,6 +2165,11 @@ "@xtuc/long": "4.2.2" } }, + "@xobotyi/scrollbar-width": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", + "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -3155,6 +3173,11 @@ "resolved": "https://registry.npmjs.org/bootstrap-css-only/-/bootstrap-css-only-4.4.1.tgz", "integrity": "sha512-iBgNli7RnedBFwn6sMTQoAZ8WgIwmX4kF1rckfj+pgro5q/Q0DbLtcpfH60XoFnCXzbEJU/khC/B2EQap89mCg==" }, + "bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3979,6 +4002,14 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, "core-js": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", @@ -4167,6 +4198,15 @@ } } }, + "css-in-js-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", + "requires": { + "hyphenate-style-name": "^1.0.2", + "isobject": "^3.0.1" + } + }, "css-loader": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", @@ -4960,6 +5000,14 @@ "is-arrayish": "^0.2.1" } }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "requires": { + "stackframe": "^1.1.1" + } + }, "es-abstract": { "version": "1.17.5", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", @@ -5773,6 +5821,16 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fast-shallow-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", + "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" + }, + "fastest-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-1.0.1.tgz", + "integrity": "sha1-kSLUBtTJ2YvqZEpraFPVh0uHsCg=" + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -6580,6 +6638,14 @@ } } }, + "html-parse-stringify2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz", + "integrity": "sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o=", + "requires": { + "void-elements": "^2.0.1" + } + }, "html-webpack-plugin": { "version": "4.0.0-beta.11", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", @@ -6694,6 +6760,14 @@ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==" }, + "i18next": { + "version": "19.6.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-19.6.2.tgz", + "integrity": "sha512-Zyd/Z32FY+sD+Eg6sLj5DeDSlrIN3WZ4onuOBRGcjDx/rvodsyUZ9TJ2Y+3aD9Vu8MPbiMU2WesIER/rs1ioyw==", + "requires": { + "@babel/runtime": "^7.10.1" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -6819,6 +6893,15 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, + "inline-style-prefixer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-4.0.2.tgz", + "integrity": "sha512-N8nVhwfYga9MiV9jWlwfdj1UDIaZlBFu4cJSJkIr7tZX7sHpHhGR5su1qdpW+7KPL8ISTvCIkcaFi/JdBknvPg==", + "requires": { + "bowser": "^1.7.3", + "css-in-js-utils": "^2.0.0" + } + }, "inquirer": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", @@ -7766,6 +7849,11 @@ "supports-color": "^6.1.0" } }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8715,6 +8803,21 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, + "nano-css": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.3.0.tgz", + "integrity": "sha512-uM/9NGK9/E9/sTpbIZ/bQ9xOLOIHZwrrb/CRlbDHBU/GFS7Gshl24v/WJhwsVViWkpOXUmiZ66XO7fSB4Wd92Q==", + "requires": { + "css-tree": "^1.0.0-alpha.28", + "csstype": "^2.5.5", + "fastest-stable-stringify": "^1.0.1", + "inline-style-prefixer": "^4.0.0", + "rtl-css-js": "^1.9.0", + "sourcemap-codec": "^1.4.1", + "stacktrace-js": "^2.0.0", + "stylis": "3.5.0" + } + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -11052,6 +11155,23 @@ "warning": "^4.0.1" } }, + "react-feather": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/react-feather/-/react-feather-2.0.8.tgz", + "integrity": "sha512-J0dCEOvOxpovHeOVj3+8mAhN3/UERTfX6rSxnV6x4E+0s+STY536jhSjRfpSvTQA0SSFjYr4KrpPfdsLmK+zZg==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "react-i18next": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.7.0.tgz", + "integrity": "sha512-8tvVkpuxQlubcszZON+jmoCgiA9gCZ74OAYli9KChPhETtq8pJsANBTe9KRLRLmX3ubumgvidURWr0VvKz1tww==", + "requires": { + "@babel/runtime": "^7.3.1", + "html-parse-stringify2": "2.0.1" + } + }, "react-image-lightbox": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-image-lightbox/-/react-image-lightbox-5.1.1.tgz", @@ -11216,6 +11336,15 @@ "prop-types": "^15.5.8" } }, + "react-spring": { + "version": "8.0.27", + "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-8.0.27.tgz", + "integrity": "sha512-nDpWBe3ZVezukNRandTeLSPcwwTMjNVu1IDq9qA/AMiUqHuRN4BeSWvKr3eIxxg1vtiYiOLy4FqdfCP5IoP77g==", + "requires": { + "@babel/runtime": "^7.3.1", + "prop-types": "^15.5.8" + } + }, "react-text-mask": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/react-text-mask/-/react-text-mask-5.4.3.tgz", @@ -11246,6 +11375,44 @@ "prop-types": "^15.6.2" } }, + "react-universal-interface": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", + "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==" + }, + "react-use": { + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/react-use/-/react-use-15.3.2.tgz", + "integrity": "sha512-DAbc+pVedZC4P5rLBKdIvTTB03+4T/pR6jZ2pKQPgqfq4UC1Oymmbehon5z8XXSUgZs0tgIvbBzVEdiWMS9k+g==", + "requires": { + "@types/js-cookie": "2.2.6", + "@xobotyi/scrollbar-width": "1.9.5", + "copy-to-clipboard": "^3.2.0", + "fast-deep-equal": "^3.1.3", + "fast-shallow-equal": "^1.0.0", + "js-cookie": "^2.2.1", + "nano-css": "^5.2.1", + "react-universal-interface": "^0.6.2", + "resize-observer-polyfill": "^1.5.1", + "screenfull": "^5.0.0", + "set-harmonic-interval": "^1.0.1", + "throttle-debounce": "^2.1.0", + "ts-easing": "^0.2.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "tslib": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz", + "integrity": "sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==" + } + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -11588,6 +11755,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "resolve": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", @@ -11743,6 +11915,14 @@ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" }, + "rtl-css-js": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.14.0.tgz", + "integrity": "sha512-Dl5xDTeN3e7scU1cWX8c9b6/Nqz3u/HgR4gePc1kWXYiQWVQbKCEyK6+Hxve9LbcJ5EieHy1J9nJCN3grTtGwg==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -11871,6 +12051,11 @@ "ajv-keywords": "^3.4.1" } }, + "screenfull": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.0.2.tgz", + "integrity": "sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ==" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -12007,6 +12192,11 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-harmonic-interval": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", + "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==" + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -12346,6 +12536,11 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -12442,11 +12637,50 @@ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, + "stack-generator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", + "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", + "requires": { + "stackframe": "^1.1.1" + } + }, "stack-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, + "stacktrace-gps": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz", + "integrity": "sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==", + "requires": { + "source-map": "0.5.6", + "stackframe": "^1.1.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + } + } + }, + "stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "requires": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -12781,6 +13015,11 @@ } } }, + "stylis": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz", + "integrity": "sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw==" + }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -13007,6 +13246,11 @@ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" }, + "throttle-debounce": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.2.1.tgz", + "integrity": "sha512-i9hAVld1f+woAiyNGqWelpDD5W1tpMroL3NofTz9xzwq6acWBlO2dC8k5EFSZepU6oOINtV5Q3aSPoRg7o4+fA==" + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -13124,6 +13368,11 @@ "repeat-string": "^1.6.1" } }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -13146,6 +13395,11 @@ "punycode": "^2.1.0" } }, + "ts-easing": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", + "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" + }, "ts-pnp": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", @@ -13484,6 +13738,11 @@ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", diff --git a/package.json b/package.json index c4b9d26..855216a 100644 --- a/package.json +++ b/package.json @@ -3,14 +3,20 @@ "version": "0.1.0", "private": true, "dependencies": { + "@material-ui/icons": "^4.9.1", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", + "i18next": "^19.6.2", "mdbreact": "^4.27.0", "react": "^16.13.1", "react-dom": "^16.13.1", + "react-feather": "^2.0.8", + "react-i18next": "^11.7.0", "react-router-dom": "^5.2.0", - "react-scripts": "3.4.1" + "react-scripts": "3.4.1", + "react-spring": "^8.0.27", + "react-use": "^15.3.2" }, "scripts": { "start": "react-scripts start", diff --git a/src/AddProduct/add-product.js b/src/AddProduct/add-product.js new file mode 100644 index 0000000..25f5c88 --- /dev/null +++ b/src/AddProduct/add-product.js @@ -0,0 +1,54 @@ +import React from "react"; +import { MDBInput, MDBContainer, MDBRow, MDBBtn, MDBCol,MDBDropdownItem,MDBDropdownMenu ,MDBDropdown,MDBDropdownToggle} from "mdbreact"; + +const AddProduct = () => { + return ( + + + +
+

Add Product

+
+ + +
+
+
+ + Upload +
+
+ + +
+
+ + + Categories + + + category 1 + category 2 + category 3 + category 4 + category 5 + category 6 + + +
+ Add Product +
+
+
+
+
+ ); +} + +export default AddProduct; \ No newline at end of file diff --git a/src/ProductInventoryPage/productInventory.js b/src/ProductInventoryPage/productInventory.js index a0c25ec..b80481e 100644 --- a/src/ProductInventoryPage/productInventory.js +++ b/src/ProductInventoryPage/productInventory.js @@ -1,6 +1,6 @@ import React from 'react' -import productInventoryStyle from "./productInventoryStyle.module.css" +// import productInventoryStyle from "./productInventoryStyle.module.css" //className={productInventoryPage.className} using module.css to avoid collision of same css variable in multiple files const ProductInventoryPage = () =>{ diff --git a/src/ProductListPage/productList.js b/src/ProductListPage/productList.js index 5176cb9..f91225b 100644 --- a/src/ProductListPage/productList.js +++ b/src/ProductListPage/productList.js @@ -1,6 +1,6 @@ import React from 'react'; -import { MDBTable, MDBTableBody, MDBTableHead } from 'mdbreact'; -import { MDBContainer } from '../src'; +import { MDBTable,MDBContainer, MDBTableBody, MDBTableHead } from 'mdbreact'; +// import { } from '../'; // import { MDBTypography, MDBBox } from 'mdbreact'; const BasicTable = () => { diff --git a/src/ProductPage/product.js b/src/ProductPage/product.js index 4adcc4c..73a93b4 100644 --- a/src/ProductPage/product.js +++ b/src/ProductPage/product.js @@ -1,6 +1,6 @@ import React from 'react' -import productStyle from "./productStyle.module.css" +// import productStyle from "./productStyle.module.css" //className={ProductInventoryPage.className} using module.css to avoid collision of same css variable in multiple files diff --git a/src/covidDashboard/Navbar.js b/src/covidDashboard/Navbar.js new file mode 100644 index 0000000..37f444a --- /dev/null +++ b/src/covidDashboard/Navbar.js @@ -0,0 +1,161 @@ +import { + SLIDE_IN, + SLIDE_OUT, + SLIDE_IN_MOBILE, + SLIDE_OUT_MOBILE, + } from './animation'; + + import React, {useState, useCallback, useRef} from 'react'; + import * as Icon from 'react-feather'; + import {useTranslation} from 'react-i18next'; + import {Link} from 'react-router-dom'; + import {useSpring, useTransition, animated} from 'react-spring'; + import {useLockBodyScroll, useWindowSize} from 'react-use'; + + function Navbar({ + pages, + darkMode, + }) { + + + const [expand, setExpand] = useState(false); + + useLockBodyScroll(expand); + const windowSize = useWindowSize(); + + const [spring, set, stop] = useSpring(() => ({opacity: 0})); + set({opacity: 1}); + stop(); + + const transitions = useTransition(expand, null, { + from: windowSize.width < 769 ? SLIDE_IN_MOBILE : SLIDE_IN, + enter: windowSize.width < 769 ? SLIDE_OUT_MOBILE : SLIDE_OUT, + leave: windowSize.width < 769 ? SLIDE_IN_MOBILE : SLIDE_IN, + config: {mass: 1, tension: 210, friction: 26}, + }); + + const handleMouseEnter = useCallback(() => { + if (windowSize.width > 769) { + setExpand(true); + } + }, [windowSize.width]); + + return ( + + + +
+ + Covid19India + +
+ +
+ {windowSize.width < 769 && ( + + )} + + {windowSize.width > 769 && ( + + + + + + + + + + + + + + + + + + + + + )} +
+ + {transitions.map(({item, key, props}) => + item ? ( + + + + ) : ( + + ) + )} +
+ ); + } + + function Expand({pages, setExpand, darkMode, windowSize}) { + const expandElement = useRef(null); + const {t} = useTranslation(); + + const handleMouseLeave = useCallback(() => { + windowSize.width > 768 && setExpand(false); + }, [setExpand, windowSize.width]); + + return ( +
+ {pages.map((page, i) => { + if (page.showInNavbar === true) { + return ( + + + {t(page.displayName)} + + + ); + } + return null; + })} + + {windowSize.width < 768 && } + +
+
{t('A crowdsourced initiative.')}
+
+
+ ); + } + + export default Navbar; + + const navLinkProps = (path, animationDelay) => ({ + className: `${window.location.pathname === path ? 'focused' : ''}`, + }); + + const activeNavIcon = (path) => ({ + style: { + stroke: window.location.pathname === path ? '#4c75f2' : '', + }, + }); + + const SunMoon = ({darkMode}) => { + return ( +
+
+ {darkMode.value ? : } +
+
+ ); + }; \ No newline at end of file diff --git a/src/covidDashboard/animation.js b/src/covidDashboard/animation.js new file mode 100644 index 0000000..6a2db65 --- /dev/null +++ b/src/covidDashboard/animation.js @@ -0,0 +1,85 @@ + +/* + * Navbar + */ + +export const SLIDE_IN = { + position: 'absolute', + transform: 'translate3d(-20rem, 0, 0)', + height: '100vh', + zIndex: -1, + }; + + export const SLIDE_OUT = { + position: 'absolute', + transform: 'translate3d(10rem, 0, 0)', + }; + + export const SLIDE_IN_MOBILE = { + opacity: 1, + position: 'absolute', + height: '100vh', + top: 64, + zIndex: 999, + }; + + export const SLIDE_OUT_MOBILE = { + opacity: 1, + position: 'absolute', + height: '100vh', + top: 64, + zIndex: 999, + }; + + /* + * Tooltip + */ + + export const TOOLTIP_FADE_IN = { + opacity: 1, + transform: 'translate3d(0, 0px, 0)', + zIndex: 999, + position: 'absolute', + pointerEvents: 'none', + }; + + export const TOOLTIP_FADE_OUT = { + opacity: 0, + transform: 'translate3d(0, 2px, 0)', + zIndex: 999, + position: 'absolute', + pointerEvents: 'none', + }; + + /* + * Language Switcher + */ + + export const ENTER_IN = { + opacity: 1, + marginTop: '7.5rem', + marginBottom: '30rem', + }; + + export const ENTER_OUT = { + opacity: 0, + height: '0rem', + marginTop: '0rem', + marginBottom: '0rem', + }; + + /* + * Table + */ + + export const TABLE_FADE_IN = { + opacity: 1, + transform: 'translate3d(0, 0px, 0)', + height: 200, + }; + + export const TABLE_FADE_OUT = { + opacity: 0, + transform: 'translate3d(0, 2px, 0)', + height: 0, + }; \ No newline at end of file diff --git a/src/covidDashboard/locales.json b/src/covidDashboard/locales.json new file mode 100644 index 0000000..1f1e615 --- /dev/null +++ b/src/covidDashboard/locales.json @@ -0,0 +1,13 @@ +{ + "english": "English", + "hindi": "हिंदी", + "bengali": "বাংলা", + "gujarati": "ગુજરાતી", + "kannada": "ಕನ್ನಡ", + "malayalam": "മലയാളം", + "marathi": "मराठी", + "odiya": "ଓଡିଆ", + "punjabi": "ਪੰਜਾਬੀ", + "tamil": "தமிழ்", + "telugu": "తెలుగు" +} \ No newline at end of file diff --git a/src/dashboard/dashboard.js b/src/dashboard/dashboard.js new file mode 100644 index 0000000..5782a5a --- /dev/null +++ b/src/dashboard/dashboard.js @@ -0,0 +1,96 @@ +// // import React from 'react'; +// import NavbarPage from './navbar'; +// import Product_card from './product-card'; +// import { BrowserRouter as Router } from 'react-router-dom'; +// import { MDBCol, MDBRow, MDBListGroup, MDBListGroupItem} from 'mdbreact'; + +// const Dashboard = () => { + + + +// return ( + // + // + // + // + // + // + // + // + // Add Product + // View Products + // Inventories + // Edit Product + // + // + // + // + // + // + // + // + // + // + // + // + // + // +// ) +// } + +// export default Dashboard; +import React, { Component } from 'react'; +import { BrowserRouter as Router } from 'react-router-dom'; +import NavbarPage from './navbar'; +import Product_card from './product-card'; +import { MDBCol, MDBRow, MDBListGroup, MDBListGroupItem} from 'mdbreact'; + +class Dashboard extends Component { + state = { + DashboardItem: '1' + }; + + togglePills = tab => () => { + const { activeItem } = this.state; + if (activeItem !== tab) { + this.setState({ + DashboardItem: tab + }); + } + }; + + render() { + const { DashboardItem } = this.state; + + return ( + + + + + + + + + Add Product + View Products + Inventories + Edit Product + + + + + + + + + + + + + + + ); + } +} + +export default Dashboard; \ No newline at end of file diff --git a/src/dashboard/navbar.js b/src/dashboard/navbar.js new file mode 100644 index 0000000..e9a6d98 --- /dev/null +++ b/src/dashboard/navbar.js @@ -0,0 +1,44 @@ +import React, { Component } from "react"; +import { +MDBNavbar, MDBNavbarBrand, MDBNavbarNav, MDBNavItem, MDBNavLink, MDBNavbarToggler, MDBCollapse, MDBFormInline, +MDBDropdown, MDBDropdownToggle, MDBDropdownMenu, MDBDropdownItem, MDBIcon +} from "mdbreact"; +import { BrowserRouter as Router } from 'react-router-dom'; + +class NavbarPage extends Component { +state = { + isOpen: false +}; + +toggleCollapse = () => { + this.setState({ isOpen: !this.state.isOpen }); +} + +render() { + return ( + + + + Dart + + + + + + + + + + + + + + + + + + ); + } +} + +export default NavbarPage; \ No newline at end of file diff --git a/src/dashboard/product-card.js b/src/dashboard/product-card.js new file mode 100644 index 0000000..9caf72f --- /dev/null +++ b/src/dashboard/product-card.js @@ -0,0 +1,33 @@ +import React from "react"; +import { + MDBCard, MDBCardBody, MDBCardImage, MDBCardTitle, MDBCardText, + MDBBadge +} from "mdbreact"; +import { BrowserRouter as Router } from 'react-router-dom'; + +const Product_card = () => { + return ( + + + + + + Food + + + Product 1 + + + Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe + eveniet ut et voluptates. Temporibus autem quibusdam. Lorem Ipsum dolor ament. + + Food + Rice + + + + + ); +} + +export default Product_card; \ No newline at end of file diff --git a/src/route.js b/src/route.js index c8c4ad1..3b991f3 100644 --- a/src/route.js +++ b/src/route.js @@ -5,6 +5,9 @@ import ProductPage from './ProductPage/product' import ProductInventoryPage from './ProductInventoryPage/productInventory' import ProductListPage from './ProductListPage/productList' import SignInPage from './SignInPage/signin' +import Dashboard from './dashboard/dashboard'; +import Navbar from './covidDashboard/Navbar'; +import AddProduct from './AddProduct/add-product'; const Router = () =>{ return( @@ -14,6 +17,9 @@ const Router = () =>{ + + + )