diff --git a/package-lock.json b/package-lock.json index c6e92576..8a42bbdd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1631,6 +1631,12 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==" }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -2371,6 +2377,17 @@ "es-abstract": "^1.17.0-next.1" } }, + "array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -2484,10 +2501,16 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, + "axe-core": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", + "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", + "dev": true + }, "axobject-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz", - "integrity": "sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" }, "babel-code-frame": { "version": "6.26.0", @@ -2945,9 +2968,9 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "bootstrap": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz", - "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz", + "integrity": "sha512-Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA==" }, "brace-expansion": { "version": "1.1.11", @@ -4628,9 +4651,9 @@ "integrity": "sha512-2jhQxJKcjcSpVOQm0NAfuLq8o+130blrcawoumdXT6411xG/xIAOyZodO/y7WTaYlz/NHe3sCCAe/cJLnDsqTw==" }, "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -4990,31 +5013,125 @@ } }, "eslint-config-airbnb": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz", - "integrity": "sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz", + "integrity": "sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg==", "dev": true, "requires": { - "eslint-config-airbnb-base": "^14.1.0", + "eslint-config-airbnb-base": "^14.2.0", "object.assign": "^4.1.0", - "object.entries": "^1.1.1" + "object.entries": "^1.1.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + } } }, "eslint-config-airbnb-base": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.1.0.tgz", - "integrity": "sha512-+XCcfGyCnbzOnktDVhwsCAx+9DmrzEmuwxyHUJpw+kqBVT744OUBrB09khgFKlK1lshVww6qXGsYPZpavoNjJw==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz", + "integrity": "sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q==", "dev": true, "requires": { "confusing-browser-globals": "^1.0.9", "object.assign": "^4.1.0", - "object.entries": "^1.1.1" + "object.entries": "^1.1.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + } } }, "eslint-config-prettier": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz", - "integrity": "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", + "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -5037,9 +5154,9 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", - "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "requires": { "debug": "^2.6.9", "resolve": "^1.13.1" @@ -5073,9 +5190,9 @@ } }, "eslint-module-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", - "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -5156,28 +5273,31 @@ } }, "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", + "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", + "dev": true, "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.1", + "eslint-import-resolver-node": "^0.3.3", + "eslint-module-utils": "^2.6.0", "has": "^1.0.3", "minimatch": "^3.0.4", - "object.values": "^1.1.0", + "object.values": "^1.1.1", "read-pkg-up": "^2.0.0", - "resolve": "^1.12.0" + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -5186,6 +5306,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, "requires": { "esutils": "^2.0.2", "isarray": "^1.0.0" @@ -5195,6 +5316,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { "locate-path": "^2.0.0" } @@ -5203,6 +5325,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -5214,6 +5337,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -5222,12 +5346,14 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { "p-try": "^1.0.0" } @@ -5236,6 +5362,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -5243,17 +5370,20 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, "requires": { "pify": "^2.0.0" } @@ -5262,6 +5392,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, "requires": { "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", @@ -5272,90 +5403,175 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, "requires": { "find-up": "^2.0.0", "read-pkg": "^2.0.0" } }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true } } }, "eslint-plugin-jsx-a11y": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", - "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", + "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", + "dev": true, "requires": { - "@babel/runtime": "^7.4.5", - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", + "@babel/runtime": "^7.10.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.2", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^7.0.2", + "axe-core": "^3.5.4", + "axobject-query": "^2.1.2", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.2.1" + "jsx-ast-utils": "^2.4.1", + "language-tags": "^1.0.5" }, "dependencies": { + "@babel/runtime": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", + "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.10.5.tgz", + "integrity": "sha512-RMafpmrNB5E/bwdSphLr8a8++9TosnyJp98RZzI6VOx2R2CCMpsXXXRvmI700O9oEKpXdZat6oEK68/F0zjd4A==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + } + }, "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.0.0.tgz", + "integrity": "sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w==", + "dev": true } } }, "eslint-plugin-prettier": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", - "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz", - "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz", + "integrity": "sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg==", + "dev": true, "requires": { "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.2.3", - "object.entries": "^1.1.1", + "jsx-ast-utils": "^2.4.1", + "object.entries": "^1.1.2", "object.fromentries": "^2.0.2", "object.values": "^1.1.1", "prop-types": "^15.7.2", - "resolve": "^1.15.1", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.2", - "xregexp": "^4.3.0" + "resolve": "^1.17.0", + "string.prototype.matchall": "^4.0.2" }, "dependencies": { "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "requires": { "esutils": "^2.0.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } } } }, @@ -8970,11 +9186,11 @@ } }, "jsx-ast-utils": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", - "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", "requires": { - "array-includes": "^3.0.3", + "array-includes": "^3.1.1", "object.assign": "^4.1.0" } }, @@ -8996,6 +9212,21 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, + "language-subtag-registry": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", + "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", @@ -9125,9 +9356,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -12325,9 +12556,9 @@ "integrity": "sha512-AjC7UOZMvygrWTc2hKxTDvlMXEtbmA0IgJjmkhgmQQ3RkXrWR11xEagLGFGaNyaPnmg24oaIiaNPnEoftUhfXA==" }, "react-icons": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-3.9.0.tgz", - "integrity": "sha512-gKbYKR+4QsD3PmIHLAM9TDDpnaTsr3XZeK1NTAb6WQQ+gxEdJ0xuCgLq0pxXdS7Utg2AIpcVhM1ut/jlDhcyNg==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-3.10.0.tgz", + "integrity": "sha512-WsQ5n1JToG9VixWilSo1bHv842Cj5aZqTGiS3Ud47myF6aK7S/IUY2+dHcBdmkQcCFRuHsJ9OMUI0kTDfjyZXQ==", "requires": { "camelcase": "^5.0.0" }, @@ -12438,11 +12669,200 @@ "workbox-webpack-plugin": "4.3.1" }, "dependencies": { + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "eslint-plugin-import": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", + "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.1", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.12.0" + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", + "requires": { + "@babel/runtime": "^7.4.5", + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.2", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^7.0.2", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.1" + } + }, + "eslint-plugin-react": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz", + "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==", + "requires": { + "array-includes": "^3.1.1", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.3", + "object.entries": "^1.1.1", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.15.1", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.2", + "xregexp": "^4.3.0" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, "resolve": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", @@ -12455,22 +12875,27 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" } } }, "react-scroll": { - "version": "1.7.16", - "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.7.16.tgz", - "integrity": "sha512-f4M5AdL+3cw3MJ7c/T0hPMY2iHCeQLDXV13lRanAFQ6JIt9xyAdHCpTH9mLUQt9SQh4pRarD+Qc7KhU6qMx3Yg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.8.0.tgz", + "integrity": "sha512-oZfBXPhcxYPR8elI9tC3ORT6+iqiPPJWslsdR9intbNI5PVSa4XoAfC0I/cB3zk5lxQ/NSexCnT+8RqJL8mSZQ==", "requires": { "lodash.throttle": "^4.1.1", - "prop-types": "^15.5.8" + "prop-types": "^15.7.2" } }, "react-table": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.0.0.tgz", - "integrity": "sha512-/RKUYLuqrupUs0qHdjdQLmgwdQ9mgXPnpshqv2T+OQUGhTu0XuLXVc6GOIywemXNf6qjL3dj81O6zALLK74Emw==" + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.3.0.tgz", + "integrity": "sha512-VQlVgvKItkpO+tAtWf/xdn9a8RU8gVqG25Ymrw9PczyBrM2Cr+HivHVQ2VsYWy8SieL0bcCNk3C++mbtWgXLfQ==" }, "react-test-renderer": { "version": "16.13.1", @@ -12483,6 +12908,14 @@ "scheduler": "^0.19.1" } }, + "react-toggle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz", + "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==", + "requires": { + "classnames": "^2.2.5" + } + }, "react-tooltip": { "version": "3.11.6", "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.11.6.tgz", @@ -12503,14 +12936,13 @@ } }, "reactstrap": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-8.4.1.tgz", - "integrity": "sha512-oAjp9PYYUGKl7SLXwrQ1oRIrYw0MqfO2mUqYgGapFKHG2uwjEtLip5rYxtMujkGx3COjH5FX1WtcfNU4oqpH0Q==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-8.5.1.tgz", + "integrity": "sha512-igpdw8DiW48ZtwGOo2unwlsILFlF7deiqFUAqc3wrsX/0H0OkvmezJdkjJx2X9jaHfjGdPpm0vu5VN/kk7tv+A==", "requires": { "@babel/runtime": "^7.2.0", "classnames": "^2.2.3", "prop-types": "^15.5.8", - "react-lifecycles-compat": "^3.0.4", "react-popper": "^1.3.6", "react-transition-group": "^2.3.1" } @@ -13949,6 +14381,52 @@ "function-bind": "^1.1.1" } }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, "string.prototype.trimleft": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", @@ -13967,6 +14445,52 @@ "function-bind": "^1.1.1" } }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -14604,6 +15128,35 @@ "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "tslib": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", @@ -16612,9 +17165,9 @@ } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, "whatwg-encoding": { "version": "1.0.5", diff --git a/package.json b/package.json index 35d6e25a..0f9fa654 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", - "bootstrap": "^4.4.1", + "bootstrap": "^4.5.0", "classnames": "^2.2.6", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.2", @@ -16,24 +16,25 @@ "react": "^16.12.0", "react-dom": "^16.12.0", "react-ga": "^2.7.0", - "react-icons": "^3.8.0", + "react-icons": "^3.10.0", "react-markdown": "^4.3.1", "react-scripts": "^3.4.0", - "react-scroll": "^1.7.15", - "react-table": "^7.0.0-rc.15", + "react-scroll": "^1.8.0", + "react-table": "^7.3.0", "react-test-renderer": "^16.12.0", + "react-toggle": "^4.1.1", "react-tooltip": "^3.11.2", - "reactstrap": "^8.2.0" + "reactstrap": "^8.5.1" }, "devDependencies": { "babel-eslint": "^10.0.3", "eslint": "^6.8.0", - "eslint-config-airbnb": "^18.0.1", - "eslint-config-prettier": "^6.9.0", - "eslint-plugin-import": "^2.19.1", - "eslint-plugin-jsx-a11y": "^6.2.3", - "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-react": "^7.17.0", + "eslint-config-airbnb": "^18.2.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-react": "^7.20.3", "husky": "^3.1.0", "prettier": "^1.19.1", "pretty-quick": "^2.0.1" diff --git a/src/components/Table/index.js b/src/components/Table/index.js index fa32432d..c4d4db7b 100644 --- a/src/components/Table/index.js +++ b/src/components/Table/index.js @@ -6,6 +6,7 @@ import { Badge, NavLink, } from 'reactstrap'; +import Toggle from 'react-toggle'; import ReactTooltip from 'react-tooltip'; import { useTable, useFilters, useSortBy } from 'react-table'; import { FaQuestionCircle, FaLock } from 'react-icons/fa'; @@ -18,20 +19,41 @@ import { Event } from '../Shared/Tracking'; import questions from '../../data'; +import 'react-toggle/style.css'; import './styles.scss'; const images = require.context('../../icons', true); const Table = () => { - const [checked, setChecked] = useState( + let checkedList = JSON.parse(localStorage.getItem('checked')) || - new Array(questions.length).fill(false), + new Array(questions.length).fill(false); + + if (checkedList.length !== questions.length) { + const newCheckedList = new Array(questions.length).fill(false); + + for (let i = 0; i < checkedList.length; i += 1) { + newCheckedList[i] = checkedList[i]; + } + + checkedList = newCheckedList; + window.localStorage.setItem('checked', JSON.stringify(checkedList)); + } + + const [checked, setChecked] = useState(checkedList); + + const [showPatterns, setShowPatterns] = useState( + JSON.parse(localStorage.getItem('showPatterns')) || new Array(1).fill(true), ); useEffect(() => { window.localStorage.setItem('checked', JSON.stringify(checked)); }, [checked]); + useEffect(() => { + window.localStorage.setItem('showPatterns', JSON.stringify(showPatterns)); + }, [showPatterns]); + const data = React.useMemo(() => questions, []); const defaultColumn = React.useMemo( @@ -54,8 +76,6 @@ const Table = () => { return ( { checked[cellInfo.row.original.id] = !checked[ @@ -108,20 +128,62 @@ const Table = () => { disableFilters: true, }, { - Header: 'Pattern', + Header: () => { + return ( + + ); + }, accessor: 'pattern', + Cell: cellInfo => { + const patterns = `${cellInfo.row.original.pattern}` + .split(',') + .map(pattern => { + if (showPatterns[0] || checked[cellInfo.row.original.id]) { + return ( + + {pattern} + + ); + } + + return ( + + *** + + ); + }); + + return {patterns}; + }, + Filter: SelectColumnFilter, }, { Header: 'Difficulty', accessor: 'difficulty', Cell: cellInfo => ( - - {cellInfo.row.original.difficulty} - + + + {cellInfo.row.original.difficulty} + + ), Filter: SelectDifficultyColumnFilter, }, @@ -172,9 +234,6 @@ const Table = () => { columns, data, defaultColumn, - initialState: { - sortBy: [{ id: 'pattern' }], - }, }, useFilters, useSortBy, diff --git a/src/components/Table/styles.scss b/src/components/Table/styles.scss index a25a9306..f55888e1 100644 --- a/src/components/Table/styles.scss +++ b/src/components/Table/styles.scss @@ -31,8 +31,13 @@ background-color: #d9534f; } - .companies { + .companies, + .patterns { justify-content: space-evenly; margin: 0; } + + .react-toggle { + top: 7px; + } } diff --git a/src/data/index.js b/src/data/index.js index 54962342..00e7bb17 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -3,7 +3,7 @@ const questions = [ id: 0, name: 'Contains Duplicate', url: 'https://leetcode.com/problems/contains-duplicate/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Apple'], @@ -12,7 +12,7 @@ const questions = [ id: 1, name: 'Missing Number', url: 'https://leetcode.com/problems/missing-number/', - pattern: 'Arrays', + pattern: ['Arrays', 'Bit Manipulation'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Microsoft', 'Apple'], @@ -22,7 +22,7 @@ const questions = [ name: 'Find All Numbers Disappeared in an Array', url: 'https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Easy', premium: false, companies: ['Microsoft', 'Apple'], @@ -31,7 +31,7 @@ const questions = [ id: 3, name: 'Single Number', url: 'https://leetcode.com/problems/single-number/', - pattern: 'Arrays', + pattern: ['Arrays', 'Bit Manipulation'], difficulty: 'Easy', premium: false, companies: [ @@ -48,7 +48,7 @@ const questions = [ id: 4, name: 'Product of Array Except Self', url: 'https://leetcode.com/problems/product-of-array-except-self/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Medium', premium: false, companies: [ @@ -70,7 +70,7 @@ const questions = [ id: 5, name: 'Find the Duplicate Number', url: 'https://leetcode.com/problems/find-the-duplicate-number/', - pattern: 'Arrays', + pattern: ['Arrays', 'Binary Search', 'Two Pointers'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Google', 'Microsoft', 'Facebook', 'Apple'], @@ -79,7 +79,7 @@ const questions = [ id: 6, name: 'Find All Duplicates in an Array', url: 'https://leetcode.com/problems/find-all-duplicates-in-an-array/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft', 'Facebook', 'Apple'], @@ -88,7 +88,7 @@ const questions = [ id: 7, name: 'Set Matrix Zeroes', url: 'https://leetcode.com/problems/set-matrix-zeroes/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon', 'Microsoft', 'Oracle'], @@ -97,7 +97,7 @@ const questions = [ id: 8, name: 'Spiral Matrix', url: 'https://leetcode.com/problems/spiral-matrix/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Medium', premium: false, companies: [ @@ -114,7 +114,7 @@ const questions = [ id: 9, name: 'Rotate Image', url: 'https://leetcode.com/problems/rotate-image/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft', 'Apple', 'Facebook'], @@ -123,7 +123,7 @@ const questions = [ id: 10, name: 'Word Search', url: 'https://leetcode.com/problems/word-search/', - pattern: 'Arrays', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: [ @@ -143,7 +143,7 @@ const questions = [ id: 11, name: 'First Missing Positive', url: 'https://leetcode.com/problems/first-missing-positive/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Hard', premium: false, companies: [ @@ -161,7 +161,7 @@ const questions = [ id: 12, name: 'Longest Consecutive Sequence', url: 'https://leetcode.com/problems/longest-consecutive-sequence/', - pattern: 'Arrays', + pattern: ['Arrays'], difficulty: 'Hard', premium: false, companies: [ @@ -179,7 +179,7 @@ const questions = [ id: 13, name: 'Letter Case Permutation', url: 'https://leetcode.com/problems/letter-case-permutation/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Easy', premium: false, companies: ['Amazon'], @@ -188,7 +188,7 @@ const questions = [ id: 14, name: 'Subsets', url: 'https://leetcode.com/problems/subsets/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: [ @@ -204,7 +204,7 @@ const questions = [ id: 15, name: 'Subsets II', url: 'https://leetcode.com/problems/subsets-ii/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Bloomberg'], @@ -213,7 +213,7 @@ const questions = [ id: 16, name: 'Permutations', url: 'https://leetcode.com/problems/permutations/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: [ @@ -233,7 +233,7 @@ const questions = [ id: 17, name: 'Permutations II', url: 'https://leetcode.com/problems/permutations-ii/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Bloomberg'], @@ -242,7 +242,7 @@ const questions = [ id: 18, name: 'Combinations', url: 'https://leetcode.com/problems/combinations/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: ['Microsoft', 'Google', 'Amazon'], @@ -251,7 +251,7 @@ const questions = [ id: 19, name: 'Combination Sum', url: 'https://leetcode.com/problems/combination-sum/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon', 'Microsoft', 'Airbnb', 'Uber'], @@ -260,7 +260,7 @@ const questions = [ id: 20, name: 'Combination Sum II', url: 'https://leetcode.com/problems/combination-sum-ii/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: ['Google', 'Microsoft', 'Amazon'], @@ -269,7 +269,7 @@ const questions = [ id: 21, name: 'Combination Sum III', url: 'https://leetcode.com/problems/combination-sum-iii/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: ['Microsoft', 'Amazon'], @@ -278,7 +278,7 @@ const questions = [ id: 22, name: 'Generate Parentheses', url: 'https://leetcode.com/problems/generate-parentheses/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: [ @@ -295,7 +295,7 @@ const questions = [ id: 23, name: 'Target Sum', url: 'https://leetcode.com/problems/target-sum/', - pattern: 'DFS', + pattern: ['DFS', 'Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['Facebook'], @@ -304,7 +304,7 @@ const questions = [ id: 24, name: 'Palindrome Partitioning', url: 'https://leetcode.com/problems/palindrome-partitioning/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: ['Amazon'], @@ -313,7 +313,7 @@ const questions = [ id: 25, name: 'Letter Combinations of a Phone Number', url: 'https://leetcode.com/problems/letter-combinations-of-a-phone-number/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: false, companies: [ @@ -333,7 +333,7 @@ const questions = [ id: 26, name: 'Generalized Abbreviation', url: 'https://leetcode.com/problems/generalized-abbreviation/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Medium', premium: true, companies: ['Google'], @@ -342,7 +342,7 @@ const questions = [ id: 27, name: 'Sudoku Solver', url: 'https://leetcode.com/problems/sudoku-solver/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Hard', premium: false, companies: ['Microsoft', 'Amazon', 'Apple', 'Oracle'], @@ -351,7 +351,7 @@ const questions = [ id: 28, name: 'N-Queens', url: 'https://leetcode.com/problems/n-queens/', - pattern: 'Backtracking', + pattern: ['Backtracking'], difficulty: 'Hard', premium: false, companies: ['Apple', 'Oracle', 'Amazon'], @@ -360,7 +360,7 @@ const questions = [ id: 29, name: 'Climbing Stairs', url: 'https://leetcode.com/problems/climbing-stairs/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Easy', premium: false, companies: [ @@ -378,7 +378,7 @@ const questions = [ id: 30, name: 'House Robber', url: 'https://leetcode.com/problems/house-robber/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Easy', premium: false, companies: ['Google', 'Apple', 'Adobe', 'Microsoft', 'Amazon'], @@ -387,7 +387,7 @@ const questions = [ id: 31, name: 'Best Time to Buy and Sell Stock', url: 'https://leetcode.com/problems/best-time-to-buy-and-sell-stock/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Easy', premium: false, companies: [ @@ -408,7 +408,7 @@ const questions = [ id: 32, name: 'Maximum Subarray', url: 'https://leetcode.com/problems/maximum-subarray/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Easy', premium: false, companies: [ @@ -429,7 +429,7 @@ const questions = [ id: 33, name: 'Range Sum Query - Immutable', url: 'https://leetcode.com/problems/range-sum-query-immutable/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Easy', premium: false, companies: ['Google', 'Facebook'], @@ -438,7 +438,7 @@ const questions = [ id: 34, name: 'House Robber II', url: 'https://leetcode.com/problems/house-robber-ii/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['Google'], @@ -447,7 +447,7 @@ const questions = [ id: 35, name: 'Coin Change', url: 'https://leetcode.com/problems/coin-change/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: [ @@ -466,7 +466,7 @@ const questions = [ id: 36, name: 'Maximum Product Subarray', url: 'https://leetcode.com/problems/maximum-product-subarray/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: [ @@ -482,7 +482,7 @@ const questions = [ id: 37, name: 'Longest Increasing Subsequence', url: 'https://leetcode.com/problems/longest-increasing-subsequence/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: [ @@ -499,7 +499,7 @@ const questions = [ id: 38, name: 'Longest Palindromic Substring', url: 'https://leetcode.com/problems/longest-palindromic-substring/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: [ @@ -518,7 +518,7 @@ const questions = [ id: 39, name: 'Word Break', url: 'https://leetcode.com/problems/word-break/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: [ @@ -538,7 +538,7 @@ const questions = [ id: 40, name: 'Combination Sum IV', url: 'https://leetcode.com/problems/combination-sum-iv/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['Google'], @@ -547,7 +547,7 @@ const questions = [ id: 41, name: 'Decode Ways', url: 'https://leetcode.com/problems/decode-ways/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: [ @@ -565,7 +565,7 @@ const questions = [ id: 42, name: 'Unique Paths', url: 'https://leetcode.com/problems/unique-paths/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: [ @@ -583,7 +583,7 @@ const questions = [ id: 43, name: 'Jump Game', url: 'https://leetcode.com/problems/jump-game/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming', 'Greedy'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Facebook', 'Adobe', 'Google', 'Bloomberg', 'Oracle'], @@ -592,7 +592,7 @@ const questions = [ id: 44, name: 'Palindromic Substrings', url: 'https://leetcode.com/problems/palindromic-substrings/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon', 'Apple', 'Twitter', 'Google', 'Citadel'], @@ -602,7 +602,7 @@ const questions = [ name: 'Number of Longest Increasing Subsequence', url: 'https://leetcode.com/problems/number-of-longest-increasing-subsequence/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon'], @@ -611,7 +611,7 @@ const questions = [ id: 46, name: 'Partition Equal Subset Sum', url: 'https://leetcode.com/problems/partition-equal-subset-sum/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['Facebook'], @@ -620,7 +620,7 @@ const questions = [ id: 47, name: 'Partition to K Equal Sum Subsets', url: 'https://leetcode.com/problems/partition-to-k-equal-sum-subsets/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['LinkedIn', 'Amazon', 'Facebook'], @@ -630,7 +630,7 @@ const questions = [ name: 'Best Time to Buy and Sell Stock with Cooldown', url: 'https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['Google', 'Amazon', 'Apple'], @@ -639,7 +639,7 @@ const questions = [ id: 49, name: 'Counting Bits', url: 'https://leetcode.com/problems/counting-bits/', - pattern: 'Dynamic Programming', + pattern: ['Dynamic Programming'], difficulty: 'Medium', premium: false, companies: ['Facebook'], @@ -648,7 +648,7 @@ const questions = [ id: 50, name: 'Linked List Cycle', url: 'https://leetcode.com/problems/linked-list-cycle/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Apple', 'Microsoft', 'Goldman Sachs'], @@ -657,7 +657,7 @@ const questions = [ id: 51, name: 'Middle of the Linked List', url: 'https://leetcode.com/problems/middle-of-the-linked-list/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Apple', 'Oracle'], @@ -666,7 +666,7 @@ const questions = [ id: 52, name: 'Palindrome Linked List', url: 'https://leetcode.com/problems/palindrome-linked-list/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Microsoft', 'Apple', 'Snapchat', 'Bloomberg'], @@ -675,7 +675,7 @@ const questions = [ id: 53, name: 'Remove Linked List Elements', url: 'https://leetcode.com/problems/remove-linked-list-elements/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Easy', premium: false, companies: ['Bloomberg', 'Google', 'Capital One'], @@ -684,7 +684,7 @@ const questions = [ id: 54, name: 'Remove Duplicates from Sorted List', url: 'https://leetcode.com/problems/remove-duplicates-from-sorted-list/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Apple', 'Microsoft'], @@ -693,7 +693,7 @@ const questions = [ id: 55, name: 'Linked List Cycle II', url: 'https://leetcode.com/problems/linked-list-cycle-ii/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Medium', premium: false, companies: ['Microsoft', 'Apple', 'Adobe'], @@ -702,7 +702,7 @@ const questions = [ id: 56, name: 'Add Two Numbers', url: 'https://leetcode.com/problems/add-two-numbers/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Medium', premium: false, companies: [ @@ -721,7 +721,7 @@ const questions = [ id: 57, name: 'Remove Nth Node From End Of List', url: 'https://leetcode.com/problems/remove-nth-node-from-end-of-list/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Facebook', 'Microsoft'], @@ -730,7 +730,7 @@ const questions = [ id: 58, name: 'Sort List', url: 'https://leetcode.com/problems/sort-list/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Medium', premium: false, companies: ['Microsoft', 'Amazon', 'Facebook'], @@ -739,7 +739,7 @@ const questions = [ id: 59, name: 'Reorder List', url: 'https://leetcode.com/problems/reorder-list/', - pattern: 'Fast & Slow Pointers', + pattern: ['Fast & Slow Pointers'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon', 'Microsoft'], @@ -748,7 +748,7 @@ const questions = [ id: 60, name: 'Clone Graph', url: 'https://leetcode.com/problems/clone-graph/', - pattern: 'Graphs', + pattern: ['BFS', 'DFS', 'Graph'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Facebook', 'Microsoft'], @@ -757,7 +757,7 @@ const questions = [ id: 62, name: 'Pacific Atlantic Water Flow', url: 'https://leetcode.com/problems/pacific-atlantic-water-flow/', - pattern: 'Graphs', + pattern: ['BFS', 'DFS'], difficulty: 'Medium', premium: false, companies: ['Microsoft', 'Google', 'Amazon'], @@ -766,7 +766,7 @@ const questions = [ id: 63, name: 'Number of Islands', url: 'https://leetcode.com/problems/number-of-islands/', - pattern: 'Graphs', + pattern: ['BFS', 'DFS', 'Union Find'], difficulty: 'Medium', premium: false, companies: [ @@ -785,7 +785,7 @@ const questions = [ id: 64, name: 'Graph Valid Tree', url: 'https://leetcode.com/problems/graph-valid-tree/', - pattern: 'Graphs', + pattern: ['BFS', 'DFS', 'Graph', 'Union Find'], difficulty: 'Medium', premium: true, companies: ['Amazon', 'LinkedIn'], @@ -795,7 +795,7 @@ const questions = [ name: 'Number of Connected Components in an Undirected Graph', url: 'https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph/', - pattern: 'Graphs', + pattern: ['BFS', 'DFS', 'Graph', 'Union Find'], difficulty: 'Medium', premium: true, companies: ['Facebook', 'Amazon'], @@ -804,7 +804,7 @@ const questions = [ id: 66, name: 'Reverse Linked List', url: 'https://leetcode.com/problems/reverse-linked-list/', - pattern: 'In-place reversal of a linked list', + pattern: ['In-place reversal of a linked list'], difficulty: 'Easy', premium: false, companies: [ @@ -822,7 +822,7 @@ const questions = [ id: 67, name: 'Reverse Linked List II', url: 'https://leetcode.com/problems/reverse-linked-list-ii/', - pattern: 'In-place reversal of a linked list', + pattern: ['In-place reversal of a linked list'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Facebook', 'Microsoft', 'Oracle'], @@ -831,7 +831,7 @@ const questions = [ id: 68, name: 'Rotate List', url: 'https://leetcode.com/problems/rotate-list/', - pattern: 'In-place reversal of a linked list', + pattern: ['In-place reversal of a linked list'], difficulty: 'Medium', premium: false, companies: ['LinkedIn', 'Amazon', 'Microsoft'], @@ -840,7 +840,7 @@ const questions = [ id: 69, name: 'Swap Nodes in Pairs', url: 'https://leetcode.com/problems/swap-nodes-in-pairs/', - pattern: 'In-place reversal of a linked list', + pattern: ['In-place reversal of a linked list'], difficulty: 'Medium', premium: false, companies: ['Microsoft', 'Facebook', 'Apple', 'Amazon'], @@ -849,7 +849,7 @@ const questions = [ id: 70, name: 'Odd Even Linked List', url: 'https://leetcode.com/problems/odd-even-linked-list/', - pattern: 'In-place reversal of a linked list', + pattern: ['In-place reversal of a linked list'], difficulty: 'Medium', premium: false, companies: ['Capital One', 'Facebook', 'Google', 'Microsoft', 'Bloomberg'], @@ -858,7 +858,7 @@ const questions = [ id: 71, name: 'Reverse Nodes in k-Group', url: 'https://leetcode.com/problems/reverse-nodes-in-k-group/', - pattern: 'In-place reversal of a linked list', + pattern: ['In-place reversal of a linked list'], difficulty: 'Hard', premium: false, companies: ['Microsoft', 'Amazon', 'Facebook', 'Apple', 'Adobe'], @@ -867,7 +867,7 @@ const questions = [ id: 72, name: 'Merge Two Sorted Lists', url: 'https://leetcode.com/problems/merge-two-sorted-lists/', - pattern: 'K-Way Merge', + pattern: ['Two Pointers'], difficulty: 'Easy', premium: false, companies: [ @@ -888,7 +888,7 @@ const questions = [ name: 'Kth Smallest Element in a Sorted Matrix', url: 'https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/', - pattern: 'K-Way Merge', + pattern: ['Binary Search', 'Heap'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Facebook', 'Microsoft', 'Google'], @@ -897,7 +897,7 @@ const questions = [ id: 74, name: 'Find K Pairs with Smallest Sums', url: 'https://leetcode.com/problems/find-k-pairs-with-smallest-sums/', - pattern: 'K-Way Merge', + pattern: ['Heap'], difficulty: 'Medium', premium: false, companies: ['LinkedIn', 'Amazon', 'Facebook'], @@ -906,7 +906,7 @@ const questions = [ id: 75, name: 'Merge k Sorted Lists', url: 'https://leetcode.com/problems/merge-k-sorted-lists/', - pattern: 'K-Way Merge', + pattern: ['Heap'], difficulty: 'Hard', premium: false, companies: [ @@ -926,7 +926,7 @@ const questions = [ name: 'Smallest Range Covering Elements from K Lists', url: 'https://leetcode.com/problems/smallest-range-covering-elements-from-k-lists/', - pattern: 'K-Way Merge', + pattern: ['Heap'], difficulty: 'Hard', premium: false, companies: ['Google', 'Amazon', 'Snapchat'], @@ -935,7 +935,7 @@ const questions = [ id: 77, name: 'Meeting Rooms', url: 'https://leetcode.com/problems/meeting-rooms', - pattern: 'Merge Intervals', + pattern: ['Intervals'], difficulty: 'Easy', premium: true, companies: ['Microsoft'], @@ -944,7 +944,7 @@ const questions = [ id: 78, name: 'Merge Intervals', url: 'https://leetcode.com/problems/merge-intervals/', - pattern: 'Merge Intervals', + pattern: ['Intervals'], difficulty: 'Medium', premium: false, companies: [ @@ -967,7 +967,7 @@ const questions = [ id: 79, name: 'Interval List Intersections', url: 'https://leetcode.com/problems/interval-list-intersections/', - pattern: 'Merge Intervals', + pattern: ['Intervals'], difficulty: 'Medium', premium: false, companies: [ @@ -984,7 +984,7 @@ const questions = [ id: 80, name: 'Non-overlapping Intervals', url: 'https://leetcode.com/problems/non-overlapping-intervals/', - pattern: 'Merge Intervals', + pattern: ['Intervals'], difficulty: 'Medium', premium: false, companies: ['Facebook'], @@ -993,7 +993,7 @@ const questions = [ id: 81, name: 'Meeting Rooms II', url: 'https://leetcode.com/problems/meeting-rooms-ii/', - pattern: 'Merge Intervals', + pattern: ['Heap', 'Intervals'], difficulty: 'Medium', premium: true, companies: [ @@ -1012,7 +1012,7 @@ const questions = [ id: 82, name: 'Task Scheduler', url: 'https://leetcode.com/problems/task-scheduler/', - pattern: 'Merge Intervals', + pattern: ['Greedy', 'Heap'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Microsoft', 'Amazon', 'Uber', 'Oracle'], @@ -1022,7 +1022,7 @@ const questions = [ name: 'Minimum Number of Arrows to Burst Balloons', url: 'https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons/', - pattern: 'Merge Intervals', + pattern: ['Greedy'], difficulty: 'Medium', premium: false, companies: ['Facebook'], @@ -1031,7 +1031,7 @@ const questions = [ id: 84, name: 'Insert Interval', url: 'https://leetcode.com/problems/insert-interval/', - pattern: 'Merge Intervals', + pattern: ['Intervals'], difficulty: 'Hard', premium: false, companies: ['Google', 'Facebook', 'Twitter', 'Uber', 'LinkedIn', 'Amazon'], @@ -1040,7 +1040,7 @@ const questions = [ id: 85, name: 'Employee Free Time', url: 'https://leetcode.com/problems/employee-free-time/', - pattern: 'Merge Intervals', + pattern: ['Heap', 'Greedy'], difficulty: 'Hard', premium: true, companies: [ @@ -1056,7 +1056,7 @@ const questions = [ id: 86, name: 'Binary Search', url: 'https://leetcode.com/problems/binary-search/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Easy', premium: false, companies: ['Microsoft'], @@ -1066,7 +1066,7 @@ const questions = [ name: 'Find Smallest Letter Greater Than Target', url: 'https://leetcode.com/problems/find-smallest-letter-greater-than-target/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Easy', premium: false, companies: ['LinkedIn'], @@ -1075,7 +1075,7 @@ const questions = [ id: 88, name: 'Peak Index in a Mountain Array', url: 'https://leetcode.com/problems/peak-index-in-a-mountain-array/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Easy', premium: false, companies: ['Facebook', 'Amazon', 'Google', 'Uber'], @@ -1084,7 +1084,7 @@ const questions = [ id: 89, name: 'Find Minimum in Rotated Sorted Array', url: 'https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft', 'Google', 'Goldman Sachs', 'Apple'], @@ -1093,7 +1093,7 @@ const questions = [ id: 90, name: 'Find Peak Element', url: 'https://leetcode.com/problems/find-peak-element/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon', 'Google', 'Apple'], @@ -1102,7 +1102,7 @@ const questions = [ id: 91, name: 'Search in Rotated Sorted Array', url: 'https://leetcode.com/problems/search-in-rotated-sorted-array/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Medium', premium: false, companies: [ @@ -1121,7 +1121,7 @@ const questions = [ id: 92, name: 'Search in Rotated Sorted Array II', url: 'https://leetcode.com/problems/search-in-rotated-sorted-array-ii/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Medium', premium: false, companies: ['Amazon'], @@ -1130,7 +1130,7 @@ const questions = [ id: 93, name: 'Search a 2D Matrix', url: 'https://leetcode.com/problems/search-a-2d-matrix/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft', 'Facebook', 'Uber', 'Apple'], @@ -1139,7 +1139,7 @@ const questions = [ id: 94, name: 'Search a 2D Matrix II', url: 'https://leetcode.com/problems/search-a-2d-matrix-ii/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Facebook', 'Microsoft'], @@ -1148,7 +1148,7 @@ const questions = [ id: 95, name: 'Find K Closest Elements', url: 'https://leetcode.com/problems/find-k-closest-elements/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Bloomberg', 'Apple'], @@ -1157,7 +1157,7 @@ const questions = [ id: 96, name: 'Count of Range Sum', url: 'https://leetcode.com/problems/count-of-range-sum/', - pattern: 'Modified Binary Search', + pattern: ['Binary Search'], difficulty: 'Hard', premium: false, companies: ['Google'], @@ -1166,7 +1166,7 @@ const questions = [ id: 97, name: 'Minimum Size Subarray Sum', url: 'https://leetcode.com/problems/minimum-size-subarray-sum/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Medium', premium: false, companies: ['Goldman Sachs', 'Google', 'Amazon', 'Facebook', 'Oracle'], @@ -1175,7 +1175,7 @@ const questions = [ id: 98, name: 'Fruit Into Baskets', url: 'https://leetcode.com/problems/fruit-into-baskets/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Medium', premium: false, companies: ['Google'], @@ -1184,7 +1184,7 @@ const questions = [ id: 99, name: 'Permutation in String', url: 'https://leetcode.com/problems/permutation-in-string/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Microsoft', 'Google'], @@ -1194,7 +1194,7 @@ const questions = [ name: 'Longest Repeating Character Replacement', url: 'https://leetcode.com/problems/longest-repeating-character-replacement/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Medium', premium: false, companies: ['Google'], @@ -1203,7 +1203,7 @@ const questions = [ id: 101, name: 'Sliding Window Maximum', url: 'https://leetcode.com/problems/sliding-window-maximum/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Hard', premium: false, companies: [ @@ -1222,7 +1222,7 @@ const questions = [ name: 'Longest Substring Without Repeating Characters', url: 'https://leetcode.com/problems/longest-substring-without-repeating-characters/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Hard', premium: false, companies: [ @@ -1242,7 +1242,7 @@ const questions = [ name: 'Minimum Number of K Consecutive Bit Flips', url: 'https://leetcode.com/problems/minimum-number-of-k-consecutive-bit-flips/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Hard', premium: false, companies: ['Amazon'], @@ -1252,7 +1252,7 @@ const questions = [ name: 'Count Unique Characters of All Substrings of a Given String', url: 'https://leetcode.com/problems/count-unique-characters-of-all-substrings-of-a-given-string/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Hard', premium: false, companies: ['Twitch'], @@ -1261,7 +1261,7 @@ const questions = [ id: 105, name: 'Minimum Window Substring', url: 'https://leetcode.com/problems/minimum-window-substring/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Hard', premium: false, companies: [ @@ -1283,7 +1283,7 @@ const questions = [ name: 'Substring with Concatenation of All Words', url: 'https://leetcode.com/problems/substring-with-concatenation-of-all-words/', - pattern: 'Sliding Window', + pattern: ['Sliding Window'], difficulty: 'Hard', premium: false, companies: ['Amazon', 'Microsoft', 'Google', 'Facebook'], @@ -1292,7 +1292,7 @@ const questions = [ id: 107, name: 'Kth Smallest Element in a BST', url: 'https://leetcode.com/problems/kth-smallest-element-in-a-bst/', - pattern: "Top 'K' Elements", + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Oracle', 'Facebook', 'Apple', 'Bloomberg'], @@ -1301,7 +1301,7 @@ const questions = [ id: 108, name: 'K Closest Points to Origin', url: 'https://leetcode.com/problems/k-closest-points-to-origin/', - pattern: "Top 'K' Elements", + pattern: ['Heap'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon', 'Asana', 'Oracle', 'Apple'], @@ -1310,7 +1310,7 @@ const questions = [ id: 109, name: 'Top K Frequent Elements', url: 'https://leetcode.com/problems/top-k-frequent-elements/', - pattern: "Top 'K' Elements", + pattern: ['Heap'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Facebook', 'Oracle', 'Google', 'Yelp', 'Apple'], @@ -1319,7 +1319,7 @@ const questions = [ id: 110, name: 'Sort Characters By Frequency', url: 'https://leetcode.com/problems/sort-characters-by-frequency/', - pattern: "Top 'K' Elements", + pattern: ['Heap'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Bloomberg', 'Uber'], @@ -1328,7 +1328,7 @@ const questions = [ id: 111, name: 'Kth Largest Element in an Array', url: 'https://leetcode.com/problems/kth-largest-element-in-an-array/', - pattern: "Top 'K' Elements", + pattern: ['Heap'], difficulty: 'Medium', premium: false, companies: [ @@ -1349,7 +1349,7 @@ const questions = [ id: 112, name: 'Reorganize String', url: 'https://leetcode.com/problems/reorganize-string/', - pattern: "Top 'K' Elements", + pattern: ['Greedy', 'Heap'], difficulty: 'Medium', premium: false, companies: [ @@ -1365,7 +1365,7 @@ const questions = [ id: 113, name: 'Rearrange String k Distance Apart', url: 'https://leetcode.com/problems/rearrange-string-k-distance-apart', - pattern: "Top 'K' Elements", + pattern: ['Greedy', 'Heap'], difficulty: 'Hard', premium: true, companies: ['Google'], @@ -1374,7 +1374,7 @@ const questions = [ id: 114, name: 'Course Schedule III', url: 'https://leetcode.com/problems/course-schedule-iii/', - pattern: "Top 'K' Elements", + pattern: ['Greedy', 'Heap'], difficulty: 'Hard', premium: false, companies: ['Microsoft'], @@ -1383,7 +1383,7 @@ const questions = [ id: 115, name: 'Maximum Frequency Stack', url: 'https://leetcode.com/problems/maximum-frequency-stack/', - pattern: "Top 'K' Elements", + pattern: ['Bucket Sort', 'Heap'], difficulty: 'Hard', premium: false, companies: ['Amazon', 'Apple'], @@ -1392,7 +1392,7 @@ const questions = [ id: 116, name: 'Course Schedule', url: 'https://leetcode.com/problems/course-schedule/', - pattern: 'Topological Sort', + pattern: ['BFS', 'DFS', 'Graph', 'Topological Sort'], difficulty: 'Medium', premium: false, companies: ['Microsoft', 'Amazon', 'Facebook', 'Oracle', 'Google', 'Apple'], @@ -1401,7 +1401,7 @@ const questions = [ id: 117, name: 'Course Schedule II', url: 'https://leetcode.com/problems/course-schedule-ii/', - pattern: 'Topological Sort', + pattern: ['BFS', 'DFS', 'Graph', 'Topological Sort'], difficulty: 'Medium', premium: false, companies: [ @@ -1420,7 +1420,7 @@ const questions = [ id: 118, name: 'Minimum Height Trees', url: 'https://leetcode.com/problems/minimum-height-trees/', - pattern: 'Topological Sort', + pattern: ['BFS', 'Graph', 'Topological Sort'], difficulty: 'Medium', premium: false, companies: ['Google', 'Amazon'], @@ -1429,7 +1429,7 @@ const questions = [ id: 119, name: 'Alien Dictionary', url: 'https://leetcode.com/problems/alien-dictionary', - pattern: 'Topological Sort', + pattern: ['Graph', 'Topological Sort'], difficulty: 'Hard', premium: true, companies: [ @@ -1448,7 +1448,7 @@ const questions = [ id: 120, name: 'Sequence Reconstruction', url: 'https://leetcode.com/problems/sequence-reconstruction', - pattern: 'Topological Sort', + pattern: ['Graph', 'Topological Sort'], difficulty: 'Hard', premium: true, companies: ['Google'], @@ -1457,7 +1457,7 @@ const questions = [ id: 121, name: 'Binary Tree Level Order Traversal II', url: 'https://leetcode.com/problems/binary-tree-level-order-traversal-ii/', - pattern: 'BFS', + pattern: ['BFS'], difficulty: 'Easy', premium: false, companies: ['Apple'], @@ -1466,7 +1466,7 @@ const questions = [ id: 122, name: 'Average of Levels in Binary Tree', url: 'https://leetcode.com/problems/average-of-levels-in-binary-tree/', - pattern: 'BFS', + pattern: ['BFS'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Facebook'], @@ -1475,7 +1475,7 @@ const questions = [ id: 123, name: 'Minimum Depth of Binary Tree', url: 'https://leetcode.com/problems/minimum-depth-of-binary-tree/', - pattern: 'BFS', + pattern: ['BFS', 'DFS'], difficulty: 'Easy', premium: false, companies: ['Facebook'], @@ -1484,7 +1484,7 @@ const questions = [ id: 124, name: 'Binary Tree Level Order Traversal', url: 'https://leetcode.com/problems/binary-tree-level-order-traversal/', - pattern: 'BFS', + pattern: ['BFS'], difficulty: 'Medium', premium: false, companies: [ @@ -1501,7 +1501,7 @@ const questions = [ name: 'Binary Tree Zigzag Level Order Traversal', url: 'https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/', - pattern: 'BFS', + pattern: ['BFS'], difficulty: 'Medium', premium: false, companies: [ @@ -1519,7 +1519,7 @@ const questions = [ name: 'Populating Next Right Pointers in Each Node', url: 'https://leetcode.com/problems/populating-next-right-pointers-in-each-node/', - pattern: 'BFS', + pattern: ['BFS'], difficulty: 'Medium', premium: false, companies: [ @@ -1536,7 +1536,7 @@ const questions = [ name: 'Populating Next Right Pointers in Each Node II', url: 'https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/', - pattern: 'BFS', + pattern: ['BFS'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft', 'Bloomberg', 'Facebook', 'Google'], @@ -1545,7 +1545,7 @@ const questions = [ id: 128, name: 'Binary Tree Right Side View', url: 'https://leetcode.com/problems/binary-tree-right-side-view/', - pattern: 'BFS', + pattern: ['BFS', 'DFS'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon', 'Microsoft', 'Bloomberg'], @@ -1554,25 +1554,16 @@ const questions = [ id: 129, name: 'All Nodes Distance K in Binary Tree', url: 'https://leetcode.com/problems/all-nodes-distance-k-in-binary-tree/', - pattern: 'BFS', + pattern: ['BFS', 'DFS'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Facebook', 'Microsoft', 'Uber'], }, - { - id: 130, - name: 'Boundary of Binary Tree', - url: 'https://leetcode.com/problems/boundary-of-binary-tree', - pattern: 'BFS', - difficulty: 'Medium', - premium: true, - companies: ['Amazon', 'Microsoft', 'Apple', 'Oracle'], - }, { id: 131, name: 'Same Tree', url: 'https://leetcode.com/problems/same-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Easy', premium: false, companies: ['Amazon'], @@ -1581,7 +1572,7 @@ const questions = [ id: 132, name: 'Path Sum', url: 'https://leetcode.com/problems/path-sum/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Facebook', 'Bloomberg'], @@ -1590,7 +1581,7 @@ const questions = [ id: 133, name: 'Diameter of Binary Tree', url: 'https://leetcode.com/problems/diameter-of-binary-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Easy', premium: false, companies: ['Facebook', 'Amazon', 'Microsoft', 'Oracle', 'Google', 'Adobe'], @@ -1599,7 +1590,7 @@ const questions = [ id: 134, name: 'Merge Two Binary Trees', url: 'https://leetcode.com/problems/merge-two-binary-trees/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Easy', premium: false, companies: ['Adobe', 'Amazon'], @@ -1608,7 +1599,7 @@ const questions = [ id: 135, name: 'Maximum Depth of Binary Tree', url: 'https://leetcode.com/problems/maximum-depth-of-binary-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Microsoft', 'Google', 'Goldman Sachs'], @@ -1618,7 +1609,7 @@ const questions = [ name: 'Lowest Common Ancestor of a Binary Search Tree', url: 'https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Facebook', 'Microsoft', 'LinkedIn'], @@ -1627,7 +1618,7 @@ const questions = [ id: 137, name: 'Subtree of Another Tree', url: 'https://leetcode.com/problems/subtree-of-another-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Easy', premium: false, companies: ['Amazon'], @@ -1636,7 +1627,7 @@ const questions = [ id: 138, name: 'Invert Binary Tree', url: 'https://leetcode.com/problems/invert-binary-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Easy', premium: false, companies: ['Google', 'Microsoft', 'Amazon'], @@ -1645,7 +1636,7 @@ const questions = [ id: 139, name: 'Path Sum II', url: 'https://leetcode.com/problems/path-sum-ii/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft', 'Quora'], @@ -1654,7 +1645,7 @@ const questions = [ id: 140, name: 'Path Sum III', url: 'https://leetcode.com/problems/path-sum-iii/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft'], @@ -1664,7 +1655,7 @@ const questions = [ name: 'Lowest Common Ancestor of a Binary Tree', url: 'https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: [ @@ -1681,7 +1672,7 @@ const questions = [ id: 142, name: 'Maximum Binary Tree', url: 'https://leetcode.com/problems/maximum-binary-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: ['Google'], @@ -1690,7 +1681,7 @@ const questions = [ id: 143, name: 'Maximum Width of Binary Tree', url: 'https://leetcode.com/problems/maximum-width-of-binary-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: ['Facebook', 'Amazon', 'Google', 'Microsoft'], @@ -1700,7 +1691,7 @@ const questions = [ name: 'Construct Binary Tree from Preorder and Inorder Traversal', url: 'https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft', 'Google', 'Facebook', 'Bloomberg'], @@ -1709,7 +1700,7 @@ const questions = [ id: 145, name: 'Validate Binary Search Tree', url: 'https://leetcode.com/problems/validate-binary-search-tree/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: [ @@ -1729,7 +1720,7 @@ const questions = [ id: 146, name: 'Kth Smallest Element in a BST', url: 'https://leetcode.com/problems/kth-smallest-element-in-a-bst/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Oracle', 'Facebook', 'Apple', 'Bloomberg'], @@ -1738,7 +1729,7 @@ const questions = [ id: 147, name: 'Implement Trie (Prefix Tree)', url: 'https://leetcode.com/problems/implement-trie-prefix-tree/', - pattern: 'Trie', + pattern: ['Design', 'Trie'], difficulty: 'Medium', premium: false, companies: ['Amazon', 'Microsoft', 'Google', 'Facebook'], @@ -1747,7 +1738,7 @@ const questions = [ id: 148, name: 'Binary Tree Maximum Path Sum', url: 'https://leetcode.com/problems/binary-tree-maximum-path-sum/', - pattern: 'DFS', + pattern: ['DFS'], difficulty: 'Hard', premium: false, companies: ['Facebook', 'Microsoft', 'Amazon', 'Google', 'Uber', 'Apple'], @@ -1756,7 +1747,7 @@ const questions = [ id: 149, name: 'Serialize and Deserialize Binary Tree', url: 'https://leetcode.com/problems/serialize-and-deserialize-binary-tree/', - pattern: 'DFS', + pattern: ['Design'], difficulty: 'Hard', premium: false, companies: [ @@ -1775,7 +1766,7 @@ const questions = [ id: 150, name: 'Word Search II', url: 'https://leetcode.com/problems/word-search-ii/', - pattern: 'Trie', + pattern: ['DFS', 'Trie'], difficulty: 'Hard', premium: false, companies: [ @@ -1792,7 +1783,7 @@ const questions = [ id: 151, name: 'Find Median from Data Stream', url: 'https://leetcode.com/problems/find-median-from-data-stream/', - pattern: 'Two Heaps', + pattern: ['Heap'], difficulty: 'Hard', premium: false, companies: [ @@ -1809,7 +1800,7 @@ const questions = [ id: 152, name: 'Sliding Window Median', url: 'https://leetcode.com/problems/sliding-window-median/', - pattern: 'Two Heaps', + pattern: ['Heap'], difficulty: 'Hard', premium: false, companies: ['Amazon', 'Facebook', 'Google'], @@ -1818,7 +1809,7 @@ const questions = [ id: 153, name: 'Two Sum', url: 'https://leetcode.com/problems/two-sum/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Easy', premium: false, companies: [ @@ -1837,7 +1828,7 @@ const questions = [ id: 154, name: 'Remove Duplicates from Sorted List', url: 'https://leetcode.com/problems/remove-duplicates-from-sorted-list/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Easy', premium: false, companies: ['Amazon', 'Apple', 'Microsoft'], @@ -1846,7 +1837,7 @@ const questions = [ id: 155, name: 'Squares of a Sorted Array', url: 'https://leetcode.com/problems/squares-of-a-sorted-array/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Easy', premium: false, companies: [ @@ -1865,7 +1856,7 @@ const questions = [ id: 156, name: 'Backspace String Compare', url: 'https://leetcode.com/problems/backspace-string-compare', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Easy', premium: false, companies: ['Google', 'Facebook', 'Amazon', 'Microsoft', 'Oracle'], @@ -1874,7 +1865,7 @@ const questions = [ id: 157, name: '3 Sum', url: 'https://leetcode.com/problems/3sum/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Medium', premium: false, companies: [ @@ -1893,7 +1884,7 @@ const questions = [ id: 158, name: '3 Sum Closest', url: 'https://leetcode.com/problems/3sum-closest/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Medium', premium: false, companies: ['Google', 'Facebook', 'Amazon', 'Apple', 'Microsoft'], @@ -1902,7 +1893,7 @@ const questions = [ id: 159, name: 'Subarrays with Product Less than K', url: 'https://leetcode.com/problems/subarray-product-less-than-k/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Medium', premium: false, companies: ['Akuna Capital', 'Google'], @@ -1911,7 +1902,7 @@ const questions = [ id: 160, name: 'Sort Colours', url: 'https://leetcode.com/problems/sort-colors/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Medium', premium: false, companies: [ @@ -1928,7 +1919,7 @@ const questions = [ id: 161, name: 'Minimum Window Substring', url: 'https://leetcode.com/problems/minimum-window-substring/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Hard', premium: false, companies: [ @@ -1948,7 +1939,7 @@ const questions = [ id: 162, name: 'Trapping Rain Water', url: 'https://leetcode.com/problems/trapping-rain-water/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Hard', premium: false, companies: [ @@ -1969,7 +1960,7 @@ const questions = [ id: 163, name: 'Container With Most Water', url: 'https://leetcode.com/problems/container-with-most-water/', - pattern: 'Two Pointers', + pattern: ['Two Pointers'], difficulty: 'Hard', premium: false, companies: [ @@ -1987,7 +1978,7 @@ const questions = [ id: 164, name: 'Longest Word in Dictionary', url: 'https://leetcode.com/problems/longest-word-in-dictionary/', - pattern: 'Trie', + pattern: ['Trie'], difficulty: 'Easy', premium: false, companies: ['Goldman Sachs', 'Google'], @@ -1996,7 +1987,7 @@ const questions = [ id: 165, name: 'Index Pairs of a String', url: 'https://leetcode.com/problems/index-pairs-of-a-string/', - pattern: 'Trie', + pattern: ['Trie'], difficulty: 'Easy', premium: true, companies: ['Amazon'], @@ -2005,7 +1996,7 @@ const questions = [ id: 166, name: 'Maximum XOR of Two Numbers in an Array', url: 'https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array', - pattern: 'Trie', + pattern: ['Trie'], difficulty: 'Medium', premium: false, companies: ['Google'], @@ -2014,7 +2005,7 @@ const questions = [ id: 167, name: 'Concatenated Words', url: 'https://leetcode.com/problems/concatenated-words/', - pattern: 'Trie', + pattern: ['Trie'], difficulty: 'Hard', premium: false, companies: ['Amazon', 'Apple', 'Facebook'], @@ -2023,7 +2014,7 @@ const questions = [ id: 168, name: 'Prefix and Suffix Search', url: 'https://leetcode.com/problems/prefix-and-suffix-search/', - pattern: 'Trie', + pattern: ['Trie'], difficulty: 'Hard', premium: false, companies: ['Facebook', 'Google', 'Uber'], @@ -2032,7 +2023,7 @@ const questions = [ id: 169, name: 'Palindrome Pairs', url: 'https://leetcode.com/problems/palindrome-pairs/', - pattern: 'Trie', + pattern: ['Trie'], difficulty: 'Hard', premium: false, companies: ['Airbnb', 'Amazon', 'Facebook', 'Google', 'Square'], @@ -2041,7 +2032,7 @@ const questions = [ id: 170, name: 'Design Search Autocomplete System', url: 'https://leetcode.com/problems/design-search-autocomplete-system/', - pattern: 'Trie', + pattern: ['Trie'], difficulty: 'Hard', premium: true, companies: ['Amazon', 'Google', 'Lyft', 'Microsoft', 'Uber'], @@ -2050,11 +2041,20 @@ const questions = [ id: 171, name: 'Word Squares', url: 'https://leetcode.com/problems/word-squares/', - pattern: 'Trie', + pattern: ['Trie'], difficulty: 'Hard', premium: true, companies: ['Oracle'], }, + { + id: 172, + name: 'Sort Items by Groups Respecting Dependencies', + url: 'https://leetcode.com/problems/sort-items-by-groups-respecting-dependencies/', + pattern: ['DFS', 'Graph', 'Topological Sort'], + difficulty: 'Hard', + premium: false, + companies: ['Google'], + }, ]; const sortBy = { Easy: 0, Medium: 1, Hard: 2 }; diff --git a/src/icons/Amazon.png b/src/icons/Amazon.png index f9491ee8..bb3d43bc 100644 Binary files a/src/icons/Amazon.png and b/src/icons/Amazon.png differ