diff --git a/.circleci/config.yml b/.circleci/config.yml index 8184820a..7ef89ba5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ parameters: defaults: &defaults docker: - - image: cimg/python:3.11.7-browsers + - image: cimg/python:3.11.11-browsers test_defaults: &test_defaults docker: @@ -74,7 +74,7 @@ builddeploy_steps: &builddeploy_steps source awsenvconf ./buildenv.sh -e $DEPLOY_ENV -b ${LOGICAL_ENV}-${APPNAME}-deployvar source buildenvvar - ./master_deploy.sh -d ECS -e $DEPLOY_ENV -t latest -s ${LOGICAL_ENV}-global-appvar,${LOGICAL_ENV}-${APPNAME}-appvar -i ${APPNAME} + ./master_deploy.sh -d ECS -e $DEPLOY_ENV -t latest -s ${LOGICAL_ENV}-global-appvar,${LOGICAL_ENV}-${APPNAME}-appvar -i ${APPNAME} -p FARGATE #curl --request POST \ #--url https://circleci.com/api/v2/project/github/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pipeline \ #--header "Circle-Token: ${CIRCLE_TOKEN}" \ @@ -152,7 +152,7 @@ workflows: context: org-global filters: &filters-dev branches: - only: ["develop", "multiround", "release_0.20.9", "metadata-fix"] + only: ["develop", "PM-803_wm-regression-fixes"] # Production builds are exectuted only on tagged commits to the # master branch. diff --git a/config/constants/development.js b/config/constants/development.js index 55db9b79..a728f4ef 100644 --- a/config/constants/development.js +++ b/config/constants/development.js @@ -44,8 +44,10 @@ module.exports = { CREATE_FORUM_TYPE_IDS: ['927abff4-7af9-4145-8ba1-577c16e64e2e', 'dc876fa4-ef2d-4eee-b701-b555fcc6544c', 'ecd58c69-238f-43a4-a4bb-d172719b9f31', '78b37a69-92d5-4ad7-bf85-c79b65420c79', '929bc408-9cf2-4b3e-ba71-adfbf693046c'], FILE_PICKER_API_KEY: process.env.FILE_PICKER_API_KEY, FILE_PICKER_CONTAINER_NAME: 'tc-challenge-v5-dev', + FILE_PICKER_SUBMISSION_CONTAINER_NAME: process.env.FILE_PICKER_SUBMISSION_CONTAINER_NAME || 'submission-staging-dev', FILE_PICKER_REGION: 'us-east-1', FILE_PICKER_CNAME: 'fs.topcoder.com', + FILE_PICKER_LOCATION: 's3', // if idle for this many minutes, show user a prompt saying they'll be logged out IDLE_TIMEOUT_MINUTES: 10, // duration to show the prompt saying user will be logged out, before actually logging out the user @@ -55,5 +57,8 @@ module.exports = { HEADER_AUTH_URLS_HREF: `https://accounts-auth0.${DOMAIN}?utm_source=community-app-main`, HEADER_AUTH_URLS_LOCATION: `https://accounts-auth0.${DOMAIN}?retUrl=%S&utm_source=community-app-main`, SKILLS_V5_API_URL: `${API_V5}/standardized-skills/skills/autocomplete`, - UPDATE_SKILLS_V5_API_URL: `${API_V5}/standardized-skills/challenge-skills` + UPDATE_SKILLS_V5_API_URL: `${API_V5}/standardized-skills/challenge-skills`, + SALESFORCE_BILLING_ACCOUNT_LINK: 'https://c.cs18.visual.force.com/apex/baredirect?id=', + TYPEFORM_URL: 'https://topcoder.typeform.com/to/YJ7AL4p8', + PROFILE_URL: 'https://profiles.topcoder-dev.com/' } diff --git a/config/constants/production.js b/config/constants/production.js index 84fc03c0..bbebe026 100644 --- a/config/constants/production.js +++ b/config/constants/production.js @@ -43,8 +43,10 @@ module.exports = { CREATE_FORUM_TYPE_IDS: ['927abff4-7af9-4145-8ba1-577c16e64e2e', 'dc876fa4-ef2d-4eee-b701-b555fcc6544c', 'ecd58c69-238f-43a4-a4bb-d172719b9f31', '78b37a69-92d5-4ad7-bf85-c79b65420c79', '929bc408-9cf2-4b3e-ba71-adfbf693046c'], FILE_PICKER_API_KEY: process.env.FILE_PICKER_API_KEY, FILE_PICKER_CONTAINER_NAME: 'tc-challenge-v5-prod', + FILE_PICKER_SUBMISSION_CONTAINER_NAME: process.env.FILE_PICKER_SUBMISSION_CONTAINER_NAME || 'submission-staging-prod', FILE_PICKER_REGION: 'us-east-1', FILE_PICKER_CNAME: 'fs.topcoder.com', + FILE_PICKER_LOCATION: 's3', IDLE_TIMEOUT_MINUTES: 10, IDLE_TIMEOUT_GRACE_MINUTES: 5, MULTI_ROUND_CHALLENGE_TEMPLATE_ID: 'd4201ca4-8437-4d63-9957-3f7708184b07', @@ -52,5 +54,8 @@ module.exports = { HEADER_AUTH_URLS_HREF: `https://accounts-auth0.${DOMAIN}?utm_source=community-app-main`, HEADER_AUTH_URLS_LOCATION: `https://accounts-auth0.${DOMAIN}?retUrl=%S&utm_source=community-app-main`, SKILLS_V5_API_URL: `${API_V5}/standardized-skills/skills/autocomplete`, - UPDATE_SKILLS_V5_API_URL: `${API_V5}/standardized-skills/challenge-skills` + UPDATE_SKILLS_V5_API_URL: `${API_V5}/standardized-skills/challenge-skills`, + SALESFORCE_BILLING_ACCOUNT_LINK: 'https://topcoder.my.salesforce.com/apex/baredirect?id=', + TYPEFORM_URL: 'https://topcoder.typeform.com/to/YJ7AL4p8', + PROFILE_URL: 'https://profiles.topcoder.com/' } diff --git a/package-lock.json b/package-lock.json index 224cf9a2..b7ab6daa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2931,6 +2931,11 @@ "prop-types": "^15.7.2" } }, + "@hookform/resolvers": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.10.0.tgz", + "integrity": "sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==" + }, "@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -3137,6 +3142,25 @@ "resolved": "https://registry.npmjs.org/@tanem/svg-injector/-/svg-injector-1.2.1.tgz", "integrity": "sha512-mA5Q5ulPoGQ+e08Vts1R6xw2QU0BKEnMH/KcqoYoS7Gk6imvMTpyFPeu1g+NOZObSIoAzA3/kRzY8m96cEBA2A==" }, + "@toast-ui/editor": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@toast-ui/editor/-/editor-2.5.4.tgz", + "integrity": "sha512-XsuYlPQxhec9dHQREFAigjE4enHSuGMF7D0YQ6wW7phmusvAu0FnJfZUPjJBoU/GKz7WP5U6fKU9/P+8j65D8A==", + "requires": { + "@types/codemirror": "0.0.71", + "codemirror": "^5.48.4" + }, + "dependencies": { + "@types/codemirror": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.71.tgz", + "integrity": "sha512-b2oEEnno1LIGKMR7uBEsr40al1UijF1HEpRn0+Yf1xOLl24iQgB7DBpZVMM7y54G5wCNoclDrRO65E6KHPNO2w==", + "requires": { + "@types/tern": "*" + } + } + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -3255,6 +3279,25 @@ "@types/unist": "*" } }, + "@types/hoist-non-react-statics": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", + "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + } + } + }, "@types/katex": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.11.1.tgz", @@ -3318,6 +3361,21 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "@types/react": { + "version": "19.0.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.8.tgz", + "integrity": "sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==", + "requires": { + "csstype": "^3.0.2" + }, + "dependencies": { + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + } + } + }, "@types/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", @@ -3560,8 +3618,7 @@ "acorn-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" }, "acorn-walk": { "version": "7.1.1", @@ -3919,7 +3976,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, "requires": { "default-require-extensions": "^1.0.0" } @@ -3984,7 +4040,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", - "dev": true, "requires": { "ast-types-flow": "0.0.7", "commander": "^2.11.0" @@ -3994,7 +4049,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, "requires": { "arr-flatten": "^1.0.1" } @@ -4017,8 +4071,7 @@ "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" }, "array-filter": { "version": "0.0.1", @@ -4039,7 +4092,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0", @@ -4072,14 +4124,12 @@ "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" }, "array.prototype.flat": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" @@ -4157,14 +4207,12 @@ "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { "version": "2.6.3", @@ -4310,8 +4358,7 @@ "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==", - "dev": true + "integrity": "sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==" }, "babel-code-frame": { "version": "6.26.0", @@ -4374,7 +4421,6 @@ "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, "requires": { "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", @@ -4389,8 +4435,7 @@ "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" } } }, @@ -4398,7 +4443,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" @@ -4408,7 +4452,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", - "dev": true, "requires": { "babel-plugin-istanbul": "^4.1.6", "babel-preset-jest": "^23.2.0" @@ -4429,7 +4472,6 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -4463,7 +4505,6 @@ "version": "4.1.6", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", - "dev": true, "requires": { "babel-plugin-syntax-object-rest-spread": "^6.13.0", "find-up": "^2.1.0", @@ -4474,8 +4515,7 @@ "babel-plugin-jest-hoist": { "version": "23.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", - "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", - "dev": true + "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=" }, "babel-plugin-macros": { "version": "2.5.0", @@ -4533,8 +4573,7 @@ "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", @@ -4545,7 +4584,6 @@ "version": "23.2.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", - "dev": true, "requires": { "babel-plugin-jest-hoist": "^23.2.0", "babel-plugin-syntax-object-rest-spread": "^6.13.0" @@ -4825,7 +4863,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, "requires": { "babel-core": "^6.26.0", "babel-runtime": "^6.26.0", @@ -4840,7 +4877,6 @@ "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-generator": "^6.26.0", @@ -4867,7 +4903,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -4875,14 +4910,12 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -4906,7 +4939,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, "requires": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", @@ -4919,7 +4951,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", @@ -4936,7 +4967,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -4944,14 +4974,12 @@ "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -4959,7 +4987,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", @@ -4970,16 +4997,14 @@ "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" } } }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "backoff": { "version": "2.5.0", @@ -5219,7 +5244,6 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, "requires": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -5240,7 +5264,6 @@ "version": "1.11.3", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, "requires": { "resolve": "1.1.7" }, @@ -5248,8 +5271,7 @@ "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" } } }, @@ -5349,7 +5371,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, "requires": { "node-int64": "^0.4.0" } @@ -5552,7 +5573,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", - "dev": true, "requires": { "rsvp": "^3.3.3" } @@ -5725,8 +5745,7 @@ "ci-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" }, "cipher-base": { "version": "1.0.4", @@ -5740,8 +5759,7 @@ "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" }, "class-utils": { "version": "0.3.6", @@ -5806,7 +5824,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", @@ -5816,14 +5833,12 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -5845,8 +5860,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "coa": { "version": "2.0.2", @@ -5863,6 +5877,11 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, + "codemirror": { + "version": "5.65.18", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.18.tgz", + "integrity": "sha512-Gaz4gHnkbHMGgahNt3CA5HBk5lLQBqmD/pBgeB4kQU6OedZmqMBjlRF0LSrp2tJ4wlLNPm2FfaUd1pDy0mdlpA==" + }, "codemirror-spell-checker": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz", @@ -6104,8 +6123,7 @@ "confusing-browser-globals": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", - "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", - "dev": true + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" }, "connect-history-api-fallback": { "version": "1.6.0", @@ -6130,8 +6148,7 @@ "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" }, "content-disposition": { "version": "0.5.3", @@ -6766,8 +6783,7 @@ "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", - "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", - "dev": true + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" }, "dashdash": { "version": "1.14.1", @@ -6808,8 +6824,7 @@ "debug-log": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=" }, "decamelize": { "version": "1.2.0", @@ -6869,6 +6884,11 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + }, "default-gateway": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", @@ -6882,7 +6902,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, "requires": { "strip-bom": "^2.0.0" } @@ -6941,7 +6960,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", - "dev": true, "requires": { "find-root": "^1.0.0", "glob": "^7.0.5", @@ -6954,8 +6972,7 @@ "ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" } } }, @@ -7037,7 +7054,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, "requires": { "repeating": "^2.0.0" } @@ -7045,8 +7061,7 @@ "detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" }, "detect-node": { "version": "2.0.4", @@ -7080,8 +7095,7 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "diffie-hellman": { "version": "5.0.3", @@ -7150,7 +7164,6 @@ "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" } @@ -7394,8 +7407,7 @@ "emoji-regex": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", - "dev": true + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==" }, "emojis-list": { "version": "3.0.0", @@ -7569,7 +7581,6 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.0.tgz", "integrity": "sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.5.3", @@ -7614,14 +7625,12 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -7630,7 +7639,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -7640,7 +7648,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -7651,7 +7658,6 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", "integrity": "sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA==", - "dev": true, "requires": { "confusing-browser-globals": "^1.0.6" } @@ -7659,20 +7665,17 @@ "eslint-config-standard": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", - "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", - "dev": true + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==" }, "eslint-config-standard-jsx": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz", - "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==", - "dev": true + "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==" }, "eslint-config-standard-react": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-7.0.2.tgz", "integrity": "sha512-Zv/vubIfrwx4IbRXAggRjaswLXKdfFeuGfN365cVTaRmfpAy/7dIxMvJRZkUT99zEx8FOjTXL0KC4psfDjK/+w==", - "dev": true, "requires": { "eslint-config-standard-jsx": "^6.0.1" } @@ -7681,7 +7684,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, "requires": { "debug": "^2.6.9", "resolve": "^1.5.0" @@ -7691,7 +7693,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -7699,8 +7700,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -7708,7 +7708,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.1.tgz", "integrity": "sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ==", - "dev": true, "requires": { "loader-fs-cache": "^1.0.0", "loader-utils": "^1.0.2", @@ -7721,7 +7720,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", - "dev": true, "requires": { "debug": "^2.6.8", "pkg-dir": "^2.0.0" @@ -7731,7 +7729,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -7739,8 +7736,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -7748,7 +7744,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", - "dev": true, "requires": { "eslint-utils": "^1.3.0", "regexpp": "^2.0.1" @@ -7758,7 +7753,6 @@ "version": "2.50.1", "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz", "integrity": "sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ==", - "dev": true, "requires": { "lodash": "^4.17.10" } @@ -7767,7 +7761,6 @@ "version": "2.20.2", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", - "dev": true, "requires": { "array-includes": "^3.0.3", "array.prototype.flat": "^1.2.1", @@ -7787,7 +7780,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -7796,7 +7788,6 @@ "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" @@ -7806,7 +7797,6 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, "requires": { "debug": "^2.6.9", "pkg-dir": "^2.0.0" @@ -7816,7 +7806,6 @@ "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", @@ -7827,14 +7816,12 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } @@ -7843,7 +7830,6 @@ "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" } @@ -7852,7 +7838,6 @@ "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", @@ -7863,7 +7848,6 @@ "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" @@ -7873,7 +7857,6 @@ "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" } @@ -7881,8 +7864,7 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" } } }, @@ -7890,7 +7872,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", - "dev": true, "requires": { "aria-query": "^3.0.0", "array-includes": "^3.0.3", @@ -7906,7 +7887,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", - "dev": true, "requires": { "eslint-plugin-es": "^1.3.1", "eslint-utils": "^1.3.1", @@ -7919,22 +7899,19 @@ "ignore": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==" } } }, "eslint-plugin-promise": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", - "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", - "dev": true + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==" }, "eslint-plugin-react": { "version": "7.11.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", - "dev": true, "requires": { "array-includes": "^3.0.3", "doctrine": "^2.1.0", @@ -7946,8 +7923,7 @@ "eslint-plugin-standard": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", - "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", - "dev": true + "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==" }, "eslint-scope": { "version": "3.7.1", @@ -7962,7 +7938,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" }, @@ -7970,8 +7945,7 @@ "eslint-visitor-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" } } }, @@ -7984,7 +7958,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", - "dev": true, "requires": { "acorn": "^6.0.2", "acorn-jsx": "^5.0.0", @@ -8000,7 +7973,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, "requires": { "estraverse": "^4.0.0" } @@ -8059,7 +8031,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "dev": true, "requires": { "merge": "^1.2.0" } @@ -8081,14 +8052,12 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, "requires": { "is-posix-bracket": "^0.1.0" } @@ -8097,7 +8066,6 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, "requires": { "fill-range": "^2.1.0" } @@ -8106,7 +8074,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", - "dev": true, "requires": { "ansi-styles": "^3.2.0", "jest-diff": "^23.6.0", @@ -8216,7 +8183,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, "requires": { "is-extglob": "^1.0.0" } @@ -8579,7 +8545,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, "requires": { "bser": "2.1.1" } @@ -8611,7 +8576,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, "requires": { "flat-cache": "^1.2.1", "object-assign": "^4.0.1" @@ -8640,14 +8604,12 @@ "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, "requires": { "glob": "^7.0.3", "minimatch": "^3.0.3" @@ -8704,7 +8666,6 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, "requires": { "is-number": "^2.1.0", "isobject": "^2.0.0", @@ -8717,7 +8678,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -8788,7 +8748,6 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, "requires": { "circular-json": "^0.3.1", "graceful-fs": "^4.1.2", @@ -8904,6 +8863,41 @@ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" }, + "formik": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz", + "integrity": "sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==", + "requires": { + "@types/hoist-non-react-statics": "^3.3.1", + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^2.0.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -9006,487 +9000,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "optional": true, "requires": { "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "optional": true - } + "nan": "^2.12.1" } }, "fstream": { @@ -9508,8 +9028,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gauge": { "version": "2.7.4", @@ -9557,8 +9076,7 @@ "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "get-intrinsic": { "version": "1.2.0", @@ -9620,7 +9138,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -9630,7 +9147,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, "requires": { "is-glob": "^2.0.0" } @@ -9723,8 +9239,7 @@ "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" }, "gzip-size": { "version": "5.0.0", @@ -9799,7 +9314,6 @@ "version": "4.7.6", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", - "dev": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -9811,14 +9325,12 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -10151,7 +9663,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.1" @@ -10750,8 +10261,7 @@ "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "immer": { "version": "1.10.0", @@ -10787,7 +10297,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", - "dev": true, "requires": { "pkg-dir": "^2.0.0", "resolve-cwd": "^2.0.0" @@ -10849,7 +10358,6 @@ "version": "6.5.2", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -10869,14 +10377,12 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -10887,7 +10393,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -10914,8 +10419,7 @@ "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" }, "ip": { "version": "1.1.5", @@ -10992,7 +10496,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, "requires": { "ci-info": "^1.5.0" } @@ -11061,14 +10564,12 @@ "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, "requires": { "is-primitive": "^2.0.0" } @@ -11081,8 +10582,7 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "is-finite": { "version": "1.1.0", @@ -11097,14 +10597,12 @@ "is-generator-fn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", - "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", - "dev": true + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=" }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, "requires": { "is-extglob": "^1.0.0" } @@ -11118,7 +10616,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -11165,8 +10662,7 @@ "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" }, "is-potential-custom-element-name": { "version": "1.0.0", @@ -11176,8 +10672,7 @@ "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" }, "is-promise": { "version": "2.1.0", @@ -11210,8 +10705,7 @@ "is-string": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" }, "is-svg": { "version": "3.0.0", @@ -11287,7 +10781,6 @@ "version": "1.3.7", "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", - "dev": true, "requires": { "async": "^2.1.4", "fileset": "^2.0.2", @@ -11305,14 +10798,12 @@ "istanbul-lib-coverage": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", - "dev": true + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==" }, "istanbul-lib-hook": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", - "dev": true, "requires": { "append-transform": "^0.4.0" } @@ -11321,7 +10812,6 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", - "dev": true, "requires": { "babel-generator": "^6.18.0", "babel-template": "^6.16.0", @@ -11336,7 +10826,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", - "dev": true, "requires": { "istanbul-lib-coverage": "^1.2.1", "mkdirp": "^0.5.1", @@ -11347,14 +10836,12 @@ "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, "requires": { "has-flag": "^1.0.0" } @@ -11365,7 +10852,6 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", - "dev": true, "requires": { "debug": "^3.1.0", "istanbul-lib-coverage": "^1.2.1", @@ -11378,7 +10864,6 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -11389,7 +10874,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", - "dev": true, "requires": { "handlebars": "^4.0.3" } @@ -11403,7 +10887,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", - "dev": true, "requires": { "import-local": "^1.0.0", "jest-cli": "^23.6.0" @@ -11412,14 +10895,12 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "jest-cli": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", - "dev": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", @@ -11463,7 +10944,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -11474,7 +10954,6 @@ "version": "23.4.2", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", - "dev": true, "requires": { "throat": "^4.0.0" } @@ -11483,7 +10962,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", - "dev": true, "requires": { "babel-core": "^6.0.0", "babel-jest": "^23.6.0", @@ -11505,7 +10983,6 @@ "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-generator": "^6.26.0", @@ -11532,7 +11009,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -11540,14 +11016,12 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -11555,7 +11029,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz", "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", - "dev": true, "requires": { "chalk": "^2.0.1", "diff": "^3.2.0", @@ -11567,7 +11040,6 @@ "version": "23.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", - "dev": true, "requires": { "detect-newline": "^2.1.0" } @@ -11576,7 +11048,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz", "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", - "dev": true, "requires": { "chalk": "^2.0.1", "pretty-format": "^23.6.0" @@ -11586,7 +11057,6 @@ "version": "23.4.0", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", - "dev": true, "requires": { "jest-mock": "^23.2.0", "jest-util": "^23.4.0", @@ -11596,14 +11066,12 @@ "acorn": { "version": "5.7.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" }, "acorn-globals": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, "requires": { "acorn": "^6.0.1", "acorn-walk": "^6.0.1" @@ -11612,28 +11080,24 @@ "acorn": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" } } }, "acorn-walk": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" }, "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "cssstyle": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, "requires": { "cssom": "0.3.x" } @@ -11642,7 +11106,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, "requires": { "abab": "^2.0.0", "whatwg-mimetype": "^2.2.0", @@ -11653,7 +11116,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -11666,7 +11128,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, "requires": { "webidl-conversions": "^4.0.2" } @@ -11675,7 +11136,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, "requires": { "whatwg-encoding": "^1.0.1" } @@ -11684,7 +11144,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, "requires": { "abab": "^2.0.0", "acorn": "^5.5.3", @@ -11717,14 +11176,12 @@ "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -11734,7 +11191,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -11742,14 +11198,12 @@ "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "whatwg-url": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -11760,7 +11214,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, "requires": { "async-limiter": "~1.0.0" } @@ -11771,7 +11224,6 @@ "version": "23.4.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", - "dev": true, "requires": { "jest-mock": "^23.2.0", "jest-util": "^23.4.0" @@ -11780,14 +11232,12 @@ "jest-get-type": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", - "dev": true + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==" }, "jest-haste-map": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz", "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", - "dev": true, "requires": { "fb-watchman": "^2.0.0", "graceful-fs": "^4.1.11", @@ -11803,7 +11253,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz", "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", - "dev": true, "requires": { "babel-traverse": "^6.0.0", "chalk": "^2.0.1", @@ -11823,7 +11272,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz", "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", - "dev": true, "requires": { "pretty-format": "^23.6.0" } @@ -11832,7 +11280,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz", "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", - "dev": true, "requires": { "chalk": "^2.0.1", "jest-get-type": "^22.1.0", @@ -11843,7 +11290,6 @@ "version": "23.4.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0-beta.35", "chalk": "^2.0.1", @@ -11855,26 +11301,22 @@ "jest-mock": { "version": "23.2.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", - "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=", - "dev": true + "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=" }, "jest-pnp-resolver": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.0.1.tgz", - "integrity": "sha512-kzhvJQp+9k0a/hpvIIzOJgOwfOqmnohdrAMZW2EscH3kxR2VWD7EcPa10cio8EK9V7PcD75bhG1pFnO70zGwSQ==", - "dev": true + "integrity": "sha512-kzhvJQp+9k0a/hpvIIzOJgOwfOqmnohdrAMZW2EscH3kxR2VWD7EcPa10cio8EK9V7PcD75bhG1pFnO70zGwSQ==" }, "jest-regex-util": { "version": "23.3.0", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", - "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=", - "dev": true + "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=" }, "jest-resolve": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz", "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", - "dev": true, "requires": { "browser-resolve": "^1.11.3", "chalk": "^2.0.1", @@ -11885,7 +11327,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz", "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", - "dev": true, "requires": { "jest-regex-util": "^23.3.0", "jest-snapshot": "^23.6.0" @@ -11895,7 +11336,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz", "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", - "dev": true, "requires": { "exit": "^0.1.2", "graceful-fs": "^4.1.11", @@ -11915,14 +11355,12 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { "version": "0.5.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.18.tgz", "integrity": "sha512-9luZr/BZ2QeU6tO2uG8N2aZpVSli4TSAOAqFOyTO51AJcD9P99c0K1h6dD6r6qo5dyT44BR5exweOaLLeldTkQ==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11934,7 +11372,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz", "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", - "dev": true, "requires": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^4.1.6", @@ -11963,7 +11400,6 @@ "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-generator": "^6.26.0", @@ -11990,7 +11426,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -11998,34 +11433,29 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" } } }, "jest-serializer": { "version": "23.0.1", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", - "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=", - "dev": true + "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=" }, "jest-snapshot": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz", "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", - "dev": true, "requires": { "babel-types": "^6.0.0", "chalk": "^2.0.1", @@ -12043,7 +11473,6 @@ "version": "23.4.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", - "dev": true, "requires": { "callsites": "^2.0.0", "chalk": "^2.0.1", @@ -12058,8 +11487,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -12067,7 +11495,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", - "dev": true, "requires": { "chalk": "^2.0.1", "jest-get-type": "^22.1.0", @@ -12078,8 +11505,7 @@ "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" } } }, @@ -12087,7 +11513,6 @@ "version": "23.4.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", - "dev": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", @@ -12098,7 +11523,6 @@ "version": "23.2.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", - "dev": true, "requires": { "merge-stream": "^1.0.1" } @@ -12210,8 +11634,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json-stringify-safe": { "version": "5.0.1", @@ -12301,7 +11724,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", - "dev": true, "requires": { "array-includes": "^3.0.3", "object.assign": "^4.1.0" @@ -12399,8 +11821,7 @@ "kleur": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", - "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", - "dev": true + "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==" }, "last-call-webpack-plugin": { "version": "3.0.0", @@ -12420,7 +11841,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, "requires": { "invert-kv": "^2.0.0" } @@ -12461,8 +11881,7 @@ "left-pad": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" }, "levn": { "version": "0.3.0", @@ -12504,7 +11923,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "dev": true, "requires": { "find-cache-dir": "^0.1.1", "mkdirp": "^0.5.1" @@ -12514,7 +11932,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, "requires": { "commondir": "^1.0.1", "mkdirp": "^0.5.1", @@ -12525,7 +11942,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -12535,7 +11951,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -12544,7 +11959,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, "requires": { "find-up": "^1.0.0" } @@ -12787,7 +12201,6 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, "requires": { "tmpl": "1.0.x" } @@ -12796,7 +12209,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, "requires": { "p-defer": "^1.0.0" } @@ -12830,8 +12242,7 @@ "math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" }, "md5.js": { "version": "1.3.5", @@ -12997,7 +12408,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", @@ -13007,8 +12417,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" } } }, @@ -13070,8 +12479,7 @@ "merge": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" }, "merge-deep": { "version": "3.0.2", @@ -13092,7 +12500,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, "requires": { "readable-stream": "^2.0.1" }, @@ -13101,7 +12508,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13116,7 +12522,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -13411,7 +12816,6 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, "requires": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -13574,9 +12978,9 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" }, "moment-duration-format": { "version": "2.3.2", @@ -13584,11 +12988,11 @@ "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" }, "moment-timezone": { - "version": "0.5.34", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", - "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "version": "0.5.46", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", "requires": { - "moment": ">= 2.9.0" + "moment": "^2.29.4" } }, "morgan": { @@ -13748,8 +13152,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "ncp": { "version": "2.0.0", @@ -13828,8 +13231,7 @@ "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, "node-libs-browser": { "version": "2.2.1", @@ -13896,7 +13298,6 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "dev": true, "requires": { "growly": "^1.3.0", "is-wsl": "^1.1.0", @@ -14097,8 +13498,7 @@ "object-hash": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "dev": true + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" }, "object-inspect": { "version": "1.7.0", @@ -14151,7 +13551,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -14262,7 +13661,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, "requires": { "execa": "^1.0.0", "lcid": "^2.0.0", @@ -14286,8 +13684,7 @@ "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" }, "p-finally": { "version": "1.0.0", @@ -14297,8 +13694,7 @@ "p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { "version": "1.3.0", @@ -14424,7 +13820,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, "requires": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -14561,7 +13956,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "dev": true, "requires": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" @@ -14571,7 +13965,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -14582,14 +13975,12 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" } } }, @@ -14597,7 +13988,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", - "dev": true, "requires": { "debug-log": "^1.0.0", "find-root": "^1.0.0", @@ -14623,14 +14013,12 @@ "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, "pnp-webpack-plugin": { "version": "1.1.0", @@ -18126,8 +17514,7 @@ "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { "version": "1.19.1", @@ -18147,7 +17534,6 @@ "version": "23.6.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, "requires": { "ansi-regex": "^3.0.0", "ansi-styles": "^3.2.0" @@ -18156,8 +17542,7 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" } } }, @@ -18179,8 +17564,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise": { "version": "8.0.2", @@ -18199,7 +17583,6 @@ "version": "0.1.14", "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", - "dev": true, "requires": { "kleur": "^2.0.1", "sisteransi": "^0.1.1" @@ -18215,6 +17598,11 @@ "react-is": "^16.8.1" } }, + "property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" + }, "property-information": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", @@ -18366,7 +17754,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, "requires": { "is-number": "^4.0.0", "kind-of": "^6.0.0", @@ -18376,14 +17763,12 @@ "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -18845,6 +18230,11 @@ "react-side-effect": "^1.1.0" } }, + "react-hook-form": { + "version": "7.54.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.54.2.tgz", + "integrity": "sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==" + }, "react-hot-loader": { "version": "4.13.1", "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.1.tgz", @@ -19194,7 +18584,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, "requires": { "util.promisify": "^1.0.0" } @@ -19383,7 +18772,6 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, "requires": { "is-equal-shallow": "^0.1.3" } @@ -19409,8 +18797,7 @@ "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "regexpu-core": { "version": "4.7.0", @@ -19823,14 +19210,12 @@ "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, "requires": { "caller-path": "^0.1.0", "resolve-from": "^1.0.0" @@ -19840,7 +19225,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, "requires": { "callsites": "^0.2.0" } @@ -19848,14 +19232,12 @@ "callsites": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" }, "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" } } }, @@ -19954,8 +19336,7 @@ "rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==" }, "run-async": { "version": "2.3.0", @@ -19968,8 +19349,7 @@ "run-parallel": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" }, "run-queue": { "version": "1.0.3", @@ -20023,7 +19403,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", - "dev": true, "requires": { "anymatch": "^2.0.0", "capture-exit": "^1.2.0", @@ -20039,20 +19418,17 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -20070,7 +19446,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -20081,7 +19456,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -20090,7 +19464,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -20105,7 +19478,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -20114,7 +19486,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -20123,7 +19494,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -20132,7 +19502,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -20143,7 +19512,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -20152,7 +19520,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -20163,7 +19530,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -20173,8 +19539,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -20182,7 +19547,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -20198,7 +19562,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -20207,7 +19570,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -20218,7 +19580,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -20230,7 +19591,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -20241,7 +19601,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -20250,7 +19609,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -20259,7 +19617,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -20270,7 +19627,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -20279,7 +19635,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -20289,14 +19644,12 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -20316,8 +19669,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -20826,8 +20178,7 @@ "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" }, "shortid": { "version": "2.2.16", @@ -20877,8 +20228,7 @@ "sisteransi": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", - "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==", - "dev": true + "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==" }, "slash": { "version": "1.0.0", @@ -20889,7 +20239,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0" } @@ -21076,7 +20425,6 @@ "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, "requires": { "source-map": "^0.5.6" } @@ -21199,14 +20547,12 @@ "stack-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" }, "standard": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/standard/-/standard-12.0.1.tgz", "integrity": "sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==", - "dev": true, "requires": { "eslint": "~5.4.0", "eslint-config-standard": "12.0.0", @@ -21222,20 +20568,17 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -21244,7 +20587,6 @@ "version": "5.4.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz", "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==", - "dev": true, "requires": { "ajv": "^6.5.0", "babel-code-frame": "^6.26.0", @@ -21290,7 +20632,6 @@ "version": "2.14.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, "requires": { "contains-path": "^0.1.0", "debug": "^2.6.8", @@ -21308,7 +20649,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -21317,7 +20657,6 @@ "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" @@ -21326,8 +20665,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -21335,7 +20673,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", - "dev": true, "requires": { "eslint-plugin-es": "^1.3.1", "eslint-utils": "^1.3.1", @@ -21348,14 +20685,12 @@ "eslint-plugin-promise": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", - "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", - "dev": true + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==" }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -21365,7 +20700,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, "requires": { "chardet": "^0.4.0", "iconv-lite": "^0.4.17", @@ -21376,7 +20710,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", - "dev": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", @@ -21397,7 +20730,6 @@ "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", @@ -21409,7 +20741,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } @@ -21418,7 +20749,6 @@ "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" } @@ -21427,7 +20757,6 @@ "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", @@ -21438,7 +20767,6 @@ "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" @@ -21448,7 +20776,6 @@ "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, "requires": { "symbol-observable": "1.0.1" } @@ -21457,7 +20784,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -21465,14 +20791,12 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" } } }, @@ -21480,7 +20804,6 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-9.0.0.tgz", "integrity": "sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==", - "dev": true, "requires": { "deglob": "^2.1.0", "get-stdin": "^6.0.0", @@ -21491,8 +20814,7 @@ "get-stdin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" } } }, @@ -21649,7 +20971,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, "requires": { "astral-regex": "^1.0.0", "strip-ansi": "^4.0.0" @@ -21658,14 +20979,12 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -21791,8 +21110,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-loader": { "version": "0.23.0", @@ -22003,7 +21321,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", - "dev": true, "requires": { "ajv": "^6.0.1", "ajv-keywords": "^3.0.0", @@ -22270,7 +21587,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", - "dev": true, "requires": { "arrify": "^1.0.1", "micromatch": "^2.3.11", @@ -22287,8 +21603,7 @@ "throat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" }, "through": { "version": "2.3.8", @@ -22346,6 +21661,11 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + }, "tiny-invariant": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", @@ -22367,8 +21687,7 @@ "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" }, "to-arraybuffer": { "version": "1.0.1", @@ -22593,6 +21912,11 @@ } } }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, "tough-cookie": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", @@ -22624,8 +21948,7 @@ "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, "trough": { "version": "1.0.5", @@ -22709,6 +22032,11 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -23212,7 +22540,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, "requires": { "makeerror": "1.0.x" } @@ -23229,7 +22556,6 @@ "version": "0.18.0", "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", - "dev": true, "requires": { "exec-sh": "^0.2.0", "minimist": "^1.2.0" @@ -24938,7 +24264,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -24948,7 +24273,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -24957,7 +24281,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -24975,7 +24298,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, "requires": { "mkdirp": "^0.5.1" } @@ -24984,7 +24306,6 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -25028,8 +24349,7 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, "yallist": { "version": "2.1.2", @@ -25040,7 +24360,6 @@ "version": "11.1.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", - "dev": true, "requires": { "cliui": "^4.0.0", "decamelize": "^1.1.1", @@ -25060,7 +24379,6 @@ "version": "9.0.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, "requires": { "camelcase": "^4.1.0" }, @@ -25068,8 +24386,7 @@ "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" } } }, @@ -25078,6 +24395,17 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" }, + "yup": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz", + "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==", + "requires": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, "zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", diff --git a/package.json b/package.json index ed6c1a2f..c0b81e02 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,15 @@ "@fortawesome/fontawesome-svg-core": "^1.2.14", "@fortawesome/free-solid-svg-icons": "^5.7.1", "@fortawesome/react-fontawesome": "^0.1.4", + "@hookform/resolvers": "^3.10.0", "@nateradebaugh/react-datetime": "^4.4.11", "@popperjs/core": "^2.5.4", "@svgr/webpack": "2.4.1", + "@toast-ui/editor": "^2.5.1", "axios": "^0.19.0", "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0", + "babel-jest": "23.6.0", "babel-loader": "8.0.4", "babel-plugin-named-asset-import": "^0.3.0", "babel-preset-react-app": "^7.0.0", @@ -25,14 +28,30 @@ "dotenv": "6.0.0", "dotenv-expand": "4.2.0", "easymde": "^2.18.0", + "eslint": "5.6.0", + "eslint-config-react-app": "^3.0.6", + "eslint-config-standard": "^12.0.0", + "eslint-config-standard-react": "^7.0.2", + "eslint-loader": "2.1.1", + "eslint-plugin-flowtype": "2.50.1", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-jsx-a11y": "6.1.2", + "eslint-plugin-node": "^8.0.1", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-react": "7.11.1", + "eslint-plugin-standard": "^4.0.0", "express": "^4.16.4", "fflate": "^0.7.4", "file-loader": "2.0.0", "filestack-js": "^3.20.0", "filestack-react": "^4.0.1", + "formik": "^2.4.6", "fs-extra": "7.0.0", "html-webpack-plugin": "4.0.0-alpha.2", "identity-obj-proxy": "3.0.0", + "jest": "23.6.0", + "jest-pnp-resolver": "1.0.1", + "jest-resolve": "23.6.0", "jquery": "^3.4.1", "jstimezonedetect": "^1.0.6", "jwt-decode": "^2.2.0", @@ -63,6 +82,7 @@ "react-dom": "^16.7.0", "react-google-charts": "^3.0.13", "react-helmet": "^5.2.0", + "react-hook-form": "^7.54.2", "react-hot-loader": "^4.13.1", "react-idle-timer": "^4.6.4", "react-js-pagination": "^3.0.3", @@ -89,6 +109,7 @@ "remark-parse": "^10.0.1", "resolve": "1.8.1", "sass-loader": "7.1.0", + "standard": "^12.0.1", "style-loader": "0.23.0", "tc-auth-lib": "topcoder-platform/tc-auth-lib#1.0.4", "terser": "^3.16.1", @@ -100,23 +121,7 @@ "webpack-dev-server": "^3.11.0", "webpack-manifest-plugin": "2.0.4", "xss": "^1.0.6", - "standard": "^12.0.1", - "eslint": "5.6.0", - "eslint-config-react-app": "^3.0.6", - "eslint-config-standard": "^12.0.0", - "eslint-config-standard-react": "^7.0.2", - "eslint-loader": "2.1.1", - "eslint-plugin-flowtype": "2.50.1", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-jsx-a11y": "6.1.2", - "eslint-plugin-node": "^8.0.1", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-react": "7.11.1", - "eslint-plugin-standard": "^4.0.0", - "jest": "23.6.0", - "jest-pnp-resolver": "1.0.1", - "jest-resolve": "23.6.0", - "babel-jest": "23.6.0" + "yup": "^1.6.1" }, "scripts": { "start": "node server.js", @@ -188,7 +193,7 @@ ] }, "devDependencies": { - "standard": "^12.0.1", + "babel-jest": "23.6.0", "eslint": "5.6.0", "eslint-config-react-app": "^3.0.6", "eslint-config-standard": "^12.0.0", @@ -204,7 +209,7 @@ "jest": "23.6.0", "jest-pnp-resolver": "1.0.1", "jest-resolve": "23.6.0", - "babel-jest": "23.6.0" + "standard": "^12.0.1" }, "volta": { "node": "12.17.0" diff --git a/scripts/build.js b/scripts/build.js index 60909f24..1cd0ca78 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -10,7 +10,7 @@ process.on('unhandledRejection', err => { // Ensure environment variables are read. require('../config/env') -console.log(`Build script is run with FILE_PICKER_API_KEY=${process.env.FILE_PICKER_API_KEY}`) +console.log(`Build script is run`) const path = require('path') const chalk = require('chalk') @@ -114,8 +114,10 @@ checkBrowsers(paths.appPath, isInteractive) } ) .catch(err => { - if (err && err.message) { - console.error(err.message) + if (err && process.env.NODE_ENV === 'development') { + console.log(err) + } else { + console.error('An unexpected error occurred while build') } process.exit(1) }) diff --git a/scripts/start.js b/scripts/start.js index 57864185..6ea45247 100644 --- a/scripts/start.js +++ b/scripts/start.js @@ -111,8 +111,10 @@ checkBrowsers(paths.appPath, isInteractive) }) }) .catch(err => { - if (err && err.message) { - console.error(err.message) + if (err && process.env.NODE_ENV === 'development') { + console.log(err) + } else { + console.error('An error occurred while starting the development server') } process.exit(1) }) diff --git a/server.js b/server.js index f5fb9cf6..d81a88a5 100644 --- a/server.js +++ b/server.js @@ -40,4 +40,4 @@ app.get('/*', (req, res) => res.sendFile(path.join(__dirname, 'build', 'index.ht const port = process.env.PORT || 3000 app.listen(port) -console.log(`App is listening on port ${port}`) +console.log(`App is now listening...`) diff --git a/src/actions/projects.js b/src/actions/projects.js index db7f5042..5f38015c 100644 --- a/src/actions/projects.js +++ b/src/actions/projects.js @@ -3,12 +3,25 @@ import { LOAD_CHALLENGE_MEMBERS_SUCCESS, LOAD_PROJECT_DETAILS, LOAD_PROJECT_PHASES, - LOAD_CHALLENGE_MEMBERS + LOAD_CHALLENGE_MEMBERS, + LOAD_PROJECT_TYPES, + CREATE_PROJECT, + LOAD_PROJECT_BILLING_ACCOUNTS, + UPDATE_PROJECT_PENDING, + UPDATE_PROJECT_SUCCESS, + UPDATE_PROJECT_FAILURE, + ADD_PROJECT_ATTACHMENT_SUCCESS, + UPDATE_PROJECT_ATTACHMENT_SUCCESS, + REMOVE_PROJECT_ATTACHMENT_SUCCESS } from '../config/constants' import { fetchProjectById, fetchBillingAccount, - fetchProjectPhases + fetchProjectPhases, + getProjectTypes, + createProjectApi, + fetchBillingAccounts, + updateProjectApi } from '../services/projects' /** @@ -26,6 +39,11 @@ export function loadProject (projectId, filterMembers = true) { payload: members }) } + // Loads billing account + dispatch({ + type: LOAD_PROJECT_BILLING_ACCOUNTS, + payload: fetchBillingAccounts(projectId) + }) // Loads billing account dispatch({ @@ -45,6 +63,82 @@ export function loadProject (projectId, filterMembers = true) { } } +/** + * Loads project types + */ +export function loadProjectTypes () { + return (dispatch) => { + return dispatch({ + type: LOAD_PROJECT_TYPES, + payload: getProjectTypes() + }) + } +} + +/** + * Creates a project + */ +export function createProject (project) { + return (dispatch) => { + return dispatch({ + type: CREATE_PROJECT, + payload: createProjectApi(project) + }) + } +} + +/** + * Add attachment to project + * @param {Object} newAttachment new attachment data + */ +export function addAttachment (newAttachment) { + return (dispatch) => { + return dispatch({ + type: ADD_PROJECT_ATTACHMENT_SUCCESS, + payload: newAttachment + }) + } +} + +/** + * Update project attachment + * @param {Object} newAttachment new attachment data + */ +export function updateAttachment (newAttachment) { + return (dispatch) => { + return dispatch({ + type: UPDATE_PROJECT_ATTACHMENT_SUCCESS, + payload: newAttachment + }) + } +} + +/** + * Remove project attachment + * @param {number} attachmentId attachment id + */ +export function removeAttachment (attachmentId) { + return (dispatch) => { + return dispatch({ + type: REMOVE_PROJECT_ATTACHMENT_SUCCESS, + payload: attachmentId + }) + } +} + +/** + * Only loads project details + * @param {String} projectId Id of the project + */ +export function loadOnlyProjectInfo (projectId) { + return (dispatch) => { + return dispatch({ + type: LOAD_PROJECT_DETAILS, + payload: fetchProjectById(projectId) + }) + } +} + export function reloadProjectMembers (projectId) { return (dispatch) => { return dispatch({ @@ -59,3 +153,38 @@ export function reloadProjectMembers (projectId) { }) } } + +/** + * Updates project details + * @param {string} projectId - The project ID + * @param {object} updatedProps - The updated project details + * @returns {Promise} The updated project + */ +export function updateProject (projectId, updatedProps) { + return async (dispatch) => { + dispatch({ + type: UPDATE_PROJECT_PENDING + }) + return updateProjectApi(projectId, updatedProps).then((project) => { + // refresh billing account + dispatch({ + type: LOAD_PROJECT_BILLING_ACCOUNT, + payload: fetchBillingAccount(projectId) + }) + dispatch({ + type: LOAD_PROJECT_BILLING_ACCOUNTS, + payload: fetchBillingAccounts(projectId) + }) + return dispatch({ + type: UPDATE_PROJECT_SUCCESS, + payload: project + }) + }).catch((e) => { + dispatch({ + type: UPDATE_PROJECT_FAILURE, + error: e + }) + return Promise.reject(e) + }) + } +} diff --git a/src/actions/sidebar.js b/src/actions/sidebar.js index 9f333005..dd521d25 100644 --- a/src/actions/sidebar.js +++ b/src/actions/sidebar.js @@ -8,8 +8,10 @@ import { LOAD_PROJECTS_PENDING, LOAD_PROJECTS_SUCCESS, RESET_SIDEBAR_ACTIVE_PARAMS, - UNLOAD_PROJECTS_SUCCESS + UNLOAD_PROJECTS_SUCCESS, + PROJECTS_PAGE_SIZE } from '../config/constants' +import { checkAdmin } from '../util/tc' import _ from 'lodash' /** @@ -28,13 +30,17 @@ export function setActiveProject (projectId) { /** * Loads projects of the authenticated user */ -export function loadProjects (filterProjectName = '', myProjects = true) { - return (dispatch) => { +export function loadProjects (filterProjectName = '', paramFilters = {}) { + return (dispatch, getState) => { dispatch({ type: LOAD_PROJECTS_PENDING }) - const filters = {} + const filters = { + sort: 'lastActivityAt desc', + perPage: PROJECTS_PAGE_SIZE, + ...paramFilters + } if (!_.isEmpty(filterProjectName)) { if (!isNaN(filterProjectName)) { // if it is number filters['id'] = parseInt(filterProjectName, 10) @@ -42,23 +48,44 @@ export function loadProjects (filterProjectName = '', myProjects = true) { filters['keyword'] = decodeURIComponent(filterProjectName) } } - filters['status'] = 'active' - filters['sort'] = 'lastActivityAt desc' - // filters['perPage'] = 20 - // filters['page'] = 1 - if (myProjects) { + + if (!checkAdmin(getState().auth.token)) { filters['memberOnly'] = true } - fetchMemberProjects(filters).then(projects => dispatch({ + // eslint-disable-next-line no-debugger + const state = getState().sidebar + fetchMemberProjects(filters).then(({ projects, pagination }) => dispatch({ type: LOAD_PROJECTS_SUCCESS, - projects + projects: _.uniqBy((state.projects || []).concat(projects), 'id'), + total: pagination.xTotal, + page: pagination.xPage })).catch(() => dispatch({ type: LOAD_PROJECTS_FAILURE })) } } +/** + * Load more projects for the authenticated user + */ +export function loadMoreProjects (filterProjectName = '', paramFilters = {}) { + return (dispatch, getState) => { + const state = getState().sidebar + + loadProjects(filterProjectName, _.assignIn({}, paramFilters, { + perPage: PROJECTS_PAGE_SIZE, + page: state.page + 1 + }))(dispatch, getState) + } +} + +export function loadTaasProjects (filterProjectName = '', paramFilters = {}) { + return loadProjects(filterProjectName, Object.assign({ + type: 'talent-as-a-service' + }, paramFilters)) +} + /** * Unloads projects of the authenticated user */ diff --git a/src/actions/users.js b/src/actions/users.js index 92e54cc1..46a9a56f 100644 --- a/src/actions/users.js +++ b/src/actions/users.js @@ -28,7 +28,7 @@ export function loadAllUserProjects (isAdmin = true) { filters['memberOnly'] = true } - fetchMemberProjects(filters).then(projects => dispatch({ + fetchMemberProjects(filters).then(({ projects }) => dispatch({ type: LOAD_ALL_USER_PROJECTS_SUCCESS, projects })).catch(() => dispatch({ @@ -66,7 +66,7 @@ export function searchUserProjects (isAdmin = true, keyword) { filters['memberOnly'] = true } - fetchMemberProjects(filters).then(projects => dispatch({ + fetchMemberProjects(filters).then(({ projects }) => dispatch({ type: SEARCH_USER_PROJECTS_SUCCESS, projects })).catch(() => dispatch({ diff --git a/src/assets/images/files/aac.svg b/src/assets/images/files/aac.svg new file mode 100644 index 00000000..38d95bbf --- /dev/null +++ b/src/assets/images/files/aac.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/ai.svg b/src/assets/images/files/ai.svg new file mode 100644 index 00000000..33d19427 --- /dev/null +++ b/src/assets/images/files/ai.svg @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/ase.svg b/src/assets/images/files/ase.svg new file mode 100644 index 00000000..ad573707 --- /dev/null +++ b/src/assets/images/files/ase.svg @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/asp.svg b/src/assets/images/files/asp.svg new file mode 100644 index 00000000..0a254722 --- /dev/null +++ b/src/assets/images/files/asp.svg @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/aspx.svg b/src/assets/images/files/aspx.svg new file mode 100644 index 00000000..de4dd224 --- /dev/null +++ b/src/assets/images/files/aspx.svg @@ -0,0 +1,22 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/avi.svg b/src/assets/images/files/avi.svg new file mode 100644 index 00000000..9da8a8c3 --- /dev/null +++ b/src/assets/images/files/avi.svg @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/bmp.svg b/src/assets/images/files/bmp.svg new file mode 100644 index 00000000..d966f646 --- /dev/null +++ b/src/assets/images/files/bmp.svg @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/c++.svg b/src/assets/images/files/c++.svg new file mode 100644 index 00000000..bbe352c4 --- /dev/null +++ b/src/assets/images/files/c++.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/cad.svg b/src/assets/images/files/cad.svg new file mode 100644 index 00000000..16ee1953 --- /dev/null +++ b/src/assets/images/files/cad.svg @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/cfm.svg b/src/assets/images/files/cfm.svg new file mode 100644 index 00000000..79870942 --- /dev/null +++ b/src/assets/images/files/cfm.svg @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/cgi.svg b/src/assets/images/files/cgi.svg new file mode 100644 index 00000000..e8811aa6 --- /dev/null +++ b/src/assets/images/files/cgi.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/csh.svg b/src/assets/images/files/csh.svg new file mode 100644 index 00000000..eb5cca5d --- /dev/null +++ b/src/assets/images/files/csh.svg @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/css.svg b/src/assets/images/files/css.svg new file mode 100644 index 00000000..59692551 --- /dev/null +++ b/src/assets/images/files/css.svg @@ -0,0 +1,27 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/csv.svg b/src/assets/images/files/csv.svg new file mode 100644 index 00000000..e1dd6611 --- /dev/null +++ b/src/assets/images/files/csv.svg @@ -0,0 +1,21 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/default.svg b/src/assets/images/files/default.svg new file mode 100644 index 00000000..2676714d --- /dev/null +++ b/src/assets/images/files/default.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/assets/images/files/dmg.svg b/src/assets/images/files/dmg.svg new file mode 100644 index 00000000..1e55afb8 --- /dev/null +++ b/src/assets/images/files/dmg.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/doc.svg b/src/assets/images/files/doc.svg new file mode 100644 index 00000000..dee20735 --- /dev/null +++ b/src/assets/images/files/doc.svg @@ -0,0 +1,19 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/docx.svg b/src/assets/images/files/docx.svg new file mode 100644 index 00000000..298c8c0e --- /dev/null +++ b/src/assets/images/files/docx.svg @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/eps.svg b/src/assets/images/files/eps.svg new file mode 100644 index 00000000..35879b7a --- /dev/null +++ b/src/assets/images/files/eps.svg @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/epub.svg b/src/assets/images/files/epub.svg new file mode 100644 index 00000000..7e18a411 --- /dev/null +++ b/src/assets/images/files/epub.svg @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/exe.svg b/src/assets/images/files/exe.svg new file mode 100644 index 00000000..6d9238cc --- /dev/null +++ b/src/assets/images/files/exe.svg @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/flash.svg b/src/assets/images/files/flash.svg new file mode 100644 index 00000000..7ead3253 --- /dev/null +++ b/src/assets/images/files/flash.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/flv.svg b/src/assets/images/files/flv.svg new file mode 100644 index 00000000..375ae6d4 --- /dev/null +++ b/src/assets/images/files/flv.svg @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/font.svg b/src/assets/images/files/font.svg new file mode 100644 index 00000000..841cf5a9 --- /dev/null +++ b/src/assets/images/files/font.svg @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/gif.svg b/src/assets/images/files/gif.svg new file mode 100644 index 00000000..eefd4a67 --- /dev/null +++ b/src/assets/images/files/gif.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/gpx.svg b/src/assets/images/files/gpx.svg new file mode 100644 index 00000000..1052c35c --- /dev/null +++ b/src/assets/images/files/gpx.svg @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/gzip.svg b/src/assets/images/files/gzip.svg new file mode 100644 index 00000000..3547af13 --- /dev/null +++ b/src/assets/images/files/gzip.svg @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/html.svg b/src/assets/images/files/html.svg new file mode 100644 index 00000000..5400dc37 --- /dev/null +++ b/src/assets/images/files/html.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/ics.svg b/src/assets/images/files/ics.svg new file mode 100644 index 00000000..c5bc30f8 --- /dev/null +++ b/src/assets/images/files/ics.svg @@ -0,0 +1,21 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/iso.svg b/src/assets/images/files/iso.svg new file mode 100644 index 00000000..a3154bd5 --- /dev/null +++ b/src/assets/images/files/iso.svg @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/jar.svg b/src/assets/images/files/jar.svg new file mode 100644 index 00000000..73320066 --- /dev/null +++ b/src/assets/images/files/jar.svg @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/java.svg b/src/assets/images/files/java.svg new file mode 100644 index 00000000..b4e93e49 --- /dev/null +++ b/src/assets/images/files/java.svg @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/jpg.svg b/src/assets/images/files/jpg.svg new file mode 100644 index 00000000..d2c71c95 --- /dev/null +++ b/src/assets/images/files/jpg.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/js.svg b/src/assets/images/files/js.svg new file mode 100644 index 00000000..d3830b5c --- /dev/null +++ b/src/assets/images/files/js.svg @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/jsp.svg b/src/assets/images/files/jsp.svg new file mode 100644 index 00000000..7c73e070 --- /dev/null +++ b/src/assets/images/files/jsp.svg @@ -0,0 +1,21 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/link-12.svg b/src/assets/images/files/link-12.svg new file mode 100644 index 00000000..c7a68910 --- /dev/null +++ b/src/assets/images/files/link-12.svg @@ -0,0 +1,11 @@ + + + + DEA252EB-7149-42DE-B34C-229261299CDE + Created with sketchtool. + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/log.svg b/src/assets/images/files/log.svg new file mode 100644 index 00000000..ddef4c49 --- /dev/null +++ b/src/assets/images/files/log.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/max.svg b/src/assets/images/files/max.svg new file mode 100644 index 00000000..cda62f32 --- /dev/null +++ b/src/assets/images/files/max.svg @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/md.svg b/src/assets/images/files/md.svg new file mode 100644 index 00000000..d94d0e8e --- /dev/null +++ b/src/assets/images/files/md.svg @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/mkv.svg b/src/assets/images/files/mkv.svg new file mode 100644 index 00000000..78ac9de0 --- /dev/null +++ b/src/assets/images/files/mkv.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/mov.svg b/src/assets/images/files/mov.svg new file mode 100644 index 00000000..63fdcceb --- /dev/null +++ b/src/assets/images/files/mov.svg @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/mp3.svg b/src/assets/images/files/mp3.svg new file mode 100644 index 00000000..cd0004d7 --- /dev/null +++ b/src/assets/images/files/mp3.svg @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/mp4.svg b/src/assets/images/files/mp4.svg new file mode 100644 index 00000000..07efa4fb --- /dev/null +++ b/src/assets/images/files/mp4.svg @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/mpg.svg b/src/assets/images/files/mpg.svg new file mode 100644 index 00000000..8f0063bf --- /dev/null +++ b/src/assets/images/files/mpg.svg @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/obj.svg b/src/assets/images/files/obj.svg new file mode 100644 index 00000000..b10608e5 --- /dev/null +++ b/src/assets/images/files/obj.svg @@ -0,0 +1,19 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/otf.svg b/src/assets/images/files/otf.svg new file mode 100644 index 00000000..ec9e8a84 --- /dev/null +++ b/src/assets/images/files/otf.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/pdf.svg b/src/assets/images/files/pdf.svg new file mode 100644 index 00000000..e51db6af --- /dev/null +++ b/src/assets/images/files/pdf.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/php.svg b/src/assets/images/files/php.svg new file mode 100644 index 00000000..4fa31bf5 --- /dev/null +++ b/src/assets/images/files/php.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/png.svg b/src/assets/images/files/png.svg new file mode 100644 index 00000000..dc79b7b7 --- /dev/null +++ b/src/assets/images/files/png.svg @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/pptx.svg b/src/assets/images/files/pptx.svg new file mode 100644 index 00000000..d6b420ee --- /dev/null +++ b/src/assets/images/files/pptx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/psd.svg b/src/assets/images/files/psd.svg new file mode 100644 index 00000000..c9505839 --- /dev/null +++ b/src/assets/images/files/psd.svg @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/py.svg b/src/assets/images/files/py.svg new file mode 100644 index 00000000..7ad94154 --- /dev/null +++ b/src/assets/images/files/py.svg @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/rar.svg b/src/assets/images/files/rar.svg new file mode 100644 index 00000000..c11a7ea1 --- /dev/null +++ b/src/assets/images/files/rar.svg @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/raw.svg b/src/assets/images/files/raw.svg new file mode 100644 index 00000000..f636dace --- /dev/null +++ b/src/assets/images/files/raw.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/rb.svg b/src/assets/images/files/rb.svg new file mode 100644 index 00000000..4bec9d8d --- /dev/null +++ b/src/assets/images/files/rb.svg @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/rss.svg b/src/assets/images/files/rss.svg new file mode 100644 index 00000000..ee5e4420 --- /dev/null +++ b/src/assets/images/files/rss.svg @@ -0,0 +1,25 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/rtf.svg b/src/assets/images/files/rtf.svg new file mode 100644 index 00000000..d6833570 --- /dev/null +++ b/src/assets/images/files/rtf.svg @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/sketch.svg b/src/assets/images/files/sketch.svg new file mode 100644 index 00000000..ebe192e7 --- /dev/null +++ b/src/assets/images/files/sketch.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/sql.svg b/src/assets/images/files/sql.svg new file mode 100644 index 00000000..75b8f3bc --- /dev/null +++ b/src/assets/images/files/sql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/files/srt.svg b/src/assets/images/files/srt.svg new file mode 100644 index 00000000..ab7e8658 --- /dev/null +++ b/src/assets/images/files/srt.svg @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/svg.svg b/src/assets/images/files/svg.svg new file mode 100644 index 00000000..9923ee36 --- /dev/null +++ b/src/assets/images/files/svg.svg @@ -0,0 +1,21 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/tif.svg b/src/assets/images/files/tif.svg new file mode 100644 index 00000000..ca24a164 --- /dev/null +++ b/src/assets/images/files/tif.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/tiff.svg b/src/assets/images/files/tiff.svg new file mode 100644 index 00000000..928ce965 --- /dev/null +++ b/src/assets/images/files/tiff.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/ttf.svg b/src/assets/images/files/ttf.svg new file mode 100644 index 00000000..33800659 --- /dev/null +++ b/src/assets/images/files/ttf.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/txt.svg b/src/assets/images/files/txt.svg new file mode 100644 index 00000000..992f5d5e --- /dev/null +++ b/src/assets/images/files/txt.svg @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/wav.svg b/src/assets/images/files/wav.svg new file mode 100644 index 00000000..989a380a --- /dev/null +++ b/src/assets/images/files/wav.svg @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/xlsx.svg b/src/assets/images/files/xlsx.svg new file mode 100644 index 00000000..1555d7b3 --- /dev/null +++ b/src/assets/images/files/xlsx.svg @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/xml.svg b/src/assets/images/files/xml.svg new file mode 100644 index 00000000..f57f8428 --- /dev/null +++ b/src/assets/images/files/xml.svg @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/files/zip.svg b/src/assets/images/files/zip.svg new file mode 100644 index 00000000..ed8c4a95 --- /dev/null +++ b/src/assets/images/files/zip.svg @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/plus-gray.svg b/src/assets/images/plus-gray.svg new file mode 100644 index 00000000..895827a8 --- /dev/null +++ b/src/assets/images/plus-gray.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/images/x-gray.svg b/src/assets/images/x-gray.svg new file mode 100644 index 00000000..9c9e3359 --- /dev/null +++ b/src/assets/images/x-gray.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/components/AssetsLibrary/DownloadFile/index.js b/src/components/AssetsLibrary/DownloadFile/index.js new file mode 100644 index 00000000..a76a95ba --- /dev/null +++ b/src/components/AssetsLibrary/DownloadFile/index.js @@ -0,0 +1,63 @@ +/* Component to render button to download project attachment file */ + +import React, { useState } from 'react' +import PropTypes from 'prop-types' +import _ from 'lodash' +import styles from './styles.module.scss' +import Loader from '../../Loader' +import { toastr } from 'react-redux-toastr' +import cn from 'classnames' +import { getProjectAttachment } from '../../../services/projects' +import ReactSVG from 'react-svg' +const Download = './IconSquareDownload.svg' +const assets = require.context('../../../assets/images', false, /svg/) + +const DownloadFile = ({ classsName, file, projectId }) => { + const [isLoading, setIsLoading] = useState(false) + + return ( + + ) +} + +DownloadFile.defaultProps = { + file: {} +} + +DownloadFile.propTypes = { + classsName: PropTypes.string, + projectId: PropTypes.string, + file: PropTypes.shape() +} + +export default DownloadFile diff --git a/src/components/AssetsLibrary/DownloadFile/styles.module.scss b/src/components/AssetsLibrary/DownloadFile/styles.module.scss new file mode 100644 index 00000000..fccd9fd5 --- /dev/null +++ b/src/components/AssetsLibrary/DownloadFile/styles.module.scss @@ -0,0 +1,35 @@ +@import '../../../styles/includes'; + +.container { + display: flex; + padding: 0; + margin: 0; + border: none; + outline: none !important; + background-color: transparent; + color: $tc-gray-90 !important; + &:hover .downloadIcon { + opacity: 1; + } +} + +.loader { + width: auto; + height: auto; + margin-left: 5px; + + svg { + width: 20px; + height: 20px; + } +} + +.downloadIcon { + opacity: 0; + margin-left: 5px; + transition: 0.15s ease; + svg { + width: 12px; + height: 12px; + } +} \ No newline at end of file diff --git a/src/components/AssetsLibrary/ModalAddLink/index.js b/src/components/AssetsLibrary/ModalAddLink/index.js new file mode 100644 index 00000000..420f287a --- /dev/null +++ b/src/components/AssetsLibrary/ModalAddLink/index.js @@ -0,0 +1,178 @@ +/* Component to render add link modal */ + +import React, { useMemo, useState, useEffect, useCallback } from 'react' +import { useForm } from 'react-hook-form' +import { yupResolver } from '@hookform/resolvers/yup' +import { connect } from 'react-redux' +import _ from 'lodash' +import PropTypes from 'prop-types' +import styles from './styles.module.scss' +import cn from 'classnames' +import { toastr } from 'react-redux-toastr' +import Modal from '../../Modal' +import PrimaryButton from '../../Buttons/PrimaryButton' +import OutlineButton from '../../Buttons/OutlineButton' +import FieldLabelDynamic from '../../FieldLabelDynamic' +import FieldInput from '../../FieldInput' +import { assetsLibraryAddLinkSchema } from '../../../util/validation' +import { addAttachment, updateAttachment } from '../../../actions/projects' +import { + addProjectAttachmentApi, + updateProjectAttachmentApi +} from '../../../services/projects' +import { ATTACHMENT_TYPE_LINK } from '../../../config/constants' + +const ModalAddLink = ({ + classsName, + theme, + onCancel, + link, + addAttachment, + updateAttachment, + projectId +}) => { + const [isProcessing, setIsProcessing] = useState(false) + const buttonText = useMemo(() => (link ? 'Edit Link' : 'Add Link'), [link]) + + const { + register, + handleSubmit, + reset, + formState: { errors, isValid, isDirty } + } = useForm({ + defaultValues: { + title: '', + path: '' + }, + resolver: yupResolver(assetsLibraryAddLinkSchema), + mode: 'all' + }) + + useEffect(() => { + if (link) { + reset({ + title: link.title, + path: link.path + }) + } + }, [link]) + + const onSubmit = useCallback( + data => { + if (!link) { + setIsProcessing(true) + addProjectAttachmentApi(projectId, { + ...data, + tags: [], + type: ATTACHMENT_TYPE_LINK + }) + .then(result => { + toastr.success('Success', 'Added link to the project successfully.') + setIsProcessing(false) + addAttachment(result) + onCancel() + }) + .catch(e => { + setIsProcessing(false) + const errorMessage = _.get( + e, + 'response.data.message', + 'Failed to add link.' + ) + toastr.error('Error', errorMessage) + }) + } else { + setIsProcessing(true) + updateProjectAttachmentApi(projectId, link.id, data) + .then(result => { + toastr.success('Success', 'Updated link successfully.') + setIsProcessing(false) + updateAttachment(result) + onCancel() + }) + .catch(e => { + setIsProcessing(false) + const errorMessage = _.get( + e, + 'response.data.message', + 'Failed to update link.' + ) + toastr.error('Error', errorMessage) + }) + } + }, + [link, projectId] + ) + + return ( + +
+
{link ? 'EDIT LINK' : 'ADD A LINK'}
+ +
+ + + + + + +
+
+ +
+
+ +
+
+
+
+
+ ) +} + +ModalAddLink.defaultProps = { + isProcessing: false, + projectId: '', + onCancel: () => {} +} + +ModalAddLink.propTypes = { + classsName: PropTypes.string, + theme: PropTypes.shape(), + onCancel: PropTypes.func, + addAttachment: PropTypes.func.isRequired, + updateAttachment: PropTypes.func.isRequired, + link: PropTypes.shape(), + projectId: PropTypes.string +} + +const mapStateToProps = () => { + return {} +} + +const mapDispatchToProps = { + addAttachment, + updateAttachment +} + +export default connect(mapStateToProps, mapDispatchToProps)(ModalAddLink) diff --git a/src/components/AssetsLibrary/ModalAddLink/styles.module.scss b/src/components/AssetsLibrary/ModalAddLink/styles.module.scss new file mode 100644 index 00000000..8ff2a99d --- /dev/null +++ b/src/components/AssetsLibrary/ModalAddLink/styles.module.scss @@ -0,0 +1,51 @@ +@import '../../../styles/includes'; + +.container { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; + background: $white; + opacity: 1; + position: relative; + border-radius: 6px; + margin: 0 auto; + padding: 15px 20px; + width: 600px; + max-width: 95vw; +} + +.button { + height: 40px; + + span, + button { + padding: 0 20px; + } +} + +.title { + @include roboto-medium(); + + color: grey; + font-size: 16px; +} + +.blockRow { + width: 100%; +} + +.blockForm { + display: flex; + flex-direction: column; + gap: 30px; + align-items: center; + margin-top: 30px; + margin-bottom: 10px; +} + +.blockBtns { + display: flex; + gap: 30px; +} diff --git a/src/components/AssetsLibrary/ModalAttachmentOptions/index.js b/src/components/AssetsLibrary/ModalAttachmentOptions/index.js new file mode 100644 index 00000000..e879746a --- /dev/null +++ b/src/components/AssetsLibrary/ModalAttachmentOptions/index.js @@ -0,0 +1,284 @@ +/* Component to render attachment options modal */ + +import React, { useEffect, useState, useRef, useCallback } from 'react' +import _ from 'lodash' +import PropTypes from 'prop-types' +import styles from './styles.module.scss' +import { useForm, Controller } from 'react-hook-form' +import { yupResolver } from '@hookform/resolvers/yup' +import { toastr } from 'react-redux-toastr' +import { connect } from 'react-redux' +import cn from 'classnames' +import Modal from '../../Modal' +import FieldUserAutoComplete from '../../FieldUserAutoComplete' +import FieldLabelDynamic from '../../FieldLabelDynamic' +import PrimaryButton from '../../Buttons/PrimaryButton' +import OutlineButton from '../../Buttons/OutlineButton' +import FieldInput from '../../FieldInput' +import { assetsLibraryEditFileSchema } from '../../../util/validation' +import { + addProjectAttachmentApi, + updateProjectAttachmentApi +} from '../../../services/projects' +import { addAttachment, updateAttachment } from '../../../actions/projects' + +const ModalAttachmentOptions = ({ + classsName, + theme, + onCancel, + attachment, + members, + addAttachment, + updateAttachment, + projectId, + loggedInUser, + newAttachments +}) => { + const [isProcessing, setIsProcessing] = useState(false) + const shareType = useRef('') + + const { + control, + register, + handleSubmit, + reset, + watch, + formState: { errors, isValid, isDirty } + } = useForm({ + defaultValues: { + allowedUsers: [] + }, + resolver: attachment ? yupResolver(assetsLibraryEditFileSchema) : null, + mode: 'all' + }) + + const allowedUsers = watch('allowedUsers') + + useEffect(() => { + if (attachment) { + reset({ + title: attachment.title, + allowedUsers: attachment.allowedUsers || [] + }) + } + }, [attachment]) + + const onEditSubmit = useCallback( + data => { + setIsProcessing(true) + updateProjectAttachmentApi(projectId, attachment.id, data) + .then(result => { + toastr.success('Success', 'Updated file successfully.') + setIsProcessing(false) + updateAttachment(result) + onCancel() + }) + .catch(e => { + setIsProcessing(false) + const errorMessage = _.get( + e, + 'response.data.message', + 'Failed to update file.' + ) + toastr.error('Error', errorMessage) + }) + }, + [attachment, projectId] + ) + + const onNewSubmit = useCallback( + allowedUsers => { + let count = newAttachments.length + let errorMessage = '' + const checkToFinish = () => { + count = count - 1 + if (count === 0) { + setIsProcessing(false) + if (errorMessage) { + toastr.error('Error', errorMessage) + } else { + toastr.success('Success', 'Added file to the project successfully.') + onCancel() + } + } + } + setIsProcessing(true) + _.forEach(newAttachments, newAttachment => { + addProjectAttachmentApi(projectId, { + ...newAttachment, + allowedUsers + }) + .then(result => { + addAttachment(result) + checkToFinish() + }) + .catch(e => { + errorMessage = _.get( + e, + 'response.data.message', + 'Failed to add file.' + ) + checkToFinish() + }) + }) + }, + [newAttachments, projectId] + ) + + return ( + +
+
+ {attachment ? 'EDIT FILE' : 'ATTACHMENT OPTIONS'} +
+
+ {!!attachment && ( + + + + )} +
+ {!attachment && ( + <> + + Who do you want to share this file with? + +
+ { + shareType.current = 'all' + onNewSubmit(null) + }} + disabled={isProcessing} + /> +
+ + )} +
+ {!attachment && ( + + OR ONLY SPECIFIC PEOPLE + + )} + + ( + + )} + name='allowedUsers' + /> + + {!attachment && ( +
+ { + shareType.current = 'selected' + onNewSubmit(allowedUsers) + }} + disabled={ + isProcessing || !allowedUsers || !allowedUsers.length + } + /> +
+ )} +
+
+ + {!!attachment && ( +
+
+ +
+
+ +
+
+ )} +
+
+
+ ) +} + +ModalAttachmentOptions.defaultProps = { + members: [], + newAttachments: [], + projectId: '' +} + +ModalAttachmentOptions.propTypes = { + classsName: PropTypes.string, + theme: PropTypes.shape(), + onCancel: PropTypes.func, + attachment: PropTypes.shape(), + newAttachments: PropTypes.arrayOf(PropTypes.shape()), + members: PropTypes.arrayOf(PropTypes.shape()), + addAttachment: PropTypes.func.isRequired, + updateAttachment: PropTypes.func.isRequired, + projectId: PropTypes.string, + loggedInUser: PropTypes.object +} + +const mapStateToProps = () => { + return {} +} + +const mapDispatchToProps = { + addAttachment, + updateAttachment +} + +export default connect( + mapStateToProps, + mapDispatchToProps +)(ModalAttachmentOptions) diff --git a/src/components/AssetsLibrary/ModalAttachmentOptions/styles.module.scss b/src/components/AssetsLibrary/ModalAttachmentOptions/styles.module.scss new file mode 100644 index 00000000..cef8ec1e --- /dev/null +++ b/src/components/AssetsLibrary/ModalAttachmentOptions/styles.module.scss @@ -0,0 +1,97 @@ +@import '../../../styles/includes'; + +.container { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; + background: $white; + opacity: 1; + position: relative; + border-radius: 6px; + margin: 0 auto; + padding: 15px 20px; + width: 600px; + max-width: 95vw; +} + +.button { + height: 40px; + + span, + button { + padding: 0 20px; + } +} + +.title { + @include roboto-medium(); + + color: grey; + font-size: 16px; +} + +.blockRow { + width: 100%; +} + +.blockAddAttachment { + border-top: 1px solid $tc-gray-30; + display: flex; + flex-direction: column; + align-items: center; + margin-top: 20px; +} + +.textWhoYouWant { + @include roboto; + + width: 100%; + margin-top: 30px; + margin-bottom: 10px; + font-size: 16px; +} + +.blockForm { + display: flex; + flex-direction: column; + gap: 30px; + align-items: center; +} + +.blockFormEdit { + margin-top: 30px; + margin-bottom: 10px; +} + +.blockSelectMember { + width: calc(100% + 40px); + display: flex; + flex-direction: column; + align-items: center; + box-sizing: border-box; + padding: 10px; + background: $tc-gray-20; + border-top: 1px solid $tc-gray-30; + margin: 10px -20px -15px -20px; + border-radius: 0 0 10px 10px; +} + +.textOrOnly { + @include roboto-medium(); + + font-size: 11px; + color: grey; + text-transform: uppercase; +} + +.btnShareWith { + margin-top: 10px; + margin-bottom: 30px; +} + +.blockBtns { + display: flex; + gap: 30px; +} diff --git a/src/components/AssetsLibrary/ProjectMember/index.js b/src/components/AssetsLibrary/ProjectMember/index.js new file mode 100644 index 00000000..f129b17f --- /dev/null +++ b/src/components/AssetsLibrary/ProjectMember/index.js @@ -0,0 +1,33 @@ +/* Component to render project member */ + +import React, { useMemo } from 'react' +import PropTypes from 'prop-types' +import styles from './styles.module.scss' +import cn from 'classnames' +import { PROFILE_URL } from '../../../config/constants' +import { getFullNameWithFallback } from '../../../util/tc' + +const ProjectMember = ({ classsName, memberInfo }) => { + const fullName = useMemo(() => getFullNameWithFallback(memberInfo), [ + memberInfo + ]) + return ( + + {fullName} + + ) +} + +ProjectMember.defaultProps = {} + +ProjectMember.propTypes = { + classsName: PropTypes.string, + memberInfo: PropTypes.shape() +} + +export default ProjectMember diff --git a/src/components/AssetsLibrary/ProjectMember/styles.module.scss b/src/components/AssetsLibrary/ProjectMember/styles.module.scss new file mode 100644 index 00000000..4ac6ceeb --- /dev/null +++ b/src/components/AssetsLibrary/ProjectMember/styles.module.scss @@ -0,0 +1,5 @@ +@import '../../../styles/includes'; + +.container { + display: flex; +} \ No newline at end of file diff --git a/src/components/AssetsLibrary/ProjectMembers/index.js b/src/components/AssetsLibrary/ProjectMembers/index.js new file mode 100644 index 00000000..ad9eeb6c --- /dev/null +++ b/src/components/AssetsLibrary/ProjectMembers/index.js @@ -0,0 +1,60 @@ +/* Component to render list of project member */ + +import React, { useMemo, useState } from 'react' +import PropTypes from 'prop-types' +import _ from 'lodash' +import styles from './styles.module.scss' +import ProjectMember from '../ProjectMember' +import cn from 'classnames' + +const ProjectMembers = ({ classsName, members, allowedUsers, maxShownNum }) => { + const [showAll, setShowAll] = useState(false) + const allowedUserInfos = useMemo(() => { + const results = _.uniqBy( + _.compact(allowedUsers.map(userId => _.find(members, { userId }))), + 'userId' + ) + let extra = 0 + const maxUsers = [...results] + if (maxUsers.length > maxShownNum) { + extra = results.length - maxShownNum + maxUsers.length = maxShownNum + } + + return { + all: results, + maxUsers, + extra + } + }, [members, allowedUsers, maxShownNum]) + + return ( +
+ {(showAll ? allowedUserInfos.all : allowedUserInfos.maxUsers).map( + item => ( + + ) + )} + {!showAll && allowedUserInfos.extra !== 0 && ( + + )} +
+ ) +} + +ProjectMembers.defaultProps = { + maxShownNum: 3, + allowedUsers: [], + members: [] +} + +ProjectMembers.propTypes = { + classsName: PropTypes.string, + maxShownNum: PropTypes.number, + allowedUsers: PropTypes.arrayOf(PropTypes.number), + members: PropTypes.arrayOf(PropTypes.shape()) +} + +export default ProjectMembers diff --git a/src/components/AssetsLibrary/ProjectMembers/styles.module.scss b/src/components/AssetsLibrary/ProjectMembers/styles.module.scss new file mode 100644 index 00000000..16cefcce --- /dev/null +++ b/src/components/AssetsLibrary/ProjectMembers/styles.module.scss @@ -0,0 +1,17 @@ +@import '../../../styles/includes'; + +.container { + display: flex; + flex-direction: column; + align-items: flex-start; +} + +.btn { + border: none; + background-color: transparent; + margin: 0; + outline: none !important; + border: 1px solid $tc-gray-30; + border-radius: 6px; + padding: 0 3px; +} \ No newline at end of file diff --git a/src/components/AssetsLibrary/TabCommon/index.js b/src/components/AssetsLibrary/TabCommon/index.js new file mode 100644 index 00000000..2b319c04 --- /dev/null +++ b/src/components/AssetsLibrary/TabCommon/index.js @@ -0,0 +1,49 @@ +/* Component to render tab ui */ + +import React from 'react' +import PropTypes from 'prop-types' +import styles from './styles.module.scss' +import cn from 'classnames' + +const TabCommon = ({ items, classsName, selectedIndex, onSelect }) => { + return ( +
+ {items.map((item, index) => ( + + ))} +
+ ) +} + +TabCommon.defaultProps = { + items: [], + classsName: '', + onSelect: () => {} +} + +TabCommon.propTypes = { + items: PropTypes.arrayOf( + PropTypes.shape({ + label: PropTypes.string, + count: PropTypes.number + }) + ), + classsName: PropTypes.string, + selectedIndex: PropTypes.number, + onSelect: PropTypes.func +} + +export default TabCommon diff --git a/src/components/AssetsLibrary/TabCommon/styles.module.scss b/src/components/AssetsLibrary/TabCommon/styles.module.scss new file mode 100644 index 00000000..191cee55 --- /dev/null +++ b/src/components/AssetsLibrary/TabCommon/styles.module.scss @@ -0,0 +1,50 @@ +@import '../../../styles/includes'; + +.container { + display: flex; + gap: 20px; +} + +.blockTab { + padding: 0 15px; + margin: 0; + border: none; + background: transparent; + display: flex; + border-radius: 20px; + height: 30px; + align-items: flex-end; + gap: 5px; + outline: none !important; + + &.selected { + background-color: $tc-gray-30; + + * { + font-weight: 700; + } + .textCount { + background-color: $tc-gray-80; + } + } +} + +.textLabel { + @include roboto; + + font-size: 16px; + line-height: 30px; + color: $tc-gray-90; +} + +.textCount { + @include roboto; + + background-color: grey; + border-radius: 9px; + color: #fff; + font-size: 10px; + line-height: 12px; + padding: 0 4px; + margin-bottom: 7px; +} diff --git a/src/components/AssetsLibrary/TableAssets/index.js b/src/components/AssetsLibrary/TableAssets/index.js new file mode 100644 index 00000000..e5dc40c4 --- /dev/null +++ b/src/components/AssetsLibrary/TableAssets/index.js @@ -0,0 +1,158 @@ +/* Component to render assets table */ + +import React, { useMemo } from 'react' +import PropTypes from 'prop-types' +import _ from 'lodash' +import moment from 'moment' +import styles from './styles.module.scss' +import Table from '../../Table' +import IconThreeDot from '../../Icons/IconThreeDot' +import DropdownMenu from '../../DropdownMenu' +import DownloadFile from '../DownloadFile' +import IconFile from '../../Icons/IconFile' +import cn from 'classnames' +import { + PROJECT_ASSETS_SHARED_WITH_ALL_MEMBERS, + PROJECT_ASSETS_SHARED_WITH_ADMIN +} from '../../../config/constants' +import ProjectMembers from '../ProjectMembers' +import ProjectMember from '../ProjectMember' + +const TableAssets = ({ + classsName, + title, + onEdit, + onRemove, + datas, + isLink, + projectId, + members, + loggedInUser, + isAdmin +}) => { + const displayAssets = useMemo( + () => + datas.map(item => { + const titles = item.title.split('.') + const owner = _.find(members, { userId: item.createdBy }) + const canEdit = + `${item.createdBy}` === `${loggedInUser.userId}` || isAdmin + return { + ...item, + fileType: titles[titles.length - 1], + owner, + updatedAtString: item.updatedAt + ? moment(item.updatedAt).format('MM/DD/YYYY h:mm A') + : '—', + canEdit + } + }), + [datas, members, loggedInUser, isAdmin] + ) + return ( +
+ {title} + + ( + + + + + + {isLink ? ( + + {item.title} + + ) : ( + + )} + + + {!item.allowedUsers && PROJECT_ASSETS_SHARED_WITH_ALL_MEMBERS} + {item.allowedUsers && + item.allowedUsers === 0 && + PROJECT_ASSETS_SHARED_WITH_ADMIN} + {item.allowedUsers && item.allowedUsers !== 0 && ( + + )} + + + {!item.owner && !item.createdBy && '—'} + {!item.owner && item.createdBy !== 'CoderBot' && 'Unknown'} + {!item.owner && item.createdBy === 'CoderBot' && 'CoderBot'} + {!!item.owner && } + + + {item.updatedAtString} + + + {item.canEdit && ( + { + if (menu === 'Edit') { + onEdit(item) + } else if (menu === 'Remove') { + onRemove(item) + } + }} + options={['Edit', 'Remove']} + > + + + )} + + + ))} + /> + + ) +} + +TableAssets.defaultProps = { + title: '', + onEdit: () => {}, + onRemove: () => {}, + datas: [], + isLink: false, + isAdmin: false, + members: [] +} + +TableAssets.propTypes = { + classsName: PropTypes.string, + projectId: PropTypes.string, + title: PropTypes.string, + isAdmin: PropTypes.bool, + onEdit: PropTypes.func, + onRemove: PropTypes.func, + datas: PropTypes.arrayOf(PropTypes.shape()), + members: PropTypes.arrayOf(PropTypes.shape()), + isLink: PropTypes.bool, + loggedInUser: PropTypes.object +} + +export default TableAssets diff --git a/src/components/AssetsLibrary/TableAssets/styles.module.scss b/src/components/AssetsLibrary/TableAssets/styles.module.scss new file mode 100644 index 00000000..f719e5c7 --- /dev/null +++ b/src/components/AssetsLibrary/TableAssets/styles.module.scss @@ -0,0 +1,34 @@ +@import '../../../styles/includes'; + +.container { + display: flex; + flex-direction: column; + gap: 16px; +} + +.textTitle { + color: $tc-gray-90; + @include roboto-bold(); + + font-size: 16px; + line-height: 20px; +} + +.colMenu { + width: 50px; +} + +.blockItem { + @include roboto; + + font-size: 14px; + color: $tc-gray-90; + + a { + color: $tc-gray-90; + + &:hover { + text-decoration: none; + } + } +} diff --git a/src/components/AssetsLibrary/index.js b/src/components/AssetsLibrary/index.js new file mode 100644 index 00000000..e69de29b diff --git a/src/components/Buttons/OutlineButton/index.js b/src/components/Buttons/OutlineButton/index.js index 537d41e3..9d5f6914 100644 --- a/src/components/Buttons/OutlineButton/index.js +++ b/src/components/Buttons/OutlineButton/index.js @@ -6,7 +6,7 @@ import cn from 'classnames' import styles from './Outline.module.scss' import _ from 'lodash' -const OutlineButton = ({ type, text, link, onClick, url, className, submit, disabled }) => { +const OutlineButton = ({ type, text, link, onClick, url, className, submit, disabled, target = 'self' }) => { if (_.isEmpty(link) && _.isEmpty(url)) { return ( + + ) +} + +DropdownMenu.defaultProps = { + onSelectMenu: () => {}, + options: [] +} + +DropdownMenu.propTypes = { + onSelectMenu: PropTypes.func.isRequired, + children: PropTypes.node, + options: PropTypes.arrayOf(PropTypes.string) +} + +export default DropdownMenu diff --git a/src/components/DropdownMenu/styles.module.scss b/src/components/DropdownMenu/styles.module.scss new file mode 100644 index 00000000..a504c35b --- /dev/null +++ b/src/components/DropdownMenu/styles.module.scss @@ -0,0 +1,37 @@ +@import "../../styles/includes"; + +.menus { + outline: none; + position: relative; + list-style-type: none; + padding: 10px 0; + margin: 2px 0 0 0; + text-align: left; + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 10px rgba(21, 21, 22, .2); + border: none; + background-clip: padding-box; + cursor: pointer; + min-width: 150px; + min-height: 45px; + + .menu { + height: 30px; + line-height: 30px; + padding: 0 10px 0 20px; + font-size: 13px; + + &:hover { + background-color: rgba($tc-dark-blue-10, .5); + } + } +} + +.btn { + border: none; + background-color: transparent; + outline: none !important; + padding: 0; + margin: 0; +} \ No newline at end of file diff --git a/src/components/FieldDescription/index.jsx b/src/components/FieldDescription/index.jsx new file mode 100644 index 00000000..1dbfd516 --- /dev/null +++ b/src/components/FieldDescription/index.jsx @@ -0,0 +1,48 @@ +/* + * FieldDescription + */ + +import React from 'react' +import PropTypes from 'prop-types' + +import TuiEditor from '../TuiEditor' +import styles from './styles.scss' + +const FieldDescription = props => ( + +) + +FieldDescription.propTypes = { + onChange: PropTypes.func.isRequired, + className: PropTypes.string, + placeholder: PropTypes.string, + value: PropTypes.string +} + +export default FieldDescription diff --git a/src/components/FieldDescription/styles.scss b/src/components/FieldDescription/styles.scss new file mode 100644 index 00000000..43a00cd3 --- /dev/null +++ b/src/components/FieldDescription/styles.scss @@ -0,0 +1,20 @@ +@import "../../styles/includes"; + +.description-editor { + width: 100%; + + :global { + .tui-editor-contents { + code { + background-color: transparent; + color: inherit; + } + + pre { + background-color: transparent; + color: inherit; + padding: 0; + } + } + } +} diff --git a/src/components/FieldInput/index.js b/src/components/FieldInput/index.js new file mode 100644 index 00000000..a75cb1ba --- /dev/null +++ b/src/components/FieldInput/index.js @@ -0,0 +1,49 @@ +/* Component to render input field */ + +import React from 'react' +import PropTypes from 'prop-types' +import styles from './styles.module.scss' + +const FieldInput = ({ + onChangeValue, + placeholder, + value, + type, + inputControl +}) => { + return ( + onChangeValue(x.target.value)} + value={value} + onKeyDown={ + type === 'number' + ? evt => { + if (['e', 'E', '+'].includes(evt.key)) { + evt.preventDefault() + } + } + : undefined + } + {...inputControl} + /> + ) +} + +FieldInput.defaultProps = { + type: 'text', + onChangeValue: () => {}, + inputControl: {} +} + +FieldInput.propTypes = { + onChangeValue: PropTypes.func, + placeholder: PropTypes.string, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + type: PropTypes.string, + inputControl: PropTypes.any +} + +export default FieldInput diff --git a/src/components/FieldInput/styles.module.scss b/src/components/FieldInput/styles.module.scss new file mode 100644 index 00000000..db8f9724 --- /dev/null +++ b/src/components/FieldInput/styles.module.scss @@ -0,0 +1,18 @@ +@import '../../styles/includes'; + +@-moz-document url-prefix() { + .inputField { + &::-moz-placeholder { + /* Mozilla Firefox 19+ */ + line-height: 38px; + } + &::-webkit-input-placeholder { + /* Webkit */ + line-height: 38px; + } + &:-ms-input-placeholder { + /* IE */ + line-height: 38px; + } + } +} diff --git a/src/components/FieldLabelDynamic/index.js b/src/components/FieldLabelDynamic/index.js new file mode 100644 index 00000000..03c0eb36 --- /dev/null +++ b/src/components/FieldLabelDynamic/index.js @@ -0,0 +1,60 @@ +/* Component to render field label */ + +import React from 'react' +import PropTypes from 'prop-types' +import styles from './styles.module.scss' +import cn from 'classnames' + +const FieldLabelDynamic = ({ + title, + isRequired, + children, + errorMsg, + className, + direction, + info +}) => { + return ( +
+ {!!title && ( +
+ +
+ )} +
+
+ {info &&
{info}
} +
{children}
+
+ {errorMsg &&
{errorMsg}
} +
+
+ ) +} + +FieldLabelDynamic.defaultProps = { + direction: 'horizontal' +} + +FieldLabelDynamic.propTypes = { + direction: PropTypes.oneOf(['horizontal', 'vertical']), + title: PropTypes.string, + errorMsg: PropTypes.string, + className: PropTypes.string, + info: PropTypes.string, + isRequired: PropTypes.bool, + children: PropTypes.node +} + +export default FieldLabelDynamic diff --git a/src/components/FieldLabelDynamic/styles.module.scss b/src/components/FieldLabelDynamic/styles.module.scss new file mode 100644 index 00000000..7977edb5 --- /dev/null +++ b/src/components/FieldLabelDynamic/styles.module.scss @@ -0,0 +1,74 @@ +@import '../../styles/includes'; + +.row { + box-sizing: border-box; + display: flex; + align-content: space-between; + justify-content: flex-start; + gap: 5px; + + &.vertical { + flex-direction: column; + } + + &.horizontal { + gap: 10px; + + .col1 { + margin-top: 10px; + } + + .blockContent { + flex: 1; + } + } + + .field { + label { + @include roboto-bold(); + + font-size: 16px; + line-height: 19px; + font-weight: 500; + color: $tc-gray-80; + margin-bottom: 0; + } + + &.col1 { + white-space: nowrap; + display: flex; + flex-direction: column; + + span { + color: $tc-red; + } + } + + &.col2 { + width: 100%; + } + } +} + +.blockContent { + display: flex; + flex-direction: column; + gap: 5px; +} + +.blockValue { + display: flex; + flex-direction: column; + gap: 5px; +} + +.blockInfo { + font-size: 13px; + color: $tc-gray-70; + font-weight: 400; + font-style: italic; +} + +.error { + color: $tc-red; +} diff --git a/src/components/FieldSkillsBasic/index.js b/src/components/FieldSkillsBasic/index.js new file mode 100644 index 00000000..0e8e6180 --- /dev/null +++ b/src/components/FieldSkillsBasic/index.js @@ -0,0 +1,68 @@ +import React, { useMemo } from 'react' +import PropTypes from 'prop-types' +import Select from '../Select' +import { searchSkills } from '../../services/skills' +import { AUTOCOMPLETE_DEBOUNCE_TIME_MS } from '../../config/constants' +import _ from 'lodash' + +const fetchSkills = _.debounce((inputValue, callback) => { + searchSkills(inputValue) + .then(skills => { + const suggestedOptions = skills.map(skillItem => ({ + label: skillItem.name, + value: skillItem.id + })) + return callback(suggestedOptions) + }) + .catch(() => { + return callback(null) + }) +}, AUTOCOMPLETE_DEBOUNCE_TIME_MS) + +const FieldSkillsBasic = ({ value, onChangeValue, id, placeholder }) => { + const selectedSkills = useMemo( + () => + value.map(skill => ({ + label: skill.name, + value: skill.skillId + })), + [value] + ) + + return ( + { + onChangeValue((values || []).map(value => value.value)) + }} + options={(projectMembers || []) + .filter(member => member.userId !== loggedInUser.userId) + .map(member => ({ value: member.userId, label: member.handle }))} + /> + ) +} + +FieldUserAutoComplete.defaultProps = { + onChangeValue: () => {}, + id: 'user-select', + value: [], + projectMembers: [], + loggedInUser: {} +} + +FieldUserAutoComplete.propTypes = { + value: PropTypes.arrayOf( + PropTypes.oneOfType(PropTypes.string, PropTypes.number) + ), + id: PropTypes.string, + onChangeValue: PropTypes.func, + projectMembers: PropTypes.arrayOf(PropTypes.object), + loggedInUser: PropTypes.object +} + +export default FieldUserAutoComplete diff --git a/src/components/FieldUserAutoComplete/styles.module.scss b/src/components/FieldUserAutoComplete/styles.module.scss new file mode 100644 index 00000000..8e00c5f8 --- /dev/null +++ b/src/components/FieldUserAutoComplete/styles.module.scss @@ -0,0 +1,22 @@ +@import '../../styles/includes'; + +.container { + display: flex; + padding: 0; + margin: 0; + border: none; + outline: none !important; + background-color: transparent; + color: $tc-gray-90 !important; +} + +.loader { + width: auto; + height: auto; + margin-left: 5px; + + svg { + width: 20px; + height: 20px; + } +} diff --git a/src/components/Icons/IconFile/index.js b/src/components/Icons/IconFile/index.js new file mode 100644 index 00000000..70c42561 --- /dev/null +++ b/src/components/Icons/IconFile/index.js @@ -0,0 +1,242 @@ +/** + * IconFile component + * + * Renders file icon depend on the file type + */ +import React, { useMemo } from 'react' +import PT from 'prop-types' +import ReactSVG from 'react-svg' +import styles from './styles.module.scss' + +const assets = require.context('../../../assets/images/files', false, /svg/) +const IconDefault = './default.svg' +const IconAac = './aac.svg' +const IconAi = './ai.svg' +const IconAse = './ase.svg' +const IconAsp = './asp.svg' +const IconAspx = './aspx.svg' +const IconAvi = './avi.svg' +const IconBmp = './bmp.svg' +const IconCpp = './c++.svg' +const IconCad = './cad.svg' +const IconCfm = './cfm.svg' +const IconCgi = './cgi.svg' +const IconCsh = './csh.svg' +const IconCss = './css.svg' +const IconCsv = './csv.svg' +const IconDmg = './dmg.svg' +const IconDoc = './doc.svg' +const IconDocx = './docx.svg' +const IconEps = './eps.svg' +const IconEpub = './epub.svg' +const IconExe = './exe.svg' +const IconFlash = './flash.svg' +const IconFlv = './flv.svg' +const IconFont = './font.svg' +const IconGif = './gif.svg' +const IconGpx = './gpx.svg' +const IconGzip = './gzip.svg' +const IconHtml = './html.svg' +const IconIcs = './ics.svg' +const IconIso = './iso.svg' +const IconJar = './jar.svg' +const IconJava = './java.svg' +const IconJpg = './jpg.svg' +const IconJs = './js.svg' +const IconJsp = './jsp.svg' +const IconLog = './log.svg' +const IconMax = './max.svg' +const IconMd = './md.svg' +const IconMkv = './mkv.svg' +const IconMov = './mov.svg' +const IconMp3 = './mp3.svg' +const IconMp4 = './mp4.svg' +const IconMpg = './mpg.svg' +const IconObj = './obj.svg' +const IconOtf = './otf.svg' +const IconPdf = './pdf.svg' +const IconPhp = './php.svg' +const IconPng = './png.svg' +const IconPptx = './pptx.svg' +const IconPsd = './psd.svg' +const IconPy = './py.svg' +const IconRar = './rar.svg' +const IconRaw = './raw.svg' +const IconRb = './rb.svg' +const IconRss = './rss.svg' +const IconRtf = './rtf.svg' +const IconSketch = './sketch.svg' +const IconSql = './sql.svg' +const IconSrt = './srt.svg' +const IconSvg = './svg.svg' +const IconTif = './tif.svg' +const IconTiff = './tiff.svg' +const IconTtf = './ttf.svg' +const IconTxt = './txt.svg' +const IconWav = './wav.svg' +const IconXlsx = './xlsx.svg' +const IconXml = './xml.svg' +const IconZip = './zip.svg' +const IconLink12 = './link-12.svg' + +const IconFile = ({ type }) => { + const icon = useMemo(() => { + // if type is defined as a relative path to the icon, convert it to icon "id" + let iconType = type + const typeAsPath = + type && type.match(/(?:\.\.\/)+assets\/icons\/([^.]+)\.svg/) + if (typeAsPath) { + iconType = typeAsPath[1] + } + + switch (iconType) { + case 'aac': + return IconAac + case 'ai': + return IconAi + case 'ase': + return IconAse + case 'asp': + return IconAsp + case 'aspx': + return IconAspx + case 'avi': + return IconAvi + case 'bmp': + return IconBmp + case 'c++': + return IconCpp + case 'cad': + return IconCad + case 'cfm': + return IconCfm + case 'cgi': + return IconCgi + case 'csh': + return IconCsh + case 'css': + return IconCss + case 'csv': + return IconCsv + case 'dmg': + return IconDmg + case 'doc': + return IconDoc + case 'docx': + return IconDocx + case 'eps': + return IconEps + case 'epub': + return IconEpub + case 'exe': + return IconExe + case 'flash': + return IconFlash + case 'flv': + return IconFlv + case 'font': + return IconFont + case 'gif': + return IconGif + case 'gpx': + return IconGpx + case 'gzip': + return IconGzip + case 'html': + return IconHtml + case 'ics': + return IconIcs + case 'iso': + return IconIso + case 'jar': + return IconJar + case 'java': + return IconJava + case 'jpg': + return IconJpg + case 'js': + return IconJs + case 'jsp': + return IconJsp + case 'log': + return IconLog + case 'max': + return IconMax + case 'md': + return IconMd + case 'mkv': + return IconMkv + case 'mov': + return IconMov + case 'mp3': + return IconMp3 + case 'mp4': + return IconMp4 + case 'mpg': + return IconMpg + case 'obj': + return IconObj + case 'otf': + return IconOtf + case 'pdf': + return IconPdf + case 'php': + return IconPhp + case 'png': + return IconPng + case 'pptx': + return IconPptx + case 'psd': + return IconPsd + case 'py': + return IconPy + case 'rar': + return IconRar + case 'raw': + return IconRaw + case 'rb': + return IconRb + case 'rss': + return IconRss + case 'rtf': + return IconRtf + case 'sketch': + return IconSketch + case 'sql': + return IconSql + case 'srt': + return IconSrt + case 'svg': + return IconSvg + case 'tif': + return IconTif + case 'tiff': + return IconTiff + case 'ttf': + return IconTtf + case 'txt': + return IconTxt + case 'wav': + return IconWav + case 'xlsx': + return IconXlsx + case 'xml': + return IconXml + case 'zip': + return IconZip + case 'link-12': + return IconLink12 + default: + // this will be default icon + return IconDefault + } + }, [type]) + + return +} + +IconFile.propTypes = { + type: PT.string +} + +export default IconFile diff --git a/src/components/Icons/IconFile/styles.module.scss b/src/components/Icons/IconFile/styles.module.scss new file mode 100644 index 00000000..877542f0 --- /dev/null +++ b/src/components/Icons/IconFile/styles.module.scss @@ -0,0 +1,6 @@ +.icon { + svg { + width: 30px; + height: 30px; + } +} diff --git a/src/components/Icons/IconThreeDot/index.js b/src/components/Icons/IconThreeDot/index.js new file mode 100644 index 00000000..7d7b4dc4 --- /dev/null +++ b/src/components/Icons/IconThreeDot/index.js @@ -0,0 +1,24 @@ +/* Component to render three dot icon */ + +import React from 'react' +import PropTypes from 'prop-types' +import styles from './styles.module.scss' +import cn from 'classnames' + +const IconThreeDot = ({ classsName }) => { + return ( +
+ + + +
+ ) +} + +IconThreeDot.defaultProps = {} + +IconThreeDot.propTypes = { + classsName: PropTypes.string +} + +export default IconThreeDot diff --git a/src/components/Icons/IconThreeDot/styles.module.scss b/src/components/Icons/IconThreeDot/styles.module.scss new file mode 100644 index 00000000..525c62ad --- /dev/null +++ b/src/components/Icons/IconThreeDot/styles.module.scss @@ -0,0 +1,20 @@ +@import '../../../styles/includes'; + +.container { + border: 1px solid $tc-gray-30; + border-radius: 6px; + display: flex; + line-height: 9px; + height: 12px; + padding: 0 3px; + + i:before { + @include roboto; + + color: $text-color; + content: '\B7'; + display: flex; + font-size: 20px; + vertical-align: middle; + } +} diff --git a/src/components/InfiniteLoadTrigger/InfiniteLoadTrigger.module.scss b/src/components/InfiniteLoadTrigger/InfiniteLoadTrigger.module.scss new file mode 100644 index 00000000..5bd73022 --- /dev/null +++ b/src/components/InfiniteLoadTrigger/InfiniteLoadTrigger.module.scss @@ -0,0 +1,11 @@ +.loader { + width: 100%; + display: flex; + justify-content: center; + margin-bottom: 20px; + + > * { + width: auto; + min-width: 130px; + } +} \ No newline at end of file diff --git a/src/components/InfiniteLoadTrigger/index.js b/src/components/InfiniteLoadTrigger/index.js new file mode 100644 index 00000000..faf17852 --- /dev/null +++ b/src/components/InfiniteLoadTrigger/index.js @@ -0,0 +1,52 @@ +import React, { useEffect, useRef, useCallback } from 'react' +import PropTypes from 'prop-types' + +import styles from './InfiniteLoadTrigger.module.scss' +import { OutlineButton } from '../Buttons' + +const InfiniteLoadTrigger = ({ onLoadMore, rootMargin = '100px', threshold = 0.1 }) => { + const triggerRef = useRef(null) + + const observerCallback = useCallback( + (entries) => { + const [entry] = entries + if (entry.isIntersecting) { + onLoadMore() + } + }, + [onLoadMore] + ) + + useEffect(() => { + // eslint-disable-next-line no-undef + const observer = new IntersectionObserver(observerCallback, { + root: null, // Observe relative to viewport + rootMargin, + threshold + }) + + if (triggerRef.current) { + observer.observe(triggerRef.current) + } + + return () => { + if (triggerRef.current) { + observer.unobserve(triggerRef.current) + } + } + }, [observerCallback, rootMargin, threshold]) + + return ( +
+ onLoadMore()} /> +
+ ) +} + +InfiniteLoadTrigger.propTypes = { + onLoadMore: PropTypes.func.isRequired, + rootMargin: PropTypes.string, + threshold: PropTypes.number +} + +export default InfiniteLoadTrigger diff --git a/src/components/Loader/index.js b/src/components/Loader/index.js index a6bae410..be36d021 100644 --- a/src/components/Loader/index.js +++ b/src/components/Loader/index.js @@ -2,11 +2,13 @@ * Component to render as a loading indication */ import React from 'react' +import cn from 'classnames' +import PropTypes from 'prop-types' import styles from './Loader.module.scss' -function Loader () { +function Loader ({ classsName }) { return ( -
+
( - +const ConfirmationModal = ({ + title, + message, + errorMessage, + theme, + isProcessing, + cancelText, + confirmText, + onCancel, + onConfirm, + disableConfirmButton, + confirmType, + cancelType +}) => ( +
-
{title}
+
{title}
{message}
@@ -34,6 +49,11 @@ const ConfirmationModal = ({ title, message, errorMessage, theme, isProcessing, ) +ConfirmationModal.defaultProps = { + confirmType: 'info', + cancelType: 'danger' +} + ConfirmationModal.propTypes = { title: PropTypes.string, message: PropTypes.oneOf(PropTypes.string, PropTypes.node), @@ -42,7 +62,9 @@ ConfirmationModal.propTypes = { isProcessing: PropTypes.bool, disableConfirmButton: PropTypes.bool, cancelText: PropTypes.string, + cancelType: PropTypes.string, confirmText: PropTypes.string, + confirmType: PropTypes.string, onCancel: PropTypes.func, onConfirm: PropTypes.func } diff --git a/src/components/Modal/ConfirmationModal.module.scss b/src/components/Modal/ConfirmationModal.module.scss index 0fc48a82..f8d5ffff 100644 --- a/src/components/Modal/ConfirmationModal.module.scss +++ b/src/components/Modal/ConfirmationModal.module.scss @@ -14,6 +14,10 @@ width: 852px; padding: 30px; + @include xs-to-lg { + max-width: 95vw; + } + .content { padding: 30px; width: 100%; @@ -27,6 +31,11 @@ line-height: 36px; margin-bottom: 30px; margin-top: 0; + + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .message { @@ -58,7 +67,7 @@ width: 193px; height: 40px; margin-right: 33px; - + span { font-size: 16px; line-height: 1; diff --git a/src/components/ProjectCard/ProjectCard.module.scss b/src/components/ProjectCard/ProjectCard.module.scss index dab1a372..168de868 100644 --- a/src/components/ProjectCard/ProjectCard.module.scss +++ b/src/components/ProjectCard/ProjectCard.module.scss @@ -44,9 +44,13 @@ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; - //display: flex; - //justify-content: space-between; - //align-items: center; + display: flex; + justify-content: space-between; + align-items: center; + + .status { + opacity: 0.7; + } } .icon { diff --git a/src/components/ProjectCard/index.js b/src/components/ProjectCard/index.js index 39016cb2..f639259b 100644 --- a/src/components/ProjectCard/index.js +++ b/src/components/ProjectCard/index.js @@ -2,10 +2,13 @@ import React from 'react' import PT from 'prop-types' import { Link } from 'react-router-dom' import cn from 'classnames' +import { find } from 'lodash' + +import { PROJECT_STATUSES } from '../../config/constants' import styles from './ProjectCard.module.scss' -const ProjectCard = ({ projectName, projectId, selected, setActiveProject }) => { +const ProjectCard = ({ projectName, projectStatus, projectId, selected, setActiveProject }) => { return (
className={cn(styles.projectName, { [styles.selected]: selected })} onClick={() => setActiveProject(parseInt(projectId))} > -
{projectName}
+
+ {projectName} + {find(PROJECT_STATUSES, { value: projectStatus }).label} +
) } ProjectCard.propTypes = { + projectStatus: PT.string.isRequired, projectId: PT.number.isRequired, projectName: PT.string.isRequired, selected: PT.bool.isRequired, diff --git a/src/components/ProjectForm/GroupsFormField/index.js b/src/components/ProjectForm/GroupsFormField/index.js new file mode 100644 index 00000000..5106b2dd --- /dev/null +++ b/src/components/ProjectForm/GroupsFormField/index.js @@ -0,0 +1,74 @@ +import React, { useCallback } from 'react' +import { debounce, map } from 'lodash' +import PropTypes from 'prop-types' +import Select from '../../Select' +import { fetchGroups as fetchGroupsApi } from '../../../services/challenges' +import { AUTOCOMPLETE_DEBOUNCE_TIME_MS } from '../../../config/constants' +import { useMapSelectedGroups } from './use-map-selected-groups.hook' + +/** + * Search & fetch groups from api, filtering by group name + */ +const fetchGroups = debounce((inputValue, callback) => { + fetchGroupsApi({ name: inputValue }) + .then(groups => { + const suggestedOptions = groups.map(group => ({ + label: group.name, + value: group.id + })) + return callback(suggestedOptions) + }) + .catch(() => { + return callback(null) + }) +}, AUTOCOMPLETE_DEBOUNCE_TIME_MS) + +/** + * Component to handle project groups + */ +const GroupsFormField = ({ value, name, onBlur, onChange, id, placeholder, ref }) => { + const selectedGroups = useMapSelectedGroups(value) + + const handleChange = useCallback((values) => { + onChange({ target: { name, value: map(values, 'value') } }) + }, []) + + return ( + + {errors.projectName && ( +
+ {errors.projectName.message} +
+ )} +
+
+ {isEdit && canManage && ( +
+
+ +
+
+ ( + + {errors.projectStatus && ( +
+ {errors.projectStatus.message} +
+ )} +
+
+ )} + /> + )} + {!isEdit && ( +
+
+ +
+
+ ( +