diff --git a/.eslintrc b/.eslintrc index 316d5e03..9ad7912d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -19,7 +19,7 @@ "expect": true, "sinon": true }, - "parser": "babel-eslint", + "parser": "@babel/eslint-parser", "plugins": [ "react", "jsx-a11y", diff --git a/.gitignore b/.gitignore index 67045665..829fc0e0 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,4 @@ dist # TernJS port file .tern-port +.vercel diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..23fd35f0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": true +} \ No newline at end of file diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 67105c53..00000000 --- a/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,16 +0,0 @@ -## DESCRIPTION - -Solución al reto: - -Nombre: -Usuario Platzi: - -## Reto: - -- [ ] Primer problema -- [ ] Segundo problema -- [ ] Tercer problema -- [ ] Cuarto Problema -- [ ] Quinto Problema -- [ ] Sexto Problema -- [ ] Septimo Problema diff --git a/README.md b/README.md index b0c56618..45f731da 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,16 @@ -# react-eth-challenge +## DESCRIPTION -## React Curriculum vitae +Solución al reto: https://react-eth-challenge-weld.vercel.app/ -Crear tu curriculum vitae en React, analiza la estructura propuesta e inspirate para mostrar tu información. +Nombre: Candela Bramucci +Usuario Platzi: Bramuccci -![react-cv](https://github.com/gndx/react-eth-challenge/blob/440befcbc257b886015bd050666a21a3bec6c244/screenshot.png) +## Reto: -### Retos - -1. [Crear los componentes del proyecto](https://github.com/gndx/react-eth-challenge/issues/1) -2. [Añadir estilos](https://github.com/gndx/react-eth-challenge/issues/2) -3. [Crear función getData.js](https://github.com/gndx/react-eth-challenge/issues/3) -4. [Integrar API](https://github.com/gndx/react-eth-challenge/issues/4) -5. [Personalizar API](https://github.com/gndx/react-eth-challenge/issues/5) -6. [Documentar](https://github.com/gndx/react-eth-challenge/issues/6) -7. [Deploy](https://github.com/gndx/react-eth-challenge/issues/7) - -### Instalación - -``` -npm install -``` - -### Ejecución - -``` -npm run start -``` - -### Server - -``` -npm run server -``` - -### Compilar - -``` -npm run build -``` - -### Pruebas Unitarias - -``` -npm run test -``` - -### ESlint - -``` -npm run lint -``` - -### Enviar solución de reto - -Debes de crear un "Fork" de este proyecto, revolver los problemas y crear un Pull Request hacia tu repositorio. - -### Contribuir - -Si alguien quiere agregar o mejorar algo, lo invito a colaborar directamente en este repositorio: [react-eth-challenge](https://github.com/gndx/react-eth-challenge/) - -### Licencia - -frontend se lanza bajo la licencia [MIT](https://opensource.org/licenses/MIT). +- ☑ Primer problema - Componentes creados en "src/components" +- ☑ Segundo problema - Estilos agregados con Sass +- ☑ Tercer problema - Obteniendo data en global context +- ☑ Cuarto Problema - Usando fake API +- ☑ Quinto Problema - Añadiendo datos personales +- ☑ Sexto Problema +- ☑ Septimo Problema diff --git a/data.json b/data.json deleted file mode 100644 index 94dbaad5..00000000 --- a/data.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "data": { - "name": "Melissa Walsh", - "profession": "FrontEnd Developer", - "address": "Bogotá, Colombia.", - "email": "melissa@example.com", - "website": "https://example.com", - "phone": "3042034240", - "avatar": "https://arepa.s3.amazonaws.com/melissa.jpg", - "Profile": "Ignore the squirrels, you'll never catch them anyway hack, for floof tum, tickle bum, jellybean footies curly toes climb leg roll over and sun my belly, ", - "certificate": [ - { - "date": "Jan 2021", - "description": "Hack up furballs try to jump onto window and fall while scratching at wall. ", - "institution": "Platzi", - "name": "FrontEnd Developer" - }, - { - "date": "Jan 2021", - "description": "Scratch at the door then walk away wack the mini furry mouse", - "institution": "Platzi", - "name": "Backend Developer" - } - ], - "Academic": [ - { - "degree": "Atomic Master", - "description": " I’m so hungry i’m so hungry but ew not for that pelt around the house and up and down stairs chasing phantoms", - "endDate": "Jan 2017", - "institution": "MIT", - "startDate": "Jan 2018" - }, - { - "degree": "Space Engineering", - "description": "Meow in empty rooms. Find empty spot in cupboard and sleep all day check cat door for ambush 10 times before coming in for hack. ", - "endDate": "Decenber 2015", - "institution": "Harvard", - "startDate": "Jan 2017" - } - ], - "experience": [ - { - "company": "PugStar", - "endDate": "Present", - "jobDescription": "scratch the furniture. Good now the other hand, too lay on arms while you're using the keyboard.", - "jobTitle": "Frontend", - "startDate": "Jan 2020" - }, - { - "company": "CatStore", - "endDate": "Jan 2016", - "jobDescription": "Meow in empty rooms lick left leg for ninety minutes, still dirty.", - "jobTitle": "Backend", - "startDate": "Sept 2019" - } - ], - "skills": [ - { - "name": "HTML5", - "percentage": "75%" - }, - { - "name": "CSS", - "percentage": "25%" - }, - { - "name": "JavaScript", - "percentage": "55%" - }, - { - "name": "React", - "percentage": "90%" - } - ], - "interest": [ - "javascript", - "develop", - "backend", - "frontend" - ], - "languages": [ - { - "name": "Spanish", - "percentage": "90%" - }, - { - "name": "English", - "percentage": "50%" - } - ], - "social": [ - { - "name": "facebook", - "url": "https://facebook.com/" - }, - { - "name": "twitter", - "url": "https://twitter.com/" - }, - { - "name": "github", - "url": "https://github.com/" - }, - { - "name": "linkedin", - "url": "https://www.linkedin.com/" - } - ] - } -} \ No newline at end of file diff --git a/db.json b/db.json new file mode 100644 index 00000000..adf38c59 --- /dev/null +++ b/db.json @@ -0,0 +1,99 @@ +{ + "data": { + "name": "Candela Bramucci", + "profession": "FrontEnd Developer", + "address": "Buenos Aires, Argentina.", + "email": "candelabramucci05@gmail.com", + "user": "@bramuccci", + "website": "bramuccci.example", + "phone": "+54 1113-9863", + "avatar": "https://i.imgur.com/N7uYz3F.jpg", + "background": "https://i.imgur.com/awDr11K.jpg", + "Profile": "I've been wondering to see what the web has to show me. Now I'm making it, taking it to the next level.", + "Academic": [ + { + "degree": "Atomic Master", + "endDate": "Jan 2017", + "institution": "MIT", + "startDate": "Jan 2018" + }, + { + "degree": "Space Engineering", + "endDate": "December 2015", + "institution": "Harvard", + "startDate": "Jan 2017" + }, + { + "degree": "Computer Science", + "endDate": "October 2017", + "institution": "Harvard", + "startDate": "Jan 2019" + } + ], + "experience": [ + { + "company": "PugStar", + "endDate": "Present", + "jobDescription": "scratch the furniture. Good now the other hand, too lay on arms while you're using the keyboard.", + "jobTitle": "Frontend", + "startDate": "Jan 2020" + }, + { + "company": "CatStore", + "endDate": "Jan 2016", + "jobDescription": "Meow in empty rooms lick left leg for ninety minutes, still dirty.", + "jobTitle": "Backend", + "startDate": "Sept 2019" + } + ], + "skills": [ + { + "name": "HTML5", + "description": "Solid bases for solid pages" + }, + { + "name": "Sass", + "description": "Applying beauty to the web" + }, + { + "name": "JavaScript", + "description": "Making ideas come true" + }, + { + "name": "React", + "description": "Taking control about everything" + }, + { + "name": "webpack", + "description": "Putting all together" + } + ], + "interest": [ + "Making frontend development with JavaScript and React", + "Participating in company activities", + "Taking a look in good design" + ], + "languages": [ + "Spanish", + "English" + ], + "social": [ + { + "name": "twitter", + "url": "https://twitter.com/bramuccci" + }, + { + "name": "github", + "url": "https://github.com/bramuccci" + }, + { + "name": "platzi", + "url": "https://platzi.com/p/bramuccci/" + }, + { + "name": "frontend mentor", + "url": "https://www.frontendmentor.io/profile/bramuccci" + } + ] + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 75c4a203..535ee7eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "@babel/core": "7.18.6", + "@babel/eslint-parser": "^7.18.2", "@babel/preset-env": "7.18.6", "@babel/preset-react": "7.18.6", "babel-loader": "8.2.5", @@ -25,7 +26,6 @@ "webpack-dev-server": "4.9.3" }, "devDependencies": { - "babel-eslint": "10.1.0", "css-loader": "6.7.1", "eslint": "8.19.0", "eslint-config-airbnb": "19.0.4", @@ -40,6 +40,8 @@ "json-server": "^0.17.0", "mini-css-extract-plugin": "2.6.1", "prettier": "2.7.1", + "sass": "^1.53.0", + "sass-loader": "^13.0.2", "style-loader": "3.3.1", "stylus": "0.58.1", "stylus-loader": "7.0.0" @@ -105,6 +107,43 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/eslint-parser": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz", + "integrity": "sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A==", + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/@babel/generator": { "version": "7.18.7", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", @@ -1697,7 +1736,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1716,14 +1754,12 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.16.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -1738,7 +1774,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -1750,7 +1785,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -1762,7 +1796,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -1774,7 +1807,6 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -1787,8 +1819,7 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -3273,7 +3304,6 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, "peer": true, "bin": { "acorn": "bin/acorn" @@ -3286,7 +3316,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -3571,27 +3600,6 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, "node_modules/babel-jest": { "version": "28.1.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.2.tgz", @@ -4153,7 +4161,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -4807,8 +4814,7 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.2.2", @@ -4936,7 +4942,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5385,7 +5390,6 @@ "version": "8.19.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", - "dev": true, "dependencies": { "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", @@ -5721,7 +5725,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -5734,7 +5737,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -5748,29 +5750,18 @@ "eslint": ">=5" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, "engines": { "node": ">=10" } }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -5784,14 +5775,12 @@ "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5807,7 +5796,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -5818,14 +5806,12 @@ "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -5837,7 +5823,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -5846,7 +5831,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -5858,7 +5842,6 @@ "version": "13.16.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -5873,7 +5856,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -5882,7 +5864,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -5894,7 +5875,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -5907,7 +5887,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -5924,7 +5903,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -5933,7 +5911,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -5945,7 +5922,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -5957,7 +5933,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -5969,7 +5944,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -5981,7 +5955,6 @@ "version": "9.3.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, "dependencies": { "acorn": "^8.7.1", "acorn-jsx": "^5.3.2", @@ -5995,7 +5968,6 @@ "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -6007,7 +5979,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -6029,7 +6000,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -6306,8 +6276,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fastest-levenshtein": { "version": "1.0.12", @@ -6347,7 +6316,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -6428,7 +6396,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -6440,8 +6407,7 @@ "node_modules/flatted": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" }, "node_modules/follow-redirects": { "version": "1.15.1", @@ -6526,8 +6492,7 @@ "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "node_modules/functions-have-names": { "version": "1.2.3", @@ -7081,16 +7046,20 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, "engines": { "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7133,7 +7102,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -9395,8 +9363,7 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json5": { "version": "2.2.1", @@ -9570,8 +9537,7 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -9953,8 +9919,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/nearley": { "version": "2.20.1", @@ -10329,7 +10294,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -11094,7 +11058,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, "engines": { "node": ">=8" }, @@ -11328,7 +11291,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -11433,6 +11395,61 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sass": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", + "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -12274,8 +12291,7 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/throat": { "version": "6.0.1", @@ -12689,8 +12705,7 @@ "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "node_modules/v8-to-istanbul": { "version": "9.0.1", @@ -13190,7 +13205,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -13360,6 +13374,32 @@ "semver": "^6.3.0" } }, + "@babel/eslint-parser": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz", + "integrity": "sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A==", + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, "@babel/generator": { "version": "7.18.7", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", @@ -14429,7 +14469,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -14445,14 +14484,12 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "globals": { "version": "13.16.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -14461,7 +14498,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -14469,14 +14505,12 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, @@ -14484,7 +14518,6 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -14494,8 +14527,7 @@ "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -15706,14 +15738,12 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, "peer": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "requires": {} }, "ajv": { @@ -15917,20 +15947,6 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, "babel-jest": { "version": "28.1.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.2.tgz", @@ -16354,8 +16370,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { "version": "5.3.1", @@ -16838,8 +16853,7 @@ "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.2.2", @@ -16933,7 +16947,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -17284,7 +17297,6 @@ "version": "8.19.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", - "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", @@ -17327,7 +17339,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -17335,14 +17346,12 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17352,7 +17361,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -17360,26 +17368,22 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "requires": { "is-glob": "^4.0.3" } @@ -17388,7 +17392,6 @@ "version": "13.16.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -17396,14 +17399,12 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -17412,7 +17413,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -17422,7 +17422,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -17435,20 +17434,17 @@ "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -17457,7 +17453,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "requires": { "prelude-ls": "^1.2.1" } @@ -17465,8 +17460,7 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, @@ -17684,7 +17678,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -17694,30 +17687,19 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } } }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" }, "espree": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, "requires": { "acorn": "^8.7.1", "acorn-jsx": "^5.3.2", @@ -17727,14 +17709,12 @@ "acorn": { "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" }, "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" } } }, @@ -17748,7 +17728,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "requires": { "estraverse": "^5.1.0" } @@ -17963,8 +17942,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fastest-levenshtein": { "version": "1.0.12", @@ -18001,7 +17979,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "requires": { "flat-cache": "^3.0.4" } @@ -18066,7 +18043,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -18075,8 +18051,7 @@ "flatted": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" }, "follow-redirects": { "version": "1.15.1", @@ -18128,8 +18103,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "functions-have-names": { "version": "1.2.3", @@ -18522,14 +18496,18 @@ "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", "dev": true }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -18553,8 +18531,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "inflight": { "version": "1.0.6", @@ -20219,8 +20196,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json5": { "version": "2.2.1", @@ -20358,8 +20334,7 @@ "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "loose-envify": { "version": "1.4.0", @@ -20651,8 +20626,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "nearley": { "version": "2.20.1", @@ -20920,7 +20894,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -21502,8 +21475,7 @@ "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "regexpu-core": { "version": "5.1.0", @@ -21675,8 +21647,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "resolve.exports": { "version": "1.1.0", @@ -21745,6 +21716,27 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sass": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", + "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -22384,8 +22376,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "throat": { "version": "6.0.1", @@ -22684,8 +22675,7 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8-to-istanbul": { "version": "9.0.1", @@ -23023,8 +23013,7 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { "version": "7.0.0", diff --git a/package.json b/package.json index d56de193..be91ac7a 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "build": "webpack --mode production", "start": "webpack-dev-server --open --mode development", - "server": "json-server data.json", + "server": "json-server db.json", "format": "prettier --write '{*.js,src/**/*.{js,jsx}}'", "lint": "eslint src/ --fix", "test": "jest" @@ -19,6 +19,7 @@ "license": "MIT", "dependencies": { "@babel/core": "7.18.6", + "@babel/eslint-parser": "^7.18.2", "@babel/preset-env": "7.18.6", "@babel/preset-react": "7.18.6", "babel-loader": "8.2.5", @@ -34,7 +35,6 @@ "webpack-dev-server": "4.9.3" }, "devDependencies": { - "babel-eslint": "10.1.0", "css-loader": "6.7.1", "eslint": "8.19.0", "eslint-config-airbnb": "19.0.4", @@ -49,6 +49,8 @@ "json-server": "^0.17.0", "mini-css-extract-plugin": "2.6.1", "prettier": "2.7.1", + "sass": "^1.53.0", + "sass-loader": "^13.0.2", "style-loader": "3.3.1", "stylus": "0.58.1", "stylus-loader": "7.0.0" @@ -62,4 +64,4 @@ "/src/__test__/setupTest.js" ] } -} +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 00000000..113373ab Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html index b76b4f47..eb46a342 100644 --- a/public/index.html +++ b/public/index.html @@ -1,10 +1,13 @@ - - - - React Base - - -
- - + + + + + + Bramuccci - CV + + + +
+ + \ No newline at end of file diff --git a/src/__test__/components/Profile.test.js b/src/__test__/components/Profile.test.js deleted file mode 100644 index f71ed22b..00000000 --- a/src/__test__/components/Profile.test.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import { mount } from 'enzyme'; -import Profile from '../../components/Profile'; - -describe('', () => { - const profile = mount(); - - test('Profile render', () => { - expect(profile.length).toEqual(1); - }); - - test('Profile title', () => { - expect(profile.find('.Profile-title').length).toEqual(1); - }); - - test('Profile have a description', () => { - expect(profile.find('.Profile-desc').length).toEqual(1); - }); - -}); diff --git a/src/assets/fonts/montserrat-v24-latin-200.eot b/src/assets/fonts/montserrat-v24-latin-200.eot new file mode 100644 index 00000000..7d5f1215 Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-200.eot differ diff --git a/src/assets/fonts/montserrat-v24-latin-200.svg b/src/assets/fonts/montserrat-v24-latin-200.svg new file mode 100644 index 00000000..4b1a28c4 --- /dev/null +++ b/src/assets/fonts/montserrat-v24-latin-200.svg @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/fonts/montserrat-v24-latin-200.ttf b/src/assets/fonts/montserrat-v24-latin-200.ttf new file mode 100644 index 00000000..d11e728c Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-200.ttf differ diff --git a/src/assets/fonts/montserrat-v24-latin-200.woff b/src/assets/fonts/montserrat-v24-latin-200.woff new file mode 100644 index 00000000..1ed016b5 Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-200.woff differ diff --git a/src/assets/fonts/montserrat-v24-latin-200.woff2 b/src/assets/fonts/montserrat-v24-latin-200.woff2 new file mode 100644 index 00000000..384e8dbc Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-200.woff2 differ diff --git a/src/assets/fonts/montserrat-v24-latin-600.eot b/src/assets/fonts/montserrat-v24-latin-600.eot new file mode 100644 index 00000000..fa233124 Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-600.eot differ diff --git a/src/assets/fonts/montserrat-v24-latin-600.svg b/src/assets/fonts/montserrat-v24-latin-600.svg new file mode 100644 index 00000000..a6983f68 --- /dev/null +++ b/src/assets/fonts/montserrat-v24-latin-600.svg @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/fonts/montserrat-v24-latin-600.ttf b/src/assets/fonts/montserrat-v24-latin-600.ttf new file mode 100644 index 00000000..f04cc3fc Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-600.ttf differ diff --git a/src/assets/fonts/montserrat-v24-latin-600.woff b/src/assets/fonts/montserrat-v24-latin-600.woff new file mode 100644 index 00000000..a7baa32a Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-600.woff differ diff --git a/src/assets/fonts/montserrat-v24-latin-600.woff2 b/src/assets/fonts/montserrat-v24-latin-600.woff2 new file mode 100644 index 00000000..6ec03963 Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-600.woff2 differ diff --git a/src/assets/fonts/montserrat-v24-latin-regular.eot b/src/assets/fonts/montserrat-v24-latin-regular.eot new file mode 100644 index 00000000..ffa37971 Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-regular.eot differ diff --git a/src/assets/fonts/montserrat-v24-latin-regular.svg b/src/assets/fonts/montserrat-v24-latin-regular.svg new file mode 100644 index 00000000..b0675d77 --- /dev/null +++ b/src/assets/fonts/montserrat-v24-latin-regular.svg @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/fonts/montserrat-v24-latin-regular.ttf b/src/assets/fonts/montserrat-v24-latin-regular.ttf new file mode 100644 index 00000000..a921a9f4 Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-regular.ttf differ diff --git a/src/assets/fonts/montserrat-v24-latin-regular.woff b/src/assets/fonts/montserrat-v24-latin-regular.woff new file mode 100644 index 00000000..4cd6a57e Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-regular.woff differ diff --git a/src/assets/fonts/montserrat-v24-latin-regular.woff2 b/src/assets/fonts/montserrat-v24-latin-regular.woff2 new file mode 100644 index 00000000..1617aace Binary files /dev/null and b/src/assets/fonts/montserrat-v24-latin-regular.woff2 differ diff --git a/src/assets/images/menu-close.svg b/src/assets/images/menu-close.svg new file mode 100644 index 00000000..9a69efb6 --- /dev/null +++ b/src/assets/images/menu-close.svg @@ -0,0 +1,54 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/src/assets/images/menu.svg b/src/assets/images/menu.svg new file mode 100644 index 00000000..cb39d075 --- /dev/null +++ b/src/assets/images/menu.svg @@ -0,0 +1 @@ + diff --git a/src/components/About.js b/src/components/About.js new file mode 100644 index 00000000..4a864633 --- /dev/null +++ b/src/components/About.js @@ -0,0 +1,24 @@ +import React, { useContext } from 'react'; +import { Context } from './Context'; + +export default function About({ children }) { + const { data } = useContext(Context); + + return ( +
+
+
+

+ discover + About me +

+
+
+

{data.profession}

+

{data.Profile}

+ {children} +
+
+
+ ); +} diff --git a/src/components/Academic.js b/src/components/Academic.js new file mode 100644 index 00000000..346d307b --- /dev/null +++ b/src/components/Academic.js @@ -0,0 +1,24 @@ +import React, { useContext } from 'react'; +import AcademicItem from './AcademicItem'; +import { Context } from './Context'; + +export default function Academic() { + const { data } = useContext(Context); + + return ( +
+

Academic

+
+ {data.Academic.map((item) => ( + + ))} +
+
+ ); +} diff --git a/src/components/AcademicItem.js b/src/components/AcademicItem.js new file mode 100644 index 00000000..932bc9bf --- /dev/null +++ b/src/components/AcademicItem.js @@ -0,0 +1,21 @@ +import React from 'react'; + +export default function AcademicItem({ + degree, + endDate, + startDate, + institution }) { + return ( +
+

{degree}

+

+ {startDate} + {' '} + - + {' '} + {endDate} +

+

{institution}

+
+ ); +} diff --git a/src/components/Contact.js b/src/components/Contact.js new file mode 100644 index 00000000..f059c393 --- /dev/null +++ b/src/components/Contact.js @@ -0,0 +1,29 @@ +import React, { useContext } from 'react'; +import { Context } from './Context'; + +export default function Contact() { + const { data } = useContext(Context); + + return ( +
+
    +
  • + address: + {data.address} +
  • +
  • + email: + {data.email} +
  • +
  • + website: + {data.website} +
  • +
  • + phone: + {data.phone} +
  • +
+
+ ); +} diff --git a/src/components/Context.js b/src/components/Context.js new file mode 100644 index 00000000..54a55bff --- /dev/null +++ b/src/components/Context.js @@ -0,0 +1,30 @@ +import React, { createContext, useState, useEffect } from 'react'; + +export const Context = createContext(); + +export default function Provider({ children }) { + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + fetch('https://my-json-server.typicode.com/bramuccci/react-eth-challenge/data') + .then((res) => { + if (!res.ok) throw new Error(`HTTP error at fetching data: The status is ${res.status}`); + return res.json(); + }) + .then((data) => setData(data)) + .catch((error) => { + console.error(error.message); + setError(error.message); + }) + .finally(() => setLoading(false)); + + }, []); + + return ( + + {children} + + ); +} diff --git a/src/components/Experience.js b/src/components/Experience.js new file mode 100644 index 00000000..f3a0ea02 --- /dev/null +++ b/src/components/Experience.js @@ -0,0 +1,27 @@ +import React, { useContext } from 'react'; +import { Context } from './Context'; +import ExperienceItem from './ExperienceItem'; + +export default function Experience() { + const { data } = useContext(Context); + + return ( +
+
+

Experience

+
+ {data.experience.map((item) => ( + + ))} +
+
+
+ ); +} diff --git a/src/components/ExperienceItem.js b/src/components/ExperienceItem.js new file mode 100644 index 00000000..39b15fd6 --- /dev/null +++ b/src/components/ExperienceItem.js @@ -0,0 +1,23 @@ +import React from 'react'; + +export default function ExperienceItem({ company, endDate, jobDescription, jobTitle, startDate }) { + return ( +
+

+ {company} + {' '} + - + {' '} + {jobTitle} +

+

+ {startDate} + {' '} + - + {' '} + {endDate} +

+

{jobDescription}

+
+ ); +} diff --git a/src/components/Header.js b/src/components/Header.js new file mode 100644 index 00000000..6437f0b4 --- /dev/null +++ b/src/components/Header.js @@ -0,0 +1,38 @@ +import React, { useContext, useState } from 'react'; +import { Context } from './Context'; +import Nav from './Nav'; + +export default function Header({ children }) { + const { data } = useContext(Context); + const fullName = data.name.split(' '); + const name = fullName[0]; + const lastName = fullName[1]; + const { background } = data; + + const [navVisible, setNavVisible] = useState(false); + const toggleNav = () => { + setNavVisible(!navVisible); + }; + + return ( +
+ +
+ ); +} diff --git a/src/components/Interest.js b/src/components/Interest.js new file mode 100644 index 00000000..a627acf8 --- /dev/null +++ b/src/components/Interest.js @@ -0,0 +1,15 @@ +import React, { useContext } from 'react'; +import { Context } from './Context'; + +export default function Interest() { + const { data } = useContext(Context); + + return ( +
+

Interest

+
    + {data.interest.map((interestName) =>
  • {interestName}
  • )} +
+
+ ); +} diff --git a/src/components/Languages.js b/src/components/Languages.js new file mode 100644 index 00000000..33501105 --- /dev/null +++ b/src/components/Languages.js @@ -0,0 +1,15 @@ +import React, { useContext } from 'react'; +import { Context } from './Context'; + +export default function Languages() { + const { data } = useContext(Context); + + return ( +
+

Languages

+
    + {data.languages.map((language) =>
  • {language}
  • )} +
+
+ ); +} diff --git a/src/components/Nav.js b/src/components/Nav.js new file mode 100644 index 00000000..8bf694df --- /dev/null +++ b/src/components/Nav.js @@ -0,0 +1,22 @@ +import React, { useState } from 'react'; + +export default function Nav({ navVisible }) { + const [navColor, setNavColor] = useState(false); + + window.addEventListener('scroll', () => { + if (window.scrollY >= 150) setNavColor(true); + else setNavColor(false); + }); + + return ( + + ); +} diff --git a/src/components/Skills.js b/src/components/Skills.js new file mode 100644 index 00000000..6068dec0 --- /dev/null +++ b/src/components/Skills.js @@ -0,0 +1,20 @@ +import React, { useContext } from 'react'; +import { Context } from './Context'; + +export default function Skills() { + const { data } = useContext(Context); + + return ( +
+

Skills

+
+ {data.skills.map((skill) => ( +
+

{skill.name}

+

{skill.description}

+
+ ))} +
+
+ ); +} diff --git a/src/components/SocialMedia.js b/src/components/SocialMedia.js new file mode 100644 index 00000000..97a9026f --- /dev/null +++ b/src/components/SocialMedia.js @@ -0,0 +1,26 @@ +import React, { useContext } from 'react'; +import { Context } from './Context'; + +export default function SocialMedia() { + const { data } = useContext(Context); + + return ( +
+
+

+ Do you want to know more? +
+ {' '} + Check my + social media + ! +

+
+ {data.social.map((socialMedia) => ( + {socialMedia.name} + ))} +
+
+
+ ); +} diff --git a/src/containers/App.jsx b/src/containers/App.jsx index 57224430..630422cf 100644 --- a/src/containers/App.jsx +++ b/src/containers/App.jsx @@ -1,28 +1,12 @@ import React from 'react'; -import '../styles/components/App.styl'; -import Header from '../components/Header'; -import About from '../components/About'; -import Profile from '../components/Profile'; -import Experience from '../components/Experience'; -import Academic from '../components/Academic'; -import Skills from '../components/Skills'; -import Interest from '../components/Interest'; -import Languages from '../components/Languages'; +import '../styles/main.scss' +import Provider from '../components/Context'; +import AppUI from './AppUI'; -const App = () => { +export default function App() { return ( - <> -
- -
- - - - - - - - ) -}; - -export default App; + + + + ); +} diff --git a/src/containers/AppUI.js b/src/containers/AppUI.js new file mode 100644 index 00000000..f5811f77 --- /dev/null +++ b/src/containers/AppUI.js @@ -0,0 +1,45 @@ +import React from 'react'; +import Header from '../components/Header'; +import About from '../components/About'; +import Experience from '../components/Experience'; +import Academic from '../components/Academic'; +import Languages from '../components/Languages'; +import Interest from '../components/Interest'; +import { Context } from '../components/Context'; +import Skills from '../components/Skills'; +import Contact from '../components/Contact'; +import SocialMedia from '../components/SocialMedia'; + +export default function AppUI() { + const { data, loading, error } = React.useContext(Context); + + return ( + <> + {error &&

error

} + {data && !loading && ( + <> +
+
+ + + +
+
+ + +
+
+ +
+
+ + +
+
+
+ + + )} + + ); +} diff --git a/src/index.js b/src/index.js index 9077e5ff..8845186e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,6 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom/client'; import App from './containers/App'; -ReactDOM.render(, document.getElementById('app')); +const root = ReactDOM.createRoot(document.getElementById('app')); +root.render(); diff --git a/src/styles/abstract/_index.scss b/src/styles/abstract/_index.scss new file mode 100644 index 00000000..f91a61bc --- /dev/null +++ b/src/styles/abstract/_index.scss @@ -0,0 +1,2 @@ +@forward './variables'; +@forward './mixins'; \ No newline at end of file diff --git a/src/styles/abstract/_mixins.scss b/src/styles/abstract/_mixins.scss new file mode 100644 index 00000000..abc197b5 --- /dev/null +++ b/src/styles/abstract/_mixins.scss @@ -0,0 +1,68 @@ +@use './variables' as *; + +@mixin vertical-title($height) { + transform: scale(-1); + writing-mode: vertical-rl; + position: relative; + + &::after { + content: ''; + background-color: $color-accent; + width: .1rem; + height: $height; + inset: auto 0; + margin: auto; + margin-top: .5em; + position: absolute; + } +} + +@mixin block-mark { + padding-left: 1em; + position: relative; + + &::before { + content: ''; + height: 100%; + width: .5rem; + position: absolute; + background-color: $color-accent; + left: -.1em; + } +} + +@mixin for-phone-only { + @media (max-width: 599px) { + @content; + } +} + +@mixin for-tablet-portrait-down { + @media (max-width: 700px) { + @content; + } +} + +@mixin for-tablet-portrait-up { + @media (min-width: 600px) { + @content; + } +} + +@mixin for-tablet-landscape-up { + @media (min-width: 900px) { + @content; + } +} + +@mixin for-desktop-up { + @media (min-width: 1200px) { + @content; + } +} + +@mixin for-big-desktop-up { + @media (min-width: 1800px) { + @content; + } +} \ No newline at end of file diff --git a/src/styles/abstract/_variables.scss b/src/styles/abstract/_variables.scss new file mode 100644 index 00000000..befac42d --- /dev/null +++ b/src/styles/abstract/_variables.scss @@ -0,0 +1,8 @@ +$color-bg: ( + "neutral": hsl(209, 60%, 20%), + "dark": hsl(209, 60%, 12%), + "very-dark": hsl(209, 60%, 5%) +); + +$color-text: hsl(75, 60%, 95%); +$color-accent: hsl(355, 50%, 40%); \ No newline at end of file diff --git a/src/styles/base/_index.scss b/src/styles/base/_index.scss new file mode 100644 index 00000000..333753e5 --- /dev/null +++ b/src/styles/base/_index.scss @@ -0,0 +1,3 @@ +@forward './reset'; +@forward './typography'; +@forward './utils'; \ No newline at end of file diff --git a/src/styles/base/_reset.scss b/src/styles/base/_reset.scss new file mode 100644 index 00000000..8dad26db --- /dev/null +++ b/src/styles/base/_reset.scss @@ -0,0 +1,25 @@ +*, +*::after, +*::before { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +:root { + scroll-behavior: smooth; +} + +body { + overflow-x: hidden; +} + +img { + max-width: 100%; +} + +ul { + list-style-type: none; + margin: 0; + padding: 0; +} \ No newline at end of file diff --git a/src/styles/base/_typography.scss b/src/styles/base/_typography.scss new file mode 100644 index 00000000..fc4cddc9 --- /dev/null +++ b/src/styles/base/_typography.scss @@ -0,0 +1,88 @@ +@use '../abstract/' as *; + +/* montserrat-200 - latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 200; + src: url('../assets/fonts/montserrat-v24-latin-200.eot'); + /* IE9 Compat Modes */ + src: local(''), + url('../assets/fonts/montserrat-v24-latin-200.eot?#iefix') format('embedded-opentype'), + /* IE6-IE8 */ + url('../assets/fonts/montserrat-v24-latin-200.woff2') format('woff2'), + /* Super Modern Browsers */ + url('../assets/fonts/montserrat-v24-latin-200.woff') format('woff'), + /* Modern Browsers */ + url('../assets/fonts/montserrat-v24-latin-200.ttf') format('truetype'), + /* Safari, Android, iOS */ + url('../assets/fonts/montserrat-v24-latin-200.svg#Montserrat') format('svg'); + /* Legacy iOS */ +} + +/* montserrat-regular - latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: url('../assets/fonts/montserrat-v24-latin-regular.eot'); + /* IE9 Compat Modes */ + src: local(''), + url('../assets/fonts/montserrat-v24-latin-regular.eot?#iefix') format('embedded-opentype'), + /* IE6-IE8 */ + url('../assets/fonts/montserrat-v24-latin-regular.woff2') format('woff2'), + /* Super Modern Browsers */ + url('../assets/fonts/montserrat-v24-latin-regular.woff') format('woff'), + /* Modern Browsers */ + url('../assets/fonts/montserrat-v24-latin-regular.ttf') format('truetype'), + /* Safari, Android, iOS */ + url('../assets/fonts/montserrat-v24-latin-regular.svg#Montserrat') format('svg'); + /* Legacy iOS */ +} + +/* montserrat-600 - latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 600; + src: url('../assets/fonts/montserrat-v24-latin-600.eot'); + /* IE9 Compat Modes */ + src: local(''), + url('../assets/fonts/montserrat-v24-latin-600.eot?#iefix') format('embedded-opentype'), + /* IE6-IE8 */ + url('../assets/fonts/montserrat-v24-latin-600.woff2') format('woff2'), + /* Super Modern Browsers */ + url('../assets/fonts/montserrat-v24-latin-600.woff') format('woff'), + /* Modern Browsers */ + url('../assets/fonts/montserrat-v24-latin-600.ttf') format('truetype'), + /* Safari, Android, iOS */ + url('../assets/fonts/montserrat-v24-latin-600.svg#Montserrat') format('svg'); + /* Legacy iOS */ +} + +body { + font-family: 'Montserrat'; + color: $color-text +} + +h1, +h2, +h3 { + margin: 0; +} + +h1 { + font-size: 3rem; + font-weight: 600; + line-height: 1.1; +} + +h2 { + font-size: 2rem; + line-height: 1.6; +} + +h3 { + font-size: 1.5rem; + line-height: 1.6; +} \ No newline at end of file diff --git a/src/styles/base/_utils.scss b/src/styles/base/_utils.scss new file mode 100644 index 00000000..664efbaa --- /dev/null +++ b/src/styles/base/_utils.scss @@ -0,0 +1,9 @@ +.screenreader-only { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} \ No newline at end of file diff --git a/src/styles/components/App.styl b/src/styles/components/App.styl deleted file mode 100644 index 4f92eccb..00000000 --- a/src/styles/components/App.styl +++ /dev/null @@ -1,2 +0,0 @@ -body - background-color blue \ No newline at end of file diff --git a/src/styles/components/_contact.scss b/src/styles/components/_contact.scss new file mode 100644 index 00000000..8f771728 --- /dev/null +++ b/src/styles/components/_contact.scss @@ -0,0 +1,20 @@ +@use '../abstract/' as *; + +.contact { + border: .2rem solid $color-accent; + + ul { + display: inline-flex; + flex-direction: column; + gap: .5em; + padding: 1em; + + li { + display: inline-block; + } + } + + span { + font-weight: 600; + } +} \ No newline at end of file diff --git a/src/styles/components/_index.scss b/src/styles/components/_index.scss new file mode 100644 index 00000000..510c76c5 --- /dev/null +++ b/src/styles/components/_index.scss @@ -0,0 +1,3 @@ +@forward './contact'; +@forward './nav'; +@forward './mobile-nav-toggle'; \ No newline at end of file diff --git a/src/styles/components/_mobile-nav-toggle.scss b/src/styles/components/_mobile-nav-toggle.scss new file mode 100644 index 00000000..900e2efb --- /dev/null +++ b/src/styles/components/_mobile-nav-toggle.scss @@ -0,0 +1,21 @@ +@use '../abstract/' as *; + +.mobile-nav-toggle { + display: none; + + @include for-tablet-portrait-down { + display: inline-block; + background: url('../assets/images/menu.svg') transparent center/contain; + border: none; + width: 2rem; + aspect-ratio: 1; + right: 2rem; + top: 2rem; + position: fixed; + z-index: 9999; + + &[aria-expanded='true'] { + background-image: url('../assets/images/menu-close.svg'); + } + } +} \ No newline at end of file diff --git a/src/styles/components/_nav.scss b/src/styles/components/_nav.scss new file mode 100644 index 00000000..7babde30 --- /dev/null +++ b/src/styles/components/_nav.scss @@ -0,0 +1,46 @@ +@use '../abstract/' as *; + +.main-nav { + position: fixed; + top: 0; + display: flex; + gap: 1rem; + padding: 2em; + z-index: 1000; + width: 100%; + transition: background 300ms ease-in-out; + + a { + color: $color-text; + text-decoration: none; + text-transform: capitalize; + + &:hover, + &:focus { + font-weight: 800; + @include block-mark; + } + } + + &__background { + background-color: map-get($map: $color-bg, $key: "dark"); + } + + @include for-tablet-portrait-down { + transform: translateX(100%); + backdrop-filter: blur(1rem); + background-color: rgba(map-get($map: $color-bg, $key: "neutral"), .7); + position: fixed; + top: 0; + padding: 4em 2em; + min-height: 100vh; + max-width: 100vw; + flex-direction: column; + font-size: 1.5rem; + justify-content: space-between; + + &[data-visible="true"] { + transform: translateX(0%); + } + } +} \ No newline at end of file diff --git a/src/styles/layout/_about.scss b/src/styles/layout/_about.scss new file mode 100644 index 00000000..85b64b54 --- /dev/null +++ b/src/styles/layout/_about.scss @@ -0,0 +1,31 @@ +@use '../abstract/' as *; + +.about { + background-color: map-get($map: $color-bg, $key: 'dark'); + + .container { + display: flex; + gap: 2em; + + @include for-phone-only { + flex-direction: column; + } + } + + h2 { + font-size: 1rem; + color: $color-accent; + + span { + color: $color-text; + line-height: 1; + font-size: 2rem; + display: block; + text-transform: capitalize; + } + } + + .contact { + margin-top: 2rem; + } +} \ No newline at end of file diff --git a/src/styles/layout/_container.scss b/src/styles/layout/_container.scss new file mode 100644 index 00000000..81f00090 --- /dev/null +++ b/src/styles/layout/_container.scss @@ -0,0 +1,5 @@ +.container { + padding: 10em 2.5em; + max-width: 50rem; + margin: auto; +} \ No newline at end of file diff --git a/src/styles/layout/_experience.scss b/src/styles/layout/_experience.scss new file mode 100644 index 00000000..dd991745 --- /dev/null +++ b/src/styles/layout/_experience.scss @@ -0,0 +1,49 @@ +@use '../abstract' as *; + +.experience { + background-color: map-get($map: $color-bg, $key: "dark"); + + h2 { + text-align: right; + margin-bottom: 1em; + position: relative; + + &::before { + width: 5rem; + height: .2rem; + content: ''; + background-color: $color-accent; + position: absolute; + right: 0; + bottom: 0; + } + } + + h3 span { + color: $color-accent; + // text-transform: uppercase; + font-size: 1.25rem; + } + + &__content { + display: flex; + gap: 2em; + + >* { + width: 100%; + } + + @include for-phone-only { + flex-direction: column; + } + } + + &__dates { + font-weight: 600; + } + + &__description { + padding: 1em; + } + +} \ No newline at end of file diff --git a/src/styles/layout/_header.scss b/src/styles/layout/_header.scss new file mode 100644 index 00000000..4b65117b --- /dev/null +++ b/src/styles/layout/_header.scss @@ -0,0 +1,27 @@ +@use '../abstract' as *; + +.header { + background-color: rgba(map-get($map: $color-bg, $key: 'neutral'), .6); + background-blend-mode: multiply; + + &__content { + display: flex; + padding: 10em 0; + flex-direction: column; + align-items: center; + text-align: center; + justify-content: center; + font-weight: 600; + } + + h1 { + color: $color-accent; + text-transform: uppercase; + } + + + .avatar { + border-radius: 50rem; + width: 10rem; + } +} \ No newline at end of file diff --git a/src/styles/layout/_index.scss b/src/styles/layout/_index.scss new file mode 100644 index 00000000..e791eef7 --- /dev/null +++ b/src/styles/layout/_index.scss @@ -0,0 +1,7 @@ +@forward './header'; +@forward './container'; +@forward './about'; +@forward './skills-and-academic'; +@forward './experience'; +@forward './languages-and-interest'; +@forward './social-media'; \ No newline at end of file diff --git a/src/styles/layout/_languages-and-interest.scss b/src/styles/layout/_languages-and-interest.scss new file mode 100644 index 00000000..bf2f5589 --- /dev/null +++ b/src/styles/layout/_languages-and-interest.scss @@ -0,0 +1,54 @@ +@use '../abstract/' as *; + +.languages-and-interest { + background-color: map-get($map: $color-bg, $key: "neutral"); + + .container { + display: flex; + gap: 2em; + + @include for-phone-only { + flex-direction: column; + } + } + + .languages { + display: flex; + + h2 { + @include vertical-title(0%) + } + + ul { + border: .2rem solid $color-accent ; + padding: 2em; + display: flex; + justify-content: space-between; + flex-direction: column; + position: relative; + + &::before { + content: ''; + height: 30%; + width: .2em; + background-color: $color-accent; + position: absolute; + inset: 0; + margin: auto; + transform: rotate(-30deg); + } + + li { + font-weight: 600; + + } + } + + } + + .interest ul li { + position: relative; + margin-bottom: .75em; + @include block-mark + } +} \ No newline at end of file diff --git a/src/styles/layout/_skills-and-academic.scss b/src/styles/layout/_skills-and-academic.scss new file mode 100644 index 00000000..ec6f9053 --- /dev/null +++ b/src/styles/layout/_skills-and-academic.scss @@ -0,0 +1,41 @@ +@use '../abstract/' as *; + +.skills-and-academic { + background-color: map-get($map: $color-bg, $key: 'neutral'); + + .container { + display: flex; + justify-content: space-between; + + @include for-tablet-portrait-down { + flex-direction: column; + gap: 5rem; + } + } + + .skills { + display: flex; + + h2 { + @include vertical-title(60%) + } + } + + .academic { + display: flex; + + h2 { + @include vertical-title(30%) + } + + span { + color: $color-accent; + font-weight: 600; + } + } + + p { + position: relative; + @include block-mark + } +} \ No newline at end of file diff --git a/src/styles/layout/_social-media.scss b/src/styles/layout/_social-media.scss new file mode 100644 index 00000000..8358dab7 --- /dev/null +++ b/src/styles/layout/_social-media.scss @@ -0,0 +1,44 @@ +@use '../abstract/' as *; + +.social-media { + background-color: map-get($map: $color-bg, $key: "very-dark"); + + .container { + display: flex; + + >* { + width: 100%; + } + + } + + p { + font-size: 1.25rem; + + span { + color: $color-accent; + font-weight: 600; + } + } + + + &__content { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2rem; + + a { + text-decoration: none; + color: inherit; + border: .2rem solid $color-accent; + padding: 1em; + transition: all 300ms ease-in-out; + + &:hover, + &:focus { + padding-left: 50%; + } + } + } +} \ No newline at end of file diff --git a/src/styles/main.scss b/src/styles/main.scss new file mode 100644 index 00000000..5ad9a0ba --- /dev/null +++ b/src/styles/main.scss @@ -0,0 +1,5 @@ +@use './vendors'; +@use './base'; +@use './abstract'; +@use './components'; +@use './layout'; \ No newline at end of file diff --git a/src/styles/vendors/_index.scss b/src/styles/vendors/_index.scss new file mode 100644 index 00000000..1b4a6319 --- /dev/null +++ b/src/styles/vendors/_index.scss @@ -0,0 +1 @@ +@forward './normalize'; \ No newline at end of file diff --git a/src/styles/vendors/_normalize.scss b/src/styles/vendors/_normalize.scss new file mode 100644 index 00000000..780ad9ca --- /dev/null +++ b/src/styles/vendors/_normalize.scss @@ -0,0 +1,379 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index f05a5c0e..dcdfd8cf 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -29,15 +29,19 @@ module.exports = { ], }, { - test: /\.css|.styl$/, + test: /\.css|.scss$/, use: [ { loader: MiniCssExtractPlugin.loader, }, 'css-loader', - 'stylus-loader', + 'sass-loader', ], }, + { + test: /\.(woff|woff2|eot|ttf|otf)$/i, + type: 'asset/resource', + }, ], }, plugins: [