Merge pull request 'development' (#1) from development into main

Reviewed-on: #1
This commit is contained in:
Gabriel Ferreira Lehmann 2023-01-21 00:38:06 +00:00
commit ef17837284
53 changed files with 11606 additions and 73 deletions

23
.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

View File

@ -1,93 +1,46 @@
# Desafio REACT e Typescript
# Getting Started with Create React App
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
## Getting started
In the project directory, you can run:
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
### `yarn start`
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
## Add your files
The page will reload if you make edits.\
You will also see any lint errors in the console.
- [ ] [Create](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
- [ ] [Add files using the command line](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
### `yarn test`
```
cd existing_repo
git remote add origin https://gitlab.com/m3-academy/fase-06/desafio-react-e-typescript.git
git branch -M main
git push -uf origin main
```
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
## Integrate with your tools
### `yarn build`
- [ ] [Set up project integrations](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://gitlab.com/m3-academy/fase-06/desafio-react-e-typescript/-/settings/integrations)
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
## Collaborate with your team
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
- [ ] [Invite team members and collaborators](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/members/)
- [ ] [Create a new merge request](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
- [ ] [Automatically close issues from merge requests](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
- [ ] [Enable merge request approvals](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
- [ ] [Automatically merge when pipeline succeeds](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
## Test and Deploy
### `yarn eject`
Use the built-in continuous integration in GitLab.
**Note: this is a one-way operation. Once you `eject`, you cant go back!**
- [ ] [Get started with GitLab CI/CD](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/ci/quick_start/index.html)
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/application_security/sast/)
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
- [ ] [Use pull-based deployments for improved Kubernetes management](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/clusters/agent/)
- [ ] [Set up protected environments](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
If you arent satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
***
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own.
# Editing this README
You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt customize it when you are ready for it.
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://www.makeareadme.com/) for this template.
## Learn More
## Suggestions for a good README
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
## Name
Choose a self-explaining name for your project.
## Description
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
## Badges
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
## Visuals
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
## Installation
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
## Usage
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
## Support
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
## Roadmap
If you have ideas for releases in the future, it is a good idea to list them in the README.
## Contributing
State if you are open to contributions and what your requirements are for accepting them.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
## Authors and acknowledgment
Show your appreciation to those who have contributed to the project.
## License
For open source projects, say how it is licensed.
## Project status
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).

93
README.old.md Normal file
View File

@ -0,0 +1,93 @@
# Desafio REACT e Typescript
## Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
## Add your files
- [ ] [Create](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
- [ ] [Add files using the command line](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
```
cd existing_repo
git remote add origin https://gitlab.com/m3-academy/fase-06/desafio-react-e-typescript.git
git branch -M main
git push -uf origin main
```
## Integrate with your tools
- [ ] [Set up project integrations](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://gitlab.com/m3-academy/fase-06/desafio-react-e-typescript/-/settings/integrations)
## Collaborate with your team
- [ ] [Invite team members and collaborators](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/members/)
- [ ] [Create a new merge request](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
- [ ] [Automatically close issues from merge requests](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
- [ ] [Enable merge request approvals](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
- [ ] [Automatically merge when pipeline succeeds](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
## Test and Deploy
Use the built-in continuous integration in GitLab.
- [ ] [Get started with GitLab CI/CD](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/ci/quick_start/index.html)
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/application_security/sast/)
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
- [ ] [Use pull-based deployments for improved Kubernetes management](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/user/clusters/agent/)
- [ ] [Set up protected environments](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
***
# Editing this README
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://gitlab.com/-/experiment/new_project_readme_content:6ad80019019932803f32a91ae13cb05b?https://www.makeareadme.com/) for this template.
## Suggestions for a good README
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
## Name
Choose a self-explaining name for your project.
## Description
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
## Badges
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
## Visuals
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
## Installation
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
## Usage
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
## Support
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
## Roadmap
If you have ideas for releases in the future, it is a good idea to list them in the README.
## Contributing
State if you are open to contributions and what your requirements are for accepting them.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
## Authors and acknowledgment
Show your appreciation to those who have contributed to the project.
## License
For open source projects, say how it is licensed.
## Project status
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.

49
package.json Normal file
View File

@ -0,0 +1,49 @@
{
"name": "desafio-react-e-typescript-gabriel-lehmann",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^13.0.0",
"@testing-library/user-event": "^13.2.1",
"@types/jest": "^27.0.1",
"@types/node": "^16.7.13",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"cpf-cnpj-validator": "^1.0.3",
"formik": "^2.2.9",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.6.1",
"react-scripts": "5.0.1",
"sass": "^1.57.1",
"typescript": "^4.4.2",
"web-vitals": "^2.1.0",
"yup": "^0.32.11",
"yup-phone": "^1.3.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

4
public/M3whitelogo.svg Normal file
View File

@ -0,0 +1,4 @@
<svg width="29" height="16" viewBox="0 0 29 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.0306 5.52943C16.5832 4.93602 16.0212 4.44253 15.3793 4.07945C14.7375 3.71637 14.0295 3.49142 13.2991 3.41851C12.5687 3.34559 11.8314 3.42626 11.1327 3.65553C10.4341 3.88479 9.78893 4.25778 9.23719 4.75145L8.76053 4.38191C5.48585 2.02851 0.900357 4.02695 0.471361 8.05788C0.340858 9.99984 0.307448 11.9473 0.371262 13.8928C0.360734 14.1424 0.40062 14.3916 0.488442 14.6249C0.576265 14.8581 0.71015 15.0705 0.881788 15.2488C1.05343 15.427 1.25915 15.5674 1.4862 15.6612C1.71325 15.755 1.95677 15.8002 2.20165 15.794C2.44131 15.7929 2.67828 15.7424 2.89833 15.6456C3.11838 15.5487 3.31697 15.4075 3.48215 15.2304C3.64733 15.0532 3.77571 14.8439 3.85955 14.6148C3.9434 14.3858 3.98099 14.1418 3.97007 13.8976C3.97007 12.4973 3.97007 11.0969 3.97007 9.69165C3.96621 9.27506 3.9949 8.85882 4.05587 8.44687C4.13275 8.02525 4.36328 7.64896 4.70108 7.39367C5.03889 7.13838 5.45893 7.02303 5.87672 7.07082C6.28512 7.10223 6.66826 7.28451 6.95433 7.58349C7.2404 7.88246 7.40975 8.27761 7.43064 8.69486C7.45447 9.21027 7.43064 9.72568 7.43064 10.2411C7.43064 11.4956 7.43064 12.7501 7.43064 14.0046C7.42574 14.3685 7.53183 14.7249 7.73422 15.0245C7.93661 15.3242 8.22529 15.5523 8.56033 15.6773C9.77582 16.1927 11.0151 15.2883 11.039 13.8636C11.039 12.2055 11.039 10.5474 11.0866 8.88935C11.1027 8.48854 11.2228 8.09925 11.4346 7.76128C11.6363 7.46326 11.9286 7.24129 12.2663 7.12968C12.6041 7.01806 12.9684 7.02301 13.3031 7.14375C13.6807 7.25169 14.0107 7.48791 14.2387 7.81332C14.4667 8.13872 14.5789 8.53379 14.5567 8.93311C14.5567 10.6106 14.5567 12.2882 14.5567 13.9657C14.5567 14.2064 14.6032 14.4448 14.6935 14.6672C14.7838 14.8896 14.9162 15.0917 15.0831 15.2619C15.2499 15.4321 15.4481 15.5672 15.6661 15.6593C15.8841 15.7514 16.1178 15.7988 16.3538 15.7988C16.5898 15.7988 16.8234 15.7514 17.0415 15.6593C17.2595 15.5672 17.4576 15.4321 17.6244 15.2619C17.7913 15.0917 17.9237 14.8896 18.014 14.6672C18.1043 14.4448 18.1508 14.2064 18.1508 13.9657C18.1508 12.2493 18.1508 10.562 18.1508 8.82128C18.154 7.62619 17.7591 6.46544 17.0306 5.52943Z" fill="white"/>
<path d="M26.0349 6.50162L25.4676 6.26337C26.0301 5.81603 26.564 5.4319 27.0406 4.99428C27.4641 4.65415 27.8297 4.24508 28.1227 3.78354C28.9806 2.14978 27.7699 0.24858 25.849 0.204818C24.0758 0.180506 22.3074 0.180506 20.5342 0.180506C20.317 0.165195 20.0991 0.196902 19.8947 0.273547C19.6904 0.350191 19.5042 0.470042 19.3485 0.625235C19.1928 0.780428 19.071 0.967457 18.9911 1.17405C18.9112 1.38065 18.875 1.60214 18.8849 1.824C18.8637 2.04997 18.8909 2.27795 18.9646 2.49213C19.0384 2.70632 19.1569 2.90158 19.312 3.0644C19.467 3.22721 19.655 3.35368 19.8627 3.43504C20.0705 3.5164 20.2931 3.5507 20.5151 3.53556C21.3826 3.53556 22.2502 3.53556 23.1177 3.53556C23.2655 3.58419 23.418 3.58419 23.704 3.58419C22.5266 4.55666 21.4398 5.48052 20.3673 6.39465C19.6762 6.97814 19.4665 7.61511 19.7096 8.33961C19.8387 8.69722 20.0793 9.00173 20.3944 9.20639C20.7096 9.41105 21.0819 9.50455 21.4541 9.47255C22.3741 9.47255 23.2988 9.47255 24.2188 9.47255C24.4251 9.43364 24.6373 9.44151 24.8403 9.49562C25.0433 9.54973 25.2321 9.64874 25.3934 9.78563C25.5547 9.92253 25.6845 10.0939 25.7735 10.2877C25.8626 10.4815 25.9088 10.6929 25.9088 10.907C25.9088 11.121 25.8626 11.3324 25.7735 11.5262C25.6845 11.72 25.5547 11.8914 25.3934 12.0283C25.2321 12.1652 25.0433 12.2642 24.8403 12.3183C24.6373 12.3724 24.4251 12.3803 24.2188 12.3414C23.0271 12.3414 21.8355 12.3414 20.6438 12.3414C20.2261 12.3644 19.8329 12.5499 19.5452 12.8597C19.2575 13.1695 19.0971 13.58 19.0971 14.0067C19.0971 14.4335 19.2575 14.844 19.5452 15.1538C19.8329 15.4636 20.2261 15.6491 20.6438 15.6721C21.8879 15.6721 23.1368 15.6721 24.3808 15.6721C25.4737 15.6438 26.5238 15.2332 27.3552 14.5091C28.1866 13.7849 28.7487 12.7913 28.9473 11.6947C29.1056 10.621 28.9042 9.52429 28.3757 8.58189C27.8472 7.63949 27.0224 6.90654 26.0349 6.50162Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

49
public/index.html Normal file
View File

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/M3whitelogo.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap"
rel="stylesheet"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>Desafio React</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

25
public/manifest.json Normal file
View File

@ -0,0 +1,25 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

3
public/robots.txt Normal file
View File

@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

5
src/App.css Normal file
View File

@ -0,0 +1,5 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}

55
src/App.tsx Normal file
View File

@ -0,0 +1,55 @@
import React from "react";
import "./App.css";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import Header from "./components/Header";
import Home from "./components/Home";
import Institutional from "./components/Institutional";
import Footer from "./components/Footer";
import { AsideMenuContextProvider } from "./contexts/asideMenuContext";
import AsideMenu from "./components/AsideMenu";
import OverIcon from "./components/OverIcon";
import Uppage from "./assets/svg/Uppage.svg";
import Whatsapp from "./assets/svg/Whatsapp.svg";
import { url } from "inspector";
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
},
{
path: "/institucional",
element: <Institutional />,
},
]);
function App() {
return (
<div className="App">
<AsideMenuContextProvider>
<Header />
<AsideMenu />
<RouterProvider router={router} />
<OverIcon
icons={[
{
action: () => {
window.scrollTo({ top: 0, behavior: "smooth" });
},
imgUrl: Uppage,
},
{
action: () => {
window.open("https://wa.me/5579999959568");
},
imgUrl: Whatsapp,
},
]}
/>
<Footer />
</AsideMenuContextProvider>
</div>
);
}
export default App;

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -0,0 +1,10 @@
<svg width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1_310)">
<path d="M6.11608 3.60396L2.6762 0.164193C2.45738 -0.0547314 2.10261 -0.0547314 1.8839 0.164193C1.66517 0.382921 1.66517 0.737679 1.8839 0.95639L4.92766 4.00006L1.88398 7.04362C1.66525 7.26244 1.66525 7.61716 1.88398 7.83589C2.10271 8.0547 2.45747 8.0547 2.67629 7.83589L6.11617 4.39607C6.22553 4.28665 6.28015 4.1434 6.28015 4.00008C6.28015 3.85668 6.22543 3.71332 6.11608 3.60396Z" fill="#C4C4C4"/>
</g>
<defs>
<clipPath id="clip0_1_310">
<rect width="8" height="8" fill="white" transform="matrix(1 0 0 -1 0 8)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 669 B

5
src/assets/svg/Aside.svg Normal file
View File

@ -0,0 +1,5 @@
<svg width="28" height="23" viewBox="0 0 28 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M26.25 19.0001H1.75002C0.783509 19.0001 0 19.7836 0 20.7501C0 21.7166 0.783508 22.5001 1.75002 22.5001H26.25C27.2165 22.5001 28 21.7166 28 20.7501C28 19.7836 27.2165 19.0001 26.25 19.0001Z" fill="white"/>
<path d="M26.25 9.5H1.75002C0.783509 9.5 0 10.2835 0 11.25C0 12.2165 0.783508 13 1.75002 13H26.25C27.2165 13 28 12.2165 28 11.25C28 10.2835 27.2165 9.5 26.25 9.5Z" fill="white"/>
<path d="M26.25 0H1.75002C0.783509 0 0 0.783509 0 1.75002C0 2.71652 0.783508 3.50003 1.75002 3.50003H26.25C27.2165 3.50003 28 2.71652 28 1.75002C28 0.783509 27.2165 0 26.25 0Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 688 B

4
src/assets/svg/Exit.svg Normal file
View File

@ -0,0 +1,4 @@
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.2284 1.28215L1.22996 10.9942C0.550673 11.6541 0.568968 12.7044 1.27083 13.3401C1.97268 13.9759 3.09232 13.9564 3.77161 13.2966L13.77 3.58449C14.4493 2.92466 14.431 1.87436 13.7292 1.23858C13.0273 0.602806 11.9077 0.622311 11.2284 1.28215Z" fill="white"/>
<path d="M1.65213 3.40819L10.8751 13.7186C11.5082 14.4263 12.6262 14.5239 13.3724 13.9366C14.1185 13.3493 14.2102 12.2995 13.5771 11.5918L4.35414 1.28143C3.72107 0.573715 2.603 0.476092 1.85686 1.06338C1.11072 1.65067 1.01906 2.70048 1.65213 3.40819Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 638 B

View File

@ -0,0 +1,11 @@
<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_5136_57)">
<path d="M38.3559 54.982V37.0878H44.347L45.2458 30.112H38.3559V25.659C38.3559 23.64 38.913 22.264 41.8054 22.264L45.4883 22.2625V16.0231C44.8514 15.9402 42.6651 15.75 40.1205 15.75C34.8069 15.75 31.1692 19.0003 31.1692 24.9681V30.112H25.1599V37.0878H31.1692V54.982H38.3559Z" fill="#303030"/>
</g>
<circle cx="35" cy="35" r="34" stroke="#303030" stroke-width="2"/>
<defs>
<clipPath id="clip0_5136_57">
<rect width="39.148" height="39.232" fill="white" transform="translate(15.75 15.75)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 647 B

10
src/assets/svg/Home.svg Normal file
View File

@ -0,0 +1,10 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1_306)">
<path d="M15.8326 7.59562L14.6903 6.4533L8.40431 0.167326C8.18118 -0.0557753 7.81942 -0.0557753 7.59628 0.167326L1.31028 6.4533L0.167381 7.59623C-0.0518699 7.82324 -0.0456085 8.185 0.18141 8.40425C0.402871 8.61814 0.753946 8.61814 0.975407 8.40425L1.14226 8.23623V15.4285C1.14226 15.7442 1.3981 16 1.71372 16H14.2857C14.6013 16 14.8572 15.7442 14.8572 15.4285V8.23623L15.0246 8.40368C15.2516 8.62293 15.6134 8.61664 15.8326 8.38965C16.0465 8.16819 16.0465 7.81708 15.8326 7.59562ZM9.71409 14.8571H6.28537V10.2855H9.71409V14.8571ZM13.7142 14.8571H10.857V9.71403C10.857 9.39841 10.6011 9.14256 10.2855 9.14256H5.7139C5.39829 9.14256 5.14244 9.39841 5.14244 9.71403V14.8571H2.28518V7.09334L7.99969 1.3788L13.7142 7.09334V14.8571Z" fill="#C4C4C4"/>
</g>
<defs>
<clipPath id="clip0_1_306">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 986 B

View File

@ -0,0 +1,13 @@
<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_5136_62)">
<path d="M44.1992 15.75H26.5932C20.6143 15.75 15.75 20.6069 15.75 26.5766V44.1552C15.75 50.1251 20.6143 54.9818 26.5932 54.9818H44.1992C50.1786 54.9818 55.0429 50.1249 55.0429 44.1552V26.5766C55.0431 20.6069 50.1786 15.75 44.1992 15.75ZM51.5568 44.1552C51.5568 48.2058 48.2563 51.501 44.1994 51.501H26.5932C22.5366 51.5012 19.2363 48.2058 19.2363 44.1552V26.5766C19.2363 22.5263 22.5366 19.2308 26.5932 19.2308H44.1992C48.2561 19.2308 51.5566 22.5263 51.5566 26.5766V44.1552H51.5568Z" fill="#303030"/>
<path d="M35.3965 25.2573C29.8136 25.2573 25.2717 29.7922 25.2717 35.3664C25.2717 40.9403 29.8136 45.4749 35.3965 45.4749C40.9794 45.4749 45.5213 40.9403 45.5213 35.3664C45.5213 29.7922 40.9794 25.2573 35.3965 25.2573ZM35.3965 41.9939C31.7362 41.9939 28.758 39.0208 28.758 35.3661C28.758 31.7113 31.7359 28.7379 35.3965 28.7379C39.0571 28.7379 42.035 31.7113 42.035 35.3661C42.035 39.0208 39.0568 41.9939 35.3965 41.9939Z" fill="#303030"/>
<path d="M45.946 22.3059C45.2743 22.3059 44.6145 22.5774 44.1401 23.0531C43.6634 23.5265 43.3894 24.1856 43.3894 24.8585C43.3894 25.5294 43.6637 26.1882 44.1401 26.6639C44.6142 27.1373 45.2743 27.4111 45.946 27.4111C46.62 27.4111 47.2777 27.1373 47.7542 26.6639C48.2306 26.1882 48.5026 25.5292 48.5026 24.8585C48.5026 24.1856 48.2306 23.5265 47.7542 23.0531C47.2801 22.5774 46.62 22.3059 45.946 22.3059Z" fill="#303030"/>
</g>
<circle cx="35" cy="35" r="34" stroke="#303030" stroke-width="2"/>
<defs>
<clipPath id="clip0_5136_62">
<rect width="39.2931" height="39.232" fill="white" transform="translate(15.75 15.75)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,13 @@
<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="35" cy="35" r="34" stroke="#303030" stroke-width="2"/>
<g clip-path="url(#clip0_5136_77)">
<path d="M26.8891 27.718H20.5959C20.3166 27.718 20.0903 27.9444 20.0903 28.2236V48.4407C20.0903 48.72 20.3166 48.9464 20.5959 48.9464H26.8891C27.1684 48.9464 27.3947 48.72 27.3947 48.4407V28.2236C27.3947 27.9444 27.1684 27.718 26.8891 27.718Z" fill="#303030"/>
<path d="M23.745 17.6675C21.4552 17.6675 19.5923 19.5283 19.5923 21.8156C19.5923 24.1039 21.4552 25.9655 23.745 25.9655C26.0329 25.9655 27.8943 24.1038 27.8943 21.8156C27.8944 19.5283 26.0329 17.6675 23.745 17.6675Z" fill="#303030"/>
<path d="M42.8963 27.2153C40.3688 27.2153 38.5004 28.3019 37.3671 29.5365V28.2234C37.3671 27.9442 37.1408 27.7178 36.8615 27.7178H30.8347C30.5554 27.7178 30.3291 27.9442 30.3291 28.2234V48.4406C30.3291 48.7199 30.5554 48.9462 30.8347 48.9462H37.1141C37.3934 48.9462 37.6197 48.7199 37.6197 48.4406V38.4378C37.6197 35.0671 38.5353 33.7539 40.8849 33.7539C43.4439 33.7539 43.6473 35.859 43.6473 38.6112V48.4407C43.6473 48.72 43.8736 48.9463 44.1529 48.9463H50.4346C50.7139 48.9463 50.9402 48.72 50.9402 48.4407V37.3512C50.9402 32.3391 49.9845 27.2153 42.8963 27.2153Z" fill="#303030"/>
</g>
<defs>
<clipPath id="clip0_5136_77">
<rect width="31.3478" height="31.3478" fill="white" transform="translate(19.5923 17.6331)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,4 @@
<svg width="29" height="16" viewBox="0 0 29 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.0306 5.52943C16.5832 4.93602 16.0212 4.44253 15.3793 4.07945C14.7375 3.71637 14.0295 3.49142 13.2991 3.41851C12.5687 3.34559 11.8314 3.42626 11.1327 3.65553C10.4341 3.88479 9.78893 4.25778 9.23719 4.75145L8.76053 4.38191C5.48585 2.02851 0.900357 4.02695 0.471361 8.05788C0.340858 9.99984 0.307448 11.9473 0.371262 13.8928C0.360734 14.1424 0.40062 14.3916 0.488442 14.6249C0.576265 14.8581 0.71015 15.0705 0.881788 15.2488C1.05343 15.427 1.25915 15.5674 1.4862 15.6612C1.71325 15.755 1.95677 15.8002 2.20165 15.794C2.44131 15.7929 2.67828 15.7424 2.89833 15.6456C3.11838 15.5487 3.31697 15.4075 3.48215 15.2304C3.64733 15.0532 3.77571 14.8439 3.85955 14.6148C3.9434 14.3858 3.98099 14.1418 3.97007 13.8976C3.97007 12.4973 3.97007 11.0969 3.97007 9.69165C3.96621 9.27506 3.9949 8.85882 4.05587 8.44687C4.13275 8.02525 4.36328 7.64896 4.70108 7.39367C5.03889 7.13838 5.45893 7.02303 5.87672 7.07082C6.28512 7.10223 6.66826 7.28451 6.95433 7.58349C7.2404 7.88246 7.40975 8.27761 7.43064 8.69486C7.45447 9.21027 7.43064 9.72568 7.43064 10.2411C7.43064 11.4956 7.43064 12.7501 7.43064 14.0046C7.42574 14.3685 7.53183 14.7249 7.73422 15.0245C7.93661 15.3242 8.22529 15.5523 8.56033 15.6773C9.77582 16.1927 11.0151 15.2883 11.039 13.8636C11.039 12.2055 11.039 10.5474 11.0866 8.88935C11.1027 8.48854 11.2228 8.09925 11.4346 7.76128C11.6363 7.46326 11.9286 7.24129 12.2663 7.12968C12.6041 7.01806 12.9684 7.02301 13.3031 7.14375C13.6807 7.25169 14.0107 7.48791 14.2387 7.81332C14.4667 8.13872 14.5789 8.53379 14.5567 8.93311C14.5567 10.6106 14.5567 12.2882 14.5567 13.9657C14.5567 14.2064 14.6032 14.4448 14.6935 14.6672C14.7838 14.8896 14.9162 15.0917 15.0831 15.2619C15.2499 15.4321 15.4481 15.5672 15.6661 15.6593C15.8841 15.7514 16.1178 15.7988 16.3538 15.7988C16.5898 15.7988 16.8234 15.7514 17.0415 15.6593C17.2595 15.5672 17.4576 15.4321 17.6244 15.2619C17.7913 15.0917 17.9237 14.8896 18.014 14.6672C18.1043 14.4448 18.1508 14.2064 18.1508 13.9657C18.1508 12.2493 18.1508 10.562 18.1508 8.82128C18.154 7.62619 17.7591 6.46544 17.0306 5.52943Z" fill="white"/>
<path d="M26.0349 6.50162L25.4676 6.26337C26.0301 5.81603 26.564 5.4319 27.0406 4.99428C27.4641 4.65415 27.8297 4.24508 28.1227 3.78354C28.9806 2.14978 27.7699 0.24858 25.849 0.204818C24.0758 0.180506 22.3074 0.180506 20.5342 0.180506C20.317 0.165195 20.0991 0.196902 19.8947 0.273547C19.6904 0.350191 19.5042 0.470042 19.3485 0.625235C19.1928 0.780428 19.071 0.967457 18.9911 1.17405C18.9112 1.38065 18.875 1.60214 18.8849 1.824C18.8637 2.04997 18.8909 2.27795 18.9646 2.49213C19.0384 2.70632 19.1569 2.90158 19.312 3.0644C19.467 3.22721 19.655 3.35368 19.8627 3.43504C20.0705 3.5164 20.2931 3.5507 20.5151 3.53556C21.3826 3.53556 22.2502 3.53556 23.1177 3.53556C23.2655 3.58419 23.418 3.58419 23.704 3.58419C22.5266 4.55666 21.4398 5.48052 20.3673 6.39465C19.6762 6.97814 19.4665 7.61511 19.7096 8.33961C19.8387 8.69722 20.0793 9.00173 20.3944 9.20639C20.7096 9.41105 21.0819 9.50455 21.4541 9.47255C22.3741 9.47255 23.2988 9.47255 24.2188 9.47255C24.4251 9.43364 24.6373 9.44151 24.8403 9.49562C25.0433 9.54973 25.2321 9.64874 25.3934 9.78563C25.5547 9.92253 25.6845 10.0939 25.7735 10.2877C25.8626 10.4815 25.9088 10.6929 25.9088 10.907C25.9088 11.121 25.8626 11.3324 25.7735 11.5262C25.6845 11.72 25.5547 11.8914 25.3934 12.0283C25.2321 12.1652 25.0433 12.2642 24.8403 12.3183C24.6373 12.3724 24.4251 12.3803 24.2188 12.3414C23.0271 12.3414 21.8355 12.3414 20.6438 12.3414C20.2261 12.3644 19.8329 12.5499 19.5452 12.8597C19.2575 13.1695 19.0971 13.58 19.0971 14.0067C19.0971 14.4335 19.2575 14.844 19.5452 15.1538C19.8329 15.4636 20.2261 15.6491 20.6438 15.6721C21.8879 15.6721 23.1368 15.6721 24.3808 15.6721C25.4737 15.6438 26.5238 15.2332 27.3552 14.5091C28.1866 13.7849 28.7487 12.7913 28.9473 11.6947C29.1056 10.621 28.9042 9.52429 28.3757 8.58189C27.8472 7.63949 27.0224 6.90654 26.0349 6.50162Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,4 @@
<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="35" cy="35" r="34" stroke="#303030" stroke-width="2"/>
<path d="M59.9828 20.3127C58.1893 21.0994 56.2783 21.6209 54.2859 21.8741C56.3356 20.6503 57.9 18.7272 58.6354 16.4093C56.7244 17.5487 54.6145 18.3535 52.3659 18.8026C50.5513 16.8705 47.9651 15.6738 45.1438 15.6738C39.67 15.6738 35.2632 20.1168 35.2632 25.5635C35.2632 26.3472 35.3295 27.1007 35.4923 27.8181C27.2725 27.4172 19.9992 23.4776 15.1132 17.4763C14.2602 18.9563 13.7598 20.6503 13.7598 22.4739C13.7598 25.898 15.5231 28.9334 18.1515 30.6906C16.563 30.6605 15.0047 30.1993 13.6845 29.4729C13.6845 29.503 13.6845 29.5422 13.6845 29.5814C13.6845 34.3861 17.1116 38.3769 21.6058 39.2962C20.801 39.5163 19.9239 39.6218 19.0136 39.6218C18.3806 39.6218 17.7416 39.5856 17.1418 39.453C18.4228 43.3684 22.058 46.247 26.3803 46.3404C23.0165 48.9718 18.7453 50.5573 14.1215 50.5573C13.3107 50.5573 12.533 50.5212 11.7554 50.4217C16.135 53.246 21.3255 54.8586 26.9229 54.8586C45.1167 54.8586 55.0636 39.7875 55.0636 26.7239C55.0636 26.2869 55.0485 25.8649 55.0274 25.4459C56.9897 24.0533 58.6385 22.3141 59.9828 20.3127Z" fill="#303030"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,4 @@
<svg width="66" height="66" viewBox="0 0 66 66" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M66 33C66 51.2254 51.2254 66 33 66C14.7746 66 0 51.2254 0 33C0 14.7746 14.7746 0 33 0C51.2254 0 66 14.7746 66 33Z" fill="#C4C4C4"/>
<path d="M44.7428 36.3959C44.741 36.6959 44.6177 36.9953 44.373 37.226L44.3728 37.2261C43.8668 37.7035 43.037 37.7035 42.5311 37.2261L42.5232 37.2345L42.5311 37.2261L33.3457 28.5599L33.0712 28.3009L32.7967 28.5599L23.6118 37.2258C23.1055 37.7033 22.2757 37.7032 21.7698 37.2259L21.7697 37.2258C21.5257 36.9957 21.4025 36.6972 21.4 36.398C21.4019 36.0981 21.5251 35.7986 21.7698 35.5678L21.7698 35.5678L32.1506 25.7738C32.4013 25.5373 32.7333 25.4158 33.0712 25.4158C33.4093 25.4158 33.7415 25.5376 33.9922 25.774L44.3728 35.568L44.3729 35.5681C44.6171 35.7983 44.7403 36.0968 44.7428 36.3959Z" fill="white" stroke="white" stroke-width="0.8"/>
</svg>

After

Width:  |  Height:  |  Size: 887 B

View File

@ -0,0 +1,7 @@
<svg width="46" height="16" viewBox="0 0 46 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M32.8808 5.99083H31.2736V11.4557C31.2736 11.558 31.1852 11.6456 31.0819 11.6456H29.8434C29.7402 11.6456 29.6517 11.558 29.6517 11.4557V5.99083H28.0298C27.9856 5.99083 27.9266 5.97622 27.8971 5.94699C27.8676 5.91777 27.8381 5.87394 27.8381 5.81549V4.8511C27.8381 4.80727 27.8529 4.74882 27.8971 4.7196C27.9266 4.69037 27.9856 4.66115 28.0298 4.67576H32.8808C32.984 4.67576 33.0725 4.74882 33.0725 4.8511V5.81549C33.0725 5.91777 32.984 5.99083 32.8808 5.99083Z" fill="white"/>
<path d="M38.0558 11.6017C37.4218 11.6893 36.773 11.7332 36.139 11.7186C34.9152 11.7186 33.8389 11.4117 33.8389 9.70213V6.5898C33.8389 4.88021 34.93 4.58797 36.1538 4.58797C36.7878 4.57336 37.4218 4.6172 38.0558 4.70487C38.1885 4.71948 38.2475 4.77793 38.2475 4.89482V5.77154C38.2475 5.87382 38.159 5.96149 38.0558 5.96149H36.0653C35.623 5.96149 35.4608 6.10761 35.4608 6.60441V7.4519H37.9821C38.0853 7.4519 38.1738 7.53957 38.1738 7.64186V8.53318C38.1738 8.63547 38.0853 8.72314 37.9821 8.72314H35.4608V9.71674C35.4608 10.1989 35.623 10.3597 36.0653 10.3597H38.0558C38.159 10.3597 38.2475 10.4473 38.2475 10.5496V11.4263C38.2475 11.5286 38.1885 11.5871 38.0558 11.6017Z" fill="white"/>
<path d="M45.1924 11.6455H43.6884C43.5852 11.6601 43.482 11.6016 43.4378 11.4993L42.1255 9.45367L40.9459 11.4555C40.8869 11.5724 40.8132 11.6455 40.71 11.6455H39.3093C39.2798 11.6455 39.2355 11.6455 39.206 11.6162C39.1766 11.587 39.1618 11.5578 39.1618 11.5139C39.1618 11.4847 39.1766 11.4701 39.1766 11.4555L41.2261 8.06555L39.1471 4.85094C39.1323 4.83632 39.1323 4.8071 39.1323 4.79249C39.1323 4.71943 39.206 4.66098 39.2798 4.67559H40.828C40.9312 4.67559 41.0049 4.76327 41.0639 4.85094L42.2729 6.75048L43.4525 4.85094C43.4967 4.74865 43.5852 4.69021 43.6884 4.67559H45.0891C45.1629 4.67559 45.2366 4.71943 45.2366 4.79249C45.2366 4.8071 45.2218 4.83632 45.2218 4.85094L43.1576 8.09477L45.3103 11.4555C45.3251 11.4847 45.3398 11.5139 45.3398 11.5432C45.3251 11.6016 45.2661 11.6455 45.1924 11.6455Z" fill="white"/>
<path d="M25.5821 4.69067C25.5083 4.69067 25.4494 4.73451 25.4346 4.80757L24.0634 9.84866C24.0486 9.95094 24.0191 9.99478 23.9307 9.99478C23.8422 9.99478 23.8127 9.95094 23.798 9.84866L22.4267 4.80757C22.412 4.73451 22.353 4.69067 22.2793 4.69067H20.9228C20.8785 4.69067 20.8343 4.70529 20.8048 4.74912C20.7753 4.77834 20.7606 4.82218 20.7753 4.86602C20.7753 4.86602 22.4562 10.6523 22.4709 10.7108C22.6921 11.3975 23.2377 11.7336 23.9307 11.7336C24.5942 11.7628 25.1987 11.3391 25.3904 10.7108C25.4199 10.6377 27.0565 4.86602 27.0565 4.86602C27.0713 4.82218 27.0565 4.77834 27.027 4.74912C26.9975 4.7199 26.9533 4.69067 26.9091 4.69067H25.5821Z" fill="white"/>
<path d="M17.9149 0H3.80428C3.28822 0 2.81639 0.277625 2.56573 0.70137C2.30033 1.13973 2.28559 1.68037 2.5215 2.11872L3.93698 4.77808H1.37142C1.04704 4.77808 0.737403 4.93881 0.560467 5.21644C0.383532 5.49406 0.383532 5.84475 0.530978 6.13699L5.07231 14.6411C5.2345 14.9479 5.55889 15.1379 5.89801 15.1379C6.23714 15.1379 6.56152 14.9479 6.72371 14.6411L7.96225 12.3324L9.51044 15.2402C9.7611 15.7078 10.2624 16 10.7932 16C11.324 16 11.8253 15.7078 12.076 15.2402L19.1534 2.04566C19.3893 1.60731 19.3746 1.08128 19.1092 0.672146C18.8733 0.248402 18.4014 0 17.9149 0ZM11.6042 5.56712L8.5078 11.3242C8.40459 11.5288 8.19817 11.6457 7.96225 11.6457C7.72634 11.6457 7.51992 11.5142 7.4167 11.3242L4.36457 5.62557C4.27611 5.45023 4.27611 5.24566 4.37932 5.07032C4.48253 4.89498 4.67421 4.79269 4.86589 4.79269H11.1176C11.3093 4.79269 11.4862 4.88036 11.5747 5.0411C11.6926 5.20183 11.6926 5.40639 11.6042 5.56712Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,11 @@
<svg width="66" height="66" viewBox="0 0 66 66" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4336_1042)">
<path d="M33.0083 0H32.9917C14.7964 0 0 14.8005 0 33C0 40.2188 2.3265 46.9095 6.28237 52.3421L2.16975 64.6016L14.8541 60.5468C20.0723 64.0035 26.2969 66 33.0083 66C51.2036 66 66 51.1954 66 33C66 14.8046 51.2036 0 33.0083 0Z" fill="#4CAF50"/>
<path d="M52.2103 46.6001C51.4142 48.8483 48.2544 50.7128 45.734 51.2573C44.0098 51.6244 41.7575 51.9173 34.1758 48.774C24.4779 44.7563 18.2326 34.9016 17.7459 34.2623C17.2798 33.6229 13.8271 29.0441 13.8271 24.3086C13.8271 19.5731 16.232 17.2673 17.2014 16.2773C17.9975 15.4646 19.3134 15.0934 20.5756 15.0934C20.984 15.0934 21.3511 15.114 21.6811 15.1305C22.6505 15.1718 23.1373 15.2295 23.7766 16.7599C24.5728 18.678 26.5115 23.4135 26.7425 23.9003C26.9776 24.387 27.2128 25.047 26.8828 25.6864C26.5734 26.3464 26.3011 26.6393 25.8144 27.2003C25.3276 27.7613 24.8656 28.1903 24.3789 28.7925C23.9334 29.3164 23.4301 29.8774 23.9911 30.8468C24.5521 31.7955 26.4909 34.9594 29.3454 37.5004C33.029 40.7798 36.0155 41.8275 37.0839 42.273C37.88 42.603 38.8288 42.5246 39.4104 41.9059C40.1488 41.1098 41.0604 39.7898 41.9885 38.4904C42.6485 37.5581 43.4818 37.4426 44.3563 37.7726C45.2473 38.082 49.9622 40.4126 50.9315 40.8953C51.9009 41.382 52.5403 41.613 52.7754 42.0214C53.0064 42.4298 53.0064 44.3479 52.2103 46.6001Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_4336_1042">
<rect width="66" height="66" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,4 @@
<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="35" cy="35" r="34" stroke="#303030" stroke-width="2"/>
<path d="M55.6053 24.4975C55.0893 22.5794 53.5771 21.0674 51.6593 20.5509C48.1557 19.5923 34.1411 19.5923 34.1411 19.5923C34.1411 19.5923 20.127 19.5923 16.6234 20.5146C14.7425 21.0305 13.1933 22.5797 12.6774 24.4975C11.7554 28.0008 11.7554 35.2662 11.7554 35.2662C11.7554 35.2662 11.7554 42.5682 12.6774 46.0349C13.1939 47.9527 14.7056 49.4647 16.6237 49.9812C20.1639 50.9401 34.1416 50.9401 34.1416 50.9401C34.1416 50.9401 48.1557 50.9401 51.6593 50.0178C53.5773 49.5016 55.0893 47.9896 55.6058 46.0718C56.5276 42.5682 56.5276 35.3031 56.5276 35.3031C56.5276 35.3031 56.5644 28.0008 55.6053 24.4975ZM29.6791 41.9782V28.5542L41.333 35.2662L29.6791 41.9782Z" fill="#303030"/>
</svg>

After

Width:  |  Height:  |  Size: 846 B

12
src/assets/svg/cart.svg Normal file
View File

@ -0,0 +1,12 @@
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3715_4730)">
<path d="M27.823 4.07236C27.6697 3.88079 27.4377 3.76928 27.1923 3.76928H5.69581L5.09469 1.16451C5.01009 0.798054 4.68377 0.538452 4.30768 0.538452H0.80768C0.361648 0.538452 0 0.9001 0 1.34619C0 1.79227 0.361648 2.15387 0.80768 2.15387H3.66516L7.7455 19.8355C7.83005 20.2019 8.15642 20.4615 8.53251 20.4615H24.7154C25.1614 20.4615 25.523 20.0999 25.523 19.6539C25.523 19.2078 25.1614 18.8462 24.7154 18.8462H9.17509L8.55384 16.1539H24.7693C25.1471 16.1539 25.4744 15.892 25.5573 15.5235L27.9803 4.75426C28.0342 4.51483 27.9763 4.26398 27.823 4.07236Z" fill="white"/>
<path d="M11.8461 21.5385C10.2132 21.5385 8.88458 22.867 8.88458 24.5C8.88458 26.133 10.2131 27.4615 11.8461 27.4615C13.4791 27.4615 14.8077 26.133 14.8077 24.5C14.8077 22.867 13.4792 21.5385 11.8461 21.5385Z" fill="white"/>
<path d="M21.5385 21.5385C19.9055 21.5385 18.5769 22.867 18.5769 24.5C18.5769 26.133 19.9054 27.4615 21.5385 27.4615C23.1714 27.4615 24.5 26.133 24.5 24.5C24.5 22.867 23.1715 21.5385 21.5385 21.5385Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_3715_4730">
<rect width="28" height="28" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

10
src/assets/svg/lupa.svg Normal file
View File

@ -0,0 +1,10 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_6775_39)">
<path d="M13.2094 11.6187C14.0951 10.4091 14.6249 8.92334 14.6249 7.31267C14.6249 3.2807 11.3444 0.000183105 7.31245 0.000183105C3.28048 0.000183105 0 3.2807 0 7.31267C0 11.3446 3.28052 14.6252 7.31248 14.6252C8.92315 14.6252 10.409 14.0953 11.6186 13.2095L16.4092 18.0001L18 16.4093C18 16.4092 13.2094 11.6187 13.2094 11.6187V11.6187ZM7.31248 12.3751C4.52086 12.3751 2.25001 10.1043 2.25001 7.31267C2.25001 4.52104 4.52086 2.25019 7.31248 2.25019C10.1041 2.25019 12.375 4.52104 12.375 7.31267C12.375 10.1043 10.1041 12.3751 7.31248 12.3751Z" fill="#303030"/>
</g>
<defs>
<clipPath id="clip0_6775_39">
<rect width="18" height="18" rx="5" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 812 B

View File

@ -0,0 +1,37 @@
import styles from "./styles.module.scss";
import Exit from "../../assets/svg/Exit.svg";
import { useAside } from "../../contexts/asideMenuContext";
export default function AsideMenu() {
const { setAsideMenuOpen, isAsideMenuOpen } = useAside();
return (
<div
className={`${styles.blackout} ${
isAsideMenuOpen ? "" : styles.invisible
}`}
>
<div
className={`${styles.container} ${
isAsideMenuOpen ? "" : styles.closed
}`}
>
<div className={styles.in_out}>
<button className={styles.in_button}>ENTRAR</button>
<button
onClick={() => {
setAsideMenuOpen(false);
}}
className={styles.out_button}
>
<img src={Exit} alt="botão de sair" />
</button>
</div>
<div className={styles.aside_buttons_div}>
<button className={styles.aside_buttons}>CURSOS</button>
<button className={styles.aside_buttons}>SAIBA MAIS</button>
<button className={styles.aside_buttons}>INSTITUCIONAIS</button>
</div>
</div>
</div>
);
}

View File

@ -0,0 +1,64 @@
.blackout {
position: fixed;
inset: 0;
background: rgba(69, 69, 69, 0.7);
z-index: 999;
}
.closed {
transform: translateX(-100%);
}
.invisible {
visibility: hidden;
pointer-events: none;
}
.container {
position: absolute;
transition: 0.3s;
left: 0%;
right: 3.52%;
top: 0%;
bottom: 57.02%;
}
.in_out {
display: flex;
justify-content: space-between;
background-color: black;
padding: 31px 0 31px 16px;
.in_button {
background-color: black;
color: white;
border: 0;
font-weight: 400;
font-size: 14px;
line-height: 16px;
}
.out_button {
background-color: black;
color: white;
border: 0;
padding-right: 16px;
}
}
.aside_buttons_div {
display: flex;
flex-direction: column;
gap: 12px;
background-color: white;
height: 585px;
padding: 31px 0 0 16px;
.aside_buttons {
display: flex;
border: 0;
justify-content: flex-start;
background-color: white;
font-weight: 500;
font-size: 14px;
line-height: 16px;
color: #c4c4c4;
}
}

View File

@ -0,0 +1,157 @@
import { Field, Form, Formik } from "formik";
import styles from "./styles.module.scss";
import * as yup from "yup";
import "yup-phone";
import { cpf } from "cpf-cnpj-validator";
import { useState } from "react";
export default function ContactForm() {
const [hasConfirmed, setConfirmed] = useState(false);
const validationSchema = yup.object().shape({
name: yup
.string()
.min(3, "*Erro, Nome Inválido")
.required("*Campo Obrigatório"),
email: yup
.string()
.email("*Erro, Email inválido")
.required("*Campo Obrigatório"),
CPF: yup
.string()
.required("*Campo Obrigatório")
.test("Válida CPF", "*Erro, CPF inválido", (CPF = "") =>
cpf.isValid(CPF, true)
),
birthDate: yup.string().required("*Campo Obrigatório"),
phone: yup
.string()
.required("*Campo Obrigatório")
.phone("BR", false, "*Erro, Telefone inválido"),
instagram: yup.string(),
check: yup.boolean().oneOf([true]).required("*Campo Obrigatório"),
});
return (
<div>
<h2 className={styles.form_title}>Preencha o formulário</h2>
<Formik
validationSchema={validationSchema}
onSubmit={() => {
setConfirmed(true);
}}
initialValues={{
name: "",
email: "",
CPF: "",
birthDate: "",
phone: "",
instagram: "",
check: false,
}}
>
{({ errors, touched }) => (
<div className={styles.contact_form}>
<Form>
<div>
<label className={styles.label_form} htmlFor="name">
Nome:
</label>
{errors.name && touched.name && (
<span className={styles.span_form}>{errors.name}</span>
)}
<Field
type="text"
name="name"
placeholder="Seu nome completo"
className={styles.Field}
/>
</div>
<div>
<label className={styles.label_form} htmlFor="email">
E-mail:
</label>
{errors.email && touched.email && (
<span className={styles.span_form}>{errors.email}</span>
)}
<Field
type="email"
name="email"
placeholder="Seu e-mail"
className={styles.Field}
/>
</div>
<div>
<label className={styles.label_form} htmlFor="CPF">
CPF:
</label>
{errors.CPF && touched.CPF && (
<span className={styles.span_form}>{errors.CPF}</span>
)}
<Field
type="text"
name="CPF"
placeholder="000.000.000-00"
className={styles.Field}
/>
</div>
<div>
<label className={styles.label_form} htmlFor="birthDate">
Data de Nascimento:
</label>
{errors.birthDate && touched.birthDate && (
<span className={styles.span_form}>{errors.birthDate}</span>
)}
<Field
type="text"
name="birthDate"
placeholder="00.00.0000"
className={styles.Field}
/>
</div>
<div>
<label className={styles.label_form} htmlFor="phone">
Telefone:
</label>
{errors.phone && touched.phone && (
<span className={styles.span_form}>{errors.phone}</span>
)}
<Field
type="tel"
name="phone"
placeholder="(00) 0000-0000"
className={styles.Field}
/>
</div>
<div>
<label className={styles.label_form} htmlFor="instagram">
Instagram:
</label>
<Field
type="text"
name="instagram"
placeholder="@seuuser"
className={styles.Field}
/>
</div>
<div className={styles.confirm_form}>
<span>*</span>
<label htmlFor="check">Declaro que li e aceito</label>
<Field
type="checkbox"
name="check"
className={styles.Field_confirm}
/>
</div>
<button>CADASTRE-SE</button>
{hasConfirmed && (
<span className={styles.confirm_span}>
*Formulário enviado com sucesso!
</span>
)}
</Form>
</div>
)}
</Formik>
</div>
);
}

View File

@ -0,0 +1,144 @@
.form_title {
font-weight: 700;
font-size: 1.88vw;
line-height: 28px;
}
.contact_form {
.Field {
width: 748px;
font-size: 1.09vw;
line-height: 16px;
padding: 11px 16px;
max-height: 46px;
border: 1px solid #100d0e;
border-radius: 25px;
&::placeholder {
color: #b9b7b7;
}
}
form {
> div {
position: relative;
gap: 12px;
display: flex;
flex-direction: column;
}
gap: 12px;
display: flex;
flex-direction: column;
button {
min-height: 52.44px;
background: #000000;
color: white;
font-weight: 400;
font-size: 16px;
line-height: 19px;
border-radius: 25px;
cursor: pointer;
letter-spacing: 0.05em;
}
}
.label_form {
margin-left: 15px;
font-weight: 400;
font-size: 1.09vw;
line-height: 16px;
color: #100d0e;
}
.span_form {
position: absolute;
right: 10px;
top: 14px;
font-weight: 400;
font-size: 12px;
line-height: 14px;
text-align: right;
color: #ff0000;
}
.confirm_form {
gap: 4px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: row;
span {
cursor: pointer;
color: #ff0000;
font-weight: 400;
font-size: 0.93vw;
line-height: 1.09vw;
}
label {
text-decoration: underline;
cursor: pointer;
font-weight: 400;
font-size: 1.09vw;
line-height: 1.25vw;
}
.Field_confirm {
cursor: pointer;
width: 18.64px;
height: 18px;
}
}
.confirm_span {
font-weight: 400;
font-size: 0.93vw;
line-height: 1.09vw;
color: #008000;
}
}
@media screen and (min-width: 2500px) {
.contact_form {
.Field {
width: 1680px;
max-height: 63px;
}
form {
button {
min-height: 71px;
font-size: 38px;
}
}
.span_form {
font-size: 24px;
line-height: 5px;
}
}
}
@media screen and (max-width: 1024px) {
.form_title {
margin-top: 30px !important;
}
.contact_form {
.Field {
width: 100% !important;
font-size: 14px;
line-height: 16px;
}
.label_form {
font-size: 14px;
line-height: 16px;
}
.confirm_form {
span {
font-size: 14px;
line-height: 16px;
}
label {
font-size: 14px;
line-height: 16px;
}
}
.confirm_span {
font-size: 12px;
line-height: 14px;
}
}
}

View File

@ -0,0 +1,120 @@
import styles from "./styles.module.scss";
import M3Svg from "../../assets/svg/M3whitelogo.svg";
import eloImg from "../../assets/img/eloM3Academy.png";
import visaImg from "../../assets/img/visaM3Academy.png";
import amexImg from "../../assets/img/amexM3Academy.png";
import vtexSvg from "../../assets/svg/Vtexwhitelogo.svg";
import vtexPCI from "../../assets/img/vtexPCIM3Academy.png";
import payPalImg from "../../assets/img/payPalM3Academy.png";
import boletoImg from "../../assets/img/boletoM3Academy.png";
import twitterSvg from "../../assets/svg/Twitterlogo.svg";
import youtubeSvg from "../../assets/svg/Youtubelogo.svg";
import linkedinSvg from "../../assets/svg/Linkedinlogo.svg";
import facebookSvg from "../../assets/svg/Facebooklogo.svg";
import instagramSvg from "../../assets/svg/Instagramlogo.svg";
import hiperCardImg from "../../assets/img/hiperCardM3Academy.png";
import masterCardImg from "../../assets/img/masterCardM3Academy.png";
export default function Footer() {
return (
<footer>
<div className={styles.news_letter}>
<div className={styles.first_div_news}>
<div className={styles.container_news}>
<h2 className={styles.news_letter_title}>
assine nossa newsletter
</h2>
<div className={styles.second_div_news}>
<input
type="email"
placeholder="E-mail"
className={styles.news_input}
/>
<button className={styles.news_button}>enviar</button>
</div>
</div>
</div>
</div>
<div className={styles.footer_top}>
<div className={styles.menu_list}>
<div>
<h2 className={styles.menu_list_title}>INSTITUCIONAL</h2>
<a>Quem Somos</a>
<a>Política de Privacidade</a>
<a>Segurança</a>
<span>Seja um Revendedor</span>
</div>
<div>
<h2 className={styles.menu_list_title}>DÚVIDAS</h2>
<a>Entrega</a>
<a>Pagamento</a>
<a>Troca e Devoluções</a>
<span>Dúvidas Frequentes</span>
</div>
<div>
<h2 className={styles.menu_list_title}>FALE CONOSCO</h2>
<a>Atendimento Ao Consumidor</a>
<a>(11) 4159-9504</a>
<a>Atendimento Online</a>
<span>(11) 99433-8825</span>
</div>
</div>
<div className={styles.redes_sociais}>
<div className={styles.redes_sociais_svg}>
<a target="_blank" href="https://www.facebook.com/digitalm3">
<img src={facebookSvg} alt="logo do facebook" />
</a>
<a
target="_blank"
href="https://www.instagram.com/m3.ecommerce/?theme=dark"
>
<img src={instagramSvg} alt="logo do instagram" />
</a>
<a href="">
<img src={twitterSvg} alt="logo do twitter" />
</a>
<a target="_blank" href="https://www.youtube.com/@m3e-commerce796">
<img src={youtubeSvg} alt="logo do youtube" />
</a>
<a
target="_blank"
href="https://www.linkedin.com/company/m3ecommerce/"
>
<img src={linkedinSvg} alt="logo do linkedin" />
</a>
</div>
<div>
<p>www.loremipsum.com</p>
</div>
</div>
</div>
<div className={styles.footer_bottom}>
<p>
Lorem Ipsum Dolor Sit Amet, Consectetur Adipiscing <br /> Elit, Sed Do
Eiusmod Tempor
</p>
<div className={styles.pagamentos}>
<div className={styles.bandeiras}>
<img src={masterCardImg} alt="Bandeira MasterCard" />
<img src={visaImg} alt="Bandeira Visa" />
<img src={amexImg} alt="Bandeira AmericanExpress" />
<img src={eloImg} alt="Bandeira Elo" />
<img src={hiperCardImg} alt="Bandeira HiperCard" />
<img src={payPalImg} alt="Bandeira PayPal" />
<img src={boletoImg} alt="Bandeira Boleto" />
</div>
<span className={styles.traço}></span>
<div className={styles.certificado}>
<img src={vtexPCI} alt="Certificado Vtex" />
</div>
</div>
<div className={styles.logos}>
<p>Powered By</p>
<img src={vtexSvg} alt="vtex logo" />
<p>Developed By</p>
<img src={M3Svg} alt="M3 logo" />
</div>
</div>
</footer>
);
}

View File

@ -0,0 +1,384 @@
// --------------------- News Letter --------------------- //
.news_letter {
border-width: 1px 0px;
border-style: solid;
border-color: #000000;
width: 100%;
display: flex;
justify-content: center;
.first_div_news {
width: 37.03%;
display: flex;
flex-direction: column;
h2 {
padding: 16px 0 8px;
display: flex;
margin: auto;
text-transform: uppercase;
font-weight: 500;
font-size: 18px;
letter-spacing: 0.05em;
color: #303030;
margin-left: 0;
}
.second_div_news {
display: flex;
justify-content: center;
gap: 8px;
padding-bottom: 16px;
.news_input {
width: 71.73%;
font-weight: 400;
font-size: 14px;
padding: 11px 16px;
max-height: 42px;
border: 1px solid #e5e5e5;
border-radius: 4px;
&::placeholder {
color: #c4c4c4;
}
}
.news_button {
width: 26.58%;
min-height: 42px;
background: #000000;
text-transform: uppercase;
color: white;
font-weight: 700;
font-size: 12px;
border: 0;
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
border-radius: 4px;
cursor: pointer;
}
}
}
}
@media screen and (min-width: 2500px) {
.news_letter_title {
font-size: 36px !important;
}
.news_input {
max-height: unset !important;
height: 59px;
font-size: 28px !important;
}
.news_button {
height: 59px;
font-size: 24px !important;
}
}
@media screen and (max-width: 1024px) {
.first_div_news {
width: 96.88% !important;
h2 {
font-size: 14px;
}
.second_div_news {
flex-direction: column;
width: 100%;
.news_input {
width: 100% !important;
}
.news_button {
width: 100% !important;
box-shadow: none !important;
border-radius: 0 !important;
}
}
}
}
// --------------------- Footer Top --------------------- //
.footer_top {
display: flex;
justify-content: space-between;
padding: 50px 7.81vw;
gap: 12.34vw;
.menu_list {
display: flex;
gap: 9.45vw;
.menu_list_title {
font-weight: 500;
font-weight: bold;
font-size: 1.09vw;
display: flex;
justify-content: flex-start;
}
a {
font-size: 0.93vw;
white-space: nowrap;
display: flex;
justify-content: flex-start;
}
span {
cursor: pointer;
font-size: 0.93vw;
white-space: nowrap;
display: flex;
justify-content: flex-start;
text-decoration: underline;
}
> div {
display: flex;
flex-direction: column;
gap: 12px;
}
}
.redes_sociais {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 12px;
p {
font-weight: 400;
font-size: 1.09vw;
line-height: 16px;
color: #303030;
}
}
.redes_sociais_svg {
display: flex;
gap: 0.78vw;
a {
height: 35px;
}
img {
height: 35px;
}
}
}
@media screen and (min-width: 2500px) {
.redes_sociais_svg {
a {
height: 70px !important;
}
img {
height: 70px !important;
}
}
}
@media screen and (max-width: 1024px) {
.footer_top {
padding: 24px 0 24px 16px;
display: flex;
flex-direction: column;
gap: 12px;
.menu_list {
display: flex;
flex-direction: column;
gap: 12px;
.menu_list_title {
font-weight: 500;
font-weight: bold;
font-size: 1.09vw;
display: flex;
justify-content: flex-start;
}
a {
display: none;
}
span {
display: none;
}
}
.redes_sociais {
p {
font-size: 14px;
line-height: 16px;
}
}
.redes_sociais_svg {
img {
width: 35px;
}
}
}
}
@media screen and (max-width: 375px) {
.menu_list {
.menu_list_title {
font-size: 14px !important;
line-height: 16px !important;
}
}
}
// --------------------- Footer Bottom --------------------- //
.footer_bottom {
justify-content: space-between;
background-color: #000000;
display: flex;
align-items: center;
min-height: 64px;
padding: 0 7.81%;
p {
white-space: nowrap;
color: #ffffff;
font-weight: 400;
font-size: 0.78vw;
line-height: 0.93vw;
width: 18.28vw;
text-align: left;
}
.pagamentos {
display: flex;
align-items: center;
gap: 12px;
.bandeiras {
display: flex;
justify-content: center;
align-items: center;
gap: 12px;
margin-left: 8.63vw;
img {
width: 2.81vw;
}
}
.traço {
border-left: solid 1px #c4c4c4;
height: 24px;
}
.certificado {
display: flex;
justify-content: center;
align-items: center;
img {
width: 4.27vw;
}
}
}
.logos {
margin-left: 8.63vw;
gap: 13px;
display: flex;
p {
font-weight: 400;
font-size: 0.93vw;
line-height: 1.09vw;
white-space: nowrap;
width: unset;
display: flex;
justify-content: flex-end;
align-items: center;
}
}
}
@media screen and (min-width: 2500px) {
.footer_bottom {
.logos {
height: 30px;
}
.pagamentos {
.certificado {
padding: 15px 0;
}
}
}
}
@media screen and (max-width: 1024px) {
.footer_bottom {
flex-direction: column;
align-items: flex-start;
padding-left: 16px;
gap: 15px;
p {
font-size: 10px !important;
line-height: 12px !important;
text-transform: capitalize;
}
.pagamentos {
margin-top: 15px;
order: -1;
.certificado {
img {
width: 54.61px;
}
}
.bandeiras {
margin-left: unset;
img {
width: 36px;
}
}
}
.logos {
margin-left: unset;
margin-bottom: 15px;
p {
font-size: 10px !important;
line-height: 12px !important;
}
}
}
}
@media screen and (max-width: 375px) {
.footer_bottom {
padding-left: 16px !important;
padding: 0;
.pagamentos {
.bandeiras {
gap: 11px;
img {
max-width: 30px;
width: 100%;
height: auto;
}
}
.certificado {
gap: 11px;
img {
max-width: 45px;
width: 100%;
height: auto;
}
}
}
}
}

View File

@ -0,0 +1,48 @@
import styles from "./styles.module.scss";
import M3Logo from "../../assets/svg/M3logo.svg";
import Lupa from "../../assets/svg/lupa.svg";
import Cart from "../../assets/svg/cart.svg";
import AsideMenu from "../../assets/svg/Aside.svg";
import { useAside } from "../../contexts/asideMenuContext";
export default function Header() {
const { setAsideMenuOpen } = useAside();
return (
<>
<header>
<div className={styles.header_top}>
<div className={styles.first_div}>
<button
onClick={() => {
setAsideMenuOpen(true);
}}
className={styles.aside_menu}
>
<img src={AsideMenu} alt="Aside Menu" />
</button>
<a href="/">
<img className={styles.m3_logo} src={M3Logo} alt="logo m3" />
</a>
<div className={styles.search}>
<input type="text" placeholder="Buscar..."></input>
<img src={Lupa} alt="lupa" />
</div>
<div className={styles.header_button}>
<button className={styles.button_entrar}>Entrar</button>
<button className={styles.cart_button}>
<img src={Cart} alt="carrinho de compra" />
</button>
</div>
</div>
</div>
<div className={styles.header_bottom}>
<button className={styles.header_bottom_button}>cursos</button>
<button className={styles.header_bottom_button}>saiba mais</button>
<button className={styles.header_bottom_button}>
institucionais
</button>
</div>
</header>
</>
);
}

View File

@ -0,0 +1,189 @@
// --------------------- Header Top --------------------- //
.header_top {
position: relative;
background: black;
padding: 25px 0;
color: white;
.aside_menu {
display: none;
}
.first_div {
display: flex;
align-items: center;
justify-content: space-between;
.m3_logo {
height: 2.02vw;
display: flex;
padding-left: 7.81vw;
}
.search {
position: relative;
display: flex;
align-items: center;
justify-content: center;
gap: 3.79%;
input {
padding-left: 16px;
width: 20.63vw;
background: white;
border-radius: 5px;
border: 2px solid #f2f2f2;
display: flex;
height: 32px;
border: 0;
font-size: 1.09vw;
&::placeholder {
color: #c4c4c4;
}
}
img {
cursor: pointer;
height: 1.41vw;
display: flex;
position: absolute;
right: 16px;
}
}
.header_button {
display: flex;
gap: 55px;
padding-right: 7.81vw;
height: 28px;
.button_entrar {
cursor: pointer;
justify-content: center;
text-transform: uppercase;
align-items: center;
display: flex;
font-weight: 400;
font-size: 1.09vw;
color: white;
background: black;
height: 28px;
border: 0;
}
.cart_button {
display: flex;
align-items: center;
cursor: pointer;
background: black;
height: 28px;
border: 0;
img {
width: 2.19vw;
}
}
}
}
}
@media screen and (min-width: 2499px) {
.header_top {
.search {
input {
height: 57px !important;
}
}
}
}
@media screen and (max-width: 1024px) {
.header_top {
.first_div {
.aside_menu {
display: flex;
padding-left: 16px;
background-color: black;
border: 0;
}
}
height: 139px;
.search {
position: absolute !important;
bottom: 25px !important;
left: 16px !important;
right: 16px !important;
input {
width: 100% !important;
font-size: 14px !important;
line-height: 16px !important;
}
img {
width: 18px !important;
}
}
.m3_logo {
width: 236px !important;
height: 25.86px !important;
padding: 0 !important;
}
.header_button {
.button_entrar {
display: none !important;
}
.cart_button {
img {
position: absolute !important;
width: 28px !important;
right: 16px !important;
}
}
}
}
}
@media screen and (max-width: 375px) {
.header_top {
.first_div {
img {
height: 18px !important;
}
}
.header_button {
.cart_button {
img {
height: 28px !important ;
}
}
}
}
}
// --------------------- Header Bottom --------------------- //
.header_bottom {
background: black;
margin-top: 1px;
display: flex;
flex-direction: row;
padding: 14px 0 14px 7.81vw;
gap: 55px;
.header_bottom_button {
background: black;
color: white;
border: 0;
text-transform: uppercase;
font-weight: 500;
font-size: 1.09vw;
cursor: pointer;
}
}
@media screen and (max-width: 1024px) {
.header_bottom {
display: none;
}
}

View File

@ -0,0 +1,121 @@
import styles from "./styles.module.scss";
import Homelogo from "../../assets/svg/Home.svg";
import Arrowright from "../../assets/svg/Arrowright.svg";
import { useState } from "react";
import ContactForm from "../ContactForm";
export default function Home() {
const [tabValue, setTabValue] = useState(0);
return (
<main>
<div className={styles.bread_crumb}>
<img
className={styles.bread_crumb_home}
src={Homelogo}
alt="home logo"
/>
<img
className={styles.bread_crumb_arrow}
src={Arrowright}
alt="arrow point to right"
/>
<h2>INSTITUCIONAL</h2>
</div>
<div className={styles.tab_title}>
<h2>INSTITUCIONAL</h2>
</div>
<div className={styles.tab_layout}>
<div className={styles.tabs}>
<button
className={tabValue === 0 ? styles.tab_active : ""}
onClick={() => {
setTabValue(0);
}}
>
Sobre
</button>
<button
className={tabValue === 1 ? styles.tab_active : ""}
onClick={() => {
setTabValue(1);
}}
>
Forma de Pagamento
</button>
<button
className={tabValue === 2 ? styles.tab_active : ""}
onClick={() => {
setTabValue(2);
}}
>
Entrega
</button>
<button
className={tabValue === 3 ? styles.tab_active : ""}
onClick={() => {
setTabValue(3);
}}
>
Troca e Devolução
</button>
<button
className={tabValue === 4 ? styles.tab_active : ""}
onClick={() => {
setTabValue(4);
}}
>
Segurança e Privacidade
</button>
<button
className={tabValue === 5 ? styles.tab_active : ""}
onClick={() => {
setTabValue(5);
}}
>
Contato
</button>
</div>
<div className={styles.tab_content}>
{(tabValue === 0 ||
tabValue === 1 ||
tabValue === 2 ||
tabValue === 3 ||
tabValue === 4) && (
<>
<h2>Sobre</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
<p>
Sed ut perspiciatis unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
quae ab illo inventore veritatis et quasi architecto beatae
vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
voluptas sit aspernatur aut odit aut fugit, sed quia
consequuntur magni dolores eos qui ratione voluptatem sequi
nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor
sit amet, consectetur, adipisci velit, sed quia non numquam eius
modi tempora incidunt ut labore et dolore magnam aliquam quaerat
voluptatem.
</p>
<p>
Ut enim ad minima veniam, quis nostrum exercitationem ullam
corporis suscipit laboriosam, nisi ut aliquid ex ea commodi
consequatur? Quis autem vel eum iure reprehenderit qui in ea
voluptate velit esse quam nihil molestiae consequatur, vel illum
qui dolorem eum fugiat quo voluptas nulla pariatur?
</p>
</>
)}
{tabValue === 5 && <ContactForm />}
</div>
</div>
</main>
);
}

View File

@ -0,0 +1,171 @@
.bread_crumb {
gap: 0.7vw;
margin-top: 29px;
margin-left: 7.8vw;
display: flex;
align-items: center;
justify-content: flex-start;
.bread_crumb_home {
height: 1.25vw;
}
.bread_crumb_arrow {
height: 0.62vw;
}
h2 {
font-weight: 400;
font-size: 0.93vw;
line-height: 1.09vw;
color: #c4c4c4;
}
}
.tab_title {
display: flex;
justify-content: center;
margin: 80px 0;
h2 {
font-weight: 400;
font-size: 1.88vw;
line-height: 28px;
letter-spacing: 0.1em;
}
}
.tab_layout {
display: flex;
margin: 0 7.8vw;
margin-bottom: 70px;
.tabs {
margin-right: 30px;
display: flex;
flex-direction: column;
white-space: nowrap;
border-right: solid 2px black;
max-height: 285px;
.tab_active {
background-color: black;
color: white;
font-weight: 700;
}
button {
cursor: pointer;
width: 302px;
height: 39px;
padding-left: 16px;
background-color: white;
color: #7d7d7d;
text-align: start;
font-weight: 400;
font-size: 16px;
line-height: 19px;
border: none;
}
}
}
.tab_content {
h2 {
margin-top: 10px;
margin-bottom: 12px;
font-weight: 700;
font-size: 24px;
line-height: 28px;
}
p {
margin-bottom: 15.23px;
font-weight: 400;
font-size: 13px;
line-height: 15px;
color: #7d7d7d;
}
}
@media screen and (min-width: 2500px) {
.tab_layout {
.tabs {
button {
width: 590px;
height: 58px;
font-weight: 700;
font-size: 32px;
line-height: 38px;
}
}
}
.tab_content {
h2 {
font-size: 48px;
line-height: 56px;
}
p {
font-size: 26px;
line-height: 30px;
color: #7d7d7d;
}
}
}
@media screen and (max-width: 1024px) {
.bread_crumb {
margin-left: 16px;
.bread_crumb_home {
height: 16px;
}
.bread_crumb_arrow {
height: 8px;
}
h2 {
font-size: 12px;
line-height: 14px;
}
}
.tab_title {
margin: 80px 0 40px;
h2 {
font-size: 24px;
}
}
.tab_layout {
display: flex;
flex-direction: column;
margin: 0 16px;
.tabs {
margin: 0;
border-right: none;
.tab_active {
width: 100% !important;
}
button {
width: 100% !important;
}
}
}
.tab_content {
margin-bottom: 81px;
h2 {
display: flex;
align-items: center;
justify-content: center;
}
p {
font-size: 12px;
line-height: 18px;
}
}
}

View File

@ -0,0 +1,3 @@
export default function Institutional() {
return <div>teste 2</div>;
}

View File

@ -0,0 +1,20 @@
import styles from "./styles.module.scss";
interface OverIconProps {
imgUrl: string;
action: () => void;
}
export default function OverIcon({ icons }: { icons: OverIconProps[] }) {
return (
<div className={styles.overIcon}>
{icons.map((icon) => {
return (
<button onClick={icon.action}>
<img src={icon.imgUrl} alt="" />
</button>
);
})}
</div>
);
}

View File

@ -0,0 +1,37 @@
.overIcon {
display: flex;
flex-direction: column-reverse;
position: fixed;
bottom: 189px;
right: 16px;
gap: 5px;
button {
border: 0;
background: none;
height: 34px;
img {
height: 100%;
}
}
}
@media screen and (min-width: 2500px) {
.overIcon {
bottom: 229.24px;
button {
height: 66px;
}
}
}
@media screen and (max-width: 1024px) {
.overIcon {
bottom: 51px;
}
}
@media screen and (max-width: 375px) {
.overIcon {
bottom: 29px;
}
}

View File

@ -0,0 +1,27 @@
import React, { createContext, ReactNode, useContext, useState } from "react";
interface AsideMenuContextProviderProps {
isAsideMenuOpen: boolean;
setAsideMenuOpen: React.Dispatch<React.SetStateAction<boolean>>;
}
export const asideMenuContext = createContext(
{} as AsideMenuContextProviderProps
);
export function useAside() {
return useContext(asideMenuContext);
}
export function AsideMenuContextProvider({
children,
}: {
children: ReactNode;
}) {
const [isAsideMenuOpen, setAsideMenuOpen] = useState(false);
return (
<asideMenuContext.Provider value={{ isAsideMenuOpen, setAsideMenuOpen }}>
{children}
</asideMenuContext.Provider>
);
}

11
src/index.css Normal file
View File

@ -0,0 +1,11 @@
body {
margin: 0;
font-family: "Roboto", sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}

13
src/index.tsx Normal file
View File

@ -0,0 +1,13 @@
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
const root = ReactDOM.createRoot(
document.getElementById("root") as HTMLElement
);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);

1
src/react-app-env.d.ts vendored Normal file
View File

@ -0,0 +1 @@
/// <reference types="react-scripts" />

26
tsconfig.json Normal file
View File

@ -0,0 +1,26 @@
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}

9570
yarn.lock Normal file

File diff suppressed because it is too large Load Diff