diff --git a/.env.template b/.env.template deleted file mode 100644 index 232b90483e02b29d1af95058c1b5990cf8c98710..0000000000000000000000000000000000000000 --- a/.env.template +++ /dev/null @@ -1,29 +0,0 @@ -NODE_TLS_REJECT_UNAUTHORIZED = '0' -HTTPS=true -SSL_CRT_FILE=cert.pem -SSL_KEY_FILE=key.pem - -# Common settings -HOSTNAME=localhost -ANIMATOR_ROLE=ANIMATORS -ADMIN_ROLE=ADMINS -DEBUG_MODE= -MOCK_OAUTH2= -HTTPS_PORT= -IMAGE_FOLDER= - -# Needed to user OAuth2 authentication : -REDIRECT_URL= -CLIENT_ID= -CLIENT_SECRET= -AUTH_URL= -TOKEN_URL= -USERINFO_URL= -LOGOUT_URL= - -# Access to the database -DATABASE_USER= -DATABASE_PASSWORD= -DATABASE_NAME= - -SGE_API_TOKEN= diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000000000000000000000000000000000..82a9a730d1eb49a60b39ab7be3194025c4891533 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +.eslintrc.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index f899dd418de6f58d241b17dcc55db8e890b43c88..ab0d29b2f7419e2c65533b285fcc5468d30a9186 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,24 +1,48 @@ module.exports = { - parser: '@typescript-eslint/parser', // Specifies the ESLint parser extends: [ - 'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react - 'plugin:@typescript-eslint/eslint-recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin + 'eslint:recommended', 'prettier', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier + 'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. 'plugin:react-hooks/recommended', ], + parser: '@typescript-eslint/parser', // Specifies the ESLint parser + plugins: ['@typescript-eslint', 'react', 'react-hooks'], parserOptions: { ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features sourceType: 'module', // Allows for the use of imports ecmaFeatures: { jsx: true, // Allows for the parsing of JSX }, + tsconfigRootDir: __dirname, + project: './tsconfig.json', }, + root: true, + overrides: [ + { + files: ['**/*.{ts,tsx}'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/stylistic-type-checked', + ], + rules: { + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unused-vars': 'warn', + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/prefer-optional-chain': 'warn', + '@typescript-eslint/prefer-as-const': 'error', + '@typescript-eslint/await-thenable': 'error', + '@typescript-eslint/no-var-requires': 'off', + + '@typescript-eslint/no-empty-function': 'off', // fixes a build error + }, + }, + ], rules: { // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs - '@typescript-eslint/explicit-function-return-type': 'off', 'react/react-in-jsx-scope': 'off', 'react/prop-types': 'warn', + 'react/self-closing-comp': 'warn', }, settings: { react: { diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cb77e80a1c8ab19ec9eba7e298ab75cfc2daa2ee..fdeef40438419333de94b0e5ebd3e7fa48448021 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,7 +16,7 @@ stages: build-test: stage: build - image: node:14.20-alpine + image: node:18.17-alpine before_script: - apk add git - apk add bash @@ -67,10 +67,14 @@ sonarqube: deploy_rec: stage: deploy + environment: + name: Recette - Ecolyo Agent + url: https://ecolyo-agent-rec.apps.grandlyon.com/ before_script: - NAMESPACE=ns-ecolyo-bo-r01-syn - sed -i "s/{{IMAGE_TAG}}/dev/" ./k8s/deployments/ecolyo-agent-client-deployment.yml - export KUBECONFIG=$KUBE_CONFIG_REC + script: - find k8s/ -name '*.yml' -exec sed -i "s/{{NS}}/$NAMESPACE/g" {} \; - sed -i "s/{{HOSTNAME}}/ecolyo-agent-rec.apps.grandlyon.com/g" ./k8s/routes/ecolyo-agent-client-route.yml @@ -83,6 +87,8 @@ deploy_rec: - oc apply -f k8s/deployments - oc apply -f k8s/services - oc apply -f k8s/routes + + - oc delete pod -l app=ecolyo-agent-client tags: - ns-ecolyo-bo-r01-syn only: @@ -90,6 +96,9 @@ deploy_rec: deploy_prod: stage: deploy + environment: + name: Prod - Ecolyo Agent + url: https://ecolyo-agent.apps.grandlyon.com/ before_script: - NAMESPACE=ns-ecolyo-bo-p01-syn - sed -i "s/{{IMAGE_TAG}}/master/" ./k8s/deployments/ecolyo-agent-client-deployment.yml diff --git a/.node-version b/.node-version new file mode 100644 index 0000000000000000000000000000000000000000..bcaa3377df163b7441cbee802ac339c7c33d44ef --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +18.17 \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index a8926a50ca780291a6a3f86604260a66c3dcd8d8..c97c46da0aaac0fe1e1a6b384e0780a518b6b2b4 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,5 +3,6 @@ "semi": false, "singleQuote": true, "tabWidth": 2, - "trailingComma": "es5" + "trailingComma": "es5", + "arrowParens": "avoid" } diff --git a/.vscode/settings.json b/.vscode/settings.json index 8df3d7acaede87adf6ff8ce5dad8818c3020d357..e0fa5ad32fc3955b850d146f232fab10b47b4868 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -33,11 +33,15 @@ }, "editor.defaultFormatter": "esbenp.prettier-vscode", "peacock.color": "#2aa63d", + "gitlens.remotes": [ + { "type": "GitLab", "domain": "forge.grandlyon.com", "name": "Forge" } + ], "sonarlint.connectedMode.project": { "connectionId": "sonarqube-forge-grandlyon", "projectKey": "web-et-numerique-llle-project-backoffice-client" }, "cSpell.words": [ + "backoffice", "draftjs", "ecogesture", "ecolyo", diff --git a/Dockerfile b/Dockerfile index 7ca9b79246fe52e42d34723a33e6d348d3a20a3e..86cfda80a3f2dc9cf4c8130bdbbac22804774d7f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Stage 0, "build-stage", based on Node.js, to build and compile the frontend -FROM node:14-alpine AS build-stage +FROM node:18-alpine AS build-stage WORKDIR /app COPY package.json /app/ @@ -9,7 +9,7 @@ COPY ./ /app/ RUN yarn build # Stage 1, based on Nginx, to have only the compiled app, ready for production with Nginx -FROM nginxinc/nginx-unprivileged:1.23 +FROM nginxinc/nginx-unprivileged:1.25 COPY --from=build-stage /app/build/ /usr/share/nginx/html COPY ./nginx/nginx.conf /etc/nginx/nginx.conf COPY ./nginx/site.prod.conf /etc/nginx/conf.d/default.conf diff --git a/dbinit/dbinit.sql b/dbinit/dbinit.sql deleted file mode 100644 index 1070e073e94c76ab0f737dbb8caeac22222b9718..0000000000000000000000000000000000000000 --- a/dbinit/dbinit.sql +++ /dev/null @@ -1,4 +0,0 @@ -LOAD DATA LOCAL INFILE '/dbinit/fluidprices.CSV' INTO TABLE prices -FIELDS TERMINATED BY ',' -LINES TERMINATED BY '\n' -IGNORE 1 ROWS; \ No newline at end of file diff --git a/dbinit/fluidprices.CSV b/dbinit/fluidprices.CSV deleted file mode 100644 index 21670990623e0507be87e11a64779b23757ce9ef..0000000000000000000000000000000000000000 --- a/dbinit/fluidprices.CSV +++ /dev/null @@ -1,84 +0,0 @@ -fluid_type,price,start_date,end_date,id,created_at,updated_at -0,0.1256,2012-07-23T00:00:00Z,2013-07-31T23:59:59Z,1,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1329,2013-08-01T00:00:00Z,2014-10-31T23:59:59Z,2,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1401,2014-01-11T00:00:00Z,2015-07-31T23:59:59Z,3,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1437,2015-08-01T00:00:00Z,2016-07-31T23:59:59Z,4,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1503,2016-08-01T00:00:00Z,2017-07-31T23:59:59Z,5,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1546,2017-08-01T00:00:00Z,2018-01-31T23:59:59Z,6,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1555,2018-02-01T00:00:00Z,2018-07-31T23:59:59Z,7,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.145,2018-08-01T00:00:00Z,2019-05-31T23:59:59Z,8,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1531,2019-06-01T00:00:00Z,2019-07-31T23:59:59Z,9,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1524,2019-08-01T00:00:00Z,2020-01-31T23:59:59Z,10,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1546,2020-02-01T00:00:00Z,2020-07-31T23:59:59Z,11,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1557,2020-08-01T00:00:00Z,2021-01-31T23:59:59Z,12,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1582,2021-02-01T00:00:00Z,2021-07-31T23:59:59Z,13,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.1558,2021-08-01T00:00:00Z,2022-01-31T23:59:59Z,14,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -0,0.174,2022-02-01T00:00:00Z,,15,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.0030735,2012-01-01T00:00:00Z,2012-12-31T23:59:59Z,16,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.0031483,2013-01-01T00:00:00Z,2013-12-31T23:59:59Z,17,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.0031381,2014-01-01T00:00:00Z,2014-12-31T23:59:59Z,18,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.00307,2015-01-01T00:00:00Z,2015-12-31T23:59:59Z,19,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.0031,2016-01-01T00:00:00Z,2016-12-31T23:59:59Z,20,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.00311,2017-01-01T00:00:00Z,2017-12-31T23:59:59Z,21,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.00313,2018-01-01T00:00:00Z,2018-12-31T23:59:59Z,22,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.00313,2019-01-01T00:00:00Z,2019-12-31T23:59:59Z,23,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.00315,2020-01-01T00:00:00Z,2020-12-31T23:59:59Z,24,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -1,0.00319,2021-01-01T00:00:00Z,,25,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0919,2017-01-01T00:00:00Z,2017-01-31T23:59:59Z,26,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0915,2017-02-01T00:00:00Z,2017-02-28T23:59:59Z,27,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0932,2017-03-01T00:00:00Z,2017-03-31T23:59:59Z,28,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0927,2017-04-01T00:00:00Z,2017-04-30T23:59:59Z,29,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0906,2017-05-01T00:00:00Z,2017-05-31T23:59:59Z,30,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0906,2017-06-01T00:00:00Z,2017-06-30T23:59:59Z,31,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0788,2017-07-01T00:00:00Z,2017-07-31T23:59:59Z,32,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0783,2017-08-01T00:00:00Z,2017-08-31T23:59:59Z,33,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0783,2017-09-01T00:00:00Z,2017-09-30T23:59:59Z,34,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0791,2017-10-01T00:00:00Z,2017-10-31T23:59:59Z,35,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0806,2017-11-01T00:00:00Z,2017-11-30T23:59:59Z,36,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0812,2017-12-01T00:00:00Z,2017-12-31T23:59:59Z,37,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0857,2018-01-01T00:00:00Z,2018-01-31T23:59:59Z,38,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0866,2018-02-01T00:00:00Z,2018-02-28T23:59:59Z,39,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0847,2018-03-01T00:00:00Z,2018-03-31T23:59:59Z,40,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0839,2018-04-01T00:00:00Z,2018-04-30T23:59:59Z,41,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0842,2018-05-01T00:00:00Z,2018-05-31T23:59:59Z,42,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0855,2018-06-01T00:00:00Z,2018-06-30T23:59:59Z,43,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0959,2018-07-01T00:00:00Z,2018-07-31T23:59:59Z,44,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0961,2018-08-01T00:00:00Z,2018-08-31T23:59:59Z,45,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0967,2018-09-01T00:00:00Z,2018-09-30T23:59:59Z,46,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0989,2018-10-01T00:00:00Z,2018-10-31T23:59:59Z,47,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.1031,2018-11-01T00:00:00Z,2018-11-30T23:59:59Z,48,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.1013,2018-12-01T00:00:00Z,2018-12-31T23:59:59Z,49,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0999,2019-01-01T00:00:00Z,2019-01-31T23:59:59Z,50,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0993,2019-02-01T00:00:00Z,2019-02-28T23:59:59Z,51,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0993,2019-03-01T00:00:00Z,2019-03-31T23:59:59Z,52,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0977,2019-04-01T00:00:00Z,2019-04-30T23:59:59Z,53,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0973,2019-05-01T00:00:00Z,2019-05-31T23:59:59Z,54,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0969,2019-06-01T00:00:00Z,2019-06-30T23:59:59Z,55,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0795,2019-07-01T00:00:00Z,2019-07-31T23:59:59Z,56,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0791,2019-08-01T00:00:00Z,2019-08-31T23:59:59Z,57,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0785,2019-09-01T00:00:00Z,2019-09-30T23:59:59Z,58,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.077,2019-10-01T00:00:00Z,2019-10-31T23:59:59Z,59,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0789,2019-11-01T00:00:00Z,2019-11-30T23:59:59Z,60,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0793,2019-12-01T00:00:00Z,2019-12-31T23:59:59Z,61,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0787,2020-01-01T00:00:00Z,2020-01-31T23:59:59Z,62,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0765,2020-02-01T00:00:00Z,2020-02-29T23:59:59Z,70,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0736,2020-03-01T00:00:00Z,2020-03-31T23:59:59Z,71,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.071,2020-04-01T00:00:00Z,2020-04-30T23:59:59Z,72,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0703,2020-05-01T00:00:00Z,2020-05-31T23:59:59Z,73,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0687,2020-06-01T00:00:00Z,2020-06-30T23:59:59Z,74,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0698,2020-07-01T00:00:00Z,2020-07-31T23:59:59Z,75,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0705,2020-08-01T00:00:00Z,2020-08-31T23:59:59Z,76,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0709,2020-09-01T00:00:00Z,2020-09-30T23:59:59Z,77,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0735,2020-10-01T00:00:00Z,2020-10-31T23:59:59Z,78,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0745,2020-11-01T00:00:00Z,2020-11-30T23:59:59Z,79,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0759,2020-12-01T00:00:00Z,2020-12-31T23:59:59Z,80,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.076,2021-01-01T00:00:00Z,2021-01-31T23:59:59Z,81,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0782,2021-02-01T00:00:00Z,2021-02-28T23:59:59Z,82,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0818,2021-03-01T00:00:00Z,2021-03-31T23:59:59Z,83,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.079,2021-04-01T00:00:00Z,2021-04-30T23:59:59Z,84,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0797,2021-05-01T00:00:00Z,2021-05-31T23:59:59Z,85,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0826,2021-06-01T00:00:00Z,2021-06-30T23:59:59Z,86,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0895,2021-07-01T00:00:00Z,2021-07-31T23:59:59Z,87,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.0934,2021-08-01T00:00:00Z,2021-08-31T23:59:59Z,88,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.1002,2021-09-01T00:00:00Z,2021-09-30T23:59:59Z,89,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z -2,0.1121,2021-10-01T00:00:00Z,,90,2000-01-01T00:00:00Z,2000-01-01T00:00:00Z \ No newline at end of file diff --git a/dbinit/init.md b/dbinit/init.md deleted file mode 100644 index 21120af53c0319ce892155eb5c04ac5279b4c606..0000000000000000000000000000000000000000 --- a/dbinit/init.md +++ /dev/null @@ -1,25 +0,0 @@ -# Init first prices data - -## Local - -If the script is not working (problem with secure_file_priv variable), use the import in phpMyAdmin: - -- Ignore the request for the first line -- Select format "CVS using LOAD DATA" -- Choose the right column separator "," -- Then launch the execution - -## Rec/Prod - -- Connect to mysql docker container - -``` -docker exec -it <container-id> bash -``` - -- Open mysql shell - -``` -mysql --local-infile=1 -uroot -p backoffice < /dbinit/dbinit.sql - -``` diff --git a/docker-compose.local.yml b/docker-compose.local.yml index 2bef82fe26ceb9c216e01b0c94be4daa80a50471..20b98d3d648d0ae7515040595f7c497e72eefca3 100644 --- a/docker-compose.local.yml +++ b/docker-compose.local.yml @@ -1,72 +1,14 @@ version: '3.7' services: nginx: - image: nginxinc/nginx-unprivileged:1.23 + image: nginxinc/nginx-unprivileged:1.25 volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - - ./nginx/site.conf:/etc/nginx/conf.d/default.conf + - ./nginx/site.local.conf:/etc/nginx/conf.d/default.conf - ./cert.pem:/etc/nginx/cert.pem - ./key.pem:/etc/nginx/key.pem ports: - 443:443 - depends_on: - - backend # For linux users extra_hosts: - 'host.docker.internal:host-gateway' - - database-agent: - image: mysql:5 - volumes: - - ./db_data:/var/lib/mysql - ports: - - 3306:3306 - environment: - MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD} - MYSQL_DATABASE: ${DATABASE_NAME} - healthcheck: - test: mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD - interval: 5s - timeout: 10s - retries: 60 - - phpmyadmin: - image: phpmyadmin/phpmyadmin:latest - depends_on: - - database-agent - ports: - - 8008:80 - environment: - PMA_HOST: database-agent - - backend: - # --When using yarn local-up build backoffice service image with: docker build . -t backoffice-server - image: backoffice-server - depends_on: - database-agent: - condition: service_healthy - restart: unless-stopped - volumes: - - ./mnt:/app/mnt - ports: - - ${HTTPS_PORT}:${HTTPS_PORT} - - 8090:8090 - environment: - - HOSTNAME=${HOSTNAME} - - HTTPS_PORT=${HTTPS_PORT} - - ANIMATOR_ROLE=${ANIMATOR_ROLE} - - ADMIN_ROLE=${ADMIN_ROLE} - - REDIRECT_URL=${REDIRECT_URL} - - CLIENT_ID=${CLIENT_ID} - - CLIENT_SECRET=${CLIENT_SECRET} - - AUTH_URL=${AUTH_URL} - - TOKEN_URL=${TOKEN_URL} - - USERINFO_URL=${USERINFO_URL} - - DEBUG_MODE=${DEBUG_MODE} - - DATABASE_USER=${DATABASE_USER} - - DATABASE_NAME=${DATABASE_NAME} - - DATABASE_PASSWORD=${DATABASE_PASSWORD} - - DATABASE_HOST=database-agent - - MOCK_OAUTH2=${MOCK_OAUTH2} - - IMAGE_FOLDER=${IMAGE_FOLDER} - - SGE_API_TOKEN=${SGE_API_TOKEN} diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index b0754887ab409ffaeaa8cb2da996f9d2d2380ffc..0000000000000000000000000000000000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,72 +0,0 @@ -version: '3.7' -services: - nginx: - image: registry.forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-client:dev - restart: unless-stopped - ports: - - 8088:8080 - depends_on: - - backend - networks: - backoffice: - volumes: - - ./site.conf:/etc/nginx/conf.d/default.conf - - ./image-lib:/usr/share/nginx/html/lib - - ./dacc-preview:/usr/share/nginx/html/static-site - - database-agent: - image: mysql:5 - ports: - - 3306:3306 - networks: - backoffice: - restart: unless-stopped - environment: - MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD} - MYSQL_DATABASE: ${DATABASE_NAME} - healthcheck: - test: mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD - interval: 5s - timeout: 10s - retries: 60 - volumes: - - ./dbinit:/dbinit - - backend: - image: registry.forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-server:dev - networks: - backoffice: - depends_on: - database-agent: - condition: service_healthy - restart: unless-stopped - volumes: - - /etc/localtime:/etc/localtime:ro - - ./configs:/app/configs - - ./letsencrypt_cache:/app/letsencrypt_cache - - ./data:/app/data - - ./${IMAGE_FOLDER}:/app/${IMAGE_FOLDER} - ports: - - ${HTTPS_PORT}:${HTTPS_PORT} - - 8190:8090 - environment: - - HOSTNAME=${HOSTNAME} - - HTTPS_PORT=${HTTPS_PORT} - - ANIMATOR_ROLE=${ANIMATOR_ROLE} - - ADMIN_ROLE=${ADMIN_ROLE} - - REDIRECT_URL=${REDIRECT_URL} - - CLIENT_ID=${CLIENT_ID} - - CLIENT_SECRET=${CLIENT_SECRET} - - AUTH_URL=${AUTH_URL} - - IMAGE_FOLDER=${IMAGE_FOLDER} - - MOCK_OAUTH2=${MOCK_OAUTH2} - - TOKEN_URL=${TOKEN_URL} - - USERINFO_URL=${USERINFO_URL} - - DEBUG_MODE=${DEBUG_MODE} - - DATABASE_USER=${DATABASE_USER} - - DATABASE_NAME=${DATABASE_NAME} - - DATABASE_PASSWORD=${DATABASE_PASSWORD} - - DATABASE_HOST=database-agent - -networks: - backoffice: diff --git a/mnt/configs/tokenskey.json b/mnt/configs/tokenskey.json deleted file mode 100644 index 4ac2c4c1e5c67b27a5447ccba384355364f9cca2..0000000000000000000000000000000000000000 --- a/mnt/configs/tokenskey.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Key": "F+gSLqJL7zZynkJYp/fd2jI6t3TolYGRt9bjO7mMgQc=" -} diff --git a/nginx/site.conf b/nginx/site.local.conf similarity index 56% rename from nginx/site.conf rename to nginx/site.local.conf index 127a83107dca5dd2fcb8afa776d737c6975dd649..10882b16c8f05181a8bd5c0f4d6329d65d757752 100644 --- a/nginx/site.conf +++ b/nginx/site.local.conf @@ -10,24 +10,24 @@ server { proxy_pass https://host.docker.internal:3000; } location /api { - proxy_pass https://backend:1443/api; + proxy_pass https://host.docker.internal:1443/api; } location /OAuth2Login { - proxy_pass https://backend:1443/OAuth2Login; + proxy_pass https://host.docker.internal:1443/OAuth2Login; } location /OAuth2Callback { - proxy_pass https://backend:1443/OAuth2Callback; + proxy_pass https://host.docker.internal:1443/OAuth2Callback; } location /Logout { - proxy_pass https://backend:1443/Logout; + proxy_pass https://host.docker.internal:1443/Logout; } location /doc { - proxy_pass https://backend:1443/doc; + proxy_pass https://host.docker.internal:1443/doc; } location /imageNames { - proxy_pass https://backend:1443/api/animator/imageNames; + proxy_pass https://host.docker.internal:1443/api/animator/imageNames; } location /assets { - proxy_pass https://backend:1443/assets; + proxy_pass https://host.docker.internal:1443/assets; } } \ No newline at end of file diff --git a/package.json b/package.json index 809302991e0ccc35d57207632a44767dff9a0777..b26c94210c9e1338c29ef2ea804d667856df9469 100644 --- a/package.json +++ b/package.json @@ -3,14 +3,14 @@ "version": "1.0.0", "private": true, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", + "start": "HTTPS=true react-scripts start", + "build": "CI=false && react-scripts build", "local-up": "docker-compose -f docker-compose.local.yml up -d && yarn start", "local-down": "docker-compose -f docker-compose.local.yml down", "docker": "docker run -it --rm -p 3000:3000 front-backoffice", - "lint": "eslint .", + "lint": "eslint src -c .eslintrc.js --fix", "lint:fix": "eslint --fix .", - "format": "prettier --write \"**/*.{js,jsx,json,md}\"", + "format": "prettier --write \"./src/**/*.{js,jsx,ts,tsx,json,md}\"", "test": "react-scripts test", "eject": "react-scripts eject" }, @@ -26,39 +26,20 @@ "last 1 safari version" ] }, - "devDependencies": { - "@types/jest": "^26.0.15", - "@types/node": "^12.0.0", - "@types/react": "^17.0.0", - "@types/react-dom": "^17.0.0", - "@types/react-router-dom": "^5.1.8", - "@typescript-eslint/eslint-plugin": "^5.3.1", - "@typescript-eslint/parser": "^5.3.1", - "eslint": "^8.21.0", - "eslint-config-prettier": "^8.5.0", - "eslint-config-react-app": "^6.0.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-jest": "^24.4.0", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "7.30.1", - "eslint-plugin-react-hooks": "^4.2.0", - "prettier": "^2.7.1", - "prettier-eslint": "^15.0.1" - }, "dependencies": { - "@material-ui/core": "^4.12.3", - "@material-ui/lab": "^4.0.0-alpha.60", - "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^11.1.0", - "@testing-library/user-event": "^12.1.10", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@mui/lab": "^5.0.0-alpha.144", + "@mui/material": "^5.14.9", + "@mui/styles": "^5.14.9", "@types/draft-js": "^0.11.4", "@types/draftjs-to-html": "^0.8.1", "@types/html-to-draftjs": "^1.4.0", "@types/luxon": "^3.0.0", "@types/react-draft-wysiwyg": "^1.13.4", - "ag-grid-community": "^27.1.0", - "ag-grid-react": "^27.1.0", - "axios": "^0.21.1", + "ag-grid-community": "^30.0.0", + "ag-grid-react": "^30.0.0", + "axios": "^1.0.0", "dayjs": "^1.10.7", "draft-js": "^0.11.7", "draft-js-export-html": "^1.4.1", @@ -68,11 +49,26 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-draft-wysiwyg": "^1.15.0", - "react-router-dom": "^5.2.0", + "react-query": "^3.39.3", + "react-router-dom": "^6.0.0", "react-scripts": "^5.0.1", - "react-toastify": "^7.0.4", + "react-toastify": "^9.0.0", "sass": "^1.35.2", "typescript": "^4.1.2", - "web-vitals": "^1.0.1" + "web-vitals": "^3.0.0" + }, + "devDependencies": { + "@types/node": "^18.0.0", + "@types/react": "^17.0.0", + "@types/react-dom": "^17.0.0", + "@typescript-eslint/eslint-plugin": "^6.1.0", + "@typescript-eslint/parser": "^6.1.0", + "eslint": "^8.49.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-react": "7.30.1", + "eslint-plugin-react-hooks": "^4.2.0", + "prettier": "^3.0.0", + "prettier-eslint": "^15.0.1" } } diff --git a/public/index.html b/public/index.html index dc5567c4dede5d36eec705d550c2359a286d9539..b0236df8b5a6bb6c89deaaece4dd0fefac84fd35 100644 --- a/public/index.html +++ b/public/index.html @@ -12,6 +12,12 @@ user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ --> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> + <link + rel="stylesheet" + href="https://cdn.jsdelivr.net/npm/ag-grid-community@30.1.0/styles/ag-grid.css" /> + <link + rel="stylesheet" + href="https://cdn.jsdelivr.net/npm/ag-grid-community@30.1.0/styles/ag-theme-alpine.css" /> <!-- Notice the use of %PUBLIC_URL% in the tags above. It will be replaced with the URL of the `public` folder during the build. diff --git a/scripts/import-convert-assets.sh b/scripts/import-convert-assets.sh deleted file mode 100755 index 73615174a91ed9745ace41a50ab05c3a66ea2d68..0000000000000000000000000000000000000000 --- a/scripts/import-convert-assets.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -# Get env variables -. ../.env - -REGISTRY_ID=409 -EMAIL_ASSETS_PATH="src/assets/icons/email" -ECOGESTURE_ASSETS_PATH="src/assets/icons/visu/ecogesture" -pwd=$(pwd) - -# Fetch and convert email assets -curl "https://forge.grandlyon.com/api/v4/projects/${REGISTRY_ID}/repository/archive?path=${EMAIL_ASSETS_PATH}" --output email.tar.gz -tar -xf email.tar.gz -cd *-email/$EMAIL_ASSETS_PATH && for file in *.svg; do inkscape -h 200 --export-type="png" $file; done && rm *.svg - -cd $pwd -# Fetch and convert ecogesture assets -curl "https://forge.grandlyon.com/api/v4/projects/${REGISTRY_ID}/repository/archive?path=${ECOGESTURE_ASSETS_PATH}" --output ecogesture.tar.gz -tar -xf ecogesture.tar.gz -cd *-ecogesture/$ECOGESTURE_ASSETS_PATH && for file in *.svg; do inkscape -h 200 --export-type="png" $file; done && rm *.svg - -# Cleanup -cd $pwd -rm -rf ../${IMAGE_FOLDER}/* - -# Copy assets in IMAGE_FOLDER -mv *-email/$EMAIL_ASSETS_PATH/* ../${IMAGE_FOLDER} -mv *-ecogesture/$ECOGESTURE_ASSETS_PATH ../${IMAGE_FOLDER}/ecogesture -rm -rf email.tar.gz ecogesture.tar.gz *-email *-ecogesture diff --git a/src/API.ts b/src/API.ts new file mode 100644 index 0000000000000000000000000000000000000000..e8e2df1f30029fe1cea997483e6ef2cce44ba3c4 --- /dev/null +++ b/src/API.ts @@ -0,0 +1,26 @@ +import axios from 'axios' +import { useQuery } from 'react-query' +import { toast } from 'react-toastify' +import { User } from './models/user.model' + +const fetchWhoAmI = async () => { + const { data } = await axios.get<User | null>('/api/common/WhoAmI') + return data +} + +export const useWhoAmI = () => { + return useQuery({ + queryKey: ['WhoAmI'], + queryFn: fetchWhoAmI, + retry: false, + onError: error => { + console.error('error whoami', error) + toast.error('Accès refusé, veuillez vous connecter') + }, + refetchOnMount: false, + }) +} + +export const fetchLogout = async () => { + return await axios.get('/Logout') +} diff --git a/src/App.tsx b/src/App.tsx index 75c23b356dc176087fb1e1406470926606725bd8..a4e01a839c5f2c7e49420a3ad1a788fcee41d9ef 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,25 +1,22 @@ +import { ThemeProvider } from '@mui/material' +import { QueryClient, QueryClientProvider } from 'react-query' import { BrowserRouter } from 'react-router-dom' import { ToastContainer } from 'react-toastify' import 'react-toastify/dist/ReactToastify.css' -import Layout from './components/Layout/Layout' import Router from './components/Routes/Router' -import useFindUser from './hooks/useFindUser' -import { UserContext } from './hooks/userContext' +import { theme } from './components/UI/theme' -function App() { - const { user, setUser, isLoading } = useFindUser() +const queryClient = new QueryClient() +function App() { return ( <BrowserRouter> - <UserContext.Provider value={{ user, setUser, isLoading }}> - <Layout> + <ThemeProvider theme={theme}> + <QueryClientProvider client={queryClient}> <Router /> - </Layout> - </UserContext.Provider> - <ToastContainer - progressClassName="toastProgress" - bodyClassName="toastBody" - /> + <ToastContainer theme="colored" /> + </QueryClientProvider> + </ThemeProvider> </BrowserRouter> ) } diff --git a/src/components/Consents/Consents.tsx b/src/components/Consents/Consents.tsx index 2267a99c51979a2bb7e727c7a7571da558fd8325..8b7a74491e18b96d95c977d075fdb9b9f067cd7c 100644 --- a/src/components/Consents/Consents.tsx +++ b/src/components/Consents/Consents.tsx @@ -1,30 +1,22 @@ -import TablePagination from '@material-ui/core/TablePagination' +import { Button, TablePagination, TextField } from '@mui/material' import { ColDef, ColGroupDef, CsvExportParams, GridApi, GridReadyEvent, - RowNode, + IRowNode, RowSelectedEvent, ValueFormatterParams, } from 'ag-grid-community' -import 'ag-grid-community/dist/styles/ag-grid.css' -import 'ag-grid-community/dist/styles/ag-theme-alpine-dark.css' import { AgGridReact } from 'ag-grid-react' import { DateTime } from 'luxon' -import React, { - useCallback, - useContext, - useEffect, - useMemo, - useState, -} from 'react' +import React, { useCallback, useEffect, useMemo, useState } from 'react' +import { useWhoAmI } from '../../API' import { getAxiosXSRFHeader } from '../../axios.config' -import { UserContext, UserContextProps } from '../../hooks/userContext' import { IConsent } from '../../models/consent.model' import { ConsentService } from '../../services/consent.service' -import DowloadModal from './DowloadModal' +import DownloadModal from './DownloadModal' import './agGridOverrides.scss' import styles from './consents.module.scss' import './muiPaginationOverrides.scss' @@ -32,20 +24,20 @@ import './muiPaginationOverrides.scss' const Consents: React.FC = () => { const [gridApi, setGridApi] = useState<GridApi | null>(null) const [search, setSearch] = useState<string>('') - const [selectedNodes, setSelectedNodes] = useState<RowNode[]>([]) + const [selectedNodes, setSelectedNodes] = useState<IRowNode[]>([]) const [isShowingSelection, setIsShowingSelection] = useState<boolean>(false) - const [openDowloadModal, setOpenDowloadModal] = useState<boolean>(false) + const [openDownloadModal, setOpenDownloadModal] = useState<boolean>(false) const [consents, setConsents] = useState<IConsent[]>([]) const [page, setPage] = useState<number>(0) const [rowsPerPage, setRowsPerPage] = useState<number>(50) const [totalRows, setTotalRows] = useState<number>(50) - const { user }: Partial<UserContextProps> = useContext(UserContext) + const { data: user } = useWhoAmI() const consentService = useMemo(() => { return new ConsentService() }, []) const toggleOpenModal = useCallback(() => { - setOpenDowloadModal((prev) => !prev) + setOpenDownloadModal(prev => !prev) }, []) const defaultColDef = useMemo( @@ -134,7 +126,7 @@ const Consents: React.FC = () => { }, [] ) - const handleChangeRowsPerPage = useCallback((event: any) => { + const handleChangeRowsPerPage = useCallback(event => { setRowsPerPage(event.target.value) setPage(0) }, []) @@ -143,12 +135,11 @@ const Consents: React.FC = () => { if (gridApi) { const newNodes = gridApi.getRenderedNodes() const idsToCheck: string[] = selectedNodes - .filter((node: RowNode) => node.isSelected) - .map((node: RowNode) => node.data.ID) + .filter(node => node.isSelected) + .map(node => node.data.ID) - newNodes.forEach((node: RowNode) => { - if (idsToCheck.includes(node.data.ID)) - node.setSelected(true, false, true) + newNodes.forEach(node => { + if (idsToCheck.includes(node.data.ID)) node.setSelected(true, false) }) } }, [gridApi, selectedNodes]) @@ -187,14 +178,14 @@ const Consents: React.FC = () => { (event: RowSelectedEvent) => { if (event.node.isSelected()) { const index = selectedNodes.findIndex( - (node) => node.data.ID === event.node.data.ID + node => node.data.ID === event.node.data.ID ) if (index === -1) { - setSelectedNodes((prev) => [...prev, event.node]) + setSelectedNodes(prev => [...prev, event.node]) } } else { - setSelectedNodes((prev) => - prev.filter((node) => { + setSelectedNodes(prev => + prev.filter(node => { return node.data.ID != event.node.data.ID }) ) @@ -210,10 +201,10 @@ const Consents: React.FC = () => { const newNodes = gridApi.getRenderedNodes() // We have to select nodes that have already been selected since we cannot pass a Node array to init AgGrid const idsToCheck: string[] = selectedNodes - .filter((node: RowNode) => node.isSelected) - .map((node: RowNode) => node.data.ID) + .filter(node => node.isSelected) + .map(node => node.data.ID) - newNodes.forEach((node: RowNode) => { + newNodes.forEach(node => { if (idsToCheck.includes(node.data.ID)) node.setSelected(true) }) } @@ -221,7 +212,7 @@ const Consents: React.FC = () => { const showCurrentSelection = useCallback(() => { setIsShowingSelection(true) - const dataFromNode = selectedNodes.map((item: RowNode) => item.data) + const dataFromNode = selectedNodes.map(item => item.data) selectedNodes && gridApi?.setRowData(dataFromNode) gridApi?.selectAll() }, [gridApi, selectedNodes]) @@ -232,7 +223,7 @@ const Consents: React.FC = () => { columnSeparator: ',', } gridApi?.exportDataAsCsv(params) - setOpenDowloadModal(false) + setOpenDownloadModal(false) resetSelection() }, [gridApi, resetSelection]) @@ -263,25 +254,19 @@ const Consents: React.FC = () => { return ( <> <div className="header"> - <p className="title pageTitle">Gestion des consentements Enedis</p> + <h1>Gestion des consentements Enedis</h1> </div> <div className={styles.content}> - <div className={styles.searchField}> - <div className={styles.inputGroup}> - <label htmlFor="search">Recherche</label> - <input - value={search} - name="search" - type="number" - placeholder="N°PDL (14 chiffres)" - onChange={(e: React.ChangeEvent<HTMLInputElement>) => - handleSearchChange(e.target.value) - } - disabled={isShowingSelection} - autoComplete="off" - ></input> - </div> - </div> + <TextField + placeholder="N°PDL (14 chiffres)" + label="Recherche" + value={search} + onChange={(e: React.ChangeEvent<HTMLInputElement>) => + handleSearchChange(e.target.value) + } + disabled={isShowingSelection} + autoComplete="off" + /> <div className="ag-theme-alpine-dark" style={{ width: '100%', height: '75vh' }} @@ -301,9 +286,9 @@ const Consents: React.FC = () => { pagination={false} suppressCellFocus={true} rowClassRules={{ - expired: (params) => params.data.endDate < DateTime.now(), + expired: params => params.data.endDate < DateTime.now(), }} - ></AgGridReact> + /> {!isShowingSelection && ( <TablePagination labelRowsPerPage="Consentements par page" @@ -317,16 +302,15 @@ const Consents: React.FC = () => { /> )} </div> - {openDowloadModal && ( - <DowloadModal - toggleOpenModal={toggleOpenModal} - exportData={exportData} - /> - )} + <DownloadModal + open={openDownloadModal} + toggleOpenModal={toggleOpenModal} + exportData={exportData} + /> </div> <div className={styles.footerButtons}> - <button - className="btnDelete" + <Button + variant="outlined" onClick={isShowingSelection ? continueSelection : resetSelection} disabled={ !isShowingSelection && selectedNodes && selectedNodes.length === 0 @@ -335,15 +319,15 @@ const Consents: React.FC = () => { {isShowingSelection ? 'Continuer ma sélection' : 'Tout désélectionner'} - </button> - <button - className={styles.btnSelection + ' btnValid'} + </Button> + <Button onClick={!isShowingSelection ? showCurrentSelection : toggleOpenModal} disabled={selectedNodes && selectedNodes.length <= 0} + classes={{ contained: styles.btnText }} > {!isShowingSelection ? 'Voir mes sélections' : 'Télécharger'} - <span>{selectedNodes?.length}</span> - </button> + <div>{selectedNodes?.length}</div> + </Button> </div> </> ) diff --git a/src/components/Consents/DownloadModal.module.scss b/src/components/Consents/DownloadModal.module.scss index f207b0a861db492e471315eb770464532f882866..803a9e7a0e37def046c2fcf280294e32f25c8d7b 100644 --- a/src/components/Consents/DownloadModal.module.scss +++ b/src/components/Consents/DownloadModal.module.scss @@ -18,16 +18,4 @@ .text2 { color: $text-dark; } - - .buttons { - margin-top: 1rem; - display: flex; - justify-content: center; - align-items: center; - gap: 2rem; - - button { - margin: 0; - } - } } diff --git a/src/components/Consents/DowloadModal.tsx b/src/components/Consents/DownloadModal.tsx similarity index 60% rename from src/components/Consents/DowloadModal.tsx rename to src/components/Consents/DownloadModal.tsx index e5774f8d852fe868ded8f60b2459d7ec009ddc33..b5e6132910d970621d396130deb008a4fe2adc88 100644 --- a/src/components/Consents/DowloadModal.tsx +++ b/src/components/Consents/DownloadModal.tsx @@ -1,23 +1,25 @@ +import { Button, Dialog } from '@mui/material' import React from 'react' -import dowloadIcon from '../../assets/icons/ico-download.svg' -import Modal from '../Newsletter/Modal/Modal' +import downloadIcon from '../../assets/icons/ico-download.svg' import styles from './DownloadModal.module.scss' -interface DowloadModalProps { +interface DownloadModalProps { + open: boolean toggleOpenModal: () => void exportData: () => void } -const DowloadModal: React.FC<DowloadModalProps> = ({ +const DownloadModal: React.FC<DownloadModalProps> = ({ + open, toggleOpenModal, exportData, -}: DowloadModalProps) => { +}) => { return ( - <Modal> + <Dialog open={open} onClose={toggleOpenModal}> <div className={styles.modalContent}> <img - src={dowloadIcon} + src={downloadIcon} className={styles.modalIcon} - alt="dowload-icon" + alt="download-icon" /> <div className={styles.modalTitle}> Voulez-vous télécharger les consentements sélectionnés ? @@ -30,16 +32,14 @@ const DowloadModal: React.FC<DowloadModalProps> = ({ l'utiliser qu'en cas de contrôle de la part d'Enedis et à supprimer ce fichier ensuite de tout ordinateur. </div> - <div className={styles.buttons}> - <button className="btnCancel2" onClick={toggleOpenModal}> + <div className="buttons"> + <Button variant="outlined" onClick={toggleOpenModal}> Annuler - </button> - <button className="btnValid" onClick={exportData}> - Télécharger - </button> + </Button> + <Button onClick={exportData}>Télécharger</Button> </div> </div> - </Modal> + </Dialog> ) } -export default DowloadModal +export default DownloadModal diff --git a/src/components/Consents/consents.module.scss b/src/components/Consents/consents.module.scss index 3d40ea62df56e6c19bad85801f4eac5bbe35be8f..188960e5307e9f2a86ea466bf3ef69cfb4e85e98 100644 --- a/src/components/Consents/consents.module.scss +++ b/src/components/Consents/consents.module.scss @@ -1,5 +1,4 @@ @import '../../styles/config/colors'; -@import '../../styles/config/layout'; @import '../../styles/config/breakpoints'; @import '../../styles/config/typography'; @@ -7,37 +6,6 @@ padding: 1rem; } -.searchField { - max-width: 750px; - width: 100%; - display: flex; - align-items: flex-end; - .inputGroup { - color: $text-grey; - font-size: 1rem; - margin-right: 2rem; - label { - font-weight: 700; - display: block; - margin-bottom: 0.5rem; - } - input { - box-sizing: border-box; - background: transparent; - border: 1px solid $text-dark; - border-radius: 4px; - height: 40px; - padding: 0 0.5rem; - width: 500px; - &:disabled { - opacity: 0.8; - cursor: not-allowed; - } - } - } -} -@include customCheckBox(1.45rem); - .footerButtons { padding: 1rem 0; display: flex; @@ -47,12 +15,8 @@ left: 50%; transform: translate(-25%); - button { - margin: 0; - } - .btnSelection { - position: relative; - span { + .btnText { + div { position: absolute; font-size: 1rem; padding-top: 4px; @@ -64,6 +28,7 @@ display: block; background: $grey-dark; border: 1px solid $text-dark; + line-height: 100%; } } } diff --git a/src/components/Layout/Layout.tsx b/src/components/Layout/Layout.tsx deleted file mode 100644 index e33fe680b515fc2e33d7ab7526328effb1c99b67..0000000000000000000000000000000000000000 --- a/src/components/Layout/Layout.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useEffect, useState } from 'react' -import BottomBar from '../Navigation/BottomBar' -import SideBar from '../Navigation/SideBar' -import styles from './layout.module.scss' - -const Layout: React.FC = ({ children }) => { - const [isMobile, setIsMobile] = useState<boolean>(false) - useEffect(() => { - function handleResize() { - const test: boolean = - /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( - navigator.userAgent - ) || window.innerWidth < 768 - ? true - : false - setIsMobile(test) - } - handleResize() - - window.addEventListener('resize', handleResize) - return () => { - window.removeEventListener('resize', handleResize) - } - }, []) - return ( - <div className={styles.root}> - {!isMobile ? ( - <div className={styles.menuWrapper}> - <SideBar /> - </div> - ) : ( - <div className={styles.mobileNavWrapper}> - <BottomBar /> - </div> - )} - <div className={styles.wrapper}> - <main>{children}</main> - </div> - </div> - ) -} - -export default Layout diff --git a/src/components/Layout/layout.module.scss b/src/components/Layout/layout.module.scss deleted file mode 100644 index c62142238a2faf974cdd9d32f7d9fcaad7784c95..0000000000000000000000000000000000000000 --- a/src/components/Layout/layout.module.scss +++ /dev/null @@ -1,45 +0,0 @@ -@import '../../styles/config/layout'; -@import '../../styles/config/colors'; -@import '../../styles/config/breakpoints'; -.root { - display: flex; - min-height: 100vh; - box-sizing: border-box; -} -.menuWrapper { - position: fixed; - top: 0; - left: 0; - width: $menu-width; - height: 100vh; - z-index: 1501; - - @media screen and (max-width: $width-tablet) { - width: 0; - display: none; - } -} -.mobileNavWrapper { - position: fixed; - bottom: 0; - left: 0; - height: $navbar-height; - width: 100%; - z-index: 1500; -} -.wrapper { - flex: 1; - display: flex; - flex-direction: row; - margin-left: $menu-width; - box-shadow: 0px 5px 5px rgb(0 0 0 / 20%), 0px 3px 14px rgb(0 0 0 / 12%), - 0px 8px 10px rgb(0 0 0 / 14%); - background: $dark-bg; - @media screen and (max-width: $width-tablet) { - margin-left: 0; - padding-bottom: $navbar-height; - } - main { - width: 100%; - } -} diff --git a/src/components/Loader/loader.scss b/src/components/Loader/loader.scss index 872512dcdcfeff6f48209b63a669d4bf1b90ad45..982003b1a436190ef287470f083a99e197e895cb 100644 --- a/src/components/Loader/loader.scss +++ b/src/components/Loader/loader.scss @@ -1,9 +1,9 @@ @import '../../styles/config/colors.scss'; .loader-container { - width: 100%; - height: 80vh; display: flex; + height: 100%; + flex: 1; overflow: hidden; } .loader { @@ -23,7 +23,6 @@ background: -o-linear-gradient(left, $gold 10%, rgba(255, 255, 255, 0) 42%); background: -ms-linear-gradient(left, $gold 10%, rgba(255, 255, 255, 0) 42%); background: linear-gradient(to right, $gold 10%, rgba(255, 255, 255, 0) 42%); - position: relative; -webkit-animation: load3 1.4s infinite linear; animation: load3 1.4s infinite linear; -webkit-transform: translateZ(0); diff --git a/src/components/Login/Login.tsx b/src/components/Login/Login.tsx index 1f20b820b0daabb90e23d18cdd77f0a46a5bfbf6..b8a1f2e6e0b99661f8c2f22daeb014e9ce30713b 100644 --- a/src/components/Login/Login.tsx +++ b/src/components/Login/Login.tsx @@ -1,17 +1,17 @@ +import { Button } from '@mui/material' import React from 'react' -import { useAuth } from '../../hooks/useAuth' import './login.scss' const Login: React.FC = () => { - const { loginUser } = useAuth() + const loginUser = () => { + window.location.href = '/OAuth2Login' + } return ( <div className="login"> <div className="container"> <h1>Bienvenue sur le Backoffice d'Ecolyo !</h1> - <button className="btnValid" onClick={loginUser}> - Login - </button> + <Button onClick={loginUser}>Login</Button> </div> </div> ) diff --git a/src/components/Login/login.scss b/src/components/Login/login.scss index ee3b921580016004c02261c867ea1a3b9fc51900..14327f4c3b5f451838d0c9f650fc42dd892476c7 100644 --- a/src/components/Login/login.scss +++ b/src/components/Login/login.scss @@ -3,6 +3,9 @@ width: 100%; height: inherit; min-height: 95vh; + h1 { + margin-bottom: 0.5rem; + } .container { margin: auto; padding: 2rem; diff --git a/src/components/Navigation/BottomBar.tsx b/src/components/Navigation/BottomBar.tsx deleted file mode 100644 index 0129a6363413b96f77688ef1183969f4b233bd69..0000000000000000000000000000000000000000 --- a/src/components/Navigation/BottomBar.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useContext } from 'react' -import { NavLink } from 'react-router-dom' -import { useAuth } from '../../hooks/useAuth' -import { UserContext } from '../../hooks/userContext' -import { routes } from '../Routes/Router' -import './bottombar.scss' - -const BottomBar: React.FC = () => { - const { user } = useContext(UserContext) - const { logoutUser } = useAuth() - - return ( - <div className="navbar"> - <div className="menu-list"> - {user && - routes.map( - (route) => - (!route.adminOnly || user?.isAdmin) && ( - <NavLink - key={route.label} - to={route.path} - activeClassName="active" - > - {route.label} - </NavLink> - ) - )} - {process.env.NODE_ENV === 'development' && ( - <a href="/doc/" target="_blank"> - Swagger doc - </a> - )} - </div> - {user && ( - <button className="btnValid logButton" onClick={logoutUser}> - Logout - </button> - )} - </div> - ) -} - -export default BottomBar diff --git a/src/components/Navigation/bottombar.scss b/src/components/Navigation/bottombar.scss deleted file mode 100644 index 78f8bc8988fac89c94c76cbae9026bed80928374..0000000000000000000000000000000000000000 --- a/src/components/Navigation/bottombar.scss +++ /dev/null @@ -1,44 +0,0 @@ -@import '../../styles/config/colors'; -.navbar { - height: inherit; - background: radial-gradient( - 74.83% 76.97% at 50% 13.64%, - #343641 0%, - #1b1c22 100% - ); - display: flex; - align-items: center; - justify-content: center; - padding: 0 1rem; - z-index: 1500; - .menu-list { - display: flex; - align-items: center; - justify-content: center; - } - a { - text-decoration: none; - display: flex; - align-items: center; - flex-direction: column; - font-size: 0.9rem; - &:not(:first-of-type) { - margin-left: 2rem; - } - img { - margin-bottom: 0.3rem; - } - } - .active { - color: $gold; - } - .navbar-icon { - width: 1.3rem; - } - .logButton { - width: 100px; - min-width: 0; - margin-left: auto; - margin-top: 0; - } -} diff --git a/src/components/Navigation/sidebar.scss b/src/components/Navigation/sidebar.scss deleted file mode 100644 index e6917fe46f2dcd36c62247699aea73b2f5f75742..0000000000000000000000000000000000000000 --- a/src/components/Navigation/sidebar.scss +++ /dev/null @@ -1,42 +0,0 @@ -@import '../../styles/config/colors'; -@import '../../styles/config/layout'; - -.menu { - display: flex; - flex-direction: column; - height: inherit; - padding: 1.875rem; - box-shadow: 0px 5px 5px rgb(0 0 0 / 20%), 0px 3px 14px rgb(0 0 0 / 12%), - 0px 8px 10px rgb(0 0 0 / 14%); - background-color: $grey-light; - - .logo-container { - display: flex; - } - .logo { - margin: auto; - max-width: 4rem; - } - a { - display: block; - padding: 0.5rem 0; - text-decoration: none; - color: $text-grey; - font-size: 1rem; - - &.active { - color: $gold; - font-weight: 700; - } - - &:hover { - color: $gold; - } - } - .menu-list { - margin-top: 1.5rem; - } - .administration { - margin-top: auto; - } -} diff --git a/src/components/Newsletter/CustomEditor.tsx b/src/components/Newsletter/CustomEditor.tsx index b9867c75e8d282218ff4cd7c00d8513b568f58b1..9131bf356a62e382c970c5435995f8f911f072e3 100644 --- a/src/components/Newsletter/CustomEditor.tsx +++ b/src/components/Newsletter/CustomEditor.tsx @@ -60,7 +60,7 @@ const CustomEditor: React.FC<CustomEditorProps> = ({ return ( <Editor editorState={editorState} - onEditorStateChange={(state) => handleStateChange(state)} + onEditorStateChange={state => handleStateChange(state)} handlePastedText={() => false} wrapperClassName="wrapper-class" editorClassName="editor-class" diff --git a/src/components/Newsletter/CustomLink.tsx b/src/components/Newsletter/CustomLink.tsx index fc69ff89ad50d4db54725648f41b44f29277cc60..847c8da19ff14daa7658d5ae61c9373650b2632e 100644 --- a/src/components/Newsletter/CustomLink.tsx +++ b/src/components/Newsletter/CustomLink.tsx @@ -77,7 +77,7 @@ const CustomLink: React.FC<EcolyoLinkProps> = ({ onChange, editorState }) => { : 'rdw-dropdown-optionwrapper placeholder-ul' } > - {links.map((item: LinkState) => { + {links.map(item => { return ( <li className="rdw-dropdownoption-default placeholder-li" diff --git a/src/components/Newsletter/DateSelector/DateSelector.tsx b/src/components/Newsletter/DateSelector/DateSelector.tsx index e811fc653e4fefafed32443dda9a22f85da4fcfe..2049f71adb045e6ca8b193486912585eb0d63dce 100644 --- a/src/components/Newsletter/DateSelector/DateSelector.tsx +++ b/src/components/Newsletter/DateSelector/DateSelector.tsx @@ -1,7 +1,7 @@ +import { Button, Dialog, IconButton } from '@mui/material' import React, { useState } from 'react' import leftChevron from '../../../assets/icons/left-chevron.svg' import rightChevron from '../../../assets/icons/right-chevron.svg' -import Modal from '../Modal/Modal' import './dateSelector.scss' interface DateSelectorProps { @@ -17,7 +17,7 @@ const DateSelector: React.FC<DateSelectorProps> = ({ }) => { const [openModal, setOpenModal] = useState<boolean>(false) const [isPrev, setIsPrev] = useState<boolean>(false) - const toggleOpenModal = () => setOpenModal((prev) => !prev) + const toggleOpenModal = () => setOpenModal(prev => !prev) const handleNextMonth = () => { setIsPrev(false) @@ -44,40 +44,29 @@ const DateSelector: React.FC<DateSelectorProps> = ({ } return ( <div className="date-selector"> - <img - src={leftChevron} - alt="Previous Month" - onClick={handlePrevMonth} - className="arrow" - /> + <IconButton onClick={handlePrevMonth}> + <img src={leftChevron} alt="Previous Month" className="arrow" /> + </IconButton> <div className="text"> {date.toLocaleString('default', { month: 'long', year: 'numeric' })} </div> - <img - src={rightChevron} - alt="Next Month" - onClick={handleNextMonth} - className="arrow" - /> - {openModal && ( - <Modal> - <> - <div className="modal-text"> - Attention, vous n'avez pas enregistré vos modifications. - Celles-ci seront annulées en changeant de mois. Voulez-vous - continuer ? - </div> - <div className="buttons"> - <button className="btnCancel" onClick={() => setOpenModal(false)}> - Annuler - </button> - <button className="btnValid" onClick={handleConfirmAlert}> - Continuer - </button> - </div> - </> - </Modal> - )} + <IconButton onClick={handleNextMonth}> + <img src={rightChevron} alt="Next Month" className="arrow" /> + </IconButton> + + <Dialog open={openModal}> + <div className="modal-text"> + Attention, vous n'avez pas enregistré vos modifications. + Celles-ci seront annulées en changeant de mois. Voulez-vous continuer + ? + </div> + <div className="buttons"> + <Button variant="outlined" onClick={() => setOpenModal(false)}> + Annuler + </Button> + <Button onClick={handleConfirmAlert}>Continuer</Button> + </div> + </Dialog> </div> ) } diff --git a/src/components/Newsletter/DateSelector/dateSelector.scss b/src/components/Newsletter/DateSelector/dateSelector.scss index cb2a92c023ff94fb33b4dad892a1cb2d26f7ae5a..729caa02b424da686c0c4a05138be531d5828a5c 100644 --- a/src/components/Newsletter/DateSelector/dateSelector.scss +++ b/src/components/Newsletter/DateSelector/dateSelector.scss @@ -26,14 +26,11 @@ padding: 0.5rem; border-radius: 50%; background: #343641; - margin: 0 0.5rem; - box-shadow: 0px 5px 5px rgb(0 0 0 / 20%), 0px 3px 14px rgb(0 0 0 / 12%), + box-shadow: + 0px 5px 5px rgb(0 0 0 / 20%), + 0px 3px 14px rgb(0 0 0 / 12%), 0px 8px 10px rgb(0 0 0 / 14%); transition: all 300ms ease; - &:hover { - background: $text-grey; - opacity: 0.9; - } } } .modal-text { diff --git a/src/components/Newsletter/ImagePicker/ImagePicker.tsx b/src/components/Newsletter/ImagePicker/ImagePicker.tsx index 33a85e80a7e9c39444ef466216cb13fa7e9d1f19..98e236e37af1ae7dbc68875f9d254193d762e985 100644 --- a/src/components/Newsletter/ImagePicker/ImagePicker.tsx +++ b/src/components/Newsletter/ImagePicker/ImagePicker.tsx @@ -1,10 +1,9 @@ -import Pagination from '@material-ui/lab/Pagination' -import React, { useContext, useEffect, useState } from 'react' +import { Button, Dialog, Pagination } from '@mui/material' +import React, { useEffect, useState } from 'react' +import { useWhoAmI } from '../../../API' import { getAxiosXSRFHeader } from '../../../axios.config' -import { UserContext, UserContextProps } from '../../../hooks/userContext' import { NewsletterService } from '../../../services/newsletter.service' import { EditorType } from '../CustomEditor' -import Modal from '../Modal/Modal' import SingleImage from './SingleImage' interface ImagePickerProps { @@ -16,19 +15,19 @@ const ImagePicker: React.FC<ImagePickerProps> = ({ imageURL, handleChange, }) => { - const [imageNames, setImageNames] = useState<Array<string[]>>([]) + const { data: user } = useWhoAmI() + const [imageNames, setImageNames] = useState<string[][]>([]) const [selectedImageURL, setSelectedImageURL] = useState<string>( imageURL && imageURL !== null ? imageURL : '' ) const [openModal, setOpenModal] = useState<boolean>(false) - const { user }: Partial<UserContextProps> = useContext(UserContext) const [currentPage, setCurrentPage] = useState(1) const [pageCount, setPageCount] = useState<number>(1) const [preSelectImage, setPreSelectImage] = useState<string>('') const imagePerPage = 10 const toggleModal = () => { - setOpenModal((prev) => !prev) + setOpenModal(prev => !prev) } const handleChangePage = (page: number) => { setCurrentPage(page) @@ -69,9 +68,8 @@ const ImagePicker: React.FC<ImagePickerProps> = ({ {selectedImageURL === '' || !selectedImageURL ? ( <> <p>Pas d'image sélectionnée</p> - <button className="btnValid" onClick={toggleModal}> - Choisir une image - </button> + <br /> + <Button onClick={toggleModal}>Choisir une image</Button> </> ) : ( <> @@ -82,49 +80,41 @@ const ImagePicker: React.FC<ImagePickerProps> = ({ className="ecogesture-image" alt="selected" /> - <button className="btnDelete" onClick={toggleModal}> - Modifier l'image - </button> + <Button onClick={toggleModal}>Modifier l'image</Button> </> )} - {openModal && ( - <Modal classes={'modal-large'}> - <> - <div className="image-picker"> - {imageNames && - imageNames.length !== 0 && - imageNames[currentPage - 1].length !== 0 && - imageNames[currentPage - 1].map((imageName) => ( - <SingleImage - imageURL={imageName} - key={imageName} - selectedImage={preSelectImage} - setSelectedImageURL={setPreSelectImage} - /> - ))} - </div> - <div className="footer"> - <Pagination - count={pageCount} - siblingCount={0} - onChange={(_e, page) => handleChangePage(page)} + <Dialog open={openModal} className="modal-large"> + <div className="image-picker"> + {imageNames && + imageNames.length !== 0 && + imageNames[currentPage - 1].length !== 0 && + imageNames[currentPage - 1].map(imageName => ( + <SingleImage + imageURL={imageName} + key={imageName} + selectedImage={preSelectImage} + setSelectedImageURL={setPreSelectImage} /> - <div className="buttons"> - <button - className="btnCancel" - onClick={() => setOpenModal(false)} - > - Annuler - </button> - <button className="btnValid" onClick={handleValidateImage}> - Valider - </button> - </div> - </div> - </> - </Modal> - )} + ))} + </div> + <Pagination + count={pageCount} + siblingCount={0} + onChange={(_e, page) => handleChangePage(page)} + style={{ + display: 'flex', + justifyContent: 'center', + marginTop: '1rem', + }} + /> + <div className="buttons"> + <Button variant="outlined" onClick={() => setOpenModal(false)}> + Annuler + </Button> + <Button onClick={handleValidateImage}>Valider</Button> + </div> + </Dialog> </> ) } diff --git a/src/components/Newsletter/ImagePicker/imagePicker.scss b/src/components/Newsletter/ImagePicker/imagePicker.scss index d831ef10abcede991f3b82fb6104ee87d8e43a91..60c9acff8409e4889f0c08e7a31baddbdb26142a 100644 --- a/src/components/Newsletter/ImagePicker/imagePicker.scss +++ b/src/components/Newsletter/ImagePicker/imagePicker.scss @@ -13,6 +13,7 @@ } } .ecogesture-image { + cursor: pointer; display: block; box-sizing: border-box; border: solid 1px transparent; diff --git a/src/components/Newsletter/MailSubject/mailSubject.scss b/src/components/Newsletter/MailSubject/mailSubject.scss deleted file mode 100644 index de327758893e42b30477e68dba7af7e83629ab7a..0000000000000000000000000000000000000000 --- a/src/components/Newsletter/MailSubject/mailSubject.scss +++ /dev/null @@ -1,9 +0,0 @@ -.mailSubject { - .title { - margin: 1rem 0; - } - input { - min-width: 300px; - margin-left: 0; - } -} diff --git a/src/components/Newsletter/MailSubject/mailSubject.tsx b/src/components/Newsletter/MailSubject/mailSubject.tsx index bf6443b9d4ce0ddb6e8e9157ae4d5cddfd80ec62..47baa378497ea3c262bb6573e98d02debd024dfb 100644 --- a/src/components/Newsletter/MailSubject/mailSubject.tsx +++ b/src/components/Newsletter/MailSubject/mailSubject.tsx @@ -1,7 +1,7 @@ +import { Button, TextField } from '@mui/material' import React, { ChangeEvent } from 'react' import { EditorType } from '../CustomEditor' import { ContentItems } from '../Newsletter' -import './mailSubject.scss' interface MailSubjectProps { onSave: () => Promise<void> @@ -23,25 +23,26 @@ const MailSubject: React.FC<MailSubjectProps> = ({ return ( <div className="mailSubject"> <h2>Objet de la newsletter (Optionnel)</h2> - <p className="title">Objet</p> - <input + <h3>Objet</h3> + <TextField type="text" - className="input-dark" placeholder="Par défaut : [Ecolyo] Votre bilan..." value={subject} onChange={handleChangeSubject} /> <div> <div className="buttons"> - <button className="btnCancel" onClick={onCancel}> + <Button variant="outlined" onClick={onCancel}> Annuler - </button> - <button className="btnValid" onClick={onSave}> - Sauvegarder - </button> - <button className="btnDelete" onClick={() => onDelete('subject')}> + </Button> + <Button onClick={onSave}>Sauvegarder</Button> + <Button + style={{ marginLeft: 'auto' }} + variant="text" + onClick={() => onDelete('subject')} + > Supprimer - </button> + </Button> </div> </div> </div> diff --git a/src/components/Newsletter/Modal/Modal.tsx b/src/components/Newsletter/Modal/Modal.tsx deleted file mode 100644 index da3c6c9e021e5756a23cdd5bd4f42dded0f7ba36..0000000000000000000000000000000000000000 --- a/src/components/Newsletter/Modal/Modal.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React, { ReactChild } from 'react' -import { createPortal } from 'react-dom' -import './modal.scss' -interface ModalProps { - children: ReactChild - classes?: string -} - -const Modal: React.FC<ModalProps> = ({ children, classes }) => { - return createPortal( - <div className="modal-bg"> - <div className="modal-container"> - <div className={`modal-content ${classes}`}>{children}</div> - </div> - </div>, - document.body - ) -} - -export default Modal diff --git a/src/components/Newsletter/Modal/modal.scss b/src/components/Newsletter/Modal/modal.scss deleted file mode 100644 index ae25cc96eb55815b1d094116dc26bd758602b687..0000000000000000000000000000000000000000 --- a/src/components/Newsletter/Modal/modal.scss +++ /dev/null @@ -1,39 +0,0 @@ -@import '../../../styles/config/colors'; - -.modal-bg { - background-color: rgba(27, 28, 34, 0.85); - display: flex; - height: 100vh; - left: 0; - position: fixed; - top: 0; - width: 100%; - z-index: 9999; - - .modal-container { - align-items: center; - display: flex; - justify-content: center; - overflow-y: auto; - width: 100%; - } - .modal-content { - background: linear-gradient(180deg, #323339 0%, #25262b 100%); - box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55); - border-radius: 4px; - padding: 1rem; - position: relative; - max-width: 350px; - width: 100%; - } - .modal-large { - max-width: 700px; - min-height: 380px; - display: flex; - flex-direction: column; - } - .buttons { - display: flex; - justify-content: center; - } -} diff --git a/src/components/Newsletter/MonthlyInfo/MonthlyInfo.tsx b/src/components/Newsletter/MonthlyInfo/MonthlyInfo.tsx index d7d8a2773505a8ac7a5eaccccb2949d162ee65d9..7b45e657f588ed13fb4cba92a766586433c4d484 100644 --- a/src/components/Newsletter/MonthlyInfo/MonthlyInfo.tsx +++ b/src/components/Newsletter/MonthlyInfo/MonthlyInfo.tsx @@ -1,49 +1,51 @@ +import { Button } from '@mui/material' import React from 'react' import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' import { convertStringToEditorState } from '../../../utils/editorStateManagement' import CustomEditor, { EditorType } from '../CustomEditor' import ImagePicker from '../ImagePicker/ImagePicker' import { ContentItems } from '../Newsletter' -import './monthlyInfo.scss' interface MonthlyInfoProps { - onSave: () => Promise<void> - onCancel: () => void - info: string handleChange: (value: string, type: EditorType) => void - onDelete: (target: ContentItems) => void imageURL: string + info: string + onCancel: () => void + onDelete: (target: ContentItems) => void + onSave: () => Promise<void> } const MonthlyInfo: React.FC<MonthlyInfoProps> = ({ - onSave, - onCancel, - info, handleChange, - onDelete, imageURL, + info, + onCancel, + onDelete, + onSave, }) => { return ( <div className="monthlyInfo"> <h2>Informations du mois (Optionnel)</h2> <div> - <p className="title">Image</p> + <h3>Image</h3> <ImagePicker imageURL={imageURL} handleChange={handleChange} /> - <p className="title">Info</p> + <h3>Info</h3> <CustomEditor baseState={convertStringToEditorState(info)} handleChange={handleChange} type="info" /> <div className="buttons"> - <button className="btnCancel" onClick={onCancel}> + <Button variant="outlined" onClick={onCancel}> Annuler - </button> - <button className="btnValid" onClick={onSave}> - Sauvegarder - </button> - <button className="btnDelete" onClick={() => onDelete('monthlyInfo')}> + </Button> + <Button onClick={onSave}>Sauvegarder</Button> + <Button + style={{ marginLeft: 'auto' }} + variant="text" + onClick={() => onDelete('monthlyInfo')} + > Supprimer - </button> + </Button> </div> </div> </div> diff --git a/src/components/Newsletter/MonthlyInfo/monthlyInfo.scss b/src/components/Newsletter/MonthlyInfo/monthlyInfo.scss deleted file mode 100644 index 90aaf6171d7ed970e45b136bb5447742e115e4c3..0000000000000000000000000000000000000000 --- a/src/components/Newsletter/MonthlyInfo/monthlyInfo.scss +++ /dev/null @@ -1,9 +0,0 @@ -.monthlyInfo { - margin: 2rem 0; - .title { - margin: 1rem 0; - } - h2 { - margin-bottom: 1rem; - } -} diff --git a/src/components/Newsletter/MonthlyNews/MonthlyNews.tsx b/src/components/Newsletter/MonthlyNews/MonthlyNews.tsx index 90557d310fe8f7d438f7a16052f687d0e1a6e659..19c05bad01ef7125a59609161f5dc2f5961d5cf8 100644 --- a/src/components/Newsletter/MonthlyNews/MonthlyNews.tsx +++ b/src/components/Newsletter/MonthlyNews/MonthlyNews.tsx @@ -1,9 +1,9 @@ +import { Button, TextField } from '@mui/material' import React, { ChangeEvent } from 'react' import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' import { convertStringToEditorState } from '../../../utils/editorStateManagement' import CustomEditor, { EditorType } from '../CustomEditor' import { ContentItems } from '../Newsletter' -import './monthlyNews.scss' interface MonthlyNewsProps { onSave: () => Promise<void> @@ -27,16 +27,15 @@ const MonthlyNews: React.FC<MonthlyNewsProps> = ({ return ( <div className="monthlyNews"> <h2>Nouveautés du mois (Optionnel)</h2> - <p className="title">Titre</p> - <input + <h3>Titre</h3> + <TextField type="text" - className="input-dark" placeholder="Par défaut : Les nouveautés du service" value={title} onChange={handleChangeTitle} /> <div> - <p className="title">Contenu</p> + <h3>Contenu</h3> <div> <CustomEditor baseState={convertStringToEditorState(content)} @@ -46,15 +45,17 @@ const MonthlyNews: React.FC<MonthlyNewsProps> = ({ </div> <div className="buttons"> - <button className="btnCancel" onClick={onCancel}> + <Button variant="outlined" onClick={onCancel}> Annuler - </button> - <button className="btnValid" onClick={onSave}> - Sauvegarder - </button> - <button className="btnDelete" onClick={() => onDelete('monthlyNews')}> + </Button> + <Button onClick={onSave}>Sauvegarder</Button> + <Button + style={{ marginLeft: 'auto' }} + variant="text" + onClick={() => onDelete('monthlyNews')} + > Supprimer - </button> + </Button> </div> </div> </div> diff --git a/src/components/Newsletter/MonthlyNews/monthlyNews.scss b/src/components/Newsletter/MonthlyNews/monthlyNews.scss deleted file mode 100644 index e71c10d084410f5f74604f8436233efa8683c48a..0000000000000000000000000000000000000000 --- a/src/components/Newsletter/MonthlyNews/monthlyNews.scss +++ /dev/null @@ -1,10 +0,0 @@ -.monthlyNews { - margin: 2rem 0; - .title { - margin: 1rem 0; - } - input { - min-width: 300px; - margin-left: 0; - } -} diff --git a/src/components/Newsletter/Newsletter.tsx b/src/components/Newsletter/Newsletter.tsx index 410ca99964aadb383e29812f98b7d46347093b76..9ecedf91638a7aaf76b679c84d4322dabfbe87ad 100644 --- a/src/components/Newsletter/Newsletter.tsx +++ b/src/components/Newsletter/Newsletter.tsx @@ -1,12 +1,7 @@ -import React, { - useCallback, - useContext, - useEffect, - useMemo, - useState, -} from 'react' +import { Button, Dialog } from '@mui/material' +import React, { useCallback, useEffect, useMemo, useState } from 'react' +import { useWhoAmI } from '../../API' import { getAxiosXSRFHeader } from '../../axios.config' -import { UserContext, UserContextProps } from '../../hooks/userContext' import { IMailSubject } from '../../models/mailSubject.model' import { IMonthlyInfo } from '../../models/monthlyInfo.model' import { IMonthlyNews } from '../../models/monthlyNews.model' @@ -16,7 +11,6 @@ import Loader from '../Loader/Loader' import { EditorType } from './CustomEditor' import DateSelector from './DateSelector/DateSelector' import MailSubject from './MailSubject/mailSubject' -import Modal from './Modal/Modal' import MonthlyInfo from './MonthlyInfo/MonthlyInfo' import MonthlyNews from './MonthlyNews/MonthlyNews' import Poll from './Poll/Poll' @@ -30,9 +24,9 @@ export type ContentItems = | '' const Newsletter: React.FC = () => { - /** - * Display previous month until the newsletter is sent on the 3rd day of the month - */ + const { data: user } = useWhoAmI() + + /** Display previous month until the newsletter is sent on the 3rd day of the month */ const getCurrentNewsletterDate = (): Date => { const today = new Date() const currentDay = today.getDate() @@ -57,7 +51,6 @@ const Newsletter: React.FC = () => { const [isLoading, setIsLoading] = useState<boolean>(false) const [warningModal, setWarningModal] = useState<boolean>(false) const [toDelete, setToDelete] = useState<ContentItems>('') - const { user }: Partial<UserContextProps> = useContext(UserContext) const newsletterService = useMemo(() => { return new NewsletterService() }, []) @@ -286,7 +279,7 @@ const Newsletter: React.FC = () => { return ( <> <div className="header"> - <p className="title pageTitle">Édition de la newsletter</p> + <h1 className="title pageTitle">Édition de la newsletter</h1> <DateSelector date={date} setDate={setDate} isEmpty={isEmpty} /> </div> {isLoading && <Loader />} @@ -298,7 +291,7 @@ const Newsletter: React.FC = () => { subject={subject} handleChange={handleEditorChange} onDelete={handleOpenDeleteModal} - ></MailSubject> + /> <hr /> <MonthlyInfo info={info} @@ -328,27 +321,19 @@ const Newsletter: React.FC = () => { /> </div> )} - {warningModal && ( - <Modal> - <> - <div className="modal-text"> - Êtes-vous sûr de vouloir supprimer{' '} - {getContentItemString(toDelete)} ? - </div> - <div className="buttons"> - <button - className="btnCancel" - onClick={() => setWarningModal(false)} - > - Annuler - </button> - <button className="btnValid" onClick={handleConfirmAlert}> - Continuer - </button> - </div> - </> - </Modal> - )} + + <Dialog open={warningModal}> + <div className="modal-text"> + Êtes-vous sûr de vouloir supprimer {getContentItemString(toDelete)} + ? + </div> + <div className="buttons"> + <Button variant="outlined" onClick={() => setWarningModal(false)}> + Annuler + </Button> + <Button onClick={handleConfirmAlert}>Continuer</Button> + </div> + </Dialog> </> ) } diff --git a/src/components/Newsletter/Poll/Poll.tsx b/src/components/Newsletter/Poll/Poll.tsx index c82196168da4164fe179a41a46d8d3691531ffd8..614a16038778f70431d12bf27009235188371cd8 100644 --- a/src/components/Newsletter/Poll/Poll.tsx +++ b/src/components/Newsletter/Poll/Poll.tsx @@ -1,9 +1,9 @@ +import { Button, TextField } from '@mui/material' import React, { ChangeEvent } from 'react' import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' import { convertStringToEditorState } from '../../../utils/editorStateManagement' import CustomEditor, { EditorType } from '../CustomEditor' import { ContentItems } from '../Newsletter' -import './poll.scss' interface PollProps { question: string @@ -29,15 +29,10 @@ const Poll: React.FC<PollProps> = ({ return ( <div className="poll"> <h2>Ajouter un sondage (Optionnel)</h2> - <p className="title">Lien</p> - <input - type="text" - className="input-dark" - value={link} - onChange={handleChangeLink} - /> + <h3>Lien</h3> + <TextField type="text" value={link} onChange={handleChangeLink} /> <div> - <p className="title">Question</p> + <h3>Question</h3> <div> <CustomEditor baseState={convertStringToEditorState(question)} @@ -47,15 +42,17 @@ const Poll: React.FC<PollProps> = ({ </div> <div className="buttons"> - <button className="btnCancel" onClick={onCancel}> + <Button variant="outlined" onClick={onCancel}> Annuler - </button> - <button className="btnValid" onClick={onSave}> - Sauvegarder - </button> - <button className="btnDelete" onClick={() => onDelete('poll')}> + </Button> + <Button onClick={onSave}>Sauvegarder</Button> + <Button + style={{ marginLeft: 'auto' }} + variant="text" + onClick={() => onDelete('poll')} + > Supprimer - </button> + </Button> </div> </div> </div> diff --git a/src/components/Newsletter/Poll/poll.scss b/src/components/Newsletter/Poll/poll.scss deleted file mode 100644 index 8c606f9ce7b29b0330dbb05e8e4ae1ab99063a2c..0000000000000000000000000000000000000000 --- a/src/components/Newsletter/Poll/poll.scss +++ /dev/null @@ -1,10 +0,0 @@ -.poll { - margin: 2rem 0; - .title { - margin: 1rem 0; - } - input { - min-width: 300px; - margin-left: 0; - } -} diff --git a/src/components/Newsletter/newsletter.scss b/src/components/Newsletter/newsletter.scss index e2c8832d1fb4a5cd2225123ea730f4d5fc3b96fa..2c43170fcac7ace2fc11fff5045149333d9b3d38 100644 --- a/src/components/Newsletter/newsletter.scss +++ b/src/components/Newsletter/newsletter.scss @@ -1,5 +1,4 @@ @import '../../styles/config/typography.scss'; -@import '../../styles/config/layout.scss'; @import '../../styles/config/breakpoints'; .header { @@ -10,24 +9,14 @@ #343641 0%, #1b1c22 100% ); - box-shadow: 0px 5px 5px rgb(0 0 0 / 0%), 0px 3px 14px rgb(0 0 0 / 0%), + box-shadow: + 0px 5px 5px rgb(0 0 0 / 0%), + 0px 3px 14px rgb(0 0 0 / 0%), 0px 8px 10px rgb(0 0 0 / 15%); } .content { padding: 1rem; } -.subtitle { - margin: 1rem 0; -} hr { - margin: 2rem 1rem; -} -.buttons { - display: flex; - @media screen and (max-width: $width-tablet) { - flex-direction: column; - button { - width: 100%; - } - } + margin: 2rem 0rem; } diff --git a/src/components/Popups/Popups.tsx b/src/components/Popups/Popups.tsx index c921d3fc60f598c372b9e855de42d53ea8c4d9d8..d85f8870e9079b5efd3a3f637e40d979a3320cc4 100644 --- a/src/components/Popups/Popups.tsx +++ b/src/components/Popups/Popups.tsx @@ -1,9 +1,18 @@ +import { + Button, + FormControl, + FormControlLabel, + FormGroup, + NativeSelect, + Switch, + TextField, +} from '@mui/material' import { DateTime } from 'luxon' -import React, { useCallback, useContext, useEffect, useState } from 'react' +import React, { useCallback, useEffect, useState } from 'react' import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' +import { useWhoAmI } from '../../API' import { getAxiosXSRFHeader } from '../../axios.config' import { CheckboxType } from '../../enum/checkboxType.enum' -import { UserContext, UserContextProps } from '../../hooks/userContext' import { ICustomPopup, PopupDuration } from '../../models/customPopup.model' import { Option, @@ -18,7 +27,7 @@ import Loader from '../Loader/Loader' import CustomEditor from '../Newsletter/CustomEditor' import './popups.scss' -const OPTIONS: Array<Option> = [ +const OPTIONS: Option[] = [ { value: durationEnum.hours, label: 'Heures', @@ -34,6 +43,8 @@ const OPTIONS: Array<Option> = [ ] const Popups: React.FC = () => { + const { data: user } = useWhoAmI() + const [refreshData, setRefreshData] = useState(false) const [isLoading, setIsLoading] = useState(false) const [partnersInfo, setPartnersInfo] = useState<IPartnersInfo>({ @@ -54,41 +65,37 @@ const Popups: React.FC = () => { duration: 0, }) - const { user }: Partial<UserContextProps> = useContext(UserContext) - const isPartnerNotificationOn = () => partnersInfo.enedis_failure || partnersInfo.egl_failure || partnersInfo.grdf_failure - /** - * Only one type of popup can be enabled - */ + /** Only one type of popup can be enabled */ const isPageValid = () => !(isPartnerNotificationOn() && customPopup.popupEnabled) const handleCheckboxChange = (value: boolean, type: CheckboxType): void => { switch (type) { case CheckboxType.GRDF: - setPartnersInfo((prevPartnersInfo) => ({ + setPartnersInfo(prevPartnersInfo => ({ ...prevPartnersInfo, grdf_failure: value, })) break case CheckboxType.ENEDIS: - setPartnersInfo((prevPartnersInfo) => ({ + setPartnersInfo(prevPartnersInfo => ({ ...prevPartnersInfo, enedis_failure: value, })) break case CheckboxType.EGL: - setPartnersInfo((prevPartnersInfo) => ({ + setPartnersInfo(prevPartnersInfo => ({ ...prevPartnersInfo, egl_failure: value, })) break case CheckboxType.CUSTOM: - setCustomPopup((prev) => ({ + setCustomPopup(prev => ({ ...prev, popupEnabled: value, })) @@ -99,12 +106,13 @@ const Popups: React.FC = () => { } const handlePopupChange = (field: 'title' | 'description', value: string) => { - setCustomPopup((prev) => ({ + setCustomPopup(prev => ({ ...prev, [field]: value, })) } + // clean this const handleCancel = useCallback(() => { setRefreshData(true) }, [setRefreshData]) @@ -176,7 +184,7 @@ const Popups: React.FC = () => { } const handleSelectChange = (event: React.ChangeEvent<HTMLSelectElement>) => { - setPopupDuration((prev) => ({ + setPopupDuration(prev => ({ ...prev, type: event.target.value as durationType, })) @@ -197,7 +205,7 @@ const Popups: React.FC = () => { years: 1, }) } - setCustomPopup((prev) => ({ + setCustomPopup(prev => ({ ...prev, endDate: newDate.toISO(), })) @@ -227,130 +235,132 @@ const Popups: React.FC = () => { return ( <> <div className="header"> - <p className="title pageTitle">Paramètres de l'appli</p> + <h1>Création de Pop-up</h1> </div> <div className="content popups"> {isLoading && <Loader />} {!isLoading && ( <> - <h1>Création de Pop-up</h1> <div className="partnersInfo"> - <h2 className="title">Affichage des pop-up de panne</h2> - <div className={customPopup.popupEnabled ? 'disabled' : ''}> + <h3>Affichage des pop-up de panne</h3> + <div> <p>Services concernés</p> - <div className="switch_div"> - <span>Panne Enedis</span> - <input - type="checkbox" - id="switch_enedis" - disabled={customPopup.popupEnabled} - checked={partnersInfo.enedis_failure} - onChange={(event) => { - handleCheckboxChange( - event.currentTarget.checked, - CheckboxType.ENEDIS - ) - }} + <FormGroup style={{ flexDirection: 'row' }}> + <FormControlLabel + label="Panne Enedis" + labelPlacement="top" + control={ + <Switch + disabled={customPopup.popupEnabled} + checked={partnersInfo.enedis_failure} + onChange={event => { + handleCheckboxChange( + event.target.checked, + CheckboxType.ENEDIS + ) + }} + /> + } /> - <label htmlFor="switch_enedis"></label> - </div> - <div className="switch_div"> - <span>Panne EGL</span> - <input - type="checkbox" - id="switch_egl" - disabled={customPopup.popupEnabled} - checked={partnersInfo.egl_failure} - onChange={(event) => { - handleCheckboxChange( - event.currentTarget.checked, - CheckboxType.EGL - ) - }} + <FormControlLabel + label="Panne EGL" + labelPlacement="top" + control={ + <Switch + disabled={customPopup.popupEnabled} + checked={partnersInfo.egl_failure} + onChange={event => { + handleCheckboxChange( + event.target.checked, + CheckboxType.EGL + ) + }} + /> + } /> - <label htmlFor="switch_egl"></label> - </div> - <div className="switch_div"> - <span>Panne GRDF</span> - <input - type="checkbox" - id="switch_grdf" - disabled={customPopup.popupEnabled} - checked={partnersInfo.grdf_failure} - onChange={(event) => { - handleCheckboxChange( - event.currentTarget.checked, - CheckboxType.GRDF - ) - }} + <FormControlLabel + label="Panne GRDF" + labelPlacement="top" + control={ + <Switch + disabled={customPopup.popupEnabled} + checked={partnersInfo.grdf_failure} + onChange={event => { + handleCheckboxChange( + event.target.checked, + CheckboxType.GRDF + ) + }} + /> + } /> - <label htmlFor="switch_grdf"></label> - </div> + </FormGroup> </div> </div> <div className="customPopup"> - <h2 className="title">Affichage de pop-up personnalisée</h2> - <div className={isPartnerNotificationOn() ? 'disabled' : ''}> - <div className="currentPopup"> - <div className="switch_div"> - <span>Pop-up active</span> - <input - type="checkbox" - id="switch_popup" + <h3>Affichage de pop-up personnalisée</h3> + <FormGroup style={{ flexDirection: 'row' }}> + <FormControlLabel + label="Pop-up active" + labelPlacement="top" + control={ + <Switch disabled={isPartnerNotificationOn()} checked={customPopup.popupEnabled} - onChange={(event) => { + onChange={event => { handleCheckboxChange( - event.currentTarget.checked, + event.target.checked, CheckboxType.CUSTOM ) }} /> - <label htmlFor="switch_popup"></label> - </div> + } + /> + {customPopup.popupEnabled && + previousEndDate && + getRemainingDuration(previousEndDate)} + </FormGroup> - {customPopup.popupEnabled && - previousEndDate && - getRemainingDuration(previousEndDate)} - </div> - - <div className="popupTitle"> - <label htmlFor="title">Titre</label> - <input - type="text" - name="title" - id="title" - min={1} - placeholder="Titre" - value={customPopup.title} - onChange={(event) => - handlePopupChange('title', event.target.value) - } - /> - </div> + <div className="popupTitle"> + <TextField + type="text" + placeholder="Titre de la popup" + fullWidth + label="Titre" + value={customPopup.title} + onChange={event => + handlePopupChange('title', event.target.value) + } + /> + </div> - <div className="popupDescription"> - <CustomEditor - baseState={convertStringToEditorState( - customPopup.description - )} - handleChange={(value) => - handlePopupChange('description', value) - } - type="custom_popup" - /> - </div> + <div className="popupDescription"> + <CustomEditor + baseState={convertStringToEditorState( + customPopup.description + )} + handleChange={value => + handlePopupChange('description', value) + } + type="custom_popup" + /> + </div> - <div className="popupEndDate"> - <label htmlFor="title">Nouvelle Durée</label> - <div className="durationInput"> - <select - value={popupDuration.type} - onChange={(event) => handleSelectChange(event)} + <div className="popupEndDate"> + <label htmlFor="title">Nouvelle Durée</label> + <div> + <FormControl style={{ flexDirection: 'row', gap: '1rem' }}> + <NativeSelect + defaultValue={30} + inputProps={{ + name: 'age', + id: 'uncontrolled-native', + }} + onChange={event => handleSelectChange(event)} > - {OPTIONS.map((option) => ( + {OPTIONS.map(option => ( <option key={option.value} value={option.value} @@ -359,37 +369,40 @@ const Popups: React.FC = () => { {option.label} </option> ))} - </select> + </NativeSelect> + {popupDuration.type !== 'infinite' && ( - <input + <TextField + inputProps={{ + inputMode: 'numeric', + pattern: '[0-9]*', + }} + id="outlined-number" type="number" - min="0" + InputLabelProps={{ + shrink: true, + }} value={popupDuration.duration} - onChange={(e) => - setPopupDuration((prev) => ({ + onChange={e => + setPopupDuration(prev => ({ ...prev, duration: Number(e.target.value), })) } /> )} - </div> + </FormControl> </div> </div> </div> <div className="buttons"> - <button className="btnCancel" onClick={handleCancel}> + <Button variant="outlined" onClick={handleCancel}> Annuler - </button> - <button - className="btnValid" - onClick={handleSave} - disabled={!isPageValid()} - title="Un seul type de popup peut être activé" - > + </Button> + <Button disabled={!isPageValid()} onClick={handleSave}> Sauvegarder - </button> + </Button> </div> </> )} diff --git a/src/components/Popups/popups.scss b/src/components/Popups/popups.scss index 7f93c69038d13c943d4658f6c0c478f956d5480c..0071eb96daa5cfba37bc16abb470e22a596c33d0 100644 --- a/src/components/Popups/popups.scss +++ b/src/components/Popups/popups.scss @@ -1,48 +1,15 @@ @import '../../styles/config/colors'; .popups { - .disabled { - opacity: 0.5; - } - - .partnersInfo, - .customPopup { - h2.title { - margin: 1rem 0; - } - } - .partnersInfo { - margin: 2rem 0; - h1 { - margin-bottom: 1rem; - } - - p { - color: $text-grey; - } - } - - .customPopup { - .currentPopup { - display: flex; - margin-bottom: 1rem; - .switch_div { - padding-top: 0; - } - - p.endDate { - color: $gold-dark; - font-weight: bold; - } - } + margin-bottom: 2rem; } - .popupTitle { - margin-bottom: 1.5rem; + p.endDate { + color: $gold-dark; + font-weight: bold; } - .popupTitle, .popupDescription, .popupEndDate { display: flex; @@ -54,17 +21,6 @@ font-weight: 700; } - input, - textarea { - background: inherit; - border-radius: 4px; - border: 1px solid $text-chart; - max-width: 600px; - padding: 1rem; - color: $text-grey; - font-size: 1rem; - } - .count { color: $text-dark; max-width: 600px; @@ -76,94 +32,9 @@ } } - .popupEndDate { - margin-top: 1rem; - .durationInput { - display: flex; - gap: 1.5rem; - max-height: 36px; - - input, - select { - background: #383941; - border: 1px solid $text-chart; - border-radius: 2px; - } - - input { - max-width: 100px; - } - - select { - max-width: 180px; - padding: 0.5rem 1rem; - option { - background-color: $grey-light; - } - } - } - } - - .buttons { + .customPopup { display: flex; - justify-content: center; + flex-direction: column; gap: 1rem; - button { - margin: 0; - } - } - - .switch_div { - display: inline-block; - padding: 1rem 1rem; - min-width: 135px; - - span { - color: $text-dark; - } - - input[type='checkbox'] { - width: 0; - height: 0; - visibility: hidden; - margin-bottom: 15px; - } - - label { - display: block; - width: 50px; - height: 20px; - background-color: grey; - border-radius: 15px; - position: relative; - cursor: pointer; - transition: 0.5s; - box-shadow: 0 0 20px #80808050; - } - - label::after { - content: ''; - width: 17px; - height: 17px; - background-color: #e8f5f7; - position: absolute; - border-radius: 13px; - top: 2px; - left: 2px; - transition: 0.5s; - } - - input:checked + label:after { - left: calc(100% - 3px); - transform: translateX(-100%); - } - - input:checked + label { - background-color: #e3b82a; - } - - label:active:after { - width: 34px; - } } } diff --git a/src/components/Prices/PriceRow.tsx b/src/components/Prices/PriceRow.tsx index b2df90bfad18548b187c3e82d78b7762523e9254..09b28b353fbed0e41e3274534170bbc6701ddfec 100644 --- a/src/components/Prices/PriceRow.tsx +++ b/src/components/Prices/PriceRow.tsx @@ -21,7 +21,7 @@ const PriceRow: React.FC<PriceSectionProps> = ({ index, isNextPrice, }) => { - const editableLimit: number = 3 + const editableLimit = 3 return ( <> @@ -47,7 +47,7 @@ const PriceRow: React.FC<PriceSectionProps> = ({ /> )} </li> - <hr></hr> + <hr /> </> ) } diff --git a/src/components/Prices/PriceSection.tsx b/src/components/Prices/PriceSection.tsx index 317d938ae8cfb51561656bd3da9948eb71257cdd..84b364ca50a911d66678db601feebbffd27f8553 100644 --- a/src/components/Prices/PriceSection.tsx +++ b/src/components/Prices/PriceSection.tsx @@ -1,13 +1,14 @@ +import { Button, TextField } from '@mui/material' import dayjs from 'dayjs' import timezone from 'dayjs/plugin/timezone' import utc from 'dayjs/plugin/utc' -import React, { useCallback, useContext, useEffect, useState } from 'react' +import React, { useCallback, useEffect, useState } from 'react' import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' +import { useWhoAmI } from '../../API' import arrowDown from '../../assets/icons/down-arrow.png' import { getAxiosXSRFHeader } from '../../axios.config' import { FluidType } from '../../enum/fluidTypes' import { FrequencyInMonth } from '../../enum/frequency.enum' -import { UserContext, UserContextProps } from '../../hooks/userContext' import { IPrice } from '../../models/price.model' import { PricesService } from '../../services/prices.service' import Loader from '../Loader/Loader' @@ -23,6 +24,7 @@ interface PriceSectionProps { } const PriceSection: React.FC<PriceSectionProps> = ({ fluid, frequency }) => { + const { data: user } = useWhoAmI() const [prices, setPrices] = useState<IPrice[]>([]) const [nextPrice, setNextPrice] = useState<IPrice>() const [isLoading, setIsLoading] = useState<boolean>(false) @@ -35,14 +37,13 @@ const PriceSection: React.FC<PriceSectionProps> = ({ fluid, frequency }) => { startDate: '', endDate: null, }) - const { user }: Partial<UserContextProps> = useContext(UserContext) - const maxPerList: number = 8 + const maxPerList = 8 const handlePriceSelection = useCallback((val: string) => { if (val === '') val = '0' val = val.replace(/,/g, '.') val = val.replace(/([^0-9.]+)/, '') - setPriceToSave((prev) => { + setPriceToSave(prev => { return { ...prev, price: val } }) }, []) @@ -68,7 +69,7 @@ const PriceSection: React.FC<PriceSectionProps> = ({ fluid, frequency }) => { }, [priceToSave, user]) const toggleHistory = useCallback(() => { - setShowHistory((prev) => !prev) + setShowHistory(prev => !prev) }, []) const getDate = useCallback((isoString: string): string => { @@ -79,7 +80,7 @@ const PriceSection: React.FC<PriceSectionProps> = ({ fluid, frequency }) => { }, []) const toggleFullList = useCallback(() => { - setShowFullList((prev) => !prev) + setShowFullList(prev => !prev) }, []) useEffect(() => { @@ -120,7 +121,7 @@ const PriceSection: React.FC<PriceSectionProps> = ({ fluid, frequency }) => { } }, [refreshData, frequency, fluid]) - if (isLoading) return <Loader></Loader> + if (isLoading) return <Loader /> if (!prices.length) return <section> Aucun prix trouvé</section> return ( <section> @@ -132,38 +133,41 @@ const PriceSection: React.FC<PriceSectionProps> = ({ fluid, frequency }) => { <hr className="price-separator" /> <div className="flex-bloc"> <p>Nouveau prix : </p> - <input - className="input-dark price-select" + <TextField type="text" value={priceToSave.price.toString()} - onChange={(e) => handlePriceSelection(e.target.value)} + onChange={e => handlePriceSelection(e.target.value)} placeholder={priceToSave.price === '' ? 'Saisir le nouveau prix' : ''} + fullWidth={false} /> <span className="euro">€</span> <div className="flex-bloc startDate"> <p>A partir de : </p> - <p className="date"> - <span className="capital">{getDate(priceToSave.startDate)}</span> - </p> + <p className="date">{getDate(priceToSave.startDate)}</p> </div> </div> - <button - className="btnValid" - onClick={savePrice} - disabled={priceToSave.price === '0' || priceToSave.price === ''} - > - Sauvegarder - </button> + <div> + <Button + onClick={savePrice} + disabled={priceToSave.price === '0' || priceToSave.price === ''} + > + Sauvegarder + </Button> + </div> <div className="history"> - <button onClick={toggleHistory} className={showHistory ? 'active' : ''}> - <span>Voir l'historique</span> + <Button + variant="outlined" + onClick={toggleHistory} + className={showHistory ? 'active' : ''} + > + Voir l'historique <img src={arrowDown} className={showHistory ? 'icon-active' : ''} alt="arrow-icon" /> - </button> + </Button> {showHistory && ( <ul className={showHistory ? 'active' : ''}> {nextPrice && ( @@ -194,17 +198,17 @@ const PriceSection: React.FC<PriceSectionProps> = ({ fluid, frequency }) => { index={i} /> {i === maxPerList && !showFullList && ( - <button onClick={toggleFullList} className="showButton"> + <Button variant="outlined" onClick={toggleFullList}> En voir plus - </button> + </Button> )} </div> ) })} {showFullList && ( - <button onClick={toggleFullList} className="showButton"> + <Button variant="outlined" onClick={toggleFullList}> En voir moins - </button> + </Button> )} </ul> )} diff --git a/src/components/Prices/Prices.tsx b/src/components/Prices/Prices.tsx index 75cadeb53eeea30a23e7d37bdcd682022e0dd857..d18a85b9c90bac3ede5f8c88e2633074d86d61df 100644 --- a/src/components/Prices/Prices.tsx +++ b/src/components/Prices/Prices.tsx @@ -9,7 +9,7 @@ const Prices: React.FC = () => { return ( <> <div className="header"> - <p className="title pageTitle">Prix des fluides</p> + <h1>Prix des fluides</h1> </div> <div className="prices"> <PriceSection diff --git a/src/components/Prices/prices.scss b/src/components/Prices/prices.scss index 0f0d367b909bda1b5261d7f54ddf888a5923411a..eabf44ca432c77e451490c17341bc01347b4eb01 100644 --- a/src/components/Prices/prices.scss +++ b/src/components/Prices/prices.scss @@ -1,39 +1,30 @@ @import '../../styles/config/typography.scss'; -@import '../../styles/config/layout.scss'; @import '../../styles/config/breakpoints'; @import '../../styles/config/colors'; .prices { - margin-top: $navigator-height; padding: 1rem; .title { margin: 1rem 0; } - .capital { - text-transform: capitalize; - } h2 { - margin-bottom: 1rem; color: $gold; } .price-separator { - margin: 1rem 0; + margin: 0; background: white; } .flex-bloc { display: flex; align-items: center; - .price-select { - position: relative; - } + gap: 0.5rem; + .euro { - display: block; - margin-left: 0.5rem; font-weight: bold; } .startDate { - margin-left: 1rem; .date { + text-transform: capitalize; margin-left: 0.5rem; color: $gold; font-weight: bold; @@ -41,28 +32,20 @@ } } section { + display: flex; + flex-direction: column; + gap: 1rem; margin-top: 1rem; margin-bottom: 2rem; .history { button { - @include baseButton(); - background: $grey-dark; - border: solid 1px $gold; - display: flex; - align-items: center; - &:hover { - background: $dark-background; - opacity: 0.8; - } - &.active { - border-radius: 5px 5px 0 0; - } img { width: 20px; margin-left: 0.5rem; - } - span { - color: $gold; + transition: all 0.3s ease-out; + &.icon-active { + transform: rotate(180deg); + } } } ul { @@ -106,13 +89,6 @@ margin: 0; background: white; } - .showButton { - text-align: center; - color: $gold; - } - } - .icon-active { - transform: rotate(180deg); } } } diff --git a/src/components/Routes/Router.tsx b/src/components/Routes/Router.tsx index a1fe6c0d2b971d07b8950128c2260ae408afa6f0..64c8f6cbfaea33ba15f2932a25f06e4ace6bd55f 100644 --- a/src/components/Routes/Router.tsx +++ b/src/components/Routes/Router.tsx @@ -1,15 +1,17 @@ -import React, { useContext } from 'react' -import { Redirect, Route, Switch } from 'react-router-dom' -import { UserContext } from '../../hooks/userContext' +import { Navigate, Route, Routes } from 'react-router-dom' +import { useWhoAmI } from '../../API' import Consents from '../Consents/Consents' +import Loader from '../Loader/Loader' import Login from '../Login/Login' import Newsletter from '../Newsletter/Newsletter' import Popups from '../Popups/Popups' import Prices from '../Prices/Prices' +import SideBar from '../SideBar/SideBar' -export const links: { - [key: string]: { label: string; path: string; adminOnly?: boolean } -} = { +export const links: Record< + string, + { label: string; path: string; adminOnly?: boolean } +> = { newsletter: { label: 'Newsletter', path: '/newsletter', @@ -29,35 +31,41 @@ export const links: { }, } -export const routes = Object.keys(links).map((key) => ({ +export const routes = Object.keys(links).map(key => ({ label: links[key].label, path: links[key].path, adminOnly: links[key].adminOnly, })) -const Router: React.FC = () => { - const { user } = useContext(UserContext) +const Router = () => { + const { data: user, isLoading } = useWhoAmI() - return ( - <Switch> - {user ? ( - <> - <Route exact path={links.newsletter.path} component={Newsletter} /> - <Route exact path={links.prices.path} component={Prices} /> - <Route exact path={links.popups.path} component={Popups} /> - {user.isAdmin && ( - <Route exact path={links.consents.path} component={Consents} /> - )} - <Redirect path="*" to={links.newsletter.path} /> - </> - ) : ( - <> - <Route path="/login" component={Login} /> - <Redirect path="*" to="/login" /> - </> - )} - </Switch> - ) + if (isLoading) return <Loader /> + + if (user) { + return ( + <> + <SideBar /> + <main className="wrapper"> + <Routes> + <Route path={links.newsletter.path} element={<Newsletter />} /> + <Route path={links.prices.path} element={<Prices />} /> + <Route path="/popups" element={<Popups />} /> + {user.isAdmin && ( + <Route path={links.consents.path} element={<Consents />} /> + )} + <Route path="/login" element={<Login />} /> + <Route + path="*" + element={<Navigate replace to={links.newsletter.path} />} + /> + </Routes> + </main> + </> + ) + } + + return <Login /> } export default Router diff --git a/src/components/Navigation/SideBar.tsx b/src/components/SideBar/SideBar.tsx similarity index 51% rename from src/components/Navigation/SideBar.tsx rename to src/components/SideBar/SideBar.tsx index 301ac19b2ef555924f449633fda66eec864bb065..dbaabae3f6662e92b892fbdd3fd15ffe6a091870 100644 --- a/src/components/Navigation/SideBar.tsx +++ b/src/components/SideBar/SideBar.tsx @@ -1,29 +1,41 @@ -import React, { useContext } from 'react' -import { NavLink } from 'react-router-dom' +import { Button } from '@mui/material' +import React from 'react' +import { useMutation, useQueryClient } from 'react-query' +import { NavLink, useNavigate } from 'react-router-dom' +import { fetchLogout, useWhoAmI } from '../../API' import logo from '../../assets/icons/ecolyo-logo.svg' -import { useAuth } from '../../hooks/useAuth' -import { UserContext } from '../../hooks/userContext' import { routes } from '../Routes/Router' import './sidebar.scss' const SideBar: React.FC = () => { - const { user } = useContext(UserContext) - const { logoutUser } = useAuth() + const queryClient = useQueryClient() + const navigate = useNavigate() + const { data: user } = useWhoAmI() + + const { mutate: logout } = useMutation({ + mutationFn: fetchLogout, + onSuccess: () => { + queryClient.clear() + navigate('/login') + }, + }) + + if (!user) return <div /> return ( - <nav className={'menu'}> + <nav className="menu"> <div className="logo-container"> <img src={logo} alt="Ecolyo logo" className="logo" /> </div> <div className="menu-list"> {user && routes.map( - (route) => + route => (!route.adminOnly || user.isAdmin) && ( <NavLink key={route.label} to={route.path} - activeClassName="active" + className={({ isActive }) => (isActive ? 'active' : '')} > {route.label} </NavLink> @@ -35,13 +47,13 @@ const SideBar: React.FC = () => { </a> )} </div> - <div className="administration"> + <div className="bottom"> {user ? ( - <button className="btnValid" onClick={logoutUser}> + <Button variant="outlined" onClick={() => logout()}> Logout - </button> + </Button> ) : ( - <NavLink to="/login" activeClassName="active"> + <NavLink to="/login" className="active"> Login </NavLink> )} diff --git a/src/components/SideBar/sidebar.scss b/src/components/SideBar/sidebar.scss new file mode 100644 index 0000000000000000000000000000000000000000..1b2189ed7cc9407f80bb4f597ec5c33660d2532d --- /dev/null +++ b/src/components/SideBar/sidebar.scss @@ -0,0 +1,65 @@ +@import '../../styles/config/colors'; +@import '../../styles/config/breakpoints'; + +.menu { + z-index: 1500; + display: flex; + flex-direction: column; + padding: 1.5rem; + gap: 1.5rem; + box-shadow: + 0px 5px 5px rgb(0 0 0 / 20%), + 0px 3px 14px rgb(0 0 0 / 12%), + 0px 8px 10px rgb(0 0 0 / 14%); + background-color: $grey-light; + + @media screen and (max-width: $width-tablet) { + position: fixed; + top: unset; + bottom: 0; + height: auto; + width: 100%; + } + + @media screen and (max-width: $width-tablet) { + flex-direction: row; + align-items: center; + justify-content: space-between; + } + + .logo-container { + display: flex; + .logo { + margin: auto; + max-width: 4rem; + } + + @media screen and (max-width: $width-tablet) { + display: none; + } + } + + .menu-list { + display: flex; + flex-direction: column; + gap: 1rem; + @media screen and (max-width: $width-tablet) { + flex-direction: row; + } + a { + text-decoration: none; + + &.active { + color: $gold; + font-weight: 700; + } + &:hover { + color: $gold; + } + } + } + + .bottom { + margin-top: auto; + } +} diff --git a/src/components/UI/theme.ts b/src/components/UI/theme.ts new file mode 100644 index 0000000000000000000000000000000000000000..f605e03675953e20de8f1b939b0f6d94ff7a3357 --- /dev/null +++ b/src/components/UI/theme.ts @@ -0,0 +1,54 @@ +import { createTheme } from '@mui/material' + +export const theme = createTheme({ + palette: { + mode: 'dark', + primary: { + main: '#F1C017', + contrastText: '#000', + }, + }, + components: { + MuiButton: { + defaultProps: { + variant: 'contained', + }, + styleOverrides: { + root: { + fontWeight: 700, + minWidth: 130, + }, + }, + }, + MuiTextField: { + defaultProps: { + size: 'small', + fullWidth: true, + }, + styleOverrides: { + root: { + maxWidth: '600px', + }, + }, + }, + MuiSwitch: { + styleOverrides: { + track: { + backgroundColor: '#7B7B7B', + '.Mui-checked.Mui-checked + &': { + backgroundColor: '#DCBA4A', + opacity: 1, + }, + }, + }, + }, + MuiDialog: { + styleOverrides: { + paper: { + padding: '1rem', + maxWidth: '700px', + }, + }, + }, + }, +}) diff --git a/src/custom.d.ts b/src/custom.d.ts index dc10f53aef6889af8c781134aa86ab2ff513795e..526d0dd14bc29ab80d0cfafc5ae56bae2d5662dc 100644 --- a/src/custom.d.ts +++ b/src/custom.d.ts @@ -4,11 +4,11 @@ declare module '*.svg' { } declare module '*.scss' { - const styles: { [className: string]: string } + const styles: Record<string, string> export default styles } -declare module "react-datepicker" { +declare module 'react-datepicker' { const datepicker: any export default datepicker -} \ No newline at end of file +} diff --git a/src/hooks/useAuth.ts b/src/hooks/useAuth.ts deleted file mode 100644 index 6f57d463e9384d19c25871045d2b5165d73a7878..0000000000000000000000000000000000000000 --- a/src/hooks/useAuth.ts +++ /dev/null @@ -1,50 +0,0 @@ -import axios from 'axios' -import { useContext, useState } from 'react' -import { useHistory } from 'react-router-dom' -import { links } from '../components/Routes/Router' -import { UserContext } from './userContext' - -export interface Auth { - loginUser: () => Promise<void> - error: null - logoutUser: () => void -} -export const useAuth = (): Auth => { - const [error, setError] = useState<any>(null) - const { setUser } = useContext(UserContext) - const history = useHistory() - - //login user - const loginUser = async (): Promise<void> => { - try { - window.location.href = '/OAuth2Login' - await setUserContext() - } catch (e) { - setError(e) - } - } - - const logoutUser = async (): Promise<void> => { - try { - if (setUser) setUser(null) - window.location.href = '/Logout' - } catch (e) { - setError(e) - } - } - - //set user in context and push them home - const setUserContext = async (): Promise<void> => { - try { - const { data } = await axios.get(`/api/common/WhoAmI`) - if (data && setUser) { - setUser(data) - history.push(links.newsletter.path) - } - } catch (e) { - setError(e) - } - } - - return { loginUser, error, logoutUser } -} diff --git a/src/hooks/useFindUser.ts b/src/hooks/useFindUser.ts deleted file mode 100644 index 201bd31a45e281591bc5f6b69d20051cbe45f8de..0000000000000000000000000000000000000000 --- a/src/hooks/useFindUser.ts +++ /dev/null @@ -1,31 +0,0 @@ -import axios from 'axios' -import { useEffect, useState } from 'react' -import { toast } from 'react-toastify' -import { User } from '../models/user.model' - -const useFindUser = () => { - const [user, setUser] = useState<User | null>(null) - const [isLoading, setLoading] = useState<boolean>(true) - - useEffect(() => { - async function findUser() { - try { - const { data } = await axios.get(`/api/common/WhoAmI`) - if (data) { - setUser(data) - setLoading(false) - } - } catch (error) { - toast.error('Accès refusé, veuillez vous connecter') - } - } - findUser() - }, []) - return { - user, - setUser, - isLoading, - } -} - -export default useFindUser diff --git a/src/hooks/userContext.ts b/src/hooks/userContext.ts deleted file mode 100644 index e2f6936764e83d2e058302e7fb4a835aa859ff82..0000000000000000000000000000000000000000 --- a/src/hooks/userContext.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createContext, Dispatch, SetStateAction } from 'react' -import { User } from '../models/user.model' - -export interface UserContextProps { - user: User | null - setUser: Dispatch<SetStateAction<User | null>> - isLoading: boolean -} -export const UserContext = createContext<Partial<UserContextProps>>({}) diff --git a/src/services/consent.service.ts b/src/services/consent.service.ts index 8f41655a3ea11f4286cbebeaca0da807561bed15..185b123064e38d2ce903f0fc177a80a9bd5cad1b 100644 --- a/src/services/consent.service.ts +++ b/src/services/consent.service.ts @@ -1,11 +1,12 @@ import axios, { AxiosRequestConfig } from 'axios' import { DateTime } from 'luxon' import { toast } from 'react-toastify' -import { ConsentEntity, IConsent } from '../models/consent.model' import { + ConsentEntity, ConsentPaginationEntity, + IConsent, IConsentPagination, -} from './../models/consent.model' +} from '../models/consent.model' export class ConsentService { /** @@ -28,7 +29,7 @@ export class ConsentService { ) const consentPagination = data as ConsentPaginationEntity return this.parseConsentPagination(consentPagination) - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { @@ -72,7 +73,7 @@ export class ConsentService { public parseConsentPagination = ( consentPaginationEntity: ConsentPaginationEntity ): IConsentPagination => { - const rows = consentPaginationEntity.rows.map((consent) => + const rows = consentPaginationEntity.rows.map(consent => this.parseConsent(consent) ) diff --git a/src/services/newsletter.service.ts b/src/services/newsletter.service.ts index 2a2791eca2a8886ac03c3ca45797af5d72cd7bf4..525ca8762ce9e4f758c78520d2774d9b92aa581c 100644 --- a/src/services/newsletter.service.ts +++ b/src/services/newsletter.service.ts @@ -27,7 +27,7 @@ export class NewsletterService { axiosHeaders ) toast.success('Objet de la newsletter enregistré !') - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { @@ -56,7 +56,7 @@ export class NewsletterService { axiosHeaders ) return data as IMailSubject - } catch (e: any) { + } catch (e) { console.error('error', e) return null } @@ -79,7 +79,7 @@ export class NewsletterService { axiosHeaders ) toast.success('Objet de la newsletter supprimé !') - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { @@ -112,7 +112,7 @@ export class NewsletterService { axiosHeaders ) toast.success('Information du mois enregistrée !') - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { @@ -139,7 +139,7 @@ export class NewsletterService { axiosHeaders ) return data as IMonthlyInfo - } catch (e: any) { + } catch (e) { console.error('error', e) return null } @@ -162,7 +162,7 @@ export class NewsletterService { axiosHeaders ) toast.success('Informations du mois supprimées !') - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { @@ -196,7 +196,7 @@ export class NewsletterService { axiosHeaders ) toast.success('Nouveautés du mois enregistrés !') - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { @@ -246,7 +246,7 @@ export class NewsletterService { axiosHeaders ) toast.success('Nouveautés du mois supprimées !') - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { @@ -280,7 +280,7 @@ export class NewsletterService { axiosHeaders ) toast.success('Sondage enregistré !') - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { @@ -326,7 +326,7 @@ export class NewsletterService { axiosHeaders ) toast.success('Sondage supprimé !') - } catch (e: any) { + } catch (e) { if (e.response.status === 403) { toast.error("Accès refusé : vous n'avez pas les droits nécessaires") } else { diff --git a/src/setupTests.ts b/src/setupTests.ts deleted file mode 100644 index 8f2609b7b3e0e3897ab3bcaad13caf6876e48699..0000000000000000000000000000000000000000 --- a/src/setupTests.ts +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/src/styles/_toast.scss b/src/styles/_toast.scss deleted file mode 100644 index 9654eb81c1c93cc26ff6a5ffcab83c7a0f1e0d00..0000000000000000000000000000000000000000 --- a/src/styles/_toast.scss +++ /dev/null @@ -1,25 +0,0 @@ -@import 'config/colors'; - -.Toastify__toast { - background: #fafafa !important; -} -.Toastify__toast--success { - .toastBody { - color: #73a839; - } - .toastProgress { - background: #73a839 !important; - } -} - -.Toastify__toast--error { - .toastBody { - color: #c71c22; - } - .toastProgress { - background: #c71c22 !important; - } -} -.toastBody { - font-size: 1rem !important; -} diff --git a/src/styles/config/_layout.scss b/src/styles/config/_layout.scss deleted file mode 100644 index ea910ee76cb86683e19120a8d0770332157625ed..0000000000000000000000000000000000000000 --- a/src/styles/config/_layout.scss +++ /dev/null @@ -1,4 +0,0 @@ -$menu-width: 11.25rem; -$navbar-height: 3.5rem; -$navigator-height: 8rem; -$small-nav-height: 5.5rem; diff --git a/src/styles/config/_typography.scss b/src/styles/config/_typography.scss index b37644cf618bfd9645ff710b02f4634c548e698a..ab39ae631ff26b2d1b0aa7fe03ebbca082f4a0a8 100644 --- a/src/styles/config/_typography.scss +++ b/src/styles/config/_typography.scss @@ -87,55 +87,3 @@ $main-spacing: 4px; border-radius: 5px; padding: 0.3rem; } -@mixin customCheckBox($size) { - .checkbox { - cursor: pointer; - margin: 0.5rem 0; - display: flex; - align-items: center; - width: fit-content; - font-size: 0.9rem; - color: $text-grey; - input { - margin: 0.5rem 1rem 0.5rem 0.5rem; - appearance: none; - -moz-appearance: none; - -webkit-appearance: none; - width: $size; - height: $size; - min-width: $size; - min-height: $size; - position: relative; - border: solid 2px $gold; - background: black; - border-radius: 2px; - cursor: pointer; - } - } - .answerChecked { - input { - &:before, - &:after { - content: ''; - position: absolute; - display: inline-block; - background: $gold; - border-radius: 0.5rem; - } - &:before { - width: 3px; - height: 12px; - left: 10px; - top: 4px; - transform: rotate(41deg); - } - &:after { - width: 3px; - height: 6px; - left: 5px; - top: 8px; - transform: rotate(133deg); - } - } - } -} diff --git a/src/styles/index.scss b/src/styles/index.scss index 722b9ca974212378cf9ae5ed2bf7eb3bdb79f0ad..e634f95d9ecc2700c846a945c4bade28b3220ee8 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -1,8 +1,6 @@ @import 'config/breakpoints'; @import 'config/colors'; @import 'config/typography'; -@import 'config/layout'; -@import 'toast'; * { margin: 0; @@ -10,21 +8,44 @@ box-sizing: border-box; color: $text-grey; } -.title { - color: $gold; - font-weight: 600; - font-size: 1.3rem; - @include text-large(); + +#root { + display: flex; + background: $dark-bg; + height: 100vh; +} + +.wrapper { + flex: 1; + box-shadow: + 0px 5px 5px rgb(0 0 0 / 20%), + 0px 3px 14px rgb(0 0 0 / 12%), + 0px 8px 10px rgb(0 0 0 / 14%); + overflow-y: scroll; + + @media screen and (max-width: $width-tablet) { + padding-bottom: 5rem; + } } -.pageTitle { + +h1 { color: #fafafa; + @include text-large(); +} + +h3 { + margin: 1rem 0; + color: $gold; } -.MuiPagination-ul { + +li.MuiMenuItem-root { + color: white !important; +} + +.buttons { + margin-top: 1rem; + display: flex; justify-content: center; - li button { - color: white; - &.Mui-selected { - color: $gold; - } - } + gap: 1rem; + flex-wrap: wrap; } diff --git a/tsconfig.json b/tsconfig.json index a273b0cfc0e965c35524e3cd0d3574cbe1ad2d0d..fb1d76a6ef018480ce98e8b370813d294f09edaf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,7 @@ { "compilerOptions": { "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, @@ -18,9 +14,8 @@ "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx" + "jsx": "react-jsx", + "useUnknownInCatchVariables": false }, - "include": [ - "src" - ] + "include": ["**/*.ts", "**/*.tsx"] } diff --git a/yarn.lock b/yarn.lock index ef8cbce08a3a93a27bb9cbceecbe30908d1b9d5c..0f3ac92884ea2aa36a87da50657d2012bb161177 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@ampproject/remapping@^2.1.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" @@ -213,6 +218,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-module-imports@^7.16.7": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" @@ -286,11 +298,21 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.22.19": + version "7.22.19" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.19.tgz#2f34ab1e445f5b95e2e6edfe50ea2449e610583a" + integrity sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg== + "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" @@ -1177,13 +1199,20 @@ core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.18.3", "@babel/runtime@^7.22.15", "@babel/runtime@^7.22.6", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" @@ -1251,6 +1280,15 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" +"@babel/types@^7.22.15": + version "7.22.19" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" + integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.19" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1353,10 +1391,124 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== +"@emotion/babel-plugin@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" + integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/serialize" "^1.1.2" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" + integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== + dependencies: + "@emotion/memoize" "^0.8.1" + "@emotion/sheet" "^1.2.2" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + stylis "4.2.0" + +"@emotion/hash@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" + integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== + +"@emotion/is-prop-valid@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" + integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== + dependencies: + "@emotion/memoize" "^0.8.1" + +"@emotion/memoize@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" + integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== + +"@emotion/react@^11.11.1": + version "11.11.1" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" + integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.11.0" + "@emotion/cache" "^11.11.0" + "@emotion/serialize" "^1.1.2" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51" + integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA== + dependencies: + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" + csstype "^3.0.2" + +"@emotion/sheet@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" + integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== + +"@emotion/styled@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.0.tgz#26b75e1b5a1b7a629d7c0a8b708fbf5a9cdce346" + integrity sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.11.0" + "@emotion/is-prop-valid" "^1.2.1" + "@emotion/serialize" "^1.1.2" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" + "@emotion/utils" "^1.2.1" + +"@emotion/unitless@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" + integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== + +"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" + integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== + +"@emotion/utils@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" + integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== + +"@emotion/weak-memoize@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" + integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" + integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== "@eslint/eslintrc@^1.3.0": version "1.3.0" @@ -1373,6 +1525,53 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.49.0": + version "8.49.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" + integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== + +"@floating-ui/core@^1.4.2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.0.tgz#5c05c60d5ae2d05101c3021c1a2a350ddc027f8c" + integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg== + dependencies: + "@floating-ui/utils" "^0.1.3" + +"@floating-ui/dom@^1.5.1": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa" + integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA== + dependencies: + "@floating-ui/core" "^1.4.2" + "@floating-ui/utils" "^0.1.3" + +"@floating-ui/react-dom@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20" + integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== + dependencies: + "@floating-ui/dom" "^1.5.1" + +"@floating-ui/utils@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.3.tgz#6ee493102b45d796d69f1f472d4bf64e5244500a" + integrity sha512-uvnFKtPgzLnpzzTRfhDlvXX0kLYi9lDRQbcDmT8iXl71Rx+uwSuaUIQl3DNC7w5OweAQ7XQMDObML+KaYDQfng== + "@humanwhocodes/config-array@^0.10.4": version "0.10.4" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" @@ -1382,11 +1581,25 @@ debug "^4.1.1" minimatch "^3.0.4" +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + "@humanwhocodes/gitignore-to-minimatch@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" @@ -1595,17 +1808,6 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -1682,80 +1884,138 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@material-ui/core@^4.12.3": - version "4.12.4" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73" - integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.11.5" - "@material-ui/system" "^4.12.2" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.3" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.4" - hoist-non-react-statics "^3.3.2" - popper.js "1.16.1-lts" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - react-transition-group "^4.4.0" +"@mui/base@5.0.0-beta.15": + version "5.0.0-beta.15" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.15.tgz#76bebd377cc3b7fdc80924759a4100e5319ed0f9" + integrity sha512-Xtom3YSdi0iwYPtyVRFUEGoRwi6IHWixPwifDKaK+4PkEPtUWMU5YOIJfTsmC59ri+dFvA3oBNSiTPUGGrklZw== + dependencies: + "@babel/runtime" "^7.22.15" + "@floating-ui/react-dom" "^2.0.2" + "@mui/types" "^7.2.4" + "@mui/utils" "^5.14.9" + "@popperjs/core" "^2.11.8" + clsx "^2.0.0" + prop-types "^15.8.1" + +"@mui/core-downloads-tracker@^5.14.9": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.9.tgz#97a4e2decce1583983b4a0cded8bcb2be1b1cb31" + integrity sha512-JAU/R5hM3l2zP1Q4KnioDRhq5V3vZ4mmjEZ+TwARDb2xFhg3p59McacQuzkSu0sUHJnH9aJos36+hU5sPQBcFQ== + +"@mui/lab@^5.0.0-alpha.144": + version "5.0.0-alpha.144" + resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.144.tgz#88a04adfe6301acd6d38e6870511b7ea19372444" + integrity sha512-CS/mBxfX9eSsrvatYBNphYCSCM4tIAIb4jZ3LiX1vSZ32DjRlNi+2U56+ObnBaVTjMMYdegMsT38uxYHSVXszA== + dependencies: + "@babel/runtime" "^7.22.15" + "@mui/base" "5.0.0-beta.15" + "@mui/system" "^5.14.9" + "@mui/types" "^7.2.4" + "@mui/utils" "^5.14.9" + "@mui/x-tree-view" "6.0.0-alpha.1" + clsx "^2.0.0" + prop-types "^15.8.1" + +"@mui/material@^5.14.9": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.14.9.tgz#d536505a3728441cfe8003443f143ae87457767b" + integrity sha512-pbBy5kc5iUGXPxgbb+t+yEPvLK5nE3bPUb8WbAafJ8iZ40ZGui0xC4xiiIyzbVexzsLmyN7MaSo4LkxLmPKqUQ== + dependencies: + "@babel/runtime" "^7.22.15" + "@mui/base" "5.0.0-beta.15" + "@mui/core-downloads-tracker" "^5.14.9" + "@mui/system" "^5.14.9" + "@mui/types" "^7.2.4" + "@mui/utils" "^5.14.9" + "@types/react-transition-group" "^4.4.6" + clsx "^2.0.0" + csstype "^3.1.2" + prop-types "^15.8.1" + react-is "^18.2.0" + react-transition-group "^4.4.5" -"@material-ui/lab@^4.0.0-alpha.60": - version "4.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz#9bf8eb389c0c26c15e40933cc114d4ad85e3d978" - integrity sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg== +"@mui/private-theming@^5.14.9": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.14.9.tgz#085041c44cc28c25f3431a293339922ec3d9b5f8" + integrity sha512-0PzoUFqFXTXiNchhR7K4b7kZunasPOjx6Qf7AagCmfZDNASHedA0x6evHVhnST918x/AHY9xykYNKfB0Z4xMBg== dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.3" - clsx "^1.0.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@material-ui/styles@^4.11.5": - version "4.11.5" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb" - integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.8.0" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.3" - clsx "^1.0.4" - csstype "^2.5.2" - hoist-non-react-statics "^3.3.2" - jss "^10.5.1" - jss-plugin-camel-case "^10.5.1" - jss-plugin-default-unit "^10.5.1" - jss-plugin-global "^10.5.1" - jss-plugin-nested "^10.5.1" - jss-plugin-props-sort "^10.5.1" - jss-plugin-rule-value-function "^10.5.1" - jss-plugin-vendor-prefixer "^10.5.1" - prop-types "^15.7.2" + "@babel/runtime" "^7.22.15" + "@mui/utils" "^5.14.9" + prop-types "^15.8.1" -"@material-ui/system@^4.12.2": - version "4.12.2" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b" - integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw== +"@mui/styled-engine@^5.14.9": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.14.9.tgz#bc2121db1399bb84ea5390b40beac742b6be7023" + integrity sha512-LEQxLrW9oWvea33pge08+oyNeTz704jb6Nhe26xEJKojXWd34Rr327Zzx3dmo70AcS4h0b99vQjEpUzm6ASqUw== dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.3" - csstype "^2.5.2" - prop-types "^15.7.2" + "@babel/runtime" "^7.22.15" + "@emotion/cache" "^11.11.0" + csstype "^3.1.2" + prop-types "^15.8.1" + react "^18.2.0" + +"@mui/styles@^5.14.9": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.14.9.tgz#f02a435f349582dbca73847502ba0a44895aa3ab" + integrity sha512-pd308euoTj6t5bMnIS/FKNoPTzbZMk238FHnWfDIl0KLGw95Xrc6JPNCmrwfP1jCm++xXqcbSL11JGPf2OeQXA== + dependencies: + "@babel/runtime" "^7.22.15" + "@emotion/hash" "^0.9.1" + "@mui/private-theming" "^5.14.9" + "@mui/types" "^7.2.4" + "@mui/utils" "^5.14.9" + clsx "^2.0.0" + csstype "^3.1.2" + hoist-non-react-statics "^3.3.2" + jss "^10.10.0" + jss-plugin-camel-case "^10.10.0" + jss-plugin-default-unit "^10.10.0" + jss-plugin-global "^10.10.0" + jss-plugin-nested "^10.10.0" + jss-plugin-props-sort "^10.10.0" + jss-plugin-rule-value-function "^10.10.0" + jss-plugin-vendor-prefixer "^10.10.0" + prop-types "^15.8.1" -"@material-ui/types@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" - integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== +"@mui/system@^5.14.9": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.14.9.tgz#90a20473a85622ddabf5a2409de1980fad98f38d" + integrity sha512-Z00Wj590QXk5+SIxmxayBo7SWrao+y433LKGChneJxO4QcT/caSCeEWtyeoLs1Q8ys0zOzl2kkKee6n8TaKzhQ== + dependencies: + "@babel/runtime" "^7.22.15" + "@mui/private-theming" "^5.14.9" + "@mui/styled-engine" "^5.14.9" + "@mui/types" "^7.2.4" + "@mui/utils" "^5.14.9" + clsx "^2.0.0" + csstype "^3.1.2" + prop-types "^15.8.1" -"@material-ui/utils@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942" - integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg== +"@mui/types@^7.2.4": + version "7.2.4" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328" + integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA== + +"@mui/utils@^5.14.3", "@mui/utils@^5.14.9": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.9.tgz#eeefef88dbee687ac90e8972c63f0d41f19348a3" + integrity sha512-9ysB5e+RwS7ofn0n3nwAg1/3c81vBTmSvauD3EuK9LmqMzhmF//BFDaC44U4yITvB/0m1kWyDqg924Ll3VHCcg== dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" + "@babel/runtime" "^7.22.15" + prop-types "^15.8.1" + react-is "^18.2.0" + +"@mui/x-tree-view@6.0.0-alpha.1": + version "6.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/@mui/x-tree-view/-/x-tree-view-6.0.0-alpha.1.tgz#fe499f8c43c01d28aca95cfb17491746ffcc3080" + integrity sha512-JUG3HmBrmGEALbCFg1b+i7h726e1dWYZs4db3syO1j+Q++E3nbvE4Lehp5yGTFm+8esH0Tny50tuJaa4WX6VSA== + dependencies: + "@babel/runtime" "^7.22.6" + "@mui/utils" "^5.14.3" + "@types/react-transition-group" "^4.4.6" + clsx "^2.0.0" + prop-types "^15.8.1" + react-transition-group "^4.4.5" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1770,7 +2030,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -1778,6 +2038,18 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pkgr/utils@^2.3.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" + integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== + dependencies: + cross-spawn "^7.0.3" + fast-glob "^3.3.0" + is-glob "^4.0.3" + open "^9.1.0" + picocolors "^1.0.0" + tslib "^2.6.0" + "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.7" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz#58f8217ba70069cc6a73f5d7e05e85b458c150e2" @@ -1793,6 +2065,16 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@remix-run/router@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.8.0.tgz#e848d2f669f601544df15ce2a313955e4bf0bafc" + integrity sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg== + "@rollup/plugin-babel@^5.2.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" @@ -1967,50 +2249,6 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" -"@testing-library/dom@^7.28.1": - version "7.31.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" - integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^4.2.2" - chalk "^4.1.0" - dom-accessibility-api "^0.5.6" - lz-string "^1.4.4" - pretty-format "^26.6.2" - -"@testing-library/jest-dom@^5.11.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz#938302d7b8b483963a3ae821f1c0808f872245cd" - integrity sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA== - dependencies: - "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" - aria-query "^5.0.0" - chalk "^3.0.0" - css "^3.0.0" - css.escape "^1.5.1" - dom-accessibility-api "^0.5.6" - lodash "^4.17.15" - redent "^3.0.0" - -"@testing-library/react@^11.1.0": - version "11.2.7" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.7.tgz#b29e2e95c6765c815786c0bc1d5aed9cb2bf7818" - integrity sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^7.28.1" - -"@testing-library/user-event@^12.1.10": - version "12.8.3" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.8.3.tgz#1aa3ed4b9f79340a1e1836bc7f57c501e838704a" - integrity sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ== - dependencies: - "@babel/runtime" "^7.12.5" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2021,11 +2259,6 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== - "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.1.19" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" @@ -2161,11 +2394,6 @@ dependencies: "@types/node" "*" -"@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - "@types/html-minifier-terser@^6.0.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" @@ -2204,27 +2432,16 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*": - version "28.1.6" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.6.tgz#d6a9cdd38967d2d746861fb5be6b120e38284dd4" - integrity sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ== - dependencies: - jest-matcher-utils "^28.0.0" - pretty-format "^28.0.0" - -"@types/jest@^26.0.15": - version "26.0.24" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" - integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== - dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.12": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -2245,10 +2462,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw== -"@types/node@^12.0.0": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/node@^18.0.0": + version "18.17.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.15.tgz#31301a273b9ca7d568fe6d1c35ae52e0fb3f8d6a" + integrity sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA== "@types/parse-json@^4.0.0": version "4.0.0" @@ -2295,27 +2512,10 @@ "@types/draft-js" "*" "@types/react" "*" -"@types/react-router-dom@^5.1.8": - version "5.3.3" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - -"@types/react-router@*": - version "5.1.18" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.18.tgz#c8851884b60bc23733500d86c1266e1cfbbd9ef3" - integrity sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - -"@types/react-transition-group@^4.2.0": - version "4.4.5" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" - integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== +"@types/react-transition-group@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e" + integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew== dependencies: "@types/react" "*" @@ -2354,6 +2554,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/semver@^7.5.0": + version "7.5.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" + integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== + "@types/serve-index@^1.9.1": version "1.9.1" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" @@ -2381,13 +2586,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== -"@types/testing-library__jest-dom@^5.9.1": - version "5.14.5" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" - integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== - dependencies: - "@types/jest" "*" - "@types/trusted-types@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" @@ -2405,13 +2603,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== -"@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^16.0.0": version "16.0.4" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" @@ -2426,7 +2617,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.3.1", "@typescript-eslint/eslint-plugin@^5.5.0": +"@typescript-eslint/eslint-plugin@^5.5.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz#e27e38cffa4a61226327c874a7be965e9a861624" integrity sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew== @@ -2441,17 +2632,22 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@^4.0.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== +"@typescript-eslint/eslint-plugin@^6.1.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.6.0.tgz#19ba09aa34fd504696445100262e5a9e1b1d7024" + integrity sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA== dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.6.0" + "@typescript-eslint/type-utils" "6.6.0" + "@typescript-eslint/utils" "6.6.0" + "@typescript-eslint/visitor-keys" "6.6.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" "@typescript-eslint/experimental-utils@^5.0.0": version "5.32.0" @@ -2470,7 +2666,7 @@ "@typescript-eslint/typescript-estree" "5.33.0" debug "^4.3.4" -"@typescript-eslint/parser@^5.3.1", "@typescript-eslint/parser@^5.5.0": +"@typescript-eslint/parser@^5.5.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d" integrity sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A== @@ -2480,13 +2676,16 @@ "@typescript-eslint/typescript-estree" "5.32.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== +"@typescript-eslint/parser@^6.1.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.6.0.tgz#fe323a7b4eafb6d5ea82b96216561810394a739e" + integrity sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w== dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" + "@typescript-eslint/scope-manager" "6.6.0" + "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/typescript-estree" "6.6.0" + "@typescript-eslint/visitor-keys" "6.6.0" + debug "^4.3.4" "@typescript-eslint/scope-manager@5.32.0": version "5.32.0" @@ -2504,6 +2703,14 @@ "@typescript-eslint/types" "5.33.0" "@typescript-eslint/visitor-keys" "5.33.0" +"@typescript-eslint/scope-manager@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz#57105d4419d6de971f7d2c30a2ff4ac40003f61a" + integrity sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw== + dependencies: + "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/visitor-keys" "6.6.0" + "@typescript-eslint/type-utils@5.32.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz#45a14506fe3fb908600b4cef2f70778f7b5cdc79" @@ -2513,10 +2720,15 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== +"@typescript-eslint/type-utils@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.6.0.tgz#14f651d13b884915c4fca0d27adeb652a4499e86" + integrity sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg== + dependencies: + "@typescript-eslint/typescript-estree" "6.6.0" + "@typescript-eslint/utils" "6.6.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" "@typescript-eslint/types@5.32.0": version "5.32.0" @@ -2528,18 +2740,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.0.tgz#d41c584831805554b063791338b0220b613a275b" integrity sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw== -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" +"@typescript-eslint/types@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.6.0.tgz#95e7ea650a2b28bc5af5ea8907114a48f54618c2" + integrity sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg== "@typescript-eslint/typescript-estree@5.32.0": version "5.32.0" @@ -2567,6 +2771,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz#373c420d2e12c28220f4a83352280a04823a91b7" + integrity sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA== + dependencies: + "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/visitor-keys" "6.6.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/utils@5.32.0", "@typescript-eslint/utils@^5.13.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.32.0.tgz#eccb6b672b94516f1afc6508d05173c45924840c" @@ -2579,13 +2796,18 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== +"@typescript-eslint/utils@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.6.0.tgz#2d686c0f0786da6362d909e27a9de1c13ba2e7dc" + integrity sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw== dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.6.0" + "@typescript-eslint/types" "6.6.0" + "@typescript-eslint/typescript-estree" "6.6.0" + semver "^7.5.4" "@typescript-eslint/visitor-keys@5.32.0": version "5.32.0" @@ -2603,6 +2825,14 @@ "@typescript-eslint/types" "5.33.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz#1109088b4346c8b2446f3845db526374d9a3bafc" + integrity sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ== + dependencies: + "@typescript-eslint/types" "6.6.0" + eslint-visitor-keys "^3.4.1" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -2794,6 +3024,11 @@ acorn@^8.7.1, acorn@^8.8.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + address@^1.0.1, address@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9" @@ -2807,15 +3042,15 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -ag-grid-community@^27.1.0: - version "27.3.0" - resolved "https://registry.yarnpkg.com/ag-grid-community/-/ag-grid-community-27.3.0.tgz#b1e94a58026aaf2f0cd7920e35833325b5e762c7" - integrity sha512-R5oZMXEHXnOLrmhn91J8lR0bv6IAnRcU6maO+wKLMJxffRWaAYFAuw1jt7bdmcKCv8c65F6LEBx4ykSOALa9vA== +ag-grid-community@^30.0.0: + version "30.1.0" + resolved "https://registry.yarnpkg.com/ag-grid-community/-/ag-grid-community-30.1.0.tgz#50c532df2e6cc22596300b801651eca76459a189" + integrity sha512-D69e63CUALxfgLZSu1rXC8Xiyhu6+17zxzTV8cWsyvt5GeSDv2frQ3BKOqGZbUfVoOCLv2SQoHVTTqw8OjxavA== -ag-grid-react@^27.1.0: - version "27.3.0" - resolved "https://registry.yarnpkg.com/ag-grid-react/-/ag-grid-react-27.3.0.tgz#fe06647653f8b0b349b8e613aab8ea2e07915562" - integrity sha512-2bs9YfJ/shvBZQLLjny4NFvht+ic6VtpTPO0r3bHHOhlL3Fjx2rGvS6AHSwfvu+kJacHCta30PjaEbX8T3UDyw== +ag-grid-react@^30.0.0: + version "30.1.0" + resolved "https://registry.yarnpkg.com/ag-grid-react/-/ag-grid-react-30.1.0.tgz#9b45b6d9115a0d8a278c112ab1fd2a9d378f26a2" + integrity sha512-qnJAWe2yN4fjnFYiyzQu6S3EX0rZVvrZbkTEXVEy55pufTkcmimvCtKSV1aVxGg+TeZFJBw0gkXfXW4aMwTh4Q== dependencies: prop-types "^15.8.1" @@ -2887,7 +3122,7 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -2954,11 +3189,6 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" -aria-query@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" - integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -3041,11 +3271,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - autoprefixer@^10.4.7: version "10.4.8" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" @@ -3063,12 +3288,14 @@ axe-core@^4.4.3: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.0.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" + integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" axobject-query@^2.2.0: version "2.2.0" @@ -3262,6 +3489,11 @@ bfj@^7.0.2: hoopy "^0.1.4" tryer "^1.0.1" +big-integer@^1.6.16, big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3310,6 +3542,13 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3332,6 +3571,20 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +broadcast-channel@^3.4.1: + version "3.7.0" + resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" + integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== + dependencies: + "@babel/runtime" "^7.7.2" + detect-node "^2.1.0" + js-sha3 "0.8.0" + microseconds "0.2.0" + nano-time "1.0.0" + oblivious-set "1.0.0" + rimraf "3.0.2" + unload "2.2.0" + browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" @@ -3374,6 +3627,13 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +bundle-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== + dependencies: + run-applescript "^5.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -3430,15 +3690,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001366: - version "1.0.30001367" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz#2b97fe472e8fa29c78c5970615d7cd2ee414108a" - integrity sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw== - -caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: - version "1.0.30001374" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz#3dab138e3f5485ba2e74bd13eca7fe1037ce6f57" - integrity sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001366, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: + version "1.0.30001532" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz" + integrity sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" @@ -3465,14 +3720,6 @@ chalk@^2.0.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3547,11 +3794,16 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -clsx@^1.0.4, clsx@^1.1.1: +clsx@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +clsx@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" + integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3667,7 +3919,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -confusing-browser-globals@^1.0.10, confusing-browser-globals@^1.0.11: +confusing-browser-globals@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== @@ -3696,6 +3948,11 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.5.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -3892,20 +4149,6 @@ css-what@^6.0.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - cssdb@^6.6.3: version "6.6.3" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-6.6.3.tgz#1f331a2fab30c18d9f087301e6122a878bb1e505" @@ -3989,16 +4232,16 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^2.5.2: - version "2.6.20" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" - integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== - csstype@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== +csstype@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" @@ -4025,7 +4268,7 @@ debug@2.6.9, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4044,11 +4287,6 @@ decimal.js@^10.2.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -4064,6 +4302,24 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== + dependencies: + bplist-parser "^0.2.0" + untildify "^4.0.0" + +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== + dependencies: + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" + default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -4076,6 +4332,11 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -4114,7 +4375,7 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detect-node@^2.0.4: +detect-node@^2.0.4, detect-node@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== @@ -4141,21 +4402,11 @@ didyoumean@^1.2.2: resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - diff-sequences@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4194,11 +4445,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.6: - version "0.5.14" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" - integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== - dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -4497,17 +4743,10 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-config-react-app@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e" - integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A== - dependencies: - confusing-browser-globals "^1.0.10" +eslint-config-prettier@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== eslint-config-react-app@^7.0.1: version "7.0.1" @@ -4553,7 +4792,7 @@ eslint-plugin-flowtype@^8.0.3: lodash "^4.17.21" string-natural-compare "^3.0.1" -eslint-plugin-import@^2.23.4, eslint-plugin-import@^2.25.3: +eslint-plugin-import@^2.25.3: version "2.26.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== @@ -4572,13 +4811,6 @@ eslint-plugin-import@^2.23.4, eslint-plugin-import@^2.25.3: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-jest@^24.4.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz#206ac0833841e59e375170b15f8d0955219c4889" - integrity sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA== - dependencies: - "@typescript-eslint/experimental-utils" "^4.0.1" - eslint-plugin-jest@^25.3.0: version "25.7.0" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" @@ -4605,12 +4837,13 @@ eslint-plugin-jsx-a11y@^6.5.1: minimatch "^3.1.2" semver "^6.3.0" -eslint-plugin-prettier@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== +eslint-plugin-prettier@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a" + integrity sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w== dependencies: prettier-linter-helpers "^1.0.0" + synckit "^0.8.5" eslint-plugin-react-hooks@^4.2.0, eslint-plugin-react-hooks@^4.3.0: version "4.6.0" @@ -4660,6 +4893,14 @@ eslint-scope@^7.0.0, eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" @@ -4677,6 +4918,11 @@ eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + eslint-webpack-plugin@^3.1.1: version "3.2.0" resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" @@ -4688,7 +4934,7 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@^8.21.0, eslint@^8.3.0, eslint@^8.7.0: +eslint@^8.3.0, eslint@^8.7.0: version "8.21.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== @@ -4733,6 +4979,49 @@ eslint@^8.21.0, eslint@^8.3.0, eslint@^8.7.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^8.49.0: + version "8.49.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" + integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.49.0" + "@humanwhocodes/config-array" "^0.11.11" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + espree@^9.0.0, espree@^9.3.2, espree@^9.3.3: version "9.3.3" resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" @@ -4742,6 +5031,15 @@ espree@^9.0.0, espree@^9.3.2, espree@^9.3.3: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -4754,6 +5052,13 @@ esquery@^1.4.0: dependencies: estraverse "^5.1.0" +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -4811,6 +5116,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4884,6 +5204,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4990,6 +5321,11 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -5033,11 +5369,16 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== -follow-redirects@^1.0.0, follow-redirects@^1.14.0: +follow-redirects@^1.0.0: version "1.15.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.2" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" @@ -5066,6 +5407,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -5169,7 +5519,7 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -5241,7 +5591,14 @@ globals@^13.15.0: dependencies: type-fest "^0.20.2" -globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: +globals@^13.19.0: + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -5263,6 +5620,11 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" @@ -5333,19 +5695,7 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -5496,6 +5846,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" @@ -5537,6 +5892,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + immer@^9.0.7: version "9.0.15" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" @@ -5586,7 +5946,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5671,6 +6031,11 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -5698,6 +6063,13 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -5725,6 +6097,11 @@ is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" @@ -5765,6 +6142,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -5798,11 +6180,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -5947,16 +6324,6 @@ jest-config@^27.5.1: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^26.0.0: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - jest-diff@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" @@ -5967,16 +6334,6 @@ jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-diff@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" - integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== - dependencies: - chalk "^4.0.0" - diff-sequences "^28.1.1" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" - jest-docblock@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" @@ -6020,21 +6377,11 @@ jest-environment-node@^27.5.1: jest-mock "^27.5.1" jest-util "^27.5.1" -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - jest-get-type@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== - jest-haste-map@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" @@ -6096,16 +6443,6 @@ jest-matcher-utils@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^28.0.0: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" - integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== - dependencies: - chalk "^4.0.0" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" - jest-message-util@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" @@ -6387,6 +6724,11 @@ jest@^27.4.3: import-local "^3.0.2" jest-cli "^27.5.1" +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6501,70 +6843,70 @@ jsonpointer@^5.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -jss-plugin-camel-case@^10.5.1: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7" - integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww== +jss-plugin-camel-case@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c" + integrity sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.9.0" + jss "10.10.0" -jss-plugin-default-unit@^10.5.1: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991" - integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w== +jss-plugin-default-unit@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz#db3925cf6a07f8e1dd459549d9c8aadff9804293" + integrity sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" -jss-plugin-global@^10.5.1: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f" - integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ== +jss-plugin-global@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz#1c55d3c35821fab67a538a38918292fc9c567efd" + integrity sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" -jss-plugin-nested@^10.5.1: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3" - integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA== +jss-plugin-nested@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz#db872ed8925688806e77f1fc87f6e62264513219" + integrity sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.5.1: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d" - integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw== +jss-plugin-props-sort@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz#67f4dd4c70830c126f4ec49b4b37ccddb680a5d7" + integrity sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" -jss-plugin-rule-value-function@^10.5.1: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67" - integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg== +jss-plugin-rule-value-function@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz#7d99e3229e78a3712f78ba50ab342e881d26a24b" + integrity sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.10.0" tiny-warning "^1.0.2" -jss-plugin-vendor-prefixer@^10.5.1: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a" - integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA== +jss-plugin-vendor-prefixer@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz#c01428ef5a89f2b128ec0af87a314d0c767931c7" + integrity sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg== dependencies: "@babel/runtime" "^7.3.1" css-vendor "^2.0.8" - jss "10.9.0" + jss "10.10.0" -jss@10.9.0, jss@^10.5.1: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b" - integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw== +jss@10.10.0, jss@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.10.0.tgz#a75cc85b0108c7ac8c7b7d296c520a3e4fbc6ccc" + integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== dependencies: "@babel/runtime" "^7.3.1" csstype "^3.0.2" @@ -6718,7 +7060,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6736,7 +7078,7 @@ loglevel@^1.4.1: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -6762,11 +7104,6 @@ luxon@^3.0.1: resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.0.1.tgz#6901111d10ad06fd267ad4e4128a84bef8a77299" integrity sha512-hF3kv0e5gwHQZKz4wtm4c+inDtyc7elkanAsBq+fundaCdUBNJB1dHEGUZIM6SfSBUlbVFduPwEtNjFK8wLtcw== -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== - magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -6788,6 +7125,14 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +match-sorter@^6.0.2: + version "6.3.1" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" + integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== + dependencies: + "@babel/runtime" "^7.12.5" + remove-accents "0.4.2" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -6838,6 +7183,11 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +microseconds@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" + integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== + mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -6860,18 +7210,10 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== mini-css-extract-plugin@^2.4.5: version "2.6.1" @@ -6892,7 +7234,7 @@ minimatch@3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -6941,6 +7283,13 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" +nano-time@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" + integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA== + dependencies: + big-integer "^1.6.16" + nanoid@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" @@ -7013,6 +7362,13 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -7107,6 +7463,11 @@ object.values@^1.1.0, object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" +oblivious-set@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" + integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -7138,6 +7499,13 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^8.0.9, open@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" @@ -7147,6 +7515,16 @@ open@^8.0.9, open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +open@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== + dependencies: + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^2.2.0" + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -7171,6 +7549,18 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -7301,6 +7691,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -7311,13 +7706,6 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -7367,11 +7755,6 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -popper.js@1.16.1-lts: - version "1.16.1-lts" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" - integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== - postcss-attribute-case-insensitive@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" @@ -7959,11 +8342,16 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.5.1, prettier@^2.7.1: +prettier@^2.5.1: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" @@ -7985,16 +8373,6 @@ pretty-format@^23.0.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -8004,7 +8382,7 @@ pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.0.0, pretty-format@^28.1.3: +pretty-format@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== @@ -8058,6 +8436,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" @@ -8186,54 +8569,49 @@ react-error-overlay@^6.0.11: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1: +react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^18.0.0: +react-is@^18.0.0, react-is@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-query@^3.39.3: + version "3.39.3" + resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.3.tgz#4cea7127c6c26bdea2de5fb63e51044330b03f35" + integrity sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g== + dependencies: + "@babel/runtime" "^7.5.5" + broadcast-channel "^3.4.1" + match-sorter "^6.0.2" + react-refresh@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-router-dom@^5.2.0: - version "5.3.3" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.3.tgz#8779fc28e6691d07afcaf98406d3812fe6f11199" - integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== +react-router-dom@^6.0.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.15.0.tgz#6da7db61e56797266fbbef0d5e324d6ac443ee40" + integrity sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ== dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.3" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" + "@remix-run/router" "1.8.0" + react-router "6.15.0" -react-router@5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.3.tgz#8e3841f4089e728cf82a429d92cdcaa5e4a3a288" - integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" +react-router@6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.15.0.tgz#bf2cb5a4a7ed57f074d4ea88db0d95033f39cac8" + integrity sha512-NIytlzvzLwJkCQj2HLefmeakxxWHWAP+02EGqWEZy+DgfHHKQMUoBBjUQLOtFInBMhWtb3hiUy6MfFgwLjXhqg== + dependencies: + "@remix-run/router" "1.8.0" react-scripts@^5.0.1: version "5.0.1" @@ -8290,17 +8668,17 @@ react-scripts@^5.0.1: optionalDependencies: fsevents "^2.3.2" -react-toastify@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-7.0.4.tgz#7d0b743f2b96f65754264ca6eae31911a82378db" - integrity sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ== +react-toastify@^9.0.0: + version "9.1.3" + resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.3.tgz#1e798d260d606f50e0fab5ee31daaae1d628c5ff" + integrity sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg== dependencies: clsx "^1.1.1" -react-transition-group@^4.4.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" - integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" @@ -8315,6 +8693,13 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" @@ -8358,14 +8743,6 @@ recursive-readdir@^2.2.2: dependencies: minimatch "3.0.4" -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - regenerate-unicode-properties@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" @@ -8383,6 +8760,11 @@ regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regenerator-transform@^0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" @@ -8438,6 +8820,11 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== +remove-accents@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" + integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== + renderkid@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" @@ -8486,11 +8873,6 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - resolve-url-loader@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" @@ -8535,7 +8917,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8559,6 +8941,13 @@ rollup@^2.43.1: optionalDependencies: fsevents "~2.3.2" +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8689,6 +9078,13 @@ semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -8786,7 +9182,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -8834,14 +9230,6 @@ source-map-loader@^3.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.1" -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@^0.5.6, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -8855,6 +9243,11 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + source-map@^0.7.3: version "0.7.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" @@ -9053,12 +9446,10 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-indent@^3.0.0: +strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" @@ -9078,6 +9469,11 @@ stylehacks@^5.1.0: browserslist "^4.16.6" postcss-selector-parser "^6.0.4" +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -9159,6 +9555,14 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" + tailwindcss@^3.0.2: version "3.1.8" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.8.tgz#4f8520550d67a835d32f2f4021580f9fddb7b741" @@ -9265,16 +9669,16 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tiny-invariant@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" - integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== - -tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: +tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9330,6 +9734,11 @@ tryer@^1.0.1: resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" @@ -9350,6 +9759,11 @@ tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.5.0, tslib@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -9471,6 +9885,14 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unload@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" + integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== + dependencies: + "@babel/runtime" "^7.6.2" + detect-node "^2.0.4" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -9481,6 +9903,11 @@ unquote@~1.1.1: resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -9545,11 +9972,6 @@ v8-to-istanbul@^8.1.0: convert-source-map "^1.6.0" source-map "^0.7.3" -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -9604,10 +10026,10 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-vitals@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-1.1.2.tgz#06535308168986096239aa84716e68b4c6ae6d1c" - integrity sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig== +web-vitals@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-3.4.0.tgz#45ed33a3a2e029dc38d36547eb5d71d1c7e2552d" + integrity sha512-n9fZ5/bG1oeDkyxLWyep0eahrNcPDF6bFqoyispt7xkW0xhDzpUBTgyDKqWDi1twT0MgH4HvvqzpUyh0ZxZV4A== webidl-conversions@^3.0.0: version "3.0.1"